diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html index 25dd7fae1..d8f8cddbb 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html @@ -1,6 +1,6 @@

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

-

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

+

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

Главное

История выполнения

Дата начала выполнения

Принятие к исполнению

Выполнение задания

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

Выполнение задания

Невыполнение

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

Напоминание

Изменение задания

-

Дополнительные сведения о задаче

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

Изменение задания

+

Дополнительные сведения о задаче

См. также:

+
Для просмотра дополнительной информации о задаче выполните команду Еще - Дополнительно.

См. также:

Важность

Дата начала выполнения

Принятие к исполнению

Проверка выполнения

@@ -20,9 +20,9 @@
  • Подтвердите выполнение (нажав кнопку Выполнено),
  • После этого заполняется Дата выполнения, задача закрывается и становится защищенной от редактирования.
  • Невыполнение

    -

    См. также:

    Старт бизнес-процесса

    -

    Старт бизнес-процесса

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

    Управление движением бизнес-процесса

    Просмотр карты маршрута

    -

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

    -

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

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

    -

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

    +

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

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

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

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

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

    -
    \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/ManagerModule.bsl b/SSL/src/Catalogs/Валюты/ManagerModule.bsl index 8f6056e3c..00d6e2ffc 100644 --- a/SSL/src/Catalogs/Валюты/ManagerModule.bsl +++ b/SSL/src/Catalogs/Валюты/ManagerModule.bsl @@ -1,160 +1,198 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область ПрограммныйИнтерфейс - -#Область ДляВызоваИзДругихПодсистем - -// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов - -// Возвращает реквизиты объекта, которые разрешается редактировать -// с помощью обработки группового изменения реквизитов. -// -// Возвращаемое значение: -// Массив из Строка -// -Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт - - Результат = Новый Массив; - Результат.Добавить("СпособУстановкиКурса"); - Результат.Добавить("Наценка"); - Результат.Добавить("ОсновнаяВалюта"); - Результат.Добавить("ФормулаРасчетаКурса"); - Возврат Результат; - -КонецФункции - -// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов - -#КонецОбласти - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Функция КодыВалют() Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | Валюты.Ссылка КАК Ссылка, - | Валюты.Наименование КАК СимвольныйКод, - | Валюты.НаименованиеПолное КАК Представление - |ИЗ - | Справочник.Валюты КАК Валюты - |ГДЕ - | Валюты.СпособУстановкиКурса <> ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты) - | И Валюты.СпособУстановкиКурса <> ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.РасчетПоФормуле)"; - - Запрос = Новый Запрос(ТекстЗапроса); - - Валюты = Запрос.Выполнить().Выгрузить(); - КопируемыеСтроки = Новый Массив; - - Для Каждого Валюта Из Валюты Цикл - // Валюта участвует в формуле, если символьный код содержит буквы. - Если ЗначениеЗаполнено(СтрСоединить(СтрРазделить(Валюта.СимвольныйКод, "0123456789", Ложь), "")) Тогда - КопируемыеСтроки.Добавить(Валюта); - КонецЕсли; - КонецЦикла; - - Результат = Валюты.Скопировать(КопируемыеСтроки); - Результат.Индексы.Добавить("Ссылка"); - - Возврат Результат; - -КонецФункции - -Функция КурсВалютыПоФормуле(Формула, Период, КодыВалют = Неопределено) Экспорт - - Если КодыВалют = Неопределено Тогда - КодыВалют = Справочники.Валюты.КодыВалют(); - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ - | Валюты.Ссылка КАК Ссылка, - | Валюты.СимвольныйКод КАК СимвольныйКод - |ПОМЕСТИТЬ Валюты - |ИЗ - | &КодыВалют КАК Валюты - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Валюты.СимвольныйКод КАК СимвольныйКод, - | ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) / ЕСТЬNULL(КурсыВалютСрезПоследних.Кратность, 1) КАК Курс - |ИЗ - | Валюты КАК Валюты - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних - | ПО (КурсыВалютСрезПоследних.Валюта = Валюты.Ссылка)"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("КодыВалют", КодыВалют); - Запрос.УстановитьПараметр("Период", Период); - - Выражение = ФорматироватьЧисла(Формула); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Выражение = СтрЗаменить(Выражение, Выборка.СимвольныйКод, Формат(Выборка.Курс, "ЧРД=.; ЧГ=0")); - КонецЦикла; - - Возврат ОбщегоНазначения.ВычислитьВБезопасномРежиме(Выражение); - -КонецФункции - -Функция ФорматироватьЧисла(Строка) Экспорт - - Результат = ""; - Число = ""; - ЕстьРазделительВЧисле = Ложь; - ПредыдущийСимвол = ""; - - ДлинаСтроки = СтрДлина(Строка); - Для Индекс = 1 По ДлинаСтроки Цикл - Если Индекс < ДлинаСтроки Тогда - СледующийСимвол = Сред(Строка, Индекс + 1, 1); - Иначе - СледующийСимвол = ""; - КонецЕсли; - Символ = Сред(Строка, Индекс, 1); - - ПредыдущийСимволЭтоРазделитель = ПредыдущийСимвол = "" Или СтрНайти("()[]/*-+%=<>, ", ПредыдущийСимвол) > 0; - - Если ЭтоЦифра(Символ) И (ПредыдущийСимволЭтоРазделитель Или ЭтоЦифра(ПредыдущийСимвол) И ЗначениеЗаполнено(Число)) Тогда - Число = Число + Символ; - ИначеЕсли Не ЕстьРазделительВЧисле И (Символ = "," Или Символ = ".") И ЭтоЦифра(СледующийСимвол) - И (ЭтоЦифра(ПредыдущийСимвол) Или ПредыдущийСимволЭтоРазделитель) И ЗначениеЗаполнено(Число) Тогда - Число = Число + "."; - ЕстьРазделительВЧисле = Истина; - Иначе - Результат = Результат + Число + Символ; - Число = ""; - ЕстьРазделительВЧисле = Ложь; - КонецЕсли; - - ПредыдущийСимвол = Символ; - Символ = ""; - КонецЦикла; - - Результат = Результат + Число + Символ; - Возврат Результат; - -КонецФункции - -Функция ЭтоЦифра(Символ) - - Возврат СтрНайти("1234567890", Символ) > 0; - -КонецФункции - -#КонецОбласти - +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив из Строка +// +Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("СпособУстановкиКурса"); + Результат.Добавить("Наценка"); + Результат.Добавить("ОсновнаяВалюта"); + Результат.Добавить("ФормулаРасчетаКурса"); + Возврат Результат; + +КонецФункции + +// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция КодыВалют() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | Валюты.Ссылка КАК Ссылка, + | Валюты.Наименование КАК СимвольныйКод, + | Валюты.НаименованиеПолное КАК Представление + |ИЗ + | Справочник.Валюты КАК Валюты + |ГДЕ + | Валюты.СпособУстановкиКурса <> ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты) + | И Валюты.СпособУстановкиКурса <> ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.РасчетПоФормуле)"; + + Запрос = Новый Запрос(ТекстЗапроса); + + Валюты = Запрос.Выполнить().Выгрузить(); + КопируемыеСтроки = Новый Массив; + + Для Каждого Валюта Из Валюты Цикл + // Валюта участвует в формуле, если символьный код содержит буквы. + Если ЗначениеЗаполнено(СтрСоединить(СтрРазделить(Валюта.СимвольныйКод, "0123456789", Ложь), "")) Тогда + КопируемыеСтроки.Добавить(Валюта); + КонецЕсли; + КонецЦикла; + + Результат = Валюты.Скопировать(КопируемыеСтроки); + Результат.Индексы.Добавить("Ссылка"); + + Возврат Результат; + +КонецФункции + +Функция КурсВалютыПоФормуле(Формула, Период, КодыВалют = Неопределено) Экспорт + + Если КодыВалют = Неопределено Тогда + КодыВалют = Справочники.Валюты.КодыВалют(); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | Валюты.Ссылка КАК Ссылка, + | Валюты.СимвольныйКод КАК СимвольныйКод + |ПОМЕСТИТЬ Валюты + |ИЗ + | &КодыВалют КАК Валюты + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Валюты.СимвольныйКод КАК СимвольныйКод, + | ВЫБОР + | КОГДА ЕСТЬNULL(КурсыВалютСрезПоследних.Кратность, 1) > 0 + | ТОГДА ЕСТЬNULL(КурсыВалютСрезПоследних.Курс, 1) / ЕСТЬNULL(КурсыВалютСрезПоследних.Кратность, 1) + | ИНАЧЕ 1 + | КОНЕЦ КАК Курс + |ИЗ + | Валюты КАК Валюты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних + | ПО (КурсыВалютСрезПоследних.Валюта = Валюты.Ссылка)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("КодыВалют", КодыВалют); + Запрос.УстановитьПараметр("Период", Период); + + Выражение = ФорматироватьЧисла(Формула); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Выражение = СтрЗаменить(Выражение, Выборка.СимвольныйКод, Формат(Выборка.Курс, "ЧРД=.; ЧГ=0")); + КонецЦикла; + + Возврат ОбщегоНазначения.ВычислитьВБезопасномРежиме(Выражение); + +КонецФункции + +Функция ФорматироватьЧисла(Строка) Экспорт + + Результат = ""; + Число = ""; + ЕстьРазделительВЧисле = Ложь; + ПредыдущийСимвол = ""; + + ДлинаСтроки = СтрДлина(Строка); + Для Индекс = 1 По ДлинаСтроки Цикл + Если Индекс < ДлинаСтроки Тогда + СледующийСимвол = Сред(Строка, Индекс + 1, 1); + Иначе + СледующийСимвол = ""; + КонецЕсли; + Символ = Сред(Строка, Индекс, 1); + + ПредыдущийСимволЭтоРазделитель = ПредыдущийСимвол = "" Или СтрНайти("()[]/*-+%=<>, ", ПредыдущийСимвол) > 0; + + Если ЭтоЦифра(Символ) И (ПредыдущийСимволЭтоРазделитель Или ЭтоЦифра(ПредыдущийСимвол) И ЗначениеЗаполнено(Число)) Тогда + Число = Число + Символ; + ИначеЕсли Не ЕстьРазделительВЧисле И (Символ = "," Или Символ = ".") И ЭтоЦифра(СледующийСимвол) + И (ЭтоЦифра(ПредыдущийСимвол) Или ПредыдущийСимволЭтоРазделитель) И ЗначениеЗаполнено(Число) Тогда + Число = Число + "."; + ЕстьРазделительВЧисле = Истина; + Иначе + Результат = Результат + Число + Символ; + Число = ""; + ЕстьРазделительВЧисле = Ложь; + КонецЕсли; + + ПредыдущийСимвол = Символ; + Символ = ""; + КонецЦикла; + + Результат = Результат + Число + Символ; + Возврат Результат; + +КонецФункции + +Функция ЭтоЦифра(Символ) + + Возврат СтрНайти("1234567890", Символ) > 0; + +КонецФункции + +// Возвращаемое значение: +// Массив из СправочникСсылка.Валюты +// +Функция ВалютыЗагружаемыеИзИнтернета() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | Валюты.Ссылка КАК Ссылка, + | Валюты.Код КАК Код + |ИЗ + | Справочник.Валюты КАК Валюты + |ГДЕ + | НЕ Валюты.ПометкаУдаления + | И Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета)"; + + Запрос = Новый Запрос(ТекстЗапроса); + Валюты = Запрос.Выполнить().Выгрузить(); + + КодыВалютЗагружаемыхИзИнтернета = Валюты.ВыгрузитьКолонку("Код"); + РаботаСКурсамиВалютЛокализация.ПриОпределенииКодовВалютЗагружаемыхИзИнтернета(КодыВалютЗагружаемыхИзИнтернета); + + Результат = Новый Массив; + + Для Каждого Валюта Из Валюты Цикл Если КодыВалютЗагружаемыхИзИнтернета.Найти(Валюта.Код) <> Неопределено Тогда + Результат.Добавить(Валюта.Ссылка); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/ObjectModule.bsl b/SSL/src/Catalogs/Валюты/ObjectModule.bsl index 75ba39f76..3cf0e6b6b 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -157,6 +157,14 @@ КонецПроцедуры +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) + + Если ДанныеЗаполнения = Неопределено Тогда + СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html b/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html index 10128117b..72b643ede 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Help/ru.html @@ -1,9 +1,9 @@

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

    -

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

    +

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

    Задайте возможные варианты ответов на вопрос.

    -

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

    -

    См. также:

    +

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

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form index 8f5364e22..2b0a8fc4a 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form @@ -385,6 +385,7 @@ true UserCmds Auto + InCommandBarAndInAdditionalSubmenu ДеревоПодсистемСнятьФлажки @@ -466,6 +467,33 @@ true + + ФормаСправка + 104 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html index 5c297a252..73e735386 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html @@ -1,19 +1,19 @@ -

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

    +

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

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

    +
  • Для подтверждения выбора нажмите Разместить.
  • См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl index 0d3bab88a..8f7731df8 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Module.bsl @@ -62,8 +62,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#Область ВызовСервера &НаСервереБезКонтекста Функция СброситьНастройкиРазмещенияСервер(Знач ИзменяемыеВарианты) @@ -92,8 +91,9 @@ Возврат КоличествоВариантов; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура ОпределитьПоведениеВМобильномКлиенте() @@ -140,4 +140,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl index a0823b599..c34077a45 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Module.bsl @@ -67,8 +67,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#Область ВызовСервера &НаСервереБезКонтекста Процедура СброситьНастройкиПользователейСервер(Знач ИзменяемыеВарианты) @@ -90,8 +89,9 @@ КонецПопытки; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура ОпределитьПоведениеВМобильномКлиенте() @@ -118,4 +118,6 @@ Возврат ЕстьПользовательскиеНастройки; КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index 288e8ec24..f9a6141c0 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -2141,6 +2141,14 @@ Предопределенный Предопределенный + + <localValue> + <content> + <key>ru</key> + <value>Предопределенный</value> + </content> + </localValue> + ИмяПредопределенныхДанных diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html index fd416d75d..603e3dea4 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,21 +1,21 @@

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

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

    -

    Доступность

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

    Размещение в панелях отчетов

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

    -

    Формирование отчета

    -

    Сброс настроек

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

    Сброс настроек

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

    -

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html index a22cc01d9..865ea739c 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html @@ -1,42 +1,42 @@ -

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

    +

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

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

    -

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

    -

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

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

    +

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

    +

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

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

    -

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

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

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

    Поиск

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

    -

    Формирование отчета

    Настройка варианта отчета

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

    Настройка варианта отчета

    Обновление варианта отчета из файла

    -

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl index 7923aad14..62433beaf 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ВерсииФайла/Module.bsl @@ -11,13 +11,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке динамического списка присоединенных файлов.'"); - ОкончаниеОшибки = НСтр("ru = 'В этом случае настройка динамического списка невозможна.'"); - + ЗаголовокОшибки = НСтр("ru = 'Невозможно открыть список присоединенных файлов.'"); ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Файл, "ВладелецФайла"); - ИмяСправочникаХранилищаВерсийФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияВерсийФайлов( - ВладелецФайла, "", ЗаголовокОшибки, ОкончаниеОшибки); + ВладелецФайла, "", ЗаголовокОшибки); Если Не ПустаяСтрока(ИмяСправочникаХранилищаВерсийФайлов) Тогда НастроитьДинамическийСписок(ИмяСправочникаХранилищаВерсийФайлов); diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html index 982938ade..54aea1be7 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Help/ru.html @@ -2,17 +2,17 @@

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

    Вызывается из карточки версии файла при выборе Родительской версии.

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

    -

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html index 78f62d5a6..23fe63015 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html @@ -1,34 +1,34 @@

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

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

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

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

    +
    Размер (байт) - размер данных версии файла в байтах.

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

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

    -

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

    -

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

    -

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

    -

    Сохранение версии файла на компьютер

    -

    См. также: 

    +

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

    +

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

    +

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

    +

    Сохранение версии файла на компьютер

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl index fa04f2bb5..4b6ed76df 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ManagerModule.bsl @@ -78,6 +78,10 @@ // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + ПараметрыВыборки = Параметры.ПараметрыВыборки; + ПараметрыВыборки.ПолныеИменаОбъектов = "Справочник.ВерсииФайлов"; + ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки(); + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 | ВерсииФайлов.Ссылка КАК Ссылка @@ -86,108 +90,132 @@ |ГДЕ | ВерсииФайлов.Ссылка > &Ссылка | И ВерсииФайлов.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) - | И (ПОДСТРОКА(ВерсииФайлов.ПутьКФайлу, 1, 1) = ""/"" - | ИЛИ ПОДСТРОКА(ВерсииФайлов.ПутьКФайлу, 1, 1) = ""\"") | |УПОРЯДОЧИТЬ ПО | Ссылка"; + ОтработаныВсеФайлы = Ложь; + Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", ПустаяСсылка()); - Результат = Запрос.Выполнить().Выгрузить(); - Пока Результат.Количество() > 0 Цикл - ВерсииДляОбработки = Результат.ВыгрузитьКолонку("Ссылка"); - ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ВерсииДляОбработки); - Запрос.УстановитьПараметр("Ссылка", ВерсииДляОбработки[ВерсииДляОбработки.ВГраница()]); + Ссылка = ПустаяСсылка(); + Пока Не ОтработаныВсеФайлы Цикл + + Запрос.УстановитьПараметр("Ссылка", Ссылка); //@skip-check query-in-loop - Порционная регистрация данных для обработки - Результат = Запрос.Выполнить().Выгрузить(); + ВерсииДляОбработки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ВерсииДляОбработки); + + КоличествоСсылок = ВерсииДляОбработки.Количество(); + Если КоличествоСсылок < 1000 Тогда + ОтработаныВсеФайлы = Истина; + ИначеЕсли КоличествоСсылок > 0 Тогда + Ссылка = ВерсииДляОбработки[КоличествоСсылок - 1]; + КонецЕсли; + КонецЦикла; КонецПроцедуры -Процедура ОбработатьПутьХраненияВерсий(Параметры) Экспорт +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт - ВерсияСсылка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВерсииФайлов"); + ВыбранныеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры); ПроблемныхОбъектов = 0; ОбъектовОбработано = 0; - СписокОшибок = Новый Массив; - Пока ВерсияСсылка.Следующий() Цикл - Результат = УдалитьЛишнийРазделитель(ВерсияСсылка.Ссылка); - - Если Результат.Статус = "Ошибка" Тогда - ПроблемныхОбъектов = ПроблемныхОбъектов + 1; - СписокОшибок.Добавить(Результат.ТекстОшибки); - Иначе + Для Каждого Строка Из ВыбранныеДанные Цикл + + Если ОбработатьВерсиюФайла(Строка.Ссылка) Тогда ОбъектовОбработано = ОбъектовОбработано + 1; - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВерсияСсылка.Ссылка); - КонецЕсли; - - Если ОбъектовОбработано + ПроблемныхОбъектов = 1000 Тогда - Прервать; + Иначе + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; КонецЕсли; КонецЦикла; - Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, - "Справочник.ВерсииФайлов"); - Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать некоторые версии файлов (пропущены): %1 - |%2'"), ПроблемныхОбъектов, СтрСоединить(СписокОшибок, Символы.ПС)); + НСтр("ru = 'Не удалось обработать файлы (пропущены): %1'"), + ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; - Иначе - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ВерсииФайлов,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обработана очередная порция версий файлов: %1'"), - ОбъектовОбработано)); КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработана очередная порция файлов: %1'"), + ОбъектовОбработано)); + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ВерсииФайлов"); + КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -Функция УдалитьЛишнийРазделитель(ВерсияСсылка) - - Результат = Новый Структура; - Результат.Вставить("Статус", "ОбновлениеНеТребуется"); - Результат.Вставить("ТекстОшибки", ""); - НовыйПутьКФайлу = Сред(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ПутьКФайлу"), 2); +Функция ОбработатьВерсиюФайла(ВерсияСсылка) + Результат = Истина; + ПредставлениеСсылки = Строка(ВерсияСсылка); + Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииФайлов"); ЭлементБлокировки.УстановитьЗначение("Ссылка", ВерсияСсылка); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; НачатьТранзакцию(); Попытка - Блокировка.Заблокировать(); - ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); - ВерсияОбъект.ОбменДанными.Загрузка = Истина; - ВерсияОбъект.ПутьКФайлу = НовыйПутьКФайлу; - ВерсияОбъект.Записать(); + + ВерсияОбъект = Неопределено; + ТребуетсяЗаписать = Ложь; + + // @skip-check query-in-loop - Порционная обработка большого объема данных. + ПутьКФайлу = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ПутьКФайлу"); + Если СтрНачинаетсяС(ПутьКФайлу, "/") Или СтрНачинаетсяС(ПутьКФайлу, "\") Тогда + НовыйПутьКФайлу = Сред(ПутьКФайлу, 2); + + ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); + Если ВерсияОбъект = Неопределено Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВерсияСсылка); + ЗафиксироватьТранзакцию(); + Возврат Результат; + КонецЕсли; + ВерсияОбъект.ПутьКФайлу = НовыйПутьКФайлу; + ТребуетсяЗаписать = Истина; + КонецЕсли; + + Если ВерсияОбъект = Неопределено Тогда + ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); + Если ВерсияОбъект = Неопределено Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВерсияСсылка); + ЗафиксироватьТранзакцию(); + Возврат Результат; + КонецЕсли; + КонецЕсли; + + ДвоичныеДанныеФайла = Неопределено; + ХранилищеДвоичныхДанныхФайла = ВерсияОбъект.ФайлХранилище; + ДвоичныеДанныеФайла = ?(ТипЗнч(ХранилищеДвоичныхДанныхФайла) = Тип("ХранилищеЗначения"), + ХранилищеДвоичныхДанныхФайла.Получить(), Неопределено); + + Если ДвоичныеДанныеФайла <> Неопределено Тогда + ВерсияОбъект.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + ТребуетсяЗаписать = Истина; + КонецЕсли; + + Если ТребуетсяЗаписать Тогда + ВерсияОбъект.Записать(); + Иначе + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВерсияСсылка); + КонецЕсли; - Результат.Статус = "Обновлен"; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - Результат.Статус = "Ошибка"; - Результат.ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать версию файла %1 по причине: %2'"), ВерсияСсылка, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.ВерсииФайлов, ВерсияСсылка, ТекстСообщения); + Результат = Ложь; + ОбновлениеИнформационнойБазы.ЗаписатьОшибкуВЖурналРегистрации(ВерсияСсылка, + ПредставлениеСсылки, ИнформацияОбОшибке()); КонецПопытки; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Help/ru.html index b2a8dc3b2..d7eeb7c06 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Help/ru.html @@ -1,7 +1,7 @@

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

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

    -

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

    +

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

    Выбор вида контактной информации

    См. также:

    Настройки полей контактной информации

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

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

    -

    -

    +

    +

    Международный формат адреса

    -

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

    +

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

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

    -

    Для получения подробной информации о том, Как запустить - определенное клиентское приложение, см. инструкцию по разработке на портале 1С:ИТС.

    + определенное клиентское приложение, см. инструкцию по разработке на портале 1С:ИТС.

    Сохранение на компьютер

    См. также:

    +
  • Нажмите Сохранить как. Укажите путь к файлу на компьютере. Нажмите Сохранить.
  • См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl index 3906c5237..05780060e 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Module.bsl @@ -75,7 +75,7 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", ДвоичныеДанныеКомпоненты); КонецЕсли; - ТекущийОбъект.ЦелевыеПлатформы = Новый ХранилищеЗначения(ЦелевыеПлатформы); + ТекущийОбъект.ЦелевыеПлатформы = Новый ХранилищеЗначения(ЦелевыеПлатформы, Новый СжатиеДанных(9)); КонецПроцедуры diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html b/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html index ea581cee2..c0fafc813 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/Help/ru.html @@ -1,46 +1,46 @@

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

    -

    Внешние компоненты - специальные приложения, которые могут обеспечивать:

    +

    Внешние компоненты - специальные приложения, которые могут обеспечивать:

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

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

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

    -

    В списке отражаются все установленные в приложении внешние компоненты. В колонке  флажками обозначаются внешние компоненты, которые обновляются с сайта 1С:ИТС.

    +

    В списке отражаются все установленные в приложении внешние компоненты. В колонке флажками обозначаются внешние компоненты, которые обновляются с сайта 1С:ИТС.

    -

    Подключение внешней компоненты

    -

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

    -

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

    Обновление внешней компоненты с портала 1С:ИТС

    Обновление внешней компоненты из файла

    -

    Отборы в списке

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl index 562d4aee8..89578ad38 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ManagerModule.bsl @@ -310,7 +310,7 @@ КомпонентаОбъект = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ВнешниеКомпоненты Если ОбновитьПоддерживаемыеПлатформыКомпоненты Тогда - КомпонентаОбъект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Реквизиты.ЦелевыеПлатформы); + КомпонентаОбъект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Реквизиты.ЦелевыеПлатформы, Новый СжатиеДанных(9)); КонецЕсли; Если ОбновитьПараметрыКомпонентыСканирования И РеквизитыКомпоненты.Идентификатор = "AddInNativeExtension" Тогда diff --git a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl index a85bec0ed..4ef0101d5 100644 --- a/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеКомпоненты/ObjectModule.bsl @@ -42,7 +42,7 @@ // Помещение двоичных данных компоненты ДвоичныеДанныеКомпоненты = Неопределено; Если ДополнительныеСвойства.Свойство("ДвоичныеДанныеКомпоненты", ДвоичныеДанныеКомпоненты) Тогда - ХранилищеКомпоненты = Новый ХранилищеЗначения(ДвоичныеДанныеКомпоненты); + ХранилищеКомпоненты = Новый ХранилищеЗначения(ДвоичныеДанныеКомпоненты, Новый СжатиеДанных(9)); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index c9adbf95c..a9b4a429b 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -668,8 +668,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка группового изменения объектов. +#Область ПоддержкаГрупповогоИзмененияОбъектов &НаКлиенте Процедура ИзменитьВыделенные(Команда) @@ -683,6 +682,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращаемое значение: @@ -1186,8 +1187,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Перетаскивание пользователей. +#Область ПеретаскиваниеПользователей // Обработчик вопроса. // @@ -1274,3 +1274,5 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index aed551f70..f72777a60 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,11 +1,11 @@ -

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

    -

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

    +

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

    +

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

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

    -

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

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

    +

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

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

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

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

    -

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

    -

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

    +

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

    +

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

    +

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

    -

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

    +

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

    -

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

    +

    Ограничения на вход в приложение

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

    Ограничения на вход в приложение

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

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

    -

    Предупреждения приложения

    -

    См. также

    +

    Предупреждения приложения

    +

    См. также

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index fcaa4683d..2890fba9a 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -895,8 +895,7 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаКлиенте Процедура РолиПометкаПриИзменении(Элемент) @@ -907,8 +906,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка дополнительных реквизитов. +#КонецОбласти + +#Область ПоддержкаДополнительныхРеквизитов &НаКлиенте Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) @@ -922,6 +922,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -944,8 +946,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -981,6 +982,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -1467,8 +1470,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка дополнительных реквизитов. +#Область ПоддержкаДополнительныхРеквизитов &НаСервере Процедура СвойстваВыполнитьОтложеннуюИнициализацию() @@ -1521,8 +1523,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработка пользователя ИБ +#КонецОбласти + +#Область ОбработкаПользователяИБ &НаСервере Процедура ПрочитатьРолиПользователяИБ() @@ -1841,8 +1844,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Начальное заполнение, проверка заполнения, доступность свойств. +#КонецОбласти + +#Область НачальноеЗаполнениеПроверкаЗаполненияДоступностьСвойств &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьСвойств(Форма) @@ -1997,8 +2001,9 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#КонецОбласти + +#Область ДляРаботыИнтерфейсаРолей &НаСервере Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) @@ -2013,4 +2018,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index cd5875062..4bda2e483 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html @@ -1,72 +1,72 @@ -

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

    +

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

    Открыть список внешних пользователей можно из раздела Администрирование - Настройки пользователей и прав. Также можно его открыть из раздела Анкетирование (Управление доступом).

    -

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

    +

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

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Отбор внешних пользователей

    Просмотр внешних пользователей нижестоящих групп

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

    Просмотр внешних пользователей нижестоящих групп

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

    -

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

    -

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

    -

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

    +

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

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

    -

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

    +

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

    -

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index c62bd1cc8..d80e42147 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,35 +1,35 @@

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

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

    -

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

    +

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

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

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

    -

    В зависимости от состава приложения настраиваются одним из способов:

    +
    На вкладке Комментарий можно написать подробное описание данной группы.

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

    +

    В зависимости от состава приложения настраиваются одним из способов:

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

    -

    См. также:

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

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl index b894c9ee2..b1bc4b3f8 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -370,8 +370,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -407,6 +406,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -754,8 +755,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаСервере Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) @@ -771,3 +771,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html index 8c8f44ef2..c09a3cd40 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html @@ -1,15 +1,15 @@ -

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

    -

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

    +

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

    +

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

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

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

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

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

    -

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

    +

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

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

    -

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

    +

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index f357734bd..e99979c0f 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -891,8 +891,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ВсеРазрешеныПредставление таблицы формы ВидыДоступа. +#Область ОбработчикиСобытийЭлементаВсеРазрешеныПредставлениеТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаВсеРазрешеныПредставлениеПриИзменении(Элемент) @@ -912,6 +911,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа &НаКлиенте @@ -1779,4 +1780,4 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html index bd9fdc1d1..5dc2ab632 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html @@ -1,19 +1,19 @@ -

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

    +

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

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

    -

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

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

    +

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

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

    -

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

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

    -

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

    +

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

    См. также

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl index 32dca6dcb..5e0570e44 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -2511,8 +2511,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для поддержки обмена данными в РИБ. +#Область ПроцедурыИФункцииДляПоддержкиОбменаДаннымиВРИБ // Только для внутреннего использования. // @@ -2746,8 +2745,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Начальное заполнение +#КонецОбласти + +#Область НачальноеЗаполнение // Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлементов // @@ -2776,8 +2776,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы Процедура ЗаполнитьПрофильГруппыДоступаАдминистраторы() Экспорт @@ -2987,4 +2988,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index edc791f3b..6b5eb9f22 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -38,6 +38,19 @@ Возврат; КонецЕсли; + Если УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() + И ПоддерживаетсяНастройкаПравПользователейБТС() Тогда + + // Для УправлениеДоступомСлужебныйВМоделиСервиса.УчастникиПоПрофилю + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Профиль); + + // АПК:1320-выкл - Попытка-Исключение не требуется, т.к. блокировка выполняется в обработчике ПередЗаписью + Блокировка.Заблокировать(); + // АПК:1320-вкл + КонецЕсли; + РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра(); Если Не Справочники.ВерсииРасширений.ВсеРасширенияПодключены() Тогда @@ -65,9 +78,8 @@ Ответственный = Неопределено; // Изменение разрешено только полноправному пользователю. - Если НЕ ПривилегированныйРежим() - И НЕ УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда - + МодульПользователи = ОбщегоНазначения.ОбщийМодуль("Пользователи"); + Если Не МодульПользователи.ЭтоПолноправныйПользователь() Тогда ВызватьИсключение НСтр("ru = 'Предопределенную группу доступа Администраторы |можно изменять, либо в привилегированном режиме, @@ -146,6 +158,7 @@ // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. Если ЭтоГруппа Тогда + ОтправитьСообщениеИзмененияГруппыДоступа(); Возврат; КонецЕсли; @@ -209,6 +222,22 @@ КонецЕсли; КонецЕсли; + ОтправитьСообщениеИзмененияГруппыДоступа(); + +КонецПроцедуры + +Процедура ОтправитьСообщениеИзмененияГруппыДоступа(ЭтоУдаление = Ложь) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ПоддерживаетсяУправлениеДоступомВМоделиСервиса() Тогда + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль( + "УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ОтправитьСообщениеИзмененияГруппыДоступа(ЭтотОбъект, ЭтоУдаление); + КонецЕсли; + КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -220,6 +249,16 @@ КонецПроцедуры +Процедура ПередУдалением(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ОтправитьСообщениеИзмененияГруппыДоступа(Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -343,6 +382,26 @@ КонецПроцедуры +Функция ПоддерживаетсяУправлениеДоступомВМоделиСервиса() + + Возврат ОбщегоНазначения.ПодсистемаСуществует( + "СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса"); + +КонецФункции + +Функция ПоддерживаетсяНастройкаПравПользователейБТС() + + Если Не ПоддерживаетсяУправлениеДоступомВМоделиСервиса() Тогда + Возврат Ложь; + КонецЕсли; + + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль( + "УправлениеДоступомСлужебныйВМоделиСервиса"); + + Возврат МодульУправлениеДоступомСлужебныйВМоделиСервиса.ПоддерживаетсяНастройкаПравПользователейБТС(); + +КонецФункции + #КонецОбласти #Иначе diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html index f8aef3df5..639e8399a 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html @@ -1,22 +1,22 @@

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

    -

    Открывается с помощью кнопки  в списке Пользователи.

    -

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

    +

    Открывается с помощью кнопки в списке Пользователи.

    +

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

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

  • -
    На вкладке Участники группы можно ввести пользователей в группу. 
    -

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

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

    См. также:

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html index dcf134a6a..a58efc7d5 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html @@ -1,6 +1,6 @@

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

    -

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

    +

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

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

    -

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

    -

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

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

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

    +

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

    +

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

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

    -

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

    +

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

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

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

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

    См. также:

    -

     

    \ No newline at end of file +

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index e7b9d8356..2562148b2 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -144,6 +144,13 @@ ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); + Если ОбщегоНазначения.ПодсистемаСуществует( + "СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль( + "УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ОтправитьСообщениеИзмененияГруппыПользователей(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры Процедура ПередУдалением(Отказ) @@ -154,6 +161,14 @@ ПользователиСлужебный.ОбновитьСоставыГруппПередУдалениемПользователяИлиГруппы(Ссылка); + Если ОбщегоНазначения.ПодсистемаСуществует( + "СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль( + "УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ОтправитьСообщениеИзмененияГруппыПользователей( + ЭтотОбъект, Истина); + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form index 500a632de..3db3e6f25 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/РазмещениеВРазделах/Form.form @@ -328,6 +328,8 @@ OnCreateAtServer ПриСозданииНаСервере + 50 + 30 LockOwner true true @@ -358,6 +360,7 @@ Раздел 1 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index 0180b101a..3e7ccc6f9 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -4167,6 +4167,12 @@ DontUse Auto + + ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии + + Boolean + + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index 281e9d5ea..71def8042 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -1,34 +1,34 @@ -

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

    -

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

    +

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

    +

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

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

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

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

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

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

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

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

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

      +

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

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

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

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

    • Выводятся дополнительные сведения, которые заполняются разработчиком:
      • Вид - существует несколько видов дополнительных отчетов и обработок:
        • Дополнительный отчет; @@ -48,35 +48,35 @@
        • Описание - подробная информация о дополнительном отчете или обработке.
      • Группа - включите дополнительную обработку или отчет в одну из групп. Выберите нужную группу из списка. Группы помогают упорядочить дополнительные отчеты и обработки.

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

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

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

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

      Режим работы

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

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

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

        Режим работы

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

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

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

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

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

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

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

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

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

      Пример реализации функции СведенияОВнешнейОбработке с использованием программного интерфейса 

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

    Пример реализации функции СведенияОВнешнейОбработке с использованием программного интерфейса

    Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<...>();
    ПараметрыРегистрации.Версия = "...";
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = '<Представление команды>'");
    Команда.Идентификатор = "<Имя команды>";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<...>();
    Команда.ПоказыватьОповещение = <Истина/Ложь>;
    Возврат ПараметрыРегистрации;
    КонецФункции

    Подробнее см. на сайте ИТС.

    См. также:

    diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index 7d798ce12..e35b61689 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -73,7 +73,7 @@ ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет; ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет; - Параметры.Свойство("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии); + ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии; Если ЭтоНовый Тогда Объект.ИспользоватьДляФормыОбъекта = Истина; @@ -583,8 +583,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи) @@ -1095,8 +1094,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент, Сервер +#КонецОбласти + +#Область КлиентСервер &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеБыстрогоДоступаПользователей(КоличествоПользователей) @@ -1112,8 +1112,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера, Сервер +#КонецОбласти + +#Область ВызовСервераСервер &НаСервереБезКонтекста Функция НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор) @@ -1272,44 +1273,10 @@ КонецЦикла; КонецЕсли; - КоличествоРазрешений = РазрешенияПрофиляБезопасности().Количество(); - РежимСовместимостиРазрешений = Объект.РежимСовместимостиРазрешений; - - БезопасныйРежим = Объект.БезопасныйРежим; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности(); - Иначе - ИспользуютсяПрофилиБезопасности = Ложь; - КонецЕсли; - - Если ПолучитьФункциональнуюОпцию("РаботаВМоделиСервиса") Или ИспользуютсяПрофилиБезопасности Тогда - МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный"); - Если РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3 Тогда - Если БезопасныйРежим И КоличествоРазрешений > 0 И ИспользуютсяПрофилиБезопасности Тогда - Если ЭтоНовый Тогда - БезопасныйРежим = ""; - Иначе - БезопасныйРежим = МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка); - КонецЕсли; - КонецЕсли; - Иначе - Если КоличествоРазрешений = 0 Тогда - БезопасныйРежим = Истина; - Иначе - Если ИспользуютсяПрофилиБезопасности Тогда - Если ЭтоНовый Тогда - БезопасныйРежим = ""; - Иначе - БезопасныйРежим = МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка); - КонецЕсли; - Иначе - БезопасныйРежим = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; + СвойстваБезопасногоРежима = СвойстваБезопасногоРежима(); + БезопасныйРежим = СвойстваБезопасногоРежима.БезопасныйРежим; + КоличествоРазрешений = СвойстваБезопасногоРежима.КоличествоРазрешений; + ИспользуютсяПрофилиБезопасности = СвойстваБезопасногоРежима.ИспользуютсяПрофилиБезопасности; Если КоличествоРазрешений = 0 Тогда @@ -1366,28 +1333,10 @@ КонецЕсли; - Элементы.СтраницыВариантыКомандыРазрешения.ОтображениеСтраниц = ОтображениеСтраницФормы[?(КоличествоВидимыхЗакладок > 1, "ЗакладкиСверху", "Нет")]; + Элементы.СтраницыВариантыКомандыРазрешения.ОтображениеСтраниц = ОтображениеСтраницФормы[ + ?(КоличествоВидимыхЗакладок > 1, "ЗакладкиСверху", "Нет")]; - ПредставлениеНазначения = ""; - Если ЭтоГлобальнаяОбработка Тогда - Для Каждого СтрокаРаздел Из Объект.Разделы Цикл - ПредставлениеРаздела = ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(СтрокаРаздел.Раздел); - Если ПредставлениеРаздела = Неопределено Тогда - Продолжить; - КонецЕсли; - ПредставлениеНазначения = ?(ПустаяСтрока(ПредставлениеНазначения), ПредставлениеРаздела, - ПредставлениеНазначения + ", " + ПредставлениеРаздела); - КонецЦикла; - Иначе - Для Каждого СтрокаНазначение Из Объект.Назначение Цикл - ПредставлениеОбъекта = ДополнительныеОтчетыИОбработки.ПредставлениеОбъектаМетаданных(СтрокаНазначение.ОбъектНазначения); - ПредставлениеНазначения = ?(ПустаяСтрока(ПредставлениеНазначения), ПредставлениеОбъекта, - ПредставлениеНазначения + ", " + ПредставлениеОбъекта); - КонецЦикла; - КонецЕсли; - Если ПредставлениеНазначения = "" Тогда - ПредставлениеНазначения = НСтр("ru = 'Не определено'"); - КонецЕсли; + ПредставлениеНазначения = ПредставлениеНазначения(ЭтоГлобальнаяОбработка); Элементы.ОбъектКомандыБыстрыйДоступПредставление.Видимость = ЭтоГлобальнаяОбработка; Элементы.ОбъектКомандыНастроитьБыстрыйДоступ.Видимость = ЭтоГлобальнаяОбработка; @@ -1405,37 +1354,93 @@ Элементы.ОбъектКомандыКомментарий.Видимость = ЭтоПечатнаяФорма; Если ЭтоНовый Тогда - Заголовок = ?(ЭтоОтчет, НСтр("ru = 'Дополнительный отчет (создание)'"), НСтр("ru = 'Дополнительная обработка (создание)'")); + Заголовок = ?(ЭтоОтчет, НСтр("ru = 'Дополнительный отчет (создание)'"), + НСтр("ru = 'Дополнительная обработка (создание)'")); Иначе - Заголовок = Объект.Наименование + " " + ?(ЭтоОтчет, НСтр("ru = '(Дополнительный отчет)'"), НСтр("ru = '(Дополнительная обработка)'")); + Заголовок = Объект.Наименование + " " + ?(ЭтоОтчет, НСтр("ru = '(Дополнительный отчет)'"), + НСтр("ru = '(Дополнительная обработка)'")); КонецЕсли; Если КоличествоВариантов > 0 Тогда - - ВыводитьЗаголовокТаблицы = КоличествоВидимыхЗакладок <= 1 И Объект.Вид = ВидДополнительныйОтчет И Объект.ИспользуетХранилищеВариантов; - - Элементы.ВариантыДополнительногоОтчета.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы[?(ВыводитьЗаголовокТаблицы, "Верх", "Нет")]; + ВыводитьЗаголовокТаблицы = КоличествоВидимыхЗакладок <= 1 И Объект.Вид = ВидДополнительныйОтчет + И Объект.ИспользуетХранилищеВариантов; + Элементы.ВариантыДополнительногоОтчета.ПоложениеЗаголовка = + ПоложениеЗаголовкаЭлементаФормы[?(ВыводитьЗаголовокТаблицы, "Верх", "Нет")]; Элементы.ВариантыДополнительногоОтчета.Шапка = НЕ ВыводитьЗаголовокТаблицы; Элементы.ВариантыДополнительногоОтчета.ГоризонтальныеЛинии = НЕ ВыводитьЗаголовокТаблицы; - КонецЕсли; Если КоличествоКоманд > 0 Тогда - ВыводитьЗаголовокТаблицы = КоличествоВидимыхЗакладок <= 1 И НЕ ЭтоГлобальнаяОбработка; - - Элементы.ОбъектКоманды.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы[?(ВыводитьЗаголовокТаблицы, "Верх", "Нет")]; + Элементы.ОбъектКоманды.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы[ + ?(ВыводитьЗаголовокТаблицы, "Верх", "Нет")]; Элементы.ОбъектКоманды.Шапка = НЕ ВыводитьЗаголовокТаблицы; Элементы.ОбъектКоманды.ГоризонтальныеЛинии = НЕ ВыводитьЗаголовокТаблицы; - КонецЕсли; КлючСохраненияПоложенияОкна = ДополнительныеОтчетыИОбработки.ВидВСтроку(Объект.Вид); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +&НаСервере +Функция СвойстваБезопасногоРежима() + + Результат = Новый Структура; + Результат.Вставить("БезопасныйРежим", Объект.БезопасныйРежим); + Результат.Вставить("КоличествоРазрешений", РазрешенияПрофиляБезопасности().Количество()); + Результат.Вставить("ИспользуютсяПрофилиБезопасности", Ложь); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + Результат.ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности(); + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("РаботаВМоделиСервиса") Или Результат.ИспользуютсяПрофилиБезопасности Тогда + МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный"); + Если Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3 Тогда + Если Результат.БезопасныйРежим И Результат.КоличествоРазрешений > 0 И Результат.ИспользуютсяПрофилиБезопасности Тогда + Результат.БезопасныйРежим = ?(ЭтоНовый, "", МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка)); + КонецЕсли; + ИначеЕсли Результат.КоличествоРазрешений = 0 Тогда + Результат.БезопасныйРежим = Истина; + ИначеЕсли Результат.ИспользуютсяПрофилиБезопасности Тогда + Результат.БезопасныйРежим = ?(ЭтоНовый, "", МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка)); + Иначе + Результат.БезопасныйРежим = Ложь; + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ПредставлениеНазначения(Знач ЭтоГлобальнаяОбработка) + Результат = ""; + Если ЭтоГлобальнаяОбработка Тогда + Для Каждого СтрокаРаздел Из Объект.Разделы Цикл + ПредставлениеРаздела = ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(СтрокаРаздел.Раздел); + Если ПредставлениеРаздела = Неопределено Тогда + Продолжить; + КонецЕсли; + Результат = ?(ПустаяСтрока(Результат), ПредставлениеРаздела, + Результат + ", " + ПредставлениеРаздела); + КонецЦикла; + Иначе + Для Каждого СтрокаНазначение Из Объект.Назначение Цикл + ПредставлениеОбъекта = ДополнительныеОтчетыИОбработки.ПредставлениеОбъектаМетаданных(СтрокаНазначение.ОбъектНазначения); + Результат = ?(ПустаяСтрока(Результат), ПредставлениеОбъекта, + Результат + ", " + ПредставлениеОбъекта); + КонецЦикла; + КонецЕсли; + Если Результат = "" Тогда + Результат = НСтр("ru = 'Не определено'"); + КонецЕсли; + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область Сервер &НаСервере Процедура СформироватьСписокРазрешений() @@ -1665,8 +1670,9 @@ КонецЕсли; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Дополнительные реквизиты +#КонецОбласти + +#Область ДополнительныеРеквизиты &НаСервере Процедура СвойстваВыполнитьОтложеннуюИнициализацию() @@ -1709,3 +1715,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index 22e64de48..204fccf68 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,6 +1,6 @@ -

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

    -

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

    +

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

    +

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

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

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

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

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

    -
    • Имя объекта - включает вид и другие сведения. Заполняется разработчиком, в приложении проставляется по умолчанию. +
      Ответственный - пользователь приложения, который назначен ответственным за данный отчет или обработку. Отслеживает состояние дополнительного отчета или обработки, обновляет версии и т.п. (по умолчанию "Администратор").

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

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

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

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

    Отборы

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

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

    Отборы

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

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

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

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

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

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

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

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

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

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

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

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

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

          Пример реализации функции СведенияОВнешнейОбработке с использованием программного интерфейса 

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

        Пример реализации функции СведенияОВнешнейОбработке с использованием программного интерфейса

        Функция СведенияОВнешнейОбработке() Экспорт
        ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
        ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<...>();
        ПараметрыРегистрации.Версия = "...";
        Команда = ПараметрыРегистрации.Команды.Добавить();
        Команда.Представление = НСтр("ru = '<Представление команды>'");
        Команда.Идентификатор = "<Имя команды>";
        Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<...>();
        Команда.ПоказыватьОповещение = <Истина/Ложь>;
        Возврат ПараметрыРегистрации;
        КонецФункции

        Подробнее см. на сайте ИТС.

        См. также:

        diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index f77b1349d..2aeb0eec0 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -212,8 +212,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Глобальные обработки +#Область ГлобальныеОбработки Процедура ПередЗаписьюГлобальнойОбработки(Отказ) Если Отказ ИЛИ НЕ ДополнительныеСвойства.Свойство("АктуальныеКоманды") Тогда @@ -318,8 +317,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с регламентными заданиями. +#КонецОбласти + +#Область РаботаСРегламентнымиЗаданиями Функция ПравоНастройкиРасписания() // Проверяет наличие права настройки расписания дополнительных отчетов и обработок. @@ -338,8 +338,9 @@ + СокрЛП(Команда.Представление)); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Назначаемые обработки +#КонецОбласти + +#Область НазначаемыеОбработки Процедура ПередЗаписьюНазначаемойОбработки(Отказ) ТаблицаНазначение = Назначение.Выгрузить(); @@ -367,8 +368,9 @@ РегистрыСведений.НазначениеДополнительныхОбработок.ОбновитьДанныеПоСсылкамОбъектовМетаданных(ДополнительныеСвойства.СсылкиОбъектовМетаданных); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Глобальные отчеты +#КонецОбласти + +#Область ГлобальныеОтчеты Процедура ПриЗаписиОтчета(Отказ) @@ -381,7 +383,7 @@ ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(Ссылка); КонецЕсли; Исключение - ТекстОшибки = НСтр("ru = 'Ошибка подключения:'") + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = НСтр("ru = 'Отчет не подключен:'") + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ДополнительныеОтчетыИОбработки.ЗаписатьОшибку(Ссылка, ТекстОшибки); ДополнительныеСвойства.Вставить("ОшибкаПодключения", ТекстОшибки); ВнешнийОбъект = Неопределено; @@ -398,6 +400,8 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли #Иначе diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index a2d8776d1..8a1a69615 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -676,6 +676,7 @@ Объект назначения + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -714,6 +715,7 @@ Раздел + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html index ebf83852b..456ff0acb 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html @@ -4,19 +4,19 @@

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

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

          См. также:

          +
          Признак Рассмотрено у взаимодействия равно "Ложь".

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl index 807c5a666..2759cde71 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Module.bsl @@ -31,7 +31,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ТекущийОбъект.КомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки()); + ТекущийОбъект.КомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки(), Новый СжатиеДанных(9)); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html index d4daffea6..b0b2a01e4 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html @@ -1,6 +1,6 @@

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

      -

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

      +

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

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

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

    Работа с закладками в списке взаимодействий

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

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

      • Все действия с закладками пользователя можно произвести также в карточке пользователя. diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html index 8a1ec70a9..d587770bb 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html @@ -1,29 +1,29 @@ -

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

        +

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

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

        -

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

        -

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

        +

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

        +

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

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

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

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

        Ввод заметки

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

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

          -

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

          +

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

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

          Отборы

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

          Отборы

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

          Просмотр помеченных на удаление

          +
        • Выберите нужные значения. Можно использовать два отбора одновременно.

        Просмотр помеченных на удаление

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

        Напоминание

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

      Напоминание

      • -
        Можно ввести напоминание по поводу заметки. Нажмите  - Напомнить.

      См. также:

      +
      Можно ввести напоминание по поводу заметки. Нажмите - Напомнить.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html index 280b65e18..1f427b22b 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html @@ -1,26 +1,26 @@ -

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

    -

    Открывается из карточки объекта приложения по команде Мои заметки панели навигации.

    -

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

    -

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

    +

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

    +

    Открывается из карточки объекта приложения по команде Мои заметки панели навигации.

    +

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

    +

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

    Можно также просмотреть все заметки, введенные Вами, по соответствующей команде.

    -

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

    +

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

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

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

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

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

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

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

    Напоминание

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

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

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

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

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

    Просмотр помеченных на удаление

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

    См. также:

    • diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html index c8887679f..0ea84068e 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html @@ -1,11 +1,11 @@ -

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

      -

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

      -

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

      +

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

      +

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

      +

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

      Заметки можно отмечать цветом.

      -

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

      -

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

      -

      Ввод заметки

      +

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

      +

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

      +

      Ввод заметки

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

      Просмотр всех заметок

      -
      • Выполните соответствующую команду для просмотра списка Все заметки.

      См. также:

      +
      • Выполните соответствующую команду для просмотра списка Все заметки.

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html index 5297315de..00870514f 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html @@ -1,6 +1,6 @@ -

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

      -

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

      +

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

      +

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

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

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

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

      См. также:

      +
      В поле Автор приложения по умолчанию проставляет текущего пользователя. Изменить поле невозможно.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html index 7d22fde2c..33d07bd12 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html @@ -1,30 +1,30 @@

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

    -

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

    +

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

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

    -

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

    -

    Ввод заметки

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

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

      +

      Ввод заметки

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

    Напоминание

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

    Напоминание

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

    См. также:

    - \ No newline at end of file +
    Для того чтобы не забыть о событии, упомянутом в заметке, нажмите - Напомнить. Введите напоминание по поводу заметки.

    См. также:

    + \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Help/ru.html index f84c502b5..24b173219 100644 --- a/SSL/src/Catalogs/Заметки/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Help/ru.html @@ -1,12 +1,12 @@ -

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

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

    +

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

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

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

    -

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

    -

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

    +

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

    +

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

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

    • Тема - заголовок заметки;
      @@ -30,14 +30,14 @@
      Дата изменения - дата и время записи заметки;
    • -
      Предмет - содержимое ссылки Предмет в заметке.

    Ввод заметки

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

    Ввод заметки

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

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

    -

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

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

    +

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

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

    Напоминание

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

    • -
      Можно ввести напоминание по поводу заметки. Нажмите  - Напомнить.

    См. также:

    +
    Можно ввести напоминание по поводу заметки. Нажмите - Напомнить.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html index 148706519..54bef0619 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html @@ -1,15 +1,15 @@

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

    -

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

    +

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

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

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

    См. также:

    • diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html index fa6a9b46f..fdbc14a62 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html @@ -1,7 +1,7 @@ -

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

      -

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

      -

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

      +

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

      +

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

      +

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

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

      Выбор значений

      • Выделите нужный элемент. @@ -9,10 +9,10 @@
      • Нажмите Выбрать.
      • Также можно воспользоваться двойным щелчком мыши.

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

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

      Группировка значений

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

      Группировка значений

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Help/ru.html index 58e85c427..b8ab2027f 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Help/ru.html @@ -1,16 +1,16 @@

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

      -

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

      +

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

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

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

      См. также:

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html index fdbffbbcd..0e51077f7 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html @@ -1,8 +1,8 @@ -

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

    -

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

    -

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

    -

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

    +

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

    +

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

    +

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

    +

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

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

    Выбор значений

    • Выделите нужный элемент. diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html index b5f28c7f5..bdb3a91b5 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html @@ -1,6 +1,6 @@ -

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

      -

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

      +

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

      +

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

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

      • Представление;
      • diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html index 20d11034b..835edef67 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Help/ru.html @@ -1,7 +1,7 @@ -

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

        -

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

        -

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

        -

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

        +

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

        +

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

        +

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

        +

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index 08d6b28e6..e85b2271d 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -123,6 +123,7 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; + УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); Если ПланыОбмена.ГлавныйУзел() = Неопределено @@ -691,8 +692,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Реализация процедур, объявленных в других модулях. +#Область РеализацияПроцедурОбъявленныхВДругихМодулях // См. ОбщегоНазначения.ИдентификаторОбъектаМетаданных. Функция ИдентификаторОбъектаМетаданных(ОписаниеОбъектаМетаданных, ВызыватьИсключение) Экспорт @@ -896,7 +896,7 @@ КонецФункции // См. ОбщегоНазначения.ДобавитьПереименование. -Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт +Процедура ДобавитьПереименование(Переименования, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(); @@ -915,13 +915,13 @@ |новый тип: ""%2"".'"), СтароеПолноеИмя, НовоеПолноеИмя); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; - Если Итог.КоллекцииБезКлюча[СтароеИмяКоллекции] = Неопределено Тогда + Если Переименования.КоллекцииБезКлюча[СтароеИмяКоллекции] = Неопределено Тогда СписокДопустимыхТипов = ""; - Для каждого КлючИЗначение Из Итог.КоллекцииБезКлюча Цикл + Для каждого КлючИЗначение Из Переименования.КоллекцииБезКлюча Цикл СписокДопустимыхТипов = СписокДопустимыхТипов + КлючИЗначение.Значение + "," + Символы.ПС; КонецЦикла; СписокДопустимыхТипов = СокрП(СписокДопустимыхТипов); @@ -936,23 +936,23 @@ |%2.'"), СтароеПолноеИмя, СписокДопустимыхТипов); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Не ЗначениеЗаполнено(ИдентификаторБиблиотеки) Тогда ИдентификаторБиблиотеки = Метаданные.Имя; КонецЕсли; - ПорядокБиблиотеки = Итог.ПорядокБиблиотек[ИдентификаторБиблиотеки]; + ПорядокБиблиотеки = Переименования.ПорядокБиблиотек[ИдентификаторБиблиотеки]; Если ПорядокБиблиотеки = Неопределено Тогда - ПорядокБиблиотеки = Итог.ПорядокБиблиотек.Количество(); - Итог.ПорядокБиблиотек.Вставить(ИдентификаторБиблиотеки, ПорядокБиблиотеки); + ПорядокБиблиотеки = Переименования.ПорядокБиблиотек.Количество(); + Переименования.ПорядокБиблиотек.Вставить(ИдентификаторБиблиотеки, ПорядокБиблиотеки); КонецЕсли; - ВерсияБиблиотеки = Итог.ВерсииБиблиотек[ИдентификаторБиблиотеки]; + ВерсияБиблиотеки = Переименования.ВерсииБиблиотек[ИдентификаторБиблиотеки]; Если ВерсияБиблиотеки = Неопределено Тогда ВерсияБиблиотеки = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); - Итог.ВерсииБиблиотек.Вставить(ИдентификаторБиблиотеки, ВерсияБиблиотеки); + Переименования.ВерсииБиблиотек.Вставить(ИдентификаторБиблиотеки, ВерсияБиблиотеки); КонецЕсли; Если ВерсияБиблиотеки = "0.0.0.0" Тогда @@ -964,7 +964,7 @@ Если Результат > 0 Тогда ЧастиВерсии = СтрРазделить(ВерсияИБ, "."); - ТаблицаПереименования = Итог.Таблица; // см. ТаблицаПереименованияДляТекущейВерсии + ТаблицаПереименования = Переименования.Таблица; // см. ТаблицаПереименованияДляТекущейВерсии ОписаниеПереименования = ТаблицаПереименования.Добавить(); ОписаниеПереименования.ПорядокБиблиотеки = ПорядокБиблиотеки; ОписаниеПереименования.ВерсияЧасть1 = Число(ЧастиВерсии[0]); @@ -978,8 +978,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительные процедуры и функции для вызова из других модулей. +#КонецОбласти + +#Область ДополнительныеПроцедурыИФункцииДляВызоваИзДругихМодулей // Только для внутреннего использования. // ПолноеИмя в объекте должно быть уже установлено и корректно. @@ -1107,14 +1108,14 @@ КонецЦикла; КоллекцииБезКлюча.Вставить(ВРег("Роль"), "Роль"); - Итог = Новый Структура; - Итог.Вставить("Таблица", ТаблицаПереименования); - Итог.Вставить("КоллекцииБезКлюча", КоллекцииБезКлюча); - Итог.Вставить("ВерсииБиблиотек", Новый Соответствие); - Итог.Вставить("ПорядокБиблиотек", Новый Соответствие); + Переименования = Новый Структура; + Переименования.Вставить("Таблица", ТаблицаПереименования); + Переименования.Вставить("КоллекцииБезКлюча", КоллекцииБезКлюча); + Переименования.Вставить("ВерсииБиблиотек", Новый Соответствие); + Переименования.Вставить("ПорядокБиблиотек", Новый Соответствие); - ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных(Итог); - ИнтеграцияПодсистемБСП.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); + ИнтеграцияПодсистемБСП.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); ТаблицаПереименования.Сортировать( "ПорядокБиблиотеки ВОЗР, @@ -1480,8 +1481,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Для процедуры ЗагрузитьДанныеВПодчиненныйУзел. // @@ -2035,7 +2037,9 @@ Иначе // Не коллекция объектов метаданных, например, подсистема. ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); - Если ОписаниеРодителя <> Неопределено Тогда + Если ОписаниеРодителя = Неопределено Тогда + НовыйРодитель = СвойстваОбъекта.Родитель; + Иначе НовыйРодитель = ОписаниеРодителя.Ссылка; КонецЕсли; КонецЕсли; @@ -2562,46 +2566,51 @@ ИдентификаторРасширения = НовыйИдентификаторРасширения; КонецЕсли; КонецЕсли; - Если ЗначениеЗаполнено(ИмяРасширения) <> ОбъектыРасширений Тогда - Продолжить; - КонецЕсли; - Если СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Подсистема") <> 0 Тогда - МетаданныеНайтиПоПолномуИмени(ПолноеИмя); - КонецЕсли; + Синоним = ?(ЗначениеЗаполнено(ОбъектМетаданных.Синоним), + ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя); - Если Не СвойстваКоллекции.БезДанных - И Не СтандартныеПодсистемыСервер.ЭтоТаблицаРегистра(СвойстваКоллекции.ИмяВЕдЧисле) - И СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Константа") = 0 Тогда + ПолныйСиноним = ПолныйСинонимРодителя + + СвойстваКоллекции.СинонимВЕдЧисле + ". " + Синоним; + + Если ЗначениеЗаполнено(ИмяРасширения) = ОбъектыРасширений Тогда - ИмяТипаСсылки = СвойстваКоллекции.ИмяВЕдЧисле + "Ссылка." + ОбъектМетаданных.Имя; - ОписаниеТипа = Новый ОписаниеТипов(ИмяТипаСсылки); - ЗначениеПустойСсылки = ОписаниеТипа.ПривестиЗначение(Неопределено); - Иначе - ЗначениеПустойСсылки = Неопределено; + Если Не СвойстваКоллекции.БезДанных + И Не СтандартныеПодсистемыСервер.ЭтоТаблицаРегистра(СвойстваКоллекции.ИмяВЕдЧисле) + И СтрНайти(СвойстваКоллекции.ИмяВЕдЧисле, "Константа") = 0 Тогда + + ИмяТипаСсылки = СвойстваКоллекции.ИмяВЕдЧисле + "Ссылка." + ОбъектМетаданных.Имя; + ОписаниеТипа = Новый ОписаниеТипов(ИмяТипаСсылки); + ЗначениеПустойСсылки = ОписаниеТипа.ПривестиЗначение(Неопределено); + Иначе + ЗначениеПустойСсылки = Неопределено; + КонецЕсли; + + НоваяСтрока = СвойстваОбъектовМетаданных.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваКоллекции); + НоваяСтрока.Родитель = ИдентификаторКоллекции(СвойстваКоллекции.Идентификатор, ОбъектыРасширений); + НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции); + НоваяСтрока.ПолноеИмя = ПолноеИмя; + НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя; + НоваяСтрока.Имя = ОбъектМетаданных.Имя; + НоваяСтрока.Синоним = Синоним; + НоваяСтрока.ПолныйСиноним = ПолныйСиноним; + НоваяСтрока.ЗначениеПустойСсылки = ЗначениеПустойСсылки; + НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных; + НоваяСтрока.ИмяРасширения = ИмяРасширения; + НоваяСтрока.ИдентификаторРасширения = ИдентификаторРасширения; + НоваяСтрока.ХешСуммаРасширения = ХешСуммаРасширения; + + ИмяПредопределенного = СтрЗаменить(ПолноеИмя, ".", ""); + Если ИменаПредопределенных.Получить(ИмяПредопределенного) <> Неопределено Тогда + НоваяСтрока.ИмяПредопределенныхДанных = ИмяПредопределенного; + ИменаПредопределенных.Вставить(ИмяПредопределенного, Истина); + КонецЕсли; КонецЕсли; - НоваяСтрока = СвойстваОбъектовМетаданных.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваКоллекции); - НоваяСтрока.Родитель = ИдентификаторКоллекции(СвойстваКоллекции.Идентификатор, ОбъектыРасширений); - НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции); - НоваяСтрока.ПолноеИмя = ПолноеИмя; - НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя; - НоваяСтрока.Имя = ОбъектМетаданных.Имя; - - НоваяСтрока.Синоним = ?( - ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя); - - НоваяСтрока.ПолныйСиноним = - ПолныйСинонимРодителя + СвойстваКоллекции.СинонимВЕдЧисле + ". " + НоваяСтрока.Синоним; - - НоваяСтрока.ЗначениеПустойСсылки = ЗначениеПустойСсылки; - НоваяСтрока.ОбъектМетаданных = ОбъектМетаданных; - НоваяСтрока.ИмяРасширения = ИмяРасширения; - НоваяСтрока.ИдентификаторРасширения = ИдентификаторРасширения; - НоваяСтрока.ХешСуммаРасширения = ХешСуммаРасширения; - - Если СвойстваКоллекции.Имя = "Подсистемы" Тогда + Если СвойстваКоллекции.Имя = "Подсистемы" + И (ОбъектыРасширений Или Не ЗначениеЗаполнено(ИмяРасширения)) Тогда + ДобавитьСвойстваОбъектовМетаданных( ОбъектМетаданных.Подсистемы, СвойстваКоллекции, @@ -2609,12 +2618,7 @@ ИдентификаторыКлючейРасширений, ИменаПредопределенных, ПолноеИмя, - НоваяСтрока.ПолныйСиноним + ". "); - КонецЕсли; - ИмяПредопределенного = СтрЗаменить(ПолноеИмя, ".", ""); - Если ИменаПредопределенных.Получить(ИмяПредопределенного) <> Неопределено Тогда - НоваяСтрока.ИмяПредопределенныхДанных = ИмяПредопределенного; - ИменаПредопределенных.Вставить(ИмяПредопределенного, Истина); + ПолныйСиноним + ". "); КонецЕсли; КонецЦикла; @@ -3114,12 +3118,8 @@ СтандартныеПодсистемыПовтИсп.ИдентификаторыОбъектовМетаданныхПроверкаИспользования(Истина, ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()); - Попытка - Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( - ПолныеИменаОбъектовМетаданных, Истина, ОдинЭлемент, Не ВызыватьИсключение); - Исключение - Идентификаторы = Неопределено; - КонецПопытки; + Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( + ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент, Истина); Если Идентификаторы = Неопределено Тогда ВыполненоОбновление = ОбновлениеСправочниковИдентификаторов(); @@ -3139,7 +3139,7 @@ КонецЕсли; Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора( - ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент, Не ВызыватьИсключение); + ПолныеИменаОбъектовМетаданных, ВызыватьИсключение, ОдинЭлемент); КонецЕсли; Возврат Идентификаторы; @@ -3148,8 +3148,9 @@ // Для функций ИдентификаторыОбъектовМетаданных. Функция ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(ПолныеИменаОбъектовМетаданных, - ВызыватьИсключение, ОдинЭлемент, ПропускатьНеподдерживаемыеОбъекты) + ВызыватьИсключение, ОдинЭлемент, ПерваяПопытка = Ложь) + УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); ДоступныИдентификаторыОбъектовРасширений = @@ -3250,7 +3251,7 @@ И Не Метаданные.Задачи.Содержит(ОбъектМетаданных) И Не ЭтоПодсистема(ОбъектМетаданных) Тогда - Если ПропускатьНеподдерживаемыеОбъекты Тогда + Если Не ВызыватьИсключение Тогда Продолжить; КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -3342,6 +3343,10 @@ Результат.Вставить(ПолноеИмяОбъектаМетаданных, СтрокаТаблицы.Ссылка); КонецЦикла; + Если ПерваяПопытка И ДобавитьУточнениеОшибкиПараметровРаботыПрограммыДляРазработчика Тогда + Возврат Неопределено; + КонецЕсли; + КоличествоОшибок = Ошибки.Количество(); Если КоличествоОшибок > 0 Тогда @@ -3512,19 +3517,11 @@ КонецЕсли; Если ИдентификаторыКонфигурации.Количество() > 0 Или ИдентификаторыРасширений.Количество() > 0 Тогда - Попытка - ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы, - ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение); - Исключение - Если Не ОбщегоНазначения.РазделениеВключено() - Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - // В случае ошибки, если есть возможность обновления справочника, - // нужно выполнить обновление, а после этого повторить получение идентификатора. - ОбъектыМетаданных = Неопределено; - Иначе - ВызватьИсключение; - КонецЕсли; - КонецПопытки; + ПерваяПопытка = Не ОбщегоНазначения.РазделениеВключено() + Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы, + ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение, ПерваяПопытка); Иначе ОбъектыМетаданных = Новый Соответствие; КонецЕсли; @@ -3548,8 +3545,9 @@ // Для функции ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора. Функция ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы, - ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение) + ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение, ПерваяПопытка = Ложь) + УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; @@ -3777,12 +3775,15 @@ // Возможно объект метаданных был переименован. ОписаниеОшибки = ""; Иначе + Если ПерваяПопытка Тогда + Возврат Неопределено; + КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатору ""%1"" из справочника ""%2"", |соответствует объект метаданных ""%3"", |полное имя которого отличается от заданного в идентификаторе.'"), Свойства.Представление, - НазваниеСправочника(Свойства.ОбъектРасширений), + НазваниеСправочника(Ложь), РезультатПроверки.ОбъектМетаданных.ПолноеИмя()) + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); КонецЕсли; @@ -3794,10 +3795,13 @@ КонецЕсли; Если Не Свойства.ОбъектРасширений И Свойства.ПометкаУдаления И Не КонфигурацияБазыДанныхИзмененаДинамически Тогда + Если ПерваяПопытка Тогда + Возврат Неопределено; + КонецЕсли; ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатор ""%1"" из справочника ""%2"" помечен на удаление.'"), Свойства.Представление, - НазваниеСправочника(Свойства.ОбъектРасширений)); + НазваниеСправочника(Ложь)); ТекстОшибки = ЗаголовокОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки + СтандартныеПодсистемыСервер.УточнениеОшибкиПараметровРаботыПрограммыДляРазработчика(); @@ -3926,8 +3930,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции замены идентификатора в базе данных. +#КонецОбласти + +#Область ПроцедурыИФункцииЗаменыИдентификатораВБазеДанных Процедура ЗаменитьДублиПодчиненногоУзлаНайденныеПриЗагрузке(ТолькоПроверка, ЕстьИзменения) @@ -4517,6 +4522,8 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html index c16a7d04a..93bd0c4fd 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Help/ru.html @@ -1,7 +1,7 @@ -

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

        -

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

        -

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

        -

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

        +

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

        +

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

        +

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

        +

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html index 071e5b33e..4ed5b65fb 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html @@ -1,41 +1,41 @@

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

        -

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

        -

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

        +

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

        +

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

        Ввод нового графика работы

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

    • Нажмите Результат заполнения. Будут показаны рабочие и выходные дни по месяцам. diff --git a/SSL/src/Catalogs/Календари/Help/ru.html b/SSL/src/Catalogs/Календари/Help/ru.html index edf489588..ae3be434c 100644 --- a/SSL/src/Catalogs/Календари/Help/ru.html +++ b/SSL/src/Catalogs/Календари/Help/ru.html @@ -1,6 +1,6 @@ -

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

      -

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

      +

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

      +

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

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

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

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

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

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

    См. также:

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Help/ru.html index 20f1ab527..300c4fe24 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаВыбора/Help/ru.html @@ -1,6 +1,6 @@ -

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

    -

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

    +

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

    +

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

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

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

    -

    Выбор банка

    +
    Адрес - полный адрес банка.

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

    +

    Выбор банка

    • Выделите нужный банк.
    • diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form index b55257727..e57fd0eb2 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Form.form @@ -867,7 +867,7 @@ true - Объект.Страна + Страна СтранаРасширеннаяПодсказка @@ -899,6 +899,47 @@ Normal + + КодСтраны + 71 + true + true + + true + + + Объект.КодСтраны + + + КодСтраныРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + КодСтраныКонтекстноеМеню + 72 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true @@ -963,6 +1004,24 @@
      true
      true + + Страна + + <key>ru</key> + <value>Страна</value> + + 2 + + CatalogRef.СтраныМира + + + true + + + true + + true + @@ -972,5 +1031,9 @@ OnReadAtServer ПриЧтенииНаСервере + + BeforeWriteAtServer + ПередЗаписьюНаСервере + diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Help/ru.html index 12b8adb65..8ed3ff294 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Help/ru.html @@ -5,19 +5,19 @@
    • -
      Регион - по умолчанию указывается регион, в котором находится банк. Можно включить банк в новую группу, для этого выберите из списка нужную группу, нажав Показать все, для ввода новой группы нажмите Создать. 
      +
      Регион - по умолчанию указывается регион, в котором находится банк. Можно включить банк в новую группу, для этого выберите из списка нужную группу, нажав Показать все, для ввода новой группы нажмите Создать.
    • ИНН.
    • Телефоны.
    • -
    • Деятельность банка прекращена - приложение учитывает недействующие банки и автоматически включает флажок для таких банков. Также можно его включить вручную, если получены сведения о закрытии банка.
    +
  • Деятельность банка прекращена - приложение учитывает недействующие банки и автоматически включает флажок для таких банков. Также можно его включить вручную, если получены сведения о закрытии банка.
    • Данные о банке сгруппированы в разделы:
      • Реквизиты для платежей внутри страны:
    -
        • БИК - БИК банка.
        • +
              • БИК - БИК банка.
              • СВИФТ БИК.
              • -
              • Корр. счет - корреспондентский счет.
              • +
              • Корр. счет - корреспондентский счет.
              • Город - город, в котором находится банк.
              • -
              • Адрес - полный адрес банка.
            • Реквизиты для международных платежей - заполнены, если банк ведет международные платежи. 

          См. также:

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl index bb0fbd784..d51f5a741 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/Forms/ФормаЭлемента/Module.bsl @@ -19,6 +19,12 @@ КлючСохраненияПоложенияОкна = "ДеятельностьПрекращена"; Элементы.НадписьДеятельностьБанкаПрекращена.Заголовок = РаботаСБанками.ПояснениеНедействительногоБанка(Объект.Ссылка); КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Элементы.КодСтраны.Видимость = Ложь; + Иначе + Элементы.Страна.Видимость = Ложь; + КонецЕсли; Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.ГруппаШапка.ВыравниваниеЭлементовИЗаголовков = ВариантВыравниванияЭлементовИЗаголовков.ЭлементыПравоЗаголовкиЛево; @@ -32,10 +38,27 @@ Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота"); МодульАвтономнаяРабота.ОбъектПриЧтенииНаСервере(ТекущийОбъект, ТолькоПросмотр); - + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ДанныеСтраныМира = МодульУправлениеКонтактнойИнформацией.ДанныеСтраныМира(ТекущийОбъект.КодСтраны); + Если ЗначениеЗаполнено(ДанныеСтраныМира) Тогда + Страна = ДанныеСтраныМира.Ссылка; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Если ЗначениеЗаполнено(Страна) Тогда + ТекущийОбъект.КодСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Страна, "Код"); + КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанков/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанков/Help/ru.html index 6976ef947..01c00b521 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанков/Help/ru.html @@ -1,9 +1,9 @@ -

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

    -

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

    +

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

    +

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

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

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

    -

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

    +

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

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

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

    +
    Адрес - полный адрес банка.

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

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

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

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl b/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl index 90bfd310c..6e14ce699 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанков/ManagerModule.bsl @@ -55,4 +55,103 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, +// которые необходимо обновить на новую версию. +// +// Параметры: +// Параметры - Структура - служебный параметр для передачи в процедуру ОбновлениеИнформационнойБазы.ОтметитьКОбработке. +// +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | КлассификаторБанков.Ссылка + |ИЗ + | Справочник.КлассификаторБанков КАК КлассификаторБанков + |ГДЕ + | НЕ КлассификаторБанков.ЭтоГруппа + | И КлассификаторБанков.КодСтраны = """" + | И КлассификаторБанков.УдалитьСтрана <> &ПустаяСсылкаСтраны"; + + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + ПустаяСсылкаСправочникаСтраныМира = МодульУправлениеКонтактнойИнформациейСлужебный.ПустаяСсылкаСправочникаСтраныМира(); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ПустаяСсылкаСтраны", ПустаяСсылкаСправочникаСтраныМира); + Банки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Банки); + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат + КонецЕсли; + + ОбъектовОбработано = 0; + ПроблемныхОбъектов = 0; + + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + КодыСтран = МодульУправлениеКонтактнойИнформациейСлужебный.КодыСтран(); + Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.КлассификаторБанков"); + + Пока Выборка.Следующий() Цикл + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлассификаторБанков"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + Банк = Выборка.Ссылка.ПолучитьОбъект(); + Банк.КодСтраны = КодыСтран[Банк.УдалитьСтрана]; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Банк); + + ОбъектовОбработано = ОбъектовОбработано + 1; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + ВызватьИсключение; + КонецПопытки; + + КонецЦикла; + + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.КлассификаторБанков"); + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать некоторых участников расчетов (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + Иначе + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.КлассификаторБанков,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработана очередная порция участников расчетов печати: %1'"), + ОбъектовОбработано)); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецЕсли + diff --git a/SSL/src/Catalogs/КлассификаторБанков/КлассификаторБанков.mdo b/SSL/src/Catalogs/КлассификаторБанков/КлассификаторБанков.mdo index e3b493951..fcff1db61 100644 --- a/SSL/src/Catalogs/КлассификаторБанков/КлассификаторБанков.mdo +++ b/SSL/src/Catalogs/КлассификаторБанков/КлассификаторБанков.mdo @@ -304,10 +304,10 @@ Use - Страна + УдалитьСтрана ru - Страна + (не используется) Страна CatalogRef.СтраныМира @@ -422,6 +422,24 @@ Use Use + + КодСтраны + + ru + Код страны + + + String + + 3 + + + + + + Use + Use + ФормаВыбора diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html index 3f875a84e..b887dd347 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html @@ -1,14 +1,14 @@ -

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

    -

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

    +

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

    +

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

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

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

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

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

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

      См. также:

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html index e45a278b4..452b7c9f5 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html +++ b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html @@ -1,17 +1,17 @@

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

      -

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

      +

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

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

      -

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

      +

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

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

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

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

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

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

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

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

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

      Автоматический подбор целевого времени

      diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/НастройкиМакета/Form.form b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/НастройкиМакета/Form.form new file mode 100644 index 000000000..2c68b288d --- /dev/null +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/НастройкиМакета/Form.form @@ -0,0 +1,388 @@ + + + + НаименованиеМакета + 1 + + <key>ru</key> + <value>Наименование макета</value> + + true + true + + true + + + НаименованиеМакета + + + OnChange + НаименованиеМакетаПриИзменении + + + НаименованиеМакетаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НаименованиеМакетаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаОсновнаяПечатнаяФорма + 10 + + ОсновнаяПечатнаяФорма + 4 + + <key>ru</key> + <value>Основная печатная форма</value> + + true + true + + true + + + ОсновнаяПечатнаяФорма + + Right + + ru + Основные печатные формы группируются в верхней части подменю Печать. Применимо для документов, которые являются подтверждением хозяйственной операции. + + Button + + ОсновнаяПечатнаяФормаРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ОсновнаяПечатнаяФормаКонтекстноеМеню + 5 + true + + CheckBoxField + Enter + true + Left + true + + + + НаименованиеПечатнойФормы + 7 + + <key>ru</key> + <value>Наименование печатной формы</value> + + true + true + + true + + + НаименованиеПечатнойФормы + + + ru + Наименование документа для отображения в актах сверки и документах. + + Button + + НаименованиеПечатнойФормыРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + НаименованиеПечатнойФормыКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Основная печатная форма</value> + + + ГруппаОсновнаяПечатнаяФормаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаКнопкиВнизу + 14 + + ОК + 16 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + + ОКРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualButton + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки внизу</value> + + + ГруппаКнопкиВнизуРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + НаименованиеМакета + + <key>ru</key> + <value>Наименование макета</value> + + 1 + + String + + 150 + + + + true + + + true + + + + ОсновнаяПечатнаяФорма + + <key>ru</key> + <value>Основная печатная форма</value> + + 2 + + Boolean + + + true + + + true + + + + НаименованиеПечатнойФормы + + <key>ru</key> + <value>Наименование печатной формы</value> + + 3 + + String + + 100 + + + + true + + + true + + + + ВладелецМакета + 4 + + AnyRef + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + true + + + + ОК + + + Auto + Auto + + + КодЯзыка + + String + + 10 + + + + + ВладелецМакета + + AnyRef + + + + ИдентификаторМакета + + String + + + + + НаименованиеМакета + + String + + + + + + + + diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/НастройкиМакета/Module.bsl b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/НастройкиМакета/Module.bsl new file mode 100644 index 000000000..215915d30 --- /dev/null +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/НастройкиМакета/Module.bsl @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(Параметры.КодЯзыка) Тогда + Элементы.ОсновнаяПечатнаяФорма.Доступность = (Параметры.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка()); + КонецЕсли; + + ВидимостьГруппы = УправлениеПечатью.ВходитВСоставОбъектовСОсновнымиПечатнымиФормами(ТипЗнч(Параметры.ВладелецМакета)); + Элементы.ГруппаОсновнаяПечатнаяФорма.Видимость = ВидимостьГруппы; + + Если ВидимостьГруппы Тогда + СсылкаМакета = Справочники.МакетыПечатныхФорм.СсылкаМакета(Параметры.ИдентификаторМакета); + + Если ЗначениеЗаполнено(СсылкаМакета) Тогда + ИменаРеквизитов = "Наименование,ОсновнаяПечатнаяФорма,НаименованиеПечатнойФормы"; + ДанныеМакета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаМакета, ИменаРеквизитов); + + НаименованиеМакета = ДанныеМакета.Наименование; + ОсновнаяПечатнаяФорма = ДанныеМакета.ОсновнаяПечатнаяФорма; + НаименованиеПечатнойФормы = ДанныеМакета.НаименованиеПечатнойФормы; + Иначе + НаименованиеМакета = Параметры.НаименованиеМакета; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Оповещение = Новый ОписаниеОповещения("ПриПодтвержденииЗакрытия", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ, ЗавершениеРаботы,, ТекстПредупреждения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ОбновитьОтображениеФормы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НаименованиеМакетаПриИзменении(Элемент) + ОбновитьОтображениеФормы(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + СохранитьИЗакрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПриПодтвержденииЗакрытия(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + СохранитьИЗакрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИЗакрыть() + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ИмяДокумента", НаименованиеМакета); + СтруктураПараметров.Вставить("ОсновнаяПечатнаяФорма", ОсновнаяПечатнаяФорма); + СтруктураПараметров.Вставить("НаименованиеПечатнойФормы", НаименованиеПечатнойФормы); + + Закрыть(СтруктураПараметров); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображениеФормы() + Элементы.НаименованиеПечатнойФормы.ПодсказкаВвода = НаименованиеМакета; +КонецПроцедуры +#КонецОбласти diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Form.form b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Form.form index 7142f3755..918432cef 100644 --- a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Form.form +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Form.form @@ -587,6 +587,19 @@ + + ЭтоМакетВыгрузки + + Boolean + + + + ПредставлениеМакетаВыгрузки + + String + + + diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Help/ru.html b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Help/ru.html index bf2e30792..485025e1d 100644 --- a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Help/ru.html +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Help/ru.html @@ -1,3 +1,3 @@ -С помощью кнопки Видимость в подменю "Печать" можно ограничить доступность соответствующей команды печати в зависимости от значений реквизитов элементов.  +С помощью кнопки Видимость в подменю "Печать" можно ограничить доступность соответствующей команды печати в зависимости от значений реквизитов элементов.
      Видимость команд печати нужна для того, чтобы печатная форма могла быть сформирована только для подходящего документа. -
      Для ввода условия нажмите Добавить.
      Выберите Поле документа, Вид сравнения, напишите или выберите Значение, с которым будет сравниваться поле.
      \ No newline at end of file +
      Для ввода условия нажмите Добавить.
      Выберите Поле документа, Вид сравнения, напишите или выберите Значение, с которым будет сравниваться поле.
      \ No newline at end of file diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Module.bsl b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Module.bsl index f2746b810..52f74d6b6 100644 --- a/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Module.bsl +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/Forms/УсловияВидимостиВПодменюПечать/Module.bsl @@ -13,6 +13,18 @@ УстановитьУсловноеОформление(); + Если Параметры.ЭтоМакетВыгрузки Тогда + + АвтоЗаголовок = Ложь; + ШаблонЗаголовка = НСтр("ru = 'Условия видимости в подменю ""Выгрузить в файл"": %1 (Макет файла выгрузки)'"); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗаголовка, + Параметры.ПредставлениеМакетаВыгрузки); + + Заголовок = ТекстЗаголовка; + + КонецЕсли; + КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/ManagerModule.bsl b/SSL/src/Catalogs/МакетыПечатныхФорм/ManagerModule.bsl index eb399277b..8fef02685 100644 --- a/SSL/src/Catalogs/МакетыПечатныхФорм/ManagerModule.bsl +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/ManagerModule.bsl @@ -24,6 +24,8 @@ РедактируемыеРеквизиты = Новый Массив; РедактируемыеРеквизиты.Добавить("Используется"); + РедактируемыеРеквизиты.Добавить("ОсновнаяПечатнаяФорма"); + РедактируемыеРеквизиты.Добавить("НаименованиеПечатнойФормы"); Возврат РедактируемыеРеквизиты; @@ -107,6 +109,112 @@ КонецФункции +// Параметры: +// ИменаМакетов - Массив из Строка - имя макета +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - Строка - имя макета +// * Значение - см. НоваяСтруктураДанныеМакетов +// +Функция ДанныеМакетов(Знач ИменаМакетов) Экспорт + + ДанныеМакетовСоответствие = Новый Соответствие; + + Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда + ИменаМакетов = СтрРазделить(ИменаМакетов, ","); + Иначе + ИменаМакетов = ОбщегоНазначения.СкопироватьРекурсивно(ИменаМакетов); + КонецЕсли; + + ТаблицаМакетов = Новый ТаблицаЗначений; + ТаблицаМакетов.Колонки.Добавить("ИмяМакета", Новый ОписаниеТипов("Строка")); + ТаблицаМакетов.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + + Для Каждого ИмяМакета Из ИменаМакетов Цикл + + НоваяСтрока = ТаблицаМакетов.Добавить(); + НоваяСтрока.ИмяМакета = ИмяМакета; + + Идентификатор = ИдентификаторМакета(ИмяМакета); + Если Идентификатор <> Неопределено Тогда + НоваяСтрока.Идентификатор = Идентификатор; + КонецЕсли; + + КонецЦикла; + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаМакетов.ИмяМакета КАК ИмяМакета, + | ТаблицаМакетов.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ВТ_ТаблицаМакетов + |ИЗ + | &ТаблицаМакетов КАК ТаблицаМакетов + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(МакетыПечатныхФорм.Наименование, """") КАК Представление, + | ВТ_ТаблицаМакетов.ИмяМакета КАК ИмяМакета, + | ВТ_ТаблицаМакетов.Идентификатор КАК Идентификатор, + | ЕСТЬNULL(МакетыПечатныхФорм.ФорматСохраненияОбъекта, ЗНАЧЕНИЕ(Перечисление.ФорматыВыгрузкиОбъектов.ПустаяСсылка)) КАК ФорматСохраненияОбъекта, + | ЕСТЬNULL(МакетыПечатныхФорм.Ссылка, ЗНАЧЕНИЕ(Справочник.МакетыПечатныхФорм.ПустаяСсылка)) КАК Ссылка + |ПОМЕСТИТЬ ВТ_Макеты + |ИЗ + | ВТ_ТаблицаМакетов КАК ВТ_ТаблицаМакетов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МакетыПечатныхФорм КАК МакетыПечатныхФорм + | ПО ВТ_ТаблицаМакетов.Идентификатор = МакетыПечатныхФорм.Идентификатор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_Макеты.ИмяМакета КАК ИмяМакета, + | ВТ_Макеты.Представление КАК Представление, + | ВТ_Макеты.Идентификатор КАК Идентификатор, + | ВТ_Макеты.ФорматСохраненияОбъекта КАК ФорматСохраненияОбъекта, + | ВЫБОР + | КОГДА + | ТИПЗНАЧЕНИЯ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА ТИПЗНАЧЕНИЯ(ВЫРАЗИТЬ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных КАК Справочник.ИдентификаторыОбъектовМетаданных).ЗначениеПустойСсылки) + | КОГДА + | ТИПЗНАЧЕНИЯ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | ТОГДА ТИПЗНАЧЕНИЯ(ВЫРАЗИТЬ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных КАК Справочник.ИдентификаторыОбъектовРасширений).ЗначениеПустойСсылки) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ТипИсточника + |ИЗ + | ВТ_Макеты КАК ВТ_Макеты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.МакетыПечатныхФорм.ИсточникиДанных КАК МакетыПечатныхФормИсточникиДанных + | ПО ВТ_Макеты.Ссылка = МакетыПечатныхФормИсточникиДанных.Ссылка"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ТаблицаМакетов", ТаблицаМакетов); + Выборка = Запрос.Выполнить().Выбрать(); + + Для Каждого ИмяМакета Из ИменаМакетов Цикл + + ТипыМетаданных = Новый Массив; + + ДанныеМакетовСтруктура = НоваяСтруктураДанныеМакетов(); + + Пока Выборка.НайтиСледующий(ИмяМакета, "ИмяМакета") Цикл + + ДанныеМакетовСтруктура.ФорматСохраненияОбъекта = Выборка.ФорматСохраненияОбъекта; + ДанныеМакетовСтруктура.Представление = Выборка.Представление; + ТипыМетаданных.Добавить(Выборка.ТипИсточника); + + КонецЦикла; + Выборка.Сбросить(); + + ДанныеМакетовСтруктура.ТипыИсточников = ТипыМетаданных; + ДанныеМакетовСоответствие.Вставить(ИмяМакета, ДанныеМакетовСтруктура); + + КонецЦикла; + + Возврат ДанныеМакетовСоответствие; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -174,6 +282,9 @@ Объект.Идентификатор = Новый УникальныйИдентификатор; КонецЕсли; + Объект.МакетДляВыгрузкиОбъекта = ОписаниеМакета.МакетДляВыгрузкиОбъекта; + Объект.ФорматСохраненияОбъекта = ОписаниеМакета.ФорматСохраненияВыгрузки; + Объект.ИсточникиДанных.Очистить(); Для Каждого ИсточникДанных Из ОписаниеМакета.ИсточникиДанных Цикл НоваяСтрока = Объект.ИсточникиДанных.Добавить(); @@ -183,9 +294,13 @@ Наименование = ОписаниеМакета.Наименование; КодЯзыка = ОписаниеМакета.КодЯзыка; Макет = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(ОписаниеМакета.АдресМакетаВоВременномХранилище)); + НаименованиеПечатнойФормы = ОписаниеМакета.НаименованиеПечатнойФормы; ОбщегоНазначения.УстановитьЗначениеРеквизита(Объект, "Наименование", Наименование, КодЯзыка); ОбщегоНазначения.УстановитьЗначениеРеквизита(Объект, "Макет", Макет, КодЯзыка); + ОбщегоНазначения.УстановитьЗначениеРеквизита(Объект, "НаименованиеПечатнойФормы", НаименованиеПечатнойФормы, КодЯзыка); + + Объект.ОсновнаяПечатнаяФорма = ОписаниеМакета.ОсновнаяПечатнаяФорма; Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.МакетыПечатныхФорм"); @@ -426,6 +541,25 @@ КонецПроцедуры +// Структура данных макета. +// +// Возвращаемое значение: +// Структура - новая структура данные макетов: +// * ФорматСохраненияОбъекта - ПеречислениеСсылка.ФорматыВыгрузкиОбъектов +// * ТипыИсточников - Массив из ОписаниеТипов +// * Представление - Строка +// +Функция НоваяСтруктураДанныеМакетов() + + ДанныеМакетовСтруктура = Новый Структура; + ДанныеМакетовСтруктура.Вставить("ФорматСохраненияОбъекта", Перечисления.ФорматыВыгрузкиОбъектов.ПустаяСсылка()); + ДанныеМакетовСтруктура.Вставить("ТипыИсточников", Новый Массив); + ДанныеМакетовСтруктура.Вставить("Представление", ""); + + Возврат ДанныеМакетовСтруктура; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/ObjectModule.bsl b/SSL/src/Catalogs/МакетыПечатныхФорм/ObjectModule.bsl index e69de29bb..c1600315c 100644 --- a/SSL/src/Catalogs/МакетыПечатныхФорм/ObjectModule.bsl +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/ObjectModule.bsl @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + МассивНепроверяемыхРеквизитов = Новый Массив; // Массив из Строка + + Если НЕ МакетДляВыгрузкиОбъекта Тогда + МассивНепроверяемыхРеквизитов.Добавить("ФорматСохраненияОбъекта"); + КонецЕсли; + + Если МассивНепроверяемыхРеквизитов.Количество() > 0 Тогда + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/МакетыПечатныхФорм/МакетыПечатныхФорм.mdo b/SSL/src/Catalogs/МакетыПечатныхФорм/МакетыПечатныхФорм.mdo index 3693b2256..c59970f9b 100644 --- a/SSL/src/Catalogs/МакетыПечатныхФорм/МакетыПечатныхФорм.mdo +++ b/SSL/src/Catalogs/МакетыПечатныхФорм/МакетыПечатныхФорм.mdo @@ -210,6 +210,69 @@ Use Use + + МакетДляВыгрузкиОбъекта + + ru + Макет для выгрузки объекта + + + Boolean + + + + + Use + Use + + + ФорматСохраненияОбъекта + + ru + Формат сохранения объекта + + + EnumRef.ФорматыВыгрузкиОбъектов + + + + + Use + Use + + + ОсновнаяПечатнаяФорма + + ru + Основная печатная форма + + + Boolean + + + + + Use + Use + + + НаименованиеПечатнойФормы + + ru + Наименование печатной формы + + + String + + 100 + + + + + + Use + Use + @@ -337,4 +400,13 @@ PersonalComputer MobileDevice + + НастройкиМакета + + ru + Настройки макета + + PersonalComputer + MobileDevice + diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Help/ru.html b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Help/ru.html deleted file mode 100644 index 0cb7a47d8..000000000 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Help/ru.html +++ /dev/null @@ -1,20 +0,0 @@ - -
      • Выберите Должность, например, Финансовый директор. 
      • -
      • Заполните ФИО должностного лица. 
      • -
      • Заполните Дату рождения должностного лица. 
      • -
      • Заполните Пол должностного лица. 
      • -
      • Заполните СНИЛС, ИНН должностного лица.
      • -
      • Заполните Гражданство, Место рождения.
      • -
      • Заполните Сведения о документе, удостоверяющем личность:
        • Вид документа - выберите с помощью выпадающего списка нужный документ, например, паспорт гражданина Российской Федерации. 
        • -
        • Серия, номер.
        • -
        • Кем выдан.
        • -
        • Дата выдачи.
        • -
        • Код подразделения.

      -
      • Заполните Контактную информацию должностного лица:
        • Заполните Адрес регистрации (регион, населенный пункт).
        • -
        • Заполните Телефон должностного лица. 
        • -
        • Номер записи единого регистра населения.  

      -

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

      -

      -


      -

      См. также:

      - \ No newline at end of file diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Module.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Module.bsl index 9ef23f978..5b4b7a36a 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Module.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОФизическомЛице/Module.bsl @@ -38,16 +38,12 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Адрес); - + + ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыАдреса(); ВидКонтактнойИнформации.НастройкиПроверки.ТолькоНациональныйАдрес = Истина; - ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Телефон); - + ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); КонецЕсли; ПроверитьАдрес("АдресРегистрации"); @@ -384,7 +380,8 @@ КонецПроцедуры &НаКлиенте -Процедура ПредставлениеАдресаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизита, ЗаголовокФормы) +Процедура ПредставлениеАдресаНачалоВыбора(Форма, Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяРеквизита, + ЗаголовокФормы) Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда Возврат; @@ -393,7 +390,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( "УправлениеКонтактнойИнформациейКлиент"); - УстановитьНаименованиеКонтактнойИнформации(ВидКонтактнойИнформации, ЗаголовокФормы); + ВидКонтактнойИнформации(ВидКонтактнойИнформации).Наименование = ЗаголовокФормы; ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформации, ЭтотОбъект[ИмяРеквизита + "Значение"], ЭтотОбъект[ИмяРеквизита]); @@ -402,13 +399,15 @@ КонецПроцедуры // Параметры: -// ВидКИ - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации -// ЗаголовокФормы - Строка +// Значение - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации +// +// Возвращаемое значение: +// см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации // &НаКлиенте -Процедура УстановитьНаименованиеКонтактнойИнформации(ВидКИ, ЗаголовокФормы) - ВидКИ.Наименование = ЗаголовокФормы; -КонецПроцедуры +Функция ВидКонтактнойИнформации(Значение) + Возврат Значение; +КонецФункции &НаКлиенте Процедура ПредставлениеАдресаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) @@ -450,9 +449,7 @@ ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформацииТелефон, ЭтотОбъект[ИмяРеквизита + "Значение"], ЭтотОбъект[ИмяРеквизита]); - ПараметрыФормы.Вставить("Заголовок", ЗаголовокФормы); - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); КонецПроцедуры @@ -517,9 +514,16 @@ Функция ПодготовитьИзмененияНаСервере() Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ЭлектроннаяПочтаЗначение = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( - ЭлектроннаяПочта, Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты); + Если ЗначениеЗаполнено(ЭлектроннаяПочта) Тогда + Если Не ЗначениеЗаполнено(ЭлектроннаяПочтаЗначение) Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ПараметрыВидаКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыАдресаЭлектроннойПочты(); + ЭлектроннаяПочтаЗначение = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( + ЭлектроннаяПочта, ПараметрыВидаКонтактнойИнформации.Тип); + КонецЕсли; + Иначе + ЭлектроннаяПочтаЗначение = ""; + КонецЕсли; КонецЕсли; РеквизитыУчастникаДляХранения = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастникаДляХранения(ЭтотОбъект); diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Form.form b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Form.form index 0a167c4ee..525997579 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Form.form +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Form.form @@ -1555,6 +1555,7 @@ MoveUp OutputList SearchEverywhere + SearchHistory SelectAll ShowMultipleSelection ShowRowRearrangement diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Help/ru.html b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Help/ru.html deleted file mode 100644 index 7ffc4015c..000000000 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Help/ru.html +++ /dev/null @@ -1,23 +0,0 @@ - -
      • Выберите Вид - Юридическое лицо или Индивидуальный предприниматель.
      • -
      • Если выбрали Юридическое лицо, то с помощью флажка можно также указать, является ли организация Иностранной или Филиалом. 
      • -
      • Заполните полное Наименование организации, например, Открытое акционерное общество "Ромашка". 
      • -
      • Заполните сокращенное Наименование, например, Ромашка ОАО. 
      • -
      • Заполните ИНН, КПП, ОГРН организации.
      • -
      • Заполните Наименование учредительного документа, например, Устав организации. 
      • -
      • Заполните Адрес регистрации организации.
      • -
      • Заполните Телефон организации. 
      • -
      • Заполните адрес Электронной почты организации. 
      • -
      • Если выбрана Иностранная организация также можно ввести следующие реквизиты компании:
        • Фактический адрес.
        • -
        • Юридический адрес в стране регистрации.
        • -
        • Страна регистрации.
        • -
        • Регистрационный номер в стране регистрации.
        • -
        • Код налогоплательщика в стране регистрации.
        • -
        • Номер записи об аккредитации.
        • -
        • Наименование регистрирующего органа. 

      -
      • Если выбран Филиал организации также необходимо ввести Регистрационный номер филиала. 

      -

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

      -

      -


      -

      См. также:

      - \ No newline at end of file diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Module.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Module.bsl index b381c7144..81afb234a 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Module.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/СведенияОбОрганизации/Module.bsl @@ -61,16 +61,12 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Адрес); - + ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыАдреса(); ВидКонтактнойИнформации.НастройкиПроверки.ТолькоНациональныйАдрес = Истина; - ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Телефон); + ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); - ВидКонтактнойИнформацииИностранныйАдрес = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Адрес); + ВидКонтактнойИнформацииИностранныйАдрес = МодульУправлениеКонтактнойИнформацией.ПараметрыАдреса(); ВидКонтактнойИнформацииИностранныйАдрес.НастройкиПроверки.ТолькоНациональныйАдрес = Ложь; ВидКонтактнойИнформацииИностранныйАдрес.НастройкиПроверки.ВключатьСтрануВПредставление = Истина; ВидКонтактнойИнформацииИностранныйАдрес.МеждународныйФорматАдреса = Истина; @@ -463,12 +459,12 @@ "УправлениеКонтактнойИнформациейКлиент"); Если ИмяРеквизита = "ЮридическийАдресВСтранеРегистрации" Тогда - УстановитьНаименованиеКонтактнойИнформации(ВидКонтактнойИнформацииИностранныйАдрес, ЗаголовокФормы); + ВидКонтактнойИнформации(ВидКонтактнойИнформацииИностранныйАдрес).Наименование = ЗаголовокФормы; ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформацииИностранныйАдрес, ЭтотОбъект[ИмяРеквизита + "Значение"], ЭтотОбъект[ИмяРеквизита]); ПараметрыФормы.Вставить("Страна", СтранаРегистрацииКод); Иначе - УстановитьНаименованиеКонтактнойИнформации(ВидКонтактнойИнформации, ЗаголовокФормы); + ВидКонтактнойИнформации(ВидКонтактнойИнформации).Наименование = ЗаголовокФормы; ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформации, ЭтотОбъект[ИмяРеквизита + "Значение"], ЭтотОбъект[ИмяРеквизита]); КонецЕсли; @@ -478,13 +474,15 @@ КонецПроцедуры // Параметры: -// ВидКИ - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации -// ЗаголовокФормы - Строка +// Значение - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации +// +// Возвращаемое значение: +// см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации // &НаКлиенте -Процедура УстановитьНаименованиеКонтактнойИнформации(ВидКИ, ЗаголовокФормы) - ВидКИ.Наименование = ЗаголовокФормы; -КонецПроцедуры +Функция ВидКонтактнойИнформации(Значение) + Возврат Значение; +КонецФункции &НаКлиенте Процедура ПредставлениеАдресаОчистка(Форма, Элемент, СтандартнаяОбработка, ИмяРеквизита) diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаВводаПолномочий/Module.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаВводаПолномочий/Module.bsl index 942aa4cfc..b404a7d45 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаВводаПолномочий/Module.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаВводаПолномочий/Module.bsl @@ -887,7 +887,7 @@ НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Пользователь = Пользователь; НоваяЗапись.Наименование = Наименование; - НоваяЗапись.Настройка = Новый ХранилищеЗначения(НастройкаПолномочий); + НоваяЗапись.Настройка = Новый ХранилищеЗначения(НастройкаПолномочий, Новый СжатиеДанных(9)); НаборЗаписей.Записать(); КонецПроцедуры diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Form.form index 8841c2e1e..d568fcac6 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Form.form @@ -639,6 +639,10 @@ Список 3 + + <key>ru</key> + <value>Список</value> + true true diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Module.bsl index d0dcbaf05..593b7b32a 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаСписка/Module.bsl @@ -206,6 +206,7 @@ ПараметрыФормы.Вставить("ВыбранныйСертификат", СертификатПредставителя); ПараметрыФормы.Вставить("ВыполнятьНаСервере"); ПараметрыФормы.Вставить("РежимВыбораСсылки", Истина); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Истина); ОбработчикЗавершения = Новый ОписаниеОповещения("СертификатОкончаниеВыбора", ЭтотОбъект); МодульЭлектроннаяПодписьСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиент"); @@ -269,6 +270,10 @@ &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) + Если СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список.ТекущиеДанные) Тогда + Элементы.СписокВыгрузитьВФайл.Видимость = ЗначениеЗаполнено(Элементы.Список.ТекущиеДанные.ФайлДоверенности); + КонецЕсли; + // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды @@ -503,13 +508,32 @@ МашиночитаемыеДоверенностиФНССлужебныйКлиент.ОбработатьОшибкуВзаимодействияРР(Ошибка, КонтекстОшибки); Возврат; - + КонецЕсли; - + Если Результат.Значение <> "Загрузить" Тогда Возврат; КонецЕсли; + ЗагрузитьДоверенностиПослеПроверкиУстановкиКомпонент(); + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ЗагрузитьДоверенностиПослеПроверкиУстановкиКомпонент(ПовторныйВызов = Ложь) + + Если Не ПовторныйВызов Тогда + ПараметрыПовторногоВызова = Новый Структура; + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения("ЗагрузитьДоверенностиПослеПроверкиУстановкиКомпонентПовторноПослеУстановкиКомпонент", + ЭтотОбъект, ПараметрыПовторногоВызова); + МодульЭлектроннаяПодписьСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиент"); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать МодульЭлектроннаяПодписьСлужебныйКлиент.ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Загрузка доверенности из файла'"); ПараметрыЗагрузки.Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -521,6 +545,16 @@ КонецПроцедуры +// Повторный вызов процедуры ЗагрузитьДоверенностиПослеПроверкиУстановкиКомпонент после установки компонент. +&НаКлиенте +Процедура ЗагрузитьДоверенностиПослеПроверкиУстановкиКомпонентПовторноПослеУстановкиКомпонент(Результат, ПараметрыПовторногоВызова) Экспорт + + Если Результат = Истина Тогда + ЗагрузитьДоверенностиПослеПроверкиУстановкиКомпонент(Истина); + КонецЕсли; + +КонецПроцедуры + // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Form.form index 376c111b9..332ea2db6 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Form.form @@ -2654,6 +2654,7 @@ MoveDown MoveUp SearchEverywhere + SearchHistory SelectAll ShowMultipleSelection ShowRowRearrangement @@ -4329,6 +4330,7 @@ MoveUp OutputList SearchEverywhere + SearchHistory SelectAll ShowMultipleSelection ShowRowRearrangement diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Help/ru.html index f5807ada7..9ec598b5d 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Help/ru.html @@ -1,36 +1,36 @@

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

      Форма МЧД должна соответствовать требованиям, утвержденным приказом Минцифры России от 18.08.2021 №857 "Об утверждении единых требований к формам доверенностей, необходимым для использования квалифицированной электронной подписи".

      -

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

      +

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

      Ввод доверителя

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

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

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

      Иные сведения

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

    Иные сведения

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

    Нотариальная доверенность

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

    Нотариальная доверенность

    • Для оформления Нотариальной доверенности, например, при передаче полномочий сотрудника другому сотруднику, необходимо обратиться к нотариусу.
    • -
    • Нотариус выгружает подписанную МЧД в Распределенный реестр ФНС и в личный кабинет заявителя на портале нотариуса. Оттуда ее можно загрузить себе на устройство. 

    Подписание доверенности

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

    Регистрация в реестре

    +
    С помощью кнопки Подписать подпишите доверенность сертификатом электронной подписи, предварительно установленным на устройство.

    Регистрация в реестре

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

    См. также:

    - \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Module.bsl index 89b2251e3..e7ce15e48 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Forms/ФормаЭлемента/Module.bsl @@ -962,8 +962,16 @@ КонецЕсли; КонецЦикла; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПоказатьИнструкцию", Истина); + ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru='Проверка доверенности'"), "", РезультатПроверкиДоверенности.ОписаниеОшибок, Новый Структура); + НСтр("ru='Проверка доверенности'"), + "", + РезультатПроверкиДоверенности.ОписаниеОшибок, + Новый Структура, + ДополнительныеПараметры); + КонецЕсли; ОтобразитьДекорациюВерна(ЭтотОбъект); @@ -3320,7 +3328,7 @@ СтрокаОбъекта = Объект.Доверители.НайтиСтроки(Новый Структура("Идентификатор", Строка.Идентификатор))[0]; РеквизитыДоверителя = ПолучитьИзВременногоХранилища(СтрокаОбъекта.АдресРеквизитов); - Строка.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыДоверителя); + Строка.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыДоверителя, Новый СжатиеДанных(9)); Строка.ЭтоФизЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо; КонецЦикла; @@ -3330,7 +3338,7 @@ СтрокаОбъекта = Объект.Представители.НайтиСтроки(Новый Структура("Идентификатор", Строка.Идентификатор))[0]; РеквизитыПредставителя = ПолучитьИзВременногоХранилища(СтрокаОбъекта.АдресРеквизитов); - Строка.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыПредставителя); + Строка.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыПредставителя, Новый СжатиеДанных(9)); КонецЦикла; @@ -3749,9 +3757,12 @@ СохранитьРезультатПроверкиПодписей = Ложь; ЭлектронныеПодписи.Очистить(); - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(Объект.ФайлДоверенности); - Для Каждого ЭлектроннаяПодписьФайла Из УстановленныеПодписи Цикл + ПараметрыПолученияПодписей = ЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(Объект.ФайлДоверенности, ПараметрыПолученияПодписей); + + Для Каждого ЭлектроннаяПодписьФайла Из ПодписиОбъекта Цикл РезультатПроверкиПодписиВФорме = ЭлектроннаяПодписьКлиентСервер.РезультатПроверкиПодписиВФорме(); ЗаполнитьЗначенияСвойств(РезультатПроверкиПодписиВФорме, ЭлектроннаяПодписьФайла); @@ -3765,7 +3776,7 @@ НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище(ЭлектроннаяПодписьФайла.Подпись, УникальныйИдентификатор); ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтатусПодписи(НоваяСтрока, ТекущаяДатаСеанса()); - ДвоичныеДанныеСертификата = ЭлектроннаяПодписьФайла.Сертификат.Получить(); + ДвоичныеДанныеСертификата = ЭлектроннаяПодписьФайла.Сертификат; Если ДвоичныеДанныеСертификата <> Неопределено Тогда НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( ДвоичныеДанныеСертификата, УникальныйИдентификатор); @@ -4136,7 +4147,7 @@ ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить( - Тип("ЭлементОтбораКомпоновкиДанных")); + Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЦепочкаПередоверия.НомерДоверенности"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение = Объект.НомерДоверенности; @@ -4147,7 +4158,7 @@ ЭлементШрифтаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Шрифт"); - Шрифт = Новый Шрифт(Элементы.ЦепочкаПередоверия.Шрифт,,,Истина); + Шрифт = Новый Шрифт(Элементы.ЦепочкаПередоверия.Шрифт,,,Истина); // АПК:1345 Шрифт формируется на основании шрифта элемента. ЭлементШрифтаОформления.Значение = Шрифт; ЭлементШрифтаОформления.Использование = Истина; diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Help/ru.html b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Help/ru.html index 9c2d5e699..b00619008 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/Help/ru.html +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/Help/ru.html @@ -1,40 +1,60 @@

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

    -

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

    -

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

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

    -

    Ведение списка МЧД может осуществлять как администратор, так и ответственный за список МЧД. Доверенность попадает в список разными способами:

    -
    • Автоматически - путем загрузки из узла распределенного реестра ФНС;
    • -
    • Вручную - путем создания и подписания МЧД в приложении;
    • -
    • Вручную - путем загрузки МЧД контрагентов, полученных, например,по электронной почте.

    Список состоит из колонок: 

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

    Создание доверенности

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

    Печать доверенности

    +

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

    +

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

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

    +

    Ведение списка МЧД может осуществлять как администратор, так и ответственный за список МЧД. Доверенность попадает в список разными способами:

    +
    • +
      Автоматически - путем загрузки из узла распределенного реестра ФНС;
      +
    • +
    • +
      Вручную - путем создания и подписания МЧД в приложении;
      +
    • +
    • +
      Вручную - путем загрузки МЧД контрагентов, полученных, например,по электронной почте.

    Список состоит из колонок:

    +
    • +
      Номер доверенности (в реестре) - единый регистрационный номер доверенности, генерируется автоматически при подписании или выгрузке в файл неподписанной доверенности.
      +
    • +
    • +
      Наименование - наименование машиночитаемой доверенности.
      +
    • +
    • +
      Дата выдачи - дата выдачи машиночитаемой доверенности.
      +
    • +
    • +
      Дата окончания - дата окончания действия машиночитаемой доверенности.
      +
    • +
    • +
      Код НО - код налогового органа, в отношении которого действует доверенность.
      +
    • +
    • +
      Номер (внутренний) - внутренний номер машиночитаемой доверенности, генерируется автоматически.

    Создание доверенности

    +

    Печать доверенности

    -
    • Готовую доверенность можно напечатать из списка МЧД, а также в карточке МЧД с помощью кнопки Доверенность.
    -

    Передоверие

    +
    • Готовую доверенность можно напечатать из списка МЧД, а также в карточке МЧД с помощью кнопки Доверенность.
    +

    Передоверие

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

    Отборы

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

    Отборы

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

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

    Загрузка МЧД

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

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

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

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

    -
    • Обновить статус из реестра ФНС - нажмите, для того чтобы обновить статус из реестра ФНС.
    • -
    • Отменить - если доверенность утратила свою актуальность ранее срока окончания доверенности, то ее можно отменить.

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

    -

    См. также:

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

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

    +
    • С помощью кнопки Загрузить из файла можно загрузить МЧД из файла на устройстве. Укажите путь к файлу, нажмите Открыть.

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

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

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

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

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

    +

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/ManagerModule.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/ManagerModule.bsl index f77ca95c8..9b4a0ef0c 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/ManagerModule.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/ManagerModule.bsl @@ -951,6 +951,7 @@ Если ФайлДоверенности.Пустая() Тогда ФайлыДоверенностей[Доверенность] = ФайлыДоверенности; + ОписанияФайловДоверенностей.Вставить(Доверенность, ФайлыДоверенности); Продолжить; КонецЕсли; @@ -969,8 +970,8 @@ ФайлыДоверенности.Добавить(ОписаниеФайла); - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(ФайлДоверенности); - Для Каждого ФайлПодписи Из УстановленныеПодписи Цикл + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(ФайлДоверенности); + Для Каждого ФайлПодписи Из ПодписиОбъекта Цикл ОписаниеФайла = ОписаниеФайла(); ИмяФайлаПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(ИмяФайлаДоверенности, ФайлПодписи.КомуВыданСертификат, ЭлектроннаяПодпись.ПерсональныеНастройки().РасширениеДляФайловПодписи); @@ -1065,22 +1066,7 @@ ВывестиПередоверие(ТабличныйДокумент, Макет, Доверенность.Документ.Передов); КонецЕсли; - ПараметрыШтампа = Новый Структура; - ПараметрыШтампа.Вставить("ТекстОтметки", ""); - ПараметрыШтампа.Вставить("Логотип"); - - ЭлектронныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(ФайлДоверенности); - - Штампы = Новый Массив; - Для Каждого Подпись Из ЭлектронныеПодписи Цикл - Сертификат = Подпись.Сертификат; - СертификатКриптографии = Новый СертификатКриптографии(Сертификат.Получить()); - - Штамп = ЭлектроннаяПодпись.ШтампВизуализацииЭлектроннойПодписи(СертификатКриптографии, - Подпись.ДатаПодписи, ПараметрыШтампа.ТекстОтметки, ПараметрыШтампа.Логотип); - - Штампы.Добавить(Штамп); - КонецЦикла; + Штампы = ЭлектроннаяПодпись.ШтампыВизуализацииЭлектронныхПодписей(ФайлДоверенности); ЭлектроннаяПодпись.ДобавитьШтампыВТабличныйДокумент(ТабличныйДокумент, Штампы); @@ -1487,7 +1473,7 @@ // // Возвращаемое значение: // Структура - уже разобранные файлы доверенностей и подписей: -// * ФайлыДоверенностей - Соответствие - файлы доверенностей +// * ФайлыДоверенностей - Соответствие // * ПодписиФайлов - Соответствие - файлы подписей доверенностей // * ФайлыПодписей - Соответствие - другие файлы подписей // * ФайлыZIP - Соответствие - архивы @@ -2267,7 +2253,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Доверитель = Объект.Доверители.Добавить(); - Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Доверитель.Идентификатор = Новый УникальныйИдентификатор; Если СвязаннаяОрганизация = Неопределено Тогда @@ -2290,7 +2276,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Представитель = Объект.Представители.Добавить(); - Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Представитель.Идентификатор = Новый УникальныйИдентификатор; Если СвязаннаяОрганизация = Неопределено Тогда @@ -2313,7 +2299,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Представитель = Объект.Представители.Добавить(); - Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Представитель.Идентификатор = Новый УникальныйИдентификатор; Если СвязаннаяОрганизация = Неопределено Тогда @@ -2336,7 +2322,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Доверитель = Объект.Доверители.Добавить(); - Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Доверитель.ИдентификаторРодителя = СвязаннаяОрганизация.Идентификатор; Доверитель.Идентификатор = Новый УникальныйИдентификатор; Доверитель.ЭтоФизЛицо = Истина; @@ -2354,7 +2340,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Представитель = Объект.Представители.Добавить(); - Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Если СвязаннаяОрганизация = Неопределено Тогда Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); @@ -2376,7 +2362,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Доверитель = Объект.Доверители.Добавить(); - Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Доверитель.Идентификатор = Новый УникальныйИдентификатор; Доверитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); Доверитель.ЭтоФизЛицо = Истина; @@ -2395,7 +2381,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Представитель = Объект.Представители.Добавить(); - Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Представитель.Идентификатор = Новый УникальныйИдентификатор; Если ИдентификаторРодителя = Неопределено Тогда Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); @@ -2417,7 +2403,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); ДоверительОрганизация = Объект.Доверители.Добавить(); - ДоверительОрганизация.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + ДоверительОрганизация.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Если СвязаннаяОрганизация = Неопределено Тогда ДоверительОрганизация.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); @@ -2433,7 +2419,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); ДоверительФизическоеЛицо = Объект.Доверители.Добавить(); - ДоверительФизическоеЛицо.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + ДоверительФизическоеЛицо.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); ДоверительФизическоеЛицо.ИдентификаторРодителя = ДоверительОрганизация.Идентификатор; ДоверительФизическоеЛицо.Идентификатор = Новый УникальныйИдентификатор; @@ -2451,7 +2437,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Представитель = Объект.Представители.Добавить(); - Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника( @@ -2479,7 +2465,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Доверитель = Объект.Доверители.Добавить(); - Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Доверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Доверитель.Идентификатор = Новый УникальныйИдентификатор; Доверитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); @@ -2497,7 +2483,7 @@ ЗаполнитьЗначенияСвойств(РеквизитыУчастника, Параметры); Представитель = Объект.Представители.Добавить(); - Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника); + Представитель.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыУчастника, Новый СжатиеДанных(9)); Представитель.ИдентификаторРодителя = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); Представитель.Идентификатор = Новый УникальныйИдентификатор; @@ -2524,7 +2510,7 @@ РеквизитыНотариальнойДоверенности.ИсполняющийОбязанностиНотариуса = РеквизитыНотариуса; КонецЕсли; - Объект.РеквизитыНотариальнойДоверенности = Новый ХранилищеЗначения(РеквизитыНотариальнойДоверенности); + Объект.РеквизитыНотариальнойДоверенности = Новый ХранилищеЗначения(РеквизитыНотариальнойДоверенности, Новый СжатиеДанных(9)); КонецПроцедуры diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/ObjectModule.bsl b/SSL/src/Catalogs/МашиночитаемыеДоверенности/ObjectModule.bsl index c3ae812be..50d5960e1 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/ObjectModule.bsl +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/ObjectModule.bsl @@ -202,7 +202,7 @@ НоваяСтрока = Доверители.Добавить(); НоваяСтрока.Доверитель = СтрокаОрганизация.Представитель; - НоваяСтрока.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыОрганизации); + НоваяСтрока.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыОрганизации, Новый СжатиеДанных(9)); НоваяСтрока.ЭтоФизЛицо = РеквизитыОрганизации.ЭтоФизическоеЛицо; НоваяСтрока.Идентификатор = СтрокаОрганизация.Идентификатор; @@ -215,7 +215,7 @@ НоваяСтрокаФизЛицо.Доверитель = СтрокаФизическоеЛицо.Представитель; ДоверительРеквизиты = СтрокаФизическоеЛицо.ПредставительРеквизиты.Получить(); НоваяСтрокаФизЛицо.Идентификатор = СтрокаФизическоеЛицо.Идентификатор; - НоваяСтрокаФизЛицо.ДоверительРеквизиты = Новый ХранилищеЗначения(ДоверительРеквизиты); + НоваяСтрокаФизЛицо.ДоверительРеквизиты = Новый ХранилищеЗначения(ДоверительРеквизиты, Новый СжатиеДанных(9)); НоваяСтрокаФизЛицо.ЭтоФизЛицо = ДоверительРеквизиты.ЭтоФизическоеЛицо; НоваяСтрокаФизЛицо.ИдентификаторРодителя = НоваяСтрока.Идентификатор; КонецЕсли; diff --git a/SSL/src/Catalogs/МашиночитаемыеДоверенности/МашиночитаемыеДоверенности.mdo b/SSL/src/Catalogs/МашиночитаемыеДоверенности/МашиночитаемыеДоверенности.mdo index 76d9a833f..87eb557a6 100644 --- a/SSL/src/Catalogs/МашиночитаемыеДоверенности/МашиночитаемыеДоверенности.mdo +++ b/SSL/src/Catalogs/МашиночитаемыеДоверенности/МашиночитаемыеДоверенности.mdo @@ -1003,11 +1003,6 @@ ru Сведения об организации
    - - - ru - - PersonalComputer MobileDevice
    @@ -1017,11 +1012,6 @@ ru Сведения о физическом лице - - - ru - - PersonalComputer MobileDevice diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl index 07c3a3898..cfad3eff6 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Module.bsl @@ -260,7 +260,7 @@ Если ВыбранноеЗначение.Свойство("ВладелецДополнительныхЗначений") Тогда ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВидСвойств", ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", ВидСвойств); ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", ВыбранноеЗначение.ВладелецДополнительныхЗначений); @@ -308,7 +308,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НаборСвойств", ТекущийНабор); - ПараметрыФормы.Вставить("ВидСвойств", ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", ВидСвойств); ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", @@ -334,7 +334,7 @@ КонецЕсли; ПараметрыФормы.Вставить("ВыбранныеЗначения", ВыбранныеЗначения); - ПараметрыФормы.Вставить("ВидСвойств", ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", ВидСвойств); ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНабор); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", @@ -382,7 +382,7 @@ ПараметрыФормы.Вставить("КопированиеСВопросом", Истина); ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", ВладелецДополнительныхЗначений); - ПараметрыФормы.Вставить("ВидСвойств", ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", ВидСвойств); ПараметрыФормы.Вставить("ТекущийНаборСвойств", ТекущийНаборСвойств); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", ПараметрыФормы, Элементы.Свойства); diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html index 224615d21..278dad1b2 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html @@ -1,7 +1,7 @@ -

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

    +

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

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

    -

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

    +

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

    См. также:

    • Наборы дополнительных реквизитов и сведений;
    • diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html index e4d23b2af..2bafd064d 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -1,64 +1,64 @@

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

      -

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

      -

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

      +

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

      +

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

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

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

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

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

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

    -

    Работа со свойствами осуществляется в списках, которые открываются по команде Дополнительные реквизиты, или Дополнительные сведения, или Метки в разделе Администрирование - Общие настройки - Свойства. 

    -

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

    -

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

    +

    Работа со свойствами осуществляется в списках, которые открываются по команде Дополнительные реквизиты, или Дополнительные сведения, или Метки в разделе Администрирование - Общие настройки - Свойства.

    +

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

    +

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

    Список Свойств представляет собой таблицу из двух частей:

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

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

      -

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

      +
    • Тип значения - указывается тип свойств и количество значений.

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

    +

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

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

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

      Общие наборы свойств

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

    Общие наборы свойств

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

    Добавление из другого набора

    +
    Нажмите Создать или Добавить - Новый (Новое). Заполните необходимые поля.

    Добавление из другого набора

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

      Добавление свойств как есть

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

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

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

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

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

          См. также:

          diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index 2cdbb7130..89c59a7ba 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -366,7 +366,8 @@ ИнтеграцияПодсистемБСП.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств(ДеревоНаборов); - НаименованияНаборовСвойств = УправлениеСвойствамиСлужебный.НаименованияНаборовСвойств(); + ПредопределенныеДанные = УправлениеСвойствамиСлужебный.ПредопределенныеНаборыСвойств(); + НаименованияНаборовСвойств = УправлениеСвойствамиСлужебный.НаименованияНаборовСвойств(ПредопределенныеДанные); Наименования = НаименованияНаборовСвойств[ТекущийЯзык().КодЯзыка]; НаборыСвойств = Новый Соответствие; @@ -381,8 +382,6 @@ НаборыСвойств[СвойстваНабора.Ссылка] = Новый ФиксированнаяСтруктура(НаборыСвойств[СвойстваНабора.Ссылка]); КонецЦикла; - ПредопределенныеДанные = УправлениеСвойствамиСлужебный.ПредопределенныеНаборыСвойств(); - НаименованиеНаЯзыкеПользователя = "Наименование" + "_" + ТекущийЯзык().КодЯзыка; ЕстьЯзыковаяКолонка = ПредопределенныеДанные.Колонки.Найти(НаименованиеНаЯзыкеПользователя) <> Неопределено; diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl index 0715795be..d6dc1c730 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl @@ -39,7 +39,7 @@ Реквизитов = 0; Меток = 0; Свойства = ДополнительныеРеквизиты.Выгрузить().ВыгрузитьКолонку("Свойство"); - ВидыСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Свойства, "ВидСвойств"); + ВидыСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Свойства, "ВидСвойства"); Для каждого ДополнительныйРеквизит Из ДополнительныеРеквизиты Цикл Если ДополнительныйРеквизит.Свойство.Пустая() @@ -59,7 +59,7 @@ Продолжить; КонецЕсли; - Если Свойство.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + Если Свойство.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Меток = Меток + 1; Иначе Реквизитов = Реквизитов + 1; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Form.form b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/НастройкаПодключенияКСервису/Form.form similarity index 89% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Form.form rename to SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/НастройкаПодключенияКСервису/Form.form index 88d3b2b2f..955c10e0a 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Form.form +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/НастройкаПодключенияКСервису/Form.form @@ -64,7 +64,7 @@ ГруппаПароль 9 - WSПароль + Пароль 7 <key>ru</key> @@ -76,7 +76,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>WSПароль</segments> + <segments>Пароль</segments> </dataPath> <toolTip> <key>ru</key> @@ -84,10 +84,10 @@ </toolTip> <handlers> <event>OnChange</event> - <name>WSПарольПриИзменении</name> + <name>ПарольПриИзменении</name> </handlers> <extendedTooltip> - <name>WSПарольExtendedTooltip</name> + <name>ПарольРасширеннаяПодсказка</name> <id>28</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -97,7 +97,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>WSПарольКонтекстноеМеню</name> + <name>ПарольКонтекстноеМеню</name> <id>8</id> <autoFill>true</autoFill> </contextMenu> @@ -221,7 +221,7 @@ <id>18</id> <title> <key>ru</key> - <value>Хранение пароля в программе небезопасно. + <value>Хранение пароля в приложении небезопасно. Для автоматической синхронизации данных с приложением в Интернете рекомендуется указывать отдельного пользователя с ограниченными правами (только права на синхронизацию данных).</value> @@ -350,8 +350,8 @@ <name>ФормаКоманднаяПанель</name> <id>-1</id> <items xsi:type="form:Button"> - <name>ФормаЗаписатьИЗакрыть</name> - <id>22</id> + <name>ФормаПроверитьПодключениеИЗакрыть</name> + <id>34</id> <title> <key>ru</key> <value>Проверить подключение и закрыть</value> @@ -362,8 +362,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ФормаЗаписатьИЗакрытьExtendedTooltip</name> - <id>23</id> + <name>ФормаПроверитьПодключениеИЗакрытьРасширеннаяПодсказка</name> + <id>35</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -371,7 +371,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.StandardCommand.WriteAndClose</commandName> + <commandName>Form.Command.ПроверитьПодключениеИЗакрыть</commandName> <representation>Auto</representation> <defaultButton>true</defaultButton> <autoMaxWidth>true</autoMaxWidth> @@ -412,17 +412,13 @@ </handlers> <excludedCommands>Abort</excludedCommands> <excludedCommands>Cancel</excludedCommands> - <excludedCommands>Copy</excludedCommands> - <excludedCommands>Delete</excludedCommands> <excludedCommands>Help</excludedCommands> <excludedCommands>Ignore</excludedCommands> <excludedCommands>No</excludedCommands> <excludedCommands>OK</excludedCommands> - <excludedCommands>Reread</excludedCommands> <excludedCommands>RestoreValues</excludedCommands> <excludedCommands>Retry</excludedCommands> <excludedCommands>SaveValues</excludedCommands> - <excludedCommands>Write</excludedCommands> <excludedCommands>Yes</excludedCommands> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> @@ -432,21 +428,6 @@ <enabled>true</enabled> <showTitle>auto</showTitle> <showCloseButton>true</showCloseButton> - <attributes> - <name>Запись</name> - <id>1</id> - <valueType> - <types>InformationRegisterRecordManager.НастройкиТранспортаОбменаДанными</types> - </valueType> - <view> - <common>true</common> - </view> - <edit> - <common>true</common> - </edit> - <main>true</main> - <savedData>true</savedData> - </attributes> <attributes> <name>АдресДляВосстановленияПароляУчетнойЗаписи</name> <id>2</id> @@ -492,7 +473,7 @@ </edit> </attributes> <attributes> - <name>WSПароль</name> + <name>Пароль</name> <title> <key>ru</key> <value>Пароль</value> @@ -512,7 +493,7 @@ </edit> </attributes> <attributes> - <name>WSПарольИзменен</name> + <name>ПарольИзменен</name> <id>6</id> <valueType> <types>Boolean</types> @@ -524,6 +505,44 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>НастройкиТранспорта</name> + <id>7</id> + <valueType/> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> + <attributes> + <name>Корреспондент</name> + <id>1</id> + <valueType> + <types>ExchangePlanRef</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> + <attributes> + <name>ИдентификаторТранспорта</name> + <id>8</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> <formCommands> <name>ЗабылиПароль</name> <title> @@ -568,18 +587,30 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПроверитьПодключениеИЗакрыть</name> + <title> + <key>ru</key> + <value>Проверить подключение и закрыть</value> + + 1 + + ru + Проверить подключение и закрыть + + + true + + + + ПроверитьПодключениеИЗакрыть + + + Auto + Auto + - - - BeforeWrite - ПередЗаписью - - - BeforeWriteAtServer - ПередЗаписьюНаСервере - - diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl similarity index 63% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl rename to SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl index 1d8413b50..092d2e4f3 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/НастройкаПодключенияКСервису/Module.bsl +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -11,17 +11,20 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Не Параметры.Свойство("Корреспондент") + Или Не Параметры.Свойство("ИдентификаторТранспорта") + Или Не Параметры.Свойство("АдресДляВосстановленияПароляУчетнойЗаписи") + Или Не Параметры.Свойство("НастройкаАвтоматическойСинхронизации") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); УстановитьПривилегированныйРежим(Истина); - // Проверка, что форма открыта с нужными параметрами - Если Не Параметры.Свойство("АдресДляВосстановленияПароляУчетнойЗаписи") Тогда - - ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", ОбщегоНазначения.КодОсновногоЯзыка()); - - КонецЕсли; - АдресДляВосстановленияПароляУчетнойЗаписи = Параметры.АдресДляВосстановленияПароляУчетнойЗаписи; НастройкаАвтоматическойСинхронизации = Параметры.НастройкаАвтоматическойСинхронизации; @@ -30,31 +33,38 @@ Иначе Элементы.ПараметрыДоступаВИнтернет.Видимость = Ложь; КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, + "Корреспондент,ИдентификаторТранспорта,АдресДляВосстановленияПароляУчетнойЗаписи,НастройкаАвтоматическойСинхронизации"); - Если Не ПустаяСтрока(Запись.WSИмяПользователя) Тогда - - Пользователь = Пользователи.НайтиПоИмени(Запись.WSИмяПользователя); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(Корреспондент, ИдентификаторТранспорта); + Если Не ПустаяСтрока(НастройкиТранспорта.ИмяПользователя) Тогда + Пользователь = Пользователи.НайтиПоИмени(НастройкиТранспорта.ИмяПользователя); КонецЕсли; Для Каждого ПользовательСинхронизации Из ПользователиСинхронизацииДанных() Цикл - Элементы.Пользователь.СписокВыбора.Добавить(ПользовательСинхронизации.Пользователь, ПользовательСинхронизации.Представление); - КонецЦикла; - + Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); - Если ЗначениеЗаполнено(Запись.Корреспондент) Тогда - Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "WSПароль"); - WSПароль = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); + Если ЗначениеЗаполнено(НастройкиТранспорта.Пароль) Тогда + + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.Пароль); + + Иначе + + НастройкиТранспорта.Пароль = Строка(Новый УникальныйИдентификатор); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) +Процедура ПроверитьПодключениеИЗакрыть(Команда) + Отказ = Ложь; ПроверитьПодключениеКСервису(Отказ); Если Отказ Тогда @@ -65,14 +75,10 @@ Оповестить("Запись_НастройкиТранспортаОбмена", Новый Структура("НастройкаАвтоматическойСинхронизации")); + КонецЕсли; - -КонецПроцедуры -&НаСервере -Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - - ТекущийОбъект.WSЗапомнитьПароль = Истина; + Закрыть(); КонецПроцедуры @@ -81,8 +87,8 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура WSПарольПриИзменении(Элемент) - WSПарольИзменен = Истина; +Процедура ПарольПриИзменении(Элемент) + ПарольИзменен = Истина; КонецПроцедуры #КонецОбласти @@ -92,14 +98,14 @@ &НаКлиенте Процедура ЗабылиПароль(Команда) - ОбменДаннымиКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); + ТранспортСообщенийОбменаКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); КонецПроцедуры &НаКлиенте Процедура ПараметрыДоступаВИнтернет(Команда) - ОбменДаннымиКлиент.ОткрытьФормуПараметровПроксиСервера(); + ТранспортСообщенийОбменаКлиент.ОткрытьФормуПараметровПроксиСервера(); КонецПроцедуры @@ -115,29 +121,36 @@ // Определяем имя пользователя. СвойстваПользователя = Пользователи.СвойстваПользователяИБ( ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ")); + + ПараметрыТранспорта = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + ПараметрыТранспорта.Корреспондент = Корреспондент; + ПараметрыТранспорта.ИдентификаторТранспорта = ИдентификаторТранспорта; + ПараметрыТранспорта.НастройкиТранспорта = НастройкиТранспорта; + + Транспорт = ТранспортСообщенийОбмена.Инициализация(ПараметрыТранспорта); // ОбработкаОбъект.ТранспортСообщенийОбменаWS + Транспорт.Пароль = Пароль; + Если СвойстваПользователя <> Неопределено Тогда - Запись.WSИмяПользователя = СвойстваПользователя.Имя + Транспорт.ИмяПользователя = СвойстваПользователя.Имя КонецЕсли; - // Выполняем проверку подключения к корреспонденту. - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); - - Если WSПарольИзменен Тогда - ПараметрыПодключения.WSПароль = WSПароль; - Иначе - ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "WSПароль"); - КонецЕсли; - - СообщениеПользователю = ""; - Если Не ОбменДаннымиВебСервис.ЕстьПодключениеККорреспонденту(Запись.Корреспондент, ПараметрыПодключения, СообщениеПользователю) Тогда - ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю,, "WSПароль",, Отказ); - Иначе + Если Транспорт.ПодключениеУстановлено() Тогда + + НастройкиТранспорта.ИмяПользователя = Транспорт.ИмяПользователя; + НастройкиТранспорта.ЗапомнитьПароль = Истина; + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта(Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, Истина); + // Проверка подключения прошла успешно, записываем пароль, если он был изменен - Если WSПарольИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Запись.Корреспондент, WSПароль, "WSПароль"); - КонецЕсли; - КонецЕсли; + Если ПарольИзменен Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(НастройкиТранспорта.Пароль, Пароль); + КонецЕсли + + Иначе + + ОбщегоНазначения.СообщитьПользователю(Транспорт.СообщениеОбОшибке,, "Пароль",, Отказ); + + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ПанельНастроекТранспорта/Form.form b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ПанельНастроекТранспорта/Form.form new file mode 100644 index 000000000..7b1bf4cba --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ПанельНастроекТранспорта/Form.form @@ -0,0 +1,980 @@ + + + + <key>ru</key> + <value>Настройки транспорта</value> + + + ПанельОсновная + 14 + + СтраницаТранспорт + 16 + + ТипыТранспорта + 20 + + <key>ru</key> + <value>Типы транспорта</value> + + true + true + + true + + + ТипыТранспорта + + None + + ТипыТранспортаКартинки + 58 + + ТипыТранспортаКартинкаФлаг + 45 + + <key>ru</key> + <value>Картинка флаг</value> + + true + true + + true + + + ТипыТранспорта.КартинкаФлаг + + + ТипыТранспортаКартинкаФлагРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ТипыТранспортаКартинкаФлагКонтекстноеМеню + 46 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ТипыТранспортаКартинка + 39 + + <key>ru</key> + <value>Картинка</value> + + true + true + + true + + + ТипыТранспорта.Картинка + + + ТипыТранспортаКартинкаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + ТипыТранспортаКартинкаКонтекстноеМеню + 40 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + true + true + + true + + + <key>ru</key> + <value>Типы транспорта картинки</value> + + + ТипыТранспортаКартинкиРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + ТипыТранспортаПсевдоним + 36 + + <key>ru</key> + <value>Транспорт</value> + + true + true + + true + + + ТипыТранспорта.Псевдоним + + + ТипыТранспортаПсевдонимРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ТипыТранспортаПсевдонимКонтекстноеМеню + 37 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ТипыТранспортаКартинкаСправка + 42 + + <key>ru</key> + <value>Картинка справка</value> + + true + true + + true + + + ТипыТранспорта.КартинкаСправка + + + ТипыТранспортаКартинкаСправкаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ТипыТранспортаКартинкаСправкаКонтекстноеМеню + 43 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ТипыТранспортаКоманднаяПанель + 22 + + ТипыТранспортаИспользоватьПоУмолчанию + 48 + + <key>ru</key> + <value>Использовать по умолчанию</value> + + true + true + + true + + + ТипыТранспортаИспользоватьПоУмолчаниюРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.Command.ИспользоватьПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ТипыТранспортаНастроить + 50 + + <key>ru</key> + <value>Настроить</value> + + true + true + + true + + + ТипыТранспортаНастроитьРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.Настроить + Normal + Auto + true + true + UserCmds + Auto + + Left + + + Selection + ТипыТранспортаВыбор + + + OnActivateRow + ТипыТранспортаПриАктивизацииСтроки + + + ТипыТранспортаСтрокаПоиска + 24 + + ТипыТранспортаСтрокаПоискаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ТипыТранспортаСтрокаПоискаКонтекстноеМеню + 25 + true + + ТипыТранспорта + + true + + + + ТипыТранспортаСостояниеПросмотра + 27 + + ТипыТранспортаСостояниеПросмотраРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ТипыТранспортаСостояниеПросмотраКонтекстноеМеню + 28 + true + + ViewStatusAddition + ТипыТранспорта + + true + + + + ТипыТранспортаУправлениеПоиском + 30 + + ТипыТранспортаУправлениеПоискомРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ТипыТранспортаУправлениеПоискомКонтекстноеМеню + 31 + true + + SearchControlAddition + ТипыТранспорта + + true + + + + ТипыТранспортаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ТипыТранспортаКонтекстноеМеню + 21 + + ТипыТранспортаКонтекстноеМенюИспользоватьПоУмолчанию + 52 + + <key>ru</key> + <value>Использовать по умолчанию</value> + + true + true + + true + + + ТипыТранспортаКонтекстноеМенюИспользоватьПоУмолчаниюРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.ИспользоватьПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ТипыТранспортаКонтекстноеМенюНастроить + 54 + + <key>ru</key> + <value>Настроить</value> + + true + true + + true + + + ТипыТранспортаКонтекстноеМенюНастроитьРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.Настроить + Normal + Auto + true + true + UserCmds + Auto + + + ТипыТранспортаКонтекстноеМенюСправка + 56 + + <key>ru</key> + <value>Справка</value> + + true + true + + true + + + ТипыТранспортаКонтекстноеМенюСправкаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.Справка + Normal + Auto + true + true + UserCmds + Auto + + + true + true + true + true + true + true +
          true
          + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
          + true + true + + true + + + <key>ru</key> + <value>Страница транспорт</value> + + + СтраницаТранспортРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
          + + СтраницаНастройкаНеЗавершена + 18 + + ГруппаНастройкаНеЗавершена + 3 + + КартинкаНастройкаНеЗаервшена + 5 + + <key>ru</key> + <value>Картинка настройка не заервшена</value> + + true + true + + true + + + КартинкаНастройкаНеЗаервшенаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + КартинкаНастройкаНеЗаервшенаКонтекстноеМеню + 6 + true + + 3 + true + 2 + true + + + StdPicture.Information + + Proportionally + 200 + + + + НадписьНастройкаНеЗаервшена + 8 + + <key>ru</key> + <value>Для настройки транспорта завершите настройку синхронизации.</value> + + true + true + + true + + + НадписьНастройкаНеЗаервшенаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + НадписьНастройкаНеЗаервшенаКонтекстноеМеню + 9 + true + + Label + true + true + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Предупреждение</value> + + + ГруппаНастройкаНеЗавершенаРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница настройка не завершена</value> + + + СтраницаНастройкаНеЗавершенаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ПанельОсновнаяРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Pages + + Auto + +
          + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + Vertical + true + true + true + auto + true + + ТипыТранспорта + + <key>ru</key> + <value>Типы транспорта</value> + + 2 + + ValueTable + + + true + + + true + + + ИдентификаторТранспорта + 1 + + String + + 50 + + + + true + + + true + + + + Псевдоним + + <key>ru</key> + <value>Псевдоним</value> + + 2 + + String + + 100 + + + + true + + + true + + + + Описание + 3 + + String + + 200 + + + + true + + + true + + + + НастройкаПоУмолчанию + 4 + + Boolean + + + true + + + true + + + + ЕстьНастройки + 5 + + Boolean + + + true + + + true + + + + ПолноеИмяОбработкиТранспорта + 6 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 7 + + Picture + + + true + + + true + + + + КартинкаСправка + + <key>ru</key> + <value>Картинка справка</value> + + 8 + + Picture + + + true + + + true + + + + КартинкаФлаг + + <key>ru</key> + <value>Картинка флаг</value> + + 9 + + Picture + + + true + + + true + + + + + Корреспондент + 3 + + ExchangePlanRef + + + true + + + true + + + + РазделениеВключено + 4 + + Boolean + + + true + + + true + + + + ИспользоватьПоУмолчанию + + <key>ru</key> + <value>Использовать по умолчанию</value> + + 1 + + ru + Использовать по умолчанию + + + true + + + + ИспользоватьПоУмолчанию + + + TextPicture + Auto + Auto + + + Настроить + + <key>ru</key> + <value>Настроить</value> + + 2 + + ru + Настроить + + + true + + + StdPicture.Setting + + + + Настроить + + + TextPicture + Auto + Auto + + + Справка + + <key>ru</key> + <value>Справка</value> + + 3 + + ru + Справка + + + true + + + StdPicture.Help + + + + Справка + + + TextPicture + Auto + Auto + + + + + +
          diff --git a/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ПанельНастроекТранспорта/Module.bsl b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ПанельНастроекТранспорта/Module.bsl new file mode 100644 index 000000000..666bd4b6f --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ПанельНастроекТранспорта/Module.bsl @@ -0,0 +1,260 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("Корреспондент") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + УстановитьУсловноеОформление(); + + ИнициализацияРеквизитовФормы(); + + ИнициализацияЭлементовФормы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ТипыТранспортаПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные; + Элементы.ТипыТранспортаИспользоватьПоУмолчанию.Пометка = ТекущиеДанные.НастройкаПоУмолчанию; + +КонецПроцедуры + +&НаКлиенте +Процедура ТипыТранспортаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если СтрНайти(Поле.Имя, "Флаг") Тогда + ИспользоватьПоУмолчанию(""); + ИначеЕсли СтрНайти(Поле.Имя, "Справка") Тогда + Справка(""); + Иначе + Настроить(""); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ИспользоватьПоУмолчанию(Команда) + + ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные; + + Если ТекущиеДанные.НастройкаПоУмолчанию Тогда + Возврат; + КонецЕсли; + + Если Не ТекущиеДанные.ЕстьНастройки Тогда + + Текст = НСтр("ru = 'Невозможно установить ненастроенный тип транспорта используемым по умолчанию.'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + + ОбщегоНазначенияКлиент.СообщитьПользователю(Текст); + + Возврат; + + КонецЕсли; + + ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта; + + ТранспортСообщенийОбменаВызовСервера.НазначитьТранспортПоУмолчанию(Корреспондент, ИдентификаторТранспорта); + + Для Каждого Строка Из ТипыТранспорта Цикл + + Если Строка.ИдентификаторТранспорта = ИдентификаторТранспорта Тогда + Строка.КартинкаФлаг = БиблиотекаКартинок.ТранспортПоУмолчанию; + Строка.НастройкаПоУмолчанию = Истина; + Иначе + Строка.КартинкаФлаг = Неопределено; + Строка.НастройкаПоУмолчанию = Ложь; + КонецЕсли; + + КонецЦикла; + + Элементы.ТипыТранспортаИспользоватьПоУмолчанию.Пометка = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура Настроить(Команда) + + ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные; + ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта; + + ПолноеИмяФормыНастройки = ТранспортСообщенийОбменаВызовСервера.ПолноеИмяФормыНастройки(ИдентификаторТранспорта); + + Если ТекущиеДанные.ЕстьНастройки Тогда + НастройкиТранспорта = ТранспортСообщенийОбменаВызовСервера.НастройкиТранспорта( + Корреспондент, ИдентификаторТранспорта); + Иначе + НастройкиТранспорта = Новый Структура; + КонецЕсли; + + ПараметрыФормы = Новый Структура("НастройкиТранспорта", НастройкиТранспорта); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Корреспондент", Корреспондент); + ДополнительныеПараметры.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + + Оповещение = Новый ОписаниеОповещения("СохранитьНастройкиТранспорта", ЭтотОбъект, ДополнительныеПараметры); + + ОткрытьФорму(ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура Справка(Команда) + + ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные; + ОткрытьСправку(ТекущиеДанные.ПолноеИмяОбработкиТранспорта); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ИнициализацияРеквизитовФормы() + + Параметры.Свойство("Корреспондент", Корреспондент); + + Для Каждого Строка Из ТранспортСообщенийОбмена.ТаблицаПараметровТранспорта(Корреспондент) Цикл + + НоваяСтрока = ТипыТранспорта.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + НоваяСтрока.КартинкаСправка = БиблиотекаКартинок.СправкаФормы; + + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТипыТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта + |ПОМЕСТИТЬ ВТ_ТипыТранспорта + |ИЗ + | &ТипыТранспорта КАК ТипыТранспорта + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НастройкиТранспорта.НастройкаПоУмолчанию КАК НастройкаПоУмолчанию, + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиТранспорта.Настройки.( + | Ссылка КАК Ссылка, + | НомерСтроки КАК НомерСтроки, + | Настройка КАК Настройка, + | Значение КАК Значение + | ) КАК Настройки + |ИЗ + | ВТ_ТипыТранспорта КАК ВТ_ТипыТранспорта + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + | ПО ВТ_ТипыТранспорта.ИдентификаторТранспорта = НастройкиТранспорта.ИдентификаторТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + Запрос.УстановитьПараметр("ТипыТранспорта", ТипыТранспорта.Выгрузить(,"ИдентификаторТранспорта")); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Отбор = Новый Структура("ИдентификаторТранспорта", Выборка.ИдентификаторТранспорта); + РезультатПоиска = ТипыТранспорта.НайтиСтроки(Отбор); + + Если РезультатПоиска.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + Строка = РезультатПоиска[0]; + Строка.НастройкаПоУмолчанию = Выборка.НастройкаПоУмолчанию; + Строка.ЕстьНастройки = НЕ Выборка.Настройки.Пустой(); + + Если Выборка.НастройкаПоУмолчанию Тогда + Строка.КартинкаФлаг = БиблиотекаКартинок.ТранспортПоУмолчанию; + КонецЕсли; + + КонецЦикла; + + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + +КонецПроцедуры + +&НаСервере +Процедура ИнициализацияЭлементовФормы() + + ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); + Элементы.ТипыТранспортаКартинкаФлаг.Доступность = ЭтоПолноправныйПользователь; + Элементы.ТипыТранспортаИспользоватьПоУмолчанию.Доступность = ЭтоПолноправныйПользователь; + + + Если Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(Корреспондент) Тогда + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаНастройкаНеЗавершена; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТипыТранспортаПсевдоним"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипыТранспорта.ЕстьНастройки"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина)); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьНастройкиТранспорта(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ТранспортСообщенийОбменаВызовСервера.СохранитьНастройкиТранспорта( + ДополнительныеПараметры.Корреспондент, + ДополнительныеПараметры.ИдентификаторТранспорта, + Результат); + + ТекущиеДанные = Элементы.ТипыТранспорта.ТекущиеДанные; + ТекущиеДанные.ЕстьНастройки = Истина; + +КонецПроцедуры + +#КонецОбласти + + + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаСписка/Form.form similarity index 77% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Form.form rename to SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаСписка/Form.form index 1e8c16207..91cd74b29 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаСписка/Form.form @@ -26,6 +26,7 @@ UsualGroup Vertical + Auto WeakSeparation true true @@ -50,6 +51,7 @@ true None + Change Copy Create @@ -90,23 +92,20 @@
          - ВидТранспортаСообщенийОбменаПоУмолчанию - 21 - - <key>ru</key> - <value>Вид подключения</value> - + ИдентификаторТранспорта + 19 true true true - Список.ВидТранспортаСообщенийОбменаПоУмолчанию + Список.ИдентификаторТранспорта + true - ВидТранспортаСообщенийОбменаПоУмолчаниюРасширеннаяПодсказка - 23 + ИдентификаторТранспортаРасширеннаяПодсказка + 21 Label true true @@ -115,8 +114,75 @@ - ВидТранспортаСообщенийОбменаПоУмолчаниюКонтекстноеМеню - 22 + ИдентификаторТранспортаКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + НастройкаПоУмолчанию + 22 + true + true + + true + + + Список.НастройкаПоУмолчанию + + + НастройкаПоУмолчаниюРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + НастройкаПоУмолчаниюКонтекстноеМеню + 23 + true + + CheckBoxField + Enter + true + Left + true + + + + Ссылка + 25 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 26 true LabelField @@ -129,12 +195,16 @@ true - None СписокКоманднаяПанель 5 Left + true + + Selection + СписокВыбор + СписокСтрокаПоиска 7 @@ -240,9 +310,13 @@ true true true + AsFileRef Список.DefaultPicture + None + None + None true 60 @@ -259,38 +333,8 @@ ФормаКоманднаяПанель -1 - - ФормаИзменить - 19 - true - true - - true - - - ФормаИзменитьРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - Form.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - Left - true - Copy - Create DontBlock true true @@ -303,6 +347,10 @@ true Список + + <key>ru</key> + <value>Список</value> + 1 DynamicList @@ -313,9 +361,12 @@ true + + Список.Ref +
          true
          - InformationRegister.НастройкиТранспортаОбменаДанными + Catalog.НастройкиТранспортаСообщенийОбмена 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..35e0592ee --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,59 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если ТекущиеДанные.Свойство("ИдентификаторТранспорта") + И ЗначениеЗаполнено(ТекущиеДанные.ИдентификаторТранспорта) Тогда + СтандартнаяОбработка = Ложь; + Иначе + Возврат; + КонецЕсли; + + ПолноеИмяФормыНастройки = ТранспортСообщенийОбменаВызовСервера.ПолноеИмяФормыНастройки( + ТекущиеДанные.ИдентификаторТранспорта); + + НастройкиТранспорта = ТранспортСообщенийОбменаВызовСервера.НастройкиТранспорта( + ТекущиеДанные.Корреспондент, ТекущиеДанные.ИдентификаторТранспорта); + + ПараметрыФормы = Новый Структура("НастройкиТранспорта", НастройкиТранспорта); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Корреспондент", ТекущиеДанные.Корреспондент); + ДополнительныеПараметры.Вставить("ИдентификаторТранспорта", ТекущиеДанные.ИдентификаторТранспорта); + + Оповещение = Новый ОписаниеОповещения("СохранитьНастройкиТранспорта", ЭтотОбъект, ДополнительныеПараметры); + + ОткрытьФорму(ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура СохранитьНастройкиТранспорта(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ТранспортСообщенийОбменаВызовСервера.СохранитьНастройкиТранспорта( + ДополнительныеПараметры.Корреспондент, + ДополнительныеПараметры.ИдентификаторТранспорта, + Результат); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..7b5f7deec --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,454 @@ + + + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Корреспондент + 4 + true + true + + true + + + Объект.Корреспондент + + + КорреспондентРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КорреспондентКонтекстноеМеню + 5 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ИдентификаторТранспорта + 7 + true + true + + true + + + Объект.ИдентификаторТранспорта + + + ИдентификаторТранспортаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ИдентификаторТранспортаКонтекстноеМеню + 8 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкаПоУмолчанию + 10 + true + true + + true + + + Объект.НастройкаПоУмолчанию + + + НастройкаПоУмолчаниюРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + НастройкаПоУмолчаниюКонтекстноеМеню + 11 + true + + CheckBoxField + Auto + true + Left + true + + + + Настройки + 13 + + <key>ru</key> + <value>Настройки</value> + + true + true + + true + + + Объект.Настройки + + None + + НастройкиНомерСтроки + 26 + true + true + + true + + + Объект.Настройки.LineNumber + + + НастройкиНомерСтрокиРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + НастройкиНомерСтрокиКонтекстноеМеню + 27 + true + + LabelField + Auto + true + Left + true + + true + true + + + + НастройкиНастройка + 29 + true + true + + true + + + Объект.Настройки.Настройка + + + НастройкиНастройкаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + НастройкиНастройкаКонтекстноеМеню + 30 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиЗначение + 32 + true + true + + true + + + Объект.Настройки.Значение + + + НастройкиЗначениеРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + НастройкиЗначениеКонтекстноеМеню + 33 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиКоманднаяПанель + 15 + Left + + + НастройкиСтрокаПоиска + 17 + + НастройкиСтрокаПоискаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + НастройкиСтрокаПоискаКонтекстноеМеню + 18 + true + + Настройки + + true + + + + НастройкиСостояниеПросмотра + 20 + + НастройкиСостояниеПросмотраРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + НастройкиСостояниеПросмотраКонтекстноеМеню + 21 + true + + ViewStatusAddition + Настройки + + true + + + + НастройкиУправлениеПоиском + 23 + + НастройкиУправлениеПоискомРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + НастройкиУправлениеПоискомКонтекстноеМеню + 24 + true + + SearchControlAddition + Настройки + + true + + + + НастройкиРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + НастройкиКонтекстноеМеню + 14 + true + + true + true + true + true + true + MultiRow +
          true
          + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
          + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.НастройкиТранспортаСообщенийОбмена + + + 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..68c3b8bf8 --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/ManagerModule.bsl b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/ManagerModule.bsl new file mode 100644 index 000000000..e0ba61698 --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/ManagerModule.bsl @@ -0,0 +1,876 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОбновитьНастройки(СтруктураНастроек) Экспорт + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НастройкиТранспортаСообщенийОбмена"); + ЭлементБлокировки.УстановитьЗначение("Корреспондент", СтруктураНастроек.Корреспондент); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторТранспорта", СтруктураНастроек.ИдентификаторТранспорта); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.Ссылка КАК Ссылка + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент + | И НастройкиТранспорта.ИдентификаторТранспорта = &ИдентификаторТранспорта"; + + Запрос.УстановитьПараметр("Корреспондент", СтруктураНастроек.Корреспондент); + Запрос.УстановитьПараметр("ИдентификаторТранспорта", СтруктураНастроек.ИдентификаторТранспорта); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Иначе + Объект = Справочники.НастройкиТранспортаСообщенийОбмена.СоздатьЭлемент(); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, СтруктураНастроек, , "Настройки"); + + Объект.Настройки.Очистить(); + + Для Каждого КлючИЗначение Из СтруктураНастроек.Настройки Цикл + + НоваяСтрока = Объект.Настройки.Добавить(); + НоваяСтрока.Настройка = КлючИЗначение.Ключ; + НоваяСтрока.Значение = КлючИЗначение.Значение; + + КонецЦикла; + + Объект.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +Процедура УдалитьВсеНастройки(Корреспондент) Экспорт + + ТипКорреспондента = ТипЗнч(Корреспондент); + Если НЕ Метаданные.ОпределяемыеТипы.ПланыОбменаБСД.Тип.СодержитТип(ТипКорреспондента) Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НастройкиТранспортаСообщенийОбмена"); + ЭлементБлокировки.УстановитьЗначение("Корреспондент", Корреспондент); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.Ссылка КАК Ссылка, + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиТранспорта.Настройки.( + | Настройка КАК Настройка, + | Значение КАК Значение + | ) КАК Настройки + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + РеквизитыДляБезопасногоХранилища = ТранспортСообщенийОбмена.ПараметрТранспорта( + Выборка.ИдентификаторТранспорта, "РеквизитыДляБезопасногоХранилища"); + + Если РеквизитыДляБезопасногоХранилища.Количество() > 0 Тогда + + ВыборкаПоНастройкам = Выборка.Настройки.Выбрать(); + + Пока ВыборкаПоНастройкам.Следующий() Цикл + + Если РеквизитыДляБезопасногоХранилища.Найти(ВыборкаПоНастройкам.Настройка) <> Неопределено + И ЗначениеЗаполнено(ВыборкаПоНастройкам.Значение) Тогда + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(ВыборкаПоНастройкам.Значение); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + Объект.Удалить(); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Выборка = СохраненныеНастройкиТранспорта(); + + Пока Выборка.Следующий() Цикл + + ПараметрыЗапроса = ПараметрыЗапросаНаИспользованиеВнешнихРесурсов(); + ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Выборка, ПараметрыЗапроса); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ТранспортПоУмолчанию(Корреспондент) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Возвращаемое значение функции. + ИдентификаторТранспорта = Неопределено; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент + | И НастройкиТранспорта.НастройкаПоУмолчанию"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ИдентификаторТранспорта = Выборка.ИдентификаторТранспорта; + КонецЕсли; + + Возврат ИдентификаторТранспорта; + +КонецФункции + +Функция НастройкиТранспорта(Корреспондент, ИдентификаторТранспорта) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Настройки.Настройка КАК Настройка, + | Настройки.Значение КАК Значение + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена.Настройки КАК Настройки + |ГДЕ + | Настройки.Ссылка.Корреспондент = &Корреспондент + | И Настройки.Ссылка.ИдентификаторТранспорта = &ИдентификаторТранспорта"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + Запрос.УстановитьПараметр("ИдентификаторТранспорта", ИдентификаторТранспорта); + + РезультатЗапроса = Запрос.Выполнить(); + + НастройкиТранспорта = Новый Структура; + + Если РезультатЗапроса.Пустой() Тогда + Возврат НастройкиТранспорта; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + НастройкиТранспорта.Вставить(Выборка.Настройка, Выборка.Значение); + КонецЦикла; + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция НастройкиТранспортаПоУмолчанию(Корреспондент, ИдентификаторТранспорта = "") Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиТранспорта.Настройки.( + | Настройка КАК Настройка, + | Значение КАК Значение + | ) КАК Настройки + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент + | И НастройкиТранспорта.НастройкаПоУмолчанию"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + + РезультатЗапроса = Запрос.Выполнить(); + + НастройкиТранспорта = Новый Структура; + + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + + ИдентификаторТранспорта = Выборка.ИдентификаторТранспорта; + + ВыборкаПоНастройкам = Выборка.Настройки.Выбрать(); + + Пока ВыборкаПоНастройкам.Следующий() Цикл + НастройкиТранспорта.Вставить(ВыборкаПоНастройкам.Настройка, ВыборкаПоНастройкам.Значение); + КонецЦикла; + + КонецЦикла; + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция НастроенныеТипыТранспорта(Корреспондент) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Процедура НазначитьТранспортПоУмолчанию(Корреспондент, ИдентификаторТранспорта) Экспорт + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.НастройкиТранспортаСообщенийОбмена"); + ЭлементБлокировки.УстановитьЗначение("Корреспондент", Корреспондент); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + + Попытка + + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.Ссылка КАК Ссылка, + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиТранспорта.ИдентификаторТранспорта = &ИдентификаторТранспорта КАК НастройкаПоУмолчанию + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.Корреспондент = &Корреспондент + | И НастройкиТранспорта.НастройкаПоУмолчанию <> (НастройкиТранспорта.ИдентификаторТранспорта = &ИдентификаторТранспорта)"; + + Запрос.УстановитьПараметр("Корреспондент", Корреспондент); + Запрос.УстановитьПараметр("ИдентификаторТранспорта", ИдентификаторТранспорта); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + СправочникНастроек = Выборка.Ссылка.ПолучитьОбъект(); + СправочникНастроек.НастройкаПоУмолчанию = Выборка.НастройкаПоУмолчанию; + СправочникНастроек.Записать(); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию() Экспорт + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.УдалитьНастройкиТранспортаОбменаДанными"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда + + Блокировка.Добавить("РегистрСведений.НастройкиТранспортаОбменаОбластиДанных"); + + КонецЕсли; + + Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + Блокировка.Добавить("Справочник.НастройкиТранспортаСообщенийОбмена"); + Блокировка.Заблокировать(); + + ПеренестиНастройкиТранспорта(); + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + ПеренестиНастройкиТранспортаМенеджераСервсиа(); + + КонецЕсли; + + ПеренестиНастройкиТранспортаСценариевОбмена(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +Процедура ПеренестиНастройкиТранспорта() + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("Справочник.НастройкиТранспортаСообщенийОбмена"); + Блокировка.Заблокировать(); + + Набор = РегистрыСведений.УдалитьНастройкиТранспортаОбменаДанными.СоздатьНаборЗаписей(); + Набор.Прочитать(); + + Для Каждого Запись Из Набор Цикл + + Если НЕ ЗначениеЗаполнено(Запись.Корреспондент) + ИЛИ Запись.Корреспондент.ПолучитьОбъект() = Неопределено Тогда + + // Пропускаем настройки с пустой или "битой" ссылкой (защита от ошибки в данных) + Продолжить; + + КонецЕсли; + + ПеренестиНастройкиТранспортаДляЗаписи(Запись) + + КонецЦикла; + + Набор.Очистить(); + Набор.Записать(); + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +Процедура ПеренестиНастройкиТранспортаДляЗаписи(Запись) + + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, + "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена"); + + НастроенныеВидыТранспорта = НастроенныеВидыТранспорта(Запись); + + Для Каждого ВидТранспорта Из НастроенныеВидыТранспорта Цикл + + НовыйСправочник = Справочники.НастройкиТранспортаСообщенийОбмена.СоздатьЭлемент(); + НовыйСправочник.Корреспондент = Запись.Корреспондент; + НовыйСправочник.НастройкаПоУмолчанию = (Запись.ВидТранспортаСообщенийОбменаПоУмолчанию = ВидТранспорта); + НовыйСправочник.ИдентификаторТранспорта = ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспорта); + Настройки = НовыйСправочник.Настройки; + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "МаксимальныйДопустимыйРазмерСообщения"; + НоваяСтрока.Значение = Запись.EMAILМаксимальныйДопустимыйРазмерСообщения; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "СжиматьФайлИсходящегоСообщения"; + НоваяСтрока.Значение = Запись.EMAILСжиматьФайлИсходящегоСообщения; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "УчетнаяЗапись"; + НоваяСтрока.Значение = Запись.EMAILУчетнаяЗапись; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Транслитерация"; + НоваяСтрока.Значение = Запись.EMAILТранслитерироватьИменаФайловСообщенийОбмена; + + Если ЗначениеЗаполнено(Пароли.ПарольАрхиваСообщенияОбмена) Тогда + ПарольАрхиваСообщенияОбмена = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ПарольАрхиваСообщенияОбмена, Пароли.ПарольАрхиваСообщенияОбмена); + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ПарольАрхиваСообщенияОбмена"; + НоваяСтрока.Значение = ПарольАрхиваСообщенияОбмена; + КонецЕсли; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "КаталогОбменаИнформацией"; + НоваяСтрока.Значение = Запись.FILEКаталогОбменаИнформацией; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "СжиматьФайлИсходящегоСообщения"; + НоваяСтрока.Значение = Запись.FILEСжиматьФайлИсходящегоСообщения; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Транслитерация"; + НоваяСтрока.Значение = Запись.FILEТранслитерироватьИменаФайловСообщенийОбмена; + + Если ЗначениеЗаполнено(Пароли.ПарольАрхиваСообщенияОбмена) Тогда + ПарольАрхиваСообщенияОбмена = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ПарольАрхиваСообщенияОбмена, Пароли.ПарольАрхиваСообщенияОбмена); + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ПарольАрхиваСообщенияОбмена"; + НоваяСтрока.Значение = ПарольАрхиваСообщенияОбмена; + КонецЕсли; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "МаксимальныйДопустимыйРазмерСообщения"; + НоваяСтрока.Значение = Запись.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ПассивноеСоединение"; + НоваяСтрока.Значение = Запись.FTPСоединениеПассивноеСоединение; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Пользователь"; + НоваяСтрока.Значение = Запись.FTPСоединениеПользователь; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Порт"; + НоваяСтрока.Значение = Запись.FTPСоединениеПорт; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Путь"; + НоваяСтрока.Значение = Запись.FTPСоединениеПуть; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "СжиматьФайлИсходящегоСообщения"; + НоваяСтрока.Значение = Запись.FTPСжиматьФайлИсходящегоСообщения; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Транслитерация"; + НоваяСтрока.Значение = Запись.FTPТранслитерироватьИменаФайловСообщенийОбмена; + + Если ЗначениеЗаполнено(Пароли.ПарольАрхиваСообщенияОбмена) Тогда + ПарольАрхиваСообщенияОбмена = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ПарольАрхиваСообщенияОбмена, Пароли.ПарольАрхиваСообщенияОбмена); + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ПарольАрхиваСообщенияОбмена"; + НоваяСтрока.Значение = ПарольАрхиваСообщенияОбмена; + КонецЕсли; + + Если ЗначениеЗаполнено(Пароли.FTPСоединениеПароль) Тогда + Пароль = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Пароль, Пароли.FTPСоединениеПароль); + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Пароль"; + НоваяСтрока.Значение = Пароль; + КонецЕсли; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + Если ЗначениеЗаполнено(Запись.WSКонечнаяТочкаКорреспондента) Тогда + + НовыйСправочник.ИдентификаторТранспорта = "SM"; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ВнутренняяПубликация"; + НоваяСтрока.Значение = Истина; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "КонечнаяТочкаКорреспондента"; + НоваяСтрока.Значение = Запись.WSКонечнаяТочкаКорреспондента; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ОбластьДанныхКорреспондента"; + НоваяСтрока.Значение = Запись.WSОбластьДанныхКорреспондента; + + Иначе + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "АдресВебСервиса"; + НоваяСтрока.Значение = Запись.WSURLВебСервиса; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ИмяПользователя"; + НоваяСтрока.Значение = Запись.WSИмяПользователя; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ЗапомнитьПароль"; + НоваяСтрока.Значение = Запись.WSЗапомнитьПароль; + + Если Запись.WSЗапомнитьПароль И ЗначениеЗаполнено(Пароли.WSПароль) Тогда + + Пароль = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Пароль, Пароли.WSПароль); + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "Пароль"; + НоваяСтрока.Значение = Пароль; + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ВариантРаботыИнформационнойБазы"; + НоваяСтрока.Значение = Запись.COMВариантРаботыИнформационнойБазы; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "КаталогИнформационнойБазы"; + НоваяСтрока.Значение = Запись.COMКаталогИнформационнойБазы; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "АутентификацияОперационнойСистемы"; + НоваяСтрока.Значение = Запись.COMАутентификацияОперационнойСистемы; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ИмяПользователя"; + НоваяСтрока.Значение = Запись.COMИмяПользователя; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ИмяСервера1СПредприятия"; + НоваяСтрока.Значение = Запись.COMИмяСервера1СПредприятия; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ИмяИнформационнойБазыНаСервере1СПредприятия"; + НоваяСтрока.Значение = Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия; + + Если ЗначениеЗаполнено(Пароли.COMПарольПользователя) Тогда + ПарольПользователя = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ПарольПользователя, Пароли.COMПарольПользователя); + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "ПарольПользователя"; + НоваяСтрока.Значение = ПарольПользователя; + КонецЕсли; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + + НовыйСправочник.ИдентификаторТранспорта = "ПассивныйРежим"; + + КонецЕсли; + + НовыйСправочник.Записать(); + + КонецЦикла; + + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Запись.Корреспондент, ""); + +КонецПроцедуры + +Функция НастроенныеВидыТранспорта(Запись) + + Результат = Новый Массив; + + Если ЗначениеЗаполнено(Запись.COMКаталогИнформационнойБазы) + Или ЗначениеЗаполнено(Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + КонецЕсли; + + Если ЗначениеЗаполнено(Запись.EMAILУчетнаяЗапись) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + КонецЕсли; + + Если ЗначениеЗаполнено(Запись.FILEКаталогОбменаИнформацией) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + КонецЕсли; + + Если ЗначениеЗаполнено(Запись.FTPСоединениеПуть) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + КонецЕсли; + + Если ЗначениеЗаполнено(Запись.WSURLВебСервиса) + Или ЗначениеЗаполнено(Запись.WSКонечнаяТочкаКорреспондента) Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + КонецЕсли; + + Если Запись.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ПеренестиНастройкиТранспортаМенеджераСервсиа() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспортаОбменаОбластиДанных.Корреспондент КАК Корреспондент, + | НастройкиТранспортаОбменаОбластиДанных.КонечнаяТочкаКорреспондента КАК КонечнаяТочкаКорреспондента, + | НастройкиТранспортаСообщенийОбмена.ИдентификаторТранспорта КАК ИдентификаторТранспорта + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаОбластиДанных КАК НастройкиТранспортаОбменаОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспортаСообщенийОбмена + | ПО НастройкиТранспортаОбменаОбластиДанных.Корреспондент = НастройкиТранспортаСообщенийОбмена.Корреспондент + | И (НастройкиТранспортаСообщенийОбмена.ИдентификаторТранспорта = ""SM"") + |ГДЕ + | НастройкиТранспортаСообщенийОбмена.Корреспондент ЕСТЬ NULL"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + НовыйСправочник = Справочники.НастройкиТранспортаСообщенийОбмена.СоздатьЭлемент(); + НовыйСправочник.Корреспондент = Выборка.Корреспондент; + НовыйСправочник.ИдентификаторТранспорта = "SM"; + НовыйСправочник.НастройкаПоУмолчанию = Истина; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "КонечнаяТочкаКорреспондента"; + НоваяСтрока.Значение = Выборка.КонечнаяТочкаКорреспондента; + + НоваяСтрока = НовыйСправочник.Настройки.Добавить(); + НоваяСтрока.Настройка = "НаименованиеКорреспондента"; + НоваяСтрока.Значение = Строка(Выборка.Корреспондент); + + НовыйСправочник.Записать(); + + КонецЦикла; + +КонецПроцедуры + +Процедура ПеренестиНастройкиТранспортаСценариевОбмена() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | НастройкиОбмена.Ссылка КАК Ссылка + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиОбмена + |ГДЕ + | (ВЫРАЗИТЬ(НастройкиОбмена.ИдентификаторТранспорта КАК СТРОКА(100))) = """""; + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Сценарий = Выборка.Ссылка.ПолучитьОбъект(); + + Для Каждого Настройка Из Сценарий.НастройкиОбмена Цикл + + Если ЗначениеЗаполнено(Настройка.ИдентификаторТранспорта) Тогда + Продолжить; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Настройка.УдалитьВидТранспортаОбмена) Тогда + Продолжить; // Пропускаем строки с пустым транспортом + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + Настройка.ИдентификаторТранспорта = "SM"; + + Иначе + + ИдентификаторТранспорта = ОбщегоНазначения.ИмяЗначенияПеречисления(Настройка.УдалитьВидТранспортаОбмена); + + Если ИдентификаторТранспорта = "WSПассивныйРежим" Тогда + + ИдентификаторТранспорта = "ПассивныйРежим"; + + ИначеЕсли ИдентификаторТранспорта = "ВнешняяСистема" Тогда + + ИдентификаторТранспорта = ""; + + КонецЕсли; + + Настройка.ИдентификаторТранспорта = ИдентификаторТранспорта; + + КонецЕсли; + + КонецЦикла; + + Сценарий.Записать(); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +Функция СохраненныеНастройкиТранспорта() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиТранспорта.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиТранспорта.Корреспондент КАК Корреспондент, + | НастройкиТранспорта.Настройки.( + | Настройка КАК Настройка, + | Значение КАК Значение + | ) КАК Настройки + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта"; + + Возврат Запрос.Выполнить().Выбрать(); + +КонецФункции + +Функция ПараметрыЗапросаНаИспользованиеВнешнихРесурсов() + + Параметры = Новый Структура; + Параметры.Вставить("ЗапрашиватьCOM", Истина); + Параметры.Вставить("ЗапрашиватьFILE", Истина); + Параметры.Вставить("ЗапрашиватьWS", Истина); + Параметры.Вставить("ЗапрашиватьFTP", Истина); + + Возврат Параметры; + +КонецФункции + +Процедура ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись, ПараметрыЗапроса) Экспорт + + Разрешения = Новый Массив; + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + ИдентификаторТранспорта = Запись.ИдентификаторТранспорта; + Корреспондент = Запись.Корреспондент; + + НастройкиТранспорта = Новый Структура; + ВыборкаПоНастройкам = Запись.Настройки.Выбрать(); + Пока ВыборкаПоНастройкам.Следующий() Цикл + НастройкиТранспорта.Вставить(ВыборкаПоНастройкам.Настройка, ВыборкаПоНастройкам.Значение); + КонецЦикла; + + Если Не ЗначениеЗаполнено(НастройкиТранспорта) Тогда + Возврат; + КонецЕсли; + + Если ПараметрыЗапроса.ЗапрашиватьFTP + И ИдентификаторТранспорта = "FTP" + И Не ПустаяСтрока(НастройкиТранспорта.Путь) Тогда + + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(НастройкиТранспорта.Путь); + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, НастройкиТранспорта.Порт)); + + КонецЕсли; + + Если ПараметрыЗапроса.ЗапрашиватьFILE + И ИдентификаторТранспорта = "FILE" + И Не ПустаяСтрока(НастройкиТранспорта.КаталогОбменаИнформацией) Тогда + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + НастройкиТранспорта.КаталогОбменаИнформацией, Истина, Истина)); + + КонецЕсли; + + Если ПараметрыЗапроса.ЗапрашиватьWS + И (ИдентификаторТранспорта = "WS" Или ИдентификаторТранспорта = "HTTP") + И Не ПустаяСтрока(НастройкиТранспорта.АдресВебСервиса) Тогда + + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(НастройкиТранспорта.АдресВебСервиса); + Если ЗначениеЗаполнено(СтруктураАдреса.Схема) Тогда + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, СтруктураАдреса.Порт)); + КонецЕсли; + + КонецЕсли; + + Если ПараметрыЗапроса.ЗапрашиватьCOM + И ИдентификаторТранспорта = "COM" + И (Не ПустаяСтрока(НастройкиТранспорта.КаталогИнформационнойБазы) + Или Не ПустаяСтрока(НастройкиТранспорта.ИмяИнформационнойБазыНаСервере1СПредприятия)) Тогда + + ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса( + ИмяCOMСоединителя, ОбщегоНазначения.ИдентификаторCOMСоединителя(ИмяCOMСоединителя))); + + КонецЕсли; + + // Разрешения для обмена через почту запрашиваются в подсистеме Работе с почтовыми сообщениями. + + Если Разрешения.Количество() > 0 Тогда + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, Корреспондент)); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/ObjectModule.bsl b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/ObjectModule.bsl new file mode 100644 index 000000000..923ddcfa6 --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/ObjectModule.bsl @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ШаблонНаименования = "%1 - %2"; + Наименование = СтрШаблон(ШаблонНаименования, Корреспондент, ИдентификаторТранспорта); + +КонецПроцедуры + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/НастройкиТранспортаСообщенийОбмена.mdo b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/НастройкиТранспортаСообщенийОбмена.mdo new file mode 100644 index 000000000..d39fc5634 --- /dev/null +++ b/SSL/src/Catalogs/НастройкиТранспортаСообщенийОбмена/НастройкиТранспортаСообщенийОбмена.mdo @@ -0,0 +1,266 @@ + + + + + + + + + + НастройкиТранспортаСообщенийОбмена + + ru + Настройки транспорта сообщений обмена + + Catalog.НастройкиТранспортаСообщенийОбмена.StandardAttribute.Description + Catalog.НастройкиТранспортаСообщенийОбмена.Attribute.ИдентификаторТранспорта + 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 + Catalog.НастройкиТранспортаСообщенийОбмена.Attribute.Корреспондент + Catalog.НастройкиТранспортаСообщенийОбмена.Attribute.ИдентификаторТранспорта + Managed + + ru + Настройка транспорта сообщения обмена + + + ru + Настройки транспорта сообщений обмена + + 2 + true + 100 + String + Variable + AsDescription + InDialog + BothWays + Catalog.НастройкиТранспортаСообщенийОбмена.Form.ФормаЭлемента + Catalog.НастройкиТранспортаСообщенийОбмена.Form.ФормаСписка + + Корреспондент + + ru + Корреспондент + + + DefinedType.ПланыОбменаБСД + + + + ShowError + + Index + Use + Use + + + ИдентификаторТранспорта + + ru + Идентификатор транспорта + + + String + + 50 + + + + + ShowError + + Index + Use + Use + + + НастройкаПоУмолчанию + + ru + Настройка по умолчанию + + + Boolean + + + + + Use + Use + + + + + + + Настройки + + ru + Настройки + + + Use + LineNumber + + Use + + + + + Настройка + + ru + Настройка + + + String + + 100 + + + + + Use + Use + + + Значение + + ru + Значение + + + Boolean + String + Date + Number + AnyRef + + 15 + 3 + + + 1000 + + + + + + Use + Use + + + + ПанельНастроекТранспорта + + ru + Панель настроек транспорта + + PersonalComputer + MobileDevice + + + НастройкаПодключенияКСервису + + ru + Настройка подключения к сервису + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl index 3cb76263d..5ac554430 100644 --- a/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ОбщиеВнешниеКомпоненты/ManagerModule.bsl @@ -145,7 +145,7 @@ Блокировка.Заблокировать(); КомпонентаОбъект = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ОбщиеВнешниеКомпоненты - КомпонентаОбъект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Реквизиты.ЦелевыеПлатформы); + КомпонентаОбъект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Реквизиты.ЦелевыеПлатформы, Новый СжатиеДанных(9)); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(КомпонентаОбъект); ОбъектовОбработано = ОбъектовОбработано + 1; diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html index f0330c31d..06d602ff2 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -3,17 +3,17 @@

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

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

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

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

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

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

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

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

        См. также:

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 82f1a06bf..65bcea838 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -141,8 +141,8 @@ Процедура РабочийКаталогВладельцаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Обработчик = Новый ОписаниеОповещения("РаботыСФайламиПодключеноРабочийКаталогВладельцаНачалоВыбораПродолжение", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + Обработчик = Новый ОписаниеОповещения("РаботыСФайламиПодключеноРабочийКаталогВладельцаНачалоВыбораПродолжение", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -203,8 +203,8 @@ &НаКлиенте Процедура РаботыСФайламиПодключеноРабочийКаталогВладельцаНачалоВыбораПродолжение(Результат, ДополнительныеПараметры) Экспорт - Если Не РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); + Если Не РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда + РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено); Возврат; КонецЕсли; @@ -380,36 +380,13 @@ Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл, - | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, - | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, - | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис КАК Сервис - |ИЗ - | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом - |ГДЕ - | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &ВладелецФайла"; - - Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка); - - РезультатЗапроса = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - - АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( - ВыборкаДетальныеЗаписи.Сервис, ВыборкаДетальныеЗаписи.Href); - + СведенияОСинхронизации = РаботаСФайламиСлужебный.СведенияОСинхронизации(Объект.Ссылка); + Если СведенияОСинхронизации <> Неопределено Тогда ВидимостьПояснения = Истина; - Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Работа с файлами ведется в облачном сервисе %2'"), - Строка(АдресПапкиВОблачномСервисе), Строка(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование)); - - КонецЦикла; + СведенияОСинхронизации.АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html index 3302aff65..90e1f0004 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html @@ -1,13 +1,13 @@

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

        -

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

        +

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

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

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

        Настройка прав доступа к папкам

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

        Ввод новой папки

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

        Ввод новой папки

        • Ввести новую папку можно в списке Файлы с помощью команды Создать контекстного меню по правой кнопке мыши.

        Изменение папки

        -
        • Изменить выбранную папку (при наличии прав доступа) можно с помощью соответствующей команды меню Еще.

        Выбор папки

        +
        • Изменить выбранную папку (при наличии прав доступа) можно с помощью соответствующей команды меню Еще.

        Выбор папки

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

        См. также:

        \ No newline at end of file +
      \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index 215d378b4..33f56c680 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -91,58 +91,13 @@ ДополнительныеСвойства.Вставить("ПрошлыйЭтоНовый", ЭтоНовый()); Если НЕ ЭтоНовый() Тогда - - Если Наименование <> ТекущаяПапка.Наименование Тогда // переименована папка - РабочийКаталогПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Ссылка); - РабочийКаталогРодителяПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ТекущаяПапка.Родитель); - Если РабочийКаталогРодителяПапки <> "" Тогда - - // Добавляем слэш в конце, если его нет. - РабочийКаталогРодителяПапки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - РабочийКаталогРодителяПапки); - - РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки - + ТекущаяПапка.Наименование + ПолучитьРазделительПути(); - - Если РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогПапки Тогда - - НовыйРабочийКаталогПапки = РабочийКаталогРодителяПапки - + Наименование + ПолучитьРазделительПути(); - - РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки(Ссылка, НовыйРабочийКаталогПапки); - КонецЕсли; - КонецЕсли; + Если Наименование <> ТекущаяПапка.Наименование Тогда // Переименована папка. + ИзменитьРабочийКаталогПриПереименованииПапки(Ссылка, ТекущаяПапка); КонецЕсли; - Если Родитель <> ТекущаяПапка.Родитель Тогда // Перенесли папку в другую папку. - РабочийКаталогПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Ссылка); - РабочийКаталогРодителяПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ТекущаяПапка.Родитель); - РабочийКаталогНовогоРодителяПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Родитель); - - Если РабочийКаталогРодителяПапки <> "" ИЛИ РабочийКаталогНовогоРодителяПапки <> "" Тогда - - РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки; - - Если РабочийКаталогРодителяПапки <> "" Тогда - РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки - + ТекущаяПапка.Наименование + ПолучитьРазделительПути(); - КонецЕсли; - - // Рабочий каталог автоформируется от родителя. - Если РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогПапки Тогда - Если РабочийКаталогНовогоРодителяПапки <> "" Тогда - - НовыйРабочийКаталогПапки = РабочийКаталогНовогоРодителяПапки - + Наименование + ПолучитьРазделительПути(); - - РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки(Ссылка, НовыйРабочийКаталогПапки); - Иначе - РаботаСФайламиСлужебный.ОчиститьРабочийКаталог(Ссылка); - КонецЕсли; - КонецЕсли; - КонецЕсли; + Если Родитель <> ТекущаяПапка.Родитель Тогда // Перенесена в другую папку. + ИзменитьРабочийКаталогПриПеремещенииПапки(Ссылка, Родитель, ТекущаяПапка); КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -154,8 +109,8 @@ КонецЕсли; РабочийКаталог = Неопределено; - - Если ДополнительныеСвойства.Свойство("РабочийКаталог", РабочийКаталог) Или ДополнительныеСвойства.ПрошлыйЭтоНовый Тогда + Если ДополнительныеСвойства.Свойство("РабочийКаталог", РабочийКаталог) + Или ДополнительныеСвойства.ПрошлыйЭтоНовый Тогда Если РабочийКаталог = "" Тогда РаботаСФайламиСлужебный.ОчиститьРабочийКаталог(Ссылка); @@ -164,14 +119,8 @@ Иначе РабочийКаталогПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Родитель); Если РабочийКаталогПапки <> "" Тогда - - // Добавляем слэш в конце, если его нет. - РабочийКаталогПапки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( - РабочийКаталогПапки); - - РабочийКаталогПапки = РабочийКаталогПапки + РабочийКаталогПапки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталогПапки) + Наименование + ПолучитьРазделительПути(); - РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки(Ссылка, РабочийКаталогПапки); КонецЕсли; КонецЕсли; @@ -186,8 +135,8 @@ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) - МассивНайденныхНедопустимыхСимволов = ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(Наименование); - Если МассивНайденныхНедопустимыхСимволов.Количество() <> 0 Тогда + НедопустимыеСимволы = ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(Наименование); + Если НедопустимыеСимволы.Количество() <> 0 Тогда Отказ = Истина; Текст = НСтр("ru = 'Наименование папки содержит запрещенные символы ( \ / : * ? "" < > | .. )'"); @@ -198,6 +147,54 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура ИзменитьРабочийКаталогПриПереименованииПапки(Ссылка, ТекущаяПапка) + РабочийКаталогПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Ссылка); + РабочийКаталогРодителяПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ТекущаяПапка.Родитель); + Если РабочийКаталогРодителяПапки <> "" Тогда + + РабочийКаталогРодителяПапки = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + РабочийКаталогРодителяПапки); + РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки + ТекущаяПапка.Наименование + + ПолучитьРазделительПути(); + + Если РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогПапки Тогда + НовыйРабочийКаталогПапки = РабочийКаталогРодителяПапки + Наименование + ПолучитьРазделительПути(); + РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки(Ссылка, НовыйРабочийКаталогПапки); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ИзменитьРабочийКаталогПриПеремещенииПапки(Ссылка, Родитель, ТекущаяПапка) + + РабочийКаталогПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Ссылка); + РабочийКаталогРодителяПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(ТекущаяПапка.Родитель); + РабочийКаталогНовогоРодителяПапки = РаботаСФайламиСлужебныйВызовСервера.РабочийКаталогПапки(Родитель); + + Если РабочийКаталогРодителяПапки <> "" ИЛИ РабочийКаталогНовогоРодителяПапки <> "" Тогда + + РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки; + Если РабочийКаталогРодителяПапки <> "" Тогда + РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогРодителяПапки + ТекущаяПапка.Наименование + + ПолучитьРазделительПути(); + КонецЕсли; + + // Рабочий каталог автоформируется от родителя. + Если РабочийКаталогПапкиУнаследованныйПрежний = РабочийКаталогПапки Тогда + Если РабочийКаталогНовогоРодителяПапки <> "" Тогда + НовыйРабочийКаталогПапки = РабочийКаталогНовогоРодителяПапки + Наименование + + ПолучитьРазделительПути(); + РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки(Ссылка, НовыйРабочийКаталогПапки); + Иначе + РаботаСФайламиСлужебный.ОчиститьРабочийКаталог(Ссылка); + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html index f167e7d84..d17338249 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html @@ -1,6 +1,6 @@

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

      -

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

      +

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

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

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

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

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

        Выбор папки

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

      Выбор папки

      • Выделите нужную папку, нажмите Выбрать.

      См. также:

      • diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html index e53aec49f..2388decae 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html @@ -11,13 +11,13 @@
      • Удаленные - в эту папку попадают все помеченные к удалению письма.
      • -
      • Черновики - папка, в которой находятся письма, редактирование которых не завершено.

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

      +
    • Черновики - папка, в которой находятся письма, редактирование которых не завершено.

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

    Ввод папки

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

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

    См. также:

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Help/ru.html b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Help/ru.html index 1c0644545..25385433c 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Help/ru.html @@ -12,7 +12,7 @@
  • Удаленные - в эту папку попадают все помеченные к удалению письма.
  • -
  • Черновики - папка, в которой находятся письма, редактирование которых не завершено.
  • Правила, по которым письмам назначаются папки, можно установить при помощи Правил обработки электронной почты. К работе с правилами можно перейти из панели навигации Настройки почты.

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

    В каждую папку письма попадают автоматически при получении или смене статуса, а также при применении правил обработки.

    Ввод папки

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

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

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

      См. также:

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html index 31269f2c3..eddad53fb 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html @@ -1,16 +1,16 @@ -

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

    -

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

    +

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

    +

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

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

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

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

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

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

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

    См. также:

     

    \ No newline at end of file +

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html index c554b4140..a9c5a4db6 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ОграничениеНаВходВПрограмму/Help/ru.html @@ -1,12 +1,12 @@ -

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

    +

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

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

    -
    • Согласно общим настройкам входа - как указано для всех пользователей в настройке Запрещать вход в приложение пользователям, которые не работали в приложении более: [k] дней; +
      • Согласно общим настройкам входа - как указано для всех пользователей в настройке Запрещать вход в приложение пользователям, которые не работали в приложении более: [k] дней;
      • Без ограничения срока - бессрочный доступ, только для этого пользователя;
      • -
      • Вход разрешен до (установите срок - введите дату вручную или выберите из календаря с помощью кнопки , удобно, если работник временно пользуется данной приложением. Для защиты от несанкционированного доступа к приложению у любого пользователя может быть настроен срок действия, который позволяет автоматически отключить пользователя после достижения указанной даты; +
      • Вход разрешен до (установите срок - введите дату вручную или выберите из календаря с помощью кнопки , удобно, если работник временно пользуется данной приложением. Для защиты от несанкционированного доступа к приложению у любого пользователя может быть настроен срок действия, который позволяет автоматически отключить пользователя после достижения указанной даты;
      • -
        Запретить вход, если не работает более (укажите количество дней) - если пользователь не войдет в приложение больше указанного количества дней, то вход в приложение будет невозможен. 
        -
        • В этом случае пользователь должен будет обратиться к администратору для возобновления работы в приложении, также удобно для временных работников.
      Ограничение отражается в карточке пользователя, после настройки ссылка принимает значение Изменить ограничение. \ No newline at end of file +
      Запретить вход, если не работает более (укажите количество дней) - если пользователь не войдет в приложение больше указанного количества дней, то вход в приложение будет невозможен.
      +
      • В этом случае пользователь должен будет обратиться к администратору для возобновления работы в приложении, также удобно для временных работников.
    Ограничение отражается в карточке пользователя, после настройки ссылка принимает значение Изменить ограничение. \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html index 048cb92ea..e0e951d35 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html @@ -1,24 +1,24 @@ -

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

    -

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

    -

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

    -
    • Найти "некорректных" (несопоставленных) пользователей ИБ: +

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

      +

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

      +

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

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

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

          +
        • Посмотреть список всех пользователей ИБ (этот список также доступен в конфигураторе).

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

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

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

        +
        Аутентификация ОС - принимает значение "Да", если для пользователя включена аутентификация ОС.

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

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

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

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

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

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

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

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

    См. также:

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 5386d0f20..09fb8cc04 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -175,13 +175,13 @@ Элементы.ЗавершитьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; - ВыборУчастниковОбсуждения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВыборУчастниковОбсуждения", Ложь); - + ВыборУчастниковОбсуждения = Параметры.ВыборУчастниковОбсуждения; Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда Элементы.ВставитьИзБуфераОбмена.Видимость = Ложь; КонецЕсли; - АдресПользовательБезФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, УникальныйИдентификатор); + АдресПользовательБезФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, + УникальныйИдентификатор); АдресФотографии = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); ЗаполнитьКонтактнуюИнформацию(ЭтотОбъект, Неопределено); УстановитьЗаголовокВыбранныхПользователейИГрупп(); @@ -774,8 +774,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка группового изменения объектов. +#Область ПоддержкаГрупповогоИзмененияОбъектов &НаКлиенте Процедура ИзменитьВыделенные(Команда) @@ -871,6 +870,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаКлиенте diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index d924dd9d8..3eafa3b9e 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -4789,6 +4789,28 @@ true + + ВидКонтактнойИнформацииEmailПользователя + 59 + + + true + + + true + + + + ВидКонтактнойИнформацииТелефонПользователя + 60 + + + true + + + true + + ПоказатьТолькоВыбранныеРоли diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index f27ef808b..159e2143d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Предназначена для описания свойств пользователя.</p> -<p>Для <a href="#1">ввода или редактирования</a> сведений о пользователе необходимы права администрирования или ответственного за <a href="Catalog.Пользователи/Help">список пользователей</a>. </p> -<p>Вход в приложение разрешает только администратор. </p> -<p>Ответственный за список может выполнять ограниченное ведение списка пользователей, настройку пользователя до разрешения входа в приложение администратором, может редактировать списки <strong>Пользователи</strong> и <strong>Группы пользователей</strong>, а также права доступа пользователей.</p> -<p>В остальных случаях доступен только просмотр сведений о себе, а также возможность изменить свой <strong>Пароль</strong> (в зависимости от настроек администратора), язык приложения и контактную информацию.</p> -<p>В распределенной информационной базе вход в приложение настраивается отдельно для каждой из информационных баз приложения.</p> +<p>Для <a href="#1">ввода или редактирования</a> сведений о пользователе необходимы права администрирования или ответственного за <a href="Catalog.Пользователи/Help">список пользователей</a>. </p> +<p>Вход в приложение разрешает только администратор. </p> +<p>Ответственный за список может выполнять ограниченное ведение списка пользователей, настройку пользователя до разрешения входа в приложение администратором, может редактировать списки <strong>Пользователи</strong> и <strong>Группы пользователей</strong>, а также права доступа пользователей.</p> +<p>В остальных случаях доступен только просмотр сведений о себе, а также возможность изменить свой <strong>Пароль</strong> (в зависимости от настроек администратора), язык приложения и контактную информацию.</p> +<p>В распределенной информационной базе вход в приложение настраивается отдельно для каждой из информационных баз приложения.</p> <h3>Установка и смена пароля</h3> <ul><li> -<div>Любой пользователь может просмотреть сведения о себе в персональных настройках приложения.</div> +<div>Любой пользователь может просмотреть сведения о себе в персональных настройках приложения.</div> </li> <li> -<div>Администратор или пользователь при необходимости (и наличии прав) может <a href="CommonForm.СменаПароля/Help">установить пароль</a> или сменить его.</div> +<div>Администратор или пользователь при необходимости (и наличии прав) может <a href="CommonForm.СменаПароля/Help">установить пароль</a> или сменить его.</div> </li> <li> -<div>Нажмите кнопку <strong>Установить пароль</strong>. Если пароль уже установлен, можно сменить пароль. Для этого нажмите кнопку <strong>Сменить пароль</strong>, введите <a href="CommonForm.СменаПароля/Help">новый пароль</a>.</div></li></ul><h3>Рекомендации по созданию пароля для входа в приложение</h3> +<div>Нажмите кнопку <strong>Установить пароль</strong>. Если пароль уже установлен, можно сменить пароль. Для этого нажмите кнопку <strong>Сменить пароль</strong>, введите <a href="CommonForm.СменаПароля/Help">новый пароль</a>.</div></li></ul><h3>Рекомендации по созданию пароля для входа в приложение</h3> <p>Хороший пароль должен:</p> <ul><li>быть малопонятным выражением. </li> @@ -29,49 +29,49 @@ <li>символы (подчеркивание, скобки и т.д.) </li></ul></li></ul><p>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов. </p> <ul><li>Примеры хороших паролей:<br>“nj7{jhjibq*Gfhjkm, <br>F5”njnGhkmNj;t{HI. </li> -<li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="1">Ввод пользователя</a> (при наличии права)</h3> -<p>Если пользователя ввел ответственный за список и заполнил имя для входа, тогда администратору в карточке пользователя выводится рекомендация проверить настройки для входа. После разрешения входа рекомендация скрывается, а ответственный более не может изменить настройки для входа, кроме отключения разрешения на вход в приложение. Для того чтобы посмотреть всех таких пользователей, которых подготовил ответственный, можно установить отбор в списке по полю <strong>Подготовлен</strong>. </p> +<li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="1">Ввод пользователя</a> (при наличии права)</h3> +<p>Если пользователя ввел ответственный за список и заполнил имя для входа, тогда администратору в карточке пользователя выводится рекомендация проверить настройки для входа. После разрешения входа рекомендация скрывается, а ответственный более не может изменить настройки для входа, кроме отключения разрешения на вход в приложение. Для того чтобы посмотреть всех таких пользователей, которых подготовил ответственный, можно установить отбор в списке по полю <strong>Подготовлен</strong>. </p> <p>Сведения о пользователе располагаются на вкладках: </p> <ul><li><strong>Главное</strong> -<ul><li>Введите <strong>Полное имя</strong> пользователя, которое будет отображаться в приложении в различных списках и отчетах приложения. +<ul><li>Введите <strong>Полное имя</strong> пользователя, которое будет отображаться в приложении в различных списках и отчетах приложения. </li> -<li>Флажок <strong>Недействителен</strong> по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с приложением (например, уволен), и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов приложения, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей. Если пользователя нужно восстановить в приложении (например, его снова взяли на работу), то можно снять флажок и снова использовать эти данные. +<li>Флажок <strong>Недействителен</strong> по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с приложением (например, уволен), и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов приложения, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей. Если пользователя нужно восстановить в приложении (например, его снова взяли на работу), то можно снять флажок и снова использовать эти данные. </li> -<li><strong>Имя (для входа)</strong> - короткое имя, используется для входа в приложение. Может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович"). +<li><strong>Имя (для входа)</strong> - короткое имя, используется для входа в приложение. Может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович"). </li> <li><b>Электронная почта</b> - используется для восстановления пароля пользователя.</li> -<li><b>Телефон </b>- используется для того, чтобы осуществлять звонки и отправлять SMS пользователю. </li> +<li><b>Телефон </b>- используется для того, чтобы осуществлять звонки и отправлять SMS пользователю. </li> <li><strong>Аутентификация 1С:Предприятия</strong> - по умолчанию флажок включен и активно поле для ввода пароля. <ul><li>Состояние аутентификации 1С:Предприятия выводится под флажком.</li></ul></li> -<li>Нажмите кнопку <strong>Установить пароль</strong>, - введите <a href="CommonForm.СменаПароля/Help">пароль для входа в приложение</a>. В целях безопасности данных всегда заполняйте это поле. +<li>Нажмите кнопку <strong>Установить пароль</strong>, - введите <a href="CommonForm.СменаПароля/Help">пароль для входа в приложение</a>. В целях безопасности данных всегда заполняйте это поле. <ul><li>Если данные пользователя еще не были записаны, выводится сообщение. Нажмите кнопку <strong>Записать</strong>. </li> <li>После установки пароля состояние аутентификации меняется на <strong>Пароль установлен</strong>.</li></ul></li> <li><strong>Потребовать смену пароля при входе</strong> - включите флажок, в этом случае пользователь будет обязан самостоятельно ввести свой пароль, который больше никто не будет знать. Для удобства администрирования и обеспечения безопасности у всех пользователей добавлен этот реквизит, который нужен, чтобы пользователь сменил пароль, заданный администратором, на свой. </li> -<li><strong>Показывать в списке выбора</strong> - для того чтобы включить пользователя в список выбора, который выводится при начале работы с приложением, включите флажок. Если в приложении используются внешние пользователи, то этот флажок не рекомендуется устанавливать. Если флажок не установлен, то при входе в приложение имя такого пользователя будет скрыто из списка выбора. +<li><strong>Показывать в списке выбора</strong> - для того чтобы включить пользователя в список выбора, который выводится при начале работы с приложением, включите флажок. Если в приложении используются внешние пользователи, то этот флажок не рекомендуется устанавливать. Если флажок не установлен, то при входе в приложение имя такого пользователя будет скрыто из списка выбора. </li> -<li><strong>Пользователю запрещено изменять пароль</strong> - Если пароли в приложении должен будет вводить только администратор, при необходимости включите флажок и запретите пользователю менять свой пароль. В этом случае при открытии учетной записи пользователем кнопка <strong>Установить пароль</strong> (<strong>Сменить пароль</strong>) станет недоступной. +<li><strong>Пользователю запрещено изменять пароль</strong> - Если пароли в приложении должен будет вводить только администратор, при необходимости включите флажок и запретите пользователю менять свой пароль. В этом случае при открытии учетной записи пользователем кнопка <strong>Установить пароль</strong> (<strong>Сменить пароль</strong>) станет недоступной. </li> -<li><strong>Аутентификация по протоколу OpenID</strong> - включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу OpenID. Данная функция используется для работы в веб-клиенте 1С:Предприятия. Для корректной работы приложения в этом случае должен быть также включен флажок <strong>Аутентификация 1С: Предприятия</strong>. +<li><strong>Аутентификация по протоколу OpenID</strong> - включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу OpenID. Данная функция используется для работы в веб-клиенте 1С:Предприятия. Для корректной работы приложения в этом случае должен быть также включен флажок <strong>Аутентификация 1С: Предприятия</strong>. </li> -<li><strong>Аутентификация по протоколу OpenID-Connect </strong>- включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу <b>OpenID-Connect</b>. <strong>Аутентификация по протоколу OpenID-Connect</strong> - позволяет системе проверить личность пользователя на основе аутентификации, выполненной сторонним провайдером. В результате, для того чтобы получить доступ к 1С:Предприятия, пользователи могут использовать свои учетные данные на других сайтах. Например, в качестве такого сайта можно использовать Единую систему идентификации и аутентификации, при этом автоматизация будет проходить через сайт госуслуг gosuslugi.ru. Данная аутентификация используется для работы в тонком клиенте, веб-клиенте и в мобильном клиенте 1С:Предприятия. </li> -<li><strong>Аутентификация токеном доступа </strong>- аутентификация с помощью JWT-токенов, с их помощью можно сгенерировать ссылку, по которой будет на определенное время предоставлен интерактивный вход в приложение (без ввода логина и пароля). </li> -<li><strong>Аутентификация операционной системы</strong> - для того чтобы упростить вход в приложение, включите этот флажок. -<ul><li>В поле <strong>Пользователь</strong> с помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <a href="Catalog.Пользователи.Form.ВыборПользователяОперационнойСистемы/Help">выберите</a>, под каким именем данный пользователь работает в операционной системе. Под этим именем он будет входить в приложение. В этом случае можно отключить флажок <strong>Аутентификация 1С: Предприятия</strong>.</li></ul></li> +<li><strong>Аутентификация по протоколу OpenID-Connect </strong>- включите флажок, чтобы разрешить пользователю использовать единую учетную запись по протоколу <b>OpenID-Connect</b>. <strong>Аутентификация по протоколу OpenID-Connect</strong> - позволяет системе проверить личность пользователя на основе аутентификации, выполненной сторонним провайдером. В результате, для того чтобы получить доступ к 1С:Предприятия, пользователи могут использовать свои учетные данные на других сайтах. Например, в качестве такого сайта можно использовать Единую систему идентификации и аутентификации, при этом автоматизация будет проходить через сайт госуслуг gosuslugi.ru. Данная аутентификация используется для работы в тонком клиенте, веб-клиенте и в мобильном клиенте 1С:Предприятия. </li> +<li><strong>Аутентификация токеном доступа </strong>- аутентификация с помощью JWT-токенов, с их помощью можно сгенерировать ссылку, по которой будет на определенное время предоставлен интерактивный вход в приложение (без ввода логина и пароля). </li> +<li><strong>Аутентификация операционной системы</strong> - для того чтобы упростить вход в приложение, включите этот флажок. +<ul><li>В поле <strong>Пользователь</strong> с помощью кнопки <img src="StdPicture.InputFieldSelect"></img><a href="Catalog.Пользователи.Form.ВыборПользователяОперационнойСистемы/Help">выберите</a>, под каким именем данный пользователь работает в операционной системе. Под этим именем он будет входить в приложение. В этом случае можно отключить флажок <strong>Аутентификация 1С: Предприятия</strong>.</li></ul></li> <li>Если ни один флажок <strong>Аутентификация</strong> не включен, то автоматически выключается и флажок <strong>Вход в приложение разрешен</strong>. </li> <li><strong>Режим запуска</strong> - заполнено приложением по умолчанию (<strong>Авто</strong>). Рекомендуется выбирать этот <a href="v8help://frame/InformationEntryToForm">режим</a>.</li></ul></li> <li><strong>Адреса, телефоны</strong> <ul><li>На вкладке введите <a href="DataProcessor.ВводКонтактнойИнформации/Help">контактную информацию</a> пользователя, предусмотренную в приложении (например, Skype).</li></ul></li> -<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help"><b>Дополнительные реквизиты</b> </a><br><ul><li>На вкладке приложение выводит дополнительные реквизиты пользователя, например, <b>Согласие на обработку ПДн</b>. </li></ul></li> +<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help"><b>Дополнительные реквизиты</b> </a><br><ul><li>На вкладке приложение выводит дополнительные реквизиты пользователя, например, <b>Согласие на обработку ПДн</b>. </li></ul></li> <li><strong>Комментарий</strong> -<ul><li>На вкладке напишите дополнительную информацию о пользователе.</li></ul></li></ul><h3>Включение пользователя в группы</h3> -<p>Если в приложении включено использование групп пользователей, то пользователя во время ввода можно включить в одну или несколько групп.</p> -<ul><li>Нажмите <strong>Группы</strong> на панели навигации, с помощью флажков выберите одну или несколько <a href="Catalog.ГруппыПользователей/Help">групп</a>. +<ul><li>На вкладке напишите дополнительную информацию о пользователе.</li></ul></li></ul><h3>Включение пользователя в группы</h3> +<p>Если в приложении включено использование групп пользователей, то пользователя во время ввода можно включить в одну или несколько групп.</p> +<ul><li>Нажмите <strong>Группы</strong> на панели навигации, с помощью флажков выберите одну или несколько <a href="Catalog.ГруппыПользователей/Help">групп</a>. </li> -<li>Для того чтобы быстро отменить свой выбор, нажмите <strong>Исключить из всех групп</strong>.</li></ul><h3>Права доступа пользователя </h3> -<p>В зависимости от состава приложения для настройки прав доступа предусмотрена одна из возможностей:</p> +<li>Для того чтобы быстро отменить свой выбор, нажмите <strong>Исключить из всех групп</strong>.</li></ul><h3>Права доступа пользователя </h3> +<p>В зависимости от состава приложения для настройки прав доступа предусмотрена одна из возможностей:</p> <ul><li>Нажмите <strong>Права доступа</strong> на панели навигации, чтобы включить пользователя в одну или несколько <a href="Catalog.ГруппыДоступа/Help">групп доступа</a>. Их необходимо выбрать из списка. </li> <li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить пользователю одну или несколько ролей, которые в совокупности образуют его персональные настройки прав доступа. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям. @@ -81,31 +81,31 @@ </li> <li>Для удобства назначения можно упорядочить роли как в алфавитном порядке, так и <strong>По подсистемам</strong>.</li></ul></li></ul><h3><a name="2">Разрешение входа в приложение (только для администратора)</a></h3> <ul><li> -<div>Для входа пользователя в приложение нужно установить флажок <strong>Вход в приложение разрешен.</strong> При этом должны быть заданы необходимые свойства: имя (для входа), пароль и другие параметры авторизации. </div> +<div>Для входа пользователя в приложение нужно установить флажок <strong>Вход в приложение разрешен.</strong> При этом должны быть заданы необходимые свойства: имя (для входа), пароль и другие параметры авторизации. </div> </li> <li> -<div>В приложении возможно прекращение работы пользователей, которым сняли флажок <strong>Вход в приложение разрешен</strong>, интерактивно или программно в связи с окончанием срока действия.</div> +<div>В приложении возможно прекращение работы пользователей, которым сняли флажок <strong>Вход в приложение разрешен</strong>, интерактивно или программно в связи с окончанием срока действия.</div> </li> <li> -<div>Открытые сеансы пользователей автоматически завершаются не более чем через 25 минут после того, как вход в приложение был запрещен.</div></li></ul><h3>Ограничения на вход</h3> -<p>Перейдите по ссылке, для того чтобы <strong>Установить ограничение</strong>. С помощью переключателя установите ограничение на вход в приложение:</p> +<div>Открытые сеансы пользователей автоматически завершаются не более чем через 25 минут после того, как вход в приложение был запрещен.</div></li></ul><h3>Ограничения на вход</h3> +<p>Перейдите по ссылке, для того чтобы <strong>Установить ограничение</strong>. С помощью переключателя установите ограничение на вход в приложение:</p> <ul><li> -<div><strong>Согласно общим настройкам входа</strong> - установлено по умолчанию (<a href="CommonForm.НастройкиВходаПользователей/Help">централизованно</a> может быть запрещен вход всем пользователям, которые не заходили в приложение больше установленного срока;</div> +<div><strong>Согласно общим настройкам входа</strong> - установлено по умолчанию (<a href="CommonForm.НастройкиВходаПользователей/Help">централизованно</a> может быть запрещен вход всем пользователям, которые не заходили в приложение больше установленного срока;</div> </li> <li> -<div><strong>Без ограничения срока </strong>- бессрочный доступ, только для этого пользователя;</div> +<div><strong>Без ограничения срока </strong>- бессрочный доступ, только для этого пользователя;</div> </li> <li> -<div><strong>Вход разрешен до</strong> (установите срок - введите дату вручную или выберите из календаря с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>). Для защиты от несанкционированного доступа к приложению у всех пользователей добавлен <strong>Срок действия</strong>, который позволяет автоматически отключить пользователя по достижении указанной даты;</div> +<div><strong>Вход разрешен до</strong> (установите срок - введите дату вручную или выберите из календаря с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>). Для защиты от несанкционированного доступа к приложению у всех пользователей добавлен <strong>Срок действия</strong>, который позволяет автоматически отключить пользователя по достижении указанной даты;</div> </li> <li> -<div><strong>Запретить вход, если не работает более</strong> (укажите количество дней) - если пользователь не войдет в приложение больше указанного количества дней, то вход в приложение будет невозможен. </div> +<div><strong>Запретить вход, если не работает более</strong> (укажите количество дней) - если пользователь не войдет в приложение больше указанного количества дней, то вход в приложение будет невозможен. </div> <ul><li> -<div>В этом случае пользователь должен будет обратиться к администратору для возобновления работы в приложении.</div></li></ul></li> +<div>В этом случае пользователь должен будет обратиться к администратору для возобновления работы в приложении.</div></li></ul></li> <li> <div>Ограничения отражаются в карточке пользователя, также на всех пользователей их можно просмотреть в отчете <a href="Report.СведенияОПользователях/Help">Сведения о пользователях</a>.</div></li></ul><h3>Управление настройками пользователя</h3> <ul><li> -<div>Приложение запоминает <a href="DataProcessor.НастройкиПользователей.Form.НастройкиПользователей/Help">настройки</a> каждого пользователя во время его работы. Для того чтобы просмотреть, скопировать или удалить настройки пользователя (удалять настройки приходится, если из-за этих неправильных настроек работать в приложении становится невозможно), нажмите <strong>Настройки</strong> на панели навигации.</div></li></ul><h3>Предупреждения приложения</h3> +<div>Приложение запоминает <a href="DataProcessor.НастройкиПользователей.Form.НастройкиПользователей/Help">настройки</a> каждого пользователя во время его работы. Для того чтобы просмотреть, скопировать или удалить настройки пользователя (удалять настройки приходится, если из-за этих неправильных настроек работать в приложении становится невозможно), нажмите <strong>Настройки</strong> на панели навигации.</div></li></ul><h3>Предупреждения приложения</h3> <ul><li> <div>В случае если свойства пользователя отличаются от свойств <a href="Catalog.Пользователи.Form.ПользователиИнформационнойБазы/Help">пользователя информационной базы</a>, то приложение выводит предупреждение с перечнем этих свойств. Предлагается записать данные, чтобы устранить различия.</div></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index a02b76365..bd355364f 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -155,10 +155,12 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ВидКонтактнойИнформацииEmailПользователя = ВидКонтактнойИнформации("EmailПользователя"); + ВидКонтактнойИнформацииТелефонПользователя = ВидКонтактнойИнформации("ТелефонПользователя"); ИсключаемыеВиды = Новый Массив; - ИсключаемыеВиды.Добавить(ВидКонтактнойИнформации("ТелефонПользователя")); - ИсключаемыеВиды.Добавить(ВидКонтактнойИнформации("EmailПользователя")); + ИсключаемыеВиды.Добавить(ВидКонтактнойИнформацииEmailПользователя); + ИсключаемыеВиды.Добавить(ВидКонтактнойИнформацииТелефонПользователя); ДополнительныеПараметры = МодульУправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации(); ДополнительныеПараметры.ИмяЭлементаДляРазмещения = "КонтактнаяИнформация"; @@ -232,7 +234,8 @@ КонецЕсли; Если НЕ ЗначениеЗаполнено(АдресФотографии) Тогда - АдресФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, УникальныйИдентификатор); + АдресФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, + УникальныйИдентификатор); КонецЕсли; КонецПроцедуры @@ -513,7 +516,7 @@ КонецЕсли; Если ФотографияЗадана И ЭтоАдресВременногоХранилища(АдресФотографии) Тогда - ТекущийОбъект.Фотография = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФотографии)); + ТекущийОбъект.Фотография = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФотографии), Новый СжатиеДанных(9)); Иначе ТекущийОбъект.Фотография = Новый ХранилищеЗначения(Неопределено); КонецЕсли; @@ -556,7 +559,8 @@ МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") + И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда МодульОбсуждения = ОбщегоНазначения.ОбщийМодуль("Обсуждения"); МодульОбсуждения.ОбновитьПользователяВСистемеВзаимодействия(ТекущийОбъект); КонецЕсли; @@ -1015,16 +1019,16 @@ КонецЕсли; #Если Не ВебКлиент Тогда - Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение)); - Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением.'")); - Возврат; - КонецЕсли; - - Если Картинка.РазмерФайла() > 2 * 1024 * 1024 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением меньше 2 Мб.'")); - Возврат; - КонецЕсли; + Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение)); + Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите файл с изображением.'")); + Возврат; + КонецЕсли; + + Если Картинка.РазмерФайла() > 2 * 1024 * 1024 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите файл с изображением меньше 2 Мб.'")); + Возврат; + КонецЕсли; #КонецЕсли Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда @@ -1036,15 +1040,13 @@ ФотографияЗадана = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка контактной информации. +#Область ПоддержкаКонтактнойИнформации &НаКлиенте Процедура Подключаемый_EMailПриИзменении(Элемент) - МодульУправлениеКонтактнойИнформациейКлиент = + МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); @@ -1056,7 +1058,7 @@ ТаблицаКИ = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; СтрокаEMail = ТаблицаКИ.НайтиСтроки(Новый Структура("Вид", - ВидКонтактнойИнформацииEmailПользователя()))[0]; + ВидКонтактнойИнформацииEmailПользователя))[0]; Если ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]) Тогда ПользовательИБПароль = "" + Новый УникальныйИдентификатор + "qQ"; @@ -1083,7 +1085,6 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя); КонецПроцедуры @@ -1093,7 +1094,6 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); @@ -1109,8 +1109,7 @@ ТаблицаКИ = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - Отбор = Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя()); - + Отбор = Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя); СтрокаEMail = ТаблицаКИ.НайтиСтроки(Отбор)[0]; ПараметрыФормы = Новый Структура; @@ -1214,6 +1213,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли //////////////////////////////////////////////////////////////////////////////// @@ -1288,8 +1289,7 @@ Модифицированность = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -1335,6 +1335,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -2082,8 +2084,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка контактной информации. +#Область ПоддержкаКонтактнойИнформации &НаСервере Процедура ОбновитьКонтактнуюИнформацию(Результат) @@ -2102,7 +2103,7 @@ КонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформации("EmailПользователя")))[0]; + СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя))[0]; ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита]; ЭлементEMail.УстановитьДействие("ПриИзменении", "Подключаемый_EMailПриИзменении"); ЭлементEMail.УстановитьДействие("Очистка", "Подключаемый_EMailОчистка"); @@ -2112,7 +2113,7 @@ ЭлементEMail.РедактированиеТекста = Не ЭлементEMail.КнопкаВыбора; ЭлементEMail.УстановитьДействие("НачалоВыбора", "Подключаемый_EMailНачалоВыбора"); - СтрокаТелефон = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформации("ТелефонПользователя")))[0]; + СтрокаТелефон = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформацииТелефонПользователя))[0]; ЭлементТелефон = Элементы[СтрокаТелефон.ИмяРеквизита]; ЭлементТелефон.УстановитьДействие("ПриИзменении", "Подключаемый_ТелефонПриИзменении"); @@ -2127,7 +2128,7 @@ КонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформации("EmailПользователя")))[0]; + СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя))[0]; ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита]; ЭлементEMail.КнопкаВыбора = ЗначениеЗаполнено(Объект.Ссылка) И ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]); @@ -2143,17 +2144,9 @@ КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ВидКонтактнойИнформацииEmailПользователя() - - ИмяПредопределенногоЗначения = "Справочник." + "ВидыКонтактнойИнформации" + ".EmailПользователя"; - - Возврат ПредопределенноеЗначение(ИмяПредопределенногоЗначения); - -КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Поддержка дополнительных реквизитов. +#Область ПоддержкаДополнительныхРеквизитов &НаСервере Процедура СвойстваВыполнитьОтложеннуюИнициализацию() @@ -2195,8 +2188,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработка пользователя ИБ +#КонецОбласти + +#Область ОбработкаПользователяИБ &НаСервере Функция НачальноеОписаниеПользователяИБ() @@ -2398,7 +2392,7 @@ МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); СтрокаОписания = МодульУправлениеКонтактнойИнформацией.СтрокаОписанияПочтыДляВосстановленияПароляИзДанныхФормы( - ЭтотОбъект, ВидКонтактнойИнформации("EmailПользователя"), ПользовательИБАдресЭлектроннойПочты); + ЭтотОбъект, ВидКонтактнойИнформацииEmailПользователя, ПользовательИБАдресЭлектроннойПочты); Если СтрокаОписания = Неопределено Тогда ПоказатьКомандыУстраненияРазличий = @@ -2543,13 +2537,13 @@ Если ЗначениеЗаполнено(ПочтаДляВосстановленияПароляИзОбъекта[ИмяРеквизитаСПочтойДляВосстановленияПароля]) Или ПочтаДляВосстановленияПароляИзОбъекта[ИмяРеквизитаСПочтойДляВосстановленияПароля] <> ПользовательИБАдресЭлектроннойПочты Тогда - ВидEmailПользователя = ВидКонтактнойИнформации("EmailПользователя"); - ОписаниеПочты = МодульУправлениеКонтактнойИнформацией.СтрокаОписанияПочтыДляВосстановленияПароляИзДанныхФормы(ЭтотОбъект, ВидEmailПользователя, ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля]); + ОписаниеПочты = МодульУправлениеКонтактнойИнформацией.СтрокаОписанияПочтыДляВосстановленияПароляИзДанныхФормы(ЭтотОбъект, + ВидКонтактнойИнформацииEmailПользователя, ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля]); Если ОписаниеПочты <> Неопределено Тогда ОписаниеПочты.Представление = ПользовательИБАдресЭлектроннойПочты; ОписаниеПочты.Значение = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению( - ПользовательИБАдресЭлектроннойПочты, ВидEmailПользователя); + ПользовательИБАдресЭлектроннойПочты, ВидКонтактнойИнформацииEmailПользователя); ЭтотОбъект[ИмяРеквизитаСПочтойДляВосстановленияПароля] = ПользовательИБАдресЭлектроннойПочты; КонецЕсли; @@ -2560,8 +2554,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Начальное заполнение, проверка заполнения, доступность свойств. +#КонецОбласти + +#Область НачальноеЗаполнениеПроверкаЗаполненияДоступностьСвойств &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьСвойств(Форма) @@ -2615,7 +2610,7 @@ Если ДействияСПользователемСервиса <> Неопределено Тогда // Доступность редактирования КИ. - Отбор = Новый Структура("Вид", ВидКонтактнойИнформацииEmailПользователя()); + Отбор = Новый Структура("Вид", Форма.ВидКонтактнойИнформацииEmailПользователя); НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); ЗаполненEMail = (НайденныеСтроки <> Неопределено) И ЗначениеЗаполнено(Форма[НайденныеСтроки[0].ИмяРеквизита]); Если Объект.Ссылка.Пустая() И ЗаполненEMail Тогда @@ -2749,8 +2744,9 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#КонецОбласти + +#Область ДляРаботыИнтерфейсаРолей &НаСервере Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) @@ -2779,4 +2775,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index a83bb2eb3..417c84197 100644 --- a/SSL/src/Catalogs/Пользователи/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Help/ru.html @@ -1,63 +1,63 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Предназначен для ведения пользователей, которые работают с приложением. </p> +<p>Предназначен для ведения пользователей, которые работают с приложением. </p> <p>Открыть список пользователей можно из раздела <strong>Администрирование - Настройки пользователей и прав</strong> или <strong>Управление доступом</strong> с помощью команды <strong>Пользователи.</strong></p> <p>Ведение списка пользователей может осуществлять как администратор, так и ответственный за список пользователей. </p> -<p>Вход в приложение разрешает только администратор.</p> -<p>Ответственный за список (с правом добавления новых пользователей) может выполнять ограниченное ведение списка пользователей и настройку пользователя до разрешения входа в приложение администратором. Ответственный за список может редактировать списки <strong>Пользователи</strong> и <strong>Группы пользователей</strong>.</p> -<p>Всем пользователям доступен только просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык приложения и контактная информация. </p> -<p>Пользователь, которого ввел ответственный за список, получает статус <strong>Подготовлен</strong>. Администратор приложения может отобрать таких пользователей по этому признаку, проверить правильность заполнения сведений и разрешить вход в приложение.</p> -<p>После того как администратор разрешит вход в приложение, ответственный за список более не сможет изменить настройки для входа, кроме отключения разрешения на вход в приложение.</p> -<p>В распределенной информационной базе вход в приложение настраивается отдельно для каждой из информационных баз приложения.</p> -<p>В случае большого количества пользователей список может быть сгруппирован. Например, <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> можно использовать для ведения структуры подразделений компании.</p> +<p>Вход в приложение разрешает только администратор.</p> +<p>Ответственный за список (с правом добавления новых пользователей) может выполнять ограниченное ведение списка пользователей и настройку пользователя до разрешения входа в приложение администратором. Ответственный за список может редактировать списки <strong>Пользователи</strong> и <strong>Группы пользователей</strong>.</p> +<p>Всем пользователям доступен только просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык приложения и контактная информация. </p> +<p>Пользователь, которого ввел ответственный за список, получает статус <strong>Подготовлен</strong>. Администратор приложения может отобрать таких пользователей по этому признаку, проверить правильность заполнения сведений и разрешить вход в приложение.</p> +<p>После того как администратор разрешит вход в приложение, ответственный за список более не сможет изменить настройки для входа, кроме отключения разрешения на вход в приложение.</p> +<p>В распределенной информационной базе вход в приложение настраивается отдельно для каждой из информационных баз приложения.</p> +<p>В случае большого количества пользователей список может быть сгруппирован. Например, <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> можно использовать для ведения структуры подразделений компании.</p> <p>Команды для работы со списком пользователей также доступны в контекстном меню по правой кнопке мыши. </p> -<h3>Ввод пользователя</h3> -<ul><li> Нажмите <strong>Создать</strong>, <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">заполните</a> необходимые поля.</li></ul><h3>Просмотр недействительных пользователей</h3> -<ul><li>Пользователи могут быть отмечены как недействительные. Для того чтобы посмотреть таких пользователей, включите флажок <strong>Показывать недействительных пользователей</strong> внизу списка. </li></ul><h3>Просмотр пользователей нижестоящих групп</h3> +<h3>Ввод пользователя</h3> +<ul><li> Нажмите <strong>Создать</strong>, <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">заполните</a> необходимые поля.</li></ul><h3>Просмотр недействительных пользователей</h3> +<ul><li>Пользователи могут быть отмечены как недействительные. Для того чтобы посмотреть таких пользователей, включите флажок <strong>Показывать недействительных пользователей</strong> внизу списка. </li></ul><h3>Просмотр пользователей нижестоящих групп</h3> <ul><li>Для того чтобы увидеть всех пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок <strong>Показывать пользователей нижестоящих групп</strong> в нижней части списка. По умолчанию флажок включен.</li></ul><h3>Состояние пользователя</h3> <ul><li><img src="CommonPicture.СостояниеПользователя14"></img><b>Вход ограничен</b> - ограничение входа пользователя до определенной даты или установлен срок максимальной неактивности пользователя.</li> -<li><img src="CommonPicture.СостояниеПользователя13"></img><b>Нет входа</b> - пользователь с выключенным разрешением на вход в приложение, без ролей или права на запуск приложения. </li> -<li><img src="CommonPicture.СостояниеПользователя15"></img><b>Без настройки</b> - пользователь без настройки входа в приложение (пустое имя для входа).</li></ul><h3>Установка пароля</h3> +<li><img src="CommonPicture.СостояниеПользователя13"></img><b>Нет входа</b> - пользователь с выключенным разрешением на вход в приложение, без ролей или права на запуск приложения. </li> +<li><img src="CommonPicture.СостояниеПользователя15"></img><b>Без настройки</b> - пользователь без настройки входа в приложение (пустое имя для входа).</li></ul><h3>Установка пароля</h3> <ul><li> <div>Нажмите <strong>Еще - Установить пароль</strong>, напишите <a href="CommonForm.СменаПароля/Help">пароль</a>.</div></li></ul><h3>Просмотр списка пользователей информационной базы</h3> -<ul><li>Для контроля правильности ввода или в случае некорректного ввода пользователей по команде <strong>Еще - Пользователи информационной базы</strong> можно перейти к контролю записей и синхронизации списка пользователей со списком <a href="Catalog.Пользователи.Form.ПользователиИнформационнойБазы/Help">пользователей информационной базы</a>. </li></ul><h3>Группировка пользователей</h3> -<ul><li>В случае если в приложении разрешено использовать группы пользователей, список состоит из двух частей: в левой части необходимое количество групп, в правой - список пользователей выделенной группы. По умолчанию текущей является группа <strong>Все пользователи</strong>, т.е. видны все пользователи приложения. +<ul><li>Для контроля правильности ввода или в случае некорректного ввода пользователей по команде <strong>Еще - Пользователи информационной базы</strong> можно перейти к контролю записей и синхронизации списка пользователей со списком <a href="Catalog.Пользователи.Form.ПользователиИнформационнойБазы/Help">пользователей информационной базы</a>. </li></ul><h3>Группировка пользователей</h3> +<ul><li>В случае если в приложении разрешено использовать группы пользователей, список состоит из двух частей: в левой части необходимое количество групп, в правой - список пользователей выделенной группы. По умолчанию текущей является группа <strong>Все пользователи</strong>, т.е. видны все пользователи приложения. </li> <li>Один и тот же пользователь может одновременно входить в разные группы. Включить пользователя в группу можно разными способами: <ul><li>При вводе пользователя в списке можно сначала выбрать группу, затем нажать кнопку <strong>Создать</strong>. </li> -<li>Для добавления в группу большого числа пользователей можно открыть окно группы и нажать <strong>Подобрать</strong>. При этом для подбора используется <a href="#S">список</a> <strong>Пользователи</strong>, состоящий из трех частей. +<li>Для добавления в группу большого числа пользователей можно открыть окно группы и нажать <strong>Подобрать</strong>. При этом для подбора используется <a href="#S">список</a> <strong>Пользователи</strong>, состоящий из трех частей. </li> -<li>Выделите пользователя в списке, выполните команду меню <strong>Еще - Назначить группы</strong>, с помощью флажков включите его в одну или несколько групп. Также можно найти эту команду в контекстном меню по правой кнопке мыши. +<li>Выделите пользователя в списке, выполните команду меню <strong>Еще - Назначить группы</strong>, с помощью флажков включите его в одну или несколько групп. Также можно найти эту команду в контекстном меню по правой кнопке мыши. </li> -<li>Перетащите одного или нескольких пользователей мышью в нужную группу. Подтвердите свой выбор, нажав кнопку <strong>Да</strong>. Для использования этой возможности флажок <strong>Показывать пользователей нижестоящих групп</strong> необходимо отключить.</li></ul></li></ul><h3>Ввод группы пользователей</h3> -<ul><li>Для ввода <a href="Catalog.ГруппыПользователей.Form.ФормаЭлемента/Help">группы</a> нажмите <img src="StdPicture.CreateFolder"></img> <strong>Создать группу пользователей</strong>. +<li>Перетащите одного или нескольких пользователей мышью в нужную группу. Подтвердите свой выбор, нажав кнопку <strong>Да</strong>. Для использования этой возможности флажок <strong>Показывать пользователей нижестоящих групп</strong> необходимо отключить.</li></ul></li></ul><h3>Ввод группы пользователей</h3> +<ul><li>Для ввода <a href="Catalog.ГруппыПользователей.Form.ФормаЭлемента/Help">группы</a> нажмите <img src="StdPicture.CreateFolder"></img><strong>Создать группу пользователей</strong>. </li> <li>Также можно воспользоваться командой <strong>Создать</strong> контекстного меню по правой кнопке мыши в левой части списка.</li></ul><h3>Включение группы пользователей в другую группу</h3> <ul><li> <div>Выберите группу в левой части списка, воспользуйтесь командой контекстного меню по правой кнопке мыши <strong>Переместить в группу</strong>. </div> </li> <li> -<div>Выберите группу для перемещения.</div></li></ul><h3><a name="S">Подбор участников групп</a>ы пользователей</h3> -<ul><li>В случае если из списка пользователей производится подбор участников группы, он состоит из трех частей.Слева в верхней части списка отображаются группы, в нижней части пользователи выбранной группы. В правой части списка отображаются выбранные пользователи. +<div>Выберите группу для перемещения.</div></li></ul><h3><a name="S">Подбор участников групп</a>ы пользователей</h3> +<ul><li>В случае если из списка пользователей производится подбор участников группы, он состоит из трех частей.Слева в верхней части списка отображаются группы, в нижней части пользователи выбранной группы. В правой части списка отображаются выбранные пользователи. </li> <li> -<div>Для удобства подбора в верхней левой части списка показаны уже имеющиеся группы пользователей. Выбрав нужную группу (или группу <strong>Все пользователи</strong>), можно просмотреть пользователей этой группы в нижней левой части списка.</div> +<div>Для удобства подбора в верхней левой части списка показаны уже имеющиеся группы пользователей. Выбрав нужную группу (или группу <strong>Все пользователи</strong>), можно просмотреть пользователей этой группы в нижней левой части списка.</div> </li> <li> <div>Выделите одного или нескольких пользователей в левой нижней части списка, с помощью стрелки переместите в правую часть <strong>Выбранные пользователи</strong>.Также можно перенести пользователя из левой нижней части в правую с помощью двойного щелчка мышью.</div> </li> <li> -<div>Для того чтобы отменить свой выбор, уберите одного или нескольких ненужных пользователей из правой части списка аналогичными действиями. </div> +<div>Для того чтобы отменить свой выбор, уберите одного или нескольких ненужных пользователей из правой части списка аналогичными действиями. </div> </li> <li> -<div>С помощью двойной стрелки << можно убрать из <strong>Выбранных</strong> сразу всех пользователей. </div> +<div>С помощью двойной стрелки << можно убрать из <strong>Выбранных</strong> сразу всех пользователей. </div> </li> <li> <div>Приложение ведет подсчет выбранных пользователей.</div> </li> <li> -<div>После окончания подбора участников группы пользователей нажмите кнопку <strong>Завершить и закрыть</strong>.</div></li></ul><h3>Просмотр отчета Сведения о пользователях</h3> -<ul><li>Отчет позволяет выполнить анализ настроек для входа (свойств пользователя ИБ) совместно с остальными свойствами пользователя в справочнике. Включает 3 варианта отчета - о пользователях, внешних пользователях и всех пользователях приложения. +<div>После окончания подбора участников группы пользователей нажмите кнопку <strong>Завершить и закрыть</strong>.</div></li></ul><h3>Просмотр отчета Сведения о пользователях</h3> +<ul><li>Отчет позволяет выполнить анализ настроек для входа (свойств пользователя ИБ) совместно с остальными свойствами пользователя в справочнике. Включает 3 варианта отчета - о пользователях, внешних пользователях и всех пользователях приложения. </li> -<li>Нажмите <strong>Еще - Сведения о пользователях</strong>, сформируйте <a href="Report.СведенияОПользователях/Help">отчет</a>.</li></ul><h3>См. также </h3> +<li>Нажмите <strong>Еще - Сведения о пользователях</strong>, сформируйте <a href="Report.СведенияОПользователях/Help">отчет</a>.</li></ul><h3>См. также </h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index e44db12c7..d800332d0 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -109,15 +109,15 @@ КонецПроцедуры Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) - Если ВидФормы = "ФормаВыбора" ИЛИ Параметры.Свойство("РежимВыбора") Тогда - + + Если ВидФормы = "ФормаВыбора" Тогда ВыбраннаяФормаПоУмолчанию = ВыбраннаяФорма; ПользователиПереопределяемый.ПриОпределенииФормыВыбораПользователей(ВыбраннаяФорма, Параметры); - Если ВыбраннаяФормаПоУмолчанию <> ВыбраннаяФорма Тогда + Если ВыбраннаяФормаПоУмолчанию <> ВыбраннаяФорма Тогда СтандартнаяОбработка = Ложь; КонецЕсли; - КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -171,8 +171,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -242,6 +241,8 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти #КонецЕсли + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html index 5b857b750..8a8be8313 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html @@ -10,15 +10,15 @@ <div><strong>Помещать в папку</strong> - папка, к которой применяется данное условие.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Применение правил<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e300d72be22d94"></a></h3> <ul style="MARGIN-LEFT: 40px"><li>В поле <strong>Для писем в папке</strong> укажите <a href="Catalog.ПапкиЭлектронныхПисем.Form.ФормаЭлемента/Help">папку</a>, для писем которой необходимо применить новое правило. </li> -<li>Если включить флажок <strong>Включая подчиненные</strong>, то будут обработаны письма и в дочерних <a href="Catalog.ПапкиЭлектронныхПисем/Help">папках</a>. +<li>Если включить флажок <strong>Включая подчиненные</strong>, то будут обработаны письма и в дочерних <a href="Catalog.ПапкиЭлектронныхПисем/Help">папках</a>. </li> -<li>Включите флажки у тех правил, которые должны быть применены. С помощью кнопки <img src="StdPicture.CheckAll"></img> можно выбрать все правила. С помощью кнопки <img src="StdPicture.UncheckAll"></img> можно снять все флажки. +<li>Включите флажки у тех правил, которые должны быть применены. С помощью кнопки <img src="StdPicture.CheckAll"></img> можно выбрать все правила. С помощью кнопки <img src="StdPicture.UncheckAll"></img> можно снять все флажки. </li> -<li>Настройте порядок применения правил. Первыми будут применяться те правила, которые находятся выше в списке. Изменить порядок можно при помощи кнопок <strong><img src="StdPicture.MoveUp"></img> Вверх</strong> и <img src="StdPicture.MoveDown"></img> <strong>Вниз</strong> в командной панели списка. +<li>Настройте порядок применения правил. Первыми будут применяться те правила, которые находятся выше в списке. Изменить порядок можно при помощи кнопок <strong><img src="StdPicture.MoveUp"></img> Вверх</strong> и <img src="StdPicture.MoveDown"></img><strong>Вниз</strong> в командной панели списка. </li> -<li>Нажмите <b>Применить</b>. Отмеченные в списке флажками правила будут применены к письмам указанной папки. +<li>Нажмите <b>Применить</b>. Отмеченные в списке флажками правила будут применены к письмам указанной папки. </li> -<li>В нижней части окна приложение выводит <strong>Сообщения</strong> о выполнении обработки писем.</li></ul><p style="MARGIN-LEFT: 0px"></p> +<li>В нижней части окна приложение выводит <strong>Сообщения</strong> о выполнении обработки писем.</li></ul><p style="MARGIN-LEFT: 0px"></p> <h3>Пример</h3> <p>Было создано два новых правила обработки входящей корреспонденции. Необходимо применить их к неотсортированным письмам, находящимся в папке <strong>Входящие</strong>.</p> <ul><li>Укажите в качестве папки для обработки <strong>Входящие</strong>. diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index 8cfeaebd4..ffaaaae48 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html @@ -1,27 +1,27 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Предназначена для создания и хранения условий автоматического распределения <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">входящей</a> и <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящей</a> корреспонденции по <a href="Catalog.ПапкиЭлектронныхПисем/Help">папкам</a>. Правила настраиваются для каждой <a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">Настройки почты</a>.</p><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e300d2cb23d4a2"> -<h3 style="MARGIN-LEFT: 0px">Настройка правила</h3></a> +<h3 style="MARGIN-LEFT: 0px">Настройка правила</h3></a> <ul style="MARGIN-LEFT: 40px"><li>В поле <strong>Условие</strong> необходимо выбрать наименование созданного правила - текстовое описание условия, по которому будут отбираться письма. <ul><li>Текст может быть сформирован автоматически, исходя из настроенных условий. </li><li>Выберите наименование из выпадающего списка, после того как будут сформированы условия правила. </li><li>Если такое наименование слишком длинно, можно написать свое наименование. Поле является обязательным для заполнения.</li></ul></li><li> <p style="MARGIN-LEFT: 0px">В поле <strong>Помещать в папку</strong> укажите, в какую <a href="Catalog.ПапкиЭлектронныхПисем.Form.ФормаЭлемента/Help">папку</a> попадут письма, удовлетворяющие заданным условиям. Для этого выберите папку из <a href="Catalog.ПапкиЭлектронныхПисем.Form.ФормаВыбора/Help">списка</a>. Поле является обязательным для заполнения.</p></li></ul><h3 style="MARGIN-LEFT: 0px">Ввод условий</h3> -<p>Условия размещаются в списке, в котором указываются поля, по которым будет происходить отбор, значения полей отбора, при необходимости группируются поля отбора.</p> +<p>Условия размещаются в списке, в котором указываются поля, по которым будет происходить отбор, значения полей отбора, при необходимости группируются поля отбора.</p> <ul><li> <div style="MARGIN-LEFT: 0px">Задать новое условие можно по команде <strong>Добавить новый элемент</strong>. Условий может быть несколько.</div> </li><li> -<div style="MARGIN-LEFT: 0px">В колонке <strong>Поле</strong> <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> выберите поле электронного письма, по которому будет производиться отбор. Для этого укажите нужное поле, затем нажмите кнопку <strong>Выбрать</strong>.</div> +<div style="MARGIN-LEFT: 0px">В колонке <strong>Поле</strong> <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> выберите поле электронного письма, по которому будет производиться отбор. Для этого укажите нужное поле, затем нажмите кнопку <strong>Выбрать</strong>.</div> </li><li> <div style="MARGIN-LEFT: 0px">В колонке <strong>Вид сравнения</strong> можно выбрать операцию сравнения, при этом кроме стандартных операций, например, <strong>Больше или равно</strong>, имеются нестандартные, например, <strong>В списке</strong>.</div> <ul><li> -<div style="MARGIN-LEFT: 0px">С помощью операции сравнения <strong>В списке</strong> можно задать список возможных значений для отбора, например, сюда можно поместить несколько почтовых ящиков партнера, с которых возможна отправка корреспонденции. Операция сравнения <strong>Не в списке</strong> является отрицанием предыдущей. Например, в другую папку нужно поместить остальные письма, кроме писем, полученных от перечисленных в списке отправителей.</div> +<div style="MARGIN-LEFT: 0px">С помощью операции сравнения <strong>В списке</strong> можно задать список возможных значений для отбора, например, сюда можно поместить несколько почтовых ящиков партнера, с которых возможна отправка корреспонденции. Операция сравнения <strong>Не в списке</strong> является отрицанием предыдущей. Например, в другую папку нужно поместить остальные письма, кроме писем, полученных от перечисленных в списке отправителей.</div> </li><li> -<div style="MARGIN-LEFT: 0px">С помощью операции <strong>Содержит</strong> или <strong>Не содержит</strong> можно использовать поиск по части поля (сочетанию букв) - наименования, темы, адреса, если полностью это поле неизвестно. Например, можно задать шаблон почтовых ящиков контактных лиц определенного партнера, если название сайта партнера известно. В этом случае письма с почтовых адресов с таким сочетанием букв будут помещены в одну папку.</div> +<div style="MARGIN-LEFT: 0px">С помощью операции <strong>Содержит</strong> или <strong>Не содержит</strong> можно использовать поиск по части поля (сочетанию букв) - наименования, темы, адреса, если полностью это поле неизвестно. Например, можно задать шаблон почтовых ящиков контактных лиц определенного партнера, если название сайта партнера известно. В этом случае письма с почтовых адресов с таким сочетанием букв будут помещены в одну папку.</div> </li><li> <div style="MARGIN-LEFT: 0px">Определить, есть ли в поле значение, можно с помощью операции <strong>Заполнено</strong> или <strong>Не заполнено</strong>. Например, с помощью такого условия можно в отдельную папку поместить письма, в которых не указана тема.</div></li></ul></li><li> -<div style="MARGIN-LEFT: 0px">Затем настройте <strong>Значение</strong>. Для этого в зависимости от выбранного поля и вида сравнения введите значение, или нажмите кнопку <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong> и выберите из предложенного списка значений нужное, или создайте свой список значений, например, список из нескольких адресов электронной почты партнера.</div> +<div style="MARGIN-LEFT: 0px">Затем настройте <strong>Значение</strong>. Для этого в зависимости от выбранного поля и вида сравнения введите значение, или нажмите кнопку <img src="StdPicture.InputFieldSelect" width="12" height="12"></img><strong>Выбрать</strong> и выберите из предложенного списка значений нужное, или создайте свой список значений, например, список из нескольких адресов электронной почты партнера.</div> <ul><li> -<div style="MARGIN-LEFT: 0px">В качестве значения можно использовать поля документов <strong>Электронное письмо</strong>. Для использования этой возможности установите флажок <strong>Еще - Использовать в качестве значения поле</strong>. После этого можно <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong> нужное поле из списка.</div></li></ul></li><li> +<div style="MARGIN-LEFT: 0px">В качестве значения можно использовать поля документов <strong>Электронное письмо</strong>. Для использования этой возможности установите флажок <strong>Еще - Использовать в качестве значения поле</strong>. После этого можно <img src="StdPicture.InputFieldSelect" width="12" height="12"></img><strong>Выбрать</strong> нужное поле из списка.</div></li></ul></li><li> <div style="MARGIN-LEFT: 0px">С помощью флажка <strong>Еще - Подробно</strong> можно добавить в список условий дополнительные колонки:</div> <ul><li> <div style="MARGIN-LEFT: 0px"><strong>Режим отображения</strong> значения, по умолчанию установлен <strong>Быстрый доступ</strong>. Можно также выбрать <strong>Обычный</strong> или <strong>Недоступный</strong>.</div> @@ -38,11 +38,11 @@ </li><li> <div style="MARGIN-LEFT: 0px">Для того чтобы <strong>Добавить новую группу</strong>, выполните соответствующую команду меню <strong>Еще</strong>.</div> </li><li> -<div style="MARGIN-LEFT: 0px">Отменить группировку можно с помощью команды <strong>Еще - Разгруппировать</strong>.</div> +<div style="MARGIN-LEFT: 0px">Отменить группировку можно с помощью команды <strong>Еще - Разгруппировать</strong>.</div> </li><li> -<div style="MARGIN-LEFT: 0px">Поменять порядок условий в списке можно с помощью команд <strong>Переместить вверх</strong> и <strong>Переместить вниз</strong> меню <strong>Еще</strong>.</div> +<div style="MARGIN-LEFT: 0px">Поменять порядок условий в списке можно с помощью команд <strong>Переместить вверх</strong> и <strong>Переместить вниз</strong> меню <strong>Еще</strong>.</div> </li><li> <div style="MARGIN-LEFT: 0px">Если в правиле задается несколько условий без группировки, то по умолчанию к таким условиям применяется логическая операция <strong>И</strong>.</div></li></ul></li><li> -<div style="MARGIN-LEFT: 0px">Нажмите кнопку <strong>Записать и закрыть</strong>, после этого созданные правила начнут применяться для всех новых писем (при получении писем и при изменении статуса писем, например, с нового на черновик и т.д.).Воспользуйтесь соответствующей командой в <a href="Catalog.ПравилаОбработкиЭлектроннойПочты/Help">списке правил обработки электронной почты</a>, для того чтобы <a href="Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ПрименениеПравил/Help">применить правила</a> к старым письмам.</div></li></ul><h3 style="MARGIN-LEFT: 0px">См. также:</h3> +<div style="MARGIN-LEFT: 0px">Нажмите кнопку <strong>Записать и закрыть</strong>, после этого созданные правила начнут применяться для всех новых писем (при получении писем и при изменении статуса писем, например, с нового на черновик и т.д.).Воспользуйтесь соответствующей командой в <a href="Catalog.ПравилаОбработкиЭлектроннойПочты/Help">списке правил обработки электронной почты</a>, для того чтобы <a href="Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ПрименениеПравил/Help">применить правила</a> к старым письмам.</div></li></ul><h3 style="MARGIN-LEFT: 0px">См. также:</h3> <ul><li> <div style="MARGIN-LEFT: 0px"><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 5b8e1fb0c..95c208b60 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -54,7 +54,7 @@ Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.ПредставлениеОтбора = Строка(КомпоновщикНастроек.Настройки.Отбор); - ТекущийОбъект.КомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки()); + ТекущийОбъект.КомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки(), Новый СжатиеДанных(9)); КонецПроцедуры diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html index 273123aac..baec9a8e0 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html @@ -9,7 +9,7 @@ <li> <div style="MARGIN-LEFT: 0px"><strong>Помещать в папку</strong> - указывается папка, в которую будут помещены письма, удовлетворяющие условию.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Порядок применения правил</h3> <ul><li> -<div style="MARGIN-LEFT: 0px">С помощью кнопок <img src="StdPicture.MoveUp"></img> и <img src="StdPicture.MoveDown"></img> можно перемещать условия в списке.</div> +<div style="MARGIN-LEFT: 0px">С помощью кнопок <img src="StdPicture.MoveUp"></img> и <img src="StdPicture.MoveDown"></img> можно перемещать условия в списке.</div> </li> <li> <div style="MARGIN-LEFT: 0px">Порядок, в котором правила отсортированы в списке, используется при определении папки для письма. </div> diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl index e9ecd9795..14c0a2bb8 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаСписка/Module.bsl @@ -190,7 +190,7 @@ Проверки = ВсеВыделенныеПроверки(Проверки); КонецЕсли; - Если Проверки.Количество() > 0 Тогда + Если Проверки.Количество() > 1 Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполнить выбранные проверки (%1)? |Это может занять некоторое время.'"), diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html index 4c34dcf68..4b7d75745 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Forms/ФормаЭлемента/Help/ru.html @@ -2,7 +2,7 @@ <p>Предназначена для настройки проверки ведения учета.</p> <p>Открыть проверку можно из списка <a href="Catalog.ПравилаПроверкиУчета/Help">Проверки ведения учета</a>.</p> <p>По умолчанию все проверки, предусмотренные в приложение, уже включены, а часть из них выполняется автоматически в фоне. </p> -<p>В редких случаях может возникнуть необходимость что-либо перенастроить. В этом случае можно изменить настройки проверки.</p> +<p>В редких случаях может возникнуть необходимость что-либо перенастроить. В этом случае можно изменить настройки проверки.</p> <p>В поле <strong>Комментарий</strong> можно написать дополнительную информацию о проверке.</p> <h3>Использование</h3> <ul><li>Если проверку в данный момент не нужно проводить, ее можно отключить с помощью флажка <strong>Использование</strong>.</li></ul><h3>Важность проблемы</h3> @@ -15,7 +15,7 @@ </li> <li><strong>Полезный совет</strong>.</li></ul></li></ul><h3>Автоматическое выполнение</h3> <ul><li> -<div>Для того чтобы проверка проходила в автоматическом режиме, включите флажок <strong>Выполняется в фоне по расписанию</strong>.</div> +<div>Для того чтобы проверка проходила в автоматическом режиме, включите флажок <strong>Выполняется в фоне по расписанию</strong>.</div> </li> <li> <div>С помощью переключателя можно указать <a href="v8help://mngbase/jobschedule.lf">параметры проведения автоматической проверки</a>:</div> @@ -23,12 +23,12 @@ <div><strong>По общему расписанию</strong> (по умолчанию);</div> </li> <li> -<div><strong>По индивидуальному расписанию</strong>. После выбора становится доступной ссылка <strong>Настроить индивидуальное расписание</strong>.</div></li></ul></li></ul><h3>Выполнение проверки вручную</h3> +<div><strong>По индивидуальному расписанию</strong>. После выбора становится доступной ссылка <strong>Настроить индивидуальное расписание</strong>.</div></li></ul></li></ul><h3>Выполнение проверки вручную</h3> <ul><li>При необходимости можно произвести в любой момент вручную с помощью кнопки <strong>Выполнить проверку</strong>.</li></ul><h3>Дополнительные настройки</h3> <ul><li> <div>На вкладке <strong>Дополнительно</strong> можно указать следующие параметры проверки:</div> <ul><li> -<div><strong>Дата начала проверки</strong> - для документов и других объектов приложения, привязанных к временной оси, имеется возможность задания пороговой даты. Например, это полезно для того, чтобы не выполнять проверки в уже закрытых или архивных периодах. По умолчанию эта дата не заполнена, т.е. проверяется все.</div> +<div><strong>Дата начала проверки</strong> - для документов и других объектов приложения, привязанных к временной оси, имеется возможность задания пороговой даты. Например, это полезно для того, чтобы не выполнять проверки в уже закрытых или архивных периодах. По умолчанию эта дата не заполнена, т.е. проверяется все.</div> </li> <li> <div><strong>Лимит проблем</strong> - предусмотрена возможность наложить ограничения на количество проблем, выявляемых конкретной проверкой. Например, проверка заполнения обязательных реквизитов в списке с большим количеством элементов может быть ограничена определенным лимитом выводимых проблем.</div></li></ul></li></ul><h3>Возврат к стандартным настройкам</h3> diff --git a/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html b/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html index 44b345660..ddba37a0c 100644 --- a/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html +++ b/SSL/src/Catalogs/ПравилаПроверкиУчета/Help/ru.html @@ -2,7 +2,7 @@ <p>Предназначен для хранения правил проверки учета.</p> <p>Открывается с помощью ссылки <strong>Правила проверки учета</strong> в разделе <strong>Администрирование - Обслуживание - Корректировка данных</strong>.</p> <p>В списке выводится:</p> -<ul><li>Использование проверки (в графе проставлен флажок, если проверка используется); +<ul><li>Использование проверки (в графе проставлен флажок, если проверка используется); </li><li>Наименование; </li><li>Расписание проверки; </li><li>Важность проблемы.</li></ul><h3>Способы проведения проверок</h3> @@ -16,7 +16,7 @@ <ul><li> <div>с помощью кнопки <strong>Отчеты - Результаты проверки учета</strong>;</div> </li><li> -<div> из проблемного объекта; </div> +<div> из проблемного объекта; </div> </li><li> <div>из списка <strong>Текущие дела</strong> на <strong>Начальной странице</strong>.</div></li></ul></li></ul><h3>См. также:</h3> <ul><li> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form index 2b40b7f7d..bdf0e6f5d 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Form.form @@ -291,25 +291,121 @@ <name>ГруппаПодвал</name> <id>62</id> <items xsi:type="form:FormGroup"> - <name>Инструкция</name> - <id>54</id> - <items xsi:type="form:Decoration"> - <name>ИнформацияДляПоддержки</name> - <id>69</id> - <title> - <key>ru</key> - <value>При возникновении затруднений ознакомьтесь со списком <link %1>типичных проблем при работе с приложениями электронной подписи и их решений</>. - -В иных случаях обратитесь в службу поддержки фирмы "1С", предоставив <link %2>техническую информацию о возникшей проблеме</>.</value> - + ГруппаТребуетсяПомощь + 89 + + ГруппаОбращенияВТехническуюПоддержку + 91 + + ОписаниеОбращенияВПоддержку + 93 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 94 + true + + Label + true + true + + Left + + + + ВопросВПоддержку + 96 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 98 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.Скачать + + Auto + true true true + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + - ИнформацияДляПоддержкиРасширеннаяПодсказка - 71 + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 92 Label true true @@ -317,21 +413,14 @@ Left - - ИнформацияДляПоддержкиКонтекстноеМеню - 70 - true - - true - Label - true - true - - - URLProcessing - ИнформацияДляПоддержкиОбработкаНавигационнойСсылки - - Left + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -343,9 +432,10 @@ ru Требуется помощь? + Center - ИнструкцияРасширеннаяПодсказка - 55 + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 90 Label true true @@ -637,6 +727,31 @@ true + + Действие + 6 + + String + + + + true + + + true + + + + Параметры + 7 + + + true + + + true + + ОписаниеОшибки @@ -742,6 +857,56 @@ DontUse Auto + + ВопросВПоддержку + + <key>ru</key> + <value>Вопрос в поддержку</value> + + 3 + + ru + Вопрос в поддержку + + + true + + + CommonPicture.ОтправитьЭлектронноеПисьмо + + + + ВопросВПоддержку + + + Auto + Auto + + + ИнформацияДляОтправкиВПоддержку + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + 4 + + ru + Скачать техническую информацию + + + true + + + CommonPicture.Скачать + + + + ИнформацияДляОтправкиВПоддержку + + + Auto + Auto + ОшибкаНаСервере diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl index 23601157d..364d8e6b5 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ОшибкаОбращенияКПрограмме/Module.bsl @@ -11,8 +11,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Элементы.ИнформацияДляПоддержки.Заголовок = ЭлектроннаяПодписьСлужебный.ЗаголовокИнформацииДляПоддержки(); - ЭлектроннаяПодписьСлужебный.УстановитьЗаголовокОшибки(ЭтотОбъект, Параметры.ЗаголовокФормы); @@ -43,10 +41,6 @@ ОпределитьВозможности(ПоказатьИнструкцию, ПоказатьПереходКНастройкеПрограмм, ПоказатьУстановкуРасширения, ОшибкаНаСервере, ЭтоПолноправныйПользователь); - Если Не ПоказатьИнструкцию Тогда - Элементы.Инструкция.Видимость = Ложь; - КонецЕсли; - ПоказатьУстановкуРасширения = ПоказатьУстановкуРасширения И Не Параметры.РасширениеПодключено; Если Не ПоказатьУстановкуРасширения Тогда @@ -68,6 +62,25 @@ ДополнительныеДанные.НеподписанныеДанные = Неопределено; КонецЕсли; + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Если ПоказатьИнструкцию Тогда + МодульОбращенияВТехническуюПоддержкуСлужебный.ПоказатьРазделТребуетсяПомощь(Элементы); + Иначе + МодульОбращенияВТехническуюПоддержкуСлужебный.СкрытьРазделТребуетсяПомощь(Элементы); + КонецЕсли; + + Иначе + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект); КонецПроцедуры @@ -90,34 +103,6 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура ИнформацияДляПоддержкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если НавигационнаяСсылка = "ТипичныеПроблемы" Тогда - ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - Иначе - - ТекстОшибок = ""; - ОписаниеФайлов = Новый Массив; - Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда - ЭлектроннаяПодписьСлужебныйВызовСервера.ДобавитьОписаниеДополнительныхДанных( - ДополнительныеДанные, ОписаниеФайлов, ТекстОшибок); - КонецЕсли; - - ТекстОшибок = ТекстОшибок + ОписаниеОшибки; - ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( - ТекстОшибок, Новый Структура("Тема, Сообщение", ЭтотОбъект.Заголовок), , ОписаниеФайлов); - - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - #Область ОбработчикиСобытийЭлементовТаблицыФормыОшибки &НаКлиенте @@ -128,17 +113,27 @@ ТекущиеДанные = Элементы.Ошибки.ТекущиеДанные; - ПараметрыОшибки = Новый Структура; - ПараметрыОшибки.Вставить("ЗаголовокПредупреждения", Заголовок); - ПараметрыОшибки.Вставить(?(ТекущиеДанные.ОшибкаНаСервере, - "ТекстОшибкиСервер", "ТекстОшибкиКлиент"), ТекущиеДанные.ОписаниеСЗаголовком); + Если ТекущиеДанные.Действие = "УстановитьБиблиотекиДляТокенов" Тогда + ПараметрыОткрытия = Новый Структура("ВидТокена, ТолькоУстановкаТокенов"); + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ТекущиеДанные.Параметры); + ПараметрыОткрытия.ТолькоУстановкаТокенов = Истина; + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуУстановкиПрограммКриптопровайдеров(ПараметрыОткрытия, + ЭтотОбъект, Новый ОписаниеОповещения("ПослеВыполненияДействийПодробнее", ЭтотОбъект)); + Иначе + + ПараметрыОшибки = Новый Структура; + ПараметрыОшибки.Вставить("ЗаголовокПредупреждения", Заголовок); + ПараметрыОшибки.Вставить(?(ТекущиеДанные.ОшибкаНаСервере, + "ТекстОшибкиСервер", "ТекстОшибкиКлиент"), ТекущиеДанные.ОписаниеСЗаголовком); + + Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда + ПараметрыОшибки.Вставить("ДополнительныеДанные", ДополнительныеДанные); + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки, ЭтотОбъект); - Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда - ПараметрыОшибки.Вставить("ДополнительныеДанные", ДополнительныеДанные); КонецЕсли; - ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки, ЭтотОбъект); - КонецЕсли; КонецПроцедуры @@ -163,6 +158,21 @@ КонецПроцедуры +&НаКлиенте +Процедура ВопросВПоддержку(Команда) + + ВыгрузитьТехническуюИнформацию(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) + + Элементы.ГруппаТребуетсяПомощь.Скрыть(); + ВыгрузитьТехническуюИнформацию(Истина); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -277,7 +287,17 @@ СтрокаОшибки = Ошибки.Добавить(); СтрокаОшибки.Причина = Описание; СтрокаОшибки.ОписаниеСЗаголовком = ОписаниеСЗаголовком; - СтрокаОшибки.Подробнее = НСтр("ru = 'Подробнее'") + "..."; + + Если ЗначениеЗаполнено(НовыеСвойстваОшибки.Токен) + И ЭлектроннаяПодписьСлужебныйКлиентСервер.ОшибкаЗагрузкиБиблиотекиТокена(НовыеСвойстваОшибки.Описание) Тогда + СтрокаОшибки.Подробнее = НСтр("ru = 'Установить'") + "..."; + СтрокаОшибки.Действие = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДействиеУстановитьБиблиотекиДляТокенов(); + СтрокаОшибки.Параметры = Новый Структура("ВидТокена", НовыеСвойстваОшибки.Токен.Токен); + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрокаОшибки.Подробнее) Тогда + СтрокаОшибки.Подробнее = НСтр("ru = 'Подробнее'") + "..."; + КонецЕсли; + СтрокаОшибки.ОшибкаНаСервере = ОшибкаНаСервере; СтрокаОшибки.Картинка = ?(ОшибкаНаСервере, БиблиотекаКартинок.КомпьютерСервер, @@ -297,4 +317,31 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеВыполненияДействийПодробнее(Результат, Контекст) Экспорт + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьТехническуюИнформацию(ВыгрузитьАрхив) + + ТекстОшибок = ""; + ОписаниеФайлов = Новый Массив; + Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда + ЭлектроннаяПодписьСлужебныйВызовСервера.ДобавитьОписаниеДополнительныхДанных( + ДополнительныеДанные, ОписаниеФайлов, ТекстОшибок); + КонецЕсли; + + ТекстОшибок = ТекстОшибок + ОписаниеОшибки; + + Если ВыгрузитьАрхив Тогда + ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( + ТекстОшибок, Неопределено, , ОписаниеФайлов); + Иначе + ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( + ТекстОшибок, Новый Структура("Тема, Сообщение", Заголовок), , ОписаниеФайлов); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПриложениеОпределенноеАвтоматически/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПриложениеОпределенноеАвтоматически/Module.bsl index 88871400f..7e6bd8e57 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПриложениеОпределенноеАвтоматически/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ПриложениеОпределенноеАвтоматически/Module.bsl @@ -36,7 +36,7 @@ Процедура Изменить(Команда) ДобавитьВСправочник(ПредопределенноеЗначение( - "Перечисление.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена")); + "Перечисление.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено")); КонецПроцедуры diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/Токен/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/Токен/Form.form index f2b8d9a7a..5647dd709 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/Токен/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/Токен/Form.form @@ -1,147 +1,5 @@ - - ГруппаПароль - 43 - - Пароль - 32 - - <key>ru</key> - <value>Пин-код</value> - - true - true - - true - - - Пароль - - - OnChange - ПарольПриИзменении - - - ПарольРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - - ПарольКонтекстноеМеню - 33 - true - - InputField - Enter - true - Left - true - - - StartChoice - ПарольНачалоВыбора - - true - true - true - true - true - - CommonPicture.ВводимыеСимволыВидны - - true - true - true - Normal - - ru - Введите пин-код пользователя токена - - - - - ЗапомнитьПароль - 35 - - <key>ru</key> - <value>Запомнить на время сеанса</value> - - true - true - - true - - - ЗапомнитьПароль - - Right - - ru - Запомнить пароль токена до закрытия приложения. При снятии флажка пароль стирается из памяти, если запоминался ранее. - - Button - - OnChange - ЗапомнитьПарольПриИзменении - - - ЗапомнитьПарольРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - - ЗапомнитьПарольКонтекстноеМеню - 36 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Пароль</value> - - - ГруппаПарольРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - WeakSeparation - true - true - Auto - Auto - - ГруппаОбновлениеСертификатов 45 @@ -815,41 +673,6 @@ true - - Пароль - - <key>ru</key> - <value>Пин-код</value> - - 10 - - String - - - - true - - - true - - - - ЗапомнитьПароль - - <key>ru</key> - <value>Запомнить на время сеанса</value> - - 11 - - Boolean - - - true - - - true - - Обновить diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/Токен/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/Токен/Module.bsl index 2aa07e10a..f743870f2 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 /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область ОписаниеПеременных - -&НаКлиенте -Перем ВнутренниеДанные, СвойстваПароля; - -#КонецОбласти - #Область ОбработчикиСобытийФормы &НаСервере @@ -20,7 +13,7 @@ Если ЗначениеЗаполнено(Параметры.Токен) Тогда - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.Токен); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.Токен,,"Сертификаты"); Если ЭтоСервер Тогда ШаблонЗаголовка = НСтр("ru = '%1 на сервере'"); @@ -37,60 +30,20 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - - Если ВнутренниеДанные = Неопределено Тогда - Отказ = Истина; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура ЗапомнитьПарольПриИзменении(Элемент) - - ДополнительныеПараметры = ДополнительныеПараметры(); - ДополнительныеПараметры.Вставить("ПриИзмененииРеквизитаЗапомнитьПароль", Истина); - - ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, - ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры); - + ПодключитьОбработчикОжидания("ЗаполнитьСписокСертификатов", 0.1, Истина); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -// АПК:78-выкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. -&НаКлиенте -Процедура ПродолжитьОткрытие(Оповещение, ОбщиеВнутренниеДанные, КлиентскиеПараметры) Экспорт -// АПК:78-вкл: для безопасной передачи данных на клиенте между формами, не отправляя их на сервер. - - ДополнительныеПараметры = ДополнительныеПараметры(); - - ВнутренниеДанные = ОбщиеВнутренниеДанные; - ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, - ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры); - Открыть(); - ЗаполнитьСписокСертификатов(); - -КонецПроцедуры - &НаКлиенте Асинх Процедура ЗаполнитьСписокСертификатов() - Если Не ЗначениеЗаполнено(СвойстваПароля.Значение) Тогда - Возврат; - КонецЕсли; - Токен = Новый Структура; Токен.Вставить("Слот"); Токен.Вставить("СерийныйНомер"); ЗаполнитьЗначенияСвойств(Токен, ЭтотОбъект); - Токен.Вставить("ЗначениеПароля", СвойстваПароля.Значение); Элементы.ГруппаОбновлениеСертификатов.Видимость = Истина; Результат = Ждать ЭлектроннаяПодписьКлиентЛокализация.СертификатыНаТокене(Токен, Неопределено, Истина); @@ -102,17 +55,8 @@ Если Ошибки.Количество() > 0 Тогда ТекстОшибки = СтрСоединить(Ошибки, Символы.ПС); КонецЕсли; - - ДополнительныеПараметры = ДополнительныеПараметры(); - ДополнительныеПараметры.Вставить("ПриУспешномВыполненииОперации", Истина); - ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, - ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры); - Иначе ТекстОшибки = Результат.Ошибка; - Если ЭлектроннаяПодписьКлиентЛокализация.ЭтоОшибкаНеправильныйПинКод(Результат.Ошибка) Тогда - ТекстОшибки = НСтр("ru = 'Введен неверный пин-код пользователя токена.'"); - КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(ТекстОшибки) Тогда @@ -127,27 +71,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПарольПриИзменении(Элемент) - - ДополнительныеПараметры = ДополнительныеПараметры(); - ДополнительныеПараметры.Вставить("ПриИзмененииРеквизитаПароль", Истина); - - ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, - ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры); - -КонецПроцедуры - -&НаКлиенте -Процедура ПарольНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - ДополнительныеПараметры = ДополнительныеПараметры(); - - ЭлектроннаяПодписьСлужебныйКлиент.ПолеПароляНачалоВыбора(ЭтотОбъект, - ВнутренниеДанные, СвойстваПароля, СтандартнаяОбработка, ДополнительныеПараметры); -КонецПроцедуры - &НаКлиенте Процедура Обновить(Команда) ЗаполнитьСписокСертификатов() @@ -200,7 +123,7 @@ Процедура СертификатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - СсылкаНаСертификат = ПолучитьСсылкуНаСертификат(Элементы.Сертификаты.ТекущиеДанные.Отпечаток); + СсылкаНаСертификат = СсылкаНаСертификат(Элементы.Сертификаты.ТекущиеДанные.Отпечаток); Если Не ЗначениеЗаполнено(СсылкаНаСертификат) Тогда ЭлектроннаяПодписьКлиент.ОткрытьСертификат(Элементы.Сертификаты.ТекущиеДанные.АдресСертификата); Иначе @@ -211,19 +134,8 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция ПолучитьСсылкуНаСертификат(Отпечаток) +Функция СсылкаНаСертификат(Отпечаток) Возврат ЭлектроннаяПодпись.СсылкаНаСертификат(Отпечаток); КонецФункции -&НаКлиенте -Функция ДополнительныеПараметры() - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПриЧтенииСертификатовТокена", Истина); - ДополнительныеПараметры.Вставить("Сертификат", СерийныйНомер); - ДополнительныеПараметры.Вставить("ВводитьПарольВПрограммеЭлектроннойПодписи", Ложь); - - Возврат ДополнительныеПараметры; -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html index 5f77686e7..843c39eea 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html @@ -1,16 +1,16 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> -<p>Сведения о приложении электронной подписи и шифрования.</p> +<p>Сведения о приложении электронной подписи и шифрования.</p> <p>Открывается по кнопке <strong>Добавить</strong> в списке <a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a> на вкладке <strong>Приложения</strong>.</p> <p>В случае использования распределенной информационной базы настройки можно изменить только в главном узле.</p> <h3>Заполнение сведений о приложении</h3> -<ul><li>В поле<strong> Представление</strong> выберите нужное приложение из списка. В списке представлены часто используемые приложения. -<ul><ul><li>Остальные поля заполняются автоматически.</li></ul><li>Если в списке нужного приложения нет, выберите значение <strong><Другое приложение></strong>. +<ul><li>В поле<strong> Представление</strong> выберите нужное приложение из списка. В списке представлены часто используемые приложения. +<ul><ul><li>Остальные поля заполняются автоматически.</li></ul><li>Если в списке нужного приложения нет, выберите значение <strong><Другое приложение></strong>. <ul><li>В этом случае остальные поля заполняются вручную. </li></ul></li></ul></li> <li>Все поля являются обязательными для заполнения. </li> -<li><strong>Имя приложения</strong> - полное имя приложения; +<li><strong>Имя приложения</strong> - полное имя приложения; </li> -<li><strong>Тип приложения</strong> - число, указывающее тип провайдера электронной подписи. +<li><strong>Тип приложения</strong> - число, указывающее тип провайдера электронной подписи. </li> <li><strong>Алгоритм подписи</strong> - алгоритм подписи выбирается из списка выбора, предоставляемого провайдером электронной подписи; </li> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index d71bb5456..f6487ea3e 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -125,9 +125,8 @@ Если Не Запрос.Выполнить().Пустой() Тогда Отказ = Истина; ОбщегоНазначения.СообщитьПользователю( - НСтр("ru = 'Программа с указанным именем и типом уже добавлена в список.'"), - , - "Объект.ИмяПрограммы"); + НСтр("ru = 'Приложение с указанным именем и типом уже есть в списке.'"), + , "Объект.ИмяПрограммы"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Help/ru.html index 4e96480d6..f8d346339 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Help/ru.html +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Help/ru.html @@ -1,4 +1,4 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> <p>Предназначен для выбора приложений электронной подписи и шифрования.</p> <p>Выделите <a href="Catalog.ПрограммыЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">приложение</a>, нажмите <strong>Выбрать</strong>.</p> -<p> </p></body></html> \ No newline at end of file +<p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index c69e21862..200e4d4b5 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -167,8 +167,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы Процедура ЗаполнитьНачальныеНастройки(Программы = Неопределено, БезВстроенногоКриптопровайдера = Ложь) Экспорт @@ -286,7 +285,7 @@ Если Не ЗначениеЗаполнено(Свойства.РежимИспользования) Тогда ПрограммаОбъект.РежимИспользования = ?(Свойства.ПометкаУдаления, Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.НеИспользуется, - Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена) + Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено) КонецЕсли; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПрограммаОбъект); ИначеЕсли Не ЗначениеЗаполнено(Свойства.РежимИспользования) Тогда @@ -294,7 +293,7 @@ ПрограммаОбъект = Программа.ПолучитьОбъект(); ПрограммаОбъект.РежимИспользования = ?(Свойства.ПометкаУдаления, Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.НеИспользуется, - Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена); + Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ПрограммаОбъект); КонецЕсли; @@ -369,4 +368,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo index f85dd5791..341be12af 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo @@ -263,7 +263,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <fillValue xsi:type="core:ReferenceValue"> - <value>Enum.РежимыИспользованияПрограммыЭлектроннойПодписи.EnumValue.Настроена</value> + <value>Enum.РежимыИспользованияПрограммыЭлектроннойПодписи.EnumValue.Настроено</value> </fillValue> <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html index 966d2d8b3..8c677cc0f 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html @@ -1,10 +1,10 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Просмотр или формирование производственного календаря.</p> +<p>Просмотр или формирование производственного календаря.</p> <p>Производственный календарь - это своеобразный классификатор, постоянные сведения, которые не меняются в течение года.</p> <p>Производственный календарь РФ (который является общегосударственным) входит в поставляемые данные приложения и обновляется по мере утверждения календаря и переносов праздников в РФ. </p> <p>При необходимости можно ввести несколько <a href="Catalog.ПроизводственныеКалендари/Help">производственных календарей</a>. Их может быть несколько, т.к. в разных регионах предусмотрен разный состав праздничных дней и соответственно переносов.</p> <p>Рекомендуется в начале года ввести производственный календарь на основании общегосударственного календаря на весь год сразу. Это поможет избежать ошибок в расчетах в течение года.</p> -<p>Производственный календарь сам по себе не используются в учете. На основании производственного календаря формируются <a href="Catalog.Календари/Help">графики работы</a> подразделений, а также графики работы сотрудников.</p> +<p>Производственный календарь сам по себе не используются в учете. На основании производственного календаря формируются <a href="Catalog.Календари/Help">графики работы</a> подразделений, а также графики работы сотрудников.</p> <h3>Ввод нового производственного календаря</h3> <ul><li>Заполните заголовок производственного календаря: <ul><li> @@ -19,7 +19,7 @@ <div>Если необходимо ввести новый календарь, зависимый от федерального, включите флажок <strong>Является региональным календарем</strong>, выберите федеральный календарь из выпадающего списка.</div></li></ul><h3>Изменение дней календаря</h3> <ul><li>По умолчанию новый производственный календарь заполнен выходными днями. </li> -<li>Нажмите <strong>Изменить день</strong>, расставьте дни календаря. +<li>Нажмите <strong>Изменить день</strong>, расставьте дни календаря. <ul><li>Виды дней производственного календаря обозначаются разными цветами: <ul><li>черным – рабочий день, </li> @@ -30,19 +30,19 @@ <li><font color="#00008b">темно-синим</font> – предпраздничный, </li> <li><font color="#ee82ee">фиолетовым</font> – праздник.</li></ul></li></ul></li></ul><h3 style="MARGIN-RIGHT: 0px" dir="ltr">Перенос праздничного дня на другой день</h3> -<p>Пользоваться этой возможностью имеет смысл в том случае, если данные календаря нужны, но официально он еще не принят и в приложении его еще нет, т.к. не все переносы правительство утвердило. Можно заполнить переносы раньше, а потом, когда данные общегосударственного календаря будут утверждены и войдут в поставку приложения, переносы автоматически корректируются.</p> +<p>Пользоваться этой возможностью имеет смысл в том случае, если данные календаря нужны, но официально он еще не принят и в приложении его еще нет, т.к. не все переносы правительство утвердило. Можно заполнить переносы раньше, а потом, когда данные общегосударственного календаря будут утверждены и войдут в поставку приложения, переносы автоматически корректируются.</p> <ul><li>Выделите в производственном календаре праздничный день, который необходимо перенести. </li> -<li>Нажмите <strong>Перенести день</strong>. +<li>Нажмите <strong>Перенести день</strong>. </li> <li>Выберите в <a href="CommonForm.ВыборДаты/Help">календаре</a> дату переноса, нажмите <strong>ОК</strong>. </li> -<li>Сведения о переносах дней отображаются в правой части производственного календаря в списке <strong>Переносы дней</strong>.</li></ul><h3>Заполнение по умолчанию</h3> +<li>Сведения о переносах дней отображаются в правой части производственного календаря в списке <strong>Переносы дней</strong>.</li></ul><h3>Заполнение по умолчанию</h3> <ul><li>С помощью команды <strong>Заполнить по умолчанию</strong> можно заполнить календарь: -<ul><li>Если флажок <strong>Является региональным календарем</strong> включен - на основании общегосударственного производственного календаря, входящего в поставку приложения. +<ul><li>Если флажок <strong>Является региональным календарем</strong> включен - на основании общегосударственного производственного календаря, входящего в поставку приложения. <ul><li>На текущий год автоматическое формирование производственного календаря производится на основании уже утвержденных сведений о рабочих днях, праздниках и переносах праздничных дней, на будущие годы - согласно ТК РФ (для российского производственного календаря).</li></ul></li> <li>Если флажок <strong>Является региональным календарем</strong> выключен - согласно ТК РФ.</li></ul></li></ul><h3>Печать производственного календаря</h3> -<ul><li>Нажмите <strong>Печать</strong>, для того чтобы вывести сводные сведения о производственном календаре на указанный год. +<ul><li>Нажмите <strong>Печать</strong>, для того чтобы вывести сводные сведения о производственном календаре на указанный год. <ul><li>Предусмотрен вывод сведений о годовом балансе рабочего времени, а также по месяцам, за квартал, полугодие. </li> <li>Выводится статистика по количеству календарных дней, рабочих, выходных и праздничных дней, а также рабочее время в часах при 40-часовой, 36-часовой и 24-часовой рабочей неделе.</li></ul></li></ul><h3>См. также:</h3> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html index 38e7c4177..e7420992a 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html @@ -2,9 +2,9 @@ <p>Предназначен для формирования и хранения производственных календарей.</p> <p>Открывается по соответствующей команде в разделе <strong>Справочники</strong>.</p> <p>Производственный календарь - это своеобразный классификатор, постоянные сведения, которые не меняются в течение года. Их может быть несколько, т.к. в разных регионах предусмотрен разный состав праздничных дней и соответственно переносов. </p> -<p><strong>Производственный календарь РФ</strong> (который является общегосударственным) входит в поставляемые данные приложения и обновляется по мере утверждения календаря и переносов праздников в РФ. При необходимости можно ввести несколько производственных календарей. Рекомендуется ввести производственный календарь в начале года на основании общегосударственного календаря на весь год сразу. Это поможет избежать ошибок в расчетах в течение года.</p><a name="СтандартныеПодсистемы.ГрафикиРаботы"> +<p><strong>Производственный календарь РФ</strong> (который является общегосударственным) входит в поставляемые данные приложения и обновляется по мере утверждения календаря и переносов праздников в РФ. При необходимости можно ввести несколько производственных календарей. Рекомендуется ввести производственный календарь в начале года на основании общегосударственного календаря на весь год сразу. Это поможет избежать ошибок в расчетах в течение года.</p><a name="СтандартныеПодсистемы.ГрафикиРаботы"> </a> -<p><a name="СтандартныеПодсистемы.ГрафикиРаботы">Производственные календари сами по себе не используются в учете. На основании производственного календаря формируются </a><a href="Catalog.Календари/Help">графики работы</a> подразделений, а также графики работы сотрудников.</p> +<p><a name="СтандартныеПодсистемы.ГрафикиРаботы">Производственные календари сами по себе не используются в учете. На основании производственного календаря формируются </a><a href="Catalog.Календари/Help">графики работы</a> подразделений, а также графики работы сотрудников.</p> <h3>Ввод производственного календаря</h3> <ul><li>Нажмите <strong>Создать</strong>, выберите способ создания производственного календаря: <ul><li><strong>По классификатору</strong> - добавить из классификатора, рекомендуется. Приложение поставляется с <a href="DataProcessor.ЗаполнениеКалендарныхГрафиков.Form.ПодборКалендарейИзКлассификатора/Help">классификатором производственных календарей</a>. diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 820ab586c..93b0ec678 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -1322,8 +1322,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Печатная форма производственного календаря. +#Область ПечатнаяФормаПроизводственногоКалендаря Функция ПечатнаяФормаПроизводственногоКалендаря(ПараметрыПодготовкиПечатнойФормы) @@ -1563,4 +1562,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html index 9f3d870ed..c76321225 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html @@ -1,9 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> <p>Список предназначен для выбора папок <a href="Catalog.ПрофилиГруппДоступа/Help">профилей групп доступа</a>.</p> -<p>Т.к. профилей групп доступа может быть очень много и с похожими настройками ограничений прав, предусмотрена возможность создавать папки для упрощения поиска нужного <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиля групп доступа</a> и понимания ограничений прав доступа в целом.</p> +<p>Т.к. профилей групп доступа может быть очень много и с похожими настройками ограничений прав, предусмотрена возможность создавать папки для упрощения поиска нужного <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиля групп доступа</a> и понимания ограничений прав доступа в целом.</p> <p><a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">Профили групп доступа</a> можно сгруппировать по различным признакам.</p> <h3>Выбор папки профилей групп доступа</h3> <ul><li>Выделите папку, нажмите <strong>Выбрать</strong>. Также можно воспользоваться двойным щелчком левой кнопки мыши.</li></ul><h3>Ввод папки профилей групп доступа</h3> -<ul><li>Нажмите <strong>Создать группу</strong>, введите наименование <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаГруппы/Help">папки</a>.</li></ul><h3>См. также:</h3> +<ul><li>Нажмите <strong>Создать группу</strong>, введите наименование <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаГруппы/Help">папки</a>.</li></ul><h3>См. также:</h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html index aa0ca07e2..050b4322e 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> -<p>Сведения о папке <a href="Catalog.ПрофилиГруппДоступа/Help">профилей групп доступа</a>.</p> -<p><a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">Профилей групп доступа</a> может быть много и с похожим назначением, поэтому предусмотрена возможность создавать папки (группы) для упрощения поиска нужного <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиля</a> и понимания принципов их формирования.</p> +<p>Сведения о папке <a href="Catalog.ПрофилиГруппДоступа/Help">профилей групп доступа</a>.</p> +<p><a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">Профилей групп доступа</a> может быть много и с похожим назначением, поэтому предусмотрена возможность создавать папки (группы) для упрощения поиска нужного <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиля</a> и понимания принципов их формирования.</p> <h3>Ввод папки профилей групп доступа</h3> <ul><li> <div>Введите <strong>Наименование</strong>;</div> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form index 3a59bed65..a3d7286ba 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form @@ -1002,6 +1002,12 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ПрофилиСРолямиПомеченнымиНаУдаление</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html index 585f4dbbc..763835f94 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,38 +1,38 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Предназначен для управления профилями <a href="Catalog.ГруппыДоступа/Help">групп доступа</a>.</p> -<p>Профилей <a href="Catalog.ГруппыДоступа.Form.ФормаСписка/Help">групп доступа</a> может быть много и с похожим назначением, поэтому предусмотрена возможность создавать <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаГруппы/Help">папки</a> для упрощения поиска нужного профиля и понимания принципов их формирования.</p> +<p>Предназначен для управления профилями <a href="Catalog.ГруппыДоступа/Help">групп доступа</a>.</p> +<p>Профилей <a href="Catalog.ГруппыДоступа.Form.ФормаСписка/Help">групп доступа</a> может быть много и с похожим назначением, поэтому предусмотрена возможность создавать <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаГруппы/Help">папки</a> для упрощения поиска нужного профиля и понимания принципов их формирования.</p> <p>Список открывается по команде <strong>Профили групп доступа</strong> в разделе <strong>Администрирование - Настройка пользователей и прав</strong>.</p> <h3>Отборы списка</h3> <ul><li>С помощью поля <strong>Показать</strong> можно выводить на просмотр: <ul><li><strong>Все профили</strong> (по умолчанию); </li> -<li><strong>Поставляемые</strong> - профили, входящие в поставку приложения; +<li><strong>Поставляемые</strong> - профили, входящие в поставку приложения; </li> -<li><strong>Непоставляемые</strong> - профили, которые не входят в поставку приложения; +<li><strong>Непоставляемые</strong> - профили, которые не входят в поставку приложения; </li> <li><strong>Устаревшие</strong>.</li></ul></li> <li>С помощью поля <strong>Назначение</strong> можно отобрать профили групп доступа по видам пользователей, для кого они предназначены: -<ul><li>Нажмите кнопку <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>. +<ul><li>Нажмите кнопку <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать</strong>. </li> <li>Укажите с помощью флажков, для кого предназначены профили групп доступа, например, <strong>Пользователи</strong>.</li></ul></li></ul><h3>Основные и дополнительные профили групп доступа</h3> <ul><li>Различают основные и дополнительные <a href="Catalog.ПрофилиГруппДоступа/Help">профили групп доступа</a>: -<ul><li>Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в приложении определенного участка работ. +<ul><li>Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в приложении определенного участка работ. </li> <li>С помощью дополнительных профилей пользователям могут быть выданы какие-либо вспомогательные права дополнительно к основному профилю. <ul><li>Например, дополнительно к основным профилям <strong>Бухгалтер</strong> и <strong>Кладовщик</strong> предусмотрены профили <strong>Ведение переписки с контрагентами</strong> и <strong>Печать непроведенных документов</strong>.</li></ul></li></ul></li></ul><h3>Рекомендации по созданию основных профилей групп доступа</h3> -<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li>В основных профилях важно предусмотреть такой набор ролей, который с одной стороны, не будет давать избыточного (нежелательного) доступа к функциям и данным приложения, а с другой - будет достаточным для работы пользователей в рамках их круга задач и обязанностей. +<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li>В основных профилях важно предусмотреть такой набор ролей, который с одной стороны, не будет давать избыточного (нежелательного) доступа к функциям и данным приложения, а с другой - будет достаточным для работы пользователей в рамках их круга задач и обязанностей. </li> <li>В частности, в основном профиле следует предусмотреть ряд вспомогательных ролей, которые напрямую не связаны с основной деятельностью пользователей, но, тем не менее, необходимы для нее. </li> <li>Например, для оператора по вводу документов помимо роли на добавление и изменение этих документов нужно также не забыть включить в профиль следующие роли: -<ul><li>роль для входа в приложение с помощью тонкого, толстого или веб-клиента; +<ul><li>роль для входа в приложение с помощью тонкого, толстого или веб-клиента; </li> <li>группу ролей <strong>Базовые права</strong>; </li> <li>роли для просмотра справочников, элементы которых требуется выбирать в полях документов; </li> <li>роли для просмотра отчетов по движениям документов и т.п.</li></ul></li> -<li>Например, в профиль <strong>Аудитор</strong> помимо основной роли <strong>Чтение физических лиц</strong>, разрешающей просмотр сведений о физических лицах, необходимо включить также ряд вспомогательных ролей, обеспечивающих базовые возможности для работы в приложении (например, группа ролей <strong>Базовые права</strong>, <strong>Запуск тонкого клиента</strong> и т.п.).</li></ul><h3>Ввод профиля групп доступа</h3> +<li>Например, в профиль <strong>Аудитор</strong> помимо основной роли <strong>Чтение физических лиц</strong>, разрешающей просмотр сведений о физических лицах, необходимо включить также ряд вспомогательных ролей, обеспечивающих базовые возможности для работы в приложении (например, группа ролей <strong>Базовые права</strong>, <strong>Запуск тонкого клиента</strong> и т.п.).</li></ul><h3>Ввод профиля групп доступа</h3> <ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>Ввод папки профилей групп доступа</h3> <ul><li>Нажмите <strong>Создать группу</strong>, заполните необходимые <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаГруппы/Help">поля</a>.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl index 95174fdd5..41a60dcab 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -39,12 +39,7 @@ Элементы.Список.РежимВыбора = Ложь; КонецЕсли; - Если Параметры.Свойство("ПрофилиСРолямиПомеченнымиНаУдаление") Тогда - ПоказатьПрофили = "Устаревшие"; - Иначе - ПоказатьПрофили = "ВсеПрофили"; - КонецЕсли; - + ПоказатьПрофили = ?(Параметры.ПрофилиСРолямиПомеченнымиНаУдаление, "Устаревшие", "ВсеПрофили"); Если Не Параметры.РежимВыбора Тогда УстановитьОтбор(); Иначе diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html index ae45ed5eb..365b7cd83 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -1,50 +1,50 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Описание свойств профиля групп доступа.</p> -<p>В приложении существуют предопределенные <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">профили групп доступа</a>. В ряде случаев предустановленных <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">профилей групп доступа</a> оказывается недостаточно для осуществления требуемой настройки прав доступа пользователей. В таких случаях администратор имеет возможность добавить новые профили групп доступа.</p> +<p>В приложении существуют предопределенные <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">профили групп доступа</a>. В ряде случаев предустановленных <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">профилей групп доступа</a> оказывается недостаточно для осуществления требуемой настройки прав доступа пользователей. В таких случаях администратор имеет возможность добавить новые профили групп доступа.</p> <p>Профиль групп доступа объединяет в себе, как правило, несколько ролей, а также содержит описание видов доступа, в разрезе которых администратор может настраивать права с помощью <a href="Catalog.ГруппыДоступа/Help">групп доступа</a>. Таким образом, профиль представляет собой определенный шаблон, в соответствии с которым администратор ведет <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">группы доступа</a>.</p> <p>С одним профилем может быть связана одна или несколько групп доступа. Например, на базе профиля <strong>Бухгалтер</strong> могут быть настроены группы доступа <strong>Бухгалтеры центрального офиса</strong> и <strong>Бухгалтеры филиала в Н-ске</strong>, которые отличаются друг от друга разрешенными организациями: "Центральный офис" и "Филиал в Н-ске".</p> <h3>Ввод профиля групп доступа</h3> <ul><li>Введите <strong>Наименование</strong> профиля. </li> -<li>При необходимости можно включить профиль групп доступа в папку, заполнив поле <strong>Группа (папка)</strong>. Профили групп доступа можно группировать по различным признакам. Выберите нужную папку из <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">списка</a>. +<li>При необходимости можно включить профиль групп доступа в папку, заполнив поле <strong>Группа (папка)</strong>. Профили групп доступа можно группировать по различным признакам. Выберите нужную папку из <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">списка</a>. </li> <li>В поле <strong>Назначение</strong> перейдите по ссылке, с помощью флажков выберите, для кого предназначен профиль групп доступа, например, <strong>Пользователи</strong>, нажмите кнопку <strong>Выбрать</strong>. После этого ссылка принимает выбранное значение. </li> -<li>Выберите <a href="#1">Разрешенные действия (роли)</a> на соответствующей вкладке. +<li>Выберите <a href="#1">Разрешенные действия (роли)</a> на соответствующей вкладке. </li> -<li>Укажите <a href="#2">Ограничения доступа</a> на соответствующей вкладке. +<li>Укажите <a href="#2">Ограничения доступа</a> на соответствующей вкладке. </li> -<li>На вкладке <strong>Комментарий</strong> можно написать дополнительные сведения о профиле групп доступа. -<ul><li>У предопределенных профилей доступа предусмотрена аналогичная вкладка <strong>Описание</strong> с подробным описанием данного профиля и его назначения.</li></ul></li></ul><h3><a name="1">Разрешенные действия (роли)</a> </h3> +<li>На вкладке <strong>Комментарий</strong> можно написать дополнительные сведения о профиле групп доступа. +<ul><li>У предопределенных профилей доступа предусмотрена аналогичная вкладка <strong>Описание</strong> с подробным описанием данного профиля и его назначения.</li></ul></li></ul><h3><a name="1">Разрешенные действия (роли)</a> </h3> <ul><li>На вкладке <strong>Разрешенные действия (роли</strong>) при добавлении нового профиля групп доступа сначала необходимо определить состав его ролей, исходя из потребностей целевой группы пользователей. </li> -<li>Роль определяет некоторую совокупность действий над объектами приложения, которые может выполнять <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a>. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) <a href="Catalog.Пользователи/Help">пользователей</a> приложения, так и могут соотноситься с более мелкими функциями. Например, роль <strong>Бухгалтер</strong> предоставляет доступ к функциональному блоку, необходимому для выполнения должностных обязанностей бухгалтера, а для включения отдельной возможности просмотра файлов может быть дополнительно назначена роль <strong>Чтение файлов</strong>. Зачастую, роли либо разрешают просмотр, либо дают возможность редактирования тех или иных данных в приложении. +<li>Роль определяет некоторую совокупность действий над объектами приложения, которые может выполнять <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a>. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) <a href="Catalog.Пользователи/Help">пользователей</a> приложения, так и могут соотноситься с более мелкими функциями. Например, роль <strong>Бухгалтер</strong> предоставляет доступ к функциональному блоку, необходимому для выполнения должностных обязанностей бухгалтера, а для включения отдельной возможности просмотра файлов может быть дополнительно назначена роль <strong>Чтение файлов</strong>. Зачастую, роли либо разрешают просмотр, либо дают возможность редактирования тех или иных данных в приложении. </li> -<li>С помощью флажков выберите одну или несколько ролей. -<ul><li>С помощью кнопки <img src="StdPicture.CheckAll"></img> можно выбрать все роли в списке. +<li>С помощью флажков выберите одну или несколько ролей. +<ul><li>С помощью кнопки <img src="StdPicture.CheckAll"></img> можно выбрать все роли в списке. </li> -<li>С помощью кнопки <img src="StdPicture.UncheckAll"></img> можно отменить выбор всех ролей. </li></ul></li> -<li>С помощью соответствующей кнопки можно показать <strong>Только выбранные</strong> роли. +<li>С помощью кнопки <img src="StdPicture.UncheckAll"></img> можно отменить выбор всех ролей. </li></ul></li> +<li>С помощью соответствующей кнопки можно показать <strong>Только выбранные</strong> роли. </li> -<li>С помощью команды <strong>Еще -</strong> <strong>По подсистемам</strong> можно показать список ролей одним из способов: +<li>С помощью команды <strong>Еще -</strong> <strong>По подсистемам</strong> можно показать список ролей одним из способов: <ul><li>в алфавитном порядке; </li> <li>сгруппировать по подсистемам.</li></ul></li></ul><h3><a name="2">Ограничения доступа</a></h3> <ul><li>На вкладке <strong>Ограничения доступа</strong> необходимо принять решение по поводу состава видов доступа, которые должны быть определены в профиле. </li> -<li>Под видом доступа подразумевается некоторое правило, по которому "разрешается" доступ к данным приложения. С их помощью можно более точно настраивать границы области данных, с которой разрешено работать участникам тех или иных групп доступа. +<li>Под видом доступа подразумевается некоторое правило, по которому "разрешается" доступ к данным приложения. С их помощью можно более точно настраивать границы области данных, с которой разрешено работать участникам тех или иных групп доступа. </li> <li>В простейшем случае, если в профиль не включено ни одного вида доступа, то права доступа к данным определяются только ролями. Например, в случае, если профиль включает в себя роль для чтения документов <strong>Демо:</strong> <strong>Поступление товаров</strong>, то участники групп доступа получают возможность просмотра всех документов. Но если в дополнение к этой роли в профиль добавить вид доступа <strong>Демо:</strong> <strong>Организации</strong>, то появляется возможность разрешать пользователям работу с документами только по конкретным организациям; или наоборот, скрывать от них документы некоторых организаций. </li> -<li>Таким образом, если список ролей в профиле отвечает на вопрос "что должно быть доступно, а что - нет" (какие функции и данные приложения), то виды доступа уточняют, как именно они должны быть доступны (в разрезе каких разрешенных и запрещенных значений). +<li>Таким образом, если список ролей в профиле отвечает на вопрос "что должно быть доступно, а что - нет" (какие функции и данные приложения), то виды доступа уточняют, как именно они должны быть доступны (в разрезе каких разрешенных и запрещенных значений). </li> <li>Состав видов доступа в профиле рекомендуется определять, исходя из соображений гибкости настройки прав доступа. </li> <li>Укажите <strong>Виды доступа</strong>. -<ul><li>Нажмите <strong>Добавить</strong>, выберите из списка один из видов доступа. +<ul><li>Нажмите <strong>Добавить</strong>, выберите из списка один из видов доступа. </li> <li>С помощью соответствующей команды меню <strong>Еще</strong> или контекстного меню по правой кнопке мыши можно <strong>Удалить</strong> ненужные записи. </li></ul></li> -<li>Для каждого вида доступа, заданного в профиле, можно указать одно из четырех <strong>Значений доступа</strong>: +<li>Для каждого вида доступа, заданного в профиле, можно указать одно из четырех <strong>Значений доступа</strong>: <ul><li><strong>Все запрещены, исключения назначаются в группах доступа</strong> - применяется в тех случаях, когда по умолчанию доступ ко всем данным должен быть закрыт, но для отдельных объектов в группах доступа могут быть настроены разрешения. </li> <li><strong>Все разрешены, исключения назначаются в группах доступа</strong> - аналогично предыдущему варианту, но по умолчанию все данные разрешены, а для отдельных объектов в группах доступа могут быть установлены исключения - запрет. @@ -52,11 +52,11 @@ <li><strong>Все запрещены, исключения назначаются в профиле</strong> - используется тогда, когда в группах доступа не предполагается предоставлять возможность настройки для вида доступа; т.е. вся настройка должна быть выполнена непосредственно в самом профиле и не может быть изменена в группах доступа. Такие виды доступа скрыты в группах доступа. <ul><li>В этом случае становится доступным ввод исключений. </li> -<li>Нажмите <strong>Добавить</strong>, выберите значения из списков. +<li>Нажмите <strong>Добавить</strong>, выберите значения из списков. </li> <li>С помощью соответствующей команды меню <strong>Еще</strong> или контекстного меню по правой кнопке мыши можно <strong>Удалить</strong> лишние значения.</li></ul></li> <li><strong>Все разрешены, исключения назначаются в профиле</strong> - аналогично предыдущему варианту.</li></ul></li></ul><h3>Просмотр неиспользуемых видов доступа</h3> <ul><li> -<div>С помощью команды <strong>Еще - Показывать неиспользуемые виды доступа</strong> можно просмотреть те виды доступа, которые не используются в данный момент (например, данная возможность отключена в приложении).</div></li></ul><h3>Просмотр групп доступа</h3> +<div>С помощью команды <strong>Еще - Показывать неиспользуемые виды доступа</strong> можно просмотреть те виды доступа, которые не используются в данный момент (например, данная возможность отключена в приложении).</div></li></ul><h3>Просмотр групп доступа</h3> <ul><li>Для быстрого перехода к списку групп доступа, созданных на базе данного профиля, можно воспользоваться командой <strong>Группы доступа</strong> на панели навигации.</li></ul><h3>См. также:</h3> -<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file +<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 46cccfda6..3d4769ad5 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -318,8 +318,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ВидДоступаПредставление таблицы формы ВидыДоступа. +#Область ОбработчикиСобытийЭлементаВидДоступаПредставлениеТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаВидДоступаПредставлениеПриИзменении(Элемент) @@ -337,8 +336,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ВсеРазрешеныПредставление таблицы формы ВидыДоступа. +#КонецОбласти + +#Область ОбработчикиСобытийЭлементаВсеРазрешеныПредставлениеТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаВсеРазрешеныПредставлениеПриИзменении(Элемент) @@ -358,6 +358,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа &НаКлиенте @@ -494,8 +496,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) @@ -544,6 +545,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Продолжение обработчика события ПередЗаписью. @@ -729,8 +732,7 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаСервере Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) @@ -789,3 +791,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html index c1fa9265d..f3a72e8ed 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> -<p>Как правило, настройка <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">профилей групп доступа</a> обычно выполняется при внедрении и конфигурировании прикладного решения. Они предназначены для создания готовых подборок разрешенных действий (ролей), содержащих права доступа к объектам приложения, и "разрезов" ограничения этих прав (видов доступа), которые предполагается использовать в <a href="Catalog.ГруппыДоступа/Help">группах доступа</a>.</p> +<p>Как правило, настройка <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">профилей групп доступа</a> обычно выполняется при внедрении и конфигурировании прикладного решения. Они предназначены для создания готовых подборок разрешенных действий (ролей), содержащих права доступа к объектам приложения, и "разрезов" ограничения этих прав (видов доступа), которые предполагается использовать в <a href="Catalog.ГруппыДоступа/Help">группах доступа</a>.</p> <p>В ряде случаев предустановленных профилей групп доступа оказывается недостаточно для осуществления требуемой настройки прав доступа пользователей. В таких случаях администратор имеет возможность добавить новые или изменить предустановленные профили групп доступа.</p> <p>С помощью профилей становится возможным:</p> -<ul><li>задать общий список ролей для некоторой группы пользователей приложения. Например, для менеджеров может быть определен <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиль групп доступа</a> "Менеджер" с ролями: +<ul><li>задать общий список ролей для некоторой группы пользователей приложения. Например, для менеджеров может быть определен <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиль групп доступа</a> "Менеджер" с ролями: <ul><li><strong>Добавление и изменение заказов клиентов</strong>, </li> <li><strong>Чтение нормативно-справочной информации</strong>, </li> <li>...</li></ul></li> -<li>определить, в разрезе каких видов доступа должен быть предоставлен доступ к отдельным элементам справочников, документов и пр., доступ к которым в целом разрешен с помощью определенного выше списка ролей. Например, в профиле "Менеджер" доступ может быть разрешен (или запрещен) к отдельным заказам клиентов, нормативно-справочной информации и прочим данным приложения в разрезе организаций, партнеров, видов хозяйственных операций и других имеющихся в конфигурации видов доступа. Настройка же конкретных значений организаций, партнеров, видов хозяйственных операций и прочих заданных в профиле видов доступа выполняется в соответствующих <a href="Catalog.ГруппыДоступа/Help">группах доступа</a>.</li></ul><h3>Виды доступа и ограничения доступа</h3> -<ul><li>В зависимости от своей специфики, различные роли могут поддерживать или не поддерживать ограничение доступа в разрезе тех или иных видов доступа. Например, роль <strong>Добавление и изменение заказов клиентов </strong>может<strong> </strong>ограничивать добавление и изменение заказов клиентов в разрезе организаций и партнеров, а роль <strong>Запуск веб-клиента</strong> - всегда разрешает запуск веб-клиента независимо ни от чего. +<li>определить, в разрезе каких видов доступа должен быть предоставлен доступ к отдельным элементам справочников, документов и пр., доступ к которым в целом разрешен с помощью определенного выше списка ролей. Например, в профиле "Менеджер" доступ может быть разрешен (или запрещен) к отдельным заказам клиентов, нормативно-справочной информации и прочим данным приложения в разрезе организаций, партнеров, видов хозяйственных операций и других имеющихся в конфигурации видов доступа. Настройка же конкретных значений организаций, партнеров, видов хозяйственных операций и прочих заданных в профиле видов доступа выполняется в соответствующих <a href="Catalog.ГруппыДоступа/Help">группах доступа</a>.</li></ul><h3>Виды доступа и ограничения доступа</h3> +<ul><li>В зависимости от своей специфики, различные роли могут поддерживать или не поддерживать ограничение доступа в разрезе тех или иных видов доступа. Например, роль <strong>Добавление и изменение заказов клиентов </strong>может<strong> </strong>ограничивать добавление и изменение заказов клиентов в разрезе организаций и партнеров, а роль <strong>Запуск веб-клиента</strong> - всегда разрешает запуск веб-клиента независимо ни от чего. </li> -<li>Поэтому при настройке состава видов доступа в профиле необходимо иметь в виду, что в профиле всегда должен задаваться совокупный список видов доступа для всех перечисленных в нем ролей. +<li>Поэтому при настройке состава видов доступа в профиле необходимо иметь в виду, что в профиле всегда должен задаваться совокупный список видов доступа для всех перечисленных в нем ролей. </li> -<li>Если же какой-либо вид доступа не был указан в профиле, то по нему ограничения не будут применены (как если бы он не использовался в логике ограничения прав в ролях).</li></ul><h3>Профиль для администрирования приложения</h3> -<ul><li>В составе приложения имеется предопределенный профиль <strong>Администратор</strong>, в который включена единственная роль <strong>Полные права</strong>. Эта роль предоставляет полный доступ к данным приложения без каких-либо ограничений. Не рекомендуется добавлять роль <strong>Полные права</strong> в какие-либо другие профили, так как она автоматически отключает любые другие ограничения доступа (и профиль, содержащий такую роль, "вырождается" в профиль <strong>Администратор</strong>). +<li>Если же какой-либо вид доступа не был указан в профиле, то по нему ограничения не будут применены (как если бы он не использовался в логике ограничения прав в ролях).</li></ul><h3>Профиль для администрирования приложения</h3> +<ul><li>В составе приложения имеется предопределенный профиль <strong>Администратор</strong>, в который включена единственная роль <strong>Полные права</strong>. Эта роль предоставляет полный доступ к данным приложения без каких-либо ограничений. Не рекомендуется добавлять роль <strong>Полные права</strong> в какие-либо другие профили, так как она автоматически отключает любые другие ограничения доступа (и профиль, содержащий такую роль, "вырождается" в профиль <strong>Администратор</strong>). </li> <li>Профиль <strong>Администратор </strong>используется в предопределенной <a href="Catalog.ГруппыДоступа.Form.ФормаЭлемента/Help">группе доступа</a> <strong>Администраторы</strong>. Не рекомендуется создавать другие <a href="Catalog.ГруппыДоступа.Form.ФормаСписка/Help">группы доступа</a> с этим профилем.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl index a35df307d..88edafd1f 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -1810,8 +1810,7 @@ Возврат ПользователиСлужебный.ПредставлениеСсылки(Ссылка); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для поддержки обмена данными в РИБ. +#Область ПроцедурыИФункцииДляПоддержкиОбменаДаннымиВРИБ // Только для внутреннего использования. // @@ -2036,8 +2035,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Начальное заполнение +#КонецОбласти + +#Область НачальноеЗаполнение // Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлементов // @@ -2067,8 +2067,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции Функция ЗаполненныеПоставляемыеПрофили() @@ -3287,4 +3288,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo index 24628f36b..84fc367d7 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ПрофилиГруппДоступа.mdo @@ -112,6 +112,7 @@ <lang>ru</lang> </pages> </help> + <dataLockFields>Catalog.ПрофилиГруппДоступа.Attribute.ИдентификаторШаблонаСервиса</dataLockFields> <dataLockControlMode>Managed</dataLockControlMode> <fullTextSearch>Use</fullTextSearch> <objectPresentation> @@ -200,6 +201,26 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="50591ed3-06db-48f0-8e2b-a70b8ea2d09f"> + <name>ИдентификаторШаблонаСервиса</name> + <synonym> + <key>ru</key> + <value>Идентификатор шаблона сервиса</value> + </synonym> + <type> + <types>UUID</types> + </type> + <toolTip> + <key>ru</key> + <value>Содержит идентификатор шаблона сервиса по которому можно найти профиль</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> <tabularSections uuid="5d228ce4-069e-4f98-beed-b8e1de17c3d9"> <producedTypes> <objectType typeId="926989ac-849e-47f4-9491-3c7dc717d42c" valueTypeId="e47fdad6-6a00-4db3-8ba8-ecd6cb388e6d"/> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/SMSРассылкаПаролей/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/SMSРассылкаПаролей/Help/ru.html index e3c68692f..acd1347d2 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/SMSРассылкаПаролей/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/SMSРассылкаПаролей/Help/ru.html @@ -1,14 +1,14 @@ <!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><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Необходима для того, чтобы передать получателям их пароли к рассылке отчетов. Для связи с получателем можно выбрать любой доступный вид контактной информации</span> (например, телефон, предназначенный для <b>SMS-рассылки</b>).</p> +<p>Необходима для того, чтобы передать получателям их пароли к рассылке отчетов. Для связи с получателем можно выбрать любой доступный вид контактной информации (например, телефон, предназначенный для <b>SMS-рассылки</b>).</p> <h4>Пример SMS: Ваш пароль 12345 для получения рассылки "Демо:Персонализированная по получателям(HTML, NOZIP)".</h4> <div><br></div> <p class="Paragraph0c">После отправки SMS с паролями, отображается результат с комментариями. В случае возникновения -ошибок при отправке, рядом с <b>Получателем </b>появляется символ предупреждения <img src="CommonPicture.Предупреждение"></img>  например, предупреждает, что не указан номер телефона или недоступен. </p> +ошибок при отправке, рядом с <b>Получателем </b>появляется символ предупреждения <img src="CommonPicture.Предупреждение"></img> например, предупреждает, что не указан номер телефона или недоступен. </p> <p style="margin: 0cm 0cm 6pt 36pt; text-indent: -18pt;"><br></p> -<p style="margin: 0cm 0cm 6pt 36pt; text-indent: -18pt;">См. также: </p> -<h3 style="font-size: 13.4399995803833px;"> -<ul style="font-size: 11.199999809265137px; font-weight: normal;"><li><a href="v8mnghelp://help/topics/v8config/v8cfgHelp/mdobject/id6ff5b3cb-efff-430d-bf0a-957405f116ca/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">отправка SMS</a>;</li> +<p style="margin: 0cm 0cm 6pt 36pt; text-indent: -18pt;">См. также: </p> +<h3> +<ul><li><a href="v8mnghelp://help/topics/v8config/v8cfgHelp/mdobject/id6ff5b3cb-efff-430d-bf0a-957405f116ca/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">отправка SMS</a>;</li> <li><a href="v8mnghelp://help/topics/v8config/v8cfgHelp/mdobject/id38bf6d3b-5435-4bac-b9fc-23b80afeb760/038b5c85-fb1c-4082-9c4c-e69f8928bf3a">настройка отправки SMS</a>.</li></ul></h3> <div><br></div> <p><br></p></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html index 2384acbf2..20990c1d3 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html @@ -1,18 +1,18 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> -<p>Позволяет указать параметры, необходимые для подключения к FTP-ресурсу при рассылке отчетов. <br>Поле <strong>Сервер и каталог</strong> является обязательным для заполнения, остальные поля не обязательны.</p> -<p>Открывается из окна <a href="Catalog.РассылкиОтчетов.Form.ФормаЭлемента/Help">рассылки отчетов</a> (Вкладка <b>Доставка</b>, поле <b>Публиковать</b> - на FTP-ресурс, в поле ввода параметров FTP-ресурса нажать кнопку <img src="StdPicture.InputFieldSelect"></img> <b>Выбрать</b>).</p> +<p>Позволяет указать параметры, необходимые для подключения к FTP-ресурсу при рассылке отчетов. <br>Поле <strong>Сервер и каталог</strong> является обязательным для заполнения, остальные поля не обязательны.</p> +<p>Открывается из окна <a href="Catalog.РассылкиОтчетов.Form.ФормаЭлемента/Help">рассылки отчетов</a> (Вкладка <b>Доставка</b>, поле <b>Публиковать</b> - на FTP-ресурс, в поле ввода параметров FTP-ресурса нажать кнопку <img src="StdPicture.InputFieldSelect"></img><b>Выбрать</b>).</p> <p><a name="Реквизиты">З</a>аполните необходимые сведения:</p> -<ul><li><a name="СерверИКаталог"><strong>Сервер и каталог</strong></a> - путь к FTP-ресурсу в формате <b>ftp://сервер/каталог/</b>; +<ul><li><a name="СерверИКаталог"><strong>Сервер и каталог</strong></a> - путь к FTP-ресурсу в формате <b>ftp://сервер/каталог/</b>; </li> -<li><a name="Порт"><strong>Порт</strong></a> - порт FTP-ресурса на сервере (стандартный порт - 21); +<li><a name="Порт"><strong>Порт</strong></a> - порт FTP-ресурса на сервере (стандартный порт - 21); </li> -<li><a name="Логин"><strong>Логин</strong></a> - имя пользователя для доступа к FTP; +<li><a name="Логин"><strong>Логин</strong></a> - имя пользователя для доступа к FTP; </li> -<li><a name="Пароль"><strong>Пароль</strong></a> - пароль пользователя для доступа к FTP; +<li><a name="Пароль"><strong>Пароль</strong></a> - пароль пользователя для доступа к FTP; </li> -<li><a name="ПассивноеСоединение"><strong>Пассивное соединение</strong></a> - флажок использования пассивного соединения при подключении к серверу.</li></ul><h3>Ввод параметров одной строкой</h3> +<li><a name="ПассивноеСоединение"><strong>Пассивное соединение</strong></a> - флажок использования пассивного соединения при подключении к серверу.</li></ul><h3>Ввод параметров одной строкой</h3> <ul><li> -<div>Нажмите <strong>Заполнить</strong>, введите строку вида <b>ftp://User:пароль@сервер:21/каталог/</b>, приложение автоматически заполнит все параметры по отдельности.</div></li></ul><p></p> +<div>Нажмите <strong>Заполнить</strong>, введите строку вида <b>ftp://User:пароль@сервер:21/каталог/</b>, приложение автоматически заполнит все параметры по отдельности.</div></li></ul><p></p> <h3>См. также: </h3> <ul><li><a href="Catalog.РассылкиОтчетов/Help">Рассылки отчетов</a>; </li> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПаролиШифрование/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПаролиШифрование/Help/ru.html index 2b6c52ed4..f320d41cc 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПаролиШифрование/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПаролиШифрование/Help/ru.html @@ -1,11 +1,11 @@ <!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 class=""> -<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 8.5pt; font-family: Verdana, sans-serif;">Рассылка отчетов, которая содержит какую-либо </span><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px;">конфиденциальную информацию,</span><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> может проходить по открытым (незащищенным) каналам электронной почты и может быть небезопасна для получателей.</span></p> -<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Чтобы защитить данную рассылку, нужно зашифровать отчет с помощью </span><b style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Сертификата электронной подписи</b><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> (сертификат открытого ключа) получателя, если он существует для соответствующего физического лица. В таком случае, только -получатель рассылки сможет расшифровать и посмотреть отчеты (с помощью закрытого ключа).</span></p> -<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 8.5pt; line-height: 120%; font-family: Verdana, sans-serif;">При отправке <b>Своего отчета для каждого получателя</b> и при формировании <b>Личной +<p>Рассылка отчетов, которая содержит какую-либо конфиденциальную информацию, может проходить по открытым (незащищенным) каналам электронной почты и может быть небезопасна для получателей.</p> +<p>Чтобы защитить данную рассылку, нужно зашифровать отчет с помощью <b style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Сертификата электронной подписи</b> (сертификат открытого ключа) получателя, если он существует для соответствующего физического лица. В таком случае, только +получатель рассылки сможет расшифровать и посмотреть отчеты (с помощью закрытого ключа).</p> +<p>При отправке <b>Своего отчета для каждого получателя</b> и при формировании <b>Личной рассылки автора</b>, если архивация включена, можно установить как пароли, так и сертификаты. При включении архивации сертификатом шифруется архив, а при -отключении шифруется каждый файл отчёта. В случае, если шифрование не используется, то будет доступна установка паролей на архивы для каждого получателя.  </span></p> +отключении шифруется каждый файл отчёта. В случае, если шифрование не используется, то будет доступна установка паролей на архивы для каждого получателя. </p> <div> <div> <div id="_com_1" class="msocomtxt" language="JavaScript"> @@ -13,20 +13,20 @@ <!--[if !supportAnnotations]--></div> <!--[endif]--></div></div> -<p><span style="font-family: Verdana, sans-serif; font-size: 8.5pt; text-indent: -18pt;">Если установить флажок <img src="CommonPicture.Успешно"></img>в поле <b>Пароль установлен или Сертификат указан</b> и выбрать значение <b>Да, </b>то в данном случае отобразятся получатели с уже установленным паролем или сертификатом. Если выбрать значение <b>Нет, </b>то будет сделан отбор получателей без установленного пароля или сертификата. </span></p> -<p><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">Если установить флажок </span><img src="CommonPicture.Успешно" style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;"></img><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">в поле </span><b style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">Пароль изменен или Сертификат изменен </b><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">и выбрать значение <b>Да</b>, то отобразятся получатели с измененным паролем или сертификатом. Если выбрать значение <b>Нет</b>, то отобразятся те получатели, у которых пароль и сертификат не менялся. </span></p> -<p><span style="font-size: 13.4399995803833px; font-weight: bold;">Нажмите:</span></p> -<ul><li><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;"><b>заполнить сертификаты</b></span> - <span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">подберутся сертификаты из информационной базы, если они существуют для соответствующих получателей</span>; </li> -<li><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;"><b>установить пароли</b></span> - <span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;"> сгенерируются уникальные пароли для каждого получателя рассылки</span>; </li> -<li><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;"><b>отображать символы</b> </span><img src="CommonPicture.ВводимыеСимволыВидны"></img> - с помощью данного символа можно отобразить пароль и <span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">проверить его.</span></li></ul><p class="">Для информирования получателей об установке паролей можно воспользоваться <b><a href="Catalog.РассылкиОтчетов.Form.SMSРассылкаПаролей/Help">SMS-рассылкой</a> </b><img src="CommonPicture.ОтправитьSMS" style="font-weight: bold;"></img> , также возможна печать<b> <img src="StdPicture.Print"></img> </b> списка паролей , чтобы передать пароль лично. </p> -<p class="NormalColumn"><b> Пароли не рекомендуется передавать по незащищенным каналам связи. </b></p> +<p>Если установить флажок <img src="CommonPicture.Успешно"></img>в поле <b>Пароль установлен или Сертификат указан</b> и выбрать значение <b>Да, </b>то в данном случае отобразятся получатели с уже установленным паролем или сертификатом. Если выбрать значение <b>Нет, </b>то будет сделан отбор получателей без установленного пароля или сертификата. </p> +<p>Если установить флажок <img src="CommonPicture.Успешно" style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;"></img>в поле <b style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px; text-indent: -24px;">Пароль изменен или Сертификат изменен </b>и выбрать значение <b>Да</b>, то отобразятся получатели с измененным паролем или сертификатом. Если выбрать значение <b>Нет</b>, то отобразятся те получатели, у которых пароль и сертификат не менялся. </p> +<p>Нажмите:</p> +<ul><li><b>заполнить сертификаты</b> - подберутся сертификаты из информационной базы, если они существуют для соответствующих получателей; </li> +<li><b>установить пароли</b> - сгенерируются уникальные пароли для каждого получателя рассылки; </li> +<li><b>отображать символы</b> <img src="CommonPicture.ВводимыеСимволыВидны"></img> - с помощью данного символа можно отобразить пароль и проверить его.</li></ul><p class="">Для информирования получателей об установке паролей можно воспользоваться <b><a href="Catalog.РассылкиОтчетов.Form.SMSРассылкаПаролей/Help">SMS-рассылкой</a> </b><img src="CommonPicture.ОтправитьSMS" style="font-weight: bold;"></img> , также возможна печать<b> <img src="StdPicture.Print"></img></b> списка паролей , чтобы передать пароль лично. </p> +<p class="NormalColumn"><b> Пароли не рекомендуется передавать по незащищенным каналам связи. </b></p> <h3>В колонке:</h3> <p></p> <ul><li><b>получатель</b> - выведен список всех получателей рассылки;</li> <li><b>адреса электронной почты</b> - отображен список электронной почты данных получателей;</li> <li><b>пароль архива</b> - отображается сгенерированный пароль архива для каждого получателя;</li> <li><b>сертификат для шифрования</b> - отображаются заполненные сертификаты для шифрования.</li></ul><p class=""><br></p> -<p class="NormalColumn"><b>Данные настройки сохранятся для всех последующих рассылок, в которых участвуют выбранные получатели. </b></p> +<p class="NormalColumn"><b>Данные настройки сохранятся для всех последующих рассылок, в которых участвуют выбранные получатели. </b></p> <p></p> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Help/ru.html index b9d5e26ff..f50a558bf 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Help/ru.html @@ -1,11 +1,11 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> <p>Предназначен для подбора получателей <a href="Catalog.РассылкиОтчетов.Form.ФормаЭлемента/Help">рассылки</a>.</p> -<p>Открывается из рассылки отчетов по ссылке <strong>Укажите получателей</strong>.</p> +<p>Открывается из рассылки отчетов по ссылке <strong>Укажите получателей</strong>.</p> <p>Список состоит из колонок:</p> -<ul><li><strong>Получатель</strong> - наименование получателя или группы получателей (выводится из соответствующего списка, например, <a href="Catalog.Пользователи/Help">Пользователи</a>) и адрес его электронной почты. -</li><li><strong>Исключен</strong> - с помощью флажка можно исключить получателя из списка рассылки. Например, когда надо отправлять отчеты всем участникам группы, кроме нескольких, тогда следует выбрать и группу и исключаемых получателей, а затем для исключаемых получателей установить флажок. Также этот флажок может использоваться для временного отключения получателей, для того чтобы не удалять их из списка. Исключенные получатели выделяются красным цветом.</li></ul><h3>Выбор получателей</h3> +<ul><li><strong>Получатель</strong> - наименование получателя или группы получателей (выводится из соответствующего списка, например, <a href="Catalog.Пользователи/Help">Пользователи</a>) и адрес его электронной почты. +</li><li><strong>Исключен</strong> - с помощью флажка можно исключить получателя из списка рассылки. Например, когда надо отправлять отчеты всем участникам группы, кроме нескольких, тогда следует выбрать и группу и исключаемых получателей, а затем для исключаемых получателей установить флажок. Также этот флажок может использоваться для временного отключения получателей, для того чтобы не удалять их из списка. Исключенные получатели выделяются красным цветом.</li></ul><h3>Выбор получателей</h3> <ul><li>С помощью кнопки <strong>Подобрать</strong> выберите несколько элементов списка. Подбор осуществляется из выбранного в рассылке списка получателей, например, <strong>Пользователи</strong>.</li></ul><h3>Добавление из буфера обмена</h3> -<ul><li>Нажмите кнопку <img src="CommonPicture.ЗаполнитьФорму"></img>, для того чтобы вставить в список получателей из буфера обмена.</li></ul><h3>См. также:</h3> +<ul><li>Нажмите кнопку <img src="CommonPicture.ЗаполнитьФорму"></img>, для того чтобы вставить в список получателей из буфера обмена.</li></ul><h3>См. также:</h3> <ul><li> <div><a href="Catalog.РассылкиОтчетов/Help">Рассылки отчетов</a>;</div> </li><li> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index 807409fc3..f14e1b7ac 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -2258,8 +2258,8 @@ ( ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА ИЗ - Справочник.РассылкиОтчетов.Отчеты КАК Отчеты - ГДЕ Отчеты.Ссылка = Рассылки.Ссылка И Отчеты.Отчет = &ОтчетОтбор + Справочник.РассылкиОтчетов.Отчеты КАК ВариантыОтчетов + ГДЕ ВариантыОтчетов.Ссылка = Рассылки.Ссылка И ВариантыОтчетов.Отчет = &ОтчетОтбор )}</queryText> <mainTable>Catalog.РассылкиОтчетов</mainTable> <dynamicDataRead>true</dynamicDataRead> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 450243d26..a6e36b3ed 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -9136,7 +9136,6 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> - <autoFill>true</autoFill> </contextMenu> <changeRowSet>true</changeRowSet> <changeRowOrder>true</changeRowOrder> diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index 440f0b6a3..64fd89a93 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,72 +1,72 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body class=""> <p>Предназначена для автоматического формирования отчетов и доставки сформированных отчетов получателям.</p> -<p><a href="Catalog.РассылкиОтчетов/Help">Рассылки отчетов</a> позволяют автоматизировать процесс получения отчетов так, что, не открывая приложение, можно получить в нужное время готовый отчет на свою электронную почту или в определенный каталог в виде файла.</p> +<p><a href="Catalog.РассылкиОтчетов/Help">Рассылки отчетов</a> позволяют автоматизировать процесс получения отчетов так, что, не открывая приложение, можно получить в нужное время готовый отчет на свою электронную почту или в определенный каталог в виде файла.</p> <h3>Основные сведения</h3> <div> -<ul><li><strong>Наименование</strong> - представление рассылки в списках, может быть указано как шаблон.</li> -<li><strong>Подготовлена</strong> - флажок, который обозначает готовность рассылки к выполнению. Включение флажка активизирует дополнительные проверки заполнения реквизитов.</li></ul></div> +<ul><li><strong>Наименование</strong> - представление рассылки в списках, может быть указано как шаблон.</li> +<li><strong>Подготовлена</strong> - флажок, который обозначает готовность рассылки к выполнению. Включение флажка активизирует дополнительные проверки заполнения реквизитов.</li></ul></div> <ul><li> -<div><b>Входит в группу</b> - рассылки можно сгруппировать по различным признакам. Для того чтобы поместить рассылку в <a href="Catalog.РассылкиОтчетов.Form.ФормаГруппы/Help">группу</a>, выберите ее из <a href="Catalog.РассылкиОтчетов.Form.ФормаВыбораГруппы/Help">списка</a>. </div></li> -<li><strong>Отправлять</strong> - <strong>вид рассылки</strong>, определяющий цель: -<ul><li><strong>Отчеты указанным получателям</strong> - одинаковые отчеты отправляются одновременно всем получателям. Для этого вида рассылки отчетов предусмотрена не только отправка по электронной почте, но и возможность публикации сформированных отчетов в папке файлов приложения, в сетевом каталоге или на сайте FTP. -<ul><li>в поле <strong>Получатели</strong> выберите тип получателей - один из списков приложения (например, <a href="Catalog.Пользователи/Help">Пользователи</a>).</li></ul></li> -<li><strong>Свой отчет для каждого получателя</strong> - используется, если нужно персонализировать содержимое отправляемых отчетов по каждому получателю. В настройках отборов отчетов появляется возможность указать получателя рассылки. Таким образом, для каждого получателя будет сформирован собственный отчет с отбором по этому получателю. +<div><b>Входит в группу</b> - рассылки можно сгруппировать по различным признакам. Для того чтобы поместить рассылку в <a href="Catalog.РассылкиОтчетов.Form.ФормаГруппы/Help">группу</a>, выберите ее из <a href="Catalog.РассылкиОтчетов.Form.ФормаВыбораГруппы/Help">списка</a>. </div></li> +<li><strong>Отправлять</strong> - <strong>вид рассылки</strong>, определяющий цель: +<ul><li><strong>Отчеты указанным получателям</strong> - одинаковые отчеты отправляются одновременно всем получателям. Для этого вида рассылки отчетов предусмотрена не только отправка по электронной почте, но и возможность публикации сформированных отчетов в папке файлов приложения, в сетевом каталоге или на сайте FTP. +<ul><li>в поле <strong>Получатели</strong> выберите тип получателей - один из списков приложения (например, <a href="Catalog.Пользователи/Help">Пользователи</a>).</li></ul></li> +<li><strong>Свой отчет для каждого получателя</strong> - используется, если нужно персонализировать содержимое отправляемых отчетов по каждому получателю. В настройках отборов отчетов появляется возможность указать получателя рассылки. Таким образом, для каждого получателя будет сформирован собственный отчет с отбором по этому получателю. <ul><li>в поле <strong>Получатели</strong> выберите тип получателей.</li></ul></li> <li><strong>Только мне (личная рассылка автора)</strong> - отчеты получает по почте только пользователь, создавший эту рассылку (автор). Личные рассылки видны только автору. <ul><li> -<p><a name="ПочтовыйАдрес"><strong>Почтовый адрес</strong></a> - автоматически проставляется адрес электронной почты текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</p><strong></strong></li></ul></li></ul></li></ul><h3>Отчеты</h3> -<ul><li>На этой вкладке можно выбрать для рассылки один или несколько отчетов из <a href="Catalog.ВариантыОтчетов/Help">списка</a> с помощью кнопки <strong>Подобрать</strong>. +<p><a name="ПочтовыйАдрес"><strong>Почтовый адрес</strong></a> - автоматически проставляется адрес электронной почты текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</p><strong></strong></li></ul></li></ul></li></ul><h3>Отчеты</h3> +<ul><li>На этой вкладке можно выбрать для рассылки один или несколько отчетов из <a href="Catalog.ВариантыОтчетов/Help">списка</a> с помощью кнопки <strong>Подобрать</strong>. </li> -<li>С помощью кнопки <b>Предварительный просмотр</b> можно сформировать выбранный отчет. +<li>С помощью кнопки <b>Предварительный просмотр</b> можно сформировать выбранный отчет. </li> -<li><strong>Настройки отчета</strong> - выводятся настройки отчета, с помощью флажков можно выбрать нужные настройки и указать значения, по которым будет выведен отчет. При необходимости можно изменить настройки выбранного отчета. Для этого выберите нужное значение из списков. +<li><strong>Настройки отчета</strong> - выводятся настройки отчета, с помощью флажков можно выбрать нужные настройки и указать значения, по которым будет выведен отчет. При необходимости можно изменить настройки выбранного отчета. Для этого выберите нужное значение из списков. </li> -<li>Если выбран вид рассылки <strong>Свой отчет для каждого получателя</strong>, то с помощью соответствующей кнопки в настройках каждого отчета можно <strong>Указать получателя рассылки</strong> из списка <strong>Пользователи</strong>, для того чтобы для каждого получателя формировался свой отчет с показателями, доступными только для этого получателя. +<li>Если выбран вид рассылки <strong>Свой отчет для каждого получателя</strong>, то с помощью соответствующей кнопки в настройках каждого отчета можно <strong>Указать получателя рассылки</strong> из списка <strong>Пользователи</strong>, для того чтобы для каждого получателя формировался свой отчет с показателями, доступными только для этого получателя. </li> <li>В заголовке вкладки ведется количество отчетов, входящих в рассылку.</li></ul><h3>Расписание</h3> <ul><li> -<div>Для автоматической отправки отчетов с некоторым интервалом или в некоторые дни недели на вкладке можно описать, по каким дням, и в какое время приложение должно отправлять эту рассылку. На основании каждой рассылки отчетов в приложении формируются одноименные <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентные задания</a> "Рассылка отчетов".</div> +<div>Для автоматической отправки отчетов с некоторым интервалом или в некоторые дни недели на вкладке можно описать, по каким дням, и в какое время приложение должно отправлять эту рассылку. На основании каждой рассылки отчетов в приложении формируются одноименные <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентные задания</a> "Рассылка отчетов".</div> </li> <li> <div>Включите флажок <strong>Выполнять по расписанию</strong>. </div> </li> <li> -<div>Имеется возможность автоматического составления расписания с помощью кнопки <strong>Заполнить по шаблону</strong>. Выберите нужное расписание из списка, например, <strong>в первый день месяца</strong>. Расписание заполнится автоматически.</div> +<div>Имеется возможность автоматического составления расписания с помощью кнопки <strong>Заполнить по шаблону</strong>. Выберите нужное расписание из списка, например, <strong>в первый день месяца</strong>. Расписание заполнится автоматически.</div> </li> <li> -<div> Кроме этого, в приложении предусмотрена возможность самостоятельно выбрать п<a name="Периодичность">ериодичность расписания</a> (определяет частотность срабатывания рассылки, переключение данного параметра влияет на все настройки расписания):</div> +<div> Кроме этого, в приложении предусмотрена возможность самостоятельно выбрать п<a name="Периодичность">ериодичность расписания</a> (определяет частотность срабатывания рассылки, переключение данного параметра влияет на все настройки расписания):</div> <ul><li><strong>Ежедневно</strong> - рассылка будет выполняться с заданной частотой в днях. <ul><li>выберите <strong>Период повтора</strong>;</li></ul></li> <li><strong>Еженедельно</strong> - по выбранным дням недели. <ul><li>Выберите дни недели с помощью флажков.</li></ul></li> <li><strong>Ежемесячно</strong> - по выбранным месяцам в требуемый день месяца. <ul><li>Выберите месяцы с помощью флажков, укажите номер дня с начала или с конца месяца, в который будет производиться рассылка.</li></ul></li> -<li><strong>Произвольное</strong> - позволяет детально настроить каждый параметр расписания. Открывается окно <strong>Расписание</strong> для детальной разработки своего <a href="v8help://mngbase/jobschedule.lf">расписания</a>. При этом необязательно заполнять его сразу, после закрытия окна становится доступной кнопка <strong>Изменить</strong>, по которой можно вернуться к настройке расписания в любое время. В этом случае <strong>Время начала</strong> настраивается также в окне <strong>Расписание</strong>.</li></ul></li> -<li> Напишите <a name="ВремяНачала"><strong>Время начала</strong></a> запуска рассылки. +<li><strong>Произвольное</strong> - позволяет детально настроить каждый параметр расписания. Открывается окно <strong>Расписание</strong> для детальной разработки своего <a href="v8help://mngbase/jobschedule.lf">расписания</a>. При этом необязательно заполнять его сразу, после закрытия окна становится доступной кнопка <strong>Изменить</strong>, по которой можно вернуться к настройке расписания в любое время. В этом случае <strong>Время начала</strong> настраивается также в окне <strong>Расписание</strong>.</li></ul></li> +<li> Напишите <a name="ВремяНачала"><strong>Время начала</strong></a> запуска рассылки. </li> -<li>В поле <strong>Автор</strong> выберите пользователя из списка. По умолчанию приложение выбирает в качестве автора текущего пользователя, который создает рассылку. +<li>В поле <strong>Автор</strong> выберите пользователя из списка. По умолчанию приложение выбирает в качестве автора текущего пользователя, который создает рассылку. <ul><li>При запуске по расписанию рассылка выполняется от имени автора. </li></ul></li></ul><h3>Доставка</h3> -<ul dir="ltr"><li>На вкладке описываются все возможные способы доставки настраиваемой рассылки. Содержимое вкладки может меняться, в зависимости от <a href="#ВидРассылки">вида рассылки</a>. +<ul dir="ltr"><li>На вкладке описываются все возможные способы доставки настраиваемой рассылки. Содержимое вкладки может меняться, в зависимости от <a href="#ВидРассылки">вида рассылки</a>. </li> <li>Если выбрана <b>Личная рассылка автора</b>, то доставка выполняется только по электронной почте по единственному адресу, который указывается в поле <strong>Почтовый адрес</strong>. </li> <li>Если выбран <strong>Свой отчет для каждого получателя</strong>, то доставка также выполняется только по электронной почте, но уже не одному, а нескольким получателям. </li> -<li>Если выбраны <strong>Отчеты указанным получателям</strong>, то кроме доставки по почте появляется возможность сохранить (опубликовать) готовые отчеты. </li> -<ul><li>Для этого включите флажок <a name="Публиковать"><strong>Публикова</strong><strong>ть</strong></a> - признак необходимости публикации рассылки. Выберите соответствующее значение:</li> +<li>Если выбраны <strong>Отчеты указанным получателям</strong>, то кроме доставки по почте появляется возможность сохранить (опубликовать) готовые отчеты. </li> +<ul><li>Для этого включите флажок <a name="Публиковать"><strong>Публикова</strong><strong>ть</strong></a> - признак необходимости публикации рассылки. Выберите соответствующее значение:</li> <ul><li><a name="ВПапку"><strong>В папку</strong></a> - отчеты будут сохранены в указанную <a href="Catalog.ПапкиФайлов.Form.ФормаЭлемента/Help">папку</a> приложения. С помощью этого способа доставки можно организовать регулярную архивацию отчетов в папку файлов (при этом отключив отправку по электронной почте);</li> <li><a name="ВПапкуНаДиске"><strong>В сетевой каталог</strong></a> - отчеты будут сохранены в выбранный сетевой каталог. Запись производится с сервера, поэтому рекомендуется указывать сетевой путь в формате UNC, например: <b>\\server\folder\</b>. Укажите адрес этого каталога в поле Windows (если вы работаете на компьютере под управлением этой операционной системы) или в поле Linux (если вы работаете на компьютере под управлением Linux). <strong>Внимание!</strong> Данный способ доставки отчетов недоступен в приложении в Интернете;</li> <li><a name="НаFTP"><strong>На FTP ресурс</strong></a> - отчеты будут сохранены на ftp-сервере. Заполните необходимые <a href="Catalog.РассылкиОтчетов.Form.ПараметрыFTP/Help">параметры</a>.</li> -<li><b>Включать дату в имя файла</b> - Если при публикации рассылки включить флажок, то каждый файл получает уникальное наименование и после сохранения в папке не будет затерт при следующей рассылке. По умолчанию флажок выключен.</li></ul></ul><li><b>Проверить</b> - проверка настроек электронной почты путем отправки тестового сообщения. Тест считается успешным, если ошибок не возникло.</li> +<li><b>Включать дату в имя файла</b> - Если при публикации рассылки включить флажок, то каждый файл получает уникальное наименование и после сохранения в папке не будет затерт при следующей рассылке. По умолчанию флажок выключен.</li></ul></ul><li><b>Проверить</b> - проверка настроек электронной почты путем отправки тестового сообщения. Тест считается успешным, если ошибок не возникло.</li> <li><b>Отправлять по электронной почте</b> - признак использования электронной почты для отправки отчетов (или уведомлений). </li> -<li><a name="ВключитьВРассылку"><strong>Укажите</strong></a><strong> получателей</strong> - перейдите по ссылке, для того чтобы заполнить <a href="Catalog.РассылкиОтчетов.Form.ПолучателиРассылки/Help">список получателей</a> и исключений из получателей рассылки. Можно выбирать элементы или группы получателей. После заполнения ссылка принимает вид списка получателей: указывается первый получатель списка. +<li><a name="ВключитьВРассылку"><strong>Укажите</strong></a><strong> получателей</strong> - перейдите по ссылке, для того чтобы заполнить <a href="Catalog.РассылкиОтчетов.Form.ПолучателиРассылки/Help">список получателей</a> и исключений из получателей рассылки. Можно выбирать элементы или группы получателей. После заполнения ссылка принимает вид списка получателей: указывается первый получатель списка. </li> -<li>В поле <b>От</b> из выпадающего списка выберите <a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">электронную почту</a> для отправки. Поле является обязательным для заполнения, ввести электронную почту в поле вручную невозможно. +<li>В поле <b>От</b> из выпадающего списка выберите <a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">электронную почту</a> для отправки. Поле является обязательным для заполнения, ввести электронную почту в поле вручную невозможно. </li> <li>Если используются оба способа доставки (и публикация, и отправка по почте), то можно указать, что по почте нужно <strong>Отправлять только уведомление</strong> о том, что отчет сформирован. Сами отчеты не будут присоединяться к письму, а будут помещаться в каталог публикации. В этом случае письмо-уведомление будет содержать адрес, по которому находится сформированный отчет.</li> -<li>Для того чтобы опубликованный или отправленный отчет получил уникальное наименование, можно выбрать из выпадающего списка <b>Шаблон наименований</b>. Выберите шаблон, включающий в себя параметры формата, периода или даты. Можно выбрать шаблон с нужным форматом даты рассылки, а в <b>Конструкторе форматной строки</b> задать <b>Формат даты</b>, например, <b>dd.MM.yyyy (12.06.2023)</b>. Если в рассылке вложено несколько отчетов,<b> Шаблоном наименований</b> можно воспользоваться для каждого отчета по отдельности.</li> -<li>После установки флажка <strong>Отправлять по электронной почте</strong> становятся доступными <a name="ТемаИТекстПисьма"><strong>Тема и текст письма</strong></a>. Могут содержать шаблоны <a name="Параметр"><strong>параметров</strong></a> рассылки. По умолчанию шаблон письма уже сформирован автоматически. Для добавления параметров в письмо нажмите <strong>Параметр</strong>, выберите нужное значение: +<li>Для того чтобы опубликованный или отправленный отчет получил уникальное наименование, можно выбрать из выпадающего списка <b>Шаблон наименований</b>. Выберите шаблон, включающий в себя параметры формата, периода или даты. Можно выбрать шаблон с нужным форматом даты рассылки, а в <b>Конструкторе форматной строки</b> задать <b>Формат даты</b>, например, <b>dd.MM.yyyy (12.06.2023)</b>. Если в рассылке вложено несколько отчетов,<b> Шаблоном наименований</b> можно воспользоваться для каждого отчета по отдельности.</li> +<li>После установки флажка <strong>Отправлять по электронной почте</strong> становятся доступными <a name="ТемаИТекстПисьма"><strong>Тема и текст письма</strong></a>. Могут содержать шаблоны <a name="Параметр"><strong>параметров</strong></a> рассылки. По умолчанию шаблон письма уже сформирован автоматически. Для добавления параметров в письмо нажмите <strong>Параметр</strong>, выберите нужное значение: <ul><li><strong>[</strong><strong>ДатаВыполнения]</strong> - дата рассылки. Параметр может быть указан в <u><a href="#НаименованиеАрхива">имени архива</a></u>. </li> <li> @@ -86,55 +86,55 @@ </li> <li> <div style="MARGIN-RIGHT: 0px"><strong>[СпособДоставки]</strong> - представление ресурса, на котором был опубликован отчет.</div></li></ul></li> -<li>Если включить флажок <b>Прикреплять отчеты во вложения</b>, то письмо будет отправлено с вложенным файлом отчета. </li> +<li>Если включить флажок <b>Прикреплять отчеты во вложения</b>, то письмо будет отправлено с вложенным файлом отчета. </li> <li> -<div style="MARGIN-RIGHT: 0px">По умолчанию установлен формат письма <strong>HTML</strong>, можно изменить его на <strong>Обычный</strong>. В формате HTML доступны стандартные команды форматирования текста (часть из них размещена в виде кнопок, остальные можно найти в меню <strong>Еще</strong>).</div></li></ul><div style="margin-right: 0px;"> -<ul><li>В поле <strong>Адрес ответа</strong> укажите E-mail адрес, на который будут высылаться ответы на рассылку. Можно указать обратный адрес, для того чтобы получателям рассылки можно было отправить на него предложения и замечания по поводу присылаемых в рассылке отчетов (с помощью кнопки Ответить в полученном письме с отчетами. Этот адрес невозможно использовать для анализа результатов рассылки, т.к. он предназначен для ответов реальных пользователей и письма с этого адреса не придут автоматически. Адрес ответа может отличаться от адреса почты, с которой обычно осуществляется рассылка.</li> -<li>Включите флажок <strong>Отправлять письма через скрытые копии</strong>, для того чтобы получатели не знали, кто еще получает отчеты из данной рассылки.</li> -<li>По умолчанию рассылка отправляется со статусом важности <img src="CommonPicture.ВажностьНеЗадана"></img><b>Обычная, </b>если необходимо обратить особое внимание на отправляемую рассылку, то можно установить<img src="CommonPicture.ВажностьВысокая"></img><b> Высокую </b>важность. Если рассылка отправлена, например,  только для вас, то можно установить <img src="CommonPicture.ВажностьНизкая"></img><b>Низкую</b> важность. </li> +<div style="MARGIN-RIGHT: 0px">По умолчанию установлен формат письма <strong>HTML</strong>, можно изменить его на <strong>Обычный</strong>. В формате HTML доступны стандартные команды форматирования текста (часть из них размещена в виде кнопок, остальные можно найти в меню <strong>Еще</strong>).</div></li></ul><div style="margin-right: 0px;"> +<ul><li>В поле <strong>Адрес ответа</strong> укажите E-mail адрес, на который будут высылаться ответы на рассылку. Можно указать обратный адрес, для того чтобы получателям рассылки можно было отправить на него предложения и замечания по поводу присылаемых в рассылке отчетов (с помощью кнопки Ответить в полученном письме с отчетами. Этот адрес невозможно использовать для анализа результатов рассылки, т.к. он предназначен для ответов реальных пользователей и письма с этого адреса не придут автоматически. Адрес ответа может отличаться от адреса почты, с которой обычно осуществляется рассылка.</li> +<li>Включите флажок <strong>Отправлять письма через скрытые копии</strong>, для того чтобы получатели не знали, кто еще получает отчеты из данной рассылки.</li> +<li>По умолчанию рассылка отправляется со статусом важности <img src="CommonPicture.ВажностьНеЗадана"></img><b>Обычная, </b>если необходимо обратить особое внимание на отправляемую рассылку, то можно установить<img src="CommonPicture.ВажностьВысокая"></img><b> Высокую </b>важность. Если рассылка отправлена, например, только для вас, то можно установить <img src="CommonPicture.ВажностьНизкая"></img><b>Низкую</b> важность. </li> <li>Если пользователь просматривает почту на мобильном устройстве, то для удобства можно отобразить отчет в теле письма. Для этого включите флажок<b> Вставлять отчеты в текст письма.</b></li> -<li>Для того чтобы посмотреть, как будет выглядеть письмо в рассылке отчетов нажмите на кнопку <img src="StdPicture.ShowData"></img> <b>Предпросмотр шаблона</b>.</li></ul></div> -<h3><span style="font-size: 13.4399995803833px;">Выбор формата отчета</span></h3> -<ul><li><b>Форматы сохранения отчетов (по умолчанию) </b>- определяет форматы, в которых будут по умолчанию сохранены отчеты. Выберите общие форматы для всех отчетов с помощью флажков. Можно выбрать несколько форматов. </li> +<li>Для того чтобы посмотреть, как будет выглядеть письмо в рассылке отчетов нажмите на кнопку <img src="StdPicture.ShowData"></img><b>Предпросмотр шаблона</b>.</li></ul></div> +<h3>Выбор формата отчета</h3> +<ul><li><b>Форматы сохранения отчетов (по умолчанию) </b>- определяет форматы, в которых будут по умолчанию сохранены отчеты. Выберите общие форматы для всех отчетов с помощью флажков. Можно выбрать несколько форматов. </li> <li>В таблице ниже для каждого отчета можно задать свой набор форматов в колонке <strong>Форматы</strong>.</li> <li> -<div style="margin-right: 0px;">С помощью соответствующего флажка можно <strong>Транслитерировать имена файлов</strong>. В этом случае сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл <strong>Отчет.mxl</strong> будет сохранен с именем <strong>Otchet.mxl</strong>.</div></li> -<li>Установите флажок <b>Архивировать в ZIP</b>, для того чтобы архивировать сформированные отчеты в формате <strong>.zip</strong>. Рекомендуется включать архивацию, если отчеты отправляются по электронной почте, для снижения объема вложений. +<div style="margin-right: 0px;">С помощью соответствующего флажка можно <strong>Транслитерировать имена файлов</strong>. В этом случае сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл <strong>Отчет.mxl</strong> будет сохранен с именем <strong>Otchet.mxl</strong>.</div></li> +<li>Установите флажок <b>Архивировать в ZIP</b>, для того чтобы архивировать сформированные отчеты в формате <strong>.zip</strong>. Рекомендуется включать архивацию, если отчеты отправляются по электронной почте, для снижения объема вложений. </li> -<ul><li>Становится доступным поле <b>Наименование архива</b> (наименование архива формируется автоматически по указанному в поле шаблону). +<ul><li>Становится доступным поле <b>Наименование архива</b> (наименование архива формируется автоматически по указанному в поле шаблону). </li> <li>С помощью команды <strong>Параметр</strong> контекстного меню по правой кнопке мыши в поле <strong>Наименование архива</strong> можно изменить шаблон наименования. Для изменения доступны параметры: <ul><li><strong>Дата рассылки</strong>; </li> <li><strong>Наименование рассылки</strong>.</li></ul></li> -<li>При необходимости напишите <strong>Пароль</strong> архива.</li></ul></ul><h3>Пароли и шифрование </h3> -<ul><li><b>Пароли и шифрование - </b><span style="font-size: 8.5pt; font-family: Verdana, sans-serif;">Рассылка отчетов, которая содержит какую-либо </span><span style="font-family: Verdana, sans-serif; font-size: 11.333333015441895px;">конфиденциальную информацию,</span><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> может проходить по открытым (незащищенным) каналам электронной почты и может быть небезопасна для получателей.</span> <span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Чтобы защитить данную рассылку, нужно зашифровать отчет с помощью</span><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> </span><b style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Сертификата электронной подписи</b><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> </span><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">(сертификат открытого ключа) получателя, если он существует для соответствующего физического лица.</span></li> -<li><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">В таком случае, только получатель рассылки сможет расшифровать и посмотреть отчеты (с помощью закрытого ключа).</span><span style="font-size: 8.5pt; font-family: Verdana, sans-serif;"> <a href="Catalog.РассылкиОтчетов.Form.ПаролиШифрование/Help">Шифрование отчетов</a> применимо - при отправке <b>Своего отчета для каждого получателя</b> и при <b>Личной рассылке</b> автора.  </span><span style="color: windowtext;"> </span></li></ul><h3>Выполнение рассылки</h3> +<li>При необходимости напишите <strong>Пароль</strong> архива.</li></ul></ul><h3>Пароли и шифрование </h3> +<ul><li><b>Пароли и шифрование - </b>Рассылка отчетов, которая содержит какую-либо конфиденциальную информацию, может проходить по открытым (незащищенным) каналам электронной почты и может быть небезопасна для получателей. Чтобы защитить данную рассылку, нужно зашифровать отчет с помощью <b style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Сертификата электронной подписи</b> (сертификат открытого ключа) получателя, если он существует для соответствующего физического лица.</li> +<li>В таком случае, только получатель рассылки сможет расшифровать и посмотреть отчеты (с помощью закрытого ключа). <a href="Catalog.РассылкиОтчетов.Form.ПаролиШифрование/Help">Шифрование отчетов</a> применимо + при отправке <b>Своего отчета для каждого получателя</b> и при <b>Личной рассылке</b> автора. </li></ul><h3>Выполнение рассылки</h3> <div> -<ul><li>В колонке <b>Отправлять пустой</b> установите флажок для отправки сформированного отчета, даже если он пустой. По умолчанию флажок снят. Отчеты с графикой всегда считаются не пустыми.</li></ul></div> +<ul><li>В колонке <b>Отправлять пустой</b> установите флажок для отправки сформированного отчета, даже если он пустой. По умолчанию флажок снят. Отчеты с графикой всегда считаются не пустыми.</li></ul></div> <ul><li> -<div>Нажмите <strong>Выполнить сейчас</strong>, для того чтобы выполнить рассылку от имени текущего пользователя. Рассылка будет выполнена, если у нее установлен флажок <strong>Подготовлена</strong>.</div></li></ul><h3>Просмотр событий рассылки</h3> -<ul><li>Нажмите <b>Отчеты </b><b>-</b> <a name="СобытияРассылки"><strong>События рассылки</strong></a>, для того чтобы открыть журнал регистрации, предварительно отфильтровав его по событиям рассылки со времени последнего запуска.</li></ul><h3>Анализ результатов рассылки</h3> -<div>Если электронное письмо с рассылкой отчетов отправилось не всем получателям, то при открытии рассылки отчетов в приложении отобразится предупреждение <img src="CommonPicture.Предупреждение"></img> с возможностью повторить данную рассылку по тем получателям, кому не было отправлено электронное письмо.</div> +<div>Нажмите <strong>Выполнить сейчас</strong>, для того чтобы выполнить рассылку от имени текущего пользователя. Рассылка будет выполнена, если у нее установлен флажок <strong>Подготовлена</strong>.</div></li></ul><h3>Просмотр событий рассылки</h3> +<ul><li>Нажмите <b>Отчеты </b><b>-</b> <a name="СобытияРассылки"><strong>События рассылки</strong></a>, для того чтобы открыть журнал регистрации, предварительно отфильтровав его по событиям рассылки со времени последнего запуска.</li></ul><h3>Анализ результатов рассылки</h3> +<div>Если электронное письмо с рассылкой отчетов отправилось не всем получателям, то при открытии рассылки отчетов в приложении отобразится предупреждение <img src="CommonPicture.Предупреждение"></img> с возможностью повторить данную рассылку по тем получателям, кому не было отправлено электронное письмо.</div> <div><br></div> <div> <p>Для контроля результатов рассылки также можно использовать:</p> <ul><li>Контроль папки <b>Отправленные</b>. Отправленные письма обычно помещаются в эту папку на почтовом сервере. Если это не так, то нужно проверить настройки почтового сервера и исправить их.</li> <li>Дополнительные адреса для рассылки. Если в папку <b>Отправленные</b> письма не попадают или необходим дополнительный контроль, можно добавить свой почтовый ящик в список адресов рассылки. В настройке почты можно включить флажок <b>Отправлять скрытые копии писем на этот адрес</b> (тогда другие адресаты не увидят копии писем, флажок работает только для почтовых серверов POP), настроить правило для сортировки входящих писем, для того чтобы такие письма перемещались в нужную папку.</li> -<li><span style="font-family: Verdana, sans-serif; font-size: 8.5pt; text-indent: -18pt;"><b><a href="Report.КонтрольРассылкиОтчетов/Help">Контроль рассылки отчетов</a> </b> - с помощью данного отчета можно осуществить проверку рассылки по всем получателям. </span></li></ul></div> +<li><b><a href="Report.КонтрольРассылкиОтчетов/Help">Контроль рассылки отчетов</a> </b> - с помощью данного отчета можно осуществить проверку рассылки по всем получателям. </li></ul></div> <p></p> <h3>Работа в клиент-серверном режиме</h3> <p></p> -<ul><li>При работе приложения в клиент-серверном режиме необходимо иметь в виду, что рассылка выполняется на сервере 1С:Предприятия. +<ul><li>При работе приложения в клиент-серверном режиме необходимо иметь в виду, что рассылка выполняется на сервере 1С:Предприятия. </li> <li>Путь к одному ресурсу может отличаться для клиента и сервера, в зависимости от их сетевого расположения и операционных систем. </li> -<li>Если сервер 1С:Предприятия работает под Windows, то необходимо убедиться, что сетевой каталог Windows доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами к сетевому каталогу. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. +<li>Если сервер 1С:Предприятия работает под Windows, то необходимо убедиться, что сетевой каталог Windows доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами к сетевому каталогу. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. </li> -<li>Поле сетевой каталог Linux предназначено для серверов 1С:Предприятия, работающих под управлением ОС Linux. В этом поле можно указать только локальный путь, например, <strong>/home/path</strong>. +<li>Поле сетевой каталог Linux предназначено для серверов 1С:Предприятия, работающих под управлением ОС Linux. В этом поле можно указать только локальный путь, например, <strong>/home/path</strong>. </li> -<li>Для того чтобы использовать UNC путь, нужно сделать на него ссылку. Для этого под правами администратора (<strong>root</strong>) сделайте следующее: +<li>Для того чтобы использовать UNC путь, нужно сделать на него ссылку. Для этого под правами администратора (<strong>root</strong>) сделайте следующее: <ul><li><strong>mkdir folder<br></strong>--- вместо <strong>folder</strong> напишите имя каталога. например в каталоге <strong>/home</strong> выполните команду <strong>mkdir shared</strong>, для того чтобы создать каталог <strong>shared</strong> с полным путем <strong>/home/shared</strong>. </li> <li><strong>mount -t cifs //server/share folder -o //domain/user, password=pwd</strong><br>- где <strong>//server/share</strong> - UNC путь к другому компьютеру , <strong>folder</strong> - путь каталога на Linux компьютере, например <strong>\home\shared</strong>, <strong>//domain/user</strong> - имя домена/пользователя, если нужно, <strong>pwd</strong> - пароль пользователя (если <br>нужно). @@ -143,4 +143,4 @@ </li> <li>После этого в пути к тому указываем <strong>folder</strong>, например <strong>/home/shared</strong>. </li></ul></li> <li>Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.</li></ul><h3>См. также: </h3> -<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file +<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index d788d08d2..0ced6e0f1 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -716,8 +716,7 @@ УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Подготовлена"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница "Расписание" +#Область СтраницаРасписание &НаКлиенте Процедура ВыполнятьПоРасписаниюПриИзменении(Элемент) @@ -813,8 +812,9 @@ УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ДеньВМесяце"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница "Доставка" +#КонецОбласти + +#Область СтраницаДоставка &НаКлиенте Процедура ТипПолучателейРассылкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -1038,8 +1038,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница "Дополнительно" +#КонецОбласти + +#Область СтраницаДополнительно &НаКлиенте Процедура ФорматыПоУмолчаниюНажатие(Элемент, СтандартнаяОбработка) @@ -1176,6 +1177,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыОтчеты &НаКлиенте @@ -1466,8 +1469,7 @@ #Область ОбработчикиКомандФормы -//////////////////////////////////////////////////////////////////////////////// -// Командная панель +#Область КоманднаяПанель &НаКлиенте Процедура КомандаЗаписатьИЗакрыть(Команда) @@ -1533,8 +1535,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница "Отчеты" +#КонецОбласти + +#Область СтраницаОтчеты &НаКлиенте Процедура ДобавитьОтчет(Команда) @@ -1882,8 +1885,9 @@ Возврат Неопределено; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Страница "Расписание" +#КонецОбласти + +#Область СтраницаРасписание &НаКлиенте Процедура УстановитьПометки(Команда) @@ -1914,8 +1918,9 @@ СписокВариантов.ПоказатьВыборЭлемента(Обработчик, НСтр("ru = 'Выберите шаблон расписания.'")); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница "Доставка" +#КонецОбласти + +#Область СтраницаДоставка &НаКлиенте Процедура ДобавитьИзменитьШаблонДатыРассылки(Команда) @@ -2164,8 +2169,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница "Дополнительно" +#КонецОбласти + +#Область СтраницаДополнительно &НаКлиенте Процедура СброситьФорматПоУмолчанию(Команда) @@ -2267,10 +2273,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент. +#Область Клиент &НаКлиенте Процедура НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка) @@ -3118,8 +3125,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент, Сервер +#КонецОбласти + +#Область КлиентСервер &НаКлиентеНаСервереБезКонтекста Функция ПарольСкрыт() @@ -3643,8 +3651,9 @@ Возврат Секунды / 60 / 60; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера, Сервер +#КонецОбласти + +#Область ВызовСервераСервер &НаСервереБезКонтекста Функция ПочтовыеАдресаПолучателя(Получатель, СписокЗначений) @@ -4257,8 +4266,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура УстановитьУсловноеОформление() @@ -5034,8 +5044,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Запись объекта +#КонецОбласти + +#Область ЗаписьОбъекта &НаКлиенте Процедура ЗаписатьНаКлиенте(Результат, ПараметрыЗаписи) Экспорт @@ -5219,8 +5230,9 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды -//////////////////////////////////////////////////////////////////////////////// -// Копия команды "Выполнить сейчас" для поддержки асинхронности. +#КонецОбласти + +#Область КопияКомандыВыполнитьСейчасДляПоддержкиАсинхронности &НаКлиенте Процедура ВыполнитьСейчас() @@ -5235,8 +5247,9 @@ РассылкаОтчетовКлиент.ВыполнитьСейчас(ПараметрыЗапуска); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Копия команды "События рассылки..." для поддержки асинхронности. +#КонецОбласти + +#Область КопияКомандыСобытияРассылкиДляПоддержкиАсинхронности &НаКлиенте Процедура СобытияРассылки() @@ -5253,4 +5266,6 @@ Возврат РассылкаОтчетов.ПараметрыЖурналаРегистрации(Рассылка); КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html index 834800b89..57f77cb38 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html @@ -1,58 +1,44 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Предназначен для подготовки рассылок с целью автоматического формирования <a href="Catalog.ВариантыОтчетов/Help">отчетов</a> и доставки сформированных отчетов получателям.</p> +<p>Предназначен для подготовки рассылок с целью автоматического формирования <a href="Catalog.ВариантыОтчетов/Help">отчетов</a> и доставки сформированных отчетов получателям.</p> <p>Открывается по команде <strong>Рассылки отчетов</strong> из раздела <strong>Сервисные подсистемы</strong>.</p> -<p class="Paragraph0c" style="margin-left:0cm"><span style="font-size:8.5pt; -line-height:120%;font-family:"Verdana",sans-serif;mso-fareast-font-family:"Times New Roman"; -mso-fareast-language:RU">Нередко у пользователей возникает потребность в получении -того или иного отчета в определенный момент времени. </span><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">Например, в начале каждого рабочего дня +<p></p><p>Нередко у пользователей возникает потребность в получении +того или иного отчета в определенный момент времени. Например, в начале каждого рабочего дня менеджеру нужно узнать информацию о текущем состоянии взаиморасчетов со своими клиентами. Или в конце каждой недели директор хочет видеть состояние основных финансовых -показателей фирмы, но редко заходит в </span>приложение<span style="font-family: Verdana, sans-serif; font-size: 8.5pt;">. Также, при выплате заработной -платы, работодатель обязан извещать в письменной форме каждого сотрудника.</span><span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> </span></p> -<p class="Paragraph0c" style="margin-left:0cm"><span style="font-size:8.5pt; -line-height:120%;font-family:"Verdana",sans-serif;mso-fareast-font-family:"Times New Roman"; -mso-fareast-language:RU">Рассылка отчетов позволяет автоматизировать этот -процесс так, что, не открывая <span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11.199999809265137px;">приложение</span>, можно получить в нужное время готовый -отчет на свою электронную почту или в определенный каталог в виде файла.<o:p></o:p></span></p> -<p class="Paragraph0c" style="margin-left:0cm"><span style="font-size:8.5pt; -line-height:120%;font-family:"Verdana",sans-serif;mso-fareast-font-family:"Times New Roman"; -mso-fareast-language:RU">Возможность создать несколько разных рассылок упрощает +показателей фирмы, но редко заходит в приложение. Также, при выплате заработной +платы, работодатель обязан извещать в письменной форме каждого сотрудника. </p> +<p></p><p>Рассылка отчетов позволяет автоматизировать этот +процесс так, что, не открывая приложение, можно получить в нужное время готовый +отчет на свою электронную почту или в определенный каталог в виде файла.</p> +<p></p><p>Возможность создать несколько разных рассылок упрощает работу. Каждая отдельная рассылка, как правило, логически объединяет несколько -отчетов, или несколько получателей, или имеет особенную периодичность доставки.<o:p></o:p></span></p> -<p> - - - - - - - -</p> -<p class="Note" style="margin-left:0cm"><span style="font-size: 8.5pt; line-height: 120%; font-family: Verdana, sans-serif;">Например, одна рассылка может быть +отчетов, или несколько получателей, или имеет особенную периодичность доставки.</p> +<p></p> +<p>Например, одна рассылка может быть предназначена исключительно для директора и руководства фирмы. Другая рассылка может содержать отчеты, которые отправляются сотрудникам. Третья рассылка может -содержать отчеты, формируемые для контрагентов по их требованию.<o:p></o:p></span></p> -<p>Подготовленные рассылки отчетов могут выполняться автоматически по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентноеЗадание/Help">регламентного задания</a> "Рассылка отчетов" или запускаться вручную.</p> +содержать отчеты, формируемые для контрагентов по их требованию.</p> +<p>Подготовленные рассылки отчетов могут выполняться автоматически по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентноеЗадание/Help">регламентного задания</a> "Рассылка отчетов" или запускаться вручную.</p> <p><a name="Реквизиты">В</a> списке выводится:</p> -<ul><li><a name="Наименование"><strong>Наименование</strong></a> - полное наименование рассылки или группы рассылок; +<ul><li><a name="Наименование"><strong>Наименование</strong></a> - полное наименование рассылки или группы рассылок; </li> -<li><a name="Активна"><strong>Подготовлена</strong></a> - флажок готовности рассылки к выполнению<img src="CommonPicture.Успешно"></img>. Неподготовленные рассылки не будут выполнены; +<li><a name="Активна"><strong>Подготовлена</strong></a> - флажок готовности рассылки к выполнению<img src="CommonPicture.Успешно"></img>. Неподготовленные рассылки не будут выполнены; </li> <li><strong>Последний запуск</strong> - дата и время последнего запуска рассылки, в этом же поле выводится значок <img src="CommonPicture.СостояниеОбменаДаннымиОшибка"></img>, если рассылка прошла неудачно. </li> -<li><a name="Расписание"><strong>Расписание</strong></a> -  расписание рассылки, представленное в виде текста; +<li><a name="Расписание"><strong>Расписание</strong></a> - расписание рассылки, представленное в виде текста; </li> -<li><a name="Расписание"><strong>Успешный запуск </strong></a>- дата последней успешной рассылки.</li> -<li>С помощью команды <strong>Еще</strong> <strong>- Изменить форму</strong> можно вывести дополнительную информацию о рассылках: -<ul><li><a name="Автор"><strong>Ответственный</strong></a> - автор рассылки, от имени которого рассылка будет выполняться по расписанию; +<li><a name="Расписание"><strong>Успешный запуск </strong></a>- дата последней успешной рассылки.</li> +<li>С помощью команды <strong>Еще</strong> <strong>- Изменить форму</strong> можно вывести дополнительную информацию о рассылках: +<ul><li><a name="Автор"><strong>Ответственный</strong></a> - автор рассылки, от имени которого рассылка будет выполняться по расписанию; </li> <li><strong>Состояние</strong> - результат последнего запуска рассылки (принимает значение <strong>Выполнена </strong>или <strong>Не выполнена</strong>); </li> -<li><strong>Архивировать</strong> - в поле проставляется флажок, если в рассылке установлен флажок <strong>Архивировать в ZIP</strong>; +<li><strong>Архивировать</strong> - в поле проставляется флажок, если в рассылке установлен флажок <strong>Архивировать в ZIP</strong>; </li> <li><strong>Кому</strong> - указывается справочник, из которого выбирались получатели рассылки; </li> -<li><strong>Почтовый адрес </strong>- если отправлялось по электронной почте, в поле проставляется значение <strong>Электронная почта</strong>.</li></ul></li></ul><h3>Ввод рассылки</h3> +<li><strong>Почтовый адрес </strong>- если отправлялось по электронной почте, в поле проставляется значение <strong>Электронная почта</strong>.</li></ul></li></ul><h3>Ввод рассылки</h3> <ul><li> <div>Нажмите <strong>Создать</strong>, введите необходимые <a href="Catalog.РассылкиОтчетов.Form.ФормаЭлемента/Help">поля</a>.</div></li></ul><h3>Группировка рассылок</h3> <ul><li> @@ -62,8 +48,8 @@ mso-fareast-language:RU">Возможность создать нескольк <div>С помощью мыши перетащите рассылки в нужные группы.</div></li></ul><h3>Запуск рассылок</h3> <ul><li>Нажмите <strong>Выполнить сейчас</strong>, для того чтобы запустить выбранные рассылки и группы рассылок от имени текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> в любой момент времени. </li></ul><h3>Отчеты</h3> <div> -<ul><li>Для расследования ошибок, возникших при выполнении рассылки, предусмотрена кнопка <strong>События рассылки</strong>, которая показывает события <a href="DataProcessor.ЖурналРегистрации/Help">журнала регистрации</a> с отбором по этой рассылке.</li> -<li><a href="Report.КонтрольРассылкиОтчетов/Help" style="font-weight: bold;">Контроль рассылки отчетов </a>-<b> </b>предназначен для анализа истории рассылки отчетов, предоставляет информацию,<span style="font-family: Verdana, sans-serif; font-size: 8.5pt;"> когда, кому и с каким результатом были разосланы отчеты. </span> -<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 8.5pt; font-family: Verdana, sans-serif;"><o:p></o:p></span></p></li></ul></div> +<ul><li>Для расследования ошибок, возникших при выполнении рассылки, предусмотрена кнопка <strong>События рассылки</strong>, которая показывает события <a href="DataProcessor.ЖурналРегистрации/Help">журнала регистрации</a> с отбором по этой рассылке.</li> +<li><a href="Report.КонтрольРассылкиОтчетов/Help" style="font-weight: bold;">Контроль рассылки отчетов </a>-<b> </b>предназначен для анализа истории рассылки отчетов, предоставляет информацию, когда, кому и с каким результатом были разосланы отчеты. +<p></p></li></ul></div> <h3>См. также: </h3> -<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file +<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html index f3aac99f3..6b0e77ca0 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html @@ -1,9 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> -<p>Предназначен для выбора роли исполнителя.</p> -<p>Открывается по кнопке <strong>Выбрать</strong> из поля <strong>Роль исполнителя</strong> <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a> и окон подбора ролей исполнителей.</p> -<p><a href="Catalog.РолиИсполнителей/Help">Роли исполнителей</a> могут использоваться бизнес-процессами для ролевой маршрутизации <a href="Task.ЗадачаИсполнителя/Help">задач</a>. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, <strong>Старший по залу</strong>), а соответствие <a href="Catalog.Пользователи/Help">пользователей</a> ролям задается в списке <a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> и используется приложением для доставки поручений конкретным пользователям. В определенных случаях роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекты адресации</a>. Например, у роли <strong>Руководитель проектов</strong> могут присутствовать основной объект адресации <strong>Подразделение</strong> и дополнительный объект <strong>Проект</strong>. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется <a href="Task.ЗадачаИсполнителя.Form.ФормаЗадачи/Help">задача</a>.</p> -<p>Соответствие исполнителей ролям и объектам адресации задается перед началом работы с бизнес-процессами и задачами, используется приложением для доставки поручений конкретным исполнителям. </p> -<p>Список ролей поставляется в составе приложения, но может быть расширен при необходимости. </p> +<p>Предназначен для выбора роли исполнителя.</p> +<p>Открывается по кнопке <strong>Выбрать</strong> из поля <strong>Роль исполнителя</strong> <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a> и окон подбора ролей исполнителей.</p> +<p><a href="Catalog.РолиИсполнителей/Help">Роли исполнителей</a> могут использоваться бизнес-процессами для ролевой маршрутизации <a href="Task.ЗадачаИсполнителя/Help">задач</a>. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, <strong>Старший по залу</strong>), а соответствие <a href="Catalog.Пользователи/Help">пользователей</a> ролям задается в списке <a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> и используется приложением для доставки поручений конкретным пользователям. В определенных случаях роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекты адресации</a>. Например, у роли <strong>Руководитель проектов</strong> могут присутствовать основной объект адресации <strong>Подразделение</strong> и дополнительный объект <strong>Проект</strong>. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется <a href="Task.ЗадачаИсполнителя.Form.ФормаЗадачи/Help">задача</a>.</p> +<p>Соответствие исполнителей ролям и объектам адресации задается перед началом работы с бизнес-процессами и задачами, используется приложением для доставки поручений конкретным исполнителям. </p> +<p>Список ролей поставляется в составе приложения, но может быть расширен при необходимости. </p> <p>Роли, на которые не назначено ни одного исполнителя, выделяются красным. Не следует допускать таких ситуаций, так как это может привести к возникновению задач, не исполненных в срок. Для контроля таких задач предназначен отчет <a href="Report.ЗависшиеЗадачи/Help">Зависшие задачи</a>. </p> <p>В списке выводится:</p> <ul><li><strong>Наименование</strong> - полное наименование роли; @@ -15,6 +15,6 @@ <li><strong>Комментарий</strong> - описание роли, выводится в нижней части списка.</li></ul><h3>Выбор роли исполнителя</h3> <ul><li>Выделите нужную роль, нажмите <strong>Выбрать</strong>. </li> -<li>Также для выбора роли можно воспользоваться двойным щелчком мыши.</li></ul><h3>Ввод новой роли</h3> -<ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.РолиИсполнителей.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>См. также: </h3> +<li>Также для выбора роли можно воспользоваться двойным щелчком мыши.</li></ul><h3>Ввод новой роли</h3> +<ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.РолиИсполнителей.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>См. также: </h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl index b28844514..17527aced 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Module.bsl @@ -63,8 +63,8 @@ ТекущийВнешнийПользователь = ВнешниеПользователи.ТекущийВнешнийПользователь(); ОбъектАвторизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийВнешнийПользователь, "ОбъектАвторизации"); СтрокаОтбораВТекстеЗапроса = СтрЗаменить( - "ГДЕ РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = ЗНАЧЕНИЕ(Справочник.%Имя%.ПустаяСсылка)", // @query-part - "%Имя%", ОбъектАвторизации.Метаданные().Имя); + "ГДЕ РолиИсполнителейНазначениеПереопределяемый.ТипПользователей = ЗНАЧЕНИЕ(Справочник.%Имя%.ПустаяСсылка)", + "%Имя%", ОбъектАвторизации.Метаданные().Имя); // @query-part-1 Возврат СтрокаОтбораВТекстеЗапроса; КонецФункции diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html index d61a7113c..6534805fe 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html @@ -1,17 +1,17 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Описание свойств роли исполнителя.</p><a name="СтандартныеПодсистемы.Пользователи"> </a> -<p><a name="СтандартныеПодсистемы.Пользователи"></a><a href="Catalog.РолиИсполнителей/Help">Роли исполнителей</a> могут использоваться <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессами</a> для ролевой маршрутизации <a href="Task.ЗадачаИсполнителя/Help">задач</a>. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, <strong>Старший по залу</strong>), а соответствие <a href="Catalog.Пользователи/Help">пользователей</a> ролям задается в списке <a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> и используется приложением для доставки поручений конкретным пользователям. </p> +<p><a name="СтандартныеПодсистемы.Пользователи"></a><a href="Catalog.РолиИсполнителей/Help">Роли исполнителей</a> могут использоваться <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессами</a> для ролевой маршрутизации <a href="Task.ЗадачаИсполнителя/Help">задач</a>. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, <strong>Старший по залу</strong>), а соответствие <a href="Catalog.Пользователи/Help">пользователей</a> ролям задается в списке <a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> и используется приложением для доставки поручений конкретным пользователям. </p> <p>В определенных случаях роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекты адресации</a>. Например, у роли <strong>Руководитель проектов</strong> могут присутствовать основной объект адресации <strong>Подразделение</strong> и дополнительный объект <strong>Проект</strong>. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется <a href="Task.ЗадачаИсполнителя.Form.ФормаЗадачи/Help">задача</a>.</p> -<p>Список ролей поставляется в составе приложения, но может быть расширен при необходимости.</p> +<p>Список ролей поставляется в составе приложения, но может быть расширен при необходимости.</p> <h3>Сведения о роли исполнителя</h3> -<ul><li>В поле <strong>Наименование</strong> напишите полное наименование роли; +<ul><li>В поле <strong>Наименование</strong> напишите полное наименование роли; </li> <li><strong>Код</strong> - проставляется автоматически. </li> -<li>В поле <strong>Краткое представление</strong> напишите сокращенное наименование роли для удобства использования. По умолчанию в это поле автоматически копируется <strong>Код</strong>. +<li>В поле <strong>Краткое представление</strong> напишите сокращенное наименование роли для удобства использования. По умолчанию в это поле автоматически копируется <strong>Код</strong>. </li> -<li>В поле <strong>Назначение</strong> перейдите по ссылке, с помощью флажков выберите тип исполнителей, для которых предназначена данная роль (из перечисленных списков приложения). Нажмите <strong>Выбрать</strong>. После этого ссылка перечисляет выбранные значения.</li></ul><h3>Адресация задач исполнителям</h3> +<li>В поле <strong>Назначение</strong> перейдите по ссылке, с помощью флажков выберите тип исполнителей, для которых предназначена данная роль (из перечисленных списков приложения). Нажмите <strong>Выбрать</strong>. После этого ссылка перечисляет выбранные значения.</li></ul><h3>Адресация задач исполнителям</h3> <ul><li>Включите соответствующий флажок, если <strong>Роль может назначаться исполнителям без указания уточняющих объектов</strong>; </li> <li>Для того чтобы выбрать объекты адресации, включите флажок <strong>Роль назначается исполнителям с обязательным уточнением</strong>. @@ -28,7 +28,7 @@ <li> <div>Для этого нужно настроить список таких ролей, указав, что они предназначены для определенных категорий внешних пользователей.</div></li></ul><h3>Исполнители роли</h3> <ul><li> -<div>Выполните соответствующую команду в панели навигации, для того чтобы просмотреть <a href="InformationRegister.ИсполнителиЗадач.Form.ИсполнителиРоли/Help">список</a> <strong>Исполнители роли</strong>, а также <a href="InformationRegister.ИсполнителиЗадач.Form.ФормаЗаписи/Help">назначить исполнителей</a> на эту роль.</div> +<div>Выполните соответствующую команду в панели навигации, для того чтобы просмотреть <a href="InformationRegister.ИсполнителиЗадач.Form.ИсполнителиРоли/Help">список</a> <strong>Исполнители роли</strong>, а также <a href="InformationRegister.ИсполнителиЗадач.Form.ФормаЗаписи/Help">назначить исполнителей</a> на эту роль.</div> </li> <li> <div>Также можно воспользоваться двойным щелчком левой кнопки мыши по роли. На роль может быть назначено несколько исполнителей.</div></li></ul><h3>См. также:</h3> diff --git a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html index 0a1cdc596..462956831 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html @@ -1,14 +1,14 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Предназначен для управления ролями исполнителей.</p> <p>Открывается по команде <strong>Роли исполнителей</strong> в разделе <strong>Бизнес-процессы и задачи</strong>.</p> -<p>Роли исполнителей могут использоваться <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессами</a> для ролевой маршрутизации <a href="Task.ЗадачаИсполнителя/Help">задач</a>. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, <strong>Старший по залу</strong>), а соответствие пользователей ролям задается в списке <a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> и используется приложением для доставки поручений конкретным пользователям. В определенных случаях роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекты адресации</a>. Например, у роли <strong>Руководитель проектов</strong> могут присутствовать основной объект адресации <strong>Подразделение</strong> и дополнительный объект <strong>Проект</strong>. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется <a href="Task.ЗадачаИсполнителя.Form.ФормаЗадачи/Help">задача</a>.</p> -<p>Соответствие исполнителей ролям и объектам адресации задается перед началом работы с бизнес-процессами и задачами, используется приложением для доставки поручений конкретным исполнителям. </p> -<p>Список ролей поставляется в составе приложения, но может быть расширен при необходимости.</p> -<p>Не следует допускать, чтобы в списке существовали роли, на которые не назначено ни одного исполнителя (выделяются красным), так как это может привести к возникновению задач, не исполненных в срок. Для контроля таких задач предназначен отчет <a href="Report.ЗависшиеЗадачи/Help">Зависшие задачи</a>. </p> -<p>Признак <strong>Внешняя роль</strong> указывает на то, что учет исполнителей этой роли ведется в другой информационной базе. Роли с установленным признаком <strong>Внешняя роль </strong>используются для интеграции различных информационных баз между собой.</p> -<p>Предопределенная роль <strong>Координатор выполнения задач</strong> может использоваться для получения уведомлений о просроченных и зависших задачах по всем или выбранным объектам адресации. По умолчанию, пользователи, назначенные на роль <strong>Координатор выполнения задач</strong>, получают уведомления по всем таким задачам, адресованным любым исполнителям. Если же требуется отслеживать просроченные и зависшие задачи только по определенным объектам адресации, то необходимо назначить себя на роль <strong>Координатор выполнения задач</strong> только по выбранным объектам адресации. </p><a name="СтандартныеПодсистемы.Пользователи"> +<p>Роли исполнителей могут использоваться <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессами</a> для ролевой маршрутизации <a href="Task.ЗадачаИсполнителя/Help">задач</a>. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, <strong>Старший по залу</strong>), а соответствие пользователей ролям задается в списке <a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> и используется приложением для доставки поручений конкретным пользователям. В определенных случаях роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объекты адресации</a>. Например, у роли <strong>Руководитель проектов</strong> могут присутствовать основной объект адресации <strong>Подразделение</strong> и дополнительный объект <strong>Проект</strong>. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется <a href="Task.ЗадачаИсполнителя.Form.ФормаЗадачи/Help">задача</a>.</p> +<p>Соответствие исполнителей ролям и объектам адресации задается перед началом работы с бизнес-процессами и задачами, используется приложением для доставки поручений конкретным исполнителям. </p> +<p>Список ролей поставляется в составе приложения, но может быть расширен при необходимости.</p> +<p>Не следует допускать, чтобы в списке существовали роли, на которые не назначено ни одного исполнителя (выделяются красным), так как это может привести к возникновению задач, не исполненных в срок. Для контроля таких задач предназначен отчет <a href="Report.ЗависшиеЗадачи/Help">Зависшие задачи</a>. </p> +<p>Признак <strong>Внешняя роль</strong> указывает на то, что учет исполнителей этой роли ведется в другой информационной базе. Роли с установленным признаком <strong>Внешняя роль </strong>используются для интеграции различных информационных баз между собой.</p> +<p>Предопределенная роль <strong>Координатор выполнения задач</strong> может использоваться для получения уведомлений о просроченных и зависших задачах по всем или выбранным объектам адресации. По умолчанию, пользователи, назначенные на роль <strong>Координатор выполнения задач</strong>, получают уведомления по всем таким задачам, адресованным любым исполнителям. Если же требуется отслеживать просроченные и зависшие задачи только по определенным объектам адресации, то необходимо назначить себя на роль <strong>Координатор выполнения задач</strong> только по выбранным объектам адресации. </p><a name="СтандартныеПодсистемы.Пользователи"> </a> -<p><a name="СтандартныеПодсистемы.Пользователи">Приложение отправляет уведомления <strong>Координаторам выполнения задач</strong> по электронной почте по адресу, указанному в контактной информации </a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</p> +<p><a name="СтандартныеПодсистемы.Пользователи">Приложение отправляет уведомления <strong>Координаторам выполнения задач</strong> по электронной почте по адресу, указанному в контактной информации </a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</p> <p>В списке выводится:</p> <ul><li><strong>Наименование</strong> - полное наименование роли; </li> @@ -27,11 +27,11 @@ <td>Структурное подразделение,<br>Отдел бухгалтерии</td> <td>-</td> <td>Иванов И.</td> -<td>Федоров К. получает уведомления по всем просроченным и зависшим задачам по структурному подразделению "Отдел бухгалтерии", кроме тех, которые поступают Петрову А.*</td></tr><tr><td><strong>Координатор выполнения задач</strong></td> +<td>Федоров К. получает уведомления по всем просроченным и зависшим задачам по структурному подразделению "Отдел бухгалтерии", кроме тех, которые поступают Петрову А.*</td></tr><tr><td><strong>Координатор выполнения задач</strong></td> <td>Структурное подразделение,<br>Отдел бухгалтерии</td> <td>Проект,<br>Проект по внедрению системы бухучета</td> <td>Петров А.</td> -<td>Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному подразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*</td></tr></tbody></table><p> </p> +<td>Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному подразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*</td></tr></tbody></table><p> </p> <p>* если исключить Иванова И. и Петрова А. из роли <strong>Координатор выполнения задач</strong>, то Федоров К. будет получать уведомления также и по их объектам адресации.</p> <h3>Особенности взаимодействия с внешними пользователями</h3> <ul><a name="СтандартныеПодсистемы.Пользователи"> @@ -39,6 +39,6 @@ <li><a name="СтандартныеПодсистемы.Пользователи">Исполнителями некоторых бизнес-процессов могут быть и </a><a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a> (например, партнеры или контактные лица партнеров).</li> <li>Как правило, внешним пользователям недоступны имена конкретных сотрудников компании, поэтому в качестве исполнителя они могут указывать только предназначенные для них роли исполнителей. </li> -<li>Для этого нужно настроить список таких ролей, указав, что они предназначены для определенных категорий внешних пользователей.</li></ul><h3>Ввод новой роли</h3> -<ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.РолиИсполнителей.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>См. также: </h3> +<li>Для этого нужно настроить список таких ролей, указав, что они предназначены для определенных категорий внешних пользователей.</li></ul><h3>Ввод новой роли</h3> +<ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Catalog.РолиИсполнителей.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>См. также: </h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index 68f0a3d4d..5608641ca 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -65,15 +65,15 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); - Если МодульМультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда - ФрагментыТекстаПоискДляДополнительныхЯзыков.Добавить( - "РолиИсполнителей.НаименованиеЯзык1 ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""); - КонецЕсли; - - Если МодульМультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда - ФрагментыТекстаПоискДляДополнительныхЯзыков.Добавить( - "РолиИсполнителей.НаименованиеЯзык2 ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""); - КонецЕсли; + ИнформацияОЯзыках = МодульМультиязычностьСервер.СведенияОЯзыках(); + ШаблонаФрагментаЗапроса = "РолиИсполнителей.%1 ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""; + Для Каждого ДополнительныйЯзык Из ИнформацияОЯзыках.Используется Цикл + Если ДополнительныйЯзык.Значение Тогда + + ФрагментыТекстаПоискДляДополнительныхЯзыков.Добавить( + СтрШаблон(ШаблонаФрагментаЗапроса, "Наименование" + ДополнительныйЯзык.Ключ)); + КонецЕсли; + КонецЦикла; КонецЕсли; @@ -174,7 +174,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); МодульМультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", - "ru='Координатор выполнения задач'", КодыЯзыков); // @НСтр-1 + "ru='Координатор выполнения задач'", КодыЯзыков); // @НСтр-2 Иначе Элемент.Наименование = НСтр("ru = 'Координатор выполнения задач'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; @@ -230,4 +230,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СеансыОбменовДанными/Help/ru.html b/SSL/src/Catalogs/СеансыОбменовДанными/Help/ru.html index 882e8388d..c9db220a0 100644 --- a/SSL/src/Catalogs/СеансыОбменовДанными/Help/ru.html +++ b/SSL/src/Catalogs/СеансыОбменовДанными/Help/ru.html @@ -3,18 +3,18 @@ <p style="margin: 0cm 0cm 0pt;">Предназначен для фиксации информации о выполненной операции обмена (отправке или получении данных) через универсальный EnterpriseData.</p> -<p style="margin: 0cm 0cm 0pt;"> </p> +<p style="margin: 0cm 0cm 0pt;"> </p> <p style="margin: 0cm 0cm 0pt;">В справочнике фиксируется время начала, время окончании, продолжительность операции.</p> -<p style="margin: 0cm 0cm 0pt;"> </p> +<p style="margin: 0cm 0cm 0pt;"> </p> <p style="margin: 0cm 0cm 0pt;">Нажав кнопку <strong>Замеры производительности</strong> можно получить доступ к архиву, который содержит замеры производительности синхронизации по ключевым операциям.</p> -<p style="margin: 0cm 0cm 0pt;"> </p> +<p style="margin: 0cm 0cm 0pt;"> </p> <p style="margin: 0cm 0cm 0pt;">Замеры производятся для следующих процедур и обработчиков:</p> @@ -32,7 +32,7 @@ <li style="margin: 0cm 0cm 0pt; color: rgb(0, 0, 0); font-family: "Times New Roman"; font-size: 12pt; font-style: normal; font-weight: normal; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><strong>ПоискСсылок</strong> (в регистре сведений <em>ПубличныеИдентификаторыСинхронизируемыхОбъектов</em>)</li> <li style="margin: 0cm 0cm 0pt; color: rgb(0, 0, 0); font-family: "Times New Roman"; font-size: 12pt; font-style: normal; font-weight: normal; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;"><strong>ОчисткаДвиженийДокумента</strong></li> -</ul><p style="margin: 0cm 0cm 0pt;"> </p> +</ul><p style="margin: 0cm 0cm 0pt;"> </p> <p style="margin: 0cm 0cm 0pt;">В архиве находятся два файла:</p> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form index eb4b88243..15c2bb53d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form @@ -296,7 +296,7 @@ <id>863</id> <title> <key>ru</key> - <value>Чтобы отобразить сертификаты необходимо авторизоваться на сервере DSS</value> + <value>Чтобы отобразить сертификаты DSS необходимо авторизоваться на сервере DSS</value> true true @@ -477,6 +477,67 @@ СертификатыКоманднаяПанель 219 + + ДобавитьДляПодписанияИШифрованияИзФайлов + 886 + + <key>ru</key> + <value>Добавить из файлов...</value> + + true + true + + true + + + ДобавитьДляПодписанияИШифрованияИзФайловРасширеннаяПодсказка + 887 + Label + true + true + + Left + + + Form.Command.ДобавитьДляПодписанияИШифрованияИзФайлов + Normal + PictureAndText + true + true + UserCmds + Balloon + Auto + + + ДобавитьЗаявлениеНаВыпускСертификата + 898 + + <key>ru</key> + <value>Выпустить сертификат...</value> + + true + true + + true + + + ДобавитьЗаявлениеНаВыпускСертификатаРасширеннаяПодсказка + 899 + Label + true + true + + Left + + + Form.Command.ДобавитьЗаявлениеНаВыпускСертификата + Normal + Auto + true + true + UserCmds + Auto + <key>ru</key> @@ -2351,6 +2412,7 @@ <event>FillCheckProcessingAtServer</event> <name>ОбработкаПроверкиЗаполненияНаСервере</name> </handlers> + <width>70</width> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoUrl>true</autoUrl> @@ -2523,6 +2585,19 @@ <common>true</common> </edit> </columns> + <columns> + <name>Ссылка</name> + <id>9</id> + <valueType> + <types>CatalogRef.СертификатыКлючейЭлектроннойПодписиИШифрования</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </columns> </attributes> <attributes> <name>СертификатНаименование</name> @@ -3020,6 +3095,33 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЗаявлениеНаВыпускСертификатаДоступно</name> + <id>33</id> + <valueType> + <types>Boolean</types> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> + <attributes> + <name>АдресСертификата</name> + <id>32</id> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + <view> + <common>true</common> + </view> + <edit> + <common>true</common> + </edit> + </attributes> <formCommands> <name>Далее</name> <title> @@ -3205,6 +3307,57 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ДобавитьЗаявлениеНаВыпускСертификата</name> + <title> + <key>ru</key> + <value>Выпустить сертификат...</value> + + 9 + + ru + Оформить заявление на выпуск сертификата + + + true + + + CommonPicture.ЗаявлениеНаВыпускСертификатаКлюча + + + + ДобавитьЗаявлениеНаВыпускСертификата + + + TextPicture + DontUse + Auto + + + ДобавитьДляПодписанияИШифрованияИзФайлов + + <key>ru</key> + <value>Добавить из файлов...</value> + + 13 + + ru + Добавить для подписания и шифрования из файлов + + + true + + + CommonPicture.СертификатВЛичномХранилище + + + + ДобавитьДляПодписанияИШифрованияИзФайлов + + + Auto + Auto + ДляШифрованияИРасшифровки @@ -3268,6 +3421,19 @@ CatalogRef + + АдресСертификата + + String + + + + + ОтображатьКомандыДобавления + + Boolean + + diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Help/ru.html index 8e49039b1..bdce55256 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Help/ru.html @@ -10,7 +10,7 @@
  • Заполните недостающие поля:
    • Пользователь - выберите из списка
    • Организация - выберите из списка
  • При добавлении сертификата для подписания или расшифровки данных необходимо ввести Пароль.
  • -
  • Для добавления (выбора) сертификата нажмите кнопку Добавить (Выбрать).
  • См. также:

    +
  • Для добавления (выбора) сертификата нажмите кнопку Добавить (Выбрать).
  • См. также:


    \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl index 2acb12ecd..fb8f42dcc 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl @@ -23,6 +23,7 @@ ЕстьПравоНаДобавлениеВСправочник = ПравоДоступа("Добавление", Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования); ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(Пользователи.ТекущийПользователь()); + ЗаявлениеНаВыпускСертификатаДоступно = ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно; УсловноеОформление.Элементы.Очистить(); Если Не ЕстьПравоНаДобавлениеВСправочник Тогда @@ -31,11 +32,11 @@ ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; - + ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Сертификаты"); ПолеОформления.Использование = Истина; - + ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сертификаты.ЕстьВСправочнике"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; @@ -93,19 +94,19 @@ Заголовок = НСтр("ru = 'Добавление сертификата для подписания данных'"); КонецЕсли; - Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() - И ВыполнятьНаСервере <> Ложь - Или ЕстьОблачнаяПодпись Тогда - + Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() И ВыполнятьНаСервере <> Ложь Или ЕстьОблачнаяПодпись Тогда Если ВыполнятьНаСервере = Истина Тогда - Элементы.ГруппаСертификаты.Заголовок = - НСтр("ru = 'Личные сертификаты на сервере'"); + Элементы.ГруппаСертификаты.Заголовок = НСтр("ru = 'Личные сертификаты на сервере'"); Иначе - Элементы.ГруппаСертификаты.Заголовок = - НСтр("ru = 'Личные сертификаты на компьютере и сервере'"); + Элементы.ГруппаСертификаты.Заголовок = НСтр("ru = 'Личные сертификаты на компьютере и сервере'"); КонецЕсли; КонецЕсли; + АдресСертификата = Параметры.АдресСертификата; + Если ЭтоАдресВременногоХранилища(АдресСертификата) Тогда + Элементы.Назад.Видимость = Ложь; + КонецЕсли; + ЕстьОрганизации = ЭлектроннаяПодпись.ОбщиеНастройки().ОрганизацияИспользуется; Элементы.СертификатОрганизация.Видимость = ЕстьОрганизации; @@ -129,7 +130,7 @@ ОбновитьСписокСертификатовНаСервере(Параметры.СвойстваСертификатовНаКлиенте); Если ЗначениеЗаполнено(Параметры.ОтпечатокВыбранногоСертификата) - И Параметры.ОтпечатокВыбранногоСертификата <> ОтпечатокВыбранногоСертификата Тогда + И Параметры.ОтпечатокВыбранногоСертификата <> ОтпечатокВыбранногоСертификата Тогда ОтпечатокВыбранногоСертификатаНеНайден = Истина; КонецЕсли; @@ -139,6 +140,8 @@ Элементы.КомандыДалееОтмена.Видимость = Не РежимВыбораСсылки; Элементы.Далее.КнопкаПоУмолчанию = Не РежимВыбораСсылки; + УстановитьВидимостьКомандДобавленияСертификатов(); + КонецПроцедуры &НаКлиенте @@ -154,7 +157,7 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ВРег(ИмяСобытия) = ВРег("Запись_ПрограммыЭлектроннойПодписиИШифрования") - Или ВРег(ИмяСобытия) = ВРег("Запись_ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux") Тогда + Или ВРег(ИмяСобытия) = ВРег("Запись_ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux") Тогда ОбновитьПовторноИспользуемыеЗначения(); ОбновитьСписокСертификатов(); @@ -162,8 +165,23 @@ КонецЕсли; Если ВРег(ИмяСобытия) = ВРег("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда - ОбновитьСписокСертификатов(); + + ТекущиеДанные = Элементы.Сертификаты.ТекущиеДанные; + + Если Параметр.Свойство("Установлен") И Параметр.Установлен И ТекущиеДанные <> Неопределено + И ТипЗнч(Источник) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") + И Источник = Сертификат И Не ТекущиеДанные.НаСервере Тогда + + СвойстваСертификата = СвойстваДобавленногоСертификата(Источник); + ЗаполнитьЗначенияСвойств(ТекущиеДанные, СвойстваСертификата); + Далее(Неопределено); + + Иначе + ОбновитьСписокСертификатов(); + КонецЕсли; + Возврат; + КонецЕсли; Если ВРег(ИмяСобытия) = ВРег("Установка_РасширениеРаботыСКриптографией") @@ -502,6 +520,7 @@ Иначе ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСертификатПоОтпечатку(ОповещениеЗавершения, ТекущиеДанные.Отпечаток, Ложь); КонецЕсли; + КонецПроцедуры // Продолжение процедуры ВыбратьСсылку. @@ -548,7 +567,7 @@ КонецПроцедуры // Продолжение процедуры Выбрать. -&НаКлиенте +&НаКлиенте Процедура ВыбратьПослеПроверкиСертификатаОблачнойПодписи(Результат, Контекст) Экспорт ДополнительныеПараметры = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыОповещенияПриЗаписиСертификата(); @@ -642,6 +661,24 @@ КонецПроцедуры +&НаКлиенте +Процедура ДобавитьЗаявлениеНаВыпускСертификата(Команда) + + ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыДобавленияСертификата(); + ПараметрыСоздания.СоздатьЗаявление = Истина; + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификатПослеВыбораНазначения("ЗаявлениеНаВыпускСертификата", + ПараметрыСоздания); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьДляПодписанияИШифрованияИзФайлов(Команда) + + ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыДобавленияСертификата(); + ПараметрыСоздания.ОбработчикЗавершения = Новый ОписаниеОповещения("ПослеДобавленияСертификата", ЭтотОбъект); + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификатПослеВыбораНазначения("ДляПодписанияШифрованияИРасшифровкиИзФайлов", ПараметрыСоздания); + +КонецПроцедуры #КонецОбласти @@ -659,7 +696,7 @@ Контекст.Вставить("Оповещение", Оповещение); Если ОтпечатокВыбранногоСертификатаНеНайден = Неопределено - Или ОтпечатокВыбранногоСертификатаНеНайден = Истина Тогда + Или ОтпечатокВыбранногоСертификатаНеНайден = Истина Тогда ПродолжитьОткрытиеПослеПереходаКВыборуТекущегоСертификата(Неопределено, Контекст); Иначе @@ -679,12 +716,18 @@ Открыть(); КонецЕсли; + Если ЗначениеЗаполнено(АдресСертификата) Тогда + ДанныеСертификата = Новый Структура; + ДанныеСертификата.Вставить("Сертификат", АдресСертификата); + ПослеДобавленияСертификата(ДанныеСертификата, Неопределено); + КонецЕсли; + ВыполнитьОбработкуОповещения(Контекст.Оповещение); КонецПроцедуры &НаСервере -Функция ЗаполнитьСвойстваТекущегоСертификатаНаСервере(Знач Отпечаток, СохраненныеСвойства); +Функция ЗаполнитьСвойстваТекущегоСертификатаНаСервере(Знач Отпечаток, СохраненныеСвойства) СертификатКриптографии = ЭлектроннаяПодписьСлужебный.ПолучитьСертификатПоОтпечатку(Отпечаток, Ложь); Если СертификатКриптографии = Неопределено Тогда @@ -720,7 +763,7 @@ Контекст.Вставить("Оповещение", Оповещение); Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() - И ВыполнятьНаСервере = Истина Тогда + И ВыполнятьНаСервере = Истина Тогда Результат = Новый Структура; Результат.Вставить("СвойстваСертификатовНаКлиенте", Новый Массив); @@ -760,11 +803,17 @@ ЭлектроннаяПодписьСлужебный.ОбновитьСписокСертификатов(Сертификаты, СвойстваСертификатовНаКлиенте, ДобавлениеВСписок, Истина, ОшибкаПолученияСертификатовНаСервере, ПоказыватьВсе, ДополнительныеПараметры); + Если ЗаявлениеНаВыпускСертификатаДоступно Тогда + + МодульЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); + МодульЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ДополнитьТаблицуСертификатовЗаявлениями(Сертификаты); + + КонецЕсли; + Если ЗначениеЗаполнено(ОтпечатокВыбранногоСертификата) - И ( Элементы.Сертификаты.ТекущаяСтрока = Неопределено - Или Сертификаты.НайтиПоИдентификатору(Элементы.Сертификаты.ТекущаяСтрока) = Неопределено - Или Сертификаты.НайтиПоИдентификатору(Элементы.Сертификаты.ТекущаяСтрока).Отпечаток - <> ОтпечатокВыбранногоСертификата) Тогда + И (Элементы.Сертификаты.ТекущаяСтрока = Неопределено + Или Сертификаты.НайтиПоИдентификатору(Элементы.Сертификаты.ТекущаяСтрока) = Неопределено + Или Сертификаты.НайтиПоИдентификатору(Элементы.Сертификаты.ТекущаяСтрока).Отпечаток <> ОтпечатокВыбранногоСертификата) Тогда Отбор = Новый Структура("Отпечаток", ОтпечатокВыбранногоСертификата); Строки = Сертификаты.НайтиСтроки(Отбор); @@ -802,9 +851,9 @@ Если РезультатПоиска.Выполнено Тогда ЭлектроннаяПодписьКлиент.ОткрытьСертификат(РезультатПоиска.ДанныеСертификата.Сертификат, Не ДополнительныеПараметры.ЭтоЗаявление); - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ПерейтиКВыборуТекущегоСертификата(Оповещение) @@ -814,19 +863,28 @@ Результат.Вставить("ОбновитьСписокСертификатов", Ложь); Если Элементы.Сертификаты.ТекущиеДанные = Неопределено Тогда - Результат.ОписаниеОшибки = НСтр("ru = 'Выделите сертификат, который будет использоваться.'"); - ВыполнитьОбработкуОповещения(Оповещение, Результат); + Если Не ЗначениеЗаполнено(АдресСертификата) Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Выделите сертификат, который будет использоваться.'"); + ВыполнитьОбработкуОповещения(Оповещение, Результат); + КонецЕсли; Возврат; КонецЕсли; ТекущиеДанные = Элементы.Сертификаты.ТекущиеДанные; Если ТекущиеДанные.ЭтоЗаявление Тогда - Результат.ОбновитьСписокСертификатов = Истина; - Результат.ОписаниеОшибки = - НСтр("ru = 'Для этого сертификата заявление на выпуск еще не исполнено. - |Откройте заявление на выпуск сертификата и выполните требуемые шаги.'"); - ВыполнитьОбработкуОповещения(Оповещение, Результат); + Если ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда + Элементы.Далее.Доступность = Истина; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", ТекущиеДанные.Ссылка); + ОткрытьФорму("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект); + Иначе + Результат.ОбновитьСписокСертификатов = Истина; + Результат.ОписаниеОшибки = + НСтр("ru = 'Для этого сертификата заявление на выпуск еще не исполнено. + |Откройте заявление на выпуск сертификата и выполните требуемые шаги.'"); + ВыполнитьОбработкуОповещения(Оповещение, Результат); + КонецЕсли; Возврат; КонецЕсли; @@ -1058,7 +1116,9 @@ ПодключитьОбработчикОжидания("ОбработчикОжиданияАктивизироватьЭлементПароль", 0.1, Истина); КонецЕсли; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + Если Контекст.Оповещение <> Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + КонецЕсли; КонецПроцедуры @@ -1099,4 +1159,76 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьВидимостьКомандДобавленияСертификатов() + + Если Не ПравоДоступа("Добавление", Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования) + Или Не Параметры.ОтображатьКомандыДобавления Тогда + + Элементы.ДобавитьДляПодписанияИШифрованияИзФайлов.Видимость = Ложь; + Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость = Ложь; + + Возврат; + + КонецЕсли; + + Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость = ЗаявлениеНаВыпускСертификатаДоступно; + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ПослеДобавленияСертификата(Результат, Контекст) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СертификатАдрес = Результат.Сертификат; + + Если ПустаяСтрока(СертификатАдрес) Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Не удалось установить сертификат'")); + ПараметрыФормы.Вставить("ТекстОшибкиКлиент", Результат.Сообщение); + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ЭтотОбъект); + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Неопределено); + Контекст.Вставить("СохраненныеСвойства", Неопределено); + + ДанныеСертификата = ПолучитьИзВременногоХранилища(СертификатАдрес); + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(ДанныеСертификата); + + СвойстваСертификата = ЭлектроннаяПодписьКлиент.СвойстваСертификата(СертификатКриптографии); + + СертификатОтпечаток = СвойстваСертификата.Отпечаток; + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОписаниеДанныхСертификата(СертификатОписаниеДанных, СвойстваСертификата); + + Контекст.СохраненныеСвойства = СохраненныеСвойстваСертификата(СвойстваСертификата.Отпечаток, + СертификатАдрес, СертификатПараметрыРеквизитов); + + Если ЗначениеЗаполнено(ОтборПоОрганизации) Тогда + Контекст.СохраненныеСвойства.Вставить("Организация", ОтборПоОрганизации); + КонецЕсли; + + ПерейтиКВыборуТекущегоСертификатаПослеЗаполненияСвойствСертификата(Контекст); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СвойстваДобавленногоСертификата(Знач Сертификат) + + Результат = Новый Структура; + Результат.Вставить("ЭтоЗаявление", Ложь); + Результат.Вставить("НаКлиенте", Истина); + Результат.Вставить("ЕстьВСправочнике", Истина); + Результат.Вставить("Отпечаток", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Сертификат, "Отпечаток")); + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form index 61e4e2831..dc61c9d72 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form @@ -8,7 +8,7 @@ 100 <key>ru</key> - <value>Оформить заявление на выпуск сертификата...</value> + <value>Выпустить сертификат...</value> true true @@ -39,7 +39,7 @@ 84 <key>ru</key> - <value>Добавить для подписания и шифрования...</value> + <value>Добавить для подписания и шифрования из личного хранилища...</value> true true @@ -65,6 +65,37 @@ UserCmds Auto
    + + ДобавитьДляПодписанияИШифрованияИзФайлов + 102 + + <key>ru</key> + <value>Добавить для подписания и шифрования из файлов...</value> + + true + true + + true + + + ДобавитьДляПодписанияИШифрованияИзФайловРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + UsualButton + Form.Command.ДобавитьДляПодписанияИШифрованияИзФайлов + Normal + Auto + true + true + UserCmds + Auto + ГруппаТолькоДляШифрования 94 @@ -260,7 +291,7 @@ ДобавитьДляПодписанияИШифрования <key>ru</key> - <value>Добавить для подписания и шифрования...</value> + <value>Добавить для подписания и шифрования из личного хранилища...</value> 1 @@ -326,7 +357,7 @@ ДобавитьЗаявлениеНаВыпускСертификата <key>ru</key> - <value>Оформить заявление на выпуск сертификата...</value> + <value>Выпустить сертификат...</value> 6 @@ -366,6 +397,28 @@ Auto Auto + + ДобавитьДляПодписанияИШифрованияИзФайлов + + <key>ru</key> + <value>Добавить для подписания и шифрования из файлов...</value> + + 3 + + true + + + CommonPicture.СертификатВЛичномХранилище + + + + ДобавитьДляПодписанияИШифрованияИзФайлов + + + TextPicture + DontUse + Auto + СкрытьЗаявление diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl index 995f4f49c..96a657dd6 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Module.bsl @@ -11,30 +11,27 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно - И Не Параметры.СкрытьЗаявление Тогда - Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость = Истина; - Иначе - Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость = Ложь; - КонецЕсли; - - Если Не ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда + Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость = + ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно И Не Параметры.СкрытьЗаявление; - Элементы.ДобавитьДляПодписанияИШифрования.Заголовок = НСтр("ru = 'Добавить для шифрования и расшифровки...'"); - НазначениеДляПодписанияИШифрования = "ДляШифрованияИРасшифровки"; - - ИначеЕсли Не ЭлектроннаяПодпись.ИспользоватьШифрование() + Если ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() + И Не ЭлектроннаяПодпись.ИспользоватьШифрование() И Не Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость Тогда - + Отказ = Истина; Возврат; - Иначе - - Элементы.ДобавитьДляПодписанияИШифрования.Заголовок = НСтр("ru = 'Добавить для подписания и шифрования...'"); - НазначениеДляПодписанияИШифрования = "ДляПодписанияШифрованияИРасшифровки"; КонецЕсли; + СвойстваКомандыДобавленияСертификатов = ЭлектроннаяПодписьСлужебный.СвойстваКомандыДобавленияСертификатов(); + Элементы.ДобавитьДляПодписанияИШифрования.Заголовок = СтрЗаменить( + СвойстваКомандыДобавленияСертификатов.Заголовок, "Для", НСтр("ru = 'Добавить для'")); + НазначениеДляПодписанияИШифрования = СвойстваКомандыДобавленияСертификатов.Назначение; + + СвойстваКомандыДобавленияСертификатов = ЭлектроннаяПодписьСлужебный.СвойстваКомандыДобавленияСертификатов(Истина); + Элементы.ДобавитьДляПодписанияИШифрованияИзФайлов.Заголовок = СтрЗаменить( + СвойстваКомандыДобавленияСертификатов.Заголовок, "Для", НСтр("ru = 'Добавить для'")); + КонецПроцедуры #КонецОбласти @@ -48,6 +45,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ДобавитьДляПодписанияИШифрованияИзФайлов(Команда) + + Закрыть("ДляПодписанияШифрованияИРасшифровкиИзФайлов"); + +КонецПроцедуры + &НаКлиенте Процедура ДобавитьИзФайлов(Команда) diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Help/ru.html index 59bda7d04..9ddc24480 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Help/ru.html @@ -1,15 +1,15 @@ Показывает сертификаты для шифрования.
    По умолчанию показываются личные сертификаты. Если список пуст, то на компьютере нет подходящих личных сертификатов.
    -
    Включите флажок, для того чтобы Показывать все сертификаты.
    -
    Для шифрования данных могут быть использованы любые сертификаты. 
    -
    Если сертификаты найдены, выберите нужный, нажмите кнопку Далее для заполнения сведений о сертификате.
    -

    Добавление сертификата

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

    Добавление сертификата

    • Данные сертификата заполняются автоматически.
    • Заполните недостающие поля:
    • -
      • Пользователь - выберите из списка
      • -
      • Организация - выберите из списка
    • При добавлении сертификата только для шифрования данных ввод пароля не требуется, однако он будет нужен для расшифровки данных.
    +
    • Пользователь - выберите из списка
    • +
    • Организация - выберите из списка
  • При добавлении сертификата только для шифрования данных ввод пароля не требуется, однако он будет нужен для расшифровки данных.
  • \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl index 24aee8e4d..39b678c2b 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Module.bsl @@ -14,17 +14,15 @@ Сертификат = Параметры.Сертификат; ЗаявлениеНаВыпускСертификатаДоступно = ЭлектроннаяПодпись.ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно; - // Локализация - Если ЗаявлениеНаВыпускСертификатаДоступно И ЗначениеЗаполнено(Сертификат) Тогда + Если Метаданные.Обработки.Найти("ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата") <> Неопределено + И ЗначениеЗаполнено(Сертификат) Тогда ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); ВыпущенныеСертификаты = ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ВыпущенныеСертификаты( Сертификат); КонецЕсли; - // Конец Локализация - ЕстьПеревыпущенные = ВыпущенныеСертификаты.Количество() > 0; Элементы.ДекорацияПеревыпущен.Видимость = ЕстьПеревыпущенные; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl index 57136d633..45b53704b 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl @@ -41,7 +41,7 @@ ВидыФорм = ",ПодписаниеДанных,ШифрованиеДанных,РасшифровкаДанных, - |,ВыборСертификатаДляПодписанияИлиРасшифровки,ПроверкаСертификата,Токен,"; + |,ВыборСертификатаДляПодписанияИлиРасшифровки,ПроверкаСертификата,"; Если СтрНайти(ВидыФорм, "," + ВидФормы + ",") = 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -53,11 +53,7 @@ ВладелецНовойФормы = Новый УникальныйИдентификатор; КонецЕсли; - Если ВидФормы = "Токен" Тогда - ИмяНовойФормы = "Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма." + ВидФормы; - Иначе - ИмяНовойФормы = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма." + ВидФормы; - КонецЕсли; + ИмяНовойФормы = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма." + ВидФормы; Контекст = Новый Структура; Форма = ОткрытьФорму(ИмяНовойФормы, СерверныеПараметры, ВладелецНовойФормы,,,, diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Help/ru.html index 71fbff043..32787c669 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Help/ru.html @@ -2,7 +2,7 @@

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

    Открывается по кнопке Подобрать из окна Шифрование данных.

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

    -
    • Представление - полное наименование сертификата;
    • Фирма - организация, которой выдан сертификат; +
      • Представление - полное наименование сертификата;
      • Фирма - организация, которой выдан сертификат;
      • Пользователь - пользователь, который является владельцем подписи;
      • Кем выдан - организация, которая выдала сертификат.

      Отборы

      • Если сертификатов много, то можно отобрать нужные: @@ -13,6 +13,6 @@
        • из установленных на компьютере - выберите из списка;
        • из файла - укажите путь к файлу. В открывшемся окне заполните необходимые поля.

      Просмотр данных о сертификате

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

      См. также:

      +
      С помощью команды Изменить контекстного меню по правой кнопке мыши или меню Еще можно открыть данные о сертификате.

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Help/ru.html index 91790408c..68520620c 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Help/ru.html @@ -1,5 +1,5 @@ -

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

    +

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

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

    Подписание данных

    • С помощью ссылки в верхней части окна можно просмотреть объект, который будет подписан. Ссылка принимает значение наименования объекта. @@ -8,26 +8,26 @@
    • Если Сертификат не выбран - выберите его из списка. Если при следующем открытии сертификат будет среди установленных на компьютере, повторный выбор не потребуется.
    • -
    • При выборе из выпадающего списка будут показаны только сертификаты, у которых поле Пользователи не заполнено или совпадает с текущим пользователем сеанса, а поле Приложение заполнено. Если при открытии окна Подписание был указан отбор по организации, то в выпадающем списке не будет сертификатов, у которых поле Организация не совпадает с организацией, указанной в отборе. Если при открытии окна Подписание был указан конкретный список сертификатов, то будет показан только этот список. +
    • При выборе из выпадающего списка будут показаны только сертификаты, у которых поле Пользователи не заполнено или совпадает с текущим пользователем сеанса, а поле Приложение заполнено. Если при открытии окна Подписание был указан отбор по организации, то в выпадающем списке не будет сертификатов, у которых поле Организация не совпадает с организацией, указанной в отборе. Если при открытии окна Подписание был указан конкретный список сертификатов, то будет показан только этот список.
    • При выборе из списка личных сертификатов (установленных на компьютере и на сервере) путем нажатия Показать все, показываются все сертификаты без учета полей Пользователь и Приложение. Если при открытии окна Подписание был указан отбор по организации, то в списке не будет сертификатов, у которых поле Организация не совпадает с организацией, указанной в отборе. Но будут показаны все сертификаты, которых еще нет в списке (то есть те, которые есть только в хранилище сертификатов операционный системы компьютера или сервера).
    • -
    • Введите Пароль к закрытому ключу (указанный при установке или создании сертификата) или Пин-код, если местом хранения сертификата является сервис - DSS. +
    • Введите Пароль к закрытому ключу (указанный при установке или создании сертификата) или Пин-код, если местом хранения сертификата является сервис + DSS.
    • -
    • Включите флажок Запомнить пароль, для того чтобы не вводить пароль (пин-код -для сервиса DSS) в следующий раз. +
    • Включите флажок Запомнить пароль, для того чтобы не вводить пароль (пин-код +для сервиса DSS) в следующий раз.
    • Также файл можно подписать с помощью МЧД, для этого включите флажок По доверенности и выберите соответствующую доверенность из списка.
    • -
    • В некоторых случаях можно ввести Комментарий к подписи - дополнительную информацию о подписи. +
    • В некоторых случаях можно ввести Комментарий к подписи - дополнительную информацию о подписи.
    • Для выполнения подписи нажмите Подписать.
    • Данные будут подписаны с использованием указанного сертификата.
    • -
    • Созданная электронная подпись хранится в приложении. Подписанный объект становится недоступным для редактирования и отображается в списках со значком .
    • +
    • Созданная электронная подпись хранится в приложении. Подписанный объект становится недоступным для редактирования и отображается в списках со значком .

      См. также:

      - \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl index 8d977dc56..883cd2f14 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl @@ -40,14 +40,14 @@ УстановитьТипПодписи(НовыйПараметрТипПодписи); ЭлектроннаяПодписьСлужебный.НастроитьФормуПодписанияШифрованияРасшифровки(ЭтотОбъект); - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда Элементы.ГруппаДоверенность.Видимость = НовыйПараметрТипПодписи.ВыборДоверенности; Если НовыйПараметрТипПодписи.ВыборДоверенности Тогда ПодобратьДоверенностьПоСертификату(); КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер"); @@ -60,11 +60,6 @@ МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат); КонецЕсли; - Если Не ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда - ТипПодписи = Неопределено; - Элементы.ТипПодписи.Видимость = Ложь; - КонецЕсли; - ОбновитьВидимостьПредупреждения(); КонецПроцедуры @@ -217,6 +212,7 @@ ПараметрыФормы.Вставить("ОтборПоОрганизации", ОтборСертификатов); КонецЕсли; ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Истина); ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент); @@ -447,7 +443,7 @@ Если Не ЗначениеЗаполнено(Сертификат) Тогда НастройкаПоДоверенности = Неопределено; Иначе - НастройкаПоДоверенности = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + НастройкаПоДоверенности = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Сертификат, "ПоДоверенности", Неопределено); КонецЕсли; @@ -691,7 +687,7 @@ Возврат; КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда Возврат; @@ -720,7 +716,7 @@ МашиночитаемаяДоверенность = Элементы.МашиночитаемаяДоверенность.СписокВыбора[0].Значение; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности КонецПроцедуры @@ -746,17 +742,16 @@ Если СертификатДействителенДо < ОбщегоНазначенияКлиент.ДатаСеанса() Тогда - ДополнительныеСвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(СертификатАдрес); - Если ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча) - И ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча < ОбщегоНазначенияКлиент.ДатаСеанса() Тогда - Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", - НСтр("ru = 'У выбранного сертификата истек срок действия закрытого ключа. - |Выберите другой сертификат.'")); + ДатаОкончанияЗакрытогоКлюча = ДатаОкончанияЗакрытогоКлюча(СертификатАдрес); + Если ЗначениеЗаполнено(ДатаОкончанияЗакрытогоКлюча) И ДатаОкончанияЗакрытогоКлюча + < ОбщегоНазначенияКлиент.ДатаСеанса() Тогда + Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", НСтр("ru = 'У выбранного сертификата истек срок действия закрытого ключа. + |Выберите другой сертификат.'")); Иначе - Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", - НСтр("ru = 'У выбранного сертификата истек срок действия. - |Выберите другой сертификат.'")); + Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", НСтр("ru = 'У выбранного сертификата истек срок действия. + |Выберите другой сертификат.'")); КонецЕсли; + ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере); Возврат; КонецЕсли; @@ -770,7 +765,7 @@ Возврат; КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") И ПоДоверенности @@ -786,13 +781,13 @@ КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра) И Не РезультатПроверкиУдостоверяющегоЦентра.Действует Тогда Если РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.РазрешитьПодписание Тогда - ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + ПодписаниеРазрешено = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить( Сертификат, "РазрешитьПодписание", Неопределено); Если ПодписаниеРазрешено = Неопределено Тогда @@ -834,7 +829,7 @@ Результат = Результат.Значение; Если БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( Сертификат, "РазрешитьПодписание", Результат); КонецЕсли; @@ -1122,12 +1117,18 @@ КонецЕсли; Если Элементы.ГруппаДоверенность.Видимость Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( Сертификат, "ПоДоверенности", ПоДоверенности); КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ДатаОкончанияЗакрытогоКлюча(АдресСертификата) + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(ПолучитьИзВременногоХранилища(АдресСертификата)); + Возврат СвойстваСертификата.ДатаОкончанияЗакрытогоКлюча; +КонецФункции + &НаКлиенте Процедура ОбработатьОшибку(Оповещение, ОшибкаНаКлиенте, ОшибкаНаСервере, НеподписанныеДанные = Неопределено, ДополнительныеДанные = Неопределено, ПоказыватьОшибку = Истина) @@ -1179,7 +1180,7 @@ КонецПроцедуры -// Локализация +// СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS #Область ПодключаемыеОбработчики @@ -1231,6 +1232,6 @@ #КонецОбласти -// Конец Локализация +// Конец СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form index 041ee9920..8bb48dd3a 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form @@ -4733,67 +4733,21 @@ 156 ГруппаТребуетсяПомощь - 158 - Low - - ИнформацияДляПоддержки - 439 - - <key>ru</key> - <value>При возникновении затруднений ознакомьтесь со списком <link %1>типичных проблем при работе с приложениями электронной подписи и их решений</>. - -В иных случаях обратитесь в службу поддержки фирмы "1С", предоставив <link %2>техническую информацию о возникшей проблеме</>.</value> - - true - true - - true - - - ИнформацияДляПоддержкиРасширеннаяПодсказка - 441 - Label - true - true - - Left - - - - ИнформацияДляПоддержкиКонтекстноеМеню - 440 - true - - true - Label - true - true - - - URLProcessing - ИнформацияДляПоддержкиОбработкаНавигационнойСсылки - - Left - - + 482 - ГруппаСкачатьТехническуюИнформацию - 475 - - СкачатьТехническуюИнформацию - 465 - - <key>ru</key> - <value>Скачать техническую информацию</value> - + ГруппаОбращенияВТехническуюПоддержку + 484 + + ОписаниеОбращенияВПоддержку + 486 true true true - СкачатьТехническуюИнформациюРасширеннаяПодсказка - 466 + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 488 Label true true @@ -4801,10 +4755,78 @@ Left - UsualButton - Form.Command.СкачатьТехническуюИнформацию + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 487 + true + + Label + true + true + + Left + + + + ВопросВПоддержку + 489 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 490 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку Normal - Picture + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 491 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 492 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto true true UserCmds @@ -4813,108 +4835,6 @@ Auto - - ГруппаФормируетсяТехническаяИнформация - 467 - - ДекорацияКартинкаФормируетсяТехническаяИнформация - 469 - - <key>ru</key> - <value>Декорация картинка формируется техническая информация</value> - - true - true - - true - - - ДекорацияКартинкаФормируетсяТехническаяИнформацияРасширеннаяПодсказка - 471 - Label - true - true - - Left - - - - ДекорацияКартинкаФормируетсяТехническаяИнформацияКонтекстноеМеню - 470 - true - - true - true - - - CommonPicture.ДлительнаяОперация16 - - AsFileRef - - - - ДекорацияНадписьФормируетсяТехническаяИнформация - 472 - - <key>ru</key> - <value>Формируется техническая информация...</value> - - true - true - - true - - - ДекорацияНадписьФормируетсяТехническаяИнформацияРасширеннаяПодсказка - 474 - Label - true - true - - Left - - - - ДекорацияНадписьФормируетсяТехническаяИнформацияКонтекстноеМеню - 473 - true - - Label - true - true - - Left - - - true - - true - - - <key>ru</key> - <value>Формируется техническая информация</value> - - - ГруппаФормируетсяТехническаяИнформацияРасширеннаяПодсказка - 468 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - WeakSeparation - true - true - Auto - Auto - - true true @@ -4922,11 +4842,11 @@ <key>ru</key> - <value>Скачать техническую информацию</value> + <value>Обращения в техническую поддержку</value> - ГруппаСкачатьТехническуюИнформациюРасширеннаяПодсказка - 476 + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 485 Label true true @@ -4936,9 +4856,8 @@ UsualGroup - AlwaysHorizontal + Vertical Auto - WeakSeparation true true Auto @@ -4954,9 +4873,10 @@ ru Требуется помощь? + Center ГруппаТребуетсяПомощьРасширеннаяПодсказка - 159 + 483 Label true true @@ -5107,7 +5027,6 @@ ПриСозданииНаСервере LockOwner - true true true Vertical @@ -5551,20 +5470,6 @@ true - - ПроверитьСертификатВЛокальномХранилищеКлиента - 33 - - String - - - - true - - - true - - ТипПодписи 34 @@ -5785,10 +5690,10 @@ Auto - СкачатьТехническуюИнформацию + ИнформацияДляОтправкиВПоддержку <key>ru</key> - <value>Скачать техническую информацию</value> + <value>Информация для отправки в поддержку</value> 2 @@ -5798,9 +5703,37 @@ true + + CommonPicture.Скачать + - СкачатьТехническуюИнформацию + ИнформацияДляОтправкиВПоддержку + + + Auto + Auto + + + ВопросВПоддержку + + <key>ru</key> + <value>Вопрос в поддержку</value> + + 3 + + ru + Вопрос в поддержку + + + true + + + CommonPicture.ОтправитьЭлектронноеПисьмо + + + + ВопросВПоддержку Auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Help/ru.html index c74a323d0..2eaa86165 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Help/ru.html @@ -2,19 +2,21 @@

      Проверка сертификата электронной подписи. Проверка занимает некоторое время и проводится по нескольким параметрам:

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

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

        • закончился срок действия сертификата;
        • -
        • сертификат в списке отозванных.

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

      Запомнить пароль на время сеанса

      -

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

      +
    • сертификат в списке отозванных.

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

      +

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

      Ввод пароля в приложение электронной подписи

      -

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

      +

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

      Проверка сертификата

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

      - \ No newline at end of file +

      Требуется помощь

      +
      • Вопрос в поддержку - можно обратиться в службу поддержки фирмы 1С, предоставив техническую информацию о возникшей проблеме.
      • +
      • Скачать техническую информацию - с помощью кнопки можно скачать архив со всей необходимой технической информацией.
      \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index 01f8f2542..9511fc8b4 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -18,8 +18,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Элементы.ИнформацияДляПоддержки.Заголовок = ЭлектроннаяПодписьСлужебный.ЗаголовокИнформацииДляПоддержки(); - ЭлектроннаяПодписьСлужебный.НастроитьПояснениеВводаПароля( ЭтотОбъект, , Элементы.ПояснениеУсиленногоПароля.Имя); @@ -191,6 +189,19 @@ Элементы.ГруппаТребуетсяПомощь.Поведение = ПоведениеОбычнойГруппы.Свертываемая; КонецЕсли; + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект); КонецПроцедуры @@ -305,26 +316,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ИнформацияДляПоддержкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если НавигационнаяСсылка = "ТипичныеПроблемы" Тогда - ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - Возврат; - КонецЕсли; - - Если Не ПроверкаВыполнена Тогда - ПоказатьПредупреждение(, - НСтр("ru = 'Для сбора технической информации о возникшей проблеме выполните проверку сертификата.'")); - Возврат; - КонецЕсли; - - ВыгрузитьТехническуюИнформацию(Ложь); - -КонецПроцедуры - &НаКлиенте Процедура ДекорацияСертификатМеткиВремениОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) @@ -378,14 +369,16 @@ КонецПроцедуры &НаКлиенте -Процедура СкачатьТехническуюИнформацию(Команда) +Процедура ВопросВПоддержку(Команда) - Если Не ПроверкаВыполнена Тогда - ПоказатьПредупреждение(, - НСтр("ru = 'Для сбора технической информации о возникшей проблеме выполните проверку сертификата.'")); - Возврат; - КонецЕсли; + ВыгрузитьТехническуюИнформацию(Ложь); + +КонецПроцедуры +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) + + Элементы.ГруппаТребуетсяПомощь.Скрыть(); ВыгрузитьТехническуюИнформацию(Истина); КонецПроцедуры @@ -415,9 +408,10 @@ &НаКлиенте Процедура ВыгрузитьТехническуюИнформацию(ВыгрузитьАрхив) - Если ВыгрузитьАрхив Тогда - Элементы.СкачатьТехническуюИнформацию.Доступность = Ложь; - Элементы.ГруппаФормируетсяТехническаяИнформация.Видимость = Истина; + Если Не ПроверкаВыполнена Тогда + ПоказатьПредупреждение(, + НСтр("ru = 'Для сбора технической информации о возникшей проблеме выполните проверку сертификата.'")); + Возврат; КонецЕсли; СоставПроверок = СтандартныеПроверки(); @@ -447,7 +441,7 @@ Если ВыгрузитьАрхив Тогда ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( - ТекстОшибок, Неопределено, Новый ОписаниеОповещения("ПослеВыгрузкиТехническойИнформации", ЭтотОбъект), ОписаниеФайлов); + ТекстОшибок, Неопределено, , ОписаниеФайлов); Иначе ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( ТекстОшибок, Новый Структура("Тема, Сообщение", @@ -458,14 +452,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПослеВыгрузкиТехническойИнформации(Результат, Контекст) Экспорт - - Элементы.СкачатьТехническуюИнформацию.Доступность = Истина; - Элементы.ГруппаФормируетсяТехническаяИнформация.Видимость = Ложь; - -КонецПроцедуры - // Продолжение процедуры Проверить. &НаКлиенте Процедура ПроверитьЗавершение(Неопределен, Контекст) Экспорт @@ -659,50 +645,6 @@ &НаКлиенте Процедура ПроверитьСертификатПослеПроверкиНаКлиенте(Результат, Контекст) Экспорт - Если ЗначениеЗаполнено(ПроверитьСертификатВЛокальномХранилищеКлиента) Тогда - - ОшибкаПоКлассификатору = Новый Структура; - ОшибкаПоКлассификатору.Вставить("ТекстОшибки", Элементы[ПроверитьСертификатВЛокальномХранилищеКлиента + "ОшибкаКлиентНадпись"].Заголовок); - ОшибкаПоКлассификатору.Вставить("Причина", ""); - ОшибкаПоКлассификатору.Вставить("Решение", Элементы[ПроверитьСертификатВЛокальномХранилищеКлиента + "РешениеКлиентНадпись"].Заголовок); - - ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(Неопределено); - ДанныеДляДополнения.ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата); - - ПараметрыДополнения = Новый Структура("Результат, Контекст, Элемент", - Результат, Контекст, ПроверитьСертификатВЛокальномХранилищеКлиента); - - ПараметрыДополненияТекстаРешения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора(); - ПараметрыДополненияТекстаРешения.ПроверитьСертификатВЛокальномХранилищеКлиента = Истина; - - ЭлектроннаяПодписьСлужебныйКлиент.ДополнитьРешениеКлассификатораОшибокПодробностями( - Новый ОписаниеОповещения("ПослеДополненияРешенияКлассификатораОшибок", ЭтотОбъект, ПараметрыДополнения), - ОшибкаПоКлассификатору, ПараметрыДополненияТекстаРешения, ДанныеДляДополнения); - ПроверитьСертификатВЛокальномХранилищеКлиента = ""; - Возврат; - - КонецЕсли; - - ПроверитьСертификатПослеПроверкиНаКлиентеИДополнений(Результат, Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПослеДополненияРешенияКлассификатораОшибок(ОшибкаПоКлассификатору, ПараметрыДополнения) Экспорт - - Если Элементы[ПараметрыДополнения.Элемент + "РешениеКлиентНадпись"].Заголовок <> ОшибкаПоКлассификатору.Решение Тогда - Элементы[ПараметрыДополнения.Элемент + "РешениеКлиентНадпись"].Заголовок = ОшибкаПоКлассификатору.Решение; - КонецЕсли; - - ПроверитьСертификатПослеПроверкиНаКлиентеИДополнений(ПараметрыДополнения.Результат, ПараметрыДополнения.Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПроверитьСертификат. -&НаКлиенте -Процедура ПроверитьСертификатПослеПроверкиНаКлиентеИДополнений(Результат, Контекст) - Если ЭтоВстроенныйКриптопровайдер Или ЭтоУчетнаяЗаписьСервиса Тогда Если ОперацииНаСервере Тогда @@ -756,7 +698,7 @@ КонецЕсли; КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -1007,7 +949,7 @@ // Продолжение процедуры ПроверитьНаСторонеКлиента. &НаКлиенте -Процедура ПроверитьНаСторонеКлиентаПослеСозданияЛюбогоМенеджераКриптографии(Результат, Контекст) Экспорт +Асинх Процедура ПроверитьНаСторонеКлиентаПослеСозданияЛюбогоМенеджераКриптографии(Результат, Контекст) Экспорт Если ТипЗнч(Результат) = Тип("МенеджерКриптографии") Тогда ДополнительныеПараметрыПроверок = ЭлектроннаяПодписьСлужебныйКлиент.ДополнительныеПараметрыПроверкиСертификата(); @@ -1017,10 +959,115 @@ ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Новый ОписаниеОповещения( "ПроверитьНаСторонеКлиентаПослеПроверкиСертификата", ЭтотОбъект, Контекст), Контекст.СертификатКриптографии, Результат,,ДополнительныеПараметрыПроверок); - Иначе - ПроверитьНаСторонеКлиентаПослеПроверкиСертификата(Результат, Контекст) + Возврат; КонецЕсли; + Токен = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьТокенПоСертификату(Контекст.СертификатКриптографии); + + Если Токен = Неопределено Тогда + ПроверитьНаСторонеКлиентаПослеПроверкиСертификата(Результат, Контекст); + Возврат; + КонецЕсли; + + Контекст.Вставить("МенеджерКриптографии", Неопределено); + Токен.Вставить("Пароль", СвойстваПароля.Значение); + Контекст.Вставить("Токен", Токен); + + Если Результат = Истина Тогда + ОписаниеОшибкиНаКлиенте = ""; + ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда + ОписаниеОшибкиНаКлиенте = Результат.ОписаниеОшибкиНаКлиенте; + Иначе + ОписаниеОшибкиНаКлиенте = Результат; + КонецЕсли; + + УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Ложь, + НСтр("ru = 'Проверка корректности сертификата средствами токена появится в следующих версиях приложения.'"), + Истина, ОбъединятьРезультаты); + + УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Ложь, НСтр("ru = 'Проверка сертификата выполняется средствами токена.'" + Символы.ПС + ОписаниеОшибкиНаКлиенте), + Ложь, ОбъединятьРезультаты); + + // Подписание. + ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Ложь); + ДанныеПодписи = Неопределено; + Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыПодписиНаТокене(Токен, + Контекст.СертификатКриптографии, ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")); + ДанныеПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПодписьНаТокене(ПараметрыПодписи, Контекст.ДанныеСертификата); + Если ТипЗнч(ДанныеПодписи) = Тип("Строка") Тогда + ОписаниеОшибки = ДанныеПодписи; + Иначе + Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение( + "Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение( + "Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда + ПараметрыПодписи.ТипПодписи = ТипПодписи; + ДанныеПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПодписьНаТокене(ПараметрыПодписи, Контекст.ДанныеСертификата); + Если ТипЗнч(ДанныеПодписи) = Тип("Строка") Тогда + ОписаниеОшибки = ДанныеПодписи; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты); + + Если ТипЗнч(ДанныеПодписи) = Тип("ДвоичныеДанные") Тогда + ПараметрыПроверкиПодписи = Новый Структура; + ПараметрыПроверкиПодписи.Вставить("Подпись", ДанныеПодписи); + ПараметрыПроверкиПодписи.Вставить("АлгоритмПодписи", Контекст.АлгоритмПодписи); + ПараметрыПроверкиПодписи.Вставить("РезультатПроверки", ЭлектроннаяПодписьКлиентСервер.РезультатПроверкиПодписи()); + ПараметрыПроверкиПодписи.Вставить("Оповещение", Новый ОписаниеОповещения("ПослеПроверкиПодписиНаТокене", ЭтотОбъект, Контекст)); + ПараметрыПроверкиПодписи.Вставить("ПроверятьСертификат", + ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат()); + ПараметрыПроверкиПодписи.Вставить("ИсходныеДанные", Контекст.ДанныеСертификата); + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодписьСредствамиТокена(ПараметрыПроверкиПодписи); + Иначе + ПослеПроверкиПодписиНаТокене(Неопределено, Контекст); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПроверитьНаСторонеКлиента. +&НаКлиенте +Асинх Процедура ПослеПроверкиПодписиНаТокене(Результат, Контекст) Экспорт + + Если Результат <> Неопределено Тогда + Если Не Результат.ПодписьВерна Тогда + ОписаниеОшибки = ?(ЗначениеЗаполнено(Результат.ОшибкаМатематическойПроверкиПодписи), + Результат.ОшибкаМатематическойПроверкиПодписи, Результат.ОшибкаПроверкиДополнительныхАтрибутов); + УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты); + Иначе + УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, "", Ложь, ОбъединятьРезультаты); + КонецЕсли; + КонецЕсли; + + ПараметрыШифрования = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыШифрованияНаТокене(Контекст.Токен, + Контекст.СертификатКриптографии); + ЗашифрованныеДанные = Ждать ЭлектроннаяПодписьКлиентЛокализация.ШифрованиеНаТокене(ПараметрыШифрования, Контекст.ДанныеСертификата); + Если ТипЗнч(ЗашифрованныеДанные) = Тип("Строка") Тогда + УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, ЗашифрованныеДанные, Истина, ОбъединятьРезультаты); + Иначе + + Если ТипЗнч(ЗашифрованныеДанные) <> Тип("ДвоичныеДанные") Тогда + УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, НСтр( + "ru = 'Не удалось зашифровать данные средствами токена.'"), Истина, ОбъединятьРезультаты); + Иначе + УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, "", Ложь, ОбъединятьРезультаты); + ПараметрыРасшифровки = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыРасшифровкиНаТокене(Контекст.Токен, + Контекст.СертификатКриптографии); + РасшифрованныеДанные = Ждать ЭлектроннаяПодписьКлиентЛокализация.РасшифровкаНаТокене(ПараметрыРасшифровки, ЗашифрованныеДанные); + Если ТипЗнч(РасшифрованныеДанные) = Тип("Строка") Тогда + УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Ложь, РасшифрованныеДанные, Истина, ОбъединятьРезультаты); + + Иначе + УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Ложь, "", Ложь, ОбъединятьРезультаты); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст); + КонецПроцедуры // Продолжение процедуры ПроверитьНаСторонеКлиента. @@ -1105,7 +1152,7 @@ Если ЗначениеЗаполнено(Программа) Тогда ПроверитьНаСторонеКлиентаВМоделиСервиса("СервисКриптографии", Контекст); Иначе - ОписаниеОшибки = НСтр("ru = 'Программа для использования закрытого ключа не указана в сертификате.'"); + ОписаниеОшибки = НСтр("ru = 'В сертификате не указано приложение для использования закрытого ключа.'"); ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(ОписаниеОшибки, Контекст); КонецЕсли; @@ -1682,7 +1729,7 @@ Если ЗначениеЗаполнено(Программа) Тогда ПроверитьНаСторонеКлиентаОблачнаяПодпись("ОблачнаяПодпись", Контекст); Иначе - ОписаниеОшибки = НСтр("ru = 'Программа для использования закрытого ключа не указана в сертификате.'"); + ОписаниеОшибки = НСтр("ru = 'В сертификате не указано приложение для использования закрытого ключа.'"); ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(ОписаниеОшибки, Контекст); КонецЕсли; @@ -1899,7 +1946,6 @@ ИмяСервера = ИмяКомпьютера(); ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата); - АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата); Попытка СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата); @@ -1926,7 +1972,12 @@ // Проверка данных сертификата. ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии(); - ПараметрыСоздания.АлгоритмПодписи = АлгоритмПодписи; + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи( + СертификатКриптографии.АлгоритмОткрытогоКлюча, Истина, Ложь); + Иначе + ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата); + КонецЕсли; МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии( "ПроверкаСертификата", ПараметрыСоздания); @@ -2398,7 +2449,8 @@ ИмяЭлементаНадписьОшибкаПодписание = "Подписание" + ?(НаСервере, "ОшибкаСерверНадпись", "ОшибкаКлиентНадпись"); ЭлементФормыНадписьОшибкаПодписание = Форма.Элементы[ИмяЭлементаНадписьОшибкаПодписание]; - ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере, Действие = "ПроверкаПодписи"); + + ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере, Действие = "ПроверкаПодписи", ЗначениеЗаполнено(Форма.Сертификат)); ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено; Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка; @@ -2440,16 +2492,10 @@ ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора( Новый Структура("Сертификат, ДанныеСертификата", Форма.Сертификат, Форма.АдресСертификата)); - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора(); - Дополнение = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями( - ОписаниеИзвестнойОшибки, ДанныеДляДополнения, - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, ?(НаСервере, "Сервер", "Клиент")); - ОписаниеИзвестнойОшибки = Дополнение.ОшибкаПоКлассификатору; - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = Дополнение.ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте; - Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора.ПроверитьСертификатВЛокальномХранилищеКлиента Тогда - Форма.ПроверитьСертификатВЛокальномХранилищеКлиента = Действие; - КонецЕсли; + ОписаниеИзвестнойОшибки = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями( + ОписаниеИзвестнойОшибки, ДанныеДляДополнения, ?(НаСервере, "Сервер", "Клиент")); + КонецЕсли; Форма.Элементы[ИмяНадписиРешение].Заголовок = ОписаниеИзвестнойОшибки.Решение; Возврат; @@ -2626,9 +2672,9 @@ КонецПроцедуры &НаСервереБезКонтекста -Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи) +Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи, УказанСертификат) - Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи); + Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи, УказанСертификат); КонецФункции @@ -2690,7 +2736,7 @@ Если ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда ПодписаниеРазрешено = Ложь; Иначе - ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + ПодписаниеРазрешено = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить( Сертификат, "РазрешитьПодписание", Неопределено); КонецЕсли; Если ПодписаниеРазрешено = Неопределено Или Не ПодписаниеРазрешено Тогда diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl index 67d4d3f63..60dfe4bf4 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl @@ -53,12 +53,16 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура СписокОткрыть() +Процедура СписокОткрыть(Команда) ОткрытьДанные(); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + &НаКлиенте Процедура ОткрытьДанные() @@ -82,4 +86,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Help/ru.html index 48e4140bd..60bee0bd5 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Help/ru.html @@ -1,12 +1,12 @@ -

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

      +

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

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

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

      Расшифровка данных

      • -
        В поле Пароль введите пароль для выбранного сертификата.
        +
        В поле Пароль введите пароль для выбранного сертификата.
      • Включите флажок Запомнить пароль, для того чтобы не вводить пароль в следующий раз.
      • diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index ac213dc8a..04575f4cc 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -164,6 +164,7 @@ ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина); ПараметрыФормы.Вставить("ВернутьПароль", Истина); ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Истина); ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент); @@ -197,6 +198,7 @@ ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина); ПараметрыФормы.Вставить("ВернутьПароль", Истина); ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Истина); ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент); Возврат; @@ -833,7 +835,7 @@ КонецПроцедуры -// Локализация +// СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS &НаКлиенте Процедура Подключаемый_ПодтверждениеОбработкаКоманды(Команда) @@ -880,6 +882,6 @@ КонецПроцедуры -// Конец Локализация +// Конец СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/УстановкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/УстановкаСертификата/Module.bsl index f56ac06f1..153301bce 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/УстановкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/УстановкаСертификата/Module.bsl @@ -166,6 +166,11 @@ КонтейнерыПоСертификату = Ждать ЭлектроннаяПодписьСлужебныйКлиент.КонтейнерыПоСертификату( Параметры.Сертификат); // Массив из см. ЭлектроннаяПодписьСлужебныйКлиент.НовыеСвойстваКонтейнера + + Если КонтейнерыПоСертификату = Неопределено Тогда + Элементы.ГруппаКонтейнеры.ТекущаяСтраница = Элементы.ТаблицаКонтейнеры; + Возврат; + КонецЕсли; Для Каждого Контейнер Из КонтейнерыПоСертификату Цикл НоваяСтрока = Контейнеры.Добавить(); diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Help/ru.html index c9b243667..1c7aecc6d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Help/ru.html @@ -2,13 +2,13 @@

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

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

        • Представление - полное наименование сертификата; -
        • Организация - организация, которой выдан сертификат; +
        • Организация - организация, которой выдан сертификат;
        • Пользователь - пользователь, который является владельцем подписи.

        Выбор сертификата

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

        Добавление сертификата

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

        Просмотр данных о сертификате

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

        См. также:

        +
        С помощью команды Изменить контекстного меню по правой кнопке мыши или меню Еще можно открыть данные о сертификате.

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index 4bdead3ab..acd7d4086 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -1645,11 +1645,11 @@ ФормаСтандартныеКоманды 65 - ФормаСкопировать + ФормаПеревыпуститьСертификат 267 <key>ru</key> - <value>Скопировать</value> + <value>Перевыпустить...</value> true true @@ -1657,7 +1657,7 @@ true - ФормаСкопироватьРасширеннаяПодсказка + ФормаПеревыпуститьСертификатРасширеннаяПодсказка 268 Label true @@ -1666,7 +1666,7 @@ Left
      - Form.Command.Скопировать + Form.Command.ПеревыпуститьСертификат Normal Auto true @@ -2427,15 +2427,15 @@ Auto - Скопировать + ПеревыпуститьСертификат <key>ru</key> - <value>Скопировать</value> + <value>Перевыпустить...</value> 5 ru - Скопировать + Перевыпустить сертификат true @@ -2446,10 +2446,10 @@ - Скопировать + ПеревыпуститьСертификат - Picture + TextPicture Auto Auto diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html index 980d0b35a..49fe915ee 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html @@ -1,6 +1,6 @@

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

      -

      В верхней части приложение автоматически выводит данные о сертификате:

      +

      В верхней части приложение автоматически выводит данные о сертификате:

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

      Настройки закрытого ключа

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

          Проверка сертификата

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

          Просмотр данных сертификата

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

      Проверка сертификата

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

      Просмотр данных сертификата

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

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

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

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

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

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

      Автозаполняемые реквизиты

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

      Отозванные сертификаты

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

      Отозванные сертификаты

      • -
        Включите флажок Еще - Сертификат отозван. Действие необратимо.

      См. также:

      +
      Включите флажок Еще - Сертификат отозван. Действие необратимо.

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index a155747e4..6fc07b75c 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -39,11 +39,11 @@ КонецЕсли; Если Не ПравоДоступа("Добавление", Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования) Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ФормаСкопировать", "Видимость", Ложь); + "ФормаПеревыпуститьСертификат", "Видимость", Ложь); КонецЕсли; Иначе ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ФормаСкопировать", "Видимость", Ложь); + "ФормаПеревыпуститьСертификат", "Видимость", Ложь); КонецЕсли; ВстроенныйКриптопровайдер = ЭлектроннаяПодписьСлужебный.ВстроенныйКриптопровайдер(); @@ -258,7 +258,7 @@ &НаКлиенте Процедура ПодписаниеРазрешеноПриИзменении(Элемент) - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( Объект.Ссылка, "РазрешитьПодписание", ПодписаниеРазрешено); КонецПроцедуры @@ -387,7 +387,7 @@ КонецПроцедуры &НаКлиенте -Процедура Скопировать(Команда) +Процедура ПеревыпуститьСертификат(Команда) ПараметрыСоздания = Новый Структура; ПараметрыСоздания.Вставить("СоздатьЗаявление", Истина); diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Help/ru.html index 62d14556f..f686912f1 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Help/ru.html @@ -1,8 +1,8 @@ -

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

      +

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

      Шифрование данных

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

      См. также:

      diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index 0cf6ae8d1..8fb65152d 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -163,6 +163,7 @@ ПараметрыФормы.Вставить("ВыбранныйСертификат", Сертификат); ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина); ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Истина); ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент); @@ -542,7 +543,13 @@ КонецЕсли; ОписанияПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм; - АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДвоичныеДанныеСертификата); + + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи( + СертификатКриптографии.АлгоритмОткрытогоКлюча, Истина, Ложь); + Иначе + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДвоичныеДанныеСертификата); + КонецЕсли; Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл @@ -605,32 +612,22 @@ КонецЕсли; ДанныеСертификата = ПолучитьИзВременногоХранилища(СертификатАдрес); + Контекст.Вставить("АлгоритмПодписи", ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата)); + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(ДанныеСертификата); + ОписанияПрограмм = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм; - + Контекст.Вставить("СертификатШифрования", СертификатКриптографии); + Контекст.Вставить("ОписанияПрограмм", ОписанияПрограмм); Если ОписанияПрограмм.Количество() = 0 Тогда ЗаполнитьПрограммуШифрованияПослеЦикла(Контекст); Возврат; КонецЕсли; - Контекст.Вставить("ОписанияПрограмм", ОписанияПрограмм); - - СертификатКриптографии = Новый СертификатКриптографии; - СертификатКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения( - "ЗаполнитьПрограммуШифрованияПослеИнициализацииСертификата", ЭтотОбъект, Контекст), - ДанныеСертификата); - -КонецПроцедуры - -// Продолжение процедуры ЗаполнитьПрограммуШифрования. -&НаКлиенте -Процедура ЗаполнитьПрограммуШифрованияПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт - - Контекст.Вставить("СертификатШифрования", СертификатКриптографии); Контекст.Вставить("ТестовыеДанные", ТестовыеДвоичныеДанные()); - Контекст.Вставить("Индекс", -1); ЗаполнитьПрограммуШифрованияЦиклНачало(Контекст); @@ -725,7 +722,15 @@ // Продолжение процедуры СоздатьМенеджерКриптографии. &НаКлиенте -Процедура ЗаполнитьПрограммуШифрованияПослеЦикла(Контекст) +Асинх Процедура ЗаполнитьПрограммуШифрованияПослеЦикла(Контекст) + + Если ЗначениеЗаполнено(Сертификат) И Не ЗначениеЗаполнено(СертификатПрограмма) + И Не ЗначениеЗаполнено(ПрограммаАвто) Тогда + Токен = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьТокенПоСертификату(Контекст.СертификатШифрования); + Если Токен <> Неопределено Тогда + ПрограммаАвто = Токен; + КонецЕсли; + КонецЕсли; Если Контекст.Оповещение <> Неопределено Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение); @@ -1274,7 +1279,7 @@ КонецФункции -// Локализация +// СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS &НаКлиенте Процедура Подключаемый_ПодтверждениеОбработкаКоманды(Команда) @@ -1317,7 +1322,7 @@ КонецПроцедуры -// Конец Локализация +// Конец СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS #КонецОбласти diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Help/ru.html index ad6a91445..cca1549c3 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Help/ru.html @@ -4,7 +4,7 @@

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

      С помощью электронной подписи можно:

      -
      • Подписывать объекты приложения (например, поля Наименование и Краткое содержание); +
        • Подписывать объекты приложения (например, поля Наименование и Краткое содержание);
        • Подписывать содержимое хранимых файлов;
        • diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl index 1cca7feee..ad111bfb6 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -85,20 +85,6 @@ Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи"; Команда.Неконтекстный = Истина; - Команда = КомандыОтчетов.Добавить(); - Команда.КлючВарианта = "СертификатыСотрудников"; - Команда.Представление = НСтр("ru = 'Сертификаты сотрудников'"); - Команда.Идентификатор = "СертификатыСотрудников"; - Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи"; - Команда.Неконтекстный = Истина; - - Команда = КомандыОтчетов.Добавить(); - Команда.КлючВарианта = "ТребуетсяВыпускСертификатаФЛ"; - Команда.Представление = НСтр("ru = 'Требуется выпуск сертификата физического лица'"); - Команда.Идентификатор = "ТребуетсяВыпускСертификатаФЛ"; - Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи"; - Команда.Неконтекстный = Истина; - Команда = КомандыОтчетов.Добавить(); Команда.КлючВарианта = "ТребуетсяМЧД"; Команда.Представление = НСтр("ru = 'Сертификаты, для которых требуется МЧД'"); diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаExtraCryptoAPI_3_0_3_43/Template.addin b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаExtraCryptoAPI_3_0_3_49/Template.addin similarity index 70% rename from SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаExtraCryptoAPI_3_0_3_43/Template.addin rename to SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаExtraCryptoAPI_3_0_3_49/Template.addin index b13ac4780..c7fc05033 100644 Binary files a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаExtraCryptoAPI_3_0_3_43/Template.addin and b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаExtraCryptoAPI_3_0_3_49/Template.addin differ diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx index b54d3c56e..197aefc85 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/Штамп/Template.mxlx @@ -179,10 +179,15 @@ ТекстОтметки + + + 18 + + true - 18 + 19 11 11 @@ -356,8 +361,10 @@ 1 1 45 + style:ЦветШтампаЭП 72 Top + style:ЦветШтампаЭП Text true 1 @@ -369,8 +376,10 @@ 1 1 1 + style:ЦветШтампаЭП 139 Center + style:ЦветШтампаЭП Block true 0 @@ -384,14 +393,18 @@ 1 1 + style:ЦветШтампаЭП 72 + style:ЦветШтампаЭП true 0 1 + style:ЦветШтампаЭП 219 Center + style:ЦветШтампаЭП true @@ -405,16 +418,20 @@ 0 1 + style:ЦветШтампаЭП 72 Top + style:ЦветШтампаЭП true 1 0 1 + style:ЦветШтампаЭП 72 Top + style:ЦветШтампаЭП Wrap Parameter true @@ -434,8 +451,10 @@ 1 1 51 + style:ЦветШтампаЭП 72 Top + style:ЦветШтампаЭП true 1 @@ -444,8 +463,10 @@ 1 1 51 + style:ЦветШтампаЭП 72 Top + style:ЦветШтампаЭП Wrap Parameter true @@ -458,12 +479,18 @@ 0 + style:ЦветШтампаЭП 90 Center + style:ЦветШтампаЭП Wrap Parameter true + + style:ЦветШтампаЭП + style:ЦветШтампаЭП + 72 diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ШтампРасширенный/Template.mxlx b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ШтампРасширенный/Template.mxlx new file mode 100644 index 000000000..16a267f26 --- /dev/null +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/ШтампРасширенный/Template.mxlx @@ -0,0 +1,538 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 3 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + + 0 + + true + + + + 1 + + 4 + + + 5 + + + + + 6 + + + + + + 7 + + + ru + ДОКУМЕНТ ПОДПИСАН +ЭЛЕКТРОННОЙ ПОДПИСЬЮ + + + + + + + + 2 + + + + 8 + + + + + 9 + + + + + 10 + + + ru + Сертификат: [НомерСертификата] + + + + + + + + 3 + + + + 8 + + + + + 9 + + + + + 10 + + + ru + Владелец: [ВладелецСертификата] + + + + + + + + 4 + + + + 11 + + + + + 12 + + + ru + [ДатаПодписи] + + + + + + + 13 + + + ru + Действителен: [СрокДействия] + + + + + + + + 5 + + + + 11 + + + + + 14 + + + + + 15 + + + ru + Доверенность: [Доверенность] + + + + + + + + 6 + + + + 16 + + + + + 17 + ТекстОтметки + + + + + 18 + + + + + true + 19 + 11 + 11 + + 1 + 1 + 2 + + + 6 + 1 + 1 + + + ВладелецСертификата + + Rectangle + 3 + 3 + 2 + 2 + + + + ДатаПодписания + + Rectangle + 4 + 5 + 1 + 1 + + + + Доверенность + + Rectangle + 5 + 5 + 2 + 2 + + + + Картинка + + Rectangle + 1 + 3 + 1 + 1 + + + + НомерСертификата + + Rectangle + 2 + 2 + 2 + 2 + + + + ОбластьСтрокШтамп + + Rows + 1 + 6 + -1 + -1 + + + + Отступ + + Rows + 9 + 9 + -1 + -1 + + + + ОтступЛев + + Rectangle + 9 + 10 + 1 + 1 + + + + ОтступПрав + + Rectangle + 9 + 10 + 2 + 2 + + + + ОтступШтампа + + Rectangle + 1 + 6 + 0 + 0 + + + + СрокДействия + + Rectangle + 4 + 4 + 2 + 2 + + + + ТекстОтметки + + Rectangle + 6 + 6 + 1 + 2 + + + + Штамп + + Rectangle + 1 + 6 + 1 + 2 + + + + ШтампЛеваяКолонка + + Rectangle + 1 + 5 + 1 + 1 + + + + ШтампПраваяКолонка + + Rectangle + 1 + 5 + 2 + 2 + + + + None + + + Solid + + + + + + 25 + + + 85 + + + 228 + 1 + + + Top + + + 0 + 0 + 0 + 0 + 45 + 72 + Top + + + 0 + 1 + 1 + 45 + style:ЦветШтампаЭП + 72 + Top + style:ЦветШтампаЭП + Text + true + 1 + Proportionally + Center + + + 1 + 1 + 1 + style:ЦветШтампаЭП + 278 + Center + Bottom + style:ЦветШтампаЭП + Block + Bottom + + + 0 + 0 + 0 + 72 + Top + 1 + + + style:ЦветШтампаЭП + + + 0 + 1 + style:ЦветШтампаЭП + 72 + Top + style:ЦветШтампаЭП + Wrap + Template + true + + + 0 + 0 + 0 + 0 + 51 + 72 + Top + 1 + + + 2 + 1 + 51 + style:ЦветШтампаЭП + 72 + Center + Top + style:ЦветШтампаЭП + Wrap + Template + true + 1 + + + 0 + 1 + 0 + 51 + style:ЦветШтампаЭП + 72 + Top + style:ЦветШтампаЭП + Wrap + Template + true + + + 2 + 1 + 1 + 51 + style:ЦветШтампаЭП + 72 + Center + Top + style:ЦветШтампаЭП + Wrap + Text + true + 1 + + + 0 + 0 + 0 + 1 + 1 + 51 + style:ЦветШтампаЭП + 72 + Top + style:ЦветШтампаЭП + Wrap + Template + true + 0 + + + 0 + 90 + Center + Wrap + + + 0 + style:ЦветШтампаЭП + 90 + Center + style:ЦветШтампаЭП + Wrap + Parameter + true + + + style:ЦветШтампаЭП + style:ЦветШтампаЭП + + + 72 + + + 0 + + + \ No newline at end of file diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo index 91dae435d..acb4623bf 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo @@ -836,7 +836,7 @@ MobileDevice - КомпонентаExtraCryptoAPI_3_0_3_43 + КомпонентаExtraCryptoAPI_3_0_3_49 ru Компонента ExtraCryptoAPI @@ -850,4 +850,11 @@ Штамп + + ШтампРасширенный + + ru + Штамп расширенный + + diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl index c984eaf4e..c677ccf39 100644 --- a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Forms/ФормаСписка/Module.bsl @@ -25,7 +25,7 @@ Процедура СписокПриИзменении(Элемент) ОбновитьПовторноИспользуемыеЗначения(); - Оповестить("ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента"); + Оповестить("Запись_СостоянияОригиналовПервичныхДокументов"); КонецПроцедуры diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Help/ru.html b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Help/ru.html index f22475902..bbe7c1dc5 100644 --- a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Help/ru.html +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/Help/ru.html @@ -1,11 +1,11 @@ Предназначен для ввода и хранения состояний оригиналов первичных документов.
          Открывается по команде Состояния оригиналов первичных документов в разделе Администрирование - Печатные формы, отчеты и обработки.
          -
          В приложении предусмотрена возможность контроля получения оригиналов входящих и исходящих первичных документов от поставщиков или клиентов, а также отдельное рабочее место для контроля.
          +
          В приложении предусмотрена возможность контроля получения оригиналов входящих и исходящих первичных документов от поставщиков или клиентов, а также отдельное рабочее место для контроля.
          Перед началом работы при необходимости можно ввести в список состояния оригиналов первичных документов, которые впоследствии будут контролироваться.
          -
          Каждый из документов в приложении может иметь несколько печатных форм. Признак наличия оригинала документа будет храниться как для каждой печатной формы, так и одним общим состоянием для документа. В список уже введены предопределенные состояния как для печатных форм, так и для документа в целом.
          -

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

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

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

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

          См. также:

          diff --git a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl index bb22ec8e6..dca16fb28 100644 --- a/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl +++ b/SSL/src/Catalogs/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl @@ -54,8 +54,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления. +#Область ОбработчикиОбновления // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, // которые необходимо обновить на новую версию. @@ -158,6 +157,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Перезаполняет значение служебного реквизита РеквизитДопУпорядочивания у переданного элемента. @@ -191,5 +192,4 @@ #КонецОбласти -#КонецЕсли - +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html index 733654c31..7ce6dedb0 100644 --- a/SSL/src/Catalogs/СтраныМира/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html @@ -8,21 +8,21 @@ SUP { FONT-SIZE: 0.9em; FONT-VARIANT: normal; FONT-WEIGHT: normal; FONT-STYLE: normal; LINE-HEIGHT: normal } -

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

          -

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

          +

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

          +

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

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

          В списке выводится информация:

          -
          • Поля Наименование и Полное наименование предназначены для хранения соответственно краткого и полного официального наименования страны мира. Для представления страны, в том числе и при печати, будет использовано по умолчанию краткое наименование. Отсутствие в позиции списка полного наименования страны мира означает его совпадение с кратким наименованием. +
            • Поля Наименование и Полное наименование предназначены для хранения соответственно краткого и полного официального наименования страны мира. Для представления страны, в том числе и при печати, будет использовано по умолчанию краткое наименование. Отсутствие в позиции списка полного наименования страны мира означает его совпадение с кратким наименованием.
            • Поле Код содержит трёхзначный цифровой код страны мира, позволяющий однозначно идентифицировать страну согласно ОКСМ. Для стран, таможенных союзов и прочих данных, не относящихся к классификатору стран (например, Евросоюз), в это поле рекомендуется вводить "--".
            • Поля Код Альфа-2 и Код Альфа-3 содержат двухзначный (альфа-2) и трёхзначный (альфа-3) коды для идентификации государств и зависимых территорий, основных административных образований внутри государств, согласно ГОСТ 7.67 и ISO 3166
            • -
              Участник ЕАЭС - если страна является участником ЕАЭС, то в соответствующей колонке проставляется флажок.

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

            +
            Участник ЕАЭС - если страна является участником ЕАЭС, то в соответствующей колонке проставляется флажок.

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

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

          • Нажмите Добавить из классификатора.

          Ввод вручную

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

          • Не рекомендуется вводить вручную страны, имеющиеся в классификаторе, так как ручной ввод увеличивает возможность ошибок. -
          • Для того чтобы добавить новую страну в список стран, выполните команду Еще - Добавить вручную. +
          • Для того чтобы добавить новую страну в список стран, выполните команду Еще - Добавить вручную.
          • Заполните необходимые поля. Вместо цифрового кода автоматически предлагается значение "--", так как это значение используется в печатных формах для стран, отсутствующих в классификаторе (см., например, Письмо Минфина России от 10.02.12 № 03-07-09/06).

          См. также:

          \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index d6d0a06d0..52efee6b6 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -302,6 +302,27 @@ #КонецОбласти +Функция КодыСтран() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | СтраныМира.Ссылка, + | СтраныМира.Код + |ИЗ + | Справочник.СтраныМира КАК СтраныМира"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + КодыСтран = Новый Соответствие; + + Пока Выборка.Следующий() Цикл + КодыСтран[Выборка.Ссылка] = Выборка.Код; + КонецЦикла; + + Возврат КодыСтран; + +КонецФункции + #КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Form.form index 4c5e1d592..e217d51cc 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Form.form @@ -52,7 +52,7 @@ ДеревоУзловОбмена.Наименование - ДеревоУзловОбменаНаименованиеРасширеннаяПодсказка + ДеревоУзловОбменаНаименованиеExtendedTooltip 46 Label true @@ -87,7 +87,7 @@ Описание узла - ДеревоУзловОбменаПометкаНаименованиеРасширеннаяПодсказка + ДеревоУзловОбменаПометкаНаименованиеExtendedTooltip 44 Label true @@ -119,7 +119,7 @@ ДеревоУзловОбмена.Код - ДеревоУзловОбменаКодРасширеннаяПодсказка + ДеревоУзловОбменаКодExtendedTooltip 47 Label true @@ -225,7 +225,7 @@ - ДеревоУзловОбменаРасширеннаяПодсказка + ДеревоУзловОбменаExtendedTooltip 43 Label true @@ -250,7 +250,7 @@ true - ДеревоУзловОбменаКонтекстноеМенюВыбратьУзелРасширеннаяПодсказка + ДеревоУзловОбменаКонтекстноеМенюВыбратьУзелExtendedTooltip 38 Label true @@ -283,7 +283,7 @@ true - ДеревоУзловОбменаКонтекстноеМенюИзменитьУзелРасширеннаяПодсказка + ДеревоУзловОбменаКонтекстноеМенюИзменитьУзелExtendedTooltip 39 Label true @@ -315,7 +315,7 @@ true - ДеревоУзловОбменаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + ДеревоУзловОбменаКонтекстноеМенюВывестиСписокExtendedTooltip 41 Label true @@ -341,7 +341,7 @@ true - ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + ДеревоУзловОбменаКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip 42 Label true @@ -368,7 +368,7 @@ Дерево узлов обмена контекстное меню группа 1 - ДеревоУзловОбменаКонтекстноеМенюГруппа1РасширеннаяПодсказка + ДеревоУзловОбменаКонтекстноеМенюГруппа1ExtendedTooltip 40 Label true @@ -421,7 +421,7 @@ true - ФормаВыбратьУзелРасширеннаяПодсказка + ФормаВыбратьУзелExtendedTooltip 36 Label true @@ -451,7 +451,7 @@ true - ФормаИзменитьУзелРасширеннаяПодсказка + ФормаИзменитьУзелExtendedTooltip 37 Label true diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl index 9228ccb59..c143f33bf 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ВыборУзлаПланаОбмена/Module.bsl @@ -97,26 +97,25 @@ &НаСервере Процедура ПрочитатьДеревоУзловОбмена() - + Дерево = РеквизитФормыВЗначение("ДеревоУзловОбмена", Тип("ДеревоЗначений")); Запрос = Новый Запрос; + Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ + "ВЫБРАТЬ | НастройкиТранспорта.Корреспондент КАК Ссылка, | НастройкиТранспорта.Корреспондент.Код КАК Код, | НастройкиТранспорта.Корреспондент.Наименование КАК Наименование, | ТИПЗНАЧЕНИЯ(НастройкиТранспорта.Корреспондент) КАК ТипУзла |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта + | Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспорта |ГДЕ - | НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = &ВидТранспорта - | И НастройкиТранспорта.WSКонечнаяТочкаКорреспондента <> &ОбменСообщениямиПустаяСсылка + | НастройкиТранспорта.ИдентификаторТранспорта = &ИдентификаторТранспорта |ИТОГИ ПО | ТипУзла"; - Запрос.УстановитьПараметр("ВидТранспорта", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - Запрос.УстановитьПараметр("ОбменСообщениямиПустаяСсылка", ПланыОбмена["ОбменСообщениями"].ПустаяСсылка()); + Запрос.УстановитьПараметр("ИдентификаторТранспорта", "SM"); ВыборкаПоТипамУзлов = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); @@ -132,15 +131,21 @@ Пока ВыборкаПоУзлам.Следующий() Цикл - СтрокаУзел = СтрокаПланОбмена.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаУзел, ВыборкаПоУзлам); - СтрокаУзел.ИндексКартинки = 2; + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(ВыборкаПоУзлам.Ссылка, "SM"); + + Если НастройкиТранспорта.ВнутренняяПубликация Тогда + + СтрокаУзел = СтрокаПланОбмена.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаУзел, ВыборкаПоУзлам); + СтрокаУзел.ИндексКартинки = 2; + + КонецЕсли; КонецЦикла; КонецЦикла; - ЗначениеВРеквизитФормы(Дерево, "ДеревоУзловОбмена"); + ЗначениеВРеквизитФормы(Дерево, "ДеревоУзловОбмена"); КонецПроцедуры diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form index a5da68a2e..94656d634 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Form.form @@ -38,7 +38,7 @@ Загрузка - ФлагИспользованияЗагрузкиРасширеннаяПодсказка + ФлагИспользованияЗагрузкиExtendedTooltip 53 Label true @@ -83,7 +83,7 @@ Выгрузка - ФлагИспользованияВыгрузкиРасширеннаяПодсказка + ФлагИспользованияВыгрузкиExtendedTooltip 54 Label true @@ -119,7 +119,7 @@ Список.Description - НаименованиеРасширеннаяПодсказка + НаименованиеExtendedTooltip 55 Label true @@ -297,7 +297,7 @@ - СписокРасширеннаяПодсказка + СписокExtendedTooltip 52 Label true @@ -325,7 +325,7 @@ true - СписокКонтекстноеМенюВключитьОтключитьЗагрузкуРасширеннаяПодсказка + СписокКонтекстноеМенюВключитьОтключитьЗагрузкуExtendedTooltip 46 Label true @@ -355,7 +355,7 @@ true - ФормаВключитьОтключитьВыгрузкуРасширеннаяПодсказка + ФормаВключитьОтключитьВыгрузкуExtendedTooltip 47 Label true @@ -382,7 +382,7 @@ Кнопок включения загрузки выгрузки данных - ГруппаКнопокВключенияЗагрузкиВыгрузкиДанныхРасширеннаяПодсказка + ГруппаКнопокВключенияЗагрузкиВыгрузкиДанныхExtendedTooltip 45 Label true @@ -409,7 +409,7 @@ true - СписокКонтекстноеМенюВключитьОтключитьРегламентноеЗаданиеРасширеннаяПодсказка + СписокКонтекстноеМенюВключитьОтключитьРегламентноеЗаданиеExtendedTooltip 49 Label true @@ -435,7 +435,7 @@ true - СписокКонтекстноеМенюОткрытьСценарийОбменаДаннымиРасширеннаяПодсказка + СписокКонтекстноеМенюОткрытьСценарийОбменаДаннымиExtendedTooltip 50 Label true @@ -462,7 +462,7 @@ Контекстное меню группа кнопок - СписокКонтекстноеМенюГруппаКнопокРасширеннаяПодсказка + СписокКонтекстноеМенюГруппаКнопокExtendedTooltip 48 Label true @@ -486,7 +486,7 @@ true - СписокКонтекстноеМенюВыполнитьСценарийРасширеннаяПодсказка + СписокКонтекстноеМенюВыполнитьСценарийExtendedTooltip 51 Label true @@ -553,7 +553,7 @@ Items.Список.CurrentData.Комментарий - КомментарийРасширеннаяПодсказка + КомментарийExtendedTooltip 56 Label true @@ -604,7 +604,7 @@ true - ФормаВключитьОтключитьЗагрузкуВыгрузкуРасширеннаяПодсказка + ФормаВключитьОтключитьЗагрузкуВыгрузкуExtendedTooltip 37 Label true @@ -634,7 +634,7 @@ true - ФормаВключитьОтключитьЗагрузкуРасширеннаяПодсказка + ФормаВключитьОтключитьЗагрузкуExtendedTooltip 38 Label true @@ -664,7 +664,7 @@ true - ФормаВключитьОтключитьВыгрузку1РасширеннаяПодсказка + ФормаВключитьОтключитьВыгрузку1ExtendedTooltip 39 Label true @@ -695,7 +695,7 @@ Включить или отключить загрузку и выгрузку данных - ВключитьОтключитьВыгрузкуЗагрузкуРасширеннаяПодсказка + ВключитьОтключитьВыгрузкуЗагрузкуExtendedTooltip 36 Label true @@ -723,7 +723,7 @@ true - СоздатьРасширеннаяПодсказка + СоздатьExtendedTooltip 40 Label true @@ -753,7 +753,7 @@ true - ИзменитьСценарийОбменаДаннымиРасширеннаяПодсказка + ИзменитьСценарийОбменаДаннымиExtendedTooltip 41 Label true @@ -786,7 +786,7 @@ true - ФормаВключитьОтключитьРегламентноеЗаданиеРасширеннаяПодсказка + ФормаВключитьОтключитьРегламентноеЗаданиеExtendedTooltip 43 Label true @@ -813,7 +813,7 @@ Кнопок - ГруппаКнопокРасширеннаяПодсказка + ГруппаКнопокExtendedTooltip 42 Label true @@ -837,7 +837,7 @@ true - ФормаВыполнитьСценарийРасширеннаяПодсказка + ФормаВыполнитьСценарийExtendedTooltip 44 Label true diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index 7a1747298..dec95a07c 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -13,12 +13,19 @@ УстановитьУсловноеОформление(); + ОбменДаннымиСервер.АктуализироватьРегламентныеЗадания(); + Список.Параметры.Элементы[0].Значение = Параметры.УзелИнформационнойБазы; Список.Параметры.Элементы[0].Использование = Истина; Заголовок = НСтр("ru = 'Сценарии синхронизации данных для: [УзелИнформационнойБазы]'"); Заголовок = СтрЗаменить(Заголовок, "[УзелИнформационнойБазы]", Строка(Параметры.УзелИнформационнойБазы)); + Если ОбщегоНазначения.РазделениеВключено() Тогда + Элементы.ВключитьОтключитьВыгрузкуЗагрузку.Видимость = Ложь; + Элементы.ФормаВыполнитьСценарий.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -194,6 +201,11 @@ СценарийОбъект = Ссылка.ПолучитьОбъект(); СценарийОбъект.ИспользоватьРегламентноеЗадание = Не СценарийОбъект.ИспользоватьРегламентноеЗадание; + + Отказ = Ложь; + Расписание = Справочники.СценарииОбменовДанными.ПолучитьРасписаниеВыполненияОбменаДанными(Ссылка); + Справочники.СценарииОбменовДанными.ОбновитьДанныеРегламентногоЗадания(Отказ, Расписание, СценарийОбъект); + СценарийОбъект.Записать(); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index 62c7a4422..8e827efd9 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -379,7 +379,7 @@ <key>ru</key> <value>Минимальный интервал не должен быть меньше 15 минут (900 секунд). -Точное время выполнения сценария зависит от загруженности программы.</value> +Точное время выполнения сценария зависит от загруженности приложения.</value> Label true @@ -465,7 +465,7 @@ <key>ru</key> <value>Минимальный интервал не должен быть меньше 15 минут. -Точное время выполнения сценария зависит от загруженности программы.</value> +Точное время выполнения сценария зависит от загруженности приложения.</value> true true @@ -707,19 +707,23 @@ - НастройкиОбменаВидТранспортаОбмена - 114 + НастройкиОбменаИдентификаторТранспорта + 180 + + <key>ru</key> + <value>Транспорт</value> + true true true - Объект.НастройкиОбмена.ВидТранспортаОбмена + Объект.НастройкиОбмена.ИдентификаторТранспорта - НастройкиОбменаВидТранспортаОбменаExtendedTooltip - 142 + НастройкиОбменаИдентификаторТранспортаРасширеннаяПодсказка + 182 Label true true @@ -728,8 +732,8 @@ - НастройкиОбменаВидТранспортаОбменаКонтекстноеМеню - 115 + НастройкиОбменаИдентификаторТранспортаКонтекстноеМеню + 181 true InputField @@ -740,7 +744,7 @@ StartChoice - НастройкиОбменаВидТранспортаОбменаНачалоВыбора + НастройкиОбменаИдентификаторТранспортаНачалоВыбора true true @@ -799,10 +803,6 @@ Left true - - OnActivateRow - СоставРасписанияПриАктивизацииСтроки - СоставРасписанияСтрокаПоиска 147 diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html index aa5ee77bc..148a97817 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html @@ -1,19 +1,19 @@

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

          -

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

          +

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

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

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

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

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

            См. также:

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

              См. также:

              + \ No newline at end of file diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index aede8d43e..d95517e50 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -21,6 +21,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + ЭтоНовый = (Объект.Ссылка.Пустая()); УзелИнформационнойБазы = Неопределено; @@ -53,11 +55,14 @@ Элементы.НастроитьРасписаниеРегламентногоЗадания.РасширеннаяПодсказка.Заголовок = ТекстПодсказки; Элементы.НастроитьРасписаниеРегламентногоЗадания.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; - Элементы.НастройкиОбменаВидТранспортаОбмена.Видимость = Ложь; + + Элементы.НастройкиОбменаИдентификаторТранспорта.Видимость = Ложь; + Элементы.НастройкиОбменаУзелИнформационнойБазы.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать; Элементы.НастройкиОбменаУзелИнформационнойБазы.КнопкаВыпадающегоСписка = Ложь; Элементы.ГруппаИнформацияОНастройкеВОднойБазе.Видимость = Истина; Элементы.ГруппаСценарийОтключен.Видимость = Объект.ОтключенАвтоматически; + Элементы.ВыполнитьОбмен.Видимость = Ложь; КонецЕсли; @@ -69,7 +74,7 @@ Для Каждого ИмяПланаОбмена Из ПланыОбменаБСП Цикл СписокУзловОбмена.Добавить(Тип("ПланОбменаСсылка." + ИмяПланаОбмена)); КонецЦикла; - + КонецПроцедуры &НаКлиенте @@ -108,25 +113,13 @@ КонецПроцедуры -&НаКлиенте -Процедура СоставРасписанияПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - ЗаполнитьСписокВыбораВидаТранспортаОбмена(Элемент.ПодчиненныеЭлементы.НастройкиОбменаВидТранспортаОбмена.СписокВыбора, Элемент.ТекущиеДанные.УзелИнформационнойБазы); - -КонецПроцедуры - &НаКлиенте Процедура НастройкиОбменаУзелИнформационнойБазыПриИзменении(Элемент) Если РазделениеВключено Тогда - Элементы.СоставРасписания.ТекущиеДанные.ВидТранспортаОбмена = - ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WS"); + Элементы.СоставРасписания.ТекущиеДанные.ИдентификаторТранспорта = "WS"; Иначе - Элементы.СоставРасписания.ТекущиеДанные.ВидТранспортаОбмена = Неопределено; + Элементы.СоставРасписания.ТекущиеДанные.ИдентификаторТранспорта = ""; КонецЕсли; КонецПроцедуры @@ -157,19 +150,6 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиОбмена -&НаКлиенте -Процедура НастройкиОбменаВидТранспортаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ТекущиеДанные = Элементы.СоставРасписания.ТекущиеДанные; - - Если ТекущиеДанные <> Неопределено Тогда - - ЗаполнитьСписокВыбораВидаТранспортаОбмена(Элемент.СписокВыбора, ТекущиеДанные.УзелИнформационнойБазы); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура НастройкиОбменаУзелИнформационнойБазыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -183,6 +163,19 @@ КонецПроцедуры +&НаКлиенте +Процедура НастройкиОбменаИдентификаторТранспортаНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + Если Элементы.СоставРасписания.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаполнитьСписокВыбораВидаТранспортаОбмена( + Элемент.СписокВыбора, + Элементы.СоставРасписания.ТекущиеДанные.УзелИнформационнойБазы); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -231,11 +224,22 @@ Возврат; КонецЕсли; - Отбор = Новый Структура("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); + ПараметрыОткрытияФормы = ПараметрыОткрытияФормыТранспорта(ТекущиеДанные.УзелИнформационнойБазы); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект); + Если ПараметрыОткрытияФормы = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("НастройкиТранспорта", ПараметрыОткрытияФормы.НастройкиТранспорта); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); + ДополнительныеПараметры.Вставить("ИдентификаторТранспорта", ПараметрыОткрытияФормы.ИдентификаторТранспорта); + + Оповещение = Новый ОписаниеОповещения("СохранитьНастройкиТранспорта", ЭтотОбъект, ДополнительныеПараметры); + + ОткрытьФорму(ПараметрыОткрытияФормы.ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, + Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -368,32 +372,33 @@ УстановитьПривилегированныйРежим(Истина); - ТекстЗапроса = " - |ВЫБРАТЬ - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы, - | СценарииОбменовДаннымиНастройкиОбмена.ВидТранспортаОбмена, - | СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие, - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена ЕСТЬ NULL - | ТОГДА 0 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА 2 - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ КАК РезультатВыполненияОбмена - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными - | ПО СостоянияОбменовДанными.УзелИнформационнойБазы = СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы - | И СостоянияОбменовДанными.ДействиеПриОбмене = СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие - |ГДЕ - | СценарииОбменовДаннымиНастройкиОбмена.Ссылка = &Ссылка - |УПОРЯДОЧИТЬ ПО - | СценарииОбменовДаннымиНастройкиОбмена.НомерСтроки ВОЗР - |"; + ТекстЗапроса = + "ВЫБРАТЬ + | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | СценарииОбменовДаннымиНастройкиОбмена.УдалитьВидТранспортаОбмена КАК УдалитьВидТранспортаОбмена, + | СценарииОбменовДаннымиНастройкиОбмена.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие КАК ВыполняемоеДействие, + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена ЕСТЬ NULL + | ТОГДА 0 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА 2 + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ КАК РезультатВыполненияОбмена + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными + | ПО (СостоянияОбменовДанными.УзелИнформационнойБазы = СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы) + | И (СостоянияОбменовДанными.ДействиеПриОбмене = СценарииОбменовДаннымиНастройкиОбмена.ВыполняемоеДействие) + |ГДЕ + | СценарииОбменовДаннымиНастройкиОбмена.Ссылка = &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | СценарииОбменовДаннымиНастройкиОбмена.НомерСтроки"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -423,20 +428,26 @@ Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - Для Каждого Элемент Из ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы) Цикл - - СписокВыбора.Добавить(Элемент, Строка(Элемент)); - + Для Каждого Элемент Из НастроенныеТипыТранспорта(УзелИнформационнойБазы) Цикл + СписокВыбора.Добавить(Элемент.Ключ, Элемент.Значение); КонецЦикла; КонецЕсли; - + КонецПроцедуры &НаСервереБезКонтекста -Функция ИспользуемыеТранспортыСообщенийОбмена(Знач УзелИнформационнойБазы) +Функция НастроенныеТипыТранспорта(Знач УзелИнформационнойБазы) - Возврат ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы); + Результат = Новый Структура; + ТаблицаТранспорта = ТранспортСообщенийОбмена.НастроенныеТипыТранспорта(УзелИнформационнойБазы); + + Для Каждого Строка Из ТаблицаТранспорта Цикл + Псевдоним = ТранспортСообщенийОбмена.ПараметрТранспорта(Строка.ИдентификаторТранспорта, "Псевдоним"); + Результат.Вставить(Строка.ИдентификаторТранспорта, Псевдоним); + КонецЦикла; + + Возврат Результат; КонецФункции @@ -446,7 +457,7 @@ Если РазделениеВключено Тогда НастройкиОбмена = Объект.НастройкиОбмена.Выгрузить(); - НастройкиОбмена.Свернуть("УзелИнформационнойБазы,ВидТранспортаОбмена,ВыполняемоеДействие"); + НастройкиОбмена.Свернуть("УзелИнформационнойБазы,ИдентификаторТранспорта,ВыполняемоеДействие"); Объект.НастройкиОбмена.Загрузить(НастройкиОбмена); Запрос = Новый Запрос; @@ -526,4 +537,62 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Для Каждого Транспорт Из ТранспортСообщенийОбмена.ТаблицаПараметровТранспорта() Цикл + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("НастройкиОбменаИдентификаторТранспорта"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НастройкиОбмена.ИдентификаторТранспорта"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Транспорт.ИдентификаторТранспорта; + + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Транспорт.Псевдоним); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПараметрыОткрытияФормыТранспорта(Узел) + + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(Узел); + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + Возврат Неопределено; + КонецЕсли; + + ПолноеИмяФормыНастройки = ТранспортСообщенийОбмена.ПолноеИмяФормыНастройки(ИдентификаторТранспорта); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(Узел, ИдентификаторТранспорта); + + Результат = Новый Структура; + Результат.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + Результат.Вставить("ПолноеИмяФормыНастройки", ПолноеИмяФормыНастройки); + Результат.Вставить("НастройкиТранспорта", НастройкиТранспорта); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура СохранитьНастройкиТранспорта(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ТранспортСообщенийОбменаВызовСервера.СохранитьНастройкиТранспорта( + ДополнительныеПараметры.Корреспондент, + ДополнительныеПараметры.ИдентификаторТранспорта, + Результат); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html index 1db5b039e..2367e19ce 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html @@ -1,24 +1,24 @@

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

              -

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

              +

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

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

              • -
                 - загрузка (получение данных);
                +
                - загрузка (получение данных);
              • -
                 - выгрузка (отправка данных);
                +
                - выгрузка (отправка данных);
              • Наименование - полное наименование сценария;
              • -
              •  - выполняется автоматически по расписанию.

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

              -

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

              +
            • - выполняется автоматически по расписанию.

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

            +

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

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

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

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

            Включение выгрузки и загрузки данных

            • С помощью выпадающего меню Включить/Отключить можно управлять выгрузкой и загрузкой данных.
              @@ -27,8 +27,8 @@
              Если выгрузка или загрузка включена, в соответствующей колонке появляется флажок.
            • -
              Не рекомендуется выполнять только выгрузку данных или только загрузку данных, хотя сценарий позволяет это сделать. Надо выполнять полноценную синхронизацию данных в одном сценарии.

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

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

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

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

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

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

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

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

          См. также:

          \ No newline at end of file diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index ed8040e8e..fcb55769f 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -46,8 +46,8 @@ Наименование = НСтр("ru = 'Автоматическая синхронизация данных с %1'"); Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Наименование, Строка(УзелИнформационнойБазы)); - - ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); СценарийОбменаДанными = СоздатьЭлемент(); @@ -60,12 +60,12 @@ // Табличная часть СтрокаТаблицы = СценарийОбменаДанными.НастройкиОбмена.Добавить(); - СтрокаТаблицы.ВидТранспортаОбмена = ВидТранспортаОбмена; + СтрокаТаблицы.ИдентификаторТранспорта = ИдентификаторТранспорта; СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы; СтрокаТаблицы = СценарийОбменаДанными.НастройкиОбмена.Добавить(); - СтрокаТаблицы.ВидТранспортаОбмена = ВидТранспортаОбмена; + СтрокаТаблицы.ИдентификаторТранспорта = ИдентификаторТранспорта; СтрокаТаблицы.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; СтрокаТаблицы.УзелИнформационнойБазы = УзелИнформационнойБазы; @@ -109,6 +109,12 @@ // Получает расписание регламентного задания. // Если регламентное задание не задано, то возвращает пустое расписание (по умолчанию). +// +// Параметры: +// НастройкаВыполненияОбмена - Структура - структура настроек выполнения обмена +// +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания - получить расписание выполнения обмена данными // Функция ПолучитьРасписаниеВыполненияОбменаДанными(НастройкаВыполненияОбмена) Экспорт @@ -134,8 +140,8 @@ Возврат; КонецЕсли; - Если ПустаяСтрока(ТекущийОбъект.Код) Тогда - ТекущийОбъект.УстановитьНовыйКод(); + Если ПустаяСтрока(ТекущийОбъект.Код) Тогда + ТекущийОбъект.УстановитьНовыйКод(); КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -429,7 +435,7 @@ Процедура ДобавитьСтрокиНастроекОбменаПоСценарию( НастройкиОбмена, УзелИнформационнойБазы, ВыполняемоеДействие) - ВидТранспортаОбмена = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); Если ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда // Добавляем выгрузку данных в цикле. @@ -447,8 +453,8 @@ НоваяСтрока = НастройкиОбмена.Вставить(ОбратныйИндекс + 1); НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + НоваяСтрока.ИдентификаторТранспорта = ИдентификаторТранспорта; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; Прервать; КонецЕсли; @@ -462,8 +468,8 @@ НоваяСтрока = НастройкиОбмена.Добавить(); НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + НоваяСтрока.ИдентификаторТранспорта = ИдентификаторТранспорта; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; КонецЕсли; ИначеЕсли ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных Тогда @@ -475,8 +481,8 @@ НоваяСтрока = НастройкиОбмена.Вставить(НастройкиОбмена.Индекс(СтрокаТаблицы)); НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + НоваяСтрока.ИдентификаторТранспорта = ИдентификаторТранспорта; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; Прервать; КонецЕсли; @@ -488,10 +494,9 @@ Если НастройкиОбмена.НайтиСтроки(Отбор).Количество() = 0 Тогда НоваяСтрока = НастройкиОбмена.Вставить(0); - НоваяСтрока.УзелИнформационнойБазы = УзелИнформационнойБазы; - НоваяСтрока.ВидТранспортаОбмена = ВидТранспортаОбмена; - НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; + НоваяСтрока.ИдентификаторТранспорта = ИдентификаторТранспорта; + НоваяСтрока.ВыполняемоеДействие = ВыполняемоеДействие; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo b/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo index 5dc8086e7..e6627bcea 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo +++ b/SSL/src/Catalogs/СценарииОбменовДанными/СценарииОбменовДанными.mdo @@ -250,7 +250,7 @@ Use - ВидТранспортаОбмена + УдалитьВидТранспортаОбмена ru Подключение @@ -264,7 +264,6 @@ - ShowError Use Use @@ -287,6 +286,22 @@ Use Use + + ИдентификаторТранспорта + + ru + Идентификатор транспорта + + + String + + + + + ShowError + Use + Use + ФормаСписка diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl index d45dd8d14..9a224aedd 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/УдалениеЛишнихФайловИзТома/Module.bsl @@ -100,7 +100,7 @@ КонецЕсли; Если СкопироватьФайлыПередУдалением Тогда - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия( Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект),, Ложь); Иначе @@ -131,7 +131,7 @@ &НаСервере Процедура ЗаполнитьТаблицуЛишнихФайлов() - ТаблицаФайловНаДиске = РаботаСФайламиВТомахСлужебный.ЛишниеФайлыНаДиске(); + ТаблицаФайловНаДиске = РаботаСФайламиВТомахСлужебный.ЛишниеФайлыВТоме(); ПутьКТому = СокрЛП(РаботаСФайламиВТомахСлужебный.ПолныйПутьТома(ТомХраненияФайлов)); МассивФайлов = НайтиФайлы(ПутьКТому,"*", Истина); diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html index efdd0911d..9d9110af1 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -1,34 +1,34 @@

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

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

          -

          Поля Полный путь для сервера 1С:Предприятия под управлением Microsoft Windows и Полный пусть для сервера 1С:Предприятия под управлением Linux должны ссылаться на одну и ту же физическую сетевую папку. Нужно заполнять в том случае, если в кластере есть сервера как под управлением Microsoft Windows, так и Linux.

          +

          Поля Полный путь для сервера 1С:Предприятия под управлением Microsoft Windows и Полный пусть для сервера 1С:Предприятия под управлением Linux должны ссылаться на одну и ту же физическую сетевую папку. Нужно заполнять в том случае, если в кластере есть сервера как под управлением Microsoft Windows, так и Linux.

          Для каждого тома необходимо указать:

          • Наименование - полное наименование тома для хранения файлов;
          • Код - заполняется автоматически;
          • -
          • Полный путь к общей папке на компьютере под управлением Microsoft Windows - напишите путь к каталогу тома для сервера под управлением Microsoft Windows в формате UNC - \\Имя компьютера\Наименование папки;

          или

          -
          • Полный путь к общей папке на компьютере под управлением Linux - напишите путь к каталогу тома для сервера под управлением Linux;
          Поля Полный путь для сервера 1С:Предприятия под управлением Microsoft Windows и Полный пусть для сервера 1С:Предприятия под управлением Linux должны ссылаться на одну и ту же физическую сетевую папку. Нужно заполнять в том случае, если в кластере есть сервера как под управлением Microsoft Windows, так и Linux.
          • Порядок - введите целое число, по умолчанию равно 1. Заполнение томов осуществляется по порядку заполнения (по возрастанию) до полного заполнения тома. Эту особенность можно использовать, например, для временного отключения тома путем увеличения ему порядка заполнения. +
          • Полный путь к общей папке на компьютере под управлением Microsoft Windows - напишите путь к каталогу тома для сервера под управлением Microsoft Windows в формате UNC - \\Имя компьютера\Наименование папки;

          или

          +
          • Полный путь к общей папке на компьютере под управлением Linux - напишите путь к каталогу тома для сервера под управлением Linux;
          Поля Полный путь для сервера 1С:Предприятия под управлением Microsoft Windows и Полный пусть для сервера 1С:Предприятия под управлением Linux должны ссылаться на одну и ту же физическую сетевую папку. Нужно заполнять в том случае, если в кластере есть сервера как под управлением Microsoft Windows, так и Linux.
          • Порядок - введите целое число, по умолчанию равно 1. Заполнение томов осуществляется по порядку заполнения (по возрастанию) до полного заполнения тома. Эту особенность можно использовать, например, для временного отключения тома путем увеличения ему порядка заполнения.
          • -
          • Предел, МБ -можно указать максимальный размер всех файлов на томе (квота тома). Если суммарный размер файлов в томе превышает установленную квоту, то будет использован следующий по порядку том. Если ни на одном из доступных томов не будет достаточно места для размещения файла, то информация об этом будет записана в журнал регистрации и будет выдано сообщение об ошибке. Если квота установлена равной нулю, то при размещении файлов в томе она не проверяется; +
          • Предел, МБ -можно указать максимальный размер всех файлов на томе (квота тома). Если суммарный размер файлов в томе превышает установленную квоту, то будет использован следующий по порядку том. Если ни на одном из доступных томов не будет достаточно места для размещения файла, то информация об этом будет записана в журнал регистрации и будет выдано сообщение об ошибке. Если квота установлена равной нулю, то при размещении файлов в томе она не проверяется;
          • -
          • Текущий размер, МБ - проставляется приложением автоматически по мере наполнения тома, показывает, насколько том заполнен; +
          • Текущий размер, МБ - проставляется приложением автоматически по мере наполнения тома, показывает, насколько том заполнен;
          • -
          • На вкладке Комментарий напишите подробную информацию о томе.

          Особенности заполнения поля Полный путь для Linux

          -Поля Полный путь для сервера 1С:Предприятия под управлением Microsoft Windows и Полный пусть для сервера 1С:Предприятия под управлением Linux должны ссылаться на одну и ту же физическую сетевую папку. Нужно заполнять в том случае, если в кластере есть сервера как под управлением Microsoft Windows, так и Linux.
          • Если сервер 1С:Предприятия работает под Linux, то путь к тому хранения файлов можно указать только локальный, например /home/path. Для того чтобы использовать UNC путь, нужно сделать на него ссылку. Для этого под правами администратора сделайте следующее: -
            • выполните команду вида mkdir folder, где вместо "folder" напишите имя своего каталога. Например, в каталоге /home выполните команду mkdir shared - будет создан каталог shared с полным путем /home/shared. +
            • На вкладке Комментарий напишите подробную информацию о томе.

            Особенности заполнения поля Полный путь для Linux

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

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

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

          Удаление лишних файлов из тома

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

          Проверка целостности тома

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

          См. также:

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

        Удаление лишних файлов из тома

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

        Проверка целостности тома

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

        См. также:

        • diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index b5ae1cc88..ed0d3c779 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html @@ -1,30 +1,30 @@ -

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

          -

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

          +

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

          +

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

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

          • Наименование - наименование тома хранения файлов;
          • Порядок - целое число. Заполнение томов осуществляется по порядку заполнения по возрастанию до полного заполнения тома;
          • -
          • Полный путь Microsoft Windows - путь к каталогу тома для сервера под управлением Microsoft Windows в формате UNC: \\Имя компьютера\Наименование папки; +
          • Полный путь Microsoft Windows - путь к каталогу тома для сервера под управлением Microsoft Windows в формате UNC: \\Имя компьютера\Наименование папки;
          • -
          • Комментарий - подробная информация о томе. +
          • Комментарий - подробная информация о томе.
          • -
          • Предел, Мб - можно указать максимальный размер всех файлов в томе (квота тома). Если квота установлена равной нулю, то при размещении файлов в томе она не проверяется. При установленном ненулевом значении Максимальный размер, если суммарный размер файлов в томе уже превышает установленную квоту, то будет использован следующий по порядку заполнения том. Если ни в одном из доступных томов не будет достаточно места для размещения файла, то информация об этом записывается в журнал регистрации и выводится сообщение об ошибке; +
          • Предел, Мб - можно указать максимальный размер всех файлов в томе (квота тома). Если квота установлена равной нулю, то при размещении файлов в томе она не проверяется. При установленном ненулевом значении Максимальный размер, если суммарный размер файлов в томе уже превышает установленную квоту, то будет использован следующий по порядку заполнения том. Если ни в одном из доступных томов не будет достаточно места для размещения файла, то информация об этом записывается в журнал регистрации и выводится сообщение об ошибке;
          • Полный путь Linux - путь к каталогу для сервера под управлением Linux.

          Ввод тома хранения файлов

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

            Правила хранения файлов в томах

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

          Правила хранения файлов в томах

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

          Работа с томами хранения файлов

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

        Работа с томами хранения файлов

        • При создании нового тома автоматически проверяется доступ к указанному в поле Полный путь каталогу, в случае ошибки выводится соответствующее сообщение.
        • Заполнение томов осуществляется по порядку (по возрастанию) до полного заполнения тома. Эту особенность можно использовать для временного отключения тома путем увеличения ему порядка заполнения. @@ -33,18 +33,18 @@
        • Созданный том нельзя удалить до тех пор, пока на него ссылаются какие-либо версии файлов.
        • -
        • Ошибки доступа к томам помещаются в журнал регистрации и могут быть просмотрены администратором приложения. +
        • Ошибки доступа к томам помещаются в журнал регистрации и могут быть просмотрены администратором приложения.
        • В каждом томе файлы хранятся в подкаталогах по дате так, что на каждый день создается свой подкаталог. Все файлы в томах хранятся с оригинальным именем и расширением, между которыми добавляется номер версии, например "Приказ.1.txt".
        • -
        • После переключения режима хранения файлов (например, в значение В томах на сервере) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы перенести ранее накопленные файлы из информационной базы в тома, воспользуйтесь командой Перенос файлов в тома. +
        • После переключения режима хранения файлов (например, в значение В томах на сервере) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы перенести ранее накопленные файлы из информационной базы в тома, воспользуйтесь командой Перенос файлов в тома.
        • -
        • Для проверки целостности данных в томе, а также для поиска пропавших данных предусмотрен соответствующий отчет. С помощью отчета выводится общее количество файлов в томе, процент целостных данных, отсутствующих данных и лишних файлов - в числовом виде и в виде диаграммы для наглядности.
        • +
        • Для проверки целостности данных в томе, а также для поиска пропавших данных предусмотрен соответствующий отчет. С помощью отчета выводится общее количество файлов в томе, процент целостных данных, отсутствующих данных и лишних файлов - в числовом виде и в виде диаграммы для наглядности.
        • При работе в распределенной информационной базе (РИБ) способ хранения файлов настраивается независимо в каждом узле. Например, в главном узле могут быть включены тома, а в подчиненных узлах файлы хранятся в информационной базе, или наоборот.
        • -
        • Если настраивать в разных узлах одни и те же тома хранения файлов (сетевые каталоги), то это приведет к конфликтам. Также файлы в томе, относящиеся к другим узлам, будут считаться "лишними" и могут быть очищены. 
        • -
        • Если в главном узле файлы хранятся в томах, то при создании нового узла РИБ вместе с созданием начального образа будет выгружен архив с хранимыми файлами (для этого необходимо указать полное имя архива с файлами томов). +
        • Если настраивать в разных узлах одни и те же тома хранения файлов (сетевые каталоги), то это приведет к конфликтам. Также файлы в томе, относящиеся к другим узлам, будут считаться "лишними" и могут быть очищены.
        • +
        • Если в главном узле файлы хранятся в томах, то при создании нового узла РИБ вместе с созданием начального образа будет выгружен архив с хранимыми файлами (для этого необходимо указать полное имя архива с файлами томов).
        • -
        • Для получения файлов в томах из архива необходимо в Настройках синхронизации данных выполнить синхронизацию подчиненного узла с главным узлом, нажав на кнопку Синхронизировать .
        +
      • Для получения файлов в томах из архива необходимо в Настройках синхронизации данных выполнить синхронизацию подчиненного узла с главным узлом, нажав на кнопку Синхронизировать .
      • Примечание
        Для использования томов, расположенных на сетевых устройствах, сервер 1С:Предприятия 8 нужно запускать от лица доменного пользователя вида domain1\user1, имеющего права доступа к тому, указанному в виде UNC пути. Этот пользователь должен входить в группу Users локального компьютера,иметь права "Run as service" и "Run as batch job" и права на каталоги, в которых сервер 1С:Предприятия 8 хранит служебные файлы - журнал регистрации, каталог временных файлов и пр.

        См. также:

        • Общая информация о файлах;
        • diff --git a/SSL/src/Catalogs/УчетныеЗаписиDSS/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиDSS/Help/ru.html index e050d6b1e..6e8b77d53 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиDSS/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиDSS/Help/ru.html @@ -1,13 +1,13 @@ -

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

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

          +

          -

           Справочник позволяет менять сервис, к которому +

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

          +информацию необходимую для работы с сервисом DSS

          \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form index 19b9c9806..265c32fc0 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form @@ -97,15 +97,6 @@ true true true - - - ru - Яндекс.Диск - - - https://webdav.yandex.com - - ru diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl index 144d57cfd..06ead5b1f 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -19,6 +19,12 @@ Элементы.АвторФайлов.Доступность = Ложь; КонецЕсли; + ОблачныеСервисы = Новый СписокЗначений(); + РаботаСФайламиЛокализация.ПриОпределенииОблачныхСервисов(ОблачныеСервисы); + Для Каждого ОблачныйСервис Из ОблачныеСервисы Цикл + Элементы.Сервис.СписокВыбора.Вставить(0, ОблачныйСервис.Значение, ОблачныйСервис.Представление); + КонецЦикла; + АвтоНаименование = ПустаяСтрока(Объект.Наименование); Если Не ПустаяСтрока(Объект.Наименование) Тогда Элементы.ВКачествеАвтораФайлов.СписокВыбора[0].Представление = diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html index a7057963c..7c198e168 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html @@ -5,7 +5,7 @@
        • Напишите Наименование.
        • -
        • В поле Сервис выберите из списка, с каким облачным сервисом будут синхронизироваться файлы данной учетной записи, в поле отобразится URL-адрес облачного сервиса.
        • +
        • В поле Сервис выберите из списка, с каким облачным сервисом будут синхронизироваться файлы данной учетной записи, в поле отобразится URL-адрес облачного сервиса.
        • Укажите Логин и Пароль - данные для доступа, полученные при регистрации на выбранном облачном сервисе.
        • В поле Корневая папка напишите папку, в которой будут храниться все файлы для этой учетной записи. Ее необходимо создать самостоятельно на облачном сервисе. @@ -14,7 +14,7 @@
          • По умолчанию выбрана Эта учетная запись.
          • Если файлы в облаке редактирует только один пользователь, рекомендуется указать его в качестве автора новых и измененных файлов. -
            • В этом случае с помощью переключателя выберите Пользователь, с помощью кнопки  выберите тип пользователей, нажмите ОК. Затем выберите нужного пользователя из соответствующего списка.

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

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

        См. также:

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

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

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index 31403b86d..09b49a86c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -130,7 +130,6 @@ СообщенияОбОшибкахОткрытие 2 - true true false true @@ -148,46 +147,6 @@ Normal
      - - НужнаПомощь - 272 - - <key>ru</key> - <value>Нужна помощь?</value> - - true - true - - true - - - НужнаПомощьРасширеннаяПодсказка - 274 - Label - true - true - - Left - - - - НужнаПомощьКонтекстноеМеню - 273 - true - - Label - true - true - Left - - - Click - НужнаПомощьНажатие - - true - Left - - true true @@ -197,6 +156,7 @@ ru Сообщения об ошибках + false ГруппаСообщенияОбОшибкахРасширеннаяПодсказка 271 @@ -2531,46 +2491,6 @@ Normal
      - - НужнаПомощьТехническиеПодробностиОшибки - 287 - - <key>ru</key> - <value>Нужна помощь?</value> - - true - true - - true - - - НужнаПомощьТехническиеПодробностиОшибкиРасширеннаяПодсказка - 289 - Label - true - true - - Left - - - - НужнаПомощьТехническиеПодробностиОшибкиКонтекстноеМеню - 288 - true - - Label - true - true - Left - - - Click - НужнаПомощьНажатие - - true - Left - - true true @@ -2873,7 +2793,6 @@ Left true - 40 2 true false @@ -2900,6 +2819,7 @@ ru Описание ошибки + false ГруппаОписаниеОшибкиРасширеннаяПодсказка 396 @@ -2920,23 +2840,57 @@
      - ГруппаВозможныеПричины - 405 - - ДекорацияВозможныеПричины - 407 - - <key>ru</key> - <value>Декорация возможные причины</value> - + ГруппаРекомендацииВозможныеПричины + 523 + + ГруппаРекомендации + 525 + + ДекорацияРекомендации + 527 + + <key>ru</key> + <value>Рекомендации</value> + + true + true + + true + + + ДекорацияРекомендацииРасширеннаяПодсказка + 529 + Label + true + true + + Left + + + + ДекорацияРекомендацииКонтекстноеМеню + 528 + true + + Label + true + true + + Left + + true true true + + <key>ru</key> + <value>Рекомендации</value> + - ДекорацияВозможныеПричиныРасширеннаяПодсказка - 409 + ГруппаРекомендацииРасширеннаяПодсказка + 526 Label true true @@ -2944,16 +2898,80 @@ Left - - ДекорацияВозможныеПричиныКонтекстноеМеню - 408 - true - - Label - true - true - - Left + UsualGroup + + HorizontalIfPossible + true + true + auto + Auto + Auto + + + + ГруппаВозможныеПричины + 530 + + ДекорацияВозможныеПричины + 532 + + <key>ru</key> + <value>Возможные причины</value> + + true + true + + true + + + ДекорацияВозможныеПричиныРасширеннаяПодсказка + 534 + Label + true + true + + Left + + + + ДекорацияВозможныеПричиныКонтекстноеМеню + 533 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Возможные причины</value> + + + ГруппаВозможныеПричиныРасширеннаяПодсказка + 531 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + auto + Auto + Auto true @@ -2963,11 +2981,11 @@ <key>ru</key> - <value>Возможные причины</value> + <value>Рекомендации и возможные причины</value> - ГруппаВозможныеПричиныРасширеннаяПодсказка - 406 + ГруппаРекомендацииВозможныеПричиныРасширеннаяПодсказка + 524 Label true true @@ -2978,151 +2996,6 @@ UsualGroup Vertical - Button - NormalSeparation - true - true - auto - Auto - Auto - - - - ГруппаСпособыУстранения - 410 - - ДекорацияСпособыУстранения - 412 - - <key>ru</key> - <value>Декорация способы устранения</value> - - true - true - - true - - - ДекорацияСпособыУстраненияРасширеннаяПодсказка - 414 - Label - true - true - - Left - - - - ДекорацияСпособыУстраненияКонтекстноеМеню - 413 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Способы устранения</value> - - - ГруппаСпособыУстраненияРасширеннаяПодсказка - 411 - Label - true - true - - Left - - - UsualGroup - - Vertical - Button - NormalSeparation - true - true - auto - Auto - Auto - - - - ГруппаДополнительныеСсылки - 415 - - РекомендацииПоРешениюТиповыхПроблем - 417 - - <key>ru</key> - <value>Рекомендации по решению типовых проблем</value> - - true - true - - true - - - РекомендацииПоРешениюТиповыхПроблемРасширеннаяПодсказка - 419 - Label - true - true - - Left - - - - РекомендацииПоРешениюТиповыхПроблемКонтекстноеМеню - 418 - true - - Label - true - true - Left - - - Click - НужнаПомощьНажатие - - true - Left - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные ссылки</value> - - true - - ГруппаДополнительныеСсылкиРасширеннаяПодсказка - 416 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Bottom - NormalSeparation true true Auto @@ -3180,11 +3053,175 @@ - КоманднаяПанель + ГруппаПодвал 28 - КоманднаяПанельЛеваяЧасть - 11 + ГруппаТребуетсяПомощь + 504 + + ГруппаОбращенияВТехническуюПоддержку + 540 + + ОписаниеОбращенияВПоддержку + 542 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 544 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 543 + true + + Label + true + + Left + + + + ВопросВПоддержку + 547 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 548 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 551 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 552 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.Скачать + + Auto + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 541 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Требуется помощь?</value> + + Center + + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + UsualGroup + + Vertical + PopUp + WeakSeparation + true + true + auto + Auto + Auto + + + + КоманднаяПанель + 30 КнопкаНазад 20 @@ -3215,33 +3252,6 @@ UserCmds Auto - true - true - - true - - - <key>ru</key> - <value>Командная панель левая часть</value> - - - КоманднаяПанельЛеваяЧастьРасширеннаяПодсказка - 12 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельПраваяЧасть - 30 КнопкаПерейтиКНастройкам 156 @@ -3339,10 +3349,10 @@ <key>ru</key> - <value>Командная панель правая часть</value> + <value>Командная панель</value> - КоманднаяПанельПраваяЧастьРасширеннаяПодсказка + КоманднаяПанельРасширеннаяПодсказка 31 Label true @@ -3354,6 +3364,7 @@ CommandBar Right + Form true @@ -3363,11 +3374,11 @@ <key>ru</key> - <value>Командная панель</value> + <value>Подвал</value> true - КоманднаяПанельРасширеннаяПодсказка + ГруппаПодвалРасширеннаяПодсказка 29 Label true @@ -4328,6 +4339,34 @@ true + + ВремяРегистрацииОшибки + 65 + + Date + + + + true + + + true + + + + КраткоеОписаниеОшибки + 66 + + String + + + + true + + + true + + Назад @@ -4404,6 +4443,42 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВопросВПоддержку</name> + <title> + <key>ru</key> + <value>Вопрос в поддержку</value> + + 9 + + true + + + + ВопросВПоддержку + + + Auto + Auto + + + ИнформацияДляОтправкиВПоддержку + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + 10 + + true + + + + ИнформацияДляОтправкиВПоддержку + + + Auto + Auto + КонтекстныйРежим diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index d469d72f0..0e34b766e 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -63,8 +63,10 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ТипАдресЭлектроннойПочты = МодульУправлениеКонтактнойИнформацией.ТипАдресЭлектроннойПочты(); КонтактнаяИнформацияОбъекта = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта( - Пользователи.ТекущийПользователь(), Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты, , Ложь); + Пользователи.ТекущийПользователь(), ТипАдресЭлектроннойПочты, , Ложь); + Для Каждого Контакт Из КонтактнаяИнформацияОбъекта Цикл Адрес = Контакт.Представление; Если Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоРеквизиту("АдресЭлектроннойПочты", Адрес).Пустая() Тогда @@ -95,7 +97,22 @@ Элементы.ГруппаСпособАутентификацииПароль.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; Элементы.Пароль.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; КонецЕсли; - + + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаКлиенте @@ -168,13 +185,6 @@ ИспользоватьЗащищенноеСоединениеДляВходящейПочты = ШифрованиеПриПолученииПочты = "SSL"; КонецПроцедуры -&НаКлиенте -Процедура НужнаПомощьНажатие(Элемент) - - РаботаСПочтовымиСообщениямиКлиент.ПерейтиКДокументацииПоВводуУчетнойЗаписиЭлектроннойПочты(); - -КонецПроцедуры - &НаКлиенте Процедура СообщенияОбОшибкахОткрытие(Элемент, СтандартнаяОбработка) @@ -231,7 +241,8 @@ Элементы.Страницы.ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи; КонецЕсли; - НастроитьЭлементыТекущейСтраницы() + НастроитьЭлементыТекущейСтраницы(); + КонецПроцедуры &НаКлиенте @@ -240,6 +251,63 @@ Закрыть(Ложь); КонецПроцедуры +&НаКлиенте +Процедура ВопросВПоддержку(Команда) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + Если ЗначениеЗаполнено(КраткоеОписаниеОшибки) Тогда + ОписаниеДляТемыОбращения = КраткоеОписаниеОшибки; + Иначе + ОписаниеДляТемыОбращения = СообщенияОбОшибках; + КонецЕсли; + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = СообщенияОбОшибках; + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаНачала", ВремяРегистрацииОшибки); + + ПараметрыОбращения.Тема = РаботаСПочтовымиСообщениямиСлужебныйКлиент.ТемаОбращенияВПоддержку( + ОписаниеДляТемыОбращения); + + ПараметрыОбращения.Сообщение = РаботаСПочтовымиСообщениямиСлужебныйКлиент.ТекстОбращенияВПоддержку( + АдресЭлектроннойПочты, + ОписаниеДляТемыОбращения); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = СообщенияОбОшибках; + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаНачала", ВремяРегистрацииОшибки); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -646,7 +714,6 @@ Иначе Элементы.КнопкаПерейтиКНастройкам.Заголовок = НСтр("ru = 'Настроить вручную'"); КонецЕсли; - Если ТекущаяСтраница = Элементы.НастройкаУчетнойЗаписи Тогда Элементы.НеУдалосьПодключитьсяКартинкаИНадпись.Видимость = ПроверкаЗавершиласьСОшибками; @@ -763,6 +830,7 @@ РезультатПроверки = Справочники.УчетныеЗаписиЭлектроннойПочты.ПроверитьНастройкиПрофилей( ПрофильИсходящейПочты, ПрофильВходящейПочты, АдресЭлектроннойПочты); + КраткоеОписаниеОшибки = СтрСоединить(РезультатПроверки.ТекстыОшибок, Символы.ПС); СообщенияОбОшибках = РезультатПроверки.ОшибкиПодключения; ПроверкаЗавершиласьСОшибками = ЗначениеЗаполнено(СообщенияОбОшибках); @@ -775,6 +843,23 @@ КонецПопытки; КонецЕсли; + Если ПроверкаЗавершиласьСОшибками Тогда + + ВремяРегистрацииОшибки = ТекущаяДатаСеанса(); + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПоказатьРазделТребуетсяПомощь(Элементы); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + + КонецЕсли; + КонецПроцедуры &НаСервере @@ -995,6 +1080,7 @@ ОбщегоНазначенияКлиент.ОповеститьОбИзмененииОбъекта(СсылкаНовойУчетнойЗаписи); КонецЕсли; КонецЕсли; + ПерейтиНаСледующуюСтраницу(); КонецПроцедуры @@ -1599,8 +1685,8 @@ ВозможныеПричины = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.ВозможныеПричины); СпособыУстранения = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.СпособыУстранения); + Элементы.ДекорацияРекомендации.Заголовок = СпособыУстранения; Элементы.ДекорацияВозможныеПричины.Заголовок = ВозможныеПричины; - Элементы.ДекорацияСпособыУстранения.Заголовок = СпособыУстранения; КонецПроцедуры diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Help/ru.html index 1bba47b67..1db8e48a7 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаДоступаКУчетнойЗаписи/Help/ru.html @@ -1 +1 @@ -При изменении настроек уже введенной персональной почты приложения просит ввести пароль. Это сделано для того, чтобы никто (даже администратор) не мог получить доступ к персональной почте. \ No newline at end of file +При изменении настроек уже введенной персональной почты приложения просит ввести пароль. Это сделано для того, чтобы никто (даже администратор) не мог получить доступ к персональной почте. \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form index 69fe0f85f..dfdf567ef 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Form.form @@ -102,15 +102,11 @@ ПриПроверкеОбнаруженыОшибки 3 - ГруппаОписаниеОшибки - 202 + ГруппаЗаголовокПредупреждение + 388 КартинкаПредупреждение 13 - - <key>ru</key> - <value>Картинка вопрос</value> - true true @@ -133,46 +129,16 @@ true true + Center StdPicture.DialogExclamation - - ГруппаСообщенияОбОшибках - 16 - true - true - - true - - - <key>ru</key> - <value>Сообщения об ошибках</value> - - - ГруппаСообщенияОбОшибкахРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - СообщенияОбОшибках - 18 + 444 <key>ru</key> <value>Сообщения об ошибках</value> @@ -188,7 +154,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>СообщенияОбОшибкахРасширеннаяПодсказка</name> - <id>20</id> + <id>446</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -198,20 +164,18 @@ </extendedTooltip> <contextMenu> <name>СообщенияОбОшибкахКонтекстноеМеню</name> - <id>19</id> + <id>445</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> <readOnly>true</readOnly> + <groupVerticalAlign>Center</groupVerticalAlign> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> - <width>40</width> <height>2</height> - <horizontalStretch>true</horizontalStretch> - <verticalStretch>false</verticalStretch> <wrap>true</wrap> <multiLine>true</multiLine> <chooseType>true</chooseType> @@ -233,11 +197,12 @@ </userVisible> <title> <key>ru</key> - <value>Описание ошибки</value> + <value>Группа1</value> + false - ГруппаОписаниеОшибкиРасширеннаяПодсказка - 203 + ГруппаЗаголовокПредупреждениеРасширеннаяПодсказка + 389 Label true true @@ -248,6 +213,7 @@ UsualGroup AlwaysHorizontal + Auto true true Auto @@ -255,23 +221,61 @@ - ГруппаВозможныеПричины - 184 - - ДекорацияВозможныеПричины - 266 - - <key>ru</key> - <value>Декорация возможные причины</value> - + ГруппаРекомендацииВозможныеПричины + 338 + + ГруппаРекомендации + 340 + + ДекорацияРекомендации + 269 + + <key>ru</key> + <value>Рекомендации</value> + + true + true + + true + + + ДекорацияРекомендацииРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ДекорацияРекомендацииКонтекстноеМеню + 270 + true + + Label + true + true + + + URLProcessing + РекомендацииВозможныеПричиныОбработкаНавигационнойСсылки + + Left + + true true true + + <key>ru</key> + <value>Рекомендации</value> + - ДекорацияВозможныеПричиныРасширеннаяПодсказка - 268 + ГруппаРекомендацииРасширеннаяПодсказка + 341 Label true true @@ -279,20 +283,84 @@ Left - - ДекорацияВозможныеПричиныКонтекстноеМеню - 267 - true - - Label - true - true - - - URLProcessing - СпособыУстраненияОбработкаНавигационнойСсылки - - Left + UsualGroup + + HorizontalIfPossible + true + true + auto + Auto + Auto + + + + ГруппаВозможныеПричины + 345 + + ДекорацияВозможныеПричины + 266 + + <key>ru</key> + <value>Возможные причины</value> + + true + true + + true + + + ДекорацияВозможныеПричиныРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + + ДекорацияВозможныеПричиныКонтекстноеМеню + 267 + true + + Label + true + true + + + URLProcessing + РекомендацииВозможныеПричиныОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Возможные причины</value> + + + ГруппаВозможныеПричиныРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + auto + Auto + Auto true @@ -302,11 +370,11 @@ <key>ru</key> - <value>Возможные причины</value> + <value>Рекомендации и возможные причины</value> - ГруппаВозможныеПричиныРасширеннаяПодсказка - 185 + ГруппаРекомендацииВозможныеПричиныРасширеннаяПодсказка + 339 Label true true @@ -317,68 +385,27 @@ UsualGroup Vertical - Button - NormalSeparation true true - auto Auto Auto - - ГруппаСпособыУстранения - 186 - - ДекорацияСпособыУстранения - 269 - - <key>ru</key> - <value>Декорация способы устранения</value> - - true - true - - true - - - ДекорацияСпособыУстраненияРасширеннаяПодсказка - 271 - Label - true - true - - Left - - - - ДекорацияСпособыУстраненияКонтекстноеМеню - 270 - true - - Label - true - true - - - URLProcessing - СпособыУстраненияОбработкаНавигационнойСсылки - - Left - - + + ДекорацияТехническиеПодробности + 441 + + <key>ru</key> + <value>Технические подробности</value> + true true true - - <key>ru</key> - <value>Способы устранения</value> - - ГруппаСпособыУстраненияРасширеннаяПодсказка - 187 + ДекорацияТехническиеПодробностиРасширеннаяПодсказка + 443 Label true true @@ -386,129 +413,24 @@ Left - UsualGroup - - Vertical - Button - NormalSeparation - true - true - auto - Auto - Auto - - - - ГруппаДополнительныеСсылки - 210 - - НужнаПомощь - 21 - - <key>ru</key> - <value>Рекомендации по решению типовых проблем</value> - - true - true - - true - - - НужнаПомощьРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - НужнаПомощьКонтекстноеМеню - 22 - true - - Label - true - true - Left - - - Click - НужнаПомощьНажатие - - true - Left - - - - СсылкаИнформацияДляТехподдержки - 212 - - <key>ru</key> - <value>Информация для техподдержки</value> - - true - true - - true - - - СсылкаИнформацияДляТехподдержкиРасширеннаяПодсказка - 214 - Label - true - true - - Left - - - - СсылкаИнформацияДляТехподдержкиКонтекстноеМеню - 213 - true - - Label - true - true - - - Click - СсылкаИнформацияДляТехподдержкиНажатие - - true - Left - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные ссылки</value> - - true - - ГруппаДополнительныеСсылкиРасширеннаяПодсказка - 211 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Bottom - NormalSeparation - true - true - Auto - Auto + + ДекорацияТехническиеПодробностиКонтекстноеМеню + 442 + true + + Label + true + true + + Style.AccentColor + + + + Click + ДекорацияТехническиеПодробностиНажатие + + true + Left true @@ -712,145 +634,29 @@ - СтраницаИнформацияДляТехподдержки - 215 - - ГруппаОписаниеОшибки1 - 217 - - КартинкаПредупреждение1 - 219 - - <key>ru</key> - <value>Картинка вопрос</value> - - true - true - - true - - - КартинкаПредупреждение1РасширеннаяПодсказка - 221 - Label - true - true - - Left - - - - КартинкаПредупреждение1КонтекстноеМеню - 220 - true - - true - true - - - StdPicture.DialogExclamation - - - - - ГруппаСообщенияОбОшибках1 - 222 - - ТекстИнформацияДляТехподдержки - 224 - - <key>ru</key> - <value>Информация для техподдержки</value> - - true - true - - true - - - ИнформацияДляТехподдержки - - None - - ТекстИнформацияДляТехподдержкиРасширеннаяПодсказка - 226 - Label - true - true - - Left - - - - ТекстИнформацияДляТехподдержкиКонтекстноеМеню - 225 - true - - InputField - true - Enter - true - Left - true - - 40 - 2 - true - true - true - true - true - true - true - - Style.FormBackColor - - - Style.FormBackColor - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сообщения об ошибках</value> - - - ГруппаСообщенияОбОшибках1РасширеннаяПодсказка - 223 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - + ТехническиеПодробности + 447 + + ИнформацияДляПоддержки + 449 + + <key>ru</key> + <value>Технические подробности</value> + + + Style.AccentColor + true true true - - <key>ru</key> - <value>Группа описание ошибки</value> - + + ИнформацияДляПоддержки + - ГруппаОписаниеОшибки1РасширеннаяПодсказка - 218 + ИнформацияДляПоддержкиРасширеннаяПодсказка + 451 Label true true @@ -858,13 +664,30 @@ Left - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto + + ИнформацияДляПоддержкиКонтекстноеМеню + 450 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + + Style.FormBackColor + + + Style.FormBackColor + + Normal true @@ -874,11 +697,11 @@ <key>ru</key> - <value>При проверке обнаружены ошибки</value> + <value>Технические подробности</value> - СтраницаИнформацияДляТехподдержкиРасширеннаяПодсказка - 216 + ТехническиеПодробностиРасширеннаяПодсказка + 448 Label true true @@ -917,97 +740,319 @@ Auto - Bottom - true + + ГруппаПодвал + 365 + + ГруппаТребуетсяПомощь + 369 + + ГруппаОбращенияВТехническуюПоддержку + 468 + + ОписаниеОбращенияВПоддержку + 425 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 427 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 426 + true + + Label + true + + Left + + + + ВопросВПоддержку + 386 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 376 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.Скачать + + Auto + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Требуется помощь?</value> + + Center + + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 370 + Label + true + true + + Left + + + UsualGroup + + Vertical + PopUp + WeakSeparation + true + true + auto + Auto + Auto + + + + КоманднаяПанель + 367 + + ФормаНазад + 418 + + <key>ru</key> + <value>< Назад</value> + + true + true + + true + + + ФормаНазадРасширеннаяПодсказка + 419 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПерейтиКНастройкам + 200 + + <key>ru</key> + <value>Перейти к настройкам</value> + + true + true + + true + + + ФормаПерейтиКНастройкамРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + Form.Command.ПерейтиКНастройкам + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть + 179 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + Form.StandardCommand.Close + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа1</value> + + + КоманднаяПанельРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + CommandBar + + Right + Form + + + true + true + + true + + + <key>ru</key> + <value>Подвал</value> + + + ГруппаПодвалРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + ФормаКоманднаяПанель -1 - - ФормаНазад - 253 - - <key>ru</key> - <value>< Назад</value> - - true - true - - true - - - ФормаНазадРасширеннаяПодсказка - 254 - Label - true - true - - Left - - - Form.Command.Назад - Normal - Auto - true - true - UserCmds - Auto - - - ФормаПерейтиКНастройкам - 200 - - <key>ru</key> - <value>Перейти к настройкам</value> - - true - true - - true - - - ФормаПерейтиКНастройкамРасширеннаяПодсказка - 201 - Label - true - true - - Left - - - Form.Command.ПерейтиКНастройкам - Normal - Auto - true - true - UserCmds - Auto - - - ФормаЗакрыть - 179 - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - Auto - true - true - UserCmds - Auto - Right true @@ -1103,10 +1148,10 @@ - ИнформацияДляТехподдержки + ИнформацияДляПоддержки <key>ru</key> - <value>Информация для техподдержки</value> + <value>Информация для поддержки</value> 5 @@ -1162,6 +1207,20 @@ true + + ВремяРегистрацииОшибки + 9 + + Date + + + + true + + + true + + ПерейтиКНастройкам @@ -1180,13 +1239,49 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ВопросВПоддержку</name> + <title> + <key>ru</key> + <value>Вопрос в поддержку</value> + + 4 + + true + + + + ВопросВПоддержку + + + Auto + Auto + + + ИнформацияДляОтправкиВПоддержку + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + 5 + + true + + + + ИнформацияДляОтправкиВПоддержку + + + Auto + Auto + Назад <key>ru</key> <value>< Назад</value> - 3 + 6 true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Module.bsl index 9a5ecb6cc..80c7e0077 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПроверкаНастроекУчетнойЗаписи/Module.bsl @@ -12,31 +12,71 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СообщенияОбОшибках = Параметры.ТекстОшибки; + Если ЗначениеЗаполнено(СообщенияОбОшибках) Тогда Заголовок = Параметры.Заголовок; АвтоЗаголовок = Ложь; - Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки; ЗаполнитьПояснения(); УстановитьКлючСохраненияПоложенияОкна(); Иначе - Элементы.Страницы.ТекущаяСтраница = Элементы.ВыполняетсяПроверкаНастроек; Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'"); Элементы.ФормаПерейтиКНастройкам.Видимость = Ложь; КонецЕсли; + Элементы.Страницы.ТекущаяСтраница = Элементы.ВыполняетсяПроверкаНастроек; + Элементы.ФормаНазад.Видимость = Ложь; + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Не ЗначениеЗаполнено(СообщенияОбОшибках) Тогда - ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина); + ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РекомендацииВозможныеПричиныОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + Если ОбщегоНазначенияКлиентСервер.СтруктураURI(НавигационнаяСсылка).Схема = "" Тогда + СтандартнаяОбработка = Ложь; + ИдентификаторИсправления = НавигационнаяСсылка; + ПерейтиКНастройкамПочты(); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ДекорацияТехническиеПодробностиНажатие(Элемент) + + Элементы.Страницы.ТекущаяСтраница = Элементы.ТехническиеПодробности; + Элементы.ФормаНазад.Видимость = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + &НаКлиенте Процедура ПерейтиКНастройкам(Команда) @@ -48,29 +88,58 @@ Процедура Назад(Команда) Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки; - Заголовок = Параметры.Заголовок; - АвтоЗаголовок = Ложь; Элементы.ФормаНазад.Видимость = Ложь; КонецПроцедуры -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - &НаКлиенте -Процедура НужнаПомощьНажатие(Элемент) - РаботаСПочтовымиСообщениямиКлиент.ПерейтиКДокументацииПоВводуУчетнойЗаписиЭлектроннойПочты(); +Процедура ВопросВПоддержку(Команда) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = ИнформацияДляПоддержки; + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаНачала", ВремяРегистрацииОшибки); + + ПараметрыОбращения.Тема = РаботаСПочтовымиСообщениямиСлужебныйКлиент.ТемаОбращенияВПоддержку( + СообщенияОбОшибках); + + ПараметрыОбращения.Сообщение = РаботаСПочтовымиСообщениямиСлужебныйКлиент.ТекстОбращенияВПоддержку( + Параметры.УчетнаяЗапись, + СообщенияОбОшибках); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаКлиенте -Процедура СпособыУстраненияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) +Процедура ИнформацияДляОтправкиВПоддержку(Команда) - Если ОбщегоНазначенияКлиентСервер.СтруктураURI(НавигационнаяСсылкаФорматированнойСтроки).Схема = "" Тогда - СтандартнаяОбработка = Ложь; - ИдентификаторИсправления = НавигационнаяСсылкаФорматированнойСтроки; - ПерейтиКНастройкамПочты(); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = ИнформацияДляПоддержки; + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаНачала", ВремяРегистрацииОшибки); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку КонецПроцедуры @@ -87,21 +156,6 @@ ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); КонецПроцедуры -&НаКлиенте -Процедура СсылкаИнформацияДляТехподдержкиНажатие(Элемент) - - Если ЗначениеЗаполнено(ИнформацияДляТехподдержки) Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацияДляТехподдержки; - Элементы.ФормаНазад.Видимость = Истина; - Иначе - Элементы.Страницы.ТекущаяСтраница = Элементы.ВыполняетсяПроверкаНастроек; - Заголовок = ""; - АвтоЗаголовок = Истина; - ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина); - КонецЕсли; - -КонецПроцедуры - &НаСервере Функция НачатьВыполнениеНаСервере() ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор); @@ -123,31 +177,49 @@ Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'"); Если Результат.Статус = "Ошибка" Тогда - СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке( - Результат.ИнформацияОбОшибке); + СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке); Возврат; КонецЕсли; РезультатПроверки = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); - ИнформацияДляТехподдержки = РезультатПроверки.ОшибкиПодключения; + ИнформацияДляПоддержки = РезультатПроверки.ОшибкиПодключения; ВыполненныеПроверки = РезультатПроверки.ВыполненныеПроверки; - Если ЗначениеЗаполнено(ИнформацияДляТехподдержки) Тогда - Если ЗначениеЗаполнено(СообщенияОбОшибках) Тогда - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацияДляТехподдержки; - Элементы.ФормаНазад.Видимость = Истина; - Иначе + Если ЗначениеЗаполнено(ИнформацияДляПоддержки) Тогда + + Если Не ЗначениеЗаполнено(СообщенияОбОшибках) Тогда СообщенияОбОшибках = СтрСоединить(РезультатПроверки.ТекстыОшибок, Символы.ПС); ЗаполнитьПояснения(); - Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки; КонецЕсли; + + Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки; + + ВремяРегистрацииОшибки = ОбщегоНазначенияКлиент.ДатаСеанса(); + ПоказатьРазделТребуетсяПомощь(); + Иначе Элементы.Страницы.ТекущаяСтраница = Элементы.ПроверкаУспешноВыполнена; КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ПоказатьРазделТребуетсяПомощь() + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПоказатьРазделТребуетсяПомощь(Элементы); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьПояснения() @@ -156,8 +228,8 @@ ВозможныеПричины = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.ВозможныеПричины); СпособыУстранения = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.СпособыУстранения); + Элементы.ДекорацияРекомендации.Заголовок = СпособыУстранения; Элементы.ДекорацияВозможныеПричины.Заголовок = ВозможныеПричины; - Элементы.ДекорацияСпособыУстранения.Заголовок = СпособыУстранения; КонецПроцедуры diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index a3d3102f1..9253865bb 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -1677,46 +1677,6 @@ Auto - - НужнаПомощь - 269 - - <key>ru</key> - <value>Нужна помощь?</value> - - true - true - - true - - - НужнаПомощьРасширеннаяПодсказка - 271 - Label - true - true - - Left - - - - НужнаПомощьКонтекстноеМеню - 270 - true - - Label - true - true - Right - - - Click - НужнаПомощьНажатие - - true - Left - - true true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index a72876c26..9c625a8c5 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html @@ -1,7 +1,7 @@

      Настройка электронной почты.

      -

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

      -

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

      +

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

      +

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

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

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

      Использование почты

      +
      Укажите Имя отправителя писем - имя владельца почты, которое будет указываться в корреспонденции, при этом оно может отличаться от имени пользователя в приложении, например, пользователь "Администратор", а имя его "Иван Иванович".

      Использование почты

      • Укажите, как использовать электронную почту:
        • @@ -43,10 +43,10 @@
          • Авто;
          • Всегда (SSL).
      • -
      • При необходимости включите флажок При отправке писем требуется авторизация на сервере исходящей почты (SMTP).

      Настройки сервера POP

      -
      • Укажите Логин почты в формате User@Server.net, введите Пароль почты. +
      • При необходимости включите флажок При отправке писем требуется авторизация на сервере исходящей почты (SMTP).

      Настройки сервера POP

      +
      • Укажите Логин почты в формате User@Server.net, введите Пароль почты.
      • -
      • Включите флажок Оставлять копии писем на сервере, для того чтобы приложение не удалила письма в папке "Входящие" почтового ящика электронной почты. По умолчанию флажок отключен, в этом случае все письма после получения будут удалены с почтового сервера. После этого становится доступным флажок: +
      • Включите флажок Оставлять копии писем на сервере, для того чтобы приложение не удалила письма в папке "Входящие" почтового ящика электронной почты. По умолчанию флажок отключен, в этом случае все письма после получения будут удалены с почтового сервера. После этого становится доступным флажок:
        • Определите срок хранения писем на почтовом сервере с помощью флажка Удалять письма с сервера через - например, через "10 дней".
      • Укажите Сервер POP, например, pop.Server.net, укажите Порт, например, 995.
        • Выберите, когда производить Шифрование: @@ -56,7 +56,7 @@
        • Всегда (SSL).

    • -

      Укажите Сервер SMTP, например, smtp.Server.net, Порт, например, 465.

      +

      Укажите Сервер SMTP, например, smtp.Server.net, Порт, например, 465.

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

      @@ -70,13 +70,13 @@
    • на сервере входящей почты (POP).
    • Проверка настроек

      • -

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

        +

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

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

      Изменение персональной почты

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

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 8a2c97f43..d0fdacaa6 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -175,22 +175,22 @@ &НаКлиенте Процедура ПоказатьСпособИсправления(СпособИсправления, ДополнительныеПараметры = Неопределено) Экспорт - Если СпособИсправления = "ВключитьИспользованиеАвторизацииSMTP" Тогда + Если СпособИсправления = "b186a13d-a8b1-4a30-acf3-f1a09f104deb" Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Включите авторизацию на сервере исходящей почты.'"), Объект.Ссылка, , "Объект.ПриОтправкеПисемТребуетсяАвторизация"); - ИначеЕсли СпособИсправления = "Перенастроить" Тогда + ИначеЕсли СпособИсправления = "00aae216-28f1-4b32-8ac5-d2a104368df5" Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Для перенастройки почты нажмите на кнопку ""Перенастроить"".'"), Объект.Ссылка); - ИначеЕсли СпособИсправления = "ИспользоватьSTARTTLSДляВходящейПочты" Тогда + ИначеЕсли СпособИсправления = "bf66cd93-d8d0-419a-afc0-09ca83d93436" Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Переключите шифрование на STARTTLS (для входящей почты).'"), Объект.Ссылка, "ШифрованиеПриПолученииПочты"); - ИначеЕсли СпособИсправления = "ПерезаполнитьЛогинИПароль" Тогда + ИначеЕсли СпособИсправления = "5788b71c-7d93-41dd-9061-4c515cd6c4b2" Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Попробуйте очистить и ввести заново логин.'"), Объект.Ссылка, , "Объект.Пользователь"); - ИначеЕсли СпособИсправления = "ПерезаполнитьПароль" Тогда + ИначеЕсли СпособИсправления = "374cae78-09b2-4384-810c-185a82e8e595" Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Введите пароль.'"), Объект.Ссылка, "Пароль"); - ИначеЕсли СпособИсправления = "ЗаполнитьАдресПочты" Тогда + ИначеЕсли СпособИсправления = "a34d21d8-a673-4ee3-be7e-e8bd217b1fd2" Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Проверьте адрес почты.'"), Объект.Ссылка, "Объект.АдресЭлектроннойПочты"); КонецЕсли; @@ -319,13 +319,6 @@ УстановитьВидНастройкиХраненияПисемНаСервере(); КонецПроцедуры -&НаКлиенте -Процедура НужнаПомощьНажатие(Элемент) - - РаботаСПочтовымиСообщениямиКлиент.ПерейтиКДокументацииПоВводуУчетнойЗаписиЭлектроннойПочты(); - -КонецПроцедуры - &НаКлиенте Процедура ИспользованиеПриИзменении(Элемент) Элементы.ФормаПроверитьНастройки.Доступность = Объект.ИспользоватьДляОтправки Или Объект.ИспользоватьДляПолучения; diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index 9b4cf8ae6..5a7475168 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html @@ -1,27 +1,27 @@ -

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

      -

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

      +

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

      +

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

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

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

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

      +
    • Адрес электронной почты в формате name@server.net.
    • Для электронной почты, получение и отправка с которой выполняется автоматически без участия пользователя, должен быть обязательно введен пароль. Также для корректной работы приложения обязательно должна быть настроена электронная почта.

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

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

        Настройка электронной почты

        -
        • При попытке сохранения приложение проверяет введенную электронную почту (пытается отослать пробное сообщение). Электронная почта, не прошедшая проверку, не сохраняются. +
          • При попытке сохранения приложение проверяет введенную электронную почту (пытается отослать пробное сообщение). Электронная почта, не прошедшая проверку, не сохраняются.
          • Нажмите Создать, введите необходимые поля:
            • Укажите Адрес почты в формате name@server.net;
            • С помощью переключателя выберите способ авторизации:
            • -
              • Ввести пароль, в этом случае укажите в поле справа Пароль почты; +
                • Ввести пароль, в этом случае укажите в поле справа Пароль почты;
                • -
                • Авторизоваться на почтовом сервисе, в этом случае приложение выводит инструкцию авторизации, которая зависит от почтового сервиса. Следуйте инструкции приложения.
                • -
                  • На почтовом сервисе потребуется указать данные о приложении, например, callback URL, который приложение формирует автоматически.
                  • -
                  • Воспользовавшись указаниями почтового сервиса, зарегистрируйте приложение, получите данные для авторизации и заполните нужные поля, например: 
                  • +
                  • Авторизоваться на почтовом сервисе, в этом случае приложение выводит инструкцию авторизации, которая зависит от почтового сервиса. Следуйте инструкции приложения.
                  • +
                    • На почтовом сервисе потребуется указать данные о приложении, например, callback URL, который приложение формирует автоматически.
                    • +
                    • Воспользовавшись указаниями почтового сервиса, зарегистрируйте приложение, получите данные для авторизации и заполните нужные поля, например:
                          • ID приложения;
                          • пароль приложения (client secret).
                • Установите с помощью флажков, как Почта будет использоваться:
                  • Для отправки писем; @@ -32,14 +32,14 @@
                  • Только мной.
                • Укажите Имя отправителя (Ваше имя или название организации);
              • -
              • Нажмите Создать. Будет предпринята попытка автоматической настройки и проверки почты. Следуйте указаниям приложения. При этом если при автоматической настройке произошел сбой, можно попытаться настроить параметры вручную. 
              • +
              • Нажмите Создать. Будет предпринята попытка автоматической настройки и проверки почты. Следуйте указаниям приложения. При этом если при автоматической настройке произошел сбой, можно попытаться настроить параметры вручную.
              • Если автоматически настроить почту не удалось, нажмите Настроить вручную.
                • -

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

              Настройка электронной почты

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

              Проверка настроек электронной почты

              +

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

          Настройка электронной почты

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

          Проверка настроек электронной почты

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

          См. также: 

          +
          Если в почте не указан пароль, он будет запрошен.

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index 622dbdc26..fd62f010c 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -1483,16 +1483,12 @@ Функция ИнформацияОПрограмме() - СистемнаяИнформация = Новый СистемнаяИнформация; - Результат = Новый Массив; - Результат.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Операционная система: %1'"), СистемнаяИнформация.ВерсияОС)); - Результат.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Платформа: %1 (%2)'"), - СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); - Результат.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Конфигурация: %1 (%2)'"), - ?(ЗначениеЗаполнено(Метаданные.Синоним), Метаданные.Синоним, Метаданные.Имя), Метаданные.Версия)); - - Результат.Добавить(Символы.ПС + НСтр("ru = 'Расширения:'")); + + ИнформацияДляПоддержки = СтандартныеПодсистемыСервер.ИнформацияДляПоддержки(); + Результат.Добавить(ИнформацияДляПоддержки); + + Результат.Добавить(НСтр("ru = 'Расширения:'")); УстановитьПривилегированныйРежим(Истина); Для Каждого Расширение Из РасширенияКонфигурации.Получить() Цикл diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form b/SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Form.form similarity index 98% rename from SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form rename to SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Form.form index 546650a20..c18c4650c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Загрузка файлов </value> + <value>Загрузка файлов с компьютера</value> ГруппаФайлы @@ -454,11 +454,11 @@ - УдалятьПослеДобавления + УдалитьФайлыПослеЗагрузки 3 <key>ru</key> - <value>Удалять файлы после добавления</value> + <value>Удалить файлы с компьютера после загрузки</value> true true @@ -466,11 +466,11 @@ true - УдалятьФайлыПослеДобавления + УдалитьФайлыПослеЗагрузки Right - УдалятьПослеДобавленияРасширеннаяПодсказка + УдалитьФайлыПослеЗагрузкиРасширеннаяПодсказка 56 Label true @@ -480,7 +480,7 @@ - УдалятьПослеДобавленияКонтекстноеМеню + УдалитьФайлыПослеЗагрузкиКонтекстноеМеню 10 true @@ -859,10 +859,10 @@ - УдалятьФайлыПослеДобавления + УдалитьФайлыПослеЗагрузки <key>ru</key> - <value>Удалять файлы после добавления</value> + <value>Удалить файлы после загрузки</value> 4 diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Help/ru.html similarity index 59% rename from SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Help/ru.html rename to SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Help/ru.html index 7cfa8889c..104b10f4e 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Help/ru.html @@ -1,22 +1,22 @@ -

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

        +

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

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

        • -
          Если нужно загрузить один или несколько файлов (папок), можно использовать перетаскивание мышью - просто перетащите файл (папку) или несколько выбранных файлов (папок) мышкой из Проводника Windows в нужную папку списка файлов приложения.
          +
          Если нужно загрузить один или несколько файлов (папок), можно использовать перетаскивание мышью - просто перетащите файл (папку) или несколько выбранных файлов (папок) мышкой из Проводника Windows в нужную папку списка файлов приложения.
        • Один файл сразу помещается в список файлов, автоматически создается карточка файла.
        • -
          При перетаскивании нескольких файлов, папки или нескольких папок необходимо заполнить сведения:
          +
          При перетаскивании нескольких файлов, папки или нескольких папок необходимо заполнить сведения:
          • -
            Файлы, которые перетаскивались мышью для загрузки, выводятся в виде списка. Папки, которые перетаскивались мышью для загрузки, выводятся в виде дерева. При этом можно раскрыть каждую папку и просмотреть файлы, которые в нее входят.
            +
            Файлы, которые перетаскивались мышью для загрузки, выводятся в виде списка. Папки, которые перетаскивались мышью для загрузки, выводятся в виде дерева. При этом можно раскрыть каждую папку и просмотреть файлы, которые в нее входят.
            • С помощью флажков можно указать папки и файлы, которые будут загружены в приложение.
          • -
          • В поле Папка автоматически проставляется выбранная папка в списке файлов, в которую будет загружены файлы с устройства. При необходимости можно  выбрать из списка другую папку; +
          • В поле Папка автоматически проставляется выбранная папка в списке файлов, в которую будет загружены файлы с устройства. При необходимости можно выбрать из списка другую папку;
          • Для экономии места на устройстве включите флажок Удалять файлы после добавления (по умолчанию выключен);
            @@ -30,15 +30,15 @@
          • Для текстовых файлов можно Выбрать кодировку из списка.
        • -
          Для подтверждения нажмите Загрузить файлы.

        См. также:

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Module.bsl similarity index 95% rename from SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl rename to SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Module.bsl index 05e747ed2..2fe99ab3f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ПеретаскиваниеФайлов/Module.bsl @@ -17,6 +17,11 @@ СписокИменФайлов.Добавить(путьФайла); КонецЦикла; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Заголовок = НСтр("ru = 'Загрузка файлов с устройства'"); + Элементы.УдалитьФайлыПослеЗагрузки.Заголовок = НСтр("ru = 'Удалить файлы на устройстве после загрузки'"); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -111,7 +116,7 @@ ПараметрыВыполнения.ВыбранныеФайлы = ВыбранныеФайлы; ПараметрыВыполнения.Комментарий = Комментарий; ПараметрыВыполнения.ХранитьВерсии = ХранитьВерсии; - ПараметрыВыполнения.УдалятьФайлыПослеДобавления = УдалятьФайлыПослеДобавления; + ПараметрыВыполнения.УдалитьФайлыПослеЗагрузки = УдалитьФайлыПослеЗагрузки; ПараметрыВыполнения.Рекурсивно = Истина; ПараметрыВыполнения.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыВыполнения.ПсевдоФайловаяСистема = ПсевдоФайловаяСистема; diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index ad90230fc..8baef05f4 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -3213,21 +3213,81 @@ UserCmds Auto
      - - Печать - 383 - - <key>ru</key> - <value>Печать</value> - + + ПодменюПечать + 452 + + Печать + 383 + + <key>ru</key> + <value>Печать</value> + + true + true + + true + + + ПечатьРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + ПечатьСоШтампом + 454 + + <key>ru</key> + <value>Со штампом электронной подписи...</value> + + true + true + + true + + + ПечатьСоШтампомРасширеннаяПодсказка + 455 + Label + true + true + + Left + + + Form.Command.ПечатьСоШтампом + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Печать</value> + - ПечатьРасширеннаяПодсказка - 384 + ПодменюПечатьРасширеннаяПодсказка + 453 Label true true @@ -3235,13 +3295,11 @@ Left - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto + Popup + + Auto + Normal + Отправить @@ -5215,6 +5273,19 @@ true + + ЕстьЭлектроннаяПодпись + 23 + + Boolean + + + true + + + true + + ИмпортФайлов @@ -6019,6 +6090,24 @@ </associatedTableElementId> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ПечатьСоШтампом</name> + <title> + <key>ru</key> + <value>Со штампом электронной подписи...</value> + + 33 + + true + + + + ПечатьСоШтампом + + + Auto + Auto + Папка diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html index e4d45a980..055ef7b30 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html @@ -1,50 +1,52 @@ -

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

      +

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

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

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

      -

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

      -

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

      -

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

      -

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

      -

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

      -
      •  - наличие электронной подписи или шифрования. +

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

        +

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

        +

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

        +

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

        +

        С помощью кнопки Печать выберите действие:

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

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

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

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

        +
      • Дата изменения - дата и время добавления версии файла в приложение.

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

      • Отредактировал - пользователь, который добавил версию файла.
      • Текущая версия - код текущей версии и т.д.

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

      -

      Для добавления нового файла в приложение:

      +

      Для добавления нового файла в приложение:

      • Выберите нужную папку;
      • -
        Нажмите Добавить (клавишу Insert);
        +
        Нажмите Добавить (клавишу Insert);
      • Выберите способ создания:
        • -
          Файл с устройства
          +
          Файл с компьютера
          • -
            Для того чтобы прикрепить к объекту или поместить в папку уже имеющийся на компьютере файл, укажите путь к файлу на компьютере, нажмите кнопку Открыть.
            +
            Для того чтобы прикрепить к объекту или поместить в папку уже имеющийся на компьютере файл, укажите путь к файлу на компьютере, нажмите кнопку Открыть.
          • -
            После этого приложение сохранит файл, автоматически создаст и откроет Карточку файла.
        • +
          После этого приложение сохранит файл, автоматически создаст и откроет Карточку файла.
      • По шаблону
        • -
          Выделите шаблон файла в списке выбора, затем нажмите кнопку Выбрать.
          +
          Выделите шаблон файла в списке выбора, затем нажмите кнопку Выбрать.
        • Приложением будет автоматически создана и открыта Карточка файла.
      • Со сканера
        • -
          Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
          +
          Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
        • Если все условия соблюдены и настройки выполнены, можно получить файл со сканера.
          @@ -53,44 +55,44 @@
          Для этого необходимоследовать инструкциям Помощника сканирования.
        • -
          После того как документ отсканирован, выполните команду Принять, после этого файлу автоматически присваивается код и создается карточка файла, которая выводится на экран. В поле Наименование также автоматически проставляется код. Отредактируйте нужные поля, нажмите Записать и закрыть, для того чтобы сохранить карточку файла.

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

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

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

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

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

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

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

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

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

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

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

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

        Загрузка папок

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

      Загрузка папок

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

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

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

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

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

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

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

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

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

      См. также:

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

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

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

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

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

      См. также:

      + \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index e026e5dd1..e4399567f 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -78,6 +78,9 @@ Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь; ИспользоватьСинхронизациюФайлов = ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов"); + + ЕстьЭлектроннаяПодпись = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись"); + Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись; Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); @@ -341,7 +344,7 @@ Процедура ИмпортФайловВыполнить() Обработчик = Новый ОписаниеОповещения("ИмпортФайловПослеУстановкиРасширения", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -349,7 +352,7 @@ Процедура ИмпортПапки(Команда) Обработчик = Новый ОписаниеОповещения("ИмпортПапкиПослеУстановкиРасширения", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -360,7 +363,7 @@ ПараметрыФормы.Вставить("ПапкаЭкспорта", Элементы.Папки.ТекущаяСтрока); Обработчик = Новый ОписаниеОповещения("ЭкспортПапкиПослеУстановкиРасширения", ЭтотОбъект, ПараметрыФормы); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -467,7 +470,7 @@ ПараметрыФормы.Вставить("ВозможностьСоздаватьВерсииФайлов", Истина); ПараметрыФормы.Вставить("Редактирует", ДанныеСтроки.Редактирует); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект); ИначеЕсли МассивФайлов.Количество() = 1 Тогда Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект); ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеСтроки.Ссылка, УникальныйИдентификатор); @@ -721,6 +724,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ПечатьСоШтампом(Команда) + + ТекущиеДанные = ТекущиеДанные(); + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + РаботаСФайламиСлужебныйКлиент.НапечататьФайлСоШтампом(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + +КонецПроцедуры + &НаКлиенте Процедура Предпросмотр(Команда) @@ -804,7 +819,7 @@ &НаКлиенте Процедура ИмпортФайловПослеУстановкиРасширения(Результат, ПараметрыВыполнения) Экспорт Если НЕ Результат Тогда - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); + РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено); Возврат; КонецЕсли; @@ -826,14 +841,14 @@ ПараметрыФормы.Вставить("ПапкаДляДобавления", Элементы.Папки.ТекущаяСтрока); ПараметрыФормы.Вставить("МассивИменФайлов", МассивИменФайлов); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаИмпортаФайлов", ПараметрыФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаФайлов", ПараметрыФормы); КонецПроцедуры &НаКлиенте Процедура ИмпортПапкиПослеУстановкиРасширения(Результат, ПараметрыВыполнения) Экспорт Если НЕ Результат Тогда - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); + РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено); Возврат; КонецЕсли; @@ -850,7 +865,7 @@ ПараметрыФормы.Вставить("ПапкаДляДобавления", Элементы.Папки.ТекущаяСтрока); ПараметрыФормы.Вставить("КаталогНаДиске", ДиалогОткрытияФайла.Каталог); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаИмпортаПапки", ПараметрыФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаПапки", ПараметрыФормы); КонецПроцедуры @@ -858,11 +873,11 @@ Процедура ЭкспортПапкиПослеУстановкиРасширения(Результат, ПараметрыФормы) Экспорт Если НЕ Результат Тогда - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); + РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено); Возврат; КонецЕсли; - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаЭкспортаПапки", ПараметрыФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеПапки", ПараметрыФормы); КонецПроцедуры @@ -922,9 +937,7 @@ КонецЕсли; Если Действие = ДействиеПеретаскивания.Копирование Тогда - РаботаСФайламиСлужебныйВызовСервера.СкопироватьФайлы( - ЗначениеПеретаскивания, - ПапкаДляДобавления); + РаботаСФайламиСлужебныйВызовСервера.СкопироватьФайлы(ЗначениеПеретаскивания, ПапкаДляДобавления); Элементы.Папки.Обновить(); Элементы.Список.Обновить(); @@ -1047,8 +1060,7 @@ &НаСервере Процедура ЗашифроватьСервер(Знач МассивДанныхДляЗанесенияВБазу, Знач МассивОтпечатков, - Знач МассивФайловВРабочемКаталогеДляУдаления, - Знач ИмяРабочегоКаталога, Знач ОбъектСсылка) + Знач МассивФайловВРабочемКаталогеДляУдаления, Знач ИмяРабочегоКаталога, Знач ОбъектСсылка) ПараметрыЗаписиИнформацииОШифровании = РаботаСФайламиСлужебный.ПараметрыЗаписиИнформацииОШифровании(); ПараметрыЗаписиИнформацииОШифровании.ИмяРабочегоКаталога = ИмяРабочегоКаталога; @@ -1194,46 +1206,40 @@ Процедура УстановитьВидимостьПоясненияСинхронизацииФайлов() ФайлыРедактируютсяВОблачномСервисе = Ложь; - Если Элементы.Папки.ТекущиеДанные = Неопределено Или Элементы.Папки.ТекущаяСтрока.Пустая() Тогда - Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь; + Возврат; + КонецЕсли; - Иначе + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; + ФайлыРедактируютсяВОблачномСервисе = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; + + Если Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется Тогда - Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; - ФайлыРедактируютсяВОблачномСервисе = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; + СведенияОСинхронизации = СведенияОСинхронизации(Элементы.Папки.ТекущиеДанные.Ссылка); + Если СведенияОСинхронизации <> Неопределено Тогда - Если Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется Тогда + Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Работа с файлами ведется в облачном сервисе %2.'"), + СведенияОСинхронизации.АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); + + Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ?(СведенияОСинхронизации.Синхронизирован, + ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); + Элементы.ДекорацияДатаСинхронизации.Видимость = Истина; - АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( - Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьСервис, Элементы.Папки.ТекущиеДанные.Href); - - СведенияОСинхронизации = СведенияОСинхронизации(Элементы.Папки.ТекущиеДанные.Ссылка); - Если ЗначениеЗаполнено(СведенияОСинхронизации) Тогда + Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Синхронизировано: %2'"), + "OpenJournal", Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); - Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - НСтр("ru = 'Работа с файлами ведется в облачном сервисе %2.'"), - АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); + Иначе - Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; - Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); - Элементы.ДекорацияДатаСинхронизации.Видимость = Истина; + Элементы.ДекорацияПояснение.Заголовок = + НСтр("ru = 'Работа с файлами ведется в облачном сервисе.'"); - Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - НСтр("ru = 'Синхронизировано: %2'"), - "OpenJournal", Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); - - Иначе - - Элементы.ДекорацияПояснение.Заголовок = - НСтр("ru = 'Работа с файлами ведется в облачном сервисе.'"); - - Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = Ложь; - Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ОтображениеПодсказки.Нет; - Элементы.ДекорацияДатаСинхронизации.Видимость = Ложь; - КонецЕсли; - + Элементы.ДекорацияКартинкаОшибкаСинхронизации.Видимость = Ложь; + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Элементы.ДекорацияДатаСинхронизации.Видимость = Ложь; КонецЕсли; КонецЕсли; @@ -1259,11 +1265,8 @@ Процедура ОбработкаОжиданияПапкиПриАктивизацииСтроки() Если Элементы.Папки.ТекущаяСтрока <> Список.Параметры.Элементы.Найти("Владелец").Значение Тогда - // Обновляется правый список и доступность команд по настройкам прав. - // Вызов процедуры обработчика ПриАктивизацииСтроки таблицы Список выполняется платформой. ОбновитьИСохранитьПараметрыСпискаФайлов(); Иначе - // Вызов процедуры обработчика ПриАктивизацииСтроки таблицы Список выполняется программно. ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд(); КонецЕсли; @@ -1323,12 +1326,13 @@ Процедура УстановитьДоступностьФайловыхКоманд(Результат = Неопределено, ПараметрыВыполнения = Неопределено) Экспорт ТекущиеДанные = Элементы.Список.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено + Если ТекущиеДанные <> Неопределено И Элементы.Список.ТекущаяСтрока <> Неопределено И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда УстановитьДоступностьКоманд(ТекущиеДанные, Элементы.Список.ВыделенныеСтроки.Количество() > 1); Иначе СделатьКомандыНедоступными(); КонецЕсли; + ПодключитьОбработчикОжидания("ОбновитьПредпросмотр", 0.1, Истина); КонецПроцедуры @@ -1456,6 +1460,10 @@ Элементы.Печать.Доступность = Истина; Элементы.СписокКонтекстноеМенюПечать.Доступность = Истина; + + Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись + И (ДанныеКоманд.Расширение = "mxl") Или (ДанныеКоманд.Расширение = "docx") + И ДанныеКоманд.ПодписанЭП; Элементы.Отправить.Доступность = Истина; Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина; @@ -1665,6 +1673,16 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды +&НаКлиенте +Функция ТекущиеДанные() + Результат = Неопределено; + Если Не СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список) Тогда + ИначеЕсли Элементы.Список.ТекущиеДанные.ВладелецФайла = ТекущаяПапка Тогда + Результат = Элементы.Список.ТекущиеДанные; + КонецЕсли; + Возврат Результат; +КонецФункции + &НаКлиенте Функция ВыделенныеСтроки() ВыделенныеСтроки = Новый Массив; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html index 105ba967a..bcb1dc060 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html @@ -1,10 +1,10 @@ -

      Предназначен для выбора шаблона файла. Выбор осуществляется из папки Шаблоны файлов.

      +

      Предназначен для выбора шаблона файла. Выбор осуществляется из папки Шаблоны файлов.

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

      -

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

      -

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

      +

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

      +

      Список состоит из двух частей: слева папка Шаблоны файлов, справа - список шаблонов файлов, которые в ней находятся. Список состоит из колонок:

      • -
         - наличие электронной подписи или шифрования;
        +
        - наличие электронной подписи или шифрования;
      • Наименование - формат и имя файла. Также выводится описание файла;
      • @@ -17,8 +17,8 @@
        Выделите нужный шаблон в списке, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши.
      • -

        Приложение автоматически создает и выводит на просмотр карточку файла. Заполните необходимые поля, нажмите Записать и закрыть.

      Добавление шаблона файлов

      -
      • Для того чтобы поместить в папку Шаблоны новый шаблон, нажмите Добавить файл, с помощью переключателя выберите: +

        Приложение автоматически создает и выводит на просмотр карточку файла. Заполните необходимые поля, нажмите Записать и закрыть.

      Добавление шаблона файлов

      +
      • Для того чтобы поместить в папку Шаблоны новый шаблон, нажмите Добавить файл, с помощью переключателя выберите:
      • Из файла на устройство. Затем выберите нужный файл.
      • diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html index e97b9fbe2..5a332f3e3 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html @@ -1,13 +1,13 @@ -

        Предназначена для выбора способа создания нового файла.

        -

        Выводится по кнопке Insert или команде Добавить контекстного меню по правой кнопке мыши из списка файлов или списка присоединенных файлов.

        +

        Предназначена для выбора способа создания нового файла.

        +

        Выводится по кнопке Insert или команде Добавить контекстного меню по правой кнопке мыши из списка файлов или списка присоединенных файлов.

        Способы создания нового файла

        Выберите с помощью переключателя:

        -
        • Из шаблона -новый файл будет создан на основе выбранного шаблона; +
          • Из шаблона -новый файл будет создан на основе выбранного шаблона;
          • -
          • Из файла на устройстве - новый файл будет создан из существующего на устройстве файла; +
          • Из файла на устройстве - новый файл будет создан из существующего на устройстве файла;
          • -
          • Со сканера - предусмотрена возможность создать новый файл, получив графический файл со сканера (этот вариант доступен, если к компьютеру подключен сканер). Для загрузки файлов со сканера необходимо также настроить сканирование.

          Нажмите кнопку Создать для перехода к добавлению файла.

          +
        • Со сканера - предусмотрена возможность создать новый файл, получив графический файл со сканера (этот вариант доступен, если к компьютеру подключен сканер). Для загрузки файлов со сканера необходимо также настроить сканирование.

        Нажмите кнопку Создать для перехода к добавлению файла.

        См. также:

        • Общая информация о файлах;
        • diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html index 3db288ba0..db51776fe 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html @@ -1,6 +1,6 @@ -

          Предназначена для подбора файлов.

          -

          Список состоит из двух частей: слева список папок , справа - список файлов в выбранной папке. Список состоит из колонок:

          +

          Предназначена для подбора файлов.

          +

          Список состоит из двух частей: слева список папок , справа - список файлов в выбранной папке. Список состоит из колонок:

          • Наименование - имя файла, также приводится описание - подробные сведения о файле;
          • diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 0a36e3fae..1916c4485 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -2828,6 +2828,50 @@ Normal + + ЭлектронныеПодписиМашиночитаемаяДоверенность + 315 + + <key>ru</key> + <value>Машиночитаемая доверенность</value> + + true + true + + true + + + ЭлектронныеПодписи.МашиночитаемаяДоверенность + + None + + ЭлектронныеПодписиМашиночитаемаяДоверенностьРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + + ЭлектронныеПодписиМашиночитаемаяДоверенностьКонтекстноеМеню + 316 + true + + InputField + Enter + Left + true + + true + true + true + true + true + Normal + + ЭлектронныеПодписиДатаПроверкиПодписи 151 @@ -2875,50 +2919,6 @@ Normal - - ЭлектронныеПодписиМашиночитаемаяДоверенность - 315 - - <key>ru</key> - <value>Машиночитаемая доверенность</value> - - true - true - - true - - - ЭлектронныеПодписи.МашиночитаемаяДоверенность - - None - - ЭлектронныеПодписиМашиночитаемаяДоверенностьРасширеннаяПодсказка - 317 - Label - true - true - - Left - - - - ЭлектронныеПодписиМашиночитаемаяДоверенностьКонтекстноеМеню - 316 - true - - InputField - Enter - Left - true - - true - true - true - true - true - Normal - - true true @@ -3429,44 +3429,6 @@ true - - Инструкция - 190 - - <key>ru</key> - <value>Решение типовых проблем при работе с приложениями электронной подписи</value> - - true - true - - true - - - ИнструкцияРасширеннаяПодсказка - 192 - Label - true - true - - Left - - - - ИнструкцияКонтекстноеМеню - 191 - true - - Label - true - - - Click - ИнструкцияНажатие - - true - Left - - true true diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Help/ru.html index ddd0959ec..328a4a063 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Help/ru.html @@ -1,10 +1,10 @@

            Предназначена для просмотра сведений о присоединенном файле.

            -

            Открывается из списка присоединенных файлов с помощью команды Еще - Открыть карточку (клавиши F2).

            +

            Открывается из списка присоединенных файлов с помощью команды Еще - Открыть карточку (клавиши F2).

            Сведения о файле

            -
            • Наименование - полное имя файла. Автоматически заполняется приложением во время присоединения файла и создания карточки файла, можно изменить; +
              • Наименование - полное имя файла. Автоматически заполняется приложением во время присоединения файла и создания карточки файла, можно изменить;
              • -
              • Описание - напишите подробные сведения о файле; +
              • Описание - напишите подробные сведения о файле;
              • Автор - пользователь, который добавил файл в базу;
              • @@ -12,7 +12,7 @@
              • Отредактировал - последний пользователь, который отредактировал файл;
              • -
              • Изменен - дата изменения данных файла (местное время); +
              • Изменен - дата изменения данных файла (местное время);
              • Размещение - наименование и дата документа, к которому присоединен файл. Можно просмотреть документ;
                @@ -22,49 +22,49 @@
                Размер - размер данных файла;
              • -
                Расширение - расширение (формат) файла.

              Редактирование присоединенного файла

              +
              Расширение - расширение (формат) файла.

            Редактирование присоединенного файла

            • -
              В тонком клиенте редактирование файлов табличных документов (формата .mxl) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. здесь.
              +
              В тонком клиенте редактирование файлов табличных документов (формата .mxl) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. здесь.
            • -
              Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.
              +
              Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.
            • -
            • С помощью кнопки Просмотреть можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования. +
            • С помощью кнопки Просмотреть можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования.
            • -
              Команда Еще - Редактировать открывает файл в режиме редактирования, а также производит захват файла в приложении. Захваченный файл будет недоступен для редактирования другим пользователям приложения и помечается в списке зеленым цветом.
              +
              Команда Еще - Редактировать открывает файл в режиме редактирования, а также производит захват файла в приложении. Захваченный файл будет недоступен для редактирования другим пользователям приложения и помечается в списке зеленым цветом.
            • -
              Команда Еще - Закончить редактирование освобождает файл, сохраняет его в приложении и снимает пометку занятости для редактирования. После окончания редактирования сохраните файл, закройте внешнее приложение.
              +
              Команда Еще - Закончить редактирование освобождает файл, сохраняет его в приложении и снимает пометку занятости для редактирования. После окончания редактирования сохраните файл, закройте внешнее приложение.
            • -
              Команда Еще - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в приложении, и снимает пометку занятости для редактирования. Эта команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

            Сохранение файла

            +
            Команда Еще - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в приложении, и снимает пометку занятости для редактирования. Эта команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

          Сохранение файла

          • -
            С помощью команды Еще - Сохранить как можно сохранить файл в указанный каталог на устройстве.
            +
            С помощью команды Еще - Сохранить как можно сохранить файл в указанный каталог на устройстве.
          • -
            Соответствующей командой меню Еще можно Открыть каталог файла в Проводнике Windows;

          Обновление файла

          -
          • С помощью команды Еще - Обновить из файла на устройстве можно обновить файл из оригинального файла на устройстве (из которого изначально был создан файл в приложении).

          Электронная подпись и шифрование

          -

          При использовании электронной подписи становится доступным выпадающее меню Еще - Электронная подпись и шифрование, которое содержит команды для работы с электронной подписью файлов:

          +
          Соответствующей командой меню Еще можно Открыть каталог файла в Проводнике Windows;

        Обновление файла

        +
        • С помощью команды Еще - Обновить из файла на устройстве можно обновить файл из оригинального файла на устройстве (из которого изначально был создан файл в приложении).

        Электронная подпись и шифрование

        +

        При использовании электронной подписи становится доступным выпадающее меню Еще - Электронная подпись и шифрование, которое содержит команды для работы с электронной подписью файлов:

        • -
          Подписать - создает электронную подпись для файла. Перед созданием электронной подписи приложение предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком .
          +
          Подписать - создает электронную подпись для файла. Перед созданием электронной подписи приложение предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком .
        • -
          Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
          +
          Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
        • -
          Сохранить вместе с электронной подписью - сохраняет подпись в файл на устройстве. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
          +
          Сохранить вместе с электронной подписью - сохраняет подпись в файл на устройстве. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
        • Зашифровать - по команде происходит шифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Зашифрованный файл в списках отображается со значком .
        • -

          Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

        При использовании электронной подписи и шифрования становятся доступными вкладки:

        +

        Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

      При использовании электронной подписи и шифрования становятся доступными вкладки:

      Электронные подписи

      На вкладке размещаются сведения об электронной подписи файла:

      • Автор подписи - пользователь, который подписал файл; @@ -72,24 +72,24 @@
      • Дата подписи - дата подписания файла;
      • Тип подписи - существует несколько типов подписей в зависимости от срока действия;
      • -
      • Статус, Дата проверки - истинность подписи и дата ее проверки;
      • -
      • Комментарий - напишите дополнительные сведения о подписи.

      С помощью кнопок панели навигации можно:

      +
    • Статус, Дата проверки - истинность подписи и дата ее проверки;
    • +
    • Комментарий - напишите дополнительные сведения о подписи.
    • С помощью кнопок панели навигации можно:

      • Подписать файл;
      • -
      • Открыть - открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись; +
      • Открыть - открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись;
      • -
      • Проверить, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке Статус у такой электронной подписи будет указано Не верна. +
      • Проверить, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке Статус у такой электронной подписи будет указано Не верна.
      • Проверить все - проверить все подписи;
      • -
      • Удалить у файла электронную подпись.
      • -
      • Сохранить электронную подпись в файл на устройство; +
      • Удалить у файла электронную подпись.
      • +
      • Сохранить электронную подпись в файл на устройство;
      • -
      • Проверена вручную - ввести обоснование достоверности подписи, если подпись не проходит автоматическую проверку. Например, когда недоступен список отзыва, но известно, что сертификат не отозван;
      • -
      • Продлить действие - если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает способы усовершенствования подписи. Для этого выберите нужный тип подписи из списка.

      Разрешено расшифровывать

      +
    • Проверена вручную - ввести обоснование достоверности подписи, если подпись не проходит автоматическую проверку. Например, когда недоступен список отзыва, но известно, что сертификат не отозван;
    • +
    • Продлить действие - если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает способы усовершенствования подписи. Для этого выберите нужный тип подписи из списка.
    • Разрешено расшифровывать

      • На вкладке размещаются сведения о шифровании файла:
      • -
        В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей кнопки можно Открыть сертификат электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.

      См. также:

      +
      В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей кнопки можно Открыть сертификат электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.

      См. также:

      \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index fb5565bba..043c7e5fd 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -117,7 +117,7 @@ ПриПолученииПодписей(Неопределено, Неопределено); КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда Если ВРег(ИмяСобытия) = ВРег("ИзмененРезультатПроверкиМЧД") И Источник = Объект.Ссылка Тогда @@ -136,7 +136,7 @@ КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности // СтандартныеПодсистемы.Свойства Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда @@ -223,8 +223,8 @@ СертификатыИсточника = МодульЭлектроннаяПодпись.СертификатыШифрования(ЗначениеКопирования); МодульЭлектроннаяПодпись.ЗаписатьСертификатыШифрования(ТекущийОбъект, СертификатыИсточника); - УстановленныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(ЗначениеКопирования); - МодульЭлектроннаяПодпись.ДобавитьПодпись(ТекущийОбъект, УстановленныеПодписи); + ПодписиОбъекта = МодульЭлектроннаяПодпись.ПодписиОбъекта(ЗначениеКопирования); + МодульЭлектроннаяПодпись.ДобавитьПодпись(ТекущийОбъект, ПодписиОбъекта); КонецЕсли; Иначе @@ -350,16 +350,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ИнструкцияНажатие(Элемент) - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); - МодульЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСертификатыШифрования @@ -377,8 +367,7 @@ #Область ОбработчикиКомандФормы -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд файлов +#Область ОбработчикиКомандФайлов &НаКлиенте Процедура ПоказатьВСписке(Команда) @@ -487,8 +476,9 @@ // Конец СтандартныеПодсистемы.Свойства -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд ЭП и шифрования. +#КонецОбласти + +#Область ОбработчикиКомандЭПИШифрования &НаКлиенте Процедура Подписать(Команда) @@ -830,8 +820,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд для поддержки совместной работы с файлами. +#КонецОбласти + +#Область ОбработчикиКомандДляПоддержкиСовместнойРаботыСФайлами &НаКлиенте Процедура Занять(Команда) @@ -1041,6 +1032,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -1665,25 +1658,27 @@ Процедура ОбновитьПояснениеОблачногоСервиса(ПрисоединенныйФайл) ВидимостьПояснения = Ложь; + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда СведенияОСинхронизации = РаботаСФайламиСлужебный.СведенияОСинхронизации(Объект.ВладелецФайла); Если СведенияОСинхронизации <> Неопределено Тогда + УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; ВидимостьПояснения = Истина; - АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( - СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); - Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе %2.'"), - АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); + СведенияОСинхронизации.АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Синхронизирован: %2'"), "OpenJournal", Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD")); + КонецЕсли; + КонецЕсли; + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; КонецПроцедуры @@ -1752,4 +1747,4 @@ РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор); КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Help/ru.html index abd4a2008..7bbdefd42 100644 --- a/SSL/src/Catalogs/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Help/ru.html @@ -1,60 +1,60 @@

      -

      Приложение предоставляет возможность хранения файлов произвольного формата. В отличие от хранения файлов на устройствах или в корпоративных приложениях документооборота, файлы связываются с данными приложения. Так удобно хранить файлы, непосредственно связанные с данными. Объектами-хранителями файлов в приложении могут быть различные списки, документы, бизнес-процессы и т.д. Работа с файлами, прикрепленными к объекту, осуществляется в списке Присоединенные файлы. Список можно открыть соответствующей командой на панели навигации документа или другого объекта приложения. Существует также возможность хранить файлы без привязки к конкретному объекту в списке файлов.

      -

      Для работы с реквизитами файла (автор, название, описание и т.д.) используется карточка файла, а для работы с самим файлом - соответствующее приложение, установленное на компьютере. При редактировании файла его предыдущая версия автоматически сохраняется в информационной базе.

      +

      Приложение предоставляет возможность хранения файлов произвольного формата. В отличие от хранения файлов на устройствах или в корпоративных приложениях документооборота, файлы связываются с данными приложения. Так удобно хранить файлы, непосредственно связанные с данными. Объектами-хранителями файлов в приложении могут быть различные списки, документы, бизнес-процессы и т.д. Работа с файлами, прикрепленными к объекту, осуществляется в списке Присоединенные файлы. Список можно открыть соответствующей командой на панели навигации документа или другого объекта приложения. Существует также возможность хранить файлы без привязки к конкретному объекту в списке файлов.

      +

      Для работы с реквизитами файла (автор, название, описание и т.д.) используется карточка файла, а для работы с самим файлом - соответствующее приложение, установленное на компьютере. При редактировании файла его предыдущая версия автоматически сохраняется в информационной базе.

      Работа с файлами

      -

      Для работы с файлами используйте команды, расположенные на командной панели или в меню Еще в списке файлов, в контекстном меню по правой кнопке мыши или карточке файла: 

      +

      Для работы с файлами используйте команды, расположенные на командной панели или в меню Еще в списке файлов, в контекстном меню по правой кнопке мыши или карточке файла:

      - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - + +
      Команда Описание
       Добавить (Insert)Добавляет новый файл в приложение. Возможные способы создания файла: из шаблона, из файла на устройстве, со сканера.
       Открыть (Просмотреть)Открывает файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен ли файл как занятый текущим пользователем для редактирования.
       Редактировать (F4)Помечает файл как занятый для редактирования и открывает его внешним приложением.
      Клавиша Enter (двойной щелчок мыши)По умолчанию необходимо выбрать, как открыть файл - для просмотра или для редактирования. Действие настраивается в персональных настройках приложения на закладке Работа с файлами.
      Закончить Обновляет файл в хранилище и снимает с него пометку занятости для редактирования. 
      ПечатьОписание
      Добавить (Insert)Добавляет новый файл в приложение. Возможные способы создания файла: из шаблона, из файла на устройстве, со сканера.
      Открыть (Просмотреть)Открывает файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен ли файл как занятый текущим пользователем для редактирования.
      Редактировать (F4)Помечает файл как занятый для редактирования и открывает его внешним приложением.
      Клавиша Enter (двойной щелчок мыши)По умолчанию необходимо выбрать, как открыть файл - для просмотра или для редактирования. Действие настраивается в персональных настройках приложения на закладке Работа с файлами.
      Закончить Обновляет файл в хранилище и снимает с него пометку занятости для редактирования.
      Печать С помощью кнопки можно распечатать файл.
      ОтправитьМожно отправить почтовое сообщение, выбранный файл при этом автоматически будет его приложением.
       Сохранить измененияСохраняет версию редактируемого файла в хранилище, но оставляет его занятым текущим пользователем для редактирования
       ЗанятьПомечает файл в хранилище как занятый текущим пользователем для редактирования, но не открывает внешнее приложение. Приступить непосредственно к редактированию можно будет позже.
       Отменить редактированиеСнимает с файла пометку занятости для редактирования.
       Открыть карточкуМожно отправить почтовое сообщение, выбранный файл при этом автоматически будет его приложением.
      Сохранить измененияСохраняет версию редактируемого файла в хранилище, но оставляет его занятым текущим пользователем для редактирования
      ЗанятьПомечает файл в хранилище как занятый текущим пользователем для редактирования, но не открывает внешнее приложение. Приступить непосредственно к редактированию можно будет позже.
      Отменить редактированиеСнимает с файла пометку занятости для редактирования.
      Открыть карточку Открыть карточку файла, в которой хранятся сведения о файле.
      ПредпросмотрВключите флажок, для того чтобы просмотреть изображение в списке файлов.
       Сохранить какСохраняет файл в указанный каталог на устройстве.
      Открыть каталог файлаОткрыть папку в Проводнике Windows, в которой находится файл.
       Обновить из файла на устройствеОбновляет файл в информационной базе выбранным файлом на устройстве. При этом приложение проверяет даты файлов, при попытке заменить файл старой версией выводится предупреждение, действие не выполняется.
      Показывать служебные файлыПриложение автоматически присоединяет к объектам служебные файлы. Обычно они скрываются. Включите флажок, для того чтобы видеть в списке эти файлы.
       ПодписатьСоздает электронную подпись для файла. Перед созданием электронной подписи приложение предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком . Подписанный файл можно скопировать, при этом приложение задаст вопрос - копировать файл с подписью или без.
      Добавить электронную подпись из файлаВключите флажок, для того чтобы просмотреть изображение в списке файлов.
      Сохранить какСохраняет файл в указанный каталог на устройстве.
      Открыть каталог файлаОткрыть папку в Проводнике Windows, в которой находится файл.
      Обновить из файла на устройствеОбновляет файл в информационной базе выбранным файлом на устройстве. При этом приложение проверяет даты файлов, при попытке заменить файл старой версией выводится предупреждение, действие не выполняется.
      Показывать служебные файлыПриложение автоматически присоединяет к объектам служебные файлы. Обычно они скрываются. Включите флажок, для того чтобы видеть в списке эти файлы.
      ПодписатьСоздает электронную подпись для файла. Перед созданием электронной подписи приложение предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком . Подписанный файл можно скопировать, при этом приложение задаст вопрос - копировать файл с подписью или без.
      Добавить электронную подпись из файла Добавляет выбранный файл подписи к подписям файла. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
      Сохранить вместе с электронной подписьюСохраняет файл в указанный каталог на устройстве, а также сохраняет подписи файла - все или выбранные, в зависимости от настройки действий При сохранении данных в файл вместе с электронной подписью (в персональных настройках приложения, вкладка Дополнительно) Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
       ЗашифроватьШифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Выберите нужные из списка с помощью флажков. Зашифрованный файл в списках отображается со значком . В отличие от подписания пароль к закрытому ключу в процессе шифрования вводить не нужно. Зашифрованный файл доступен для редактирования. Шифруются все версии файла. Для зашифрованных файлов не работает полнотекстовый поиск. Зашифрованный файл можно скопировать. При этом новый, скопированный файл останется зашифрованным. Зашифрованный файл нельзя подписать.Подписанный файл зашифровать можно, при этом перед проверкой электронной подписи у зашифрованного файла приложение запросит пароль для предварительной расшифровки файла.
      РасшифроватьСохраняет файл в указанный каталог на устройстве, а также сохраняет подписи файла - все или выбранные, в зависимости от настройки действий При сохранении данных в файл вместе с электронной подписью (в персональных настройках приложения, вкладка Дополнительно) Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
      ЗашифроватьШифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Выберите нужные из списка с помощью флажков. Зашифрованный файл в списках отображается со значком . В отличие от подписания пароль к закрытому ключу в процессе шифрования вводить не нужно. Зашифрованный файл доступен для редактирования. Шифруются все версии файла. Для зашифрованных файлов не работает полнотекстовый поиск. Зашифрованный файл можно скопировать. При этом новый, скопированный файл останется зашифрованным. Зашифрованный файл нельзя подписать.Подписанный файл зашифровать можно, при этом перед проверкой электронной подписи у зашифрованного файла приложение запросит пароль для предварительной расшифровки файла.
      Расшифровать По команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

      Примечание: Если файл зашифрован, полнотекстовый поиск по его содержимому не работает.

      Добавление файлов

      -

      Для добавления нового файла в приложение:

      +

      Для добавления нового файла в приложение:

      • -
        Нажмите Добавить (клавишу Insert);
        +
        Нажмите Добавить (клавишу Insert);
      • Выберите способ создания:
        • -
          Файл с устройства 
          +
          Файл с устройства
          • -
            Для того чтобы прикрепить к объекту или поместить в папку уже имеющийся на компьютере файл, укажите путь к файлу на устройстве, нажмите кнопку Открыть.
            +
            Для того чтобы прикрепить к объекту или поместить в папку уже имеющийся на компьютере файл, укажите путь к файлу на устройстве, нажмите кнопку Открыть.
          • -
            После этого приложение сохранит файл, автоматически создаст и откроет Карточку файла.
        • +
          После этого приложение сохранит файл, автоматически создаст и откроет Карточку файла.
      • -
        По шаблону
        +
        По шаблону
        • -
          Выделите шаблон файла в списке выбора, затем нажмите кнопку Выбрать.
          +
          Выделите шаблон файла в списке выбора, затем нажмите кнопку Выбрать.
        • Приложением будет автоматически создана и открыта Карточка файла.
      • Со сканера
        • -
          Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
          +
          Вариант создания файла Со сканера становится доступным, если к компьютеру подключен сканер (более подробно см. документацию к сканеру) и на компьютере подключена компонента для работы со сканером. Также необходимо настроить сканирование.
        • Если все условия соблюдены и настройки выполнены, можно получить файл со сканера.
          @@ -63,15 +63,15 @@
          Для этого необходимо следовать инструкциям Помощника сканирования.
        • -
          После того как документ отсканирован, выполните команду Принять, после этого файлу автоматически присваивается код и создается карточка файла, которая выводится на экран. В поле Наименование также автоматически проставляется код. Отредактируйте нужные поля, нажмите Записать и закрыть, для того чтобы сохранить карточку файла.

        См. также:

        +
        После того как документ отсканирован, выполните команду Принять, после этого файлу автоматически присваивается код и создается карточка файла, которая выводится на экран. В поле Наименование также автоматически проставляется код. Отредактируйте нужные поля, нажмите Записать и закрыть, для того чтобы сохранить карточку файла.

          См. также:

          \ No newline at end of file +
        • Работа с формами.
        • \ No newline at end of file diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index dd911a18e..272c6d555 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -133,11 +133,27 @@ #Область СлужебныеПроцедурыИФункции -// Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, -// которые необходимо обновить на новую версию. -// Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах + | ПО Файлы.Ссылка = СведенияОФайлах.Файл + |ГДЕ + | Файлы.Ссылка > &Ссылка + | И (Файлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске) + | ИЛИ ((Файлы.ДатаМодификацииУниверсальная = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + | И Файлы.ТекущаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) + | ИЛИ Файлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)) + | ИЛИ СведенияОФайлах.Файл ЕСТЬ NULL)) + | + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + ОтработаныВсеФайлы = Ложь; Ссылка = ""; @@ -147,24 +163,6 @@ Пока Не ОтработаныВсеФайлы Цикл - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1000 - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОФайлах КАК СведенияОФайлах - | ПО Файлы.Ссылка = СведенияОФайлах.Файл - |ГДЕ - | ((Файлы.ДатаМодификацииУниверсальная = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) - | И Файлы.ТекущаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка) - | ИЛИ Файлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)) - | И Файлы.Ссылка > &Ссылка - | ИЛИ СведенияОФайлах.Файл ЕСТЬ NULL) - | - |УПОРЯДОЧИТЬ ПО - | Ссылка"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); // @skip-check query-in-loop - Порционная обработка большого объема данных. МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); @@ -174,9 +172,7 @@ КоличествоСсылок = МассивСсылок.Количество(); Если КоличествоСсылок < 1000 Тогда ОтработаныВсеФайлы = Истина; - КонецЕсли; - - Если КоличествоСсылок > 0 Тогда + ИначеЕсли КоличествоСсылок > 0 Тогда Ссылка = МассивСсылок[КоличествоСсылок - 1]; КонецЕсли; @@ -186,49 +182,80 @@ Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт - ОбработкаЗавершена = Истина; - ВыбранныеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры); ОбъектовОбработано = 0; ПроблемныхОбъектов = 0; Для Каждого Строка Из ВыбранныеДанные Цикл - ПредставлениеСсылки = Строка(Строка.Ссылка); - НачатьТранзакцию(); - Попытка + Если ОбработатьФайл(Строка.Ссылка) Тогда + ОбъектовОбработано = ОбъектовОбработано + 1; + Иначе + ПроблемныхОбъектов = ПроблемныхОбъектов + 1; + КонецЕсли; + КонецЦикла; + + Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать файлы (пропущены): %1'"), + ПроблемныхОбъектов); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация, , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обработана очередная порция файлов: %1'"), + ОбъектовОбработано)); + Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.Файлы"); + +КонецПроцедуры + +Функция ОбработатьФайл(Ссылка) + + Результат = Истина; + ПредставлениеСсылки = Строка(Ссылка); + + БлокировкаДанныхФайл = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанныхФайл.Добавить("Справочник.Файлы"); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Ссылка); + + НачатьТранзакцию(); + Попытка + БлокировкаДанныхФайл.Заблокировать(); + + ОбновляемыйФайл = Неопределено; + ТребуетсяЗаписать = Ложь; + // @skip-check query-in-loop - Порционная обработка большого объема данных. + РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, + "ДатаМодификацииУниверсальная,ТекущаяВерсия,ТипХраненияФайла"); - БлокировкаДанныхФайл = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанныхФайл.Добавить("Справочник.Файлы"); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Строка.Ссылка); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; - БлокировкаДанныхФайл.Заблокировать(); + Если ЗначениеЗаполнено(РеквизитыФайла.ТекущаяВерсия) + И (Не ЗначениеЗаполнено(РеквизитыФайла.ДатаМодификацииУниверсальная) + Или Не ЗначениеЗаполнено(РеквизитыФайла.ТипХраненияФайла)) Тогда - ТекущаяВерсия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Строка.Ссылка, "ТекущаяВерсия"); - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.ВерсииФайлов"); - ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ТекущаяВерсия); - ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый; - БлокировкаДанных.Заблокировать(); - - РеквизитыТекущейВерсии = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущаяВерсия, + ОбновляемыйФайл = Ссылка.ПолучитьОбъект(); // СправочникОбъект.Файлы + Если ОбновляемыйФайл = Неопределено Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Ссылка); + ЗафиксироватьТранзакцию(); + Возврат Результат; + КонецЕсли; + + // @skip-check query-in-loop - Порционная обработка большого объема данных. + РеквизитыТекущейВерсии = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РеквизитыФайла.ТекущаяВерсия, "ДатаМодификацииУниверсальная,ТипХраненияФайла"); - - ОбновляемыйФайл = Строка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.Файлы ОбновляемыйФайл.ДатаМодификацииУниверсальная = РеквизитыТекущейВерсии.ДатаМодификацииУниверсальная; ОбновляемыйФайл.ТипХраненияФайла = РеквизитыТекущейВерсии.ТипХраненияФайла; НаборЗаписей = РегистрыСведений.СведенияОФайлах.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Файл.Установить(Строка.Ссылка); + НаборЗаписей.Отбор.Файл.Установить(Ссылка); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда СведенияОФайле = НаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(СведенияОФайле, ОбновляемыйФайл); СведенияОФайле.Файл = ОбновляемыйФайл.Ссылка; - АвторИВладелец = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОбновляемыйФайл.Ссылка, "Автор, ВладелецФайла"); - СведенияОФайле.Автор = АвторИВладелец.Автор; - СведенияОФайле.ВладелецФайла = АвторИВладелец.ВладелецФайла; + СведенияОФайле.Автор = ОбновляемыйФайл.Автор; + СведенияОФайле.ВладелецФайла = ОбновляемыйФайл.ВладелецФайла; Если ОбновляемыйФайл.ПодписанЭП И ОбновляемыйФайл.Зашифрован Тогда СведенияОФайле.НомерКартинкиПодписанЗашифрован = 2; @@ -241,45 +268,48 @@ КонецЕсли; ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); КонецЕсли; - - ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбновляемыйФайл); - - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Строка.Ссылка); - ОбъектовОбработано = ОбъектовОбработано + 1; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - // Если не удалось обработать какой-либо документ, повторяем попытку снова. - ПроблемныхОбъектов = ПроблемныхОбъектов + 1; - - ОбновлениеИнформационнойБазы.ЗаписатьОшибкуВЖурналРегистрации( - Строка.Ссылка, - ПредставлениеСсылки, - ИнформацияОбОшибке()); - КонецПопытки; + ТребуетсяЗаписать = Истина; + КонецЕсли; - КонецЦикла; - - Если Не ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.Файлы") Тогда - ОбработкаЗавершена = Ложь; - КонецЕсли; - - Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обработать файлы (пропущены): %1'"), - ПроблемныхОбъектов); - ВызватьИсключение ТекстСообщения; - Иначе - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обработана очередная порция файлов: %1'"), - ОбъектовОбработано)); - КонецЕсли; - - Параметры.ОбработкаЗавершена = ОбработкаЗавершена; - -КонецПроцедуры + Если РеквизитыФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + Если ОбновляемыйФайл = Неопределено Тогда + ОбновляемыйФайл = Ссылка.ПолучитьОбъект(); // СправочникОбъект.Файлы + Если ОбновляемыйФайл = Неопределено Тогда + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Ссылка); + ЗафиксироватьТранзакцию(); + Возврат Результат; + КонецЕсли; + КонецЕсли; + ДвоичныеДанныеФайла = Неопределено; + ХранилищеДвоичныхДанныхФайла = ОбновляемыйФайл.ФайлХранилище; + ДвоичныеДанныеФайла = ?(ТипЗнч(ХранилищеДвоичныхДанныхФайла) = Тип("ХранилищеЗначения"), + ХранилищеДвоичныхДанныхФайла.Получить(), Неопределено); + + Если ДвоичныеДанныеФайла <> Неопределено Тогда + ОбновляемыйФайл.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + ТребуетсяЗаписать = Истина; + КонецЕсли; + + КонецЕсли; + + Если ТребуетсяЗаписать Тогда + ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбновляемыйФайл); + Иначе + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Ссылка); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Результат = Ложь; + ОбновлениеИнформационнойБазы.ЗаписатьОшибкуВЖурналРегистрации(Ссылка, + ПредставлениеСсылки, ИнформацияОбОшибке()); + КонецПопытки; + + Возврат Результат; + +КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Файлы.mdo b/SSL/src/Catalogs/Файлы/Файлы.mdo index ddaee7660..5ce44e843 100644 --- a/SSL/src/Catalogs/Файлы/Файлы.mdo +++ b/SSL/src/Catalogs/Файлы/Файлы.mdo @@ -941,10 +941,10 @@ MobileDevice - ФормаПеретаскивания + ПеретаскиваниеФайлов ru - Форма перетаскивания + Перетаскивание файлов diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Help/ru.html index aa4728fca..9a57e0eb4 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Help/ru.html @@ -1,7 +1,7 @@ -

          Предназначен для выбора шаблонов анкеты.

          -

          Открывается при выборе шаблона анкет из документа Назначение опросов.

          -

          В списке выводится Наименование шаблона и его Код, который автоматически присваивается приложением.

          +

          Предназначен для выбора шаблонов анкеты.

          +

          Открывается при выборе шаблона анкет из документа Назначение опросов.

          +

          В списке выводится Наименование шаблона и его Код, который автоматически присваивается приложением.

          Выбор шаблона анкеты

          • Выделите шаблон анкеты, нажмите Выбрать.
          • diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Help/ru.html index f31960828..dbea84dc0 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераКомплексныхВопросов/Help/ru.html @@ -1,15 +1,15 @@ -

            Предназначен для ввода и редактирования комплексных вопросов анкеты.

            -

            Открывается по команде Добавить - комплексный вопрос из шаблона анкеты.

            +

            Предназначен для ввода и редактирования комплексных вопросов анкеты.

            +

            Открывается по команде Добавить - комплексный вопрос из шаблона анкеты.

            • Напишите Формулировку вопроса.
            • С помощью кнопки Добавить выберите нужные вопросы из списка вопросов.
              -
            • Для работы с вопросами используйте команды меню Еще или контекстное меню по правой кнопке мыши. +
            • Для работы с вопросами используйте команды меню Еще или контекстное меню по правой кнопке мыши.
            • В поле Способ отображения подсказки укажите, как будет показываться подсказка в тексте анкеты:
              • Контекстная подсказка - текст подсказки будет все время виден;
              • Знак вопроса справа - в этом случае текст подсказки скрыт, ее можно увидеть, нажав на знак вопроса.
            • В поле Подсказка напишите краткое объяснение вопроса, для того чтобы респонденту было легче на него отвечать.
            • -
              Нажмите ОК для окончания редактирования.

            См. также:

            +
            Нажмите ОК для окончания редактирования.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Help/ru.html index a60bcc899..d2de58083 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Help/ru.html @@ -10,7 +10,7 @@
          • Контекстная подсказка - текст подсказки будет все время виден;
          • Знак вопроса справа - в этом случае текст подсказки скрыт, ее можно увидеть, нажав на знак вопроса.
        • В поле Подсказка напишите краткое объяснение вопроса, для того чтобы респонденту было легче на него отвечать.
        • -

          С помощью переключателя выберите тип табличного вопроса. Табличные вопросы могут быть четырех типов:

          +

          С помощью переключателя выберите тип табличного вопроса. Табличные вопросы могут быть четырех типов:

        • -
          В правой части окна располагается рисунок с примером выбранного типа табличного вопроса. 
          +
          В правой части окна располагается рисунок с примером выбранного типа табличного вопроса.
        • Нажмите кнопку Далее для подбора вопросов.
        • -
          Для работы с вопросами используйте команды меню Еще или контекстное меню по правой кнопке мыши.
          +
          Для работы с вопросами используйте команды меню Еще или контекстное меню по правой кнопке мыши.
        • Если заранее подготовить вопросы типа Выбор одного или нескольких вариантов ответа из предложенных, то можно будет использовать предопределенные ответы в табличных вопросах, кроме этого, можно быстро добавить варианты ответов.
        • Составной табличный вопрос

          • Для составного табличного вопроса задается состав вопросов. Заданные вопросы будут отображаться в качестве заголовков колонок таблицы.
          • -
            Респондент, отвечающий на вопросы анкеты, сможет добавить произвольное количество строк в таблицу при ответе.
            +
            Респондент, отвечающий на вопросы анкеты, сможет добавить произвольное количество строк в таблицу при ответе.
          • С помощью команды Добавить выберите необходимое количество вопросов из списка.
          • @@ -40,11 +40,11 @@
            Заданные вопросы будут отображаться в качестве заголовков колонок таблицы в анкете респондента.
          • Число строк в таблице фиксировано, при ответе респондент не сможет добавить или удалить строки из таблицы. Количество строк таблицы будет равно количеству предопределенных ответов.
          • -
             Для первого вопроса на третьей странице помощника задайте предопределенные ответы, которые будут отображаться в строках первой колонки таблицы. Нажмите Добавить. Для добавления воспользуйтесь одним из способов:
            +
            Для первого вопроса на третьей странице помощника задайте предопределенные ответы, которые будут отображаться в строках первой колонки таблицы. Нажмите Добавить. Для добавления воспользуйтесь одним из способов:
            • Напишите варианты ответов для первого вопроса вручную.
            • -
              Если был выбран вопрос типа Выбор одного или нескольких вариантов ответа из предложенных, то для того чтобы быстро перечислить возможные варианты ответов для первого введенного вопроса, можно воспользоваться кнопкой Заполнить варианты ответов.

          Табличный вопрос с предопределенными ответами в колонках

          +
          Если был выбран вопрос типа Выбор одного или нескольких вариантов ответа из предложенных, то для того чтобы быстро перечислить возможные варианты ответов для первого введенного вопроса, можно воспользоваться кнопкой Заполнить варианты ответов.

          Табличный вопрос с предопределенными ответами в колонках

          • Этот тип табличного вопроса является вариантом предыдущего.
          • @@ -54,20 +54,20 @@
            На третьей странице помощника составитель анкеты указывает предопределенные ответы на первый вопрос для колонок таблицы. Для этого нажмите Добавить. Для добавления воспользуйтесь одним из способов:
            • Напишите варианты ответов для первого вопроса вручную.
            • -
              Если был выбран вопрос типа Выбор одного или нескольких вариантов ответа из предложенных, то для того чтобы быстро перечислить все варианты, выбрав их из первого введенного вопроса, можно воспользоваться кнопкой Заполнить варианты ответов.
          • Данные предопределенные ответы будут отображаться в качестве заголовков колонок таблицы. При ответе респондент не сможет добавить или удалить строки из таблицы. Количество строк таблицы будет равно количеству вопросов, уменьшенному на один (ответы на первый вопрос - это заголовки колонок, при этом первый вопрос в таблице не отображается).
          • +
            Если был выбран вопрос типа Выбор одного или нескольких вариантов ответа из предложенных, то для того чтобы быстро перечислить все варианты, выбрав их из первого введенного вопроса, можно воспользоваться кнопкой Заполнить варианты ответов.
        • Данные предопределенные ответы будут отображаться в качестве заголовков колонок таблицы. При ответе респондент не сможет добавить или удалить строки из таблицы. Количество строк таблицы будет равно количеству вопросов, уменьшенному на один (ответы на первый вопрос - это заголовки колонок, при этом первый вопрос в таблице не отображается).
        • Табличный вопрос с предопределенными ответами в строках и колонках

          • -
            Для данного типа табличного вопроса задается три вопроса. Нажмите Добавить, выберите вопросы из списка.
            +
            Для данного типа табличного вопроса задается три вопроса. Нажмите Добавить, выберите вопросы из списка.
          • -
            На третьей странице помощника необходимо задать предопределенные ответы на первые два вопроса.
            +
            На третьей странице помощника необходимо задать предопределенные ответы на первые два вопроса.
            • -
              Предопределенные ответы на первый вопрос будут отражаться в качестве заголовков строк таблицы.
              +
              Предопределенные ответы на первый вопрос будут отражаться в качестве заголовков строк таблицы.
            • Предопределенные ответы на второй вопрос будут отражаться в качестве заголовков колонок.
          • Ответы на третий вопрос респондент должен будет указывать в ячейках таблицы.
          • -
            Нажмите кнопку Добавить. Для добавления предопределенных вариантов ответов на первые два вопроса воспользуйтесь одним из способов:
            +
            Нажмите кнопку Добавить. Для добавления предопределенных вариантов ответов на первые два вопроса воспользуйтесь одним из способов:
            • Напишите варианты ответов вручную.
            • Если были заранее созданы вопросы типа Выбор одного или нескольких вариантов ответа из предложенных, то для того чтобы быстро перечислить все ответы, можно воспользоваться кнопкой Заполнить варианты ответов.
          diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Help/ru.html index 07b7b5815..d27b17e09 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Help/ru.html @@ -3,7 +3,7 @@

          Открывается по команде Добавить - простой вопрос из шаблона анкеты.

          Ввод простого вопроса в шаблон анкеты

          • В поле Элементарный вопрос выберите вопрос из ранее подготовленного списка вопросов для анкетирования, после выбора вопроса в этом поле отражается его наименование. Можно создать вопрос в списке выбора, если нужного вопроса не нашлось. -
          • Поле Формулировка после выборе вопроса для анкетирования автоматически заполняется текстом формулировки вопроса. Здесь же можно изменить формулировку вопроса, которая будет видна респондентам в анкетах этого шаблона. +
          • Поле Формулировка после выборе вопроса для анкетирования автоматически заполняется текстом формулировки вопроса. Здесь же можно изменить формулировку вопроса, которая будет видна респондентам в анкетах этого шаблона.
          • Если флажок Обязательный установлен, то респондент не сможет завершить анкетирование, не ответив на этот вопрос.
          • В поле Способ отображения подсказки укажите, как будет показываться подсказка в тексте анкеты:
            • Контекстная подсказка - текст подсказки будет все время виден; diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Help/ru.html index 2f955b804..c8c2ff393 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Help/ru.html @@ -2,7 +2,7 @@

              Предназначена для подготовки шаблона анкеты.

              Подготовка анкет осуществляется в два этапа. Вначале необходимо подготовить вопросы, из которых будет состоять предполагаемая анкета. Затем, используя подготовленные вопросы, нужно составить шаблон анкеты. В дальнейшем по этому шаблону приложение автоматически создает анкету в тот момент, когда респондент начинает ее заполнять.

              Укажите Наименование шаблона. Поле Наименование отображается в списке шаблонов.

              -

              Шаблон анкеты состоит из двух вкладок - Заголовки и Вопросы.

              +

              Шаблон анкеты состоит из двух вкладок - Заголовки и Вопросы.

              Заголовки

              • Укажите Заголовок, который будет отображаться в анкете при ее заполнении респондентом.
              • @@ -10,7 +10,7 @@
                Анкета может состоять из нескольких разделов, при этом два раздела, Вступление и Заключение, являются обязательными и присутствуют в любой анкете.
              • -
                Напишите Вступление. В этом разделе можно поприветствовать респондента, объяснить ему особенности заполнения анкеты. Текст будет показан респонденту в начале анкетирования.
                +
                Напишите Вступление. В этом разделе можно поприветствовать респондента, объяснить ему особенности заполнения анкеты. Текст будет показан респонденту в начале анкетирования.
              • Напишите Заключение. В этом разделе можно поблагодарить респондента за заполненную анкету. Текст будет показан респонденту при завершении анкетирования.

              Вопросы

              @@ -19,12 +19,12 @@
            • Сформируйте список вопросов анкеты. Список вопросов состоит из колонок:
              • Вопрос - выводится наименование разделов и вопросов анкеты;
              • -
              •  Обязательный - выводится Да, если у вопроса установлен флажок Обязательный, Нет - если не установлен; +
              • Обязательный - выводится Да, если у вопроса установлен флажок Обязательный, Нет - если не установлен;
              • -
              •  Заметки - выводится , если введены дополнительные сведения о вопросе. Для того чтобы просмотреть заметки в нижней части списка, выделите вопрос.
            • -
            • По соответствующей кнопке можно Добавить новый элемент в анкету (также можно воспользоваться контекстным меню по правой кнопке мыши). Выберите Тип элемента: +
            • Заметки - выводится , если введены дополнительные сведения о вопросе. Для того чтобы просмотреть заметки в нижней части списка, выделите вопрос.
          • +
          • По соответствующей кнопке можно Добавить новый элемент в анкету (также можно воспользоваться контекстным меню по правой кнопке мыши). Выберите Тип элемента:
            • Раздел -
              • Задайте Имя раздела. В поле Заметки напишите уточняющую информацию о разделе, которая будет отображаться в нижней части шаблона или анкеты. Необходимо добавить хотя бы один раздел. Для того чтобы добавить раздел, также можно нажать Ctrl+F9.
            • +
              • Задайте Имя раздела. В поле Заметки напишите уточняющую информацию о разделе, которая будет отображаться в нижней части шаблона или анкеты. Необходимо добавить хотя бы один раздел. Для того чтобы добавить раздел, также можно нажать Ctrl+F9.
            • Простой вопрос;
            • Табличный вопрос; @@ -34,41 +34,41 @@
              Если анкета состоит из большого количества вопросов, то для удобства работы респондента с анкетой рекомендуется сгруппировать вопросы по нескольким разделам. Для комфортной работы респондента с анкетой рекомендуется включать в раздел не более 10-15 вопросов.
            • -
              С помощью кнопок  Переместить вверх и  Переместить вниз можно установить порядок следования вопросов в разделе и самих разделов в анкете. Порядком следования можно управлять при помощи перетаскивания мышью разделов и вопросов. При помощи перетаскивания мышью можно переносить вопросы из раздела в раздел.
              +
              С помощью кнопок Переместить вверх и Переместить вниз можно установить порядок следования вопросов в разделе и самих разделов в анкете. Порядком следования можно управлять при помощи перетаскивания мышью разделов и вопросов. При помощи перетаскивания мышью можно переносить вопросы из раздела в раздел.
            • При удалении раздела вместе с ним удаляются вопросы, входящие в него.

            Просмотр анкеты

            • При выборе в разделах шаблона анкеты табличного вопроса можно увидеть его внешний вид в нижней части шаблона. Для того чтобы получить представление о том, каким образом будет выглядеть вся анкета при заполнении ее респондентом, можно воспользоваться командой Форма заполнения.

            Сохранение шаблона анкеты

            -
            • Если работу над шаблоном планируется продолжить, нажмите Записать и закрыть.

            Запрет редактирования шаблона

            -
            • После того как список вопросов в шаблоне анкеты окончательно сформирован, можно запретить возможность его редактирования в дальнейшем. Для этого нажмите Закончить редактирование. +
              • Если работу над шаблоном планируется продолжить, нажмите Записать и закрыть.

              Запрет редактирования шаблона

              +
              • После того как список вопросов в шаблоне анкеты окончательно сформирован, можно запретить возможность его редактирования в дальнейшем. Для этого нажмите Закончить редактирование.
              • -
              • Если по шаблону анкеты приложением была создана хотя бы одна анкета, то шаблон анкеты автоматически становится недоступным для редактирования. Для корректного анализа ответов на анкеты в отчетах необходимо, чтобы шаблон анкеты остался неизменным, так как анализ данных производится для всех анкет, в которых указано, что они заполнены по данному шаблону.

              Простой вопрос

              +
            • Если по шаблону анкеты приложением была создана хотя бы одна анкета, то шаблон анкеты автоматически становится недоступным для редактирования. Для корректного анализа ответов на анкеты в отчетах необходимо, чтобы шаблон анкеты остался неизменным, так как анализ данных производится для всех анкет, в которых указано, что они заполнены по данному шаблону.

            Простой вопрос

            • Нажмите Добавить - Простой вопрос, для того чтобы подобрать в шаблон вопрос из списка Вопросы для анкетирования. Также можно использовать сочетание клавиш Shift+F6.
            • Заполните следующие поля, для того чтобы создать Вопрос шаблона анкеты:
            • -
            • В поле Элементарный вопрос выберите вопрос из ранее подготовленного списка вопросов для анкетирования. В этом поле отражается наименование вопроса. Можно создать вопрос в списке выбора, если нужного вопроса не нашлось. +
            • В поле Элементарный вопрос выберите вопрос из ранее подготовленного списка вопросов для анкетирования. В этом поле отражается наименование вопроса. Можно создать вопрос в списке выбора, если нужного вопроса не нашлось.
            • -
            • Поле Формулировка автоматически заполняется текстом формулировки вопроса после выбора вопроса для анкетирования. Здесь же можно изменить формулировку вопроса, которая будет видна респондентам в анкетах этого шаблона.
            • -
            • С помощью переключателя На этот вопрос выберите признак:
            • -
              • Не обязательно отвечать - вопрос является необязательным, респондент может не отвечать на заданный вопрос.
              • -
              • Обязательно ответить - респондент не сможет завершить анкетирование, не ответив на этот вопрос.
              • -
              • Обязательно ответить или отказаться - у вопроса установлен признак отказа от ответа на вопрос, если респондент по какой-то причине не может ответить на него.
            • -
              В поле Подсказка напишите краткое объяснение вопроса, для того чтобы респонденту было легче отвечать на вопрос.
            • С помощью переключателя укажите, как будет выглядеть подсказка для респондента к этому вопросу:
            • -
              • Знак вопроса справа - в этом случае в тексте анкеты появится знак вопроса, нажав на который, можно будет просмотреть подсказку.
              • -
              • Контекстная подсказка - в этом случае подсказка будет размещена в тексте анкеты под вопросом.
            • В поле Заметки напишите по поводу вопроса уточняющую информацию, которая будет выводиться в нижней части анкеты.

            Табличный вопрос

            +
          • Поле Формулировка автоматически заполняется текстом формулировки вопроса после выбора вопроса для анкетирования. Здесь же можно изменить формулировку вопроса, которая будет видна респондентам в анкетах этого шаблона.
          • +
          • С помощью переключателя На этот вопрос выберите признак:
          • +
            • Не обязательно отвечать - вопрос является необязательным, респондент может не отвечать на заданный вопрос.
            • +
            • Обязательно ответить - респондент не сможет завершить анкетирование, не ответив на этот вопрос.
            • +
            • Обязательно ответить или отказаться - у вопроса установлен признак отказа от ответа на вопрос, если респондент по какой-то причине не может ответить на него.
          • +
            В поле Подсказка напишите краткое объяснение вопроса, для того чтобы респонденту было легче отвечать на вопрос.
          • С помощью переключателя укажите, как будет выглядеть подсказка для респондента к этому вопросу:
          • +
            • Знак вопроса справа - в этом случае в тексте анкеты появится знак вопроса, нажав на который, можно будет просмотреть подсказку.
            • +
            • Контекстная подсказка - в этом случае подсказка будет размещена в тексте анкеты под вопросом.
          • В поле Заметки напишите по поводу вопроса уточняющую информацию, которая будет выводиться в нижней части анкеты.

          Табличный вопрос

          • В таблицах удобно вводить однотипные структурированные данные. Например, сведения о составе семьи удобно поместить в таблицу. В столбцах будут вопросы о членах семьи, в строках будут перечислены по порядку члены семьи и их характеристики будут размещены в порядке вопросов таблицы.
          • -
          • Команда Добавить - Табличный вопрос открывает Помощник табличных вопросов. Следуйте инструкциям помощника, для того чтобы ввести табличный вопрос.

          Вопрос с условием

          -
          • Существуют ситуации, когда респонденту нет смысла задавать вопрос, если не выполняется какое-либо условие. Например, нет смысла задавать вопросы респонденту о том, как часто он пользуется автосервисом и автомобильной мойкой, если у респондента нет автомобиля. +
          • Команда Добавить - Табличный вопрос открывает Помощник табличных вопросов. Следуйте инструкциям помощника, для того чтобы ввести табличный вопрос.

          Вопрос с условием

          +
          • Существуют ситуации, когда респонденту нет смысла задавать вопрос, если не выполняется какое-либо условие. Например, нет смысла задавать вопросы респонденту о том, как часто он пользуется автосервисом и автомобильной мойкой, если у респондента нет автомобиля.
          • В таком случае при составлении шаблона анкеты можно создать вопрос с условием, например, о наличии у респондента автомобиля и дополнительно перечислить подчиненные вопросы, например, об автосервисе и автомойке.
          • -
          • При положительном ответе на вопрос с условием респонденту будет также предложено ответить и на подчиненные вопросы. В противном случае подчиненные вопросы останутся недоступными. +
          • При положительном ответе на вопрос с условием респонденту будет также предложено ответить и на подчиненные вопросы. В противном случае подчиненные вопросы останутся недоступными.
          • -
          • Для создания вопросов с условием можно воспользоваться командой Добавить - Вопрос с условием, также можно воспользоваться сочетанием клавиш Shift+F8. Вопросами с условием могут быть только вопросы типа Булево (Да/Нет). +
          • Для создания вопросов с условием можно воспользоваться командой Добавить - Вопрос с условием, также можно воспользоваться сочетанием клавиш Shift+F8. Вопросами с условием могут быть только вопросы типа Булево (Да/Нет).
          • -
          • К каждому вопросу с условием необходимо добавить один или несколько подчиненных вопросов с помощью команд Добавить - Простой вопрос, Добавить - Табличный вопрос. При этом подчиненные вопросы выводятся под своим родительским условным вопросом.

          См. также:

          +
        • К каждому вопросу с условием необходимо добавить один или несколько подчиненных вопросов с помощью команд Добавить - Простой вопрос, Добавить - Табличный вопрос. При этом подчиненные вопросы выводятся под своим родительским условным вопросом.
        • См. также:

          \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form index fb5f9c61e..e6865ff11 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Form.form @@ -395,17 +395,17 @@
          - СтраницаПечатныеФормы - 80 + СтраницаПечатныеФормыФайлыВыгрузки + 143 - ВыберитеПечатныеФормы + ВыберитеПечатныеФормыФайлыВыгрузки 113 - ПечатныеФормы + Вложения 82 <key>ru</key> - <value>Печатные формы</value> + <value>Вложения</value> true true @@ -413,31 +413,28 @@ true - ПечатныеФормы + Вложения None Add Change - CheckAll Copy CopyToClipboard Delete EndEdit MoveDown MoveUp - Pickup SelectAll ShowMultipleSelection ShowRowRearrangement SortListAsc SortListDesc - UncheckAll - ПечатныеФормыПометка - 101 + ВложенияВыбрано + 144 <key>ru</key> - <value>Пометка</value> + <value>Выбрано</value> true true @@ -445,11 +442,16 @@ true - ПечатныеФормы.Check + Вложения.Выбрано + None + + OnChange + ВложенияВыбраноПриИзменении + - ПечатныеФормыПометкаРасширеннаяПодсказка - 103 + ВложенияВыбраноРасширеннаяПодсказка + 146 Label true true @@ -458,35 +460,207 @@ - ПечатныеФормыПометкаКонтекстноеМеню - 102 + ВложенияВыбраноКонтекстноеМеню + 145 true CheckBoxField - Auto + Enter true Left true - + + true + - - ПечатныеФормыПредставление - 98 - - <key>ru</key> - <value>Представление</value> - + + ВложенияГруппаДанные + 147 + + ВложенияКартинкаВидаВложения + 149 + + <key>ru</key> + <value>Картинка вида вложения</value> + + true + true + + true + + + Вложения.КартинкаВидаВложения + + + ВложенияКартинкаВидаВложенияРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + ВложенияКартинкаВидаВложенияКонтекстноеМеню + 150 + true + + PictureField + Enter + true + Left + true + + 3 + true + 1 + true + + + 1 + + AsFileRef + + + + ВложенияГруппаПредставление + 152 + + ВложенияИндексКартинки + 154 + + <key>ru</key> + <value>Индекс картинки</value> + + true + true + + true + + + Вложения.ИндексКартинки + + + ВложенияИндексКартинкиРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + ВложенияИндексКартинкиКонтекстноеМеню + 155 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + + 1 + + AsFileRef + + + + ВложенияПредставление + 157 + + <key>ru</key> + <value>Представление</value> + + true + true + + true + + + Вложения.Представление + + None + + ВложенияПредставлениеРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + ВложенияПредставлениеКонтекстноеМеню + 158 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вложения группа представление</value> + + + ВложенияГруппаПредставлениеРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + true true true - - ПечатныеФормы.Presentation - + + <key>ru</key> + <value>Вложения группа данные</value> + - ПечатныеФормыПредставлениеРасширеннаяПодсказка - 100 + ВложенияГруппаДанныеРасширеннаяПодсказка + 148 Label true true @@ -494,37 +668,23 @@ Left - - ПечатныеФормыПредставлениеКонтекстноеМеню - 99 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + ColumnGroup + + auto + true - ПечатныеФормыКоманднаяПанель + ВложенияКоманднаяПанель 84 Left true - ПечатныеФормыСтрокаПоиска + ВложенияСтрокаПоиска 86 - ПечатныеФормыСтрокаПоискаРасширеннаяПодсказка + ВложенияСтрокаПоискаРасширеннаяПодсказка 88 Label true @@ -534,20 +694,20 @@ - ПечатныеФормыСтрокаПоискаКонтекстноеМеню + ВложенияСтрокаПоискаКонтекстноеМеню 87 true - ПечатныеФормы + Вложения true - ПечатныеФормыСостояниеПросмотра + ВложенияСостояниеПросмотра 89 - ПечатныеФормыСостояниеПросмотраРасширеннаяПодсказка + ВложенияСостояниеПросмотраРасширеннаяПодсказка 91 Label true @@ -557,21 +717,21 @@ - ПечатныеФормыСостояниеПросмотраКонтекстноеМеню + ВложенияСостояниеПросмотраКонтекстноеМеню 90 true ViewStatusAddition - ПечатныеФормы + Вложения true - ПечатныеФормыУправлениеПоиском + ВложенияУправлениеПоиском 92 - ПечатныеФормыУправлениеПоискомРасширеннаяПодсказка + ВложенияУправлениеПоискомРасширеннаяПодсказка 94 Label true @@ -581,18 +741,18 @@ - ПечатныеФормыУправлениеПоискомКонтекстноеМеню + ВложенияУправлениеПоискомКонтекстноеМеню 93 true SearchControlAddition - ПечатныеФормы + Вложения true - ПечатныеФормыРасширеннаяПодсказка + ВложенияРасширеннаяПодсказка 85 Label true @@ -602,10 +762,11 @@ - ПечатныеФормыКонтекстноеМеню + ВложенияКонтекстноеМеню 83 true + Tree true true true @@ -623,13 +784,10 @@ false true Auto - Auto + ExpandAllLevels true true AsFileRef - - ПечатныеФормы.Picture - true @@ -637,7 +795,7 @@ 104 <key>ru</key> - <value>Формат вложений</value> + <value>Формат печатных форм</value> true true @@ -677,6 +835,39 @@ true + true + true + + true + + + <key>ru</key> + <value>Выберите печатные формы</value> + + + ВыберитеПечатныеФормыФайлыВыгрузкиРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + UsualGroup + + Vertical + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаНастройки + 142 УпаковатьВАрхив 107 @@ -841,11 +1032,11 @@ <key>ru</key> - <value>Выберите печатные формы</value> + <value>Настройки</value> - ВыберитеПечатныеФормыРасширеннаяПодсказка - 114 + ГруппаНастройкиРасширеннаяПодсказка + 161 Label true true @@ -856,10 +1047,9 @@ UsualGroup Vertical - WeakSeparation + Auto true true - auto Auto Auto @@ -869,6 +1059,39 @@ true + + <key>ru</key> + <value>Страница печатные формы и файлы выгрузки</value> + + + ru + Страница печатные формы макеты выгузки + + + СтраницаПечатныеФормыФайлыВыгрузкиРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПечатныеФормы + 80 + true + true + + true + <key>ru</key> <value>Страница печатные формы</value> @@ -1430,14 +1653,14 @@ </edit> </attributes> <attributes> - <name>ПечатныеФормы</name> + <name>Вложения</name> <title> <key>ru</key> - <value>Печатные формы</value> + <value>Вложения</value> 15 - ValueList + ValueTree true @@ -1445,9 +1668,106 @@ true - - - + + Представление + + <key>ru</key> + <value>Представление</value> + + 25 + + String + + + + true + + + true + + + + Выбрано + + <key>ru</key> + <value>Выбрано</value> + + 26 + + Number + + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 27 + + Number + + 10 + + + + true + + + true + + + + КомандаВложения + 28 + + + true + + + true + + + + КартинкаВидаВложения + + <key>ru</key> + <value>Картинка вида вложения</value> + + 29 + + Picture + + + true + + + true + + + + ИндексВидаВложения + 30 + + Number + + 10 + + + + true + + + true + + ФорматВложений @@ -1591,6 +1911,22 @@ Подписать + + ВидыВложений + 24 + + ValueList + + + true + + + true + + + + + СформироватьИОтправить diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Help/ru.html b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Help/ru.html index e55db301d..ec02a2510 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Help/ru.html @@ -5,7 +5,7 @@ <ul><li>Для выбора существующего шаблона выберите нужный шаблон в списке, нажмите <strong>Сформировать</strong>. </li><li>Имеется возможность с помощью соответствующей кнопки сразу <strong>Сформировать и отправить</strong> sms-сообщение.</li></ul><h3>Редактирование шаблона</h3> <ul><li> -<div>Для редактирования шаблона дважды щелкните по нужному наименованию правой кнопкой мыши. Также можно воспользоваться командой <strong>Еще - Изменить</strong>.</div></li></ul><h3>Ввод нового шаблона</h3> -<ul><li>В списке всегда имеется пункт <strong><Без шаблона></strong>. +<div>Для редактирования шаблона дважды щелкните по нужному наименованию правой кнопкой мыши. Также можно воспользоваться командой <strong>Еще - Изменить</strong>.</div></li></ul><h3>Ввод нового шаблона</h3> +<ul><li>В списке всегда имеется пункт <strong><Без шаблона></strong>. </li><li>Для ввода нового <a href="Catalog.ШаблоныСообщений.Form.ФормаЭлемента/Help">шаблона</a> дважды щелкните по этому пункту мышкой или выделите его и воспользуйтесь командой <strong>Еще - Изменить</strong>. </li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами.</a></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl index ecbad0755..5f483a8b2 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/СформироватьСообщение/Module.bsl @@ -43,6 +43,11 @@ ЕстьПравоИзменения = Истина; КонецЕсли; + ВидыВложений.Добавить("ПечатныеФормы", НСтр("ru = 'Печатные формы'")); + ВидыВложений.Добавить("ФайлыВыгрузки", НСтр("ru = 'Файлы выгрузки'")); + + УстановитьУсловноеОформление(); + Если РежимВыбора Или ВидСообщения = "Произвольный" Тогда Элементы.ФормаСформироватьИОтправить.Видимость = Ложь; Элементы.ФормаСформировать.Заголовок = НСтр("ru = 'Выбрать'"); @@ -51,7 +56,7 @@ КонецЕсли; ЗаполнитьСписокДоступныхШаблонов(); - ЗаполнитьСписокПечатныхФорм(); + ЗаполнитьСписокПечатныхФормИМакетовВыгрузки(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); @@ -59,6 +64,15 @@ ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), ФорматСохранения.Представление, Ложь, ФорматСохранения.Картинка); КонецЦикла; Элементы.ПодписьИПечать.Видимость = МодульУправлениеПечатью.НастройкиПечати().ИспользоватьПодписиИПечати; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + + ЗаголовокВыберитеПечатныеФормы = НСтр("ru = 'Выберите печатные формы или файлы выгрузки'"); + Элементы.ВыберитеПечатныеФормыФайлыВыгрузки.Заголовок = ЗаголовокВыберитеПечатныеФормы; + + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -141,7 +155,7 @@ ПредпросмотрОбычныйТекст.УстановитьТекст(Элемент.ТекущиеДанные.ТекстШаблона); КонецЕсли; Иначе - Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаПечатныеФормы; + Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаПечатныеФормыФайлыВыгрузки; КонецЕсли; КонецЕсли; КонецПроцедуры @@ -165,6 +179,27 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыВложения + +&НаКлиенте +Процедура ВложенияВыбраноПриИзменении(Элемент) + + ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущиеДанные.Выбрано = 2 Тогда + ТекущиеДанные.Выбрано = 0; + КонецЕсли; + + УстановитьПометкиПодчиненных(ТекущиеДанные, "Выбрано"); + УстановитьПометкиРодителей(ТекущиеДанные, "Выбрано"); + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -246,9 +281,38 @@ &НаКлиенте Процедура СформироватьСообщениеДляОтправки(ПараметрыОтправки) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПередПродолжениемФормированияСообщенияДляОтправки", ЭтотОбъект, ПараметрыОтправки); + + МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент"); + МодульУправлениеПечатьюКлиент.ПередНачаломВыполненияКомандыПечати( + Предмет, ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы, ОбработчикЗавершения); + + Возврат; + КонецЕсли; + + ПродолжитьФормироватьСообщениеДляОтправки(ПараметрыОтправки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередПродолжениемФормированияСообщенияДляОтправки(ПечатныеФормы, ПараметрыОтправки) Экспорт + + ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы = ПечатныеФормы; + + ПродолжитьФормироватьСообщениеДляОтправки(ПараметрыОтправки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьФормироватьСообщениеДляОтправки(ПараметрыОтправки) + СформироватьБезШаблон = Не ЗначениеЗаполнено(ПараметрыОтправки.Шаблон); - Если СформироватьБезШаблон И ПечатныеФормы.Количество() > 0 Тогда - СохранитьВыборПечатныхФорм(); + Если СформироватьБезШаблон Тогда + + СохранитьВыборПечатныхФормИФайловВыгрузки(); + КонецЕсли; АдресВременногоХранилища = Неопределено; @@ -437,19 +501,53 @@ ПараметрыОтправки.ДополнительныеПараметры.ПараметрыСообщения = ПараметрыСообщения; Если Не ЗначениеЗаполнено(Шаблон) Тогда - Для Каждого ПечатнаяФорма Из ПечатныеФормы Цикл - Если ПечатнаяФорма.Пометка Тогда - ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы.Добавить(ПечатнаяФорма.Значение); - КонецЕсли; - КонецЦикла; + ДополнитьПараметрыОтправкиПечатнымиФормами(ПараметрыОтправки); + ДополнитьПараметрыОтправкиМакетамиВыгрузки(ПараметрыОтправки); ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения = ВыбранныеНастройкиФормата(); + КонецЕсли; Возврат ПараметрыОтправки; КонецФункции +&НаКлиенте +Процедура ДополнитьПараметрыОтправкиПечатнымиФормами(ПараметрыОтправки) + + СтрокаДерева = ВеткаПоВидуВложения(Вложения, ВидыВложений[0]); + Если СтрокаДерева = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ПечатнаяФорма Из СтрокаДерева.ПолучитьЭлементы() Цикл + + Если ПечатнаяФорма.Выбрано = 1 Тогда + ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы.Добавить(ПечатнаяФорма.КомандаВложения); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ДополнитьПараметрыОтправкиМакетамиВыгрузки(ПараметрыОтправки) + + СтрокаДерева = ВеткаПоВидуВложения(Вложения, ВидыВложений[1]); + Если СтрокаДерева = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого МакетВыгрузки Из СтрокаДерева.ПолучитьЭлементы() Цикл + + Если МакетВыгрузки.Выбрано = 1 Тогда + ПараметрыОтправки.ДополнительныеПараметры.МакетыВыгрузки.Добавить(МакетВыгрузки.КомандаВложения); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + // Параметры: // Результат - КодВозвратаДиалога // ПараметрыОтправки -см. ШаблоныСообщенийКлиентСервер.КонструкторПараметровОтправки @@ -650,66 +748,231 @@ КонецПроцедуры &НаСервере -Процедура ЗаполнитьСписокПечатныхФорм() +Процедура ЗаполнитьСписокПечатныхФормИМакетовВыгрузки() Если ВидСообщения = "Произвольный" Или ВидСообщения = "СообщениеSMS" Или РежимВыбора Или ПодготовитьШаблон Или ТипЗнч(Предмет) = Тип("Строка") Или Не ЗначениеЗаполнено(Предмет) Тогда - Элементы.ВыберитеПечатныеФормы.Видимость = Ложь; + + Элементы.ВыберитеПечатныеФормыФайлыВыгрузки.Видимость = Ложь; Возврат; + КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); КомандыПечати = Неопределено; + КомандыВыгрузки = Неопределено; + Если ЗначениеЗаполнено(ИмяФормыИсточникаСообщения) Тогда + КомандыПечати = ОбщегоНазначения.ТаблицаЗначенийВМассив(МодульУправлениеПечатью.КомандыПечатиФормы( ИмяФормыИсточникаСообщения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Предмет.Метаданные()))); + + СписокОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Предмет.Метаданные()); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + КомандыВыгрузкиФормы = МодульВыгрузкаОбъектовВФайлы.КомандыВыгрузкиФормы( + ИмяФормыИсточникаСообщения, + СписокОбъектов); + КомандыВыгрузки = ОбщегоНазначения.ТаблицаЗначенийВМассив(КомандыВыгрузкиФормы); + + КонецЕсли; + КонецЕсли; - Если Не ЗначениеЗаполнено(КомандыПечати) Тогда - Элементы.ВыберитеПечатныеФормы.Видимость = Ложь; - Возврат; + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + + ЗаполнитьСписокПечатныхФорм(ДеревоВложений, КомандыПечати); + + Если КомандыВыгрузки <> Неопределено Тогда + ЗаполнитьСписокМакетовВыгрузки(ДеревоВложений, КомандыВыгрузки); КонецЕсли; - ВыбранныеРанееПечатныеФормы = ВыбранныеРанееПечатныеФормы(); + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); - Для Каждого КомандаПечати Из КомандыПечати Цикл - Пометка = ВыбранныеРанееПечатныеФормы.Найти(КомандаПечати.УникальныйИдентификатор) <> Неопределено; - ПечатныеФормы.Добавить(КомандаПечати, КомандаПечати.Представление, Пометка); - КонецЦикла; + Элементы.ВыберитеПечатныеФормыФайлыВыгрузки.Видимость = (ЗначениеЗаполнено(КомандыПечати) ИЛИ ЗначениеЗаполнено(КомандыВыгрузки)); КонецЕсли; КонецПроцедуры -&НаСервере -Процедура СохранитьВыборПечатныхФорм() +&НаСервере +Процедура ЗаполнитьСписокПечатныхФорм(ДеревоВложений, КомандыПечати) + + Если КомандыПечати.Количество() = 0 Тогда + + Возврат; + + КонецЕсли; + + ИндексыВидаВложения = СоответствиеИндексаВидуВложения(ВидыВложений); + ИндексВидаВложения = ИндексыВидаВложения[ВидыВложений[0]]; + + СтрокаДерева = ДеревоВложений.Строки.Добавить(); + СтрокаДерева.Представление = ВидыВложений[0].Представление; + СтрокаДерева.КартинкаВидаВложения = БиблиотекаКартинок.Печать; + + КлючОбъекта = "ОтправкаПечатныхФормИФайловВыгрузкиБезШаблона"; + ВыбранныеПечатныеФормы = ВыбранныеРанееОбъекты(КлючОбъекта); + ВыбраныВсе = Ложь; + + Для Каждого КомандаПечати Из КомандыПечати Цикл + + Выбрано = 0; + Пометка = (ВыбранныеПечатныеФормы.Найти(КомандаПечати.УникальныйИдентификатор) <> Неопределено); + + Если Пометка Тогда + Выбрано = 1; + КонецЕсли; + + НоваяСтрока = СтрокаДерева.Строки.Добавить(); + НоваяСтрока.Представление = КомандаПечати.Представление; + НоваяСтрока.КомандаВложения = КомандаПечати; + НоваяСтрока.ИндексКартинки = ИндексПиктограммыФайла("mxl"); + СтрокаДерева.ИндексВидаВложения = ИндексВидаВложения; + НоваяСтрока.Выбрано = Выбрано; + + ВыбраныВсе = Мин(ВыбраныВсе, Выбрано); + Если Выбрано <> 0 Тогда + СтрокаДерева.Выбрано = 2; + КонецЕсли; + + КонецЦикла; + + Если ВыбраныВсе Тогда + СтрокаДерева.Выбрано = 1; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокМакетовВыгрузки(ДеревоВложений, КомандыВыгрузки) + + Если КомандыВыгрузки.Количество() = 0 Тогда + + Возврат; + + КонецЕсли; + + ИндексыВидаВложения = СоответствиеИндексаВидуВложения(ВидыВложений); + ИндексВидаВложения = ИндексыВидаВложения[ВидыВложений[1]]; + + СтрокаДерева = ДеревоВложений.Строки.Добавить(); + СтрокаДерева.Представление = ВидыВложений[1].Представление; + СтрокаДерева.КартинкаВидаВложения = БиблиотекаКартинок.СохранитьФайлКак; + + КлючОбъекта = "ОтправкаПечатныхФормИФайловВыгрузкиБезШаблона"; + ВыбранныеМакетыВыгрузки = ВыбранныеРанееОбъекты(КлючОбъекта); + ВыбраныВсе = Ложь; + СоответствиеФорматаВыгрузкиРасширению = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + СоответствиеФорматаВыгрузкиРасширению = МодульВыгрузкаОбъектовВФайлы.СоответствиеФорматаВыгрузкиФорматуСохранения(); + + КонецЕсли; + + Для Каждого КомандаВыгрузки Из КомандыВыгрузки Цикл + + Выбрано = 0; + + Пометка = (ВыбранныеМакетыВыгрузки.Найти(КомандаВыгрузки.УникальныйИдентификатор) <> Неопределено); + + Если Пометка Тогда + Выбрано = 1; + КонецЕсли; + + НоваяСтрока = СтрокаДерева.Строки.Добавить(); + НоваяСтрока.Представление = КомандаВыгрузки.Представление; + НоваяСтрока.КомандаВложения = КомандаВыгрузки; + Расширение = ?(ПустаяСтрока(КомандаВыгрузки.ФорматСохранения), "mxl", КомандаВыгрузки.ФорматСохранения); + Если СоответствиеФорматаВыгрузкиРасширению <> Неопределено Тогда + Расширение = СоответствиеФорматаВыгрузкиРасширению[Расширение]; + КонецЕсли; + + НоваяСтрока.ИндексКартинки = ИндексПиктограммыФайла(Расширение); + СтрокаДерева.ИндексВидаВложения = ИндексВидаВложения; + НоваяСтрока.Выбрано = Выбрано; + + ВыбраныВсе = Мин(ВыбраныВсе, Выбрано); + Если Выбрано <> 0 Тогда + СтрокаДерева.Выбрано = 2; + КонецЕсли; + + КонецЦикла; + + Если ВыбраныВсе Тогда + СтрокаДерева.Выбрано = 1; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьВыборПечатныхФормИФайловВыгрузки() Если Не ЗначениеЗаполнено(ИмяФормыИсточникаСообщения) Тогда Возврат; КонецЕсли; Идентификаторы = Новый Массив; - Для Каждого ПечатнаяФорма Из ПечатныеФормы Цикл - Если ПечатнаяФорма.Пометка Тогда - Идентификаторы.Добавить(ПечатнаяФорма.Значение.УникальныйИдентификатор); - КонецЕсли; - КонецЦикла; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ОтправкаПечатныхФормБезШаблона", ИмяФормыИсточникаСообщения, Идентификаторы); + СтрокаДерева = ВеткаПоВидуВложения(Вложения, ВидыВложений[0]); + Если СтрокаДерева <> Неопределено Тогда + + Для Каждого ПечатнаяФорма Из СтрокаДерева.ПолучитьЭлементы() Цикл + + Если ПечатнаяФорма.Выбрано = 1 Тогда + Идентификаторы.Добавить(ПечатнаяФорма.КомандаВложения.УникальныйИдентификатор); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + СтрокаДерева = ВеткаПоВидуВложения(Вложения, ВидыВложений[1]); + Если СтрокаДерева <> Неопределено Тогда + + Для Каждого МакетВыгрузки Из СтрокаДерева.ПолучитьЭлементы() Цикл + + Если МакетВыгрузки.Выбрано = 1 Тогда + Идентификаторы.Добавить(МакетВыгрузки.КомандаВложения.УникальныйИдентификатор); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + СохранитьВыборПечатныхФормИФайловВыгрузкиНаСервере(Идентификаторы); КонецПроцедуры &НаСервере -Функция ВыбранныеРанееПечатныеФормы() +Процедура СохранитьВыборПечатныхФормИФайловВыгрузкиНаСервере(Знач Идентификаторы) + + Если Идентификаторы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ОтправкаПечатныхФормИФайловВыгрузкиБезШаблона", ИмяФормыИсточникаСообщения, Идентификаторы); + +КонецПроцедуры + +&НаСервере +Функция ВыбранныеРанееОбъекты(КлючОбъекта) Результат = Новый Массив; Если ЗначениеЗаполнено("ИмяФормыИсточникаСообщения") Тогда + Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "ОтправкаПечатныхФормБезШаблона", ИмяФормыИсточникаСообщения, Новый Массив); + КлючОбъекта, ИмяФормыИсточникаСообщения, Новый Массив); + КонецЕсли; Возврат Результат; @@ -768,12 +1031,15 @@ Возврат; КонецЕсли; - Вложения = ПолучитьФайлыПодписейИПоместитьВАрхив(РезультатПодписания, ПереводитьИменаФайловВТранслит, Контекст.ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения); + ВложенияДляОтправки = ПолучитьФайлыПодписейИПоместитьВАрхив( + РезультатПодписания, + ПереводитьИменаФайловВТранслит, + Контекст.ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения); Результат = Контекст.Результат; Результат.Вложения.Очистить(); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат.Вложения, Вложения); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат.Вложения, ВложенияДляОтправки); СформироватьСообщениеДляОтправкиОкончание(Результат, Контекст.ПараметрыОтправки); @@ -855,4 +1121,162 @@ КонецФункции +&НаСервере +Функция ИндексПиктограммыФайла(Расширение) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйКлиентСервер"); + Возврат МодульРаботаСФайламиСлужебныйКлиентСервер.ИндексПиктограммыФайла(Расширение); + КонецЕсли; + + Возврат 0; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция СоответствиеИндексаВидуВложения(ВидыВложений) + + ИндексыВидаВложения = Новый Соответствие; + + Для Сч = 0 По ВидыВложений.Количество() - 1 Цикл + + ИндексыВидаВложения.Вставить(ВидыВложений[Сч], Сч); + + КонецЦикла; + + Возврат ИндексыВидаВложения; + +КонецФункции + +&НаКлиенте +Функция ВеткаПоВидуВложения(ДеревоВложений, ВидВложений) + + ИндексыВидаВложения = СоответствиеИндексаВидуВложения(ВидыВложений); + ИндексВидаВложения = ИндексыВидаВложения[ВидВложений]; + СтрокаДерева = Неопределено; + + СтрокиДерева = ДеревоВложений.ПолучитьЭлементы(); + Для Каждого ТекущаяСтрокаДерева Из СтрокиДерева Цикл + + Если ТекущаяСтрокаДерева.ИндексВидаВложения = ИндексВидаВложения Тогда + + СтрокаДерева = ТекущаяСтрокаДерева; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Возврат СтрокаДерева; + +КонецФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияИндексКартинки.Имя); + + ГруппыОтбораИЛИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппыОтбораИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + Для Каждого ВидВложений Из ВидыВложений Цикл + + ОтборЭлемента = ГруппыОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.Представление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; + ОтборЭлемента.ПравоеЗначение = ВидВложений.Представление; + + КонецЦикла; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияКартинкаВидаВложения.Имя); + + ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.КартинкаВидаВложения"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиПодчиненных(ТекСтрока, ИмяФлажка) + + Подчиненные = ТекСтрока.ПолучитьЭлементы(); + + Если Подчиненные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из Подчиненные Цикл + + Строка[ИмяФлажка] = ТекСтрока[ИмяФлажка]; + + УстановитьПометкиПодчиненных(Строка, ИмяФлажка); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиРодителей(ТекСтрока, ИмяФлажка) + + Родитель = ТекСтрока.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекСостояние = Родитель[ИмяФлажка]; + + НайденыВключенные = Ложь; + НайденыВыключенные = Ложь; + + ВсеВыключены = 0; + ВсеВключены = 1; + НеВсеВключены = 2; + + Для Каждого Строка Из Родитель.ПолучитьЭлементы() Цикл + + Если Строка[ИмяФлажка] = ВсеВыключены Тогда + НайденыВыключенные = Истина; + ИначеЕсли Строка[ИмяФлажка] = ВсеВключены + ИЛИ Строка[ИмяФлажка] = НеВсеВключены Тогда + НайденыВключенные = Истина; + КонецЕсли; + + Если НайденыВключенные И НайденыВыключенные Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если (НайденыВключенные И НайденыВыключенные) + ИЛИ (Не НайденыВключенные И Не НайденыВыключенные) Тогда + Включить = НеВсеВключены; + ИначеЕсли НайденыВключенные И Не НайденыВыключенные Тогда + Включить = ВсеВключены; + Иначе + Включить = ВсеВыключены; + КонецЕсли; + + Если Включить = ТекСостояние Тогда + Возврат; + Иначе + Родитель[ИмяФлажка] = Включить; + УстановитьПометкиРодителей(Родитель, ИмяФлажка); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form index e4f555d61..d5adb8b6b 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Form.form @@ -2121,21 +2121,656 @@ <items xsi:type="form:FormGroup"> <name>ГруппаПечатныеФормыИВложения</name> <id>151</id> - <items xsi:type="form:Decoration"> - <name>ДекорацияПечатныеФормыИВложения</name> - <id>113</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаПечатныеФормыИВложенияКоманды</name> + <id>461</id> + <items xsi:type="form:Decoration"> + <name>ДекорацияПечатныеФормыИВложения</name> + <id>113</id> + <title> + <key>ru</key> + <value>Печатные формы и вложения:</value> + + true + true + + true + + + ДекорацияПечатныеФормыИВложенияРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + ДекорацияПечатныеФормыИВложенияКонтекстноеМеню + 114 + true + + Label + true + true + + Left + + + + КоманднаяПанельПечатныеФормыИВложения + 153 + + ВложенияДобавить + 197 + + <key>ru</key> + <value>Добавить вложение</value> + + true + true + + true + + + ВложенияДобавитьРасширеннаяПодсказка + 198 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + ВложенияСкопироватьВложение + 356 + + <key>ru</key> + <value>Скопировать</value> + + true + true + + true + + + ВложенияСкопироватьВложениеРасширеннаяПодсказка + 357 + Label + true + true + + Left + + + Form.Command.СкопироватьВложение + Normal + Auto + true + true + UserCmds + Auto + + + ВложенияИзменить + 352 + + <key>ru</key> + <value>Изменить</value> + + true + true + + true + + + ВложенияИзменитьРасширеннаяПодсказка + 353 + Label + true + true + + Left + + + Form.Command.ИзменитьВложение + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВложенияУдалить + 199 + true + true + + true + + + ВложенияУдалитьРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаВложенияВывестиСписок + 205 + + ВложенияКопироватьВБуферОбмена + 201 + true + true + + true + + + ВложенияКопироватьВБуферОбменаРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВложенияВывестиСписок + 203 + true + true + + true + + + ВложенияВывестиСписокРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Вложения вывести список</value> + + + ГруппаВложенияВывестиСписокРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Командная панель печатные формы и вложения</value> + + + КоманднаяПанельПечатныеФормыИВложенияРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + CommandBar + + Left + Item.Вложения + + + true + true + + true + <key>ru</key> - <value>Печатные формы и вложения:</value> + <value>Печатные формы и вложения (команды)</value> + + + ГруппаПечатныеФормыИВложенияКомандыРасширеннаяПодсказка + 467 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + Вложения + 89 + + <key>ru</key> + <value>Вложения</value> true true true + + Вложения + + None + CancelSearch + Change + Copy + EndEdit + Find + MoveDown + MoveUp + ShowRowRearrangement + SortListAsc + SortListDesc + Balloon + + ВложенияВыбран + 148 + + <key>ru</key> + <value>Выбрано</value> + + true + true + + true + + + Вложения.Выбрано + + + OnChange + ВложенияВыбранПриИзменении + + + ВложенияВыбранРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + ВложенияВыбранКонтекстноеМеню + 149 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + ВложенияГруппаДанные + 462 + + ВложенияКартинкаВидаВложения + 464 + + <key>ru</key> + <value>Картинка вида вложения</value> + + true + true + + true + + + Вложения.КартинкаВидаВложения + + + ВложенияКартинкаВидаВложенияРасширеннаяПодсказка + 466 + Label + true + true + + Left + + + + ВложенияКартинкаВидаВложенияКонтекстноеМеню + 465 + true + + PictureField + Enter + true + Left + true + + 3 + true + 1 + true + + + 1 + + AsFileRef + + + + ВложенияГруппаПредставление + 249 + + ВложенияИндексКартинки + 246 + + <key>ru</key> + <value>Индекс картинки</value> + + true + true + + true + + + Вложения.ИндексКартинки + + + ВложенияИндексКартинкиРасширеннаяПодсказка + 248 + Label + true + true + + Left + + + + ВложенияИндексКартинкиКонтекстноеМеню + 247 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + + 1 + + + + + ВложенияПредставление + 105 + + <key>ru</key> + <value>Представление</value> + + true + true + + true + + + Вложения.Представление + + None + + ВложенияПредставлениеРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ВложенияПредставлениеКонтекстноеМеню + 106 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Вложения группа представление</value> + + + ВложенияГруппаПредставлениеРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + true + true + + true + + + <key>ru</key> + <value>Вложения группа данные</value> + + + ВложенияГруппаДанныеРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + ВложенияКоманднаяПанель + 91 + Left + + + BeforeAddRow + ВложенияПередНачаломДобавления + + + BeforeDeleteRow + ВложенияПередУдалением + + + OnActivateRow + ВложенияПриАктивизацииСтроки + + + ВложенияСтрокаПоиска + 93 + + ВложенияСтрокаПоискаРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ВложенияСтрокаПоискаКонтекстноеМеню + 94 + true + + Вложения + + true + + + + ВложенияСостояниеПросмотра + 96 + + ВложенияСостояниеПросмотраРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ВложенияСостояниеПросмотраКонтекстноеМеню + 97 + true + + ViewStatusAddition + Вложения + + true + + + + ВложенияУправлениеПоиском + 99 + + ВложенияУправлениеПоискомРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + ВложенияУправлениеПоискомКонтекстноеМеню + 100 + true + + SearchControlAddition + Вложения + + true + + - ДекорацияПечатныеФормыИВложенияРасширеннаяПодсказка - 115 + ВложенияРасширеннаяПодсказка + 92 Label true true @@ -2144,35 +2779,248 @@ - ДекорацияПечатныеФормыИВложенияКонтекстноеМеню - 114 + ВложенияКонтекстноеМеню + 90 + + ВложенияКонтекстноеМенюДобавить + 195 + true + true + + true + + + ВложенияКонтекстноеМенюДобавитьРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + ВложенияКонтекстноеМенюСкопироватьВложение + 354 + + <key>ru</key> + <value>Скопировать</value> + + true + true + + true + + + ВложенияКонтекстноеМенюСкопироватьВложениеРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + Form.Command.СкопироватьВложение + Normal + Auto + true + true + UserCmds + Auto + + + ВложенияКонтекстноеМенюИзменитьВложение + 253 + + <key>ru</key> + <value>Изменить</value> + + true + true + + true + + + ВложенияКонтекстноеМенюИзменитьВложениеРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + Form.Command.ИзменитьВложение + Normal + Auto + true + true + UserCmds + Auto + + + ВложенияКонтекстноеМенюУдалить + 191 + + <key>ru</key> + <value>Пометить на удаление / Снять пометку</value> + + true + true + + true + + + ВложенияКонтекстноеМенюУдалитьРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаВложенияВывестиСписокКонтекстноеМеню + 211 + + ВложенияВывестиСписокКонтекстноеМеню + 213 + true + true + + true + + + ВложенияВывестиСписокКонтекстноеМенюРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВложенияКонтекстноеМенюКопироватьВБуферОбмена + 193 + true + true + + true + + + ВложенияКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + Form.Item.Вложения.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Вложения вывести список контекстное меню</value> + + + ГруппаВложенияВывестиСписокКонтекстноеМенюРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + + true - Label + Tree + true true + 4 true - - Left - + true + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + ExpandAllLevels + true + true + true - КоманднаяПанельПечатныеФормыИВложения - 153 - - ВложенияДобавить - 197 + ГруппаФорматыВложений + 456 + VeryLow + + ФорматВложений + 272 <key>ru</key> - <value>Добавить вложение</value> + <value>Формат печатных форм</value> true true true + + ФорматПечатныхФорм + - ВложенияДобавитьРасширеннаяПодсказка - 198 + ФорматВложенийРасширеннаяПодсказка + 274 Label true true @@ -2180,179 +3028,25 @@ Left - Form.Item.Вложения.StandardCommand.Add - Normal - Auto - true - true - UserCmds - Auto - - - ВложенияСкопироватьВложение - 356 - - <key>ru</key> - <value>Скопировать</value> - - true - true - - true - - - ВложенияСкопироватьВложениеРасширеннаяПодсказка - 357 - Label + + ФорматВложенийКонтекстноеМеню + 273 + true + + LabelField + Enter + true + Left + true + + + Click + ФорматВложенийНажатие + true true - - Left - - - Form.Command.СкопироватьВложение - Normal - Auto - true - true - UserCmds - Auto - - - ВложенияИзменить - 352 - - <key>ru</key> - <value>Изменить</value> - - true - true - - true - - - ВложенияИзменитьРасширеннаяПодсказка - 353 - Label - true - true - - Left - - - Form.Command.ИзменитьВложение - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВложенияУдалить - 199 - true - true - - true - - - ВложенияУдалитьРасширеннаяПодсказка - 200 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаВложенияВывестиСписок - 205 - - ВложенияКопироватьВБуферОбмена - 201 - true - true - - true - - - ВложенияКопироватьВБуферОбменаРасширеннаяПодсказка - 202 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВложенияВывестиСписок - 203 - true - true - - true - - - ВложенияВывестиСписокРасширеннаяПодсказка - 204 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Вложения вывести список</value> - - - ГруппаВложенияВывестиСписокРасширеннаяПодсказка - 206 - Label - true - true - - Left - - - + true + true true @@ -2361,11 +3055,12 @@ <key>ru</key> - <value>Командная панель печатные формы и вложения</value> + <value>Форматы вложений</value> + true - КоманднаяПанельПечатныеФормыИВложенияРасширеннаяПодсказка - 154 + ГруппаФорматыВложенийРасширеннаяПодсказка + 468 Label true true @@ -2373,10 +3068,13 @@ Left - CommandBar - - Left - Item.Вложения + UsualGroup + + Vertical + true + true + Auto + Auto true @@ -2400,575 +3098,17 @@
          UsualGroup - HorizontalIfPossible + Vertical true true Auto Auto
          - - Вложения - 89 - - <key>ru</key> - <value>Вложения</value> - - true - true - - true - - - Вложения - - None - CancelSearch - Change - Copy - EndEdit - Find - MoveDown - MoveUp - ShowRowRearrangement - SortListAsc - SortListDesc - Balloon - - ВложенияВыбран - 148 - - <key>ru</key> - <value>Выбрано</value> - - true - true - - true - - - Вложения.Выбрано - - - OnChange - ВложенияВыбранПриИзменении - - - ВложенияВыбранРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - - ВложенияВыбранКонтекстноеМеню - 149 - true - - CheckBoxField - Auto - true - Left - true - - true - - - - ВложенияГруппаПредставление - 249 - - ВложенияИндексКартинки - 246 - - <key>ru</key> - <value>Индекс картинки</value> - - true - true - - true - - - Вложения.ИндексКартинки - - - ВложенияИндексКартинкиРасширеннаяПодсказка - 248 - Label - true - true - - Left - - - - ВложенияИндексКартинкиКонтекстноеМеню - 247 - true - - PictureField - Auto - true - Left - true - - true - true - true - true - true - - CommonPicture.КоллекцияПиктограммФайлов - - - - 1 - - - - - ВложенияПредставление - 105 - - <key>ru</key> - <value>Представление</value> - - true - true - - true - - - Вложения.Представление - - None - - ВложенияПредставлениеРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - ВложенияПредставлениеКонтекстноеМеню - 106 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вложения группа представление</value> - - - ВложенияГруппаПредставлениеРасширеннаяПодсказка - 250 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ВложенияКоманднаяПанель - 91 - Left - - - BeforeAddRow - ВложенияПередНачаломДобавления - - - BeforeDeleteRow - ВложенияПередУдалением - - - OnActivateRow - ВложенияПриАктивизацииСтроки - - - ВложенияСтрокаПоиска - 93 - - ВложенияСтрокаПоискаРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - - ВложенияСтрокаПоискаКонтекстноеМеню - 94 - true - - Вложения - - true - - - - ВложенияСостояниеПросмотра - 96 - - ВложенияСостояниеПросмотраРасширеннаяПодсказка - 98 - Label - true - true - - Left - - - - ВложенияСостояниеПросмотраКонтекстноеМеню - 97 - true - - ViewStatusAddition - Вложения - - true - - - - ВложенияУправлениеПоиском - 99 - - ВложенияУправлениеПоискомРасширеннаяПодсказка - 101 - Label - true - true - - Left - - - - ВложенияУправлениеПоискомКонтекстноеМеню - 100 - true - - SearchControlAddition - Вложения - - true - - - - ВложенияРасширеннаяПодсказка - 92 - Label - true - true - - Left - - - - ВложенияКонтекстноеМеню - 90 - - ВложенияКонтекстноеМенюДобавить - 195 - true - true - - true - - - ВложенияКонтекстноеМенюДобавитьРасширеннаяПодсказка - 196 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.Add - Normal - Auto - true - true - UserCmds - Auto - - - ВложенияКонтекстноеМенюСкопироватьВложение - 354 - - <key>ru</key> - <value>Скопировать</value> - - true - true - - true - - - ВложенияКонтекстноеМенюСкопироватьВложениеРасширеннаяПодсказка - 355 - Label - true - true - - Left - - - Form.Command.СкопироватьВложение - Normal - Auto - true - true - UserCmds - Auto - - - ВложенияКонтекстноеМенюИзменитьВложение - 253 - - <key>ru</key> - <value>Изменить</value> - - true - true - - true - - - ВложенияКонтекстноеМенюИзменитьВложениеРасширеннаяПодсказка - 254 - Label - true - true - - Left - - - Form.Command.ИзменитьВложение - Normal - Auto - true - true - UserCmds - Auto - - - ВложенияКонтекстноеМенюУдалить - 191 - - <key>ru</key> - <value>Пометить на удаление / Снять пометку</value> - - true - true - - true - - - ВложенияКонтекстноеМенюУдалитьРасширеннаяПодсказка - 192 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаВложенияВывестиСписокКонтекстноеМеню - 211 - - ВложенияВывестиСписокКонтекстноеМеню - 213 - true - true - - true - - - ВложенияВывестиСписокКонтекстноеМенюРасширеннаяПодсказка - 214 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ВложенияКонтекстноеМенюКопироватьВБуферОбмена - 193 - true - true - - true - - - ВложенияКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 194 - Label - true - true - - Left - - - Form.Item.Вложения.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Вложения вывести список контекстное меню</value> - - - ГруппаВложенияВывестиСписокКонтекстноеМенюРасширеннаяПодсказка - 212 - Label - true - true - - Left - - - - - true - - true - true - 4 - true - true - Row - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - Auto - Auto - true - true - true - - ГруппаНастройкиВложений 270 VeryLow - - ФорматВложений - 272 - - <key>ru</key> - <value>Формат печатных форм</value> - - true - true - - true - - - ФорматПечатныхФорм - - - ФорматВложенийРасширеннаяПодсказка - 274 - Label - true - true - - Left - - - - ФорматВложенийКонтекстноеМеню - 273 - true - - LabelField - Enter - true - Left - true - - - Click - ФорматВложенийНажатие - - true - true - true - - УпаковатьВАрхив 275 @@ -3672,7 +3812,7 @@ 6 - ValueTable + ValueTree true @@ -3863,6 +4003,39 @@ true + + КартинкаВидаВложения + + <key>ru</key> + <value>Картинка вида вложения</value> + + 16 + + Picture + + + true + + + true + + + + ИндексВидаВложения + 17 + + Number + + 10 + + + + true + + + true + + ТелоСообщенияОбычныйТекст @@ -3989,6 +4162,22 @@ true + + ВидыВложений + 18 + + ValueList + + + true + + + true + + + + + ПроверитьШаблон diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html index 1dea56325..4e137f87e 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Help/ru.html @@ -14,17 +14,17 @@ </li> <li>Текст сообщения можно форматировать. Основные команды форматирования представлены в виде кнопок над текстовым полем. Все команды форматирования можно найти в меню <strong>Еще</strong>. </li> -<li>С помощью команды меню <b>Еще</b> можно вставить картинку в текст письма. Изменить размер картинки можно дважды кликнув по ней мышью. После этого появляется меню с вводом новых размеров графического изображения. Напишите нужный размер.</li> -<li>В окне <strong>Параметры </strong>в правой части шаблона для вставки формулы представлены различные реквизиты: <strong>Общие</strong>, а также поля выбранного документа. Реквизиты с помощью левой кнопки мыши можно перенести в нужное поле (поле <strong>Тема</strong> или текст сообщения). +<li>С помощью команды меню <b>Еще</b> можно вставить картинку в текст письма. Изменить размер картинки можно дважды кликнув по ней мышью. После этого появляется меню с вводом новых размеров графического изображения. Напишите нужный размер.</li> +<li>В окне <strong>Параметры </strong>в правой части шаблона для вставки формулы представлены различные реквизиты: <strong>Общие</strong>, а также поля выбранного документа. Реквизиты с помощью левой кнопки мыши можно перенести в нужное поле (поле <strong>Тема</strong> или текст сообщения). </li> -<li>К сообщению можно прикрепить вложения с помощью команды <strong>Еще - Добавить</strong> в правой нижней части шаблона. +<li>К сообщению можно прикрепить вложения с помощью команды <strong>Еще - Добавить</strong> в правой нижней части шаблона. </li> -<li>Выбранные форматы печатных форм перечисляются ниже окна <strong>Печатные формы и вложения</strong>. Нажмите на ссылку, для того чтобы изменить список форматов. +<li>Выбранные форматы печатных форм перечисляются ниже окна <strong>Печатные формы и вложения</strong>. Нажмите на ссылку, для того чтобы изменить список форматов. </li> <li>Включите флажок, для того чтобы <strong>Упаковать в архив печатные формы</strong>. </li> <li>Установите доступность данного шаблона: -<ul><li>В поле <strong>Доступен</strong> выберите пользователя из списка. По умолчанию шаблон доступен всем.</li></ul></li> +<ul><li>В поле <strong>Доступен</strong> выберите пользователя из списка. По умолчанию шаблон доступен всем.</li></ul></li> <li>Включите флажок для того, чтобы <strong>Транслитерировать имена файлов</strong>. В этом случае сформированные печатные формы и файлы будут иметь имена, содержащие только латинские буквы и цифры для возможности переноса между различными операционными системами.</li></ul><h3><a name="#2">Шаблон сообщения SMS</a></h3> <ul><li> <div><strong>Наименование</strong> напишите так, чтобы было понятно, как используется шаблон.</div> @@ -45,7 +45,7 @@ </li> <li>Установите доступность данного шаблона: <ul><li> -<div>В поле <strong>Доступен </strong>выберите пользователей из списка, которым будет доступен данный шаблон. По умолчанию шаблон доступен всем.</div></li></ul></li></ul><h3>Выбор способа формирования</h3> +<div>В поле <strong>Доступен </strong>выберите пользователей из списка, которым будет доступен данный шаблон. По умолчанию шаблон доступен всем.</div></li></ul></li></ul><h3>Выбор способа формирования</h3> <ul><li>С помощью команды <strong>Сообщение формируется</strong> меню <strong>Еще</strong> можно выбрать: <ul><li><strong>По шаблону</strong> (выбран по умолчанию); </li> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl index 77be0db3c..146ba4b4d 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/Forms/ФормаЭлемента/Module.bsl @@ -11,8 +11,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьУсловноеОформление(); - ПараметрыСообщения = Параметры.ПараметрыСообщения; Элементы.ПолноеИмяТипаПараметраВводаНаОсновании.СписокВыбора.Добавить(ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(), @@ -28,6 +26,8 @@ Если ЭтоНовыйШаблон Тогда + ПриСозданииЧтенииНаСервере(); + Если Параметры.ЗначениеКопирования = Справочники.ШаблоныСообщений.ПустаяСсылка() Тогда ИнициализироватьНовыйШаблонСообщений(НастройкиШаблоновСообщений); Иначе @@ -44,6 +44,7 @@ КонецЕсли; КонецЕсли; + УстановитьУсловноеОформление(); ОтображениеЭлементовФормы(НастройкиШаблоновСообщений.ФорматПисьма); ИнициализироватьФорматыСохранения(); @@ -71,6 +72,19 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); Элементы.ПодписьИПечать.Видимость = МодульУправлениеПечатью.НастройкиПечати().ИспользоватьПодписиИПечати; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + + ЗаголовокПечатныеФормыИВложения = НСтр("ru = 'Печатные формы, файлы выгрузки и вложения'"); + Элементы.ДекорацияПечатныеФормыИВложения.Заголовок = ЗаголовокПечатныеФормыИВложения; + + ЗаголовокУпаковатьВАрхив = НСтр("ru = 'Упаковать в архив печатные формы и файлы выгрузки'"); + ПодсказкаУпаковатьВАрхив = НСтр("ru = 'Признак того, что вложения - печатные формы и файлы выгрузки должны быть упакованы в архив при отправке.'"); + Элементы.УпаковатьВАрхив.Заголовок = ЗаголовокУпаковатьВАрхив; + Элементы.УпаковатьВАрхив.Подсказка = ПодсказкаУпаковатьВАрхив; + + КонецЕсли; + КонецЕсли; УстановитьТекстШаблона(Объект, СписокВложений); @@ -111,6 +125,7 @@ КонецЦикла; КонецЕсли; + ПриСозданииЧтенииНаСервере(); ЗаполнитьПроизвольныеПараметрыИзОбъекта(ТекущийОбъект); Если ПустаяСтрока(Объект.ПолноеИмяТипаПараметраВводаНаОсновании) Тогда @@ -178,7 +193,7 @@ ЗаполнитьЗначенияСвойств(СписокФорматов.Добавить(), ЭлементСписка); КонецЕсли; КонецЦикла; - ТекущийОбъект.ФорматВложений = Новый ХранилищеЗначения(СписокФорматов); + ТекущийОбъект.ФорматВложений = Новый ХранилищеЗначения(СписокФорматов, Новый СжатиеДанных(9)); ТаблицаСоответствийИменВложенийИдентификаторам = Новый СписокЗначений; СтруктураВложений = Новый Структура; @@ -200,13 +215,24 @@ КонецЕсли; ТекущийОбъект.ПечатныеФормыИВложения.Очистить(); - Для каждого Вложение Из Вложения Цикл - Если Вложение.Выбрано = 1 Тогда - НоваяСтрока = ТекущийОбъект.ПечатныеФормыИВложения.Добавить(); - НоваяСтрока.Идентификатор = Вложение.Идентификатор; - НоваяСтрока.Имя = Вложение.ИмяПараметра; - КонецЕсли; + Для Каждого ВидВложения Из Вложения.ПолучитьЭлементы() Цикл + + ВложенияТекущегоВида = ВидВложения.ПолучитьЭлементы(); + + Для Каждого Вложение Из ВложенияТекущегоВида Цикл + + Если Вложение.Выбрано = 1 Тогда + + НоваяСтрока = ТекущийОбъект.ПечатныеФормыИВложения.Добавить(); + НоваяСтрока.Идентификатор = Вложение.Идентификатор; + НоваяСтрока.Имя = Вложение.ИмяПараметра; + + КонецЕсли; + + КонецЦикла; + КонецЦикла; + Иначе ТекущийОбъект.ТекстШаблонаПроизвольный = ИнформацияОПроверке.ОбычныйТекст; ТекущийОбъект.ФорматВложений = Неопределено; @@ -216,7 +242,7 @@ Для каждого ПараметрШаблона Из Объект.Параметры Цикл НоваяСтрока = ТекущийОбъект.Параметры.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрШаблона); - НоваяСтрока.ТипПараметра = Новый ХранилищеЗначения(ПараметрШаблона.ОписаниеТипа); + НоваяСтрока.ТипПараметра = Новый ХранилищеЗначения(ПараметрШаблона.ОписаниеТипа, Новый СжатиеДанных(9)); КонецЦикла; КонецПроцедуры @@ -324,27 +350,14 @@ СохранитьКартинкиФорматированногоДокументаКакПрисоединенныеФайлы(ТекущийОбъект.Ссылка, ТекущийОбъект.ТипТекстаПисьма, ПараметрыЗаписи.ВложенияHTML, УникальныйИдентификатор); - Индекс = Вложения.Количество() - 1; - Пока Индекс >= 0 Цикл - СтрокаТаблицыВложений = ШаблоныСообщений.СтрокаВложений(Вложения.Получить(Индекс)); - Если СтрокаТаблицыВложений.Статус = "ВнешнийУдаляемый" Тогда - Если Не СтрокаТаблицыВложений.Ссылка.Пустая() Тогда - УдалитьПрисоединенныйФайл(СтрокаТаблицыВложений.Ссылка); - КонецЕсли; - Если ПустаяСтрока(СтрокаТаблицыВложений.Реквизит) Тогда - Вложения.Удалить(Индекс) - Иначе - СтрокаТаблицыВложений.Статус = ""; - СтрокаТаблицыВложений.Выбрано = 2; - КонецЕсли; - ИначеЕсли СтрокаТаблицыВложений.Статус = "ВнешнийНовый" Тогда - ИмяФайла = ?(ПустаяСтрока(СтрокаТаблицыВложений.Реквизит), СтрокаТаблицыВложений.Представление, СтрокаТаблицыВложений.Реквизит); - СсылкаНаФайл = ШаблоныСообщенийСлужебный.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(ТекущийОбъект.Ссылка, СтрокаТаблицыВложений, ИмяФайла, 0); - СтрокаТаблицыВложений.Ссылка = СсылкаНаФайл; - СтрокаТаблицыВложений.Статус ="ВнешнийПрисоединенный"; - КонецЕсли; - Индекс = Индекс - 1; + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + Для Каждого СтрокаДерева Из ДеревоВложений.Строки Цикл + + ОбработатьФайлыВложений(СтрокаДерева, ТекущийОбъект); + КонецЦикла; + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); + КонецПроцедуры &НаСервере @@ -362,6 +375,16 @@ УстановитьТекстШаблона(ТекущийОбъект); + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + + СтрокаДерева = ВеткаПоВидуВложенияНаСервере(ДеревоВложений, ВидыВложений, ВидыВложений[2], Ложь); + Если СтрокаДерева <> Неопределено + И СтрокаДерева.Строки.Количество() = 0 Тогда + ДеревоВложений.Строки.Удалить(СтрокаДерева); + КонецЕсли; + + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); + КонецПроцедуры &НаКлиенте @@ -374,6 +397,10 @@ Объект.ПолноеИмяТипаПараметраВводаНаОсновании = ШаблоныСообщенийКлиентСервер.ИдентификаторОбщий(); КонецЕсли; + Для Каждого СтрокаДерева Из Вложения.ПолучитьЭлементы() Цикл + Элементы.Вложения.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина); + КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -482,24 +509,38 @@ Возврат; КонецЕсли; - Если ТекущиеДанные.Статус = "ПечатнаяФорма" Или ЗначениеЗаполнено(ТекущиеДанные.Реквизит) Тогда + Если КонтекстноеМенюНеДоступно(ТекущиеДанные) Тогда + Элементы.ВложенияКонтекстноеМенюУдалить.Доступность = Ложь; Элементы.ВложенияКонтекстноеМенюИзменитьВложение.Доступность = Ложь; Элементы.ВложенияИзменить.Доступность = Ложь; Элементы.ВложенияУдалить.Доступность = Ложь; Элементы.ВложенияСкопироватьВложение.Доступность = Ложь; Элементы.ВложенияКонтекстноеМенюСкопироватьВложение.Доступность = Ложь; + Иначе + Элементы.ВложенияКонтекстноеМенюУдалить.Доступность = Истина; Элементы.ВложенияКонтекстноеМенюИзменитьВложение.Доступность = Истина; Элементы.ВложенияИзменить.Доступность = Ложь; Элементы.ВложенияУдалить.Доступность = Истина; Элементы.ВложенияСкопироватьВложение.Доступность = Истина; Элементы.ВложенияКонтекстноеМенюСкопироватьВложение.Доступность = Истина; + КонецЕсли; КонецПроцедуры +&НаКлиенте +Функция КонтекстноеМенюНеДоступно(ТекущиеДанные) + + Возврат (ТекущиеДанные.Статус = "ПечатнаяФорма" + ИЛИ ТекущиеДанные.Статус = "МакетВыгрузки" + ИЛИ ЗначениеЗаполнено(ТекущиеДанные.КартинкаВидаВложения) + ИЛИ ЗначениеЗаполнено(ТекущиеДанные.Реквизит)); + +КонецФункции + &НаКлиенте Процедура ВложенияВыбранПриИзменении(Элемент) ТекущиеДанные = Элементы.Вложения.ТекущиеДанные; @@ -520,6 +561,9 @@ КонецЕсли; КонецЕсли; + УстановитьПометкиПодчиненных(ТекущиеДанные, "Выбрано"); + УстановитьПометкиРодителей(ТекущиеДанные, "Выбрано"); + КонецПроцедуры #КонецОбласти @@ -1061,20 +1105,38 @@ ДополнительныеПараметрыФайла.ИдентификаторФормы = УникальныйИдентификатор; ДополнительныеПараметрыФайла.ВызыватьИсключение = Ложь; - Для каждого Вложение Из ВложенияПисьма Цикл - Если ПустаяСтрока(Вложение.ИДФайлаЭлектронногоПисьма) Тогда + Если ВложенияПисьма.Количество() > 0 Тогда + + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + СтрокаДерева = ВеткаПоВидуВложенияНаСервере(ДеревоВложений, ВидыВложений, ВидыВложений[2]); + СтрокиДерева = СтрокаДерева.Строки; + БылиВложения = Ложь; + + Для Каждого Вложение Из ВложенияПисьма Цикл - Расширение = ПолучитьРасширениеФайла(Вложение.Наименование); - НоваяСтрока = Вложения.Добавить(); - НоваяСтрока.Статус = "ВнешнийНовый"; - НоваяСтрока.Выбрано = 1; - НоваяСтрока.Представление = Вложение.Наименование; - НоваяСтрока.Идентификатор = Вложение.Наименование; - НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Расширение); - НоваяСтрока.Имя = МодульРаботаСФайлами.ДанныеФайла(Вложение.Ссылка, - ДополнительныеПараметрыФайла).СсылкаНаДвоичныеДанныеФайла; + Если ПустаяСтрока(Вложение.ИДФайлаЭлектронногоПисьма) Тогда + + БылиВложения = Истина; + + Расширение = ПолучитьРасширениеФайла(Вложение.Наименование); + НоваяСтрока = СтрокиДерева.Добавить(); + НоваяСтрока.Статус = "ВнешнийНовый"; + НоваяСтрока.Выбрано = 1; + НоваяСтрока.Представление = Вложение.Наименование; + НоваяСтрока.Идентификатор = Вложение.Наименование; + НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Расширение); + НоваяСтрока.Имя = МодульРаботаСФайлами.ДанныеФайла(Вложение.Ссылка, + ДополнительныеПараметрыФайла).СсылкаНаДвоичныеДанныеФайла; + + КонецЕсли; + + КонецЦикла; + + Если БылиВложения Тогда + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); КонецЕсли; - КонецЦикла; + + КонецЕсли; Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда @@ -1085,7 +1147,7 @@ Сообщение.Текст = Объект.ТекстШаблонаПисьмаHTML; ШаблоныСообщенийСлужебный.ОбработатьHTMLДляФорматированногоДокумента(ПараметрШаблона, Сообщение, Истина, ВложенияПисьма); СтруктураВложений = Новый Структура(); - Для каждого ВложениеВHTML Из Сообщение.Вложения Цикл + Для Каждого ВложениеВHTML Из Сообщение.Вложения Цикл Изображение = Новый Картинка(ПолучитьИзВременногоХранилища(ВложениеВHTML.АдресВоВременномХранилище)); СтруктураВложений.Вставить(ВложениеВHTML.Представление, Изображение); КонецЦикла; @@ -1228,6 +1290,7 @@ Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда Элементы.ГруппаНастройкиВложений.Видимость = Ложь; + Элементы.ГруппаФорматыВложений.Видимость = Ложь; КонецЕсли; КонецПроцедуры @@ -1306,7 +1369,7 @@ ЗаполнитьДеревоРеквизитов(СписокРеквизитов, СведенияОШаблоне.ОбщиеРеквизиты, Истина); ЗначениеВРеквизитФормы(СписокРеквизитов, "Реквизиты"); - СформироватьСписокПечатныхФорм(СведенияОШаблоне); + СформироватьДеревоВложений(СведенияОШаблоне); КонецПроцедуры @@ -1347,38 +1410,50 @@ КонецПроцедуры &НаСервере -Процедура СформироватьСписокПечатныхФорм(СведенияОШаблоне) +Процедура СформироватьДеревоВложений(СведенияОШаблоне) - ВыбранныеПечатныеФормыИВложения = Объект.ПечатныеФормыИВложения.Выгрузить(, "Идентификатор").ВыгрузитьКолонку("Идентификатор"); + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + ДеревоВложенийКопия = ДеревоВложений.Скопировать(); - Отбор = Новый Структура("Статус", "ВнешнийНовый"); - НесохраненныеФайлы = Вложения.НайтиСтроки(Отбор); - Вложения.Очистить(); + ВыбранныеОбъекты = Объект.ПечатныеФормыИВложения.Выгрузить(, "Идентификатор").ВыгрузитьКолонку("Идентификатор"); - Для каждого Вложение Из СведенияОШаблоне.Вложения Цикл + НесохраненныеФайлы = Новый Массив; // Массив Из СтрокаДереваЗначений + СтрокаДерева = ВеткаПоВидуВложенияНаСервере(ДеревоВложенийКопия, ВидыВложений, ВидыВложений[2], Ложь); + + Если СтрокаДерева <> Неопределено Тогда - Выбрано = 0; - Если ВыбранныеПечатныеФормыИВложения.Найти(Вложение.Идентификатор) <> Неопределено Тогда - Выбрано = 1; - ИначеЕсли ЗначениеЗаполнено(Вложение.Реквизит) Тогда - Выбрано = 2; - КонецЕсли; + Отбор = Новый Структура("Статус", "ВнешнийНовый"); + НесохраненныеФайлы = СтрокаДерева.Строки.НайтиСтроки(Отбор); - НоваяСтрока = Вложения.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Вложение); - Расширение = ?(ПустаяСтрока(Вложение.ТипФайла), "mxl", Вложение.ТипФайла); - НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Расширение); - НоваяСтрока.Выбрано = Выбрано; + КонецЕсли; + + ДеревоВложений.Строки.Очистить(); + + ЗаполнитьДеревоВложений(ДеревоВложений, СведенияОШаблоне.Вложения, ВыбранныеОбъекты); + + Если НесохраненныеФайлы.Количество() > 0 Тогда - КонецЦикла; + СтрокаДереваПрисоединенныеФайлы = ВеткаПоВидуВложенияНаСервере( + ДеревоВложений, + ВидыВложений, + ВидыВложений[2]); + + Для Каждого НесохраненныеФайл Из НесохраненныеФайлы Цикл + + Если ВыбранныеОбъекты.Найти(НесохраненныеФайл.Идентификатор) = Неопределено Тогда + + НоваяСтрока = СтрокаДереваПрисоединенныеФайлы.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, НесохраненныеФайл); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); ЗаполнитьВложения(); - Для каждого НесохраненныеФайл Из НесохраненныеФайлы Цикл - Если ВыбранныеПечатныеФормыИВложения.Найти(НесохраненныеФайл.Идентификатор) = Неопределено Тогда - НоваяСтрока = Вложения.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, НесохраненныеФайл); - КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -1388,7 +1463,7 @@ ПараметрыШаблона = ШаблоныСообщенийСлужебный.ПараметрыШаблона(Объект); СведенияОШаблоне = ШаблоныСообщенийСлужебный.СведенияОШаблоне(ПараметрыШаблона); - СформироватьСписокПечатныхФорм(СведенияОШаблоне); + СформироватьДеревоВложений(СведенияОШаблоне); КонецПроцедуры @@ -1519,11 +1594,14 @@ Возврат; КонецЕсли; + СтрокаДерева = ВеткаПоВидуВложенияНаКлиенте(Вложения, ВидыВложений[2]); + СтрокиДерева = СтрокаДерева.ПолучитьЭлементы(); + Для Каждого ВыбранныйФайл Из ВыбранныеФайлы Цикл Расширение = ПолучитьРасширениеФайла(ВыбранныйФайл.Имя); - НоваяСтрока = Вложения.Добавить(); + НоваяСтрока = СтрокиДерева.Добавить(); НоваяСтрока.Статус = "ВнешнийНовый"; НоваяСтрока.Выбрано = 1; НоваяСтрока.Имя = ВыбранныйФайл.Хранение; @@ -1533,6 +1611,7 @@ КонецЦикла; + Элементы.Вложения.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина); Модифицированность = Истина; КонецПроцедуры @@ -1563,20 +1642,32 @@ #Если Не ВебКлиент Тогда - Для Каждого СтрокаТаблицыВложений Из Вложения Цикл - Если СтрокаТаблицыВложений.Статус = "ВнешнийНовый" Тогда - Попытка + СтрокаДерева = ВеткаПоВидуВложенияНаКлиенте(Вложения, ВидыВложений[2]); + + Если СтрокаДерева <> Неопределено Тогда + + СтрокиДерева = СтрокаДерева.ПолучитьЭлементы(); + + Для Каждого СтрокаТаблицыВложений Из СтрокиДерева Цикл + + Если СтрокаТаблицыВложений.Статус = "ВнешнийНовый" Тогда - Если Не СтрНачинаетсяС(СтрокаТаблицыВложений.Имя, "e1cib") Тогда - Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.Имя); - СтрокаТаблицыВложений.Имя = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор); - КонецЕсли; + Попытка + + Если Не СтрНачинаетсяС(СтрокаТаблицыВложений.Имя, "e1cib") Тогда + Данные = Новый ДвоичныеДанные(СтрокаТаблицыВложений.Имя); + СтрокаТаблицыВложений.Имя = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор); + КонецЕсли; + + Исключение + ОбщегоНазначенияКлиент.СообщитьПользователю(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Вложения",, Отказ); + КонецПопытки; - Исключение - ОбщегоНазначенияКлиент.СообщитьПользователю(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Вложения",, Отказ); - КонецПопытки; - КонецЕсли; - КонецЦикла; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; #КонецЕсли @@ -1645,24 +1736,47 @@ СписокФайлов = Новый Массив; МодульРаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(Объект.Ссылка, СписокФайлов); - Для Каждого СсылкаНаФайл Из СписокФайлов Цикл - СведенияОФайле = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаФайл, "ИДФайлаЭлектронногоПисьма, ИндексКартинки, Наименование, Расширение"); - Если ПустаяСтрока(СведенияОФайле.ИДФайлаЭлектронногоПисьма) Тогда - Отбор = Новый Структура("Реквизит", СведенияОФайле.Наименование); - НайденныеСтроки = Вложения.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() = 0 Тогда - НоваяСтрока = Вложения.Добавить(); - НоваяСтрока.Представление = СведенияОФайле.Наименование + "." + СведенияОФайле.Расширение; - НоваяСтрока.ИндексКартинки = СведенияОФайле.ИндексКартинки; - НоваяСтрока.Ссылка = СсылкаНаФайл; - НоваяСтрока.Статус = "ВнешнийПрисоединенный"; - Иначе - НайденныеСтроки[0].Ссылка = СсылкаНаФайл; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли + Если СписокФайлов.Количество() > 0 Тогда + + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + СтрокаДерева = ВеткаПоВидуВложенияНаСервере( + ДеревоВложений, + ВидыВложений, + ВидыВложений[2]); + + Для Каждого СсылкаНаФайл Из СписокФайлов Цикл + + СведенияОФайле = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + СсылкаНаФайл, + "ИДФайлаЭлектронногоПисьма, ИндексКартинки, Наименование, Расширение"); + + Если ПустаяСтрока(СведенияОФайле.ИДФайлаЭлектронногоПисьма) Тогда + + Отбор = Новый Структура("Реквизит", СведенияОФайле.Наименование); + НайденныеСтроки = СтрокаДерева.Строки.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 Тогда + + НоваяСтрока = СтрокаДерева.Строки.Добавить(); + НоваяСтрока.Представление = СведенияОФайле.Наименование + "." + СведенияОФайле.Расширение; + НоваяСтрока.ИндексКартинки = СведенияОФайле.ИндексКартинки; + НоваяСтрока.Ссылка = СсылкаНаФайл; + НоваяСтрока.Статус = "ВнешнийПрисоединенный"; + + Иначе + НайденныеСтроки[0].Ссылка = СсылкаНаФайл; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); + + КонецЕсли; + + КонецЕсли; + КонецПроцедуры &НаСервере @@ -1675,8 +1789,14 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); МодульРаботаСФайлами.ЗаполнитьПрисоединенныеФайлыКОбъекту(Параметры.ЗначениеКопирования, СписокФайлов); + + ДеревоВложений = РеквизитФормыВЗначение("Вложения"); + СтрокаДерева = Неопределено; + Для каждого Вложение Из СписокФайлов Цикл + Если ПустаяСтрока(Вложение.ИДФайлаЭлектронногоПисьма) Тогда + Попытка ДанныеФайла = МодульРаботаСФайлами.ДанныеФайла(Вложение, УникальныйИдентификатор, Истина); Исключение @@ -1687,14 +1807,24 @@ ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(СписокОшибок, "Вложения", ТекстОшибки, "Вложения",, ТекстОшибки); Продолжить; КонецПопытки; - НоваяСтрока = Вложения.Добавить(); + + Если СтрокаДерева = Неопределено Тогда + СтрокаДерева = ВеткаПоВидуВложенияНаСервере(ДеревоВложений, ВидыВложений, ВидыВложений[2]); + КонецЕсли; + + НоваяСтрока = СтрокаДерева.Строки.Добавить(); НоваяСтрока.Имя = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла; НоваяСтрока.Представление = Вложение.Наименование + "." + Вложение.Расширение; НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Вложение.Расширение); НоваяСтрока.Статус = "ВнешнийНовый"; НоваяСтрока.Идентификатор = Вложение.Описание; + КонецЕсли; + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоВложений, "Вложения"); + КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(СписокОшибок); @@ -1836,37 +1966,83 @@ // Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияВыбран.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ГруппыОтбораИЛИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппыОтбораИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + ГруппыОтбораИ = ГруппыОтбораИЛИ.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппыОтбораИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппыОтбораИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.Статус"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ОтборЭлемента.ПравоеЗначение = "Внешний"; - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + + ОтборЭлемента = ГруппыОтбораИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.Реквизит"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; - + + ОтборЭлемента = ГруппыОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.Представление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; + ОтборЭлемента.ПравоеЗначение = ВидыВложений[2].Представление; + Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - + // - + Элемент = УсловноеОформление.Элементы.Добавить(); - + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияПредставление.Имя); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияВыбран.Имя); - + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.Статус"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ОтборЭлемента.ПравоеЗначение = "ВнешнийУдаляемый"; - + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияИндексКартинки.Имя); + + ГруппыОтбораИЛИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппыОтбораИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + + Для Каждого ВидВложений Из ВидыВложений Цикл + + ОтборЭлемента = ГруппыОтбораИЛИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.Представление"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; + ОтборЭлемента.ПравоеЗначение = ВидВложений.Представление; + + КонецЦикла; + + Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + + // + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВложенияКартинкаВидаВложения.Имя); + + ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Вложения.КартинкаВидаВложения"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + КонецПроцедуры &НаКлиенте @@ -2042,4 +2218,318 @@ КонецПроцедуры +&НаСервере +Процедура ПриСозданииЧтенииНаСервере() + + ВидыВложений.Очистить(); + ВидыВложений.Добавить("ПечатныеФормы", НСтр("ru = 'Печатные формы'")); + ВидыВложений.Добавить("ФайлыВыгрузки", НСтр("ru = 'Файлы выгрузки'")); + ВидыВложений.Добавить("ПрикрепленныеФайлы", НСтр("ru = 'Вложения'")); + +КонецПроцедуры + +// Заполнить дерево вложений. +// +// Параметры: +// ДеревоВложений - ДеревоЗначений +// СведенияОШаблонеВложения - ТаблицаЗначений: +// * Имя - Строка +// * Идентификатор - Строка +// * Представление - Строка +// * МенеджерПечати - Строка +// * ПараметрыПечати - Структура +// * ТипФайла - Строка +// * Статус - Строка +// * Реквизит - Строка +// * ИмяПараметра - Строка +// ВыбранныеОбъекты - Массив из Строка +// +&НаСервере +Процедура ЗаполнитьДеревоВложений(ДеревоВложений, СведенияОШаблонеВложения, ВыбранныеОбъекты) + + Если СведенияОШаблонеВложения.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + МассивСтрокПечатныхФорм = Новый Массив; // СтрокаТаблицыЗначений + МассивСтрокФайловВыгрузки = Новый Массив; // СтрокаТаблицыЗначений + МассивСтрокПрисоединенныхФайлов = Новый Массив; // СтрокаТаблицыЗначений + + Для Каждого Вложение Из СведенияОШаблонеВложения Цикл + + Если Вложение.Статус = "ПечатнаяФорма" Тогда + МассивСтрокПечатныхФорм.Добавить(Вложение); + ИначеЕсли Вложение.Статус = "МакетВыгрузки" Тогда + МассивСтрокФайловВыгрузки.Добавить(Вложение); + Иначе + МассивСтрокПрисоединенныхФайлов.Добавить(Вложение); + КонецЕсли; + + КонецЦикла; + + ДобавитьВеткуВложений(ДеревоВложений, МассивСтрокПечатныхФорм, ВыбранныеОбъекты, ВидыВложений[0]); + ДобавитьВеткуВложений(ДеревоВложений, МассивСтрокФайловВыгрузки, ВыбранныеОбъекты, ВидыВложений[1]); + ДобавитьВеткуВложений( + ДеревоВложений, + МассивСтрокПрисоединенныхФайлов, + ВыбранныеОбъекты, + ВидыВложений[2]); + +КонецПроцедуры + +// Добавить ветку вложений. +// +// Параметры: +// ДеревоВложений - ДеревоЗначений +// МассивСтрок - Массив из СтрокаТаблицыЗначений +// ВыбранныеОбъекты - Массив из Строка +// ВидВложений - ЭлементСпискаЗначений - вид вложений +// +&НаСервере +Процедура ДобавитьВеткуВложений(ДеревоВложений, МассивСтрок, ВыбранныеОбъекты, ВидВложений) + + Если МассивСтрок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаДерева = ВеткаПоВидуВложенияНаСервере( + ДеревоВложений, + ВидыВложений, + ВидВложений); + + ВыбраныВсе = Ложь; + + Для Каждого Вложение Из МассивСтрок Цикл + + Выбрано = 0; + Если ВыбранныеОбъекты.Найти(Вложение.Идентификатор) <> Неопределено Тогда + Выбрано = 1; + ИначеЕсли ЗначениеЗаполнено(Вложение.Реквизит) Тогда + Выбрано = 2; + КонецЕсли; + + Если Выбрано <> 0 Тогда + СтрокаДерева.Выбрано = 2; + КонецЕсли; + ВыбраныВсе = Мин(ВыбраныВсе, Выбрано); + НоваяСтрока = СтрокаДерева.Строки.Добавить(); + + ЗаполнитьЗначенияСвойств(НоваяСтрока, Вложение); + Расширение = ?(ПустаяСтрока(Вложение.ТипФайла), "mxl", Вложение.ТипФайла); + НоваяСтрока.ИндексКартинки = ПолучитьИндексПиктограммыФайла(Расширение); + НоваяСтрока.Выбрано = Выбрано; + + КонецЦикла; + + Если ВыбраныВсе Тогда + СтрокаДерева.Выбрано = 1; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ВеткаПоВидуВложенияНаКлиенте(ДеревоВложений, ВидВложений, СоздаватьВетку = Истина) + + ИндексыВидаВложения = СоответствиеИндексаВидуВложения(ВидыВложений); + ИндексВидаВложения = ИндексыВидаВложения[ВидВложений]; + Представление = ВидВложений.Представление; + СтрокаДерева = Неопределено; + + СтрокиДерева = ДеревоВложений.ПолучитьЭлементы(); + Для Каждого ТекущаяСтрокаДерева Из СтрокиДерева Цикл + + Если ТекущаяСтрокаДерева.ИндексВидаВложения = ИндексВидаВложения Тогда + + СтрокаДерева = ТекущаяСтрокаДерева; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если СтрокаДерева = Неопределено + И СоздаватьВетку Тогда + + КартинкиВидаВложения = СоответствиеКартинкиВидуВложения(ВидыВложений); + СтрокаДерева = СтрокиДерева.Добавить(); + СтрокаДерева.Представление = Представление; + СтрокаДерева.КартинкаВидаВложения = КартинкиВидаВложения[ВидВложений]; + СтрокаДерева.ИндексВидаВложения = ИндексВидаВложения; + + КонецЕсли; + + Возврат СтрокаДерева; + +КонецФункции + +&НаСервереБезКонтекста +Функция ВеткаПоВидуВложенияНаСервере(ДеревоВложений, ВидыВложений, ВидВложений, СоздаватьВетку = Истина) + + ИндексыВидаВложения = СоответствиеИндексаВидуВложения(ВидыВложений); + ИндексВидаВложения = ИндексыВидаВложения[ВидВложений]; + Представление = ВидВложений.Представление; + + СтрокаДерева = ДеревоВложений.Строки.Найти(ИндексВидаВложения, "ИндексВидаВложения"); + Если СтрокаДерева = Неопределено + И СоздаватьВетку Тогда + + КартинкиВидаВложения = СоответствиеКартинкиВидуВложения(ВидыВложений); + СтрокаДерева = ДеревоВложений.Строки.Добавить(); + СтрокаДерева.Представление = Представление; + СтрокаДерева.КартинкаВидаВложения = КартинкиВидаВложения[ВидВложений]; + СтрокаДерева.ИндексВидаВложения = ИндексВидаВложения; + + КонецЕсли; + + Возврат СтрокаДерева; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция СоответствиеКартинкиВидуВложения(ВидыВложений) + + КартинкиВидаВложения = Новый Соответствие; + КартинкиВидаВложения.Вставить(ВидыВложений[0], БиблиотекаКартинок.Печать); + КартинкиВидаВложения.Вставить(ВидыВложений[1], БиблиотекаКартинок.СохранитьФайлКак); + КартинкиВидаВложения.Вставить(ВидыВложений[2], БиблиотекаКартинок.Скрепка); + + Возврат КартинкиВидаВложения; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция СоответствиеИндексаВидуВложения(ВидыВложений) + + ИндексыВидаВложения = Новый Соответствие; + + Для Сч = 0 По ВидыВложений.Количество() - 1 Цикл + + ИндексыВидаВложения.Вставить(ВидыВложений[Сч], Сч); + + КонецЦикла; + + Возврат ИндексыВидаВложения; + +КонецФункции + +&НаСервере +Процедура ОбработатьФайлыВложений(СтрокаВложений, ТекущийОбъект) + + МассивСтрокКУдалению = Новый Массив; + Для Каждого СтрокаТаблицыВложений Из СтрокаВложений.Строки Цикл + + Если СтрокаТаблицыВложений.Статус = "ВнешнийУдаляемый" Тогда + Если Не СтрокаТаблицыВложений.Ссылка.Пустая() Тогда + УдалитьПрисоединенныйФайл(СтрокаТаблицыВложений.Ссылка); + КонецЕсли; + Если ПустаяСтрока(СтрокаТаблицыВложений.Реквизит) Тогда + + МассивСтрокКУдалению.Добавить(СтрокаТаблицыВложений); + + Иначе + + СтрокаТаблицыВложений.Статус = ""; + СтрокаТаблицыВложений.Выбрано = 2; + + КонецЕсли; + + ИначеЕсли СтрокаТаблицыВложений.Статус = "ВнешнийНовый" Тогда + + Если ПустаяСтрока(СтрокаТаблицыВложений.Реквизит) Тогда + ИмяФайла = СтрокаТаблицыВложений.Представление; + Иначе + ИмяФайла = СтрокаТаблицыВложений.Реквизит; + КонецЕсли; + + СсылкаНаФайл = ШаблоныСообщенийСлужебный.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища( + ТекущийОбъект.Ссылка, + СтрокаТаблицыВложений, + ИмяФайла, + 0); + СтрокаТаблицыВложений.Ссылка = СсылкаНаФайл; + СтрокаТаблицыВложений.Статус = "ВнешнийПрисоединенный"; + + КонецЕсли; + + ОбработатьФайлыВложений(СтрокаТаблицыВложений, ТекущийОбъект); + + КонецЦикла; + + Для Каждого СтрокаМассива Из МассивСтрокКУдалению Цикл + + СтрокаВложений.Строки.Удалить(СтрокаМассива); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиПодчиненных(ТекСтрока, ИмяФлажка) + + Подчиненные = ТекСтрока.ПолучитьЭлементы(); + + Если Подчиненные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из Подчиненные Цикл + + Строка[ИмяФлажка] = ТекСтрока[ИмяФлажка]; + + УстановитьПометкиПодчиненных(Строка, ИмяФлажка); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиРодителей(ТекСтрока, ИмяФлажка) + + Родитель = ТекСтрока.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекСостояние = Родитель[ИмяФлажка]; + + НайденыВключенные = Ложь; + НайденыВыключенные = Ложь; + + ВсеВыключены = 0; + ВсеВключены = 1; + НеВсеВключены = 2; + + Для Каждого Строка Из Родитель.ПолучитьЭлементы() Цикл + + Если Строка[ИмяФлажка] = ВсеВыключены Тогда + НайденыВыключенные = Истина; + ИначеЕсли Строка[ИмяФлажка] = ВсеВключены + ИЛИ Строка[ИмяФлажка] = НеВсеВключены Тогда + НайденыВключенные = Истина; + КонецЕсли; + + Если НайденыВключенные И НайденыВыключенные Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если (НайденыВключенные И НайденыВыключенные) + ИЛИ (Не НайденыВключенные И Не НайденыВыключенные) Тогда + Включить = НеВсеВключены; + ИначеЕсли НайденыВключенные И Не НайденыВыключенные Тогда + Включить = ВсеВключены; + Иначе + Включить = ВсеВыключены; + КонецЕсли; + + Если Включить = ТекСостояние Тогда + Возврат; + Иначе + Родитель[ИмяФлажка] = Включить; + УстановитьПометкиРодителей(Родитель, ИмяФлажка); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/ШаблоныСообщений/Help/ru.html b/SSL/src/Catalogs/ШаблоныСообщений/Help/ru.html index 279182db4..b5cd8159a 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/Help/ru.html +++ b/SSL/src/Catalogs/ШаблоныСообщений/Help/ru.html @@ -4,7 +4,7 @@ <h3>Отборы списка</h3> <ul><li>Для удобства поиска шаблонов в списке предусмотрены отборы. </li> -<li>Можно отобрать с помощью поля <strong>Шаблон для</strong>: +<li>Можно отобрать с помощью поля <strong>Шаблон для</strong>: <ul><li><strong>Всех сообщений</strong>; </li> <li><strong>Электронного письма</strong>; @@ -13,9 +13,9 @@ <li>В поле <strong>Назначение</strong> можно отобрать шаблоны: <ul><li><strong>Все</strong>; </li> -<li><strong>Общий</strong> - в приложении имеется возможность сделать шаблон для любого сообщения; +<li><strong>Общий</strong> - в приложении имеется возможность сделать шаблон для любого сообщения; </li> -<li>Можно выбрать конкретный вид шаблона, предназначенный для соответствующего вида документов.</li></ul></li></ul><h3>Ввод нового шаблона</h3> +<li>Можно выбрать конкретный вид шаблона, предназначенный для соответствующего вида документов.</li></ul></li></ul><h3>Ввод нового шаблона</h3> <ul><li>Нажмите кнопку <strong>Создать шаблон</strong>, выберите вид <a href="Catalog.ШаблоныСообщений.Form.ФормаЭлемента/Help">шаблона</a> из выпадающего списка: <ul><li><strong>Электронного письма</strong>; </li> diff --git a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl index cd99d55cd..351ea1274 100644 --- a/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl +++ b/SSL/src/Catalogs/ШаблоныСообщений/ObjectModule.bsl @@ -67,7 +67,7 @@ ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыШаблона, ДанныеЗаполнения, Истина); ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПараметрыШаблона); - ФорматВложений = Новый ХранилищеЗначения(ПараметрыШаблона.ФорматыВложений); + ФорматВложений = Новый ХранилищеЗначения(ПараметрыШаблона.ФорматыВложений, Новый СжатиеДанных(9)); Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") И ДанныеЗаполнения.Свойство("ПредназначенДляSMS") diff --git a/SSL/src/Catalogs/ЭкземплярыСервераDSS/Help/ru.html b/SSL/src/Catalogs/ЭкземплярыСервераDSS/Help/ru.html index 0ca092892..ae93ed03b 100644 --- a/SSL/src/Catalogs/ЭкземплярыСервераDSS/Help/ru.html +++ b/SSL/src/Catalogs/ЭкземплярыСервераDSS/Help/ru.html @@ -1,19 +1,19 @@ <!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 style="margin-top: 0cm;"><span style="font-family: Verdana; font-size: 7.5pt;">Предназначен для хранения настроек подключения -к серверам DSS (КриптоПро </span><span lang="EN-US" style="font-family: Verdana; font-size: 7.5pt;">DSS</span><span style="font-family: Verdana; font-size: 7.5pt;">)<o:p></o:p></span></p> +<p>Предназначен для хранения настроек подключения +к серверам DSS (КриптоПро DSS)</p> -<p style="margin-top: 0cm;"><span style="font-family: Verdana; font-size: 7.5pt;"> В справочнике отражается информация о серверах DSS на базе КриптоПро </span><span lang="EN-US" style="font-family: Verdana; font-size: 7.5pt;">DSS,</span><span style="font-family: Verdana; font-size: 7.5pt;"> предоставляемый -провайдером. Данный сервис позволяет хранить сертификаты и закрытые ключи к ним. С помощью сертификатов пользователь может задействовать функции +<p> В справочнике отражается информация о серверах DSS на базе КриптоПро DSS, предоставляемый +провайдером. Данный сервис позволяет хранить сертификаты и закрытые ключи к ним. С помощью сертификатов пользователь может задействовать функции подписания, шифрования, расшифровки данных практически с любого компьютера. Для использования этого функционала не требуется установки криптопровайдеров и сертификатов на локальный компьютер, достаточно предоставить данные для -авторизации на настроенном сервисе.<o:p></o:p></span></p> +авторизации на настроенном сервисе.</p> -<p class="MsoNormal" style="margin-bottom: 6pt;"><span style="font-family: Verdana; font-size: 7.5pt;"> К каждому серверу DSS +<p> К каждому серверу DSS привязываются реестр учетных записей этого сервиса, указываемые в справочнике -«Учетные записи DSS»<o:p></o:p></span></p> +«Учетные записи DSS»</p> -<p class="MsoNormal"><o:p> </o:p></p> +<p> </p> </body></html> \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html index 9480df4c2..70795cd06 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> <p>Предназначен для выбора <a href="ChartOfCharacteristicTypes.ВопросыДляАнкетирования/Help">вопросов</a>.</p> -<p>Открывается при выборе вопроса по команде <strong>Добавить - простой вопрос</strong> в <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблоне анкеты</a> или в <a href="Catalog.ШаблоныАнкет.Form.ФормаМастераТабличныхВопросов/Help">Помощнике создания табличных вопросов</a>.</p> +<p>Открывается при выборе вопроса по команде <strong>Добавить - простой вопрос</strong> в <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблоне анкеты</a> или в <a href="Catalog.ШаблоныАнкет.Form.ФормаМастераТабличныхВопросов/Help">Помощнике создания табличных вопросов</a>.</p> <p>Одним из важных этапов подготовки <a href="Document.Анкета.Form.ФормаСписка/Help">анкет</a> является составление вопросов. </p> <p>В общем списке содержатся вопросы, которые могут быть включены в любую <a href="Document.Анкета.Form.ФормаДокумента/Help">анкету</a>. Эти вопросы называются элементарными, т.к. могут использоваться в качестве элементов более сложных конструкций.</p> <p>В списке выводится:</p> @@ -13,5 +13,5 @@ <ul><li>Для того чтобы добавить в список отсутствующий вопрос, нажмите <strong>Создать</strong>, заполните необходимые <a href="ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>Группировка вопросов</h3> <ul><li>Вопросы в списке можно группировать, например, по темам анкет. </li><li>Нажмите <strong>Создать группу</strong>, введите <strong>Наименование группы</strong>. Можно подчинить эту группу одной из имеющихся. Для этого в поле <strong>Родитель</strong> выберите группу из списка. -</li><li>Введите необходимое количество групп. Перетащите вопросы в соответствующие группы или введите вопросы в выбранную группу.</li></ul><h3>См. также:</h3> +</li><li>Введите необходимое количество групп. Перетащите вопросы в соответствующие группы или введите вопросы в выбранную группу.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html index 17a3ca95d..6b4bf4a5e 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html @@ -5,27 +5,27 @@ <h3>Ввод вопроса</h3> <ul><li>В поле <strong>Наименование</strong> введите краткое представление вопроса, которое выводится при подборе вопросов в <a href="Catalog.ШаблоныАнкет/Help">шаблоны анкет</a>. </li> -<li>Для того чтобы поместить вопрос в одну из групп, в поле <strong>Группа вопросов</strong> выберите группу из списка. +<li>Для того чтобы поместить вопрос в одну из групп, в поле <strong>Группа вопросов</strong> выберите группу из списка. </li> <li>В поле <strong>Формулировка</strong> можно ввести развернутый текст вопроса, который будет затем выведен в соответствующее поле <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблона анкеты</a>. По умолчанию, текст автоматически подставляется из поля <strong>Наименование</strong>. </li> <li>Содержание и формы ответов респондента зависят от значения поля <strong>Тип ответа</strong>, которое может быть одним из следующих: <ul><li><strong>Строка</strong> - в этом случае от респондента требуется ввести ответ в виде текстовой строки, -<ul><li>В поле <strong>Длина строки </strong>задайте<strong> </strong>ограничение по количеству символов строки. Поле является обязательным.</li></ul></li> +<ul><li>В поле <strong>Длина строки </strong>задайте<strong> </strong>ограничение по количеству символов строки. Поле является обязательным.</li></ul></li> <li><strong>Текст </strong>- ответ вводится респондентов в текстовом поле длиной до 1024 символов. Длинный ответ можно ввести в отдельном окне. </li> <li><strong>Число</strong> - при ответе на вопрос этого типа респондент вводит число. -<ul><li>В поле <strong>Длина</strong> задайте количество знаков числа. Поле является обязательным. +<ul><li>В поле <strong>Длина</strong> задайте количество знаков числа. Поле является обязательным. </li> -<li>В поле <strong>Точность</strong> задайте количество знаков после запятой. По умолчанию равна 0. +<li>В поле <strong>Точность</strong> задайте количество знаков после запятой. По умолчанию равна 0. </li> -<li>Можно задать <strong>Минимальное</strong> и <strong>Максимальное значение</strong> числа. При попытке ввода респондентом числа, которое не удовлетворяет ограничению, указанного в полях <strong>Минимальное значение</strong> и <strong>Максимальное значение</strong>, будет выдано предупреждение о вводе некорректных данных. +<li>Можно задать <strong>Минимальное</strong> и <strong>Максимальное значение</strong> числа. При попытке ввода респондентом числа, которое не удовлетворяет ограничению, указанного в полях <strong>Минимальное значение</strong> и <strong>Максимальное значение</strong>, будет выдано предупреждение о вводе некорректных данных. </li> -<li>Включите флажок <strong>Показывать полосу регулирования с шагом<span style="font-weight: normal;">, для того чтобы ввести значения с помощью полосы регулирования. Шаг полосы регулирования числовых вопросов должен быть кратным разнице максимального и минимального значения. </span> </strong> +<li>Включите флажок <strong>Показывать полосу регулирования с шагом, для того чтобы ввести значения с помощью полосы регулирования. Шаг полосы регулирования числовых вопросов должен быть кратным разнице максимального и минимального значения. </strong> </li> <li>Включите флажок <strong>Агрегировать сумму в отчетах</strong>, для того чтобы в отчете <strong>Анализ опроса</strong> выводилась общая сумма по всем анкетам, в которых заполнен ответ на этот вопрос. </li> -<li>Включите флажок <strong>Выводить подсказку</strong>, для того чтобы отобразить подсказку-расшифровку у вариантов ответов в поле комментарии к вопросу. С помощью кнопки <strong>Добавить </strong>можно задавать интервалы с подсказками. </li></ul></li> +<li>Включите флажок <strong>Выводить подсказку</strong>, для того чтобы отобразить подсказку-расшифровку у вариантов ответов в поле комментарии к вопросу. С помощью кнопки <strong>Добавить </strong>можно задавать интервалы с подсказками. </li></ul></li> <li><strong>Дата</strong> - при ответе на вопрос этого типа респондент вводит дату. </li> <li><strong>Булево</strong> - респонденту доступен выбор одного из двух значений: <strong>Да</strong> или <strong>Нет</strong>. @@ -36,9 +36,9 @@ </li> <li><strong>Тумблер</strong>.</li></ul></li></ul></li> <li><strong>Выбор нескольких вариантов ответа из предложенных</strong> - респондент может отметить произвольное количество <a href="Catalog.ВариантыОтветовАнкет/Help">вариантов ответа</a> с помощью флажков. Возможные варианты ответов составитель может задать в списке. Также выводится поле с подсказкой, для каждого варианта ответа в анкете будет отображаться соответствующий переключатель с подсказкой. -<ul><li>Если в списке у варианта ответа установить флажок <strong>Требует открытого ответа</strong>, то респонденту будет предложено дать развернутый ответ в текстовом поле под вариантами ответа, прокомментировав таким образом свой выбор.</li></ul></li> -<li>Помимо перечисленных типов ответов, также имеется возможность выбрать в качестве типа ответа один из некоторых списков приложения. В этом случае респондент будет выбирать в качестве ответа на вопрос элемент списка приложения.</li></ul></li> -<li>Включение флажка <strong>Попросить респондента прокомментировать ответ, пояснив характер комментария</strong> на этапе подготовки вопроса позволит респонденту при заполнении анкеты в текстовом поле рядом с ответом разъяснить свой ответ. +<ul><li>Если в списке у варианта ответа установить флажок <strong>Требует открытого ответа</strong>, то респонденту будет предложено дать развернутый ответ в текстовом поле под вариантами ответа, прокомментировав таким образом свой выбор.</li></ul></li> +<li>Помимо перечисленных типов ответов, также имеется возможность выбрать в качестве типа ответа один из некоторых списков приложения. В этом случае респондент будет выбирать в качестве ответа на вопрос элемент списка приложения.</li></ul></li> +<li>Включение флажка <strong>Попросить респондента прокомментировать ответ, пояснив характер комментария</strong> на этапе подготовки вопроса позволит респонденту при заполнении анкеты в текстовом поле рядом с ответом разъяснить свой ответ. <ul><li>В случае установки флажка в поле ниже нужно указать текст, который будет выводиться в текстовым полем разъяснения респондента. Поле является обязательным. </li> <li>Флажок <strong>Попросить респондента прокомментировать ответ, пояснив характер комментария</strong> недоступен при выборе типа ответа <strong>Текст</strong> и <strong>Выбор нескольких вариантов ответа из предложенных</strong>. В ответе типа <strong>Текст</strong> и так можно дать развернутый ответ. Для ответа типа <strong>Выбор нескольких вариантов ответа из предложенных</strong> при необходимости предусмотрен вывод поля с комментарием для каждого варианта ответа.</li></ul></li></ul><h3>См. также:</h3> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html index 105f0909e..8ed3e7b64 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> -<p>Подготовка вопросов для анкетирования.</p> +<p>Подготовка вопросов для анкетирования.</p> <p>Открывается по команде <strong>Вопросы для анкетирования</strong> в разделе <strong>Анкетирование</strong>.</p> <p>Одним из важных этапов подготовки <a href="Document.Анкета.Form.ФормаСписка/Help">анкет</a> является составление вопросов. </p> <p>В общем списке содержатся вопросы, которые могут быть включены в любую <a href="Document.Анкета.Form.ФормаДокумента/Help">анкету</a>. Эти вопросы называются элементарными, т.к. могут использоваться в качестве элементов более сложных конструкций.</p> @@ -10,5 +10,5 @@ <ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="ChartOfCharacteristicTypes.ВопросыДляАнкетирования.Form.ФормаЭлемента/Help">поля</a>.</li></ul><h3>Группировка вопросов</h3> <ul><li>Вопросы в списке можно группировать, например, по темам анкет. </li><li>Нажмите <strong>Создать группу</strong>, введите <strong>Наименование группы</strong>. Можно подчинить эту группу одной из имеющихся. Для этого в поле <strong>Родитель</strong> выберите группу из списка. -</li><li>Введите необходимое количество групп. Перетащите вопросы в соответствующие группы или введите вопросы в выбранную группу.</li></ul><h3>См. также:</h3> +</li><li>Введите необходимое количество групп. Перетащите вопросы в соответствующие группы или введите вопросы в выбранную группу.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Help/ru.html index 7cd5a6623..9d86e3c24 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Help/ru.html @@ -3,6 +3,6 @@ <p>Для общих дополнительных реквизитов данная настройка недоступна.</p> <p>Для ввода новых условий нажмите кнопку <strong>Добавить условие</strong>. </p> <p>Таблица для ввода условий состоит из колонок:</p> -<ul><li>выберите <strong>Реквизит </strong>из списка с помощью кнопки <img src="StdPicture.InputFieldSelect" width="12" height="12"></img>; +<ul><li>выберите <strong>Реквизит </strong>из списка с помощью кнопки <img src="StdPicture.InputFieldSelect" width="12" height="12"></img>; </li><li>выберите <strong>Вид сравнения</strong>; -</li><li>выберите из списка или напишите нужное <strong>Значение</strong> (в зависимости от выбранного реквизита способ указания значения может меняться).</li></ul><p>Если условие не устраивает, уберите его из таблицы с помощью кнопки <strong>Удалить условие</strong>.</p></body></html> \ No newline at end of file +</li><li>выберите из списка или напишите нужное <strong>Значение</strong> (в зависимости от выбранного реквизита способ указания значения может меняться).</li></ul><p>Если условие не устраивает, уберите его из таблицы с помощью кнопки <strong>Удалить условие</strong>.</p></body></html> \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl index b52eeb819..47d08372b 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl @@ -253,7 +253,7 @@ ПараметрОтбора.Условие = "НеВСписке"; ПреобразоватьЗависимостиВСписке(КопияТаблицы, ПараметрОтбора); - Возврат Новый ХранилищеЗначения(КопияТаблицы); + Возврат Новый ХранилищеЗначения(КопияТаблицы, Новый СжатиеДанных(9)); КонецФункции diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index 4c341112d..5cb0d62b7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -1373,18 +1373,18 @@ </extInfo> </items> <items xsi:type="form:FormField"> - <name>ВидСвойств</name> + <name>ВидСвойства</name> <id>20</id> <title> <key>ru</key> - <value>Вид свойств</value> + <value>Вид свойства</value> true true - ВидСвойств + ВидСвойства None @@ -1392,7 +1392,7 @@ ВидСвойствПриИзменении - ВидСвойствРасширеннаяПодсказка + ВидСвойстваРасширеннаяПодсказка 119 Label true @@ -1402,7 +1402,7 @@ - ВидСвойствКонтекстноеМеню + ВидСвойстваКонтекстноеМеню 21 true @@ -1993,7 +1993,7 @@ ГруппаЦветаСвойств 498 - ДекорацияЦветСвойств + ДекорацияЦветСвойства 500 <key>ru</key> @@ -2006,7 +2006,7 @@ </userVisible> <toolTipRepresentation>ShowLeft</toolTipRepresentation> <extendedTooltip> - <name>ДекорацияЦветСвойствРасширеннаяПодсказка</name> + <name>ДекорацияЦветСвойстваРасширеннаяПодсказка</name> <id>502</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -2016,7 +2016,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекорацияЦветСвойствКонтекстноеМеню</name> + <name>ДекорацияЦветСвойстваКонтекстноеМеню</name> <id>501</id> <autoFill>true</autoFill> </contextMenu> @@ -5068,10 +5068,10 @@ <savedData>true</savedData> </attributes> <attributes> - <name>ВидСвойств</name> + <name>ВидСвойства</name> <title> <key>ru</key> - <value>Вид свойств</value> + <value>Вид свойства</value> 3 @@ -5482,19 +5482,19 @@ ВЫБОР КОГДА Наборы.ЭтоГруппа ТОГДА Наборы.Наименование - КОГДА &ВидСвойств = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ДополнительныеСведения) + КОГДА &ВидСвойства = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ДополнительныеСведения) ТОГДА ВЫБОР КОГДА Наборы.КоличествоСведений = "" ТОГДА Наборы.Наименование ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" КОНЕЦ - КОГДА &ВидСвойств = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ДополнительныеРеквизиты) + КОГДА &ВидСвойства = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ДополнительныеРеквизиты) ТОГДА ВЫБОР КОГДА Наборы.КоличествоРеквизитов = "" ТОГДА Наборы.Наименование ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" КОНЕЦ - КОГДА &ВидСвойств = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) + КОГДА &ВидСвойства = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) ТОГДА ВЫБОР КОГДА Наборы.КоличествоМеток = "" ТОГДА Наборы.Наименование @@ -5623,6 +5623,10 @@
          + + ОтредактированныеПредопределенныеРеквизиты + ОтредактированныеПредопределенныеРеквизиты + ИсключаемыеНаборы @@ -5650,12 +5654,12 @@ <valueListAllowed>true</valueListAllowed> </parameters> <parameters> - <name>ВидСвойств</name> + <name>ВидСвойства</name> <title> <localValue> <content> <key>ru</key> - <value>Вид свойств</value> + <value>Вид свойства</value> </content> </localValue> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html index 6d7d1bad1..ae3ced030 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html @@ -1,22 +1,22 @@

          Предназначена для настройки свойств.

          -

          Открывается по команде Добавить или Создать в списке Свойств.

          +

          Открывается по команде Добавить или Создать в списке Свойств.

          Назначение нового свойства справочнику или документу

          • В зависимости от настройки может быть доступна одна из команд ввода новых свойств: -
            • Выберите соответствующий этому справочнику или документу набор, нажмите Создать. По умолчанию свойство может быть добавлено только в один набор. +
              • Выберите соответствующий этому справочнику или документу набор, нажмите Создать. По умолчанию свойство может быть добавлено только в один набор.
              • -
              • Выберите соответствующий этому справочнику или документу набор, нажмите Добавить - Новый (Новое) - аналогична команде Создать. С помощью этой команды свойство может быть добавлено только в один набор.

            Заполните необходимые поля:

            -
            • Напишите краткое Наименование свойства, которое будет указываться в окнах объектов приложения. Ограничение длины Наименования меток составляет 15 символов. 
            • +
            • Выберите соответствующий этому справочнику или документу набор, нажмите Добавить - Новый (Новое) - аналогична команде Создать. С помощью этой команды свойство может быть добавлено только в один набор.

          Заполните необходимые поля:

          +
          • Напишите краткое Наименование свойства, которое будет указываться в окнах объектов приложения. Ограничение длины Наименования меток составляет 15 символов.
          • Только для меток: выберите нужный Цвет, нажав на цветной значок-метку.
          • Для того чтобы дополнительный реквизит при заполнении справочников или документов не оставался пустым, включите флажок Заполнять обязательно. Для дополнительных сведений и меток флажок не предусмотрен.
          • Заполните поля на вкладке Главное: -
            •  Выберите из списка с помощью флажка Тип значения свойства; +
              • Выберите из списка с помощью флажка Тип значения свойства;
              • -
              • Для того чтобы уточнить формат дополнительных реквизитов типа Число, Дата, Булево, перейдите в Конструктор форматной строки по ссылке Формат по умолчанию (для дополнительных сведений и меток не предусмотрено). +
              • Для того чтобы уточнить формат дополнительных реквизитов типа Число, Дата, Булево, перейдите в Конструктор форматной строки по ссылке Формат по умолчанию (для дополнительных сведений и меток не предусмотрено).
                • Установите при необходимости значение в поле Язык (Страна), для того чтобы изменить стандартные настройки.
                • -
                • Выберите необходимые параметры для установки форматов. +
                • Выберите необходимые параметры для установки форматов.
                • В строке Пример для наглядности производятся соответствующие этим параметрам изменения.
                • @@ -27,21 +27,21 @@
                • Подробнее о форматах см. ниже.
              • При необходимости включите флажок Выводить в виде гиперссылки - для размещения на карточке объекта (документа, списка) ссылок на внешние ресурсы или другие объекты приложения (например, файлы). Доступно для строковых дополнительных реквизитов и для ссылочных объектов.
              • -
              • Заполните поле Всплывающая подсказка, для того чтобы объяснить, как заполняется свойство. Содержимое поля будет выводиться на экран при наведении мыши на поле свойства. +
              • Заполните поле Всплывающая подсказка, для того чтобы объяснить, как заполняется свойство. Содержимое поля будет выводиться на экран при наведении мыши на поле свойства.
              • Только для дополнительных реквизитов: перейдите по ссылке в поле Виден, для того чтобы настроить видимость дополнительного реквизита. Видимость дополнительного реквизита может зависеть от некоторого условия (например, от заполнения другого реквизита). После того как условие задано, ссылка отображает заданное условие. По умолчанию отображается значение всегда.
              • Только для дополнительных реквизитов: перейдите по ссылке в поле Доступен, для того чтобы настроить доступность дополнительного реквизита для заполнения. Доступность дополнительного реквизита может зависеть от некоторого условия (например, от заполнения другого реквизита). После того как условие задано, ссылка отображает заданное условие. По умолчанию отображается значение всегда.
              • Только для дополнительных реквизитов: включите флажок Заполнять обязательно, для того чтобы дополнительный реквизит при заполнении списков или документов не оставался пустым. Может зависеть от некоторого условия (например, от заполнения другого реквизита). Для того чтобы задать условие, перейдите по ссылке. Ссылка по умолчанию принимает значение всегда.
            • -
            • Заполните поле Комментарий, для того чтобы при подборе свойства в наборы в нижней части списка выбора выводилось его описание. Для заполнения перейдите на вкладку Комментарий.

            Добавление из другого набора

            +
          • Заполните поле Комментарий, для того чтобы при подборе свойства в наборы в нижней части списка выбора выводилось его описание. Для заполнения перейдите на вкладку Комментарий.

          Добавление из другого набора

          • В приложении предусмотрена возможность использовать ранее введенные свойства для других наборов.
          • -
          • Наиболее актуален этот способ для свойств типа Дополнительное значение и Дополнительное значение (иерархия). 
          • +
          • Наиболее актуален этот способ для свойств типа Дополнительное значение и Дополнительное значение (иерархия).
          • Выберите набор свойств, нажмите кнопку Добавить, в выпадающем меню выполните команду Из другого набора.
          • Открывается помощник по добавлению свойства. -
            • В левой части первой страницы помощника отображается список ранее введенных свойств. +
              • В левой части первой страницы помощника отображается список ранее введенных свойств.
              • В правой части отражаются значения и другие параметры выбранного реквизита.
            • На первой странице помощника выберите свойство. Обратите внимание, что создать свойство в данном списке невозможно. @@ -49,28 +49,28 @@
            • Также можно добавить реквизит из одного набора в другой с помощью перетаскивания мышью. Если были произведены соответствующие настройки, открывается вторая страница помощника Добавление свойства.
          • На второй странице помощника с помощью переключателя выберите вариант добавления свойства: -
            • Добавить реквизит как есть (рекомендуется) - сделать свойство общим. В этом случае общим становится не список значений, а сам реквизит.
            • -
            • Сделать копию реквизита по образцу - создается свойство с общим списком значений. 
            • -
            • Сделать копию реквизита - в новом наборе будет создана копия свойства и всех его значений.

          Добавление свойств как есть

          -
          • Общий реквизит входит в несколько наборов. Этот вариант подходит для тех случаев, когда общим должен быть не только список значений, но и сам реквизит. В списках и отчетах по элементам различных справочников и документов общие реквизиты группируются и выводятся как один реквизит в одной колонке или поле. Например, с помощью общего реквизита Цвет можно отобрать всю желтую одежду и обувь. +
            • Добавить реквизит как есть (рекомендуется) - сделать свойство общим. В этом случае общим становится не список значений, а сам реквизит.
            • +
            • Сделать копию реквизита по образцу - создается свойство с общим списком значений.
            • +
            • Сделать копию реквизита - в новом наборе будет создана копия свойства и всех его значений.

          Добавление свойств как есть

          +
          • Общий реквизит входит в несколько наборов. Этот вариант подходит для тех случаев, когда общим должен быть не только список значений, но и сам реквизит. В списках и отчетах по элементам различных справочников и документов общие реквизиты группируются и выводятся как один реквизит в одной колонке или поле. Например, с помощью общего реквизита Цвет можно отобрать всю желтую одежду и обувь.
          • -
          • Для того чтобы добавить в набор общее свойство, выделите нужный набор, нажмите Добавить - Из другого набора. +
          • Для того чтобы добавить в набор общее свойство, выделите нужный набор, нажмите Добавить - Из другого набора.
          • -
          • Выберите из предлагаемого списка уже существующий общее свойство. Нажмите кнопку Далее. +
          • Выберите из предлагаемого списка уже существующий общее свойство. Нажмите кнопку Далее.
          • -
          • Открывается вторая страница помощника. Выберите с помощью переключателя вариант добавления Сделать реквизит общим и добавить в набор, нажмите Далее. Открывается общий дополнительный реквизит. +
          • Открывается вторая страница помощника. Выберите с помощью переключателя вариант добавления Сделать реквизит общим и добавить в набор, нажмите Далее. Открывается общий дополнительный реквизит.
          • -
          • Также можно добавить общее свойство с помощью перетаскивания мышью или кнопок Копировать и Вставить.
          • +
          • Также можно добавить общее свойство с помощью перетаскивания мышью или кнопок Копировать и Вставить.
          • Для того чтобы добавить общий реквизит в несколько наборов, повторите эти действия для каждого набора.

          Добавление по образцу

          -
          • Можно использовать ранее введенные свойства из других наборов, добавлять реквизиты с общим списком значений сразу для нескольких однотипных реквизитов (например, Цвет двери по образцу реквизита Цвет). Список значений в этом случае используется из реквизита-образца. Удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов. +
            • Можно использовать ранее введенные свойства из других наборов, добавлять реквизиты с общим списком значений сразу для нескольких однотипных реквизитов (например, Цвет двери по образцу реквизита Цвет). Список значений в этом случае используется из реквизита-образца. Удобно выполнять централизованную настройку списка значений сразу для нескольких однотипных реквизитов.
            • Выберите набор из списка.
            • -
            • Нажмите Добавить - Из другого набора. +
            • Нажмите Добавить - Из другого набора.
            • -
            • Будет открыт список всех свойств, уже существующих в приложении. Выберите свойство из списка уже существующих в приложении, нажмите Далее. +
            • Будет открыт список всех свойств, уже существующих в приложении. Выберите свойство из списка уже существующих в приложении, нажмите Далее.
            • -
            • С помощью переключателя выберите способ создания элемента Сделать копию реквизита по образцу, нажмите Далее. +
            • С помощью переключателя выберите способ создания элемента Сделать копию реквизита по образцу, нажмите Далее.
            • Тип и все значения выбранного в качестве образца свойства будут скопированы в новый элемент.
            • @@ -83,54 +83,54 @@
            • В зависимости от настроек производится несколькими способами:
              • В помощнике добавления свойств; -
                • Выделите набор дополнительных реквизитов в списке, нажмите Добавить - Из другого набора. +
                  • Выделите набор дополнительных реквизитов в списке, нажмите Добавить - Из другого набора.
                  • -
                  • На первой странице помощника в списке выбора реквизитов для копирования выберите нужный реквизит, нажмите Далее. +
                  • На первой странице помощника в списке выбора реквизитов для копирования выберите нужный реквизит, нажмите Далее.
                  • -
                  • На второй странице помощника с помощью переключателя выберите Сделать копию реквизита, нажмите Далее. +
                  • На второй странице помощника с помощью переключателя выберите Сделать копию реквизита, нажмите Далее.
                  • Заполните недостающие поля. После копирования реквизита список значений доступен для редактирования.
                • перетаскиванием мышью;
                  • Можно перетащить нужное свойство из одного набора в другой с помощью мыши.
                  • -
                  • Если в списке имеется кнопка Добавить, то открывается вторая страница помощника добавления свойства. +
                  • Если в списке имеется кнопка Добавить, то открывается вторая страница помощника добавления свойства.
                  • -
                  • Если в списке только кнопка Создать, то открывается карточка свойства, которая будет скопирована. Заполните недостающие поля.
                • -
                • с помощью кнопок Копировать и Вставить.  -
                  • Выделите свойство, нажмите кнопку Копировать. Выделите набор, в который нужно добавить свойство. Нажмите кнопку Вставить. Если были произведены соответствующие настройки, то открывается вторая страница помощника добавления свойства. Если выбранное свойство уже входит в какой-либо набор, то предлагается сделать его общим. 
                  • -
                  • Команды Копировать и Вставить также доступны в контекстном меню по правой кнопке мыши или в меню Еще.

              Типы значений свойств

              +
            • Если в списке только кнопка Создать, то открывается карточка свойства, которая будет скопирована. Заполните недостающие поля.
          • +
          • с помощью кнопок Копировать и Вставить. +
            • Выделите свойство, нажмите кнопку Копировать. Выделите набор, в который нужно добавить свойство. Нажмите кнопку Вставить. Если были произведены соответствующие настройки, то открывается вторая страница помощника добавления свойства. Если выбранное свойство уже входит в какой-либо набор, то предлагается сделать его общим.
            • +
            • Команды Копировать и Вставить также доступны в контекстном меню по правой кнопке мыши или в меню Еще.

          Типы значений свойств

          Тип значения свойства меняется исходя из логики использования. Возможны следующие типы свойств:

          -
          • Строка - Определите Длину строки, выберите параметр Фиксированная или Переменная (если введенная строка получится меньше предполагаемой длины, то количество знаков, отведенное под это значение, будет автоматически уменьшено до фактической). Максимальная длина строки в этом случае 1024 символа. Также можно включить флажок Неограниченная, если планируется вводить большой объем текстовой информации. +
            • Строка - Определите Длину строки, выберите параметр Фиксированная или Переменная (если введенная строка получится меньше предполагаемой длины, то количество знаков, отведенное под это значение, будет автоматически уменьшено до фактической). Максимальная длина строки в этом случае 1024 символа. Также можно включить флажок Неограниченная, если планируется вводить большой объем текстовой информации.
              • Для дополнительного реквизита типа Строка в приложении предлагается возможность сделать поле многострочным. Для этого включите флажок Многострочное поле ввода и введите количество строк.
            • Число - выберите Длину числа и его Точность. По умолчанию приложение предлагает длину числа 15 и точность 3. В зависимости от вводимых данных эти цифры могут меняться. Необходимо учитывать, что в количество знаков Длины числа входит количество знаков целой части, и десятичная точка, и количество знаков дробной части. При необходимости включите флажок Неотрицательное.
              • При вводе дополнительного реквизита типа Число предусмотрена возможность более точного выбора формата числа. -
                • При вводе значений в поля Длина и Точность в Конструкторе форматной строки число будет округляться до этого количества знаков. +
                  • При вводе значений в поля Длина и Точность в Конструкторе форматной строки число будет округляться до этого количества знаков.
                  • Можно выбрать Сдвиг.
                  • Можно поменять Разделитель дробной части (по умолчанию - запятая), определить Разделитель групп (по умолчанию пробел), также определить Группировку.
                  • -
                  • Можно выбрать Представление нуля, например, для того чтобы напомнить о необходимости ввода значения в это поле. +
                  • Можно выбрать Представление нуля, например, для того чтобы напомнить о необходимости ввода значения в это поле.
                  • -
                  • Также можно указать Представление отрицательных чисел. +
                  • Также можно указать Представление отрицательных чисел.
                  • -
                  • При необходимости включите флажок Выводить лидирующие нули. В этом случае при подгонке под указанную Длину числа, если число меньше, будут проставлены нули в разрядах.
                • +
                • При необходимости включите флажок Выводить лидирующие нули. В этом случае при подгонке под указанную Длину числа, если число меньше, будут проставлены нули в разрядах.
              • Внимание! Некоторые настройки формата (например, представление пустого числа, длинная дата и некоторые другие) автоматически не применяются в большинстве мест и поддерживаются только там, где разработчик это предусмотрел (например, в печатных формах).
                • В карточках объектов они неприменимы.
            • Дата - выберите состав даты: Дата, Время или Дата и Время. -
              • Для дополнительных реквизитов можно задать формат даты, для этого перейдите по ссылке Формат по умолчанию. Можно выбрать формат dd.mm.yyyyили yyyy-MM-dd, а также Локальный формат даты (например, 22 мая 2023), задать Представление пустой даты (в незаполненном поле появится предупреждение, например, Нет даты). +
                • Для дополнительных реквизитов можно задать формат даты, для этого перейдите по ссылке Формат по умолчанию. Можно выбрать формат dd.mm.yyyyили yyyy-MM-dd, а также Локальный формат даты (например, 22 мая 2023), задать Представление пустой даты (в незаполненном поле появится предупреждение, например, Нет даты).
                  • Внимание! Некоторые настройки формата (например, представление пустого числа, длинная дата и некоторые другие) автоматически не применяются в большинстве мест и поддерживаются только там, где разработчик это предусмотрел (например, в печатных формах).
                  • В карточках объектов они неприменимы.
              • -
              • Составной тип данных - этот тип значения предоставляет возможность окончательно выбрать тип данных уже при вводе информации в справочник. Включите флажок Составной тип данных, затем включите флажки для типов значений, из которых можно будет выбирать. +
              • Составной тип данных - этот тип значения предоставляет возможность окончательно выбрать тип данных уже при вводе информации в справочник. Включите флажок Составной тип данных, затем включите флажки для типов значений, из которых можно будет выбирать.
                • Например, дату основания фирмы иногда невозможно указать точно. В этом случае можно предоставить возможность выбора типа данных (Дата или Строка) во время ввода. Если точная дата известна, то можно будет выбрать тип Дата и ввести, если неизвестна, то можно будет ввести дату в виде строки типа "Начало 19 в.".
                • При этом для всех частей составного типа данных можно произвести их обычные настройки, например, настроить формат даты и определить параметры строки.
                • -
                • При вводе значений дополнительных реквизитов (сведений) составного типа данных сначала предлагается выбрать тип данных.
              • +
              • При вводе значений дополнительных реквизитов (сведений) составного типа данных сначала предлагается выбрать тип данных.
            • Булево - обычно это значения типа Истина и Ложь, Да или Нет.
              • Для дополнительных реквизитов в Конструкторе форматной строки можно установить другой формат этих значений. Можно написать Представления значения булево Ложь и булево Истина. В этом случае при вводе вместо обычного Да или Нет для выбора будут предложены значения, введенные при настройке дополнительного реквизита. -
                • Внимание! В списках и отчетах отбор для таких дополнительных реквизитов с условием Равно и Не равно не поддерживается.
            • +
              • Внимание! В списках и отчетах отбор для таких дополнительных реквизитов с условием Равно и Не равно не поддерживается.
          • Дополнительное значение - этот тип данных часто используется, при этом ввод информации сводится к выбору значений из списка. Предлагается приложением по умолчанию. Применяется как обычный список значений, так и сгруппированный. С помощью дополнительных реквизитов (сведений) типа Дополнительное значение можно описывать различные свойства объектов приложения.
          • Дополнительное значение (иерархия) - такая структура списков также широко используется, ее называют иерархией элементов. Элементы в таком списке имеют одинаковые свойства, но могут иметь подчиненные элементы. При этом иерархия может быть довольно сложной. @@ -139,14 +139,14 @@
            • Кроме обычных полей доступны:
            • -
            • После выбора типа данных и заполнения поля Наименование нажмите кнопку Записать. После этого становится доступным для работы список значений. Для ввода значений нажмите Создать. Введите необходимые поля. +
            • Заголовок формы выбора значения - введите заголовок окон выбора значений (окон выбора значений с иерархией). Применение индивидуальных заголовков для окон ввода дополнительных реквизитов и сведений и выбора значений позволяет сделать процесс ввода более удобным и понятным.
          • +
          • После выбора типа данных и заполнения поля Наименование нажмите кнопку Записать. После этого становится доступным для работы список значений. Для ввода значений нажмите Создать. Введите необходимые поля.
          • -
          • Если данные не были записаны перед выполнением команды Создать, то приложение выдает предупреждение. Для перехода к вводу значений нажмите кнопку Записать.

          Изменение формата свойств

          +
        • Если данные не были записаны перед выполнением команды Создать, то приложение выдает предупреждение. Для перехода к вводу значений нажмите кнопку Записать.
        • Изменение формата свойств

          • Любые изменения типов значений и формата свойств после сохранения невозможны. Для этого придется сначала удалить созданные свойства, затем уже заново создать свойства с новыми типами значений.

          Программная работа со свойствами

          -
          • У каждого свойства есть реквизит Имя, которое необходимо для обращения к нему из кода приложения с помощью функций ЗначенияСвойств, ЗначениеСвойства, ПредставлениеЗначенияСвойства и ПредставленияЗначенийСвойств общего модуля УправлениеСвойствами. Его значение уникально, задается автоматически и при необходимости может быть изменено разработчиком в карточке свойства.

          +
          • У каждого свойства есть реквизит Имя, которое необходимо для обращения к нему из кода приложения с помощью функций ЗначенияСвойств, ЗначениеСвойства, ПредставлениеЗначенияСвойства и ПредставленияЗначенийСвойств общего модуля УправлениеСвойствами. Его значение уникально, задается автоматически и при необходимости может быть изменено разработчиком в карточке свойства.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 90d7251f3..defb3294b 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -426,8 +426,8 @@ &НаКлиенте Процедура ВидСвойствПриИзменении(Элемент) - Объект.ВидСвойств = ВидСвойств; - Если Объект.ВидСвойств = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения") Тогда + Объект.ВидСвойства = ВидСвойства; + Если Объект.ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения") Тогда Объект.ЭтоДополнительноеСведение = Истина; КонецЕсли; @@ -748,7 +748,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка); ПараметрыФормы.Вставить("ЭтоДополнительныйРеквизит", Не Объект.ЭтоДополнительноеСведение); - ПараметрыФормы.Вставить("ВидСвойств", Объект.ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", Объект.ВидСвойства); Оповещение = Новый ОписаниеОповещения("ПослеВыбораРеквизитовДляРазблокирования", ЭтотОбъект); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.РазблокированиеРеквизитов", @@ -810,80 +810,80 @@ &НаКлиенте Процедура СвойствоСерое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Серый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Серый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоГолубое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Голубой"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Голубой"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоЖелтое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Желтый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Желтый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоЗеленое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Зеленый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Зеленый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоКоричневое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Лаймовый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Лаймовый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоКрасное(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Красный"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Красный"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоОранжевое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Оранжевый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Оранжевый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоРозовое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Розовый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Розовый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоСинее(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Синий"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Синий"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры &НаКлиенте Процедура СвойствоФиолетовое(Команда) - Объект.ЦветСвойств = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Фиолетовый"); - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + Объект.ЦветСвойства = ПредопределенноеЗначение("Перечисление.ЦветаСвойств.Фиолетовый"); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецПроцедуры @@ -970,8 +970,8 @@ &НаСервере Процедура ЗаполнитьСтраницуВыбора() - Если ПереданныеПараметрыФормы.ВидСвойств <> Неопределено Тогда - ВидСвойств = ПереданныеПараметрыФормы.ВидСвойств; + Если ПереданныеПараметрыФормы.ВидСвойства <> Неопределено Тогда + ВидСвойства = ПереданныеПараметрыФормы.ВидСвойства; КонецЕсли; Запрос = Новый Запрос; @@ -989,9 +989,9 @@ Для Каждого Ссылка Из Наборы Цикл ВидыСвойствНабора = УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Ссылка, Ложь); - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения И ВидыСвойствНабора.ДополнительныеСведения - ИЛИ ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеРеквизиты И ВидыСвойствНабора.ДополнительныеРеквизиты - ИЛИ ВидСвойств = Перечисления.ВидыСвойств.Метки И ВидыСвойствНабора.Метки Тогда + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения И ВидыСвойствНабора.ДополнительныеСведения + ИЛИ ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеРеквизиты И ВидыСвойствНабора.ДополнительныеРеквизиты + ИЛИ ВидСвойства = Перечисления.ВидыСвойств.Метки И ВидыСвойствНабора.Метки Тогда ДоступныеНаборы.Добавить(Ссылка); КонецЕсли; КонецЦикла; @@ -1042,9 +1042,9 @@ КонецЦикла; КонецЕсли; - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда Элементы.НеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Неиспользуемые дополнительные сведения'"); - ИначеЕсли ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Элементы.НеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Неиспользуемые метки'"); Иначе Элементы.НеиспользуемыеРеквизиты.Заголовок = НСтр("ru = 'Неиспользуемые дополнительные реквизиты'"); @@ -1057,7 +1057,7 @@ НаборыСвойств, "ИсключаемыеНаборы", ИсключаемыеНаборы, Истина); ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - НаборыСвойств, "ВидСвойств", ВидСвойств, Истина); + НаборыСвойств, "ВидСвойства", ВидСвойства, Истина); ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( НаборыСвойств, "ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык(), Истина); @@ -1066,14 +1066,14 @@ НаборыСвойств, "КодЯзыка", ТекущийЯзык().КодЯзыка, Истина); ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - ОбщиеНаборыСвойств, "ВидСвойств", ВидСвойств, Истина); + ОбщиеНаборыСвойств, "ВидСвойства", ВидСвойства, Истина); ПредставлениеСписка = ""; - Если ВидСвойств = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения") Тогда + Если ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения") Тогда ПредставлениеСписка = НСтр("ru = 'Неиспользуемые дополнительные сведения'"); - ИначеЕсли ВидСвойств = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеРеквизиты") Тогда + ИначеЕсли ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеРеквизиты") Тогда ПредставлениеСписка = НСтр("ru = 'Неиспользуемые дополнительные реквизиты'"); - ИначеЕсли ВидСвойств = ПредопределенноеЗначение("Перечисление.ВидыСвойств.Метки") Тогда + ИначеЕсли ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.Метки") Тогда ПредставлениеСписка = НСтр("ru = 'Неиспользуемые метки'"); КонецЕсли; @@ -1166,7 +1166,7 @@ ТекущийНаборСвойств = ПереданныеПараметрыФормы.ТекущийНаборСвойств; Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Элементы.ВидСвойств.Доступность = Ложь; + Элементы.ВидСвойства.Доступность = Ложь; ПоказатьУточнениеНабора = ПереданныеПараметрыФормы.ПоказатьУточнениеНабора; Иначе Объект.Доступен = Истина; @@ -1183,13 +1183,13 @@ Объект.ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; КонецЕсли; - Если ПереданныеПараметрыФормы.ВидСвойств <> Неопределено Тогда - Объект.ВидСвойств = ПереданныеПараметрыФормы.ВидСвойств; - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если ПереданныеПараметрыФормы.ВидСвойства <> Неопределено Тогда + Объект.ВидСвойства = ПереданныеПараметрыФормы.ВидСвойства; + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда Объект.ЭтоДополнительноеСведение = Истина; КонецЕсли; ИначеЕсли НЕ ЗначениеЗаполнено(ПереданныеПараметрыФормы.ЗначениеКопирования) Тогда - Элементы.ВидСвойств.Видимость = Истина; + Элементы.ВидСвойства.Видимость = Истина; КонецЕсли; КонецЕсли; @@ -1197,7 +1197,7 @@ Объект.Заголовок = Объект.Наименование; КонецЕсли; - ВидСвойств = Объект.ВидСвойств; + ВидСвойства = Объект.ВидСвойства; Если СозданиеРеквизитаКопированием Тогда // Для случаев, когда копирование выполняется из карточки реквизита по команде "Скопировать". @@ -1432,7 +1432,7 @@ ЗначениеВыбора = Новый Структура; ЗначениеВыбора.Вставить("Набор", ВыбранныйНабор); ЗначениеВыбора.Вставить("Свойство", Объект.Ссылка); - ЗначениеВыбора.Вставить("ВидСвойств", Объект.ВидСвойств); + ЗначениеВыбора.Вставить("ВидСвойства", Объект.ВидСвойства); ОповеститьОВыборе(ЗначениеВыбора); КонецЕсли; @@ -1516,7 +1516,7 @@ ПараметрыФормы.Вставить("Свойство", Объект.Ссылка); ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", Объект.ВладелецДополнительныхЗначений); ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); - ПараметрыФормы.Вставить("ВидСвойств", Объект.ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", Объект.ВидСвойства); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ИзменениеНастройкиСвойства", ПараметрыФормы, ЭтотОбъект); @@ -1535,7 +1535,7 @@ ПараметрыФормы.Вставить("Свойство", Объект.Ссылка); ПараметрыФормы.Вставить("ВладелецДополнительныхЗначений", Объект.ВладелецДополнительныхЗначений); ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", Объект.ЭтоДополнительноеСведение); - ПараметрыФормы.Вставить("ВидСвойств", Объект.ВидСвойств); + ПараметрыФормы.Вставить("ВидСвойства", Объект.ВидСвойства); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ИзменениеНастройкиСвойства", ПараметрыФормы, ЭтотОбъект); @@ -1705,14 +1705,14 @@ Если ТекущаяСтраница = Элементы.ВыборРеквизита Тогда - Если ПереданныеПараметрыФормы.ВидСвойств = + Если ПереданныеПараметрыФормы.ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения") Тогда Заголовок = НСтр("ru = 'Добавление дополнительного сведения'"); ШаблонЗаголовкаСписка = НСтр("ru = 'Выберите дополнительное сведение для включения в набор ""%1""'"); ШаблонЗаголовкаПереключателя = НСтр("ru = 'Выберите вариант добавления дополнительного сведения ""%1"" в набор ""%2""'"); - ИначеЕсли ПереданныеПараметрыФормы.ВидСвойств = + ИначеЕсли ПереданныеПараметрыФормы.ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.Метки") Тогда Заголовок = НСтр("ru = 'Добавление метки'"); ШаблонЗаголовкаСписка = @@ -1756,10 +1756,10 @@ Строка(ВладелецДополнительныхЗначений), Строка(ПереданныеПараметрыФормы.ТекущийНаборСвойств)); - Если ПереданныеПараметрыФормы.ВидСвойств = + Если ПереданныеПараметрыФормы.ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.ДополнительныеСведения") Тогда Заголовок = НСтр("ru = 'Добавление дополнительного сведения'"); - ИначеЕсли ПереданныеПараметрыФормы.ВидСвойств = + ИначеЕсли ПереданныеПараметрыФормы.ВидСвойства = ПредопределенноеЗначение("Перечисление.ВидыСвойств.Метки") Тогда Заголовок = НСтр("ru = 'Добавление метки'"); Иначе @@ -1819,7 +1819,7 @@ Элементы.ГруппаМногострочность.Видимость = Ложь; КонецЕсли; - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Объект.ТипЗначения = Новый ОписаниеТипов("Булево"); Элементы.ГруппаТипЗначения.Видимость = Ложь; Элементы.ГруппаЦветаСвойств.Видимость = Истина; @@ -1828,10 +1828,10 @@ Элементы.ГруппаДоступен.Видимость = Ложь; Элементы.СвойствоСерое.Пометка = Истина; Элементы.Заголовок.ОграничениеТипа = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(15)); - Если Не ЗначениеЗаполнено(Объект.ЦветСвойств) Тогда - Объект.ЦветСвойств = Перечисления.ЦветаСвойств.Серый; + Если Не ЗначениеЗаполнено(Объект.ЦветСвойства) Тогда + Объект.ЦветСвойства = Перечисления.ЦветаСвойств.Серый; КонецЕсли; - УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойств); + УстановитьЦветМетки(ЭтотОбъект, Объект.ЦветСвойства); КонецЕсли; Если ЗначениеЗаполнено(Объект.Ссылка) Тогда @@ -2087,11 +2087,11 @@ Элементы.УточнениеСпискаЗначенийИзменить.Доступность = ЗначениеЗаполнено(Объект.Ссылка); СвойстваВладельца = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Объект.ВладелецДополнительныхЗначений, "Заголовок, ВидСвойств"); + Объект.ВладелецДополнительныхЗначений, "Заголовок, ВидСвойства"); - Если СвойстваВладельца.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если СвойстваВладельца.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда ШаблонУточнения = НСтр("ru = 'Список значений общий со сведением ""%1""'"); - ИначеЕсли СвойстваВладельца.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли СвойстваВладельца.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда ШаблонУточнения = НСтр("ru = 'Список значений общий с меткой ""%1""'"); Иначе ШаблонУточнения = НСтр("ru = 'Список значений общий с реквизитом ""%1""'"); @@ -2126,29 +2126,29 @@ Элементы.УточнениеНаборовКомментарий.Гиперссылка = Ложь; Элементы.УточнениеНаборовИзменить.Видимость = Ложь; - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Или Объект.ЭтоДополнительноеСведение Тогда ТекстКомментария = НСтр("ru = 'Сведение не входит в наборы'"); - ИначеЕсли Объект.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли Объект.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда ТекстКомментария = НСтр("ru = 'Метка не входит в наборы'"); Иначе ТекстКомментария = НСтр("ru = 'Реквизит не входит в наборы'"); КонецЕсли; ИначеЕсли СписокНаборов.Количество() < 2 Тогда - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Или Объект.ЭтоДополнительноеСведение Тогда ШаблонУточнения = НСтр("ru = 'Сведение входит в набор: %1'"); - ИначеЕсли Объект.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли Объект.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда ШаблонУточнения = НСтр("ru = 'Метка входит в набор: %1'"); Иначе ШаблонУточнения = НСтр("ru = 'Реквизит входит в набор: %1'"); КонецЕсли; ТекстКомментария = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонУточнения, СокрЛП(СписокНаборов[0].Представление)); Иначе - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Или Объект.ЭтоДополнительноеСведение Тогда ШаблонУточнения = НСтр("ru = 'Сведение входит в %1 %2'"); - ИначеЕсли Объект.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли Объект.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда ШаблонУточнения = НСтр("ru = 'Метка входит в %1 %2'"); Иначе ШаблонУточнения = НСтр("ru = 'Реквизит входит в %1 %2'"); @@ -2311,7 +2311,7 @@ РеквизитСоСпискомДополнительныхЗначений = РеквизитСоСпискомДополнительныхЗначений(); - Если ПереданныеПараметрыФормы.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если ПереданныеПараметрыФормы.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда ДобавитьОбщий = НСтр("ru = 'Добавить сведение как есть (рекомендуется) | |В этом случае будет возможно отбирать по нему данные разных типов в списках и отчетах.'"); @@ -2329,7 +2329,7 @@ | |Будет создана копия сведения.'"); КонецЕсли; - ИначеЕсли ПереданныеПараметрыФормы.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли ПереданныеПараметрыФормы.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда ДобавитьОбщий = НСтр("ru = 'Добавить метку как есть (рекомендуется) | |В этом случае будет возможно отбирать по ней данные разных типов в списках и отчетах.'"); @@ -2456,19 +2456,19 @@ Процедура УстановитьЗаголовокФормы() Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Или Объект.ЭтоДополнительноеСведение Тогда Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительное сведение)'"); - ИначеЕсли Объект.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли Объект.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Метка)'"); Иначе Заголовок = Строка(Объект.Заголовок) + " " + НСтр("ru = '(Дополнительный реквизит)'"); КонецЕсли; Иначе - Если Объект.ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения + Если Объект.ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Или Объект.ЭтоДополнительноеСведение Тогда Заголовок = НСтр("ru = 'Дополнительное сведение (создание)'"); - ИначеЕсли Объект.ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли Объект.ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Заголовок = НСтр("ru = 'Метка (создание)'"); Иначе Заголовок = НСтр("ru = 'Дополнительный реквизит (создание)'"); @@ -2511,7 +2511,7 @@ УправлениеСвойствамиСлужебный.ОбновитьСписокСвойствТекущегоНабора(ЭтотОбъект, ВыбранныйНаборСвойств, - ВидСвойств); + ВидСвойства); КонецПроцедуры @@ -2521,7 +2521,7 @@ ПереданныеПараметрыФормы.Вставить("ВладелецДополнительныхЗначений"); ПереданныеПараметрыФормы.Вставить("ПоказатьУточнениеНабора", Истина); ПереданныеПараметрыФормы.Вставить("ТекущийНаборСвойств"); - ПереданныеПараметрыФормы.Вставить("ВидСвойств"); + ПереданныеПараметрыФормы.Вставить("ВидСвойства"); ПереданныеПараметрыФормы.Вставить("ВыборОбщегоСвойства"); ПереданныеПараметрыФормы.Вставить("ВыбранныеЗначения"); ПереданныеПараметрыФормы.Вставить("ВыборВладельцаДополнительныхЗначений"); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html index 858cbfafb..9432d9f52 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html @@ -1,9 +1,9 @@

          Свойства используются в наборах свойств.
          Все свойства объектов можно вывести в отчетах и списках.

          -

          При выборе вида дополнительного свойства нужно руководствоваться следующими соображениями:

          -
          • Дополнительные реквизиты являются неотъемлемой частью «объекта со свойствами». Они хранятся в табличной части объекта и доступны тем же пользователям, которым доступен и сам «объект со свойствами». Дополнительные реквизиты редактируются в окне объекта наряду с его остальными реквизитами. +

            При выборе вида дополнительного свойства нужно руководствоваться следующими соображениями:

            +
            • Дополнительные реквизиты являются неотъемлемой частью «объекта со свойствами». Они хранятся в табличной части объекта и доступны тем же пользователям, которым доступен и сам «объект со свойствами». Дополнительные реквизиты редактируются в окне объекта наряду с его остальными реквизитами.
            • -
            • Дополнительные сведения предназначены для хранения сведений об объекте, которые не являются неотъемлемой частью объекта. Дополнительные сведения, как правило, доступны для просмотра и/или редактирования пользователям, которые не имеют доступа к самому «объекту со свойствами». Дополнительные сведения редактируются в отдельном окне, которое можно открыть из окна «объекта со свойствами».
            • -
            • Метки позволяют помечать справочники и документы разноцветными значками-метками. Их редактирование и просмотр определены правами на объект-владелец.

            При выборе типа значения Дополнительное значение или Дополнительное значение (иерархия) можно задать список возможных значений или значений с иерархией дополнительного реквизита или сведения. Для этого нужно воспользоваться командой Создать в окне свойств.

            +
          • Дополнительные сведения предназначены для хранения сведений об объекте, которые не являются неотъемлемой частью объекта. Дополнительные сведения, как правило, доступны для просмотра и/или редактирования пользователям, которые не имеют доступа к самому «объекту со свойствами». Дополнительные сведения редактируются в отдельном окне, которое можно открыть из окна «объекта со свойствами».
          • +
          • Метки позволяют помечать справочники и документы разноцветными значками-метками. Их редактирование и просмотр определены правами на объект-владелец.

          При выборе типа значения Дополнительное значение или Дополнительное значение (иерархия) можно задать список возможных значений или значений с иерархией дополнительного реквизита или сведения. Для этого нужно воспользоваться командой Создать в окне свойств.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index b0907ee2e..be42e9e7c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -123,7 +123,7 @@ |ГДЕ | Свойства.Свойство = &Свойство | И Свойства.ПометкаУдаления <> &ПометкаУдаления"; - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда ИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"; Иначе ИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты"; @@ -136,7 +136,7 @@ Для Каждого СтрокаРезультата Из Результат Цикл НаборСвойствОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();// СправочникОбъект.НаборыДополнительныхРеквизитовИСведений, - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеСведения.Найти(Ссылка, "Свойство"), СвойстваОбъекта); Иначе ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеРеквизиты.Найти(Ссылка, "Свойство"), СвойстваОбъекта); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index f03fd5fb2..67b4b04e9 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -679,10 +679,10 @@ Use - ВидСвойств + ВидСвойства ru - Вид свойств + Вид свойства EnumRef.ВидыСвойств @@ -694,10 +694,10 @@ Use - ЦветСвойств + ЦветСвойства ru - Цвет свойств + Цвет свойства EnumRef.ЦветаСвойств diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html index 6254d401c..cc7b681e2 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html @@ -1,11 +1,11 @@ -

          Содержит список объектов приложения, которые могут использоваться вместе с ролями исполнителей для ролевой адресации.

          +

          Содержит список объектов приложения, которые могут использоваться вместе с ролями исполнителей для ролевой адресации.

          Открывается по соответствующей команде раздела Бизнес-процессы и задачи.

          В списке выводится:

          • Наименование - полное наименование объекта адресации;
          • Тип значения - тип значения объекта адресации.

          В зависимости от специфики бизнес-процессов задачи могут быть адресованы исполнителю или группе исполнителей как персонально (персональная адресация), так и для некоторых бизнес-процессов с использованием ролей бизнес-процесса (ролевая адресация).

          -

          При ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу). Могут использоваться "уточняющие" объекты адресации, основные и дополнительные. Например, у роли Руководитель проектов могут присутствовать основной объект адресации Подразделение и дополнительный объект Проект. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется задача. Соответствие исполнителей ролям и объектам адресации задается перед началом работы с бизнес-процессами и задачами, используется приложением для доставки поручений конкретным исполнителям.

          -

          Предопределенный элемент Все объекты адресации обозначает все доступные объекты адресации приложения.

          +

          При ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу). Могут использоваться "уточняющие" объекты адресации, основные и дополнительные. Например, у роли Руководитель проектов могут присутствовать основной объект адресации Подразделение и дополнительный объект Проект. Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется задача. Соответствие исполнителей ролям и объектам адресации задается перед началом работы с бизнес-процессами и задачами, используется приложением для доставки поручений конкретным исполнителям.

          +

          Предопределенный элемент Все объекты адресации обозначает все доступные объекты адресации приложения.

          См. также:

          - \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl index 507cc0ac0..09608c0d6 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl @@ -117,7 +117,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); МодульМультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", - "ru='Все объекты адресации'", КодыЯзыков); // @НСтр-1 + "ru='Все объекты адресации'", КодыЯзыков); // @НСтр-2 Иначе Элемент.Наименование = НСтр("ru = 'Все объекты адресации'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецЕсли; diff --git a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo index 8331adf3b..d05a2bb38 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo @@ -32,6 +32,10 @@ Catalog.СеансыОбменовДанными Use + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных + Use + Constant.ОтложенноеОбновлениеЗавершеноУспешно Use diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index d736ce74f..613caada0 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -58,6 +58,10 @@ ScheduledJob.ОчисткаНенужныхФайлов DontUse + + Constant.КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов + DontUse + Catalog.ПрофилиКлючевыхОпераций DontUse @@ -234,6 +238,10 @@ Constant.СписокРасширенийТекстовыхФайлов DontUse + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных + DontUse + InformationRegister.ЗагруженныеВерсииАдресныхСведений DontUse diff --git a/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl b/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl index 784b71738..bb4a34634 100644 --- a/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl +++ b/SSL/src/CommonCommands/ЖурналУчетаОригиналовПервичныхДокументов/CommandModule.bsl @@ -11,7 +11,8 @@ // Открывает форму журнала учета оригиналов первичных документов &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - + + ИнтеграцияПодсистемБСПКлиент.ПриОткрытииФормыЖурналаУчетаОригиналов(); УчетОригиналовПервичныхДокументовКлиентПереопределяемый.ПриОткрытииФормыЖурналаУчетаОригиналов(); КонецПроцедуры diff --git a/SSL/src/CommonCommands/МакетыФайловВыгрузки/CommandModule.bsl b/SSL/src/CommonCommands/МакетыФайловВыгрузки/CommandModule.bsl new file mode 100644 index 000000000..81be3aded --- /dev/null +++ b/SSL/src/CommonCommands/МакетыФайловВыгрузки/CommandModule.bsl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..f82a6d489 --- /dev/null +++ b/SSL/src/CommonCommands/МакетыФайловВыгрузки/МакетыФайловВыгрузки.mdo @@ -0,0 +1,10 @@ + + + МакетыФайловВыгрузки + + ru + Макеты файлов выгрузки + + NavigationPanelOrdinary + Auto + diff --git a/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl index 63a520563..6cb90773d 100644 --- a/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиПодключения/CommandModule.bsl @@ -9,52 +9,16 @@ #Область ОбработчикиСобытий &НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) +Процедура ОбработкаКоманды(Корреспондент, ПараметрыВыполненияКоманды) - Корреспондент = ПараметрКоманды; - ИдентификаторНастройки = ""; + ПараметрыФормы = Новый Структура("Корреспондент", Корреспондент); - Если ОбменДаннымиСВнешнейСистемой(Корреспондент, ИдентификаторНастройки) Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда - - Контекст = Новый Структура; - Контекст.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - Контекст.Вставить("Корреспондент", Корреспондент); - Контекст.Вставить("Режим", "РедактированиеПараметровПодключения"); - - Отказ = Ложь; - ИмяФормыПомощника = ""; - ПараметрыПомощника = Новый Структура; - - МодульОбменДаннымиСВнешнимиСистемамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемамиКлиент"); - МодульОбменДаннымиСВнешнимиСистемамиКлиент.ПередНастройкойПараметровПодключения( - Контекст, Отказ, ИмяФормыПомощника, ПараметрыПомощника); - - Если Не Отказ Тогда - ОткрытьФорму(ИмяФормыПомощника, - ПараметрыПомощника, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - КонецЕсли; - КонецЕсли; - Возврат; - КонецЕсли; - - Отбор = Новый Структура("Корреспондент", Корреспондент); - ЗначенияЗаполнения = Новый Структура("Корреспондент", Корреспондент); - - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ПараметрыВыполненияКоманды.Источник); + ОткрытьФорму("Справочник.НастройкиТранспортаСообщенийОбмена.Форма.ПанельНастроекТранспорта", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры -&НаСервере -Функция ОбменДаннымиСВнешнейСистемой(Корреспондент, ИдентификаторНастройки = "") - - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент); - - ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(Корреспондент); - - Возврат ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo b/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo index 9c34e42c7..4a14f888d 100644 --- a/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo +++ b/SSL/src/CommonCommands/НастройкиПодключения/НастройкиПодключения.mdo @@ -5,7 +5,7 @@ ru Настройки подключения - CommandGroup.ПараметрыСинхронизацииДанных + FormNavigationPanelGoTo Auto ru diff --git a/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl b/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl index a1872e5e2..076bcea98 100644 --- a/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl +++ b/SSL/src/CommonCommands/НастройкиСинхронизацииДанных/CommandModule.bsl @@ -12,9 +12,9 @@ Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("ОбщаяФорма.НастройкиСинхронизацииДанных",, - ПараметрыВыполненияКоманды.Источник, - ПараметрыВыполненияКоманды.Уникальность, - ПараметрыВыполненияКоманды.Окно); + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl index d5bda59d9..2e7c49809 100644 --- a/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl +++ b/SSL/src/CommonCommands/ПолучитьНастройкиСинхронизацииДляДругойПрограммы/CommandModule.bsl @@ -11,26 +11,65 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + Если Не ОбменДаннымиВызовСервера.УзелВходитВПланыОбменаБСД(ПараметрКоманды) Тогда + + Текст = НСтр("ru = 'Команда не предназначена для данного типа узлов'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + ПоказатьПредупреждение(, Текст); + + Возврат; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(ТранспортСообщенийОбменаВызовСервера.ТранспортПоУмолчанию(ПараметрКоманды)) Тогда + + Текст = НСтр("ru = 'Для узла не назначен тип транспорта по умолчанию'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + ПоказатьПредупреждение(, Текст); + + Возврат; + + КонецЕсли; + Отказ = Ложь; - АдресВременногоХранилища = ""; + АдресНастроекПодключенияXML = ""; + АдресНастроекПодключенияJSON = ""; - ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазыНаСервере(Отказ, АдресВременногоХранилища, ПараметрКоманды); + ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазыНаСервере(Отказ, + ПараметрКоманды, АдресНастроекПодключенияXML, АдресНастроекПодключенияJSON); Если Отказ Тогда ПоказатьПредупреждение(, НСтр("ru = 'Возникли ошибки при получении настроек обмена данными.'")); + Возврат; - Иначе + КонецЕсли; + + ПолучаемыеФайлы = Новый Массив; + + Если ЗначениеЗаполнено(АдресНастроекПодключенияXML) Тогда - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); - ПараметрыСохранения.Диалог.Фильтр = "Файлы XML (*.xml)|*.xml"; - - ФайловаяСистемаКлиент.СохранитьФайл( - Неопределено, - АдресВременногоХранилища, - НСтр("ru = 'Настройки синхронизации данных.xml'"), - ПараметрыСохранения); + ИмяФайла = НСтр("ru = 'Настройки подключения'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()) + ".xml"; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресНастроекПодключенияXML)); + + КонецЕсли; + + Если ЗначениеЗаполнено(АдресНастроекПодключенияJSON) Тогда + + ИмяФайла = НСтр("ru = 'Настройки подключения'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()) + ".json"; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресНастроекПодключенияJSON)); + + КонецЕсли; + + Если ПолучаемыеФайлы.Количество() > 0 Тогда + + Оповещение = Новый ОписаниеОповещения("СохранитьФайлыНастроекПодключенияЗавершение", ЭтотОбъект); + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); + ПараметрыСохранения.Интерактивно = Истина; + + ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, ПолучаемыеФайлы, ПараметрыСохранения); КонецЕсли; @@ -41,11 +80,59 @@ #Область СлужебныеПроцедурыИФункции &НаСервере -Процедура ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазыНаСервере(Отказ, АдресВременногоХранилища, УзелИнформационнойБазы) +Процедура ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазыНаСервере(Отказ, + УзелИнформационнойБазы, АдресНастроекПодключенияXML, АдресНастроекПодключенияJSON) ПомощникСозданияОбменаДанными = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными().Создать(); ПомощникСозданияОбменаДанными.Инициализация(УзелИнформационнойБазы); - ПомощникСозданияОбменаДанными.ВыполнитьВыгрузкуПараметровМастераВоВременноеХранилище(Отказ, АдресВременногоХранилища); + + СтрокаНастроекПодключенияXML = ТранспортСообщенийОбмена.НастройкиПодключенияВXML(ПомощникСозданияОбменаДанными); + + Если ЗначениеЗаполнено(СтрокаНастроекПодключенияXML) Тогда + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ИмяВременногоФайла, "UTF-8"); + Запись.Записать(СтрокаНастроекПодключенияXML); + Запись.Закрыть(); + + АдресНастроекПодключенияXML = ПоместитьВоВременноеХранилище( + Новый ДвоичныеДанные(ИмяВременногоФайла)); + + УдалитьФайлы(ИмяВременногоФайла); + + КонецЕсли; + + СтрокаНастроекПодключенияJSON = ТранспортСообщенийОбмена.НастройкиПодключенияВJSON(ПомощникСозданияОбменаДанными); + + Если ЗначениеЗаполнено(СтрокаНастроекПодключенияJSON) Тогда + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ИмяВременногоФайла, "UTF-8"); + Запись.Записать(СтрокаНастроекПодключенияJSON); + Запись.Закрыть(); + + АдресНастроекПодключенияJSON = ПоместитьВоВременноеХранилище( + Новый ДвоичныеДанные(ИмяВременногоФайла)); + + УдалитьФайлы(ИмяВременногоФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайлыНастроекПодключенияЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекстСообщения = НСтр("ru = 'Настройки подключения сохранены'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); КонецПроцедуры diff --git a/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl b/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl index e7379e4c2..245d6b863 100644 --- a/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl +++ b/SSL/src/CommonCommands/Синхронизировать/CommandModule.bsl @@ -11,6 +11,16 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + Если Не ОбменДаннымиВызовСервера.УзелВходитВПланыОбменаБСД(ПараметрКоманды) Тогда + + Текст = НСтр("ru = 'Команда не предназначена для данного типа узлов'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + ПоказатьПредупреждение(, Текст); + + Возврат; + + КонецЕсли; + ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры diff --git a/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl index a262bb323..1f87a0620 100644 --- a/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl +++ b/SSL/src/CommonCommands/СинхронизироватьСДополнительнымиПараметрами/CommandModule.bsl @@ -11,6 +11,16 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + Если Не ОбменДаннымиВызовСервера.УзелВходитВПланыОбменаБСД(ПараметрКоманды) Тогда + + Текст = НСтр("ru = 'Команда не предназначена для данного типа узлов'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + ПоказатьПредупреждение(, Текст); + + Возврат; + + КонецЕсли; + ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры diff --git a/SSL/src/CommonForms/АвтономнаяРабота/Form.form b/SSL/src/CommonForms/АвтономнаяРабота/Form.form index 686e8ca0b..30cdafd9a 100644 --- a/SSL/src/CommonForms/АвтономнаяРабота/Form.form +++ b/SSL/src/CommonForms/АвтономнаяРабота/Form.form @@ -18,7 +18,7 @@ true - Декорация5РасширеннаяПодсказка + Декорация5ExtendedTooltip 71 Label true @@ -55,7 +55,7 @@ true - Декорация4РасширеннаяПодсказка + Декорация4ExtendedTooltip 72 Label true @@ -86,7 +86,7 @@ Группа - Группа3РасширеннаяПодсказка + Группа3ExtendedTooltip 70 Label true @@ -123,7 +123,7 @@ true - ВыполнитьСинхронизациюДанныхРасширеннаяПодсказка + ВыполнитьСинхронизациюДанныхExtendedTooltip 75 Label true @@ -154,7 +154,7 @@ true - Декорация3РасширеннаяПодсказка + Декорация3ExtendedTooltip 76 Label true @@ -185,7 +185,7 @@ Группа - Группа7РасширеннаяПодсказка + Группа7ExtendedTooltip 74 Label true @@ -218,7 +218,7 @@ true - ИнформацияОПоследнейСинхронизацииРасширеннаяПодсказка + ИнформацияОПоследнейСинхронизацииExtendedTooltip 78 Label true @@ -255,7 +255,7 @@ true - ПерейтиККонфликтамРасширеннаяПодсказка + ПерейтиККонфликтамExtendedTooltip 79 Label true @@ -283,7 +283,7 @@ Группа - Группа1РасширеннаяПодсказка + Группа1ExtendedTooltip 77 Label true @@ -310,7 +310,7 @@ Группа - Группа2РасширеннаяПодсказка + Группа2ExtendedTooltip 73 Label true @@ -340,7 +340,7 @@ 13 <key>ru</key> - <value>При начале работы программы</value> + <value>При начале работы приложения</value> true true @@ -356,7 +356,7 @@ СинхронизироватьДанныеПриНачалеРаботыПрограммыПриИзменении - СинхронизироватьДанныеПриНачалеРаботыПрограммыРасширеннаяПодсказка + СинхронизироватьДанныеПриНачалеРаботыПрограммыExtendedTooltip 82 Label true @@ -382,7 +382,7 @@ 18 <key>ru</key> - <value>При завершении работы программы</value> + <value>При завершении работы приложения</value> true true @@ -398,7 +398,7 @@ СинхронизироватьДанныеПриЗавершенииРаботыПрограммыПриИзменении - СинхронизироватьДанныеПриЗавершенииРаботыПрограммыРасширеннаяПодсказка + СинхронизироватьДанныеПриЗавершенииРаботыПрограммыExtendedTooltip 83 Label true @@ -425,8 +425,8 @@ <key>ru</key> <value>Если ведется одновременная работа с приложением в Интернете, -то рекомендуется получать актуальные данные каждый раз при начале работы программы -и отправлять данные обратно при завершении работы с программой.</value> +то рекомендуется получать актуальные данные каждый раз при начале работы приложения +и отправлять данные обратно при завершении работы с приложением.</value> true true @@ -434,7 +434,7 @@ true - Декорация9РасширеннаяПодсказка + Декорация9ExtendedTooltip 84 Label true @@ -467,7 +467,7 @@ Группа - Группа10РасширеннаяПодсказка + Группа10ExtendedTooltip 81 Label true @@ -516,7 +516,7 @@ СинхронизироватьДанныеПоРасписаниюПриИзменении - СинхронизироватьДанныеПоРасписаниюРасширеннаяПодсказка + СинхронизироватьДанныеПоРасписаниюExtendedTooltip 88 Label true @@ -558,7 +558,7 @@ ВариантРасписанияСинхронизацииДанныхПриИзменении - ВариантРасписанияСинхронизацииДанныхРасширеннаяПодсказка + ВариантРасписанияСинхронизацииДанныхExtendedTooltip 89 Label true @@ -601,7 +601,7 @@ true - ИзменитьРасписаниеСинхронизацииДанныхРасширеннаяПодсказка + ИзменитьРасписаниеСинхронизацииДанныхExtendedTooltip 90 Label true @@ -629,7 +629,7 @@ Группа - Группа4РасширеннаяПодсказка + Группа4ExtendedTooltip 87 Label true @@ -660,7 +660,7 @@ true - Декорация11РасширеннаяПодсказка + Декорация11ExtendedTooltip 91 Label true @@ -696,7 +696,7 @@ true - НастроитьПодключениеРасширеннаяПодсказка + НастроитьПодключениеExtendedTooltip 92 Label true @@ -836,7 +836,7 @@ Настройка автоматической синхронизации - НастройкаАвтоматическойСинхронизацииРасширеннаяПодсказка + НастройкаАвтоматическойСинхронизацииExtendedTooltip 86 Label true @@ -864,7 +864,7 @@ Группа - Группа11РасширеннаяПодсказка + Группа11ExtendedTooltip 85 Label true @@ -894,7 +894,7 @@ true - НастройкаСинхронизацииДанныхРасширеннаяПодсказка + НастройкаСинхронизацииДанныхExtendedTooltip 80 Label true @@ -955,7 +955,7 @@ Синхронизация данных - СинхронизацияДанныхРасширеннаяПодсказка + СинхронизацияДанныхExtendedTooltip 69 Label true @@ -986,7 +986,7 @@ true - Декорация2РасширеннаяПодсказка + Декорация2ExtendedTooltip 95 Label true @@ -1015,7 +1015,7 @@ 32 <key>ru</key> - <value>Получено обновление программы из Интернета. + <value>Получено обновление приложения из Интернета. Необходимо установить полученное обновление, после чего синхронизация будет продолжена.</value> true @@ -1024,7 +1024,7 @@ true - ПоясняющаяНадписьПолученоОбновлениеРасширеннаяПодсказка + ПоясняющаяНадписьПолученоОбновлениеExtendedTooltip 96 Label true @@ -1055,7 +1055,7 @@ Группа - Группа6РасширеннаяПодсказка + Группа6ExtendedTooltip 94 Label true @@ -1085,7 +1085,7 @@ true - УстановитьОбновлениеРасширеннаяПодсказка + УстановитьОбновлениеExtendedTooltip 97 Label true @@ -1119,7 +1119,7 @@ true - ИнформацияОПоследнейСинхронизации1РасширеннаяПодсказка + ИнформацияОПоследнейСинхронизации1ExtendedTooltip 99 Label true @@ -1156,7 +1156,7 @@ true - ПерейтиККонфликтам1РасширеннаяПодсказка + ПерейтиККонфликтам1ExtendedTooltip 100 Label true @@ -1184,7 +1184,7 @@ Группа - Группа5РасширеннаяПодсказка + Группа5ExtendedTooltip 98 Label true @@ -1211,7 +1211,7 @@ Получено обновление конфигурации - ПолученоОбновлениеКонфигурацииРасширеннаяПодсказка + ПолученоОбновлениеКонфигурацииExtendedTooltip 93 Label true @@ -1272,7 +1272,7 @@ <key>ru</key> <value>Изменены расширения конфигурации. -Чтобы продолжить работу с учетом сделанных изменений, необходимо перезапустить программу.</value> +Чтобы продолжить работу с учетом сделанных изменений, необходимо перезапустить приложение.</value> true true @@ -1333,7 +1333,7 @@ 135 <key>ru</key> - <value>Перезапустить программу</value> + <value>Перезапустить приложение</value> true true @@ -1493,7 +1493,7 @@ Автономная работа - АвтономнаяРаботаРасширеннаяПодсказка + АвтономнаяРаботаExtendedTooltip 68 Label true @@ -1558,7 +1558,7 @@ СинхронизироватьДанныеПриЗавершенииРаботыПрограммы <key>ru</key> - <value>При завершении работы программы</value> + <value>При завершении работы приложения</value> 2 @@ -1575,7 +1575,7 @@ СинхронизироватьДанныеПриНачалеРаботыПрограммы <key>ru</key> - <value>При начале работы программы</value> + <value>При начале работы приложения</value> 3 @@ -1688,6 +1688,20 @@ true
          + + ИдентификаторТранспорта + 11 + + String + + + + true + + + true + + ВыполнитьСинхронизациюДанных @@ -1820,12 +1834,12 @@ <name>ПерезапуститьПрограмму</name> <title> <key>ru</key> - <value>Перезапустить программу</value> + <value>Перезапустить приложение</value> 7 ru - Перезапустить программу + Перезапустить приложение true diff --git a/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl b/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl index 30f41d77f..14fd2cf57 100644 --- a/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl +++ b/SSL/src/CommonForms/АвтономнаяРабота/Module.bsl @@ -19,6 +19,8 @@ ПриложениеВСервисе = АвтономнаяРаботаСлужебный.ПриложениеВСервисе(); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(ПриложениеВСервисе); + РегламентноеЗадание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание( Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете); @@ -82,6 +84,30 @@ &НаКлиенте Процедура ВыполнитьСинхронизациюДанных(Команда) + ПараметрыАутентификации = ТранспортСообщенийОбменаКлиент.ПараметрыАутентификации(); + ПараметрыАутентификации.Корреспондент = ПриложениеВСервисе; + ПараметрыАутентификации.ИдентификаторТранспорта = ИдентификаторТранспорта; + + ТребуетсяАутентификация = Ложь; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ЗавершениеАутентификации", ЭтотОбъект); + ТранспортСообщенийОбменаКлиент.НачалоАутентификации(ПараметрыАутентификации, ТребуетсяАутентификация, ОповещениеОЗакрытии); + + Если Не ТребуетсяАутентификация Тогда + ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(ПриложениеВСервисе, ЭтотОбъект, АдресДляВосстановленияПароляУчетнойЗаписи); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеАутентификации(ДанныеАутентификации, ДополнительныеПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(ДанныеАутентификации) Тогда + Возврат; + КонецЕсли; + + ТранспортСообщенийОбменаВызовСервера.УстановитьПарольСинхронизацииДанных( + ПриложениеВСервисе, ДанныеАутентификации); + ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(ПриложениеВСервисе, ЭтотОбъект, АдресДляВосстановленияПароляУчетнойЗаписи); КонецПроцедуры @@ -250,9 +276,7 @@ КонецЕсли; - НастройкиТранспортаWS = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(ПриложениеВСервисе); - - ПарольПользователяСохраняется = НастройкиТранспортаWS.WSЗапомнитьПароль; + ПарольПользователяСохраняется = Истина; СинхронизироватьДанныеПоРасписанию = РегламентныеЗаданияСервер.РегламентноеЗаданиеИспользуется(Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете); @@ -399,14 +423,14 @@ &НаКлиенте Процедура НастроитьПодключениеКСервису(НастройкаАвтоматическойСинхронизации = Ложь) - Отбор = Новый Структура("Корреспондент", ПриложениеВСервисе); - ЗначенияЗаполнения = Новый Структура("Корреспондент", ПриложениеВСервисе); - ПараметрыФормы = Новый Структура; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Корреспондент", ПриложениеВСервисе); + ПараметрыФормы.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); ПараметрыФормы.Вставить("АдресДляВосстановленияПароляУчетнойЗаписи", АдресДляВосстановленияПароляУчетнойЗаписи); - ПараметрыФормы.Вставить("НастройкаАвтоматическойСинхронизации", НастройкаАвтоматическойСинхронизации); + ПараметрыФормы.Вставить("НастройкаАвтоматическойСинхронизации", НастройкаАвтоматическойСинхронизации); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект, "НастройкаПодключенияКСервису", ПараметрыФормы); + ОткрытьФорму("Справочник.НастройкиТранспортаСообщенийОбмена.Форма.НастройкаПодключенияКСервису", + ПараметрыФормы, ЭтаФорма,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); ОбновитьВидимостьНаСервере(); diff --git a/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form b/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form index 322375f4f..c026888d6 100644 --- a/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form +++ b/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form @@ -18,7 +18,7 @@ true - Декорация2РасширеннаяПодсказка + Декорация2ExtendedTooltip 119 Label true @@ -59,7 +59,7 @@ true - Декорация1РасширеннаяПодсказка + Декорация1ExtendedTooltip 121 Label true @@ -94,7 +94,7 @@ true - Декорация4РасширеннаяПодсказка + Декорация4ExtendedTooltip 122 Label true @@ -127,7 +127,7 @@ true - КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятиеРасширеннаяПодсказка + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятиеExtendedTooltip 123 Label true @@ -154,7 +154,7 @@ Группа - Группа4РасширеннаяПодсказка + Группа4ExtendedTooltip 120 Label true @@ -182,7 +182,7 @@ Группа - Группа1РасширеннаяПодсказка + Группа1ExtendedTooltip 118 Label true @@ -215,7 +215,7 @@ true - СоздатьАвтономноеРабочееМестоРасширеннаяПодсказка + СоздатьАвтономноеРабочееМестоExtendedTooltip 125 Label true @@ -246,7 +246,7 @@ true - Декорация3РасширеннаяПодсказка + Декорация3ExtendedTooltip 126 Label true @@ -276,7 +276,7 @@ Группа - Группа8РасширеннаяПодсказка + Группа8ExtendedTooltip 124 Label true @@ -307,7 +307,7 @@ true - КакНастроитьАвтономноеРабочееМестоРасширеннаяПодсказка + КакНастроитьАвтономноеРабочееМестоExtendedTooltip 127 Label true @@ -335,7 +335,7 @@ Автономная работа не настроена - АвтономнаяРаботаНеНастроенаРасширеннаяПодсказка + АвтономнаяРаботаНеНастроенаExtendedTooltip 117 Label true @@ -373,7 +373,7 @@ true - Декорация5РасширеннаяПодсказка + Декорация5ExtendedTooltip 131 Label true @@ -411,7 +411,7 @@ None - АвтономноеРабочееМестоРасширеннаяПодсказка + АвтономноеРабочееМестоExtendedTooltip 132 Label true @@ -445,7 +445,7 @@ Группа - Группа5РасширеннаяПодсказка + Группа5ExtendedTooltip 130 Label true @@ -478,7 +478,7 @@ true - ИнформацияОПоследнейСинхронизацииРасширеннаяПодсказка + ИнформацияОПоследнейСинхронизацииExtendedTooltip 134 Label true @@ -515,7 +515,7 @@ true - ПерейтиККонфликтамРасширеннаяПодсказка + ПерейтиККонфликтамExtendedTooltip 135 Label true @@ -543,7 +543,7 @@ Группа - Группа3РасширеннаяПодсказка + Группа3ExtendedTooltip 133 Label true @@ -579,7 +579,7 @@ true - ИзменитьАвтономноеРабочееМестоРасширеннаяПодсказка + ИзменитьАвтономноеРабочееМестоExtendedTooltip 137 Label true @@ -670,7 +670,7 @@ true - ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка + ОписаниеОграниченийПередачиДанныхExtendedTooltip 138 Label true @@ -701,7 +701,7 @@ Группа - Группа2РасширеннаяПодсказка + Группа2ExtendedTooltip 136 Label true @@ -734,7 +734,7 @@ true - ПрекратитьСинхронизациюСАвтономнымРабочимМестомРасширеннаяПодсказка + ПрекратитьСинхронизациюСАвтономнымРабочимМестомExtendedTooltip 140 Label true @@ -766,7 +766,7 @@ true - Декорация8РасширеннаяПодсказка + Декорация8ExtendedTooltip 141 Label true @@ -797,7 +797,7 @@ Группа - Группа6РасширеннаяПодсказка + Группа6ExtendedTooltip 139 Label true @@ -825,7 +825,7 @@ Группа - Группа9РасширеннаяПодсказка + Группа9ExtendedTooltip 129 Label true @@ -860,7 +860,7 @@ true - СоздатьАвтономноеРабочееМесто1РасширеннаяПодсказка + СоздатьАвтономноеРабочееМесто1ExtendedTooltip 143 Label true @@ -891,7 +891,7 @@ true - Декорация7РасширеннаяПодсказка + Декорация7ExtendedTooltip 144 Label true @@ -921,7 +921,7 @@ Группа - Группа7РасширеннаяПодсказка + Группа7ExtendedTooltip 142 Label true @@ -952,7 +952,7 @@ true - КакНастроитьАвтономноеРабочееМесто1РасширеннаяПодсказка + КакНастроитьАвтономноеРабочееМесто1ExtendedTooltip 145 Label true @@ -980,7 +980,7 @@ Одно автономное рабочее место - ОдноАвтономноеРабочееМестоРасширеннаяПодсказка + ОдноАвтономноеРабочееМестоExtendedTooltip 128 Label true @@ -1012,7 +1012,7 @@ true - ПерейтиККонфликтам1РасширеннаяПодсказка + ПерейтиККонфликтам1ExtendedTooltip 147 Label true @@ -1071,7 +1071,7 @@ СписокАвтономныхРабочихМест.АвтономноеРабочееМесто - СписокАвтономныхРабочихМестАвтономноеРабочееМестоРасширеннаяПодсказка + СписокАвтономныхРабочихМестАвтономноеРабочееМестоExtendedTooltip 167 Label true @@ -1116,7 +1116,7 @@ СписокАвтономныхРабочихМест.ПредставлениеДатыСинхронизации - СписокАвтономныхРабочихМестПредставлениеДатыСинхронизацииРасширеннаяПодсказка + СписокАвтономныхРабочихМестПредставлениеДатыСинхронизацииExtendedTooltip 168 Label true @@ -1169,7 +1169,7 @@ true - СписокАвтономныхРабочихМестСоздатьАвтономноеРабочееМестоРасширеннаяПодсказка + СписокАвтономныхРабочихМестСоздатьАвтономноеРабочееМестоExtendedTooltip 154 Label true @@ -1199,7 +1199,7 @@ true - СписокАвтономныхРабочихМестИзменитьАвтономноеРабочееМестоВСпискеРасширеннаяПодсказка + СписокАвтономныхРабочихМестИзменитьАвтономноеРабочееМестоВСпискеExtendedTooltip 155 Label true @@ -1229,7 +1229,7 @@ true - СписокАвтономныхРабочихМестПрекратитьСинхронизациюСАвтономнымРабочимМестомРасширеннаяПодсказка + СписокАвтономныхРабочихМестПрекратитьСинхронизациюСАвтономнымРабочимМестомExtendedTooltip 156 Label true @@ -1297,7 +1297,7 @@ true - СписокАвтономныхРабочихМестОбновитьРасширеннаяПодсказка + СписокАвтономныхРабочихМестОбновитьExtendedTooltip 158 Label true @@ -1325,7 +1325,7 @@ Автономных рабочих мест группа 3 - СписокАвтономныхРабочихМестГруппа3РасширеннаяПодсказка + СписокАвтономныхРабочихМестГруппа3ExtendedTooltip 157 Label true @@ -1348,7 +1348,7 @@ true - СписокАвтономныхРабочихМестНайтиРасширеннаяПодсказка + СписокАвтономныхРабочихМестНайтиExtendedTooltip 160 Label true @@ -1375,7 +1375,7 @@ true - СписокАвтономныхРабочихМестОтменитьПоискРасширеннаяПодсказка + СписокАвтономныхРабочихМестОтменитьПоискExtendedTooltip 161 Label true @@ -1403,7 +1403,7 @@ Автономных рабочих мест группа 1 - СписокАвтономныхРабочихМестГруппа1РасширеннаяПодсказка + СписокАвтономныхРабочихМестГруппа1ExtendedTooltip 159 Label true @@ -1426,7 +1426,7 @@ true - СписокАвтономныхРабочихМестКопироватьВБуферОбменаРасширеннаяПодсказка + СписокАвтономныхРабочихМестКопироватьВБуферОбменаExtendedTooltip 163 Label true @@ -1453,7 +1453,7 @@ true - СписокАвтономныхРабочихМестВывестиСписокРасширеннаяПодсказка + СписокАвтономныхРабочихМестВывестиСписокExtendedTooltip 164 Label true @@ -1481,7 +1481,7 @@ Автономных рабочих мест группа 2 - СписокАвтономныхРабочихМестГруппа2РасширеннаяПодсказка + СписокАвтономныхРабочихМестГруппа2ExtendedTooltip 162 Label true @@ -1501,7 +1501,7 @@ true - СписокАвтономныхРабочихМестКнопка1РасширеннаяПодсказка + СписокАвтономныхРабочихМестКнопка1ExtendedTooltip 165 Label true @@ -1596,7 +1596,7 @@ - СписокАвтономныхРабочихМестРасширеннаяПодсказка + СписокАвтономныхРабочихМестExtendedTooltip 166 Label true @@ -1621,7 +1621,7 @@ true - СписокАвтономныхРабочихМестСоздатьАвтономноеРабочееМесто1РасширеннаяПодсказка + СписокАвтономныхРабочихМестСоздатьАвтономноеРабочееМесто1ExtendedTooltip 148 Label true @@ -1651,7 +1651,7 @@ true - СписокАвтономныхРабочихМестИзменитьАвтономноеРабочееМестоВСписке1РасширеннаяПодсказка + СписокАвтономныхРабочихМестИзменитьАвтономноеРабочееМестоВСписке1ExtendedTooltip 149 Label true @@ -1681,7 +1681,7 @@ true - СписокАвтономныхРабочихМестПрекратитьСинхронизациюСАвтономнымРабочимМестом1РасширеннаяПодсказка + СписокАвтономныхРабочихМестПрекратитьСинхронизациюСАвтономнымРабочимМестом1ExtendedTooltip 150 Label true @@ -1744,7 +1744,7 @@ true - СписокАвтономныхРабочихМестКопироватьВБуферОбмена1РасширеннаяПодсказка + СписокАвтономныхРабочихМестКопироватьВБуферОбмена1ExtendedTooltip 152 Label true @@ -1771,7 +1771,7 @@ true - СписокАвтономныхРабочихМестВывестиСписок1РасширеннаяПодсказка + СписокАвтономныхРабочихМестВывестиСписок1ExtendedTooltip 153 Label true @@ -1799,7 +1799,7 @@ Автономных рабочих мест группа 4 - СписокАвтономныхРабочихМестГруппа4РасширеннаяПодсказка + СписокАвтономныхРабочихМестГруппа4ExtendedTooltip 151 Label true @@ -1850,7 +1850,7 @@ true - КакНастроитьАвтономноеРабочееМесто2РасширеннаяПодсказка + КакНастроитьАвтономноеРабочееМесто2ExtendedTooltip 169 Label true @@ -1878,7 +1878,7 @@ Несколько автономных рабочих мест - НесколькоАвтономныхРабочихМестРасширеннаяПодсказка + НесколькоАвтономныхРабочихМестExtendedTooltip 146 Label true @@ -1905,7 +1905,7 @@ true - АвтономнаяРаботаРасширеннаяПодсказка + АвтономнаяРаботаExtendedTooltip 116 Label true diff --git a/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Module.bsl index 993ff36c9..afe81bd3c 100644 --- a/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Module.bsl @@ -18,7 +18,7 @@ ИначеЕсли Не АвтономнаяРаботаСлужебный.АвтономнаяРаботаПоддерживается() Тогда - ВызватьИсключение НСтр("ru = 'Возможность автономной работы в программе не предусмотрена.'"); + ВызватьИсключение НСтр("ru = 'Возможность автономной работы в приложении не предусмотрена.'"); КонецЕсли; @@ -62,7 +62,7 @@ Оповещение = Новый ОписаниеОповещения("СоздатьАвтономноеРабочееМестоЗавершение", ЭтотОбъект); Если ПоддерживаетсяПередачаБольшихФайлов Тогда - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, "", Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, "", Ложь); Иначе ВыполнитьОбработкуОповещения(Оповещение, Истина); КонецЕсли; diff --git a/SSL/src/CommonForms/АдреснаяКнига/Help/ru.html b/SSL/src/CommonForms/АдреснаяКнига/Help/ru.html index 6a0fc3cd8..fd6b84aca 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Help/ru.html +++ b/SSL/src/CommonForms/АдреснаяКнига/Help/ru.html @@ -1,36 +1,36 @@

          В адресной книге можно выполнить поиск и подбор контактов для исходящих электронных писем.

          -

          Для удобства работы с контактами приложение формирует единую адресную книгу на основании контактной информации.

          -

          Открывается по кнопке  Выбрать из полей Кому, Копии, Скрытые исходящего письма.

          +

          Для удобства работы с контактами приложение формирует единую адресную книгу на основании контактной информации.

          +

          Открывается по кнопке Выбрать из полей Кому, Копии, Скрытые исходящего письма.

          Состоит из двух частей:

          • Левая часть содержит набор вкладок для выбора контактов: -
              • Поиск контактов - если контактов много, то на вкладке можно осуществить поиск нужного контакта в приложении по нескольким признакам: +
                  • Поиск контактов - если контактов много, то на вкладке можно осуществить поиск нужного контакта в приложении по нескольким признакам:
                      • По адресу электронной почты (По email);
                      • По доменному имени почтового сервера;
                      • -
                      • По строке, входящей в наименование контакта. Для поиска контактов по строке используется полнотекстовый поиск приложения (в этом случае поиск осуществляется по всем реквизитам контактов); +
                      • По строке, входящей в наименование контакта. Для поиска контактов по строке используется полнотекстовый поиск приложения (в этом случае поиск осуществляется по всем реквизитам контактов);
                      • по начальным символам наименования контакта (Начинается с).
                      • В нижней части окна поиска выводится информация об актуальности индекса полнотекстового поиска и кнопка Обновить, которая становится активной, если индекс неактуален.
                    • Выберите способ поиска, напишите выражение для поиска и нажмите кнопку Найти. Будут подобраны контакты, удовлетворяющие условию.
                  • -
                  • Пользователи - подбор контакта из списка пользователей приложения. +
                  • Пользователи - подбор контакта из списка пользователей приложения.
                    • Вкладки могут включать и другие списки, например, список партнеров.
                    • Если в списке много элементов, можно использовать команду Найти. Можно работать со списком и использовать его возможности, вводить элементы.
                  • -
                  • Контакты по предмету - вкладка становится доступной, если в исходящем электронном письме заполнено поле Предмет. Приложение автоматически подбирает контакты, связанные с предметом. Данная вкладка содержит список контактов, которые фигурируют в самом предмете, а также во всех документах взаимодействий, где этот предмет указан.
                • Включите флажок в нижней части списка, для того чтобы показывать Только контакты с адресами. Применяется только к тем спискам, в которых есть колонка Адрес. Такая возможность может быть полезна, если в списках много контактов, при этом не все заполнены.
                • -
                • Двойной щелчок мыши по нужному контакту добавит запись о нем в правую часть адресной книги. Также можно использовать стрелки ">" и "<" или "<<" для добавления или удаления контактов.
              • -
              • Правая часть содержит список контактов для добавления в исходящее электронное письмо. -
                • Список состоит из колонок: -
                  • В колонке Группа можно изменить поле письма, в которое будут добавлены контакты (Кому, Копии, Скрытые, Получатели ответа). По умолчанию установлена группа Кому. +
                  • Контакты по предмету - вкладка становится доступной, если в исходящем электронном письме заполнено поле Предмет. Приложение автоматически подбирает контакты, связанные с предметом. Данная вкладка содержит список контактов, которые фигурируют в самом предмете, а также во всех документах взаимодействий, где этот предмет указан.
                • Включите флажок в нижней части списка, для того чтобы показывать Только контакты с адресами. Применяется только к тем спискам, в которых есть колонка Адрес. Такая возможность может быть полезна, если в списках много контактов, при этом не все заполнены.
                • +
                • Двойной щелчок мыши по нужному контакту добавит запись о нем в правую часть адресной книги. Также можно использовать стрелки ">" и "<" или "<<" для добавления или удаления контактов.
              • +
              • Правая часть содержит список контактов для добавления в исходящее электронное письмо. +
                • Список состоит из колонок: +
                  • В колонке Группа можно изменить поле письма, в которое будут добавлены контакты (Кому, Копии, Скрытые, Получатели ответа). По умолчанию установлена группа Кому.
                  • -
                  • В колонке Адрес проставляется адрес электронной почты добавленного контакта. Если адреса электронной почты в приложении нет, можно добавить его в этой колонке. +
                  • В колонке Адрес проставляется адрес электронной почты добавленного контакта. Если адреса электронной почты в приложении нет, можно добавить его в этой колонке.
                  • В колонке Представление проставляется наименование контакта.
                • -
                • С помощью контекстного меню правой части адресной книги нужные контакты можно Найти в списке, Найти по адресу, Найти по представлению, Выбрать адрес, указанный в контакте (поиск осуществляется в левой части адресной книги), а также разместить адреса в нужные группы.
              • -
              • Если контакт не найден в приложении, то его можно вставить в правый список вручную с помощью кнопки Добавить получателя, указав адрес электронной почты и представление контакта. Добавить строку в список можно также клавишей Ins. +
              • С помощью контекстного меню правой части адресной книги нужные контакты можно Найти в списке, Найти по адресу, Найти по представлению, Выбрать адрес, указанный в контакте (поиск осуществляется в левой части адресной книги), а также разместить адреса в нужные группы.
              +
            • Если контакт не найден в приложении, то его можно вставить в правый список вручную с помощью кнопки Добавить получателя, указав адрес электронной почты и представление контакта. Добавить строку в список можно также клавишей Ins.
            • -
            • С помощью команд меню Еще можно  Удалить контакт из списка или поменять контакты местами.

            Добавление контактов в исходящее электронное письмо

            +
          • С помощью команд меню Еще можно Удалить контакт из списка или поменять контакты местами.

          Добавление контактов в исходящее электронное письмо

          • Для того чтобы добавить контакт в соответствующее поле исходящего письма, выделите нужную строку, нажмите кнопку Выбрать. Также можно воспользоваться двойным щелчком мыши.
          • Для одновременного добавления нескольких контактов выделите их и нажмите кнопку Выбрать.

          См. также:

          diff --git a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl index 73a76079d..4d15a4493 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Module.bsl +++ b/SSL/src/CommonForms/АдреснаяКнига/Module.bsl @@ -547,8 +547,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции осуществления поиска. +#Область ПроцедурыИФункцииОсуществленияПоиска &НаСервере Функция НайтиКонтакты() @@ -578,8 +577,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее &НаСервере Процедура ЗаполнитьТаблицуПолучателей() @@ -830,3 +830,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html index b67b24617..be89a572d 100644 --- a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html @@ -1,9 +1,9 @@ -

          При копировании информационной базы в другое местоположение возможны ситуации, когда обе информационные базы (и исходная и скопированная) продолжают взаимодействовать с внешними ресурсами (например, выполнение рассылки отчетов, синхронизация данных с другими приложениями, отправка или получение почты и т.п.). Для предотвращения таких ситуаций при изменении местоположения информационной базы блокируются все подобные регламентные задания. При первом входе в перемещенную базу администратор должен принять решение о ее роли: информационная база была перемещена (тогда работа с внешними ресурсами будет возобновлена) или это копия информационной базы (сохраняется блокировка работы с внешними ресурсами).

          +

          При копировании информационной базы в другое местоположение возможны ситуации, когда обе информационные базы (и исходная и скопированная) продолжают взаимодействовать с внешними ресурсами (например, выполнение рассылки отчетов, синхронизация данных с другими приложениями, отправка или получение почты и т.п.). Для предотвращения таких ситуаций при изменении местоположения информационной базы блокируются все подобные регламентные задания. При первом входе в перемещенную базу администратор должен принять решение о ее роли: информационная база была перемещена (тогда работа с внешними ресурсами будет возобновлена) или это копия информационной базы (сохраняется блокировка работы с внешними ресурсами).

          Как определяется факт перемещения информационной базы

          -

          При определении факта перемещения информационной базы в первую очередь проверяется изменение типа расположения информационной базы: с файлового на клиент-серверный и наоборот. Если тип расположения изменился, то она считается перемещенной. Если тип расположения не изменился, то сравнивается строка соединения информационной базы. Если строка соединения не изменилась, то дальнейшая проверка прекращается и база считается не перемещенной. Дальнейшая проверка зависит от типа расположения базы:

          +

          При определении факта перемещения информационной базы в первую очередь проверяется изменение типа расположения информационной базы: с файлового на клиент-серверный и наоборот. Если тип расположения изменился, то она считается перемещенной. Если тип расположения не изменился, то сравнивается строка соединения информационной базы. Если строка соединения не изменилась, то дальнейшая проверка прекращается и база считается не перемещенной. Дальнейшая проверка зависит от типа расположения базы:

        • -
          В файловой информационной базе факт перемещения определяется по служебному файлу DoNotCopy.txt, автоматически создаваемому приложением в каталоге информационной базы. Внутри файла находится идентификатор информационной базы. Если файл отсутствует или идентификатор в файле отличается от идентификатора в базе, то информационная база считается перемещенной.
          +
          В файловой информационной базе факт перемещения определяется по служебному файлу DoNotCopy.txt, автоматически создаваемому приложением в каталоге информационной базы. Внутри файла находится идентификатор информационной базы. Если файл отсутствует или идентификатор в файле отличается от идентификатора в базе, то информационная база считается перемещенной.
        • В клиент-серверной информационной базе факт перемещения определяется:
          • @@ -14,10 +14,10 @@
            • Если информационная база будет использоваться для ведения учета, нажмите кнопку Информационная база перемещена.
            • Если это копия информационная базы, нажмите кнопку Это копия информационной базы.
            В серверной информационной базе:
            -
            • Для того чтобы окно о перемещении информационной базы не появлялось у всех пользователей, необходимо первому пользователю, у которого появилось данное окно, выключить флажок Еще - Проверять имя сервера. 
            • +
              • Для того чтобы окно о перемещении информационной базы не появлялось у всех пользователей, необходимо первому пользователю, у которого появилось данное окно, выключить флажок Еще - Проверять имя сервера.
              • Данная настройка перенесется остальным пользователям централизованно.

            -
            См. также:
            +
            См. также:

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html index f334d5517..e0d240d1a 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html @@ -1,9 +1,9 @@

            Предназначен для ввода нескольких значений в список для отбора.

            -

            Открывается из вкладки Отборы окна Настройки отчета по двойному щелчку мыши в столбце Значение для операций В списке, Не в списке, В группе из списка, Не в группе из списка.

            +

            Открывается из вкладки Отборы окна Настройки отчета по двойному щелчку мыши в столбце Значение для операций В списке, Не в списке, В группе из списка, Не в группе из списка.

            Подбор значений

            • -
              Для добавления нескольких значений в список нажмите кнопку Подбор. Выберите несколько значений из соответствующего списка.
              +
              Для добавления нескольких значений в список нажмите кнопку Подбор. Выберите несколько значений из соответствующего списка.
            • Для того чтобы выбирать значения по одному, выполните команду Добавить меню Еще.
            • diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl index fbc3dea55..eb48a8a99 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl @@ -284,8 +284,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Конструкторы. +#Область Конструкторы // Конструктор описания свойств элемента списка значений. // @@ -309,4 +308,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Help/ru.html b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Help/ru.html index 030e6324d..b183bf4c4 100644 --- a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Help/ru.html +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Help/ru.html @@ -1,6 +1,6 @@ Предназначена для перевода текстовых реквизитов на другие языки. -
              У таких реквизитов есть кнопка, при нажатии на которую открывается ввод на разных языках. Необходимо ее нажать и ввести значение на нужном языке, перевести можно вручную. 
              -
              Если подключен сервис автоматического перевода, появляется возможность автоматического перевода реквизитов на другие языки. Нажмите кнопку Перевести автоматически.
              +
              У таких реквизитов есть кнопка, при нажатии на которую открывается ввод на разных языках. Необходимо ее нажать и ввести значение на нужном языке, перевести можно вручную.
              +
              Если подключен сервис автоматического перевода, появляется возможность автоматического перевода реквизитов на другие языки. Нажмите кнопку Перевести автоматически.
              \ No newline at end of file diff --git a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl index 98ef669b8..d48194016 100644 --- a/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl +++ b/SSL/src/CommonForms/ВводНаРазныхЯзыках/Module.bsl @@ -31,27 +31,11 @@ КонецЕсли; СуффиксОсновногоЯзыка = ""; - СуффиксДополнительногоЯзыка1 = "Язык1"; - СуффиксДополнительногоЯзыка2 = "Язык2"; - - Если Не ОбщегоНазначения.ЭтоОсновнойЯзык() Тогда СуффиксОсновногоЯзыка = МультиязычностьСервер.СуффиксТекущегоЯзыка(); - Если СуффиксОсновногоЯзыка = "Язык1" Тогда - СуффиксДополнительногоЯзыка1 = ""; - СуффиксОсновногоЯзыка = "Язык1"; - ИначеЕсли СуффиксОсновногоЯзыка = "Язык2" Тогда - СуффиксДополнительногоЯзыка2 = ""; - СуффиксОсновногоЯзыка = "Язык2"; - КонецЕсли; - КонецЕсли; - ИспользуетсяПервыйДополнительныйЯзык = МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() - И ЗначениеЗаполнено(МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы()); - - ИспользуетсяВторойДополнительныйЯзык = МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() - И ЗначениеЗаполнено(МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы()); + СведенияОбЯзыках = МультиязычностьСервер.СведенияОЯзыках(); НаборЯзыков = Новый ТаблицаЗначений; НаборЯзыков.Колонки.Добавить("КодЯзыка", ОбщегоНазначения.ОписаниеТипаСтрока(10)); @@ -65,12 +49,15 @@ ИспользуемыеЯзыки = Новый Соответствие; ИспользуемыеЯзыки.Вставить(МультиязычностьСервер.КодОсновногоЯзыка(), Истина); - Если ИспользуетсяПервыйДополнительныйЯзык Тогда - ИспользуемыеЯзыки.Вставить(МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(), Истина); - КонецЕсли; - Если ИспользуетсяВторойДополнительныйЯзык Тогда - ИспользуемыеЯзыки.Вставить(МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(), Истина); - КонецЕсли; + + ИспользуетсяДополнительныйЯзык = Ложь; + + Для каждого ДанныеОЯзыке Из СведенияОбЯзыках.Используется Цикл + Если ДанныеОЯзыке.Значение Тогда + ИспользуемыеЯзыки.Вставить(СведенияОбЯзыках[ДанныеОЯзыке.Ключ], Истина); + ИспользуетсяДополнительныйЯзык = Истина; + КонецЕсли; + КонецЦикла; Для Каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл Если ИспользуемыеЯзыки[ЯзыкКонфигурации.КодЯзыка] <> Истина Тогда @@ -89,10 +76,22 @@ Если ЯзыкКонфигурации.КодЯзыка = МультиязычностьСервер.КодОсновногоЯзыка() Тогда ДанныеЯзыка.Суффикс = СуффиксОсновногоЯзыка; - ИначеЕсли ЯзыкКонфигурации.КодЯзыка = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы() Тогда - ДанныеЯзыка.Суффикс = СуффиксДополнительногоЯзыка1; - ИначеЕсли ЯзыкКонфигурации.КодЯзыка = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы() Тогда - ДанныеЯзыка.Суффикс = СуффиксДополнительногоЯзыка2; + Иначе + Для ПорядковыйНомерЯзыка = 1 По МультиязычностьПовтИсп.КоличествоДополнительныхЯзыков() Цикл + Если СтрСравнить(ЯзыкКонфигурации.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 Тогда + ДанныеЯзыка.Суффикс = ""; + Продолжить; + КонецЕсли; + + + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + + Если СтрСравнить(ЯзыкКонфигурации.КодЯзыка, СведенияОбЯзыках[СуффиксЯзыка]) = 0 Тогда + ДанныеЯзыка.Суффикс = СуффиксЯзыка; + Прервать; + КонецЕсли; + + КонецЦикла; КонецЕсли; КонецЦикла; @@ -159,39 +158,37 @@ Если МультиязычныеСтрокиВРеквизитах И ЛокализуемыеРеквизитыВШапке[Параметры.ИмяРеквизита] <> Неопределено - И (ИспользуетсяПервыйДополнительныйЯзык - ИЛИ ИспользуетсяВторойДополнительныйЯзык) Тогда + И ИспользуетсяДополнительныйЯзык Тогда ОписаниеЯзыка = ОписаниеЯзыка(ОсновнойЯзык); Если ПустаяСтрока(СуффиксОсновногоЯзыка) Тогда ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; ИначеЕсли Параметры.Объект <> Неопределено Тогда ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксОсновногоЯзыка]; КонецЕсли; - Если ИспользуетсяПервыйДополнительныйЯзык Тогда - ОписаниеЯзыка = ОписаниеЯзыка(Константы.ДополнительныйЯзык1.Получить()); - Если ПустаяСтрока(СуффиксДополнительногоЯзыка1) Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; - ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1]; - ИначеЕсли Параметры.Объект <> Неопределено Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка1]; + Для Каждого ДополнительныйЯзык Из СведенияОбЯзыках.Используется Цикл + Если ДополнительныйЯзык.Значение Тогда + КодЯзыка = СведенияОбЯзыках[ДополнительныйЯзык.Ключ]; + Если ПустаяСтрока(КодЯзыка) Или СтрСравнить(ТекущийЯзык().КодЯзыка, КодЯзыка) = 0 Тогда + Продолжить; + КонецЕсли; + ОписаниеЯзыка = ОписаниеЯзыка(КодЯзыка); + + Если СтрСравнить(ОписаниеЯзыка.КодЯзыка, ТекущийЯзык().КодЯзыка) = 0 Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита]; + ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + ДополнительныйЯзык.Ключ] + ИначеЕсли Параметры.Объект <> Неопределено Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + ДополнительныйЯзык.Ключ]; + ИначеЕсли ПустаяСтрока(ЭтотОбъект[ОписаниеЯзыка.Имя]) Тогда + ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; + КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если ИспользуетсяВторойДополнительныйЯзык Тогда - ОписаниеЯзыка = ОписаниеЯзыка(Константы.ДополнительныйЯзык2.Получить()); - Если ПустаяСтрока(СуффиксДополнительногоЯзыка2) Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ТекущиеЗначение; - ИначеЕсли Параметры.ЗначенияРеквизитов <> Неопределено Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.ЗначенияРеквизитов[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2]; - ИначеЕсли Параметры.Объект <> Неопределено Тогда - ЭтотОбъект[ОписаниеЯзыка.Имя] = Параметры.Объект[Параметры.ИмяРеквизита + СуффиксДополнительногоЯзыка2]; - КонецЕсли; - КонецЕсли; + КонецЦикла; КонецЕсли; diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index c74c3009b..bd2073522 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -11,7 +11,6 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Размещение заголовка. Если Не ПустаяСтрока(Параметры.Заголовок) Тогда Заголовок = Параметры.Заголовок; ШиринаЗаголовка = 1.3 * СтрДлина(Заголовок); @@ -26,21 +25,10 @@ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; КонецЕсли; - // Картинка. Если Параметры.Картинка.Вид <> ВидКартинки.Пустая Тогда Элементы.Предупреждение.Картинка = Параметры.Картинка; - Иначе - // В этом случае можно скрыть картинку. - // Но для обратной совместимости реализован параметр ПоказыватьКартинку. - // Например, кто-то из потребителей мог открывать форму напрямую со своими параметрами, - // в обход API БФ, в частности СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю. - ПоказыватьКартинку = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПоказыватьКартинку", Истина); - Если Не ПоказыватьКартинку Тогда - Элементы.Предупреждение.Видимость = Ложь; - КонецЕсли; КонецЕсли; - // Размещение текста. Если ТипЗнч(Параметры.ТекстСообщения) = Тип("Строка") Тогда ТекстСообщения = Параметры.ТекстСообщения; Элементы.МногострочныйТекстСообщения.Видимость = Истина; @@ -49,14 +37,11 @@ Элементы.ТекстСообщенияФорматированнаяСтрока.Заголовок = Параметры.ТекстСообщения; Элементы.МногострочныйТекстСообщения.Видимость = Ложь; Элементы.ТекстСообщенияФорматированнаяСтрока.Видимость = Истина; - ИначеЕсли ТипЗнч(Параметры.ТекстСообщения) = Тип("Неопределено") Тогда - // Поддерживаем тип Неопределено для обратной совместимости. + ИначеЕсли ТипЗнч(Параметры.ТекстСообщения) = Тип("Неопределено") Тогда // для обратной совместимости ТекстСообщения = ""; Иначе - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( - Метаданные.ОбщиеФормы.Вопрос.ПолноеИмя(), - "ТекстСообщения", - Параметры.ТекстСообщения, + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(Метаданные.ОбщиеФормы.Вопрос.ПолноеИмя(), + "ТекстСообщения", Параметры.ТекстСообщения, Новый ОписаниеТипов("Строка, ФорматированнаяСтрока")); КонецЕсли; @@ -68,24 +53,17 @@ // Размещение флажка. Если ЗначениеЗаполнено(Параметры.ТекстФлажка) Тогда Элементы.БольшеНеЗадаватьЭтотВопрос.Заголовок = Параметры.ТекстФлажка; - ИначеЕсли НЕ ПравоДоступа("СохранениеДанныхПользователя", Метаданные) ИЛИ НЕ Параметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос Тогда + ИначеЕсли НЕ ПравоДоступа("СохранениеДанныхПользователя", Метаданные) + ИЛИ НЕ Параметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос Тогда Элементы.БольшеНеЗадаватьЭтотВопрос.Видимость = Ложь; КонецЕсли; // Размещение кнопок. ДобавитьКомандыИКнопкиНаФорму(Параметры.Кнопки); - - // Установка кнопки по умолчанию. - ВыделятьКнопкуПоУмолчанию = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВыделятьКнопкуПоУмолчанию", Истина); - УстановитьКнопкуПоУмолчанию(Параметры.КнопкаПоУмолчанию, ВыделятьКнопкуПоУмолчанию); - - // Установка кнопки для обратного отсчета. + УстановитьКнопкуПоУмолчанию(Параметры.КнопкаПоУмолчанию, Истина); УстановитьКнопкуОжидания(Параметры.КнопкаТаймаута); - - // Установка таймера обратного отсчета. ОжиданиеСчетчик = Параметры.Таймаут; - // Сброс размеров и положения окна этой формы. СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда @@ -128,8 +106,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура ПродолжитьОбратныйОтсчет() @@ -177,8 +154,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура ДобавитьКомандыИКнопкиНаФорму(Кнопки) @@ -309,3 +287,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form b/SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/Form.form similarity index 100% rename from SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Form.form rename to SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/Form.form diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/Module.bsl similarity index 100% rename from SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/Module.bsl rename to SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/Module.bsl diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/ВопросОбУстановкеРасширенияРаботыСФайлами.mdo b/SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/ВопросОбУстановкеРасширения1СПредприятия.mdo similarity index 83% rename from SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/ВопросОбУстановкеРасширенияРаботыСФайлами.mdo rename to SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/ВопросОбУстановкеРасширения1СПредприятия.mdo index 4bb052bdf..fc1fdd5db 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСФайлами/ВопросОбУстановкеРасширенияРаботыСФайлами.mdo +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширения1СПредприятия/ВопросОбУстановкеРасширения1СПредприятия.mdo @@ -1,6 +1,6 @@ - ВопросОбУстановкеРасширенияРаботыСФайлами + ВопросОбУстановкеРасширения1СПредприятия ru Вопрос об установке расширения для работы с 1С:Предприятием diff --git a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl index b98a151b7..93853169f 100644 --- a/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl +++ b/SSL/src/CommonForms/ВопросОбУстановкеРасширенияРаботыСКриптографией/Module.bsl @@ -28,14 +28,14 @@ &НаКлиенте Процедура УстановитьИПродолжить(Команда) - Закрыть(КодВозвратаДиалога.Да); + Закрыть(Истина); КонецПроцедуры &НаКлиенте Процедура Отмена(Команда) - Закрыть(); + Закрыть(Ложь); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВосстановлениеПаролей/Help/ru.html b/SSL/src/CommonForms/ВосстановлениеПаролей/Help/ru.html index 6ec8bc89e..5a56070a6 100644 --- a/SSL/src/CommonForms/ВосстановлениеПаролей/Help/ru.html +++ b/SSL/src/CommonForms/ВосстановлениеПаролей/Help/ru.html @@ -1,5 +1,5 @@ -Предназначена для настройки восстановления паролей.  -
              Открывается в разделе Администрирование - Настройки пользователей и прав - Пользователи.
              В настоящее время возросло количество удаленных работников. Это накладывает определенные требования к приложениям, используемым в компаниях. В частности, может возникнуть случай, когда пользователь не помнит свой пароль. В приложении предусмотрена возможность оперативного и безопасного восстановления паролей пользователей.
              +Предназначена для настройки восстановления паролей. +
              Открывается в разделе Администрирование - Настройки пользователей и прав - Пользователи.
              В настоящее время возросло количество удаленных работников. Это накладывает определенные требования к приложениям, используемым в компаниях. В частности, может возникнуть случай, когда пользователь не помнит свой пароль. В приложении предусмотрена возможность оперативного и безопасного восстановления паролей пользователей.

              Включение ссылок под приглашением в приложение


              Включите флажок Отображать гиперссылку "Нужна помощь", введите адрес страницы для получения помощи в Интернете.
              @@ -18,24 +18,24 @@

              Настройка восстановления пароля по электронной почте: Стандартный сервис отправки

              • Выберите восстановления пароля по электронной почте с помощью кнопки;
              • -
              • С помощью переключателя Отправлять письмо от выберите Стандартный сервис отправки. 

              Настройка восстановления пароля по электронной почте: От настройки почты

              +
            • С помощью переключателя Отправлять письмо от выберите Стандартный сервис отправки.

            Настройка восстановления пароля по электронной почте: От настройки почты

            • Выберите восстановления пароля по электронной почте с помощью кнопки;
            • -
            • С помощью переключателя Отправлять письмо от выберите От настройки почты. 
            • -
              • Выберите из списка нужную настройку почты. 

            Настройка восстановления пароля по электронной почте: Указанный почтовый сервер

            +
          • С помощью переключателя Отправлять письмо от выберите От настройки почты.
          • +
            • Выберите из списка нужную настройку почты.

          Настройка восстановления пароля по электронной почте: Указанный почтовый сервер

          • Выберите восстановления пароля по электронной почте с помощью кнопки;
          • -
          • С помощью переключателя Отправлять письмо от выберите Указанный почтовый сервер. 
          • +
          • С помощью переключателя Отправлять письмо от выберите Указанный почтовый сервер.
            • Введите параметры почтового сервера для отправки сообщения:
            • Сервер SMTP;
            • -
            • Шифрование - выберите с помощью переключателя;
            • +
            • Шифрование - выберите с помощью переключателя;
            • Порт;
            • Пользователь;
            • Пароль.
            • Отправитель.

          Шаблон сообщения с кодом восстановления пароля

          -
          Можно написать текст письма, который придет пользователю с кодом для восстановления пароля. Шаблоном сообщения можно воспользоваться только при отправке писем в вариантах Настройки почты и Указанный почтовый сервер. Текст сообщения является произвольным, но в него необходимо Вставить параметры с помощью кнопки:
          +
          Можно написать текст письма, который придет пользователю с кодом для восстановления пароля. Шаблоном сообщения можно воспользоваться только при отправке писем в вариантах Настройки почты и Указанный почтовый сервер. Текст сообщения является произвольным, но в него необходимо Вставить параметры с помощью кнопки:
          -
          • Код подтверждения (&VerificationCode) - код для восстановления пароля, является обязательным, генерируется приложением автоматически во время отправки сообщения;
          • +
            • Код подтверждения (&VerificationCode) - код для восстановления пароля, является обязательным, генерируется приложением автоматически во время отправки сообщения;
            • Имя пользователя (&UserPresentation);
            • Наименование конфигурации (&ApplicationPresentation).
            Доступны стандартные средства редактирования текста.

          Код подтверждения

          diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html index 469d48e89..771c49da1 100644 --- a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html +++ b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html @@ -1,11 +1,11 @@

          Предназначена для восстановления связи подчиненного узла с главным узлом.

          -

          Сообщение выводится при входе в подчиненный узел, на время отключенный от главного узла (т.е. после отмены главного узла).

          +

          Сообщение выводится при входе в подчиненный узел, на время отключенный от главного узла (т.е. после отмены главного узла).

          Отмена главного узла (временное отключение подчиненного узла) может потребоваться в случаях:

          -
          • Для загрузки в подчиненный узел конфигурации главного узла. Производится в процессе восстановления распределенной информационной базы (недопустимо загружать конфигурацию более ранней версии). -
          • При восстановлении конфигурации главного узла. Это может понадобиться, если произошел сбой, в результате которого информационная база главного узла была повреждена.

          Нажмите кнопку Восстановить, для того чтобы восстановить главный узел перед продолжением запуска.

          -

           Нажмите кнопку Отключить, для того чтобы безвозвратно отключить связь с главным узлом перед продолжением запуска. Это требуется после отмены главного узла в следующих случаях:

          -
          • при создании главного узла из копии подчиненного узла; +
            • Для загрузки в подчиненный узел конфигурации главного узла. Производится в процессе восстановления распределенной информационной базы (недопустимо загружать конфигурацию более ранней версии). +
            • При восстановлении конфигурации главного узла. Это может понадобиться, если произошел сбой, в результате которого информационная база главного узла была повреждена.

            Нажмите кнопку Восстановить, для того чтобы восстановить главный узел перед продолжением запуска.

            +

            Нажмите кнопку Отключить, для того чтобы безвозвратно отключить связь с главным узлом перед продолжением запуска. Это требуется после отмены главного узла в следующих случаях:

            +
            • при создании главного узла из копии подчиненного узла;
            • при создании самостоятельной информационной базы из подчиненного узла (или его копии). -
            • Внимание! Данная операция является необратимой. Восстановление связи с главным узлом после этого будет возможно только программными средствами.

            См. также статью на ИТС Администрирование узлов распределенной информационной базы (БСП).

            -

             

            \ No newline at end of file +
          • Внимание! Данная операция является необратимой. Восстановление связи с главным узлом после этого будет возможно только программными средствами.

          См. также статью на ИТС Администрирование узлов распределенной информационной базы (БСП).

          +

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборДаты/Help/ru.html b/SSL/src/CommonForms/ВыборДаты/Help/ru.html index e0f587228..4f1b7ce3b 100644 --- a/SSL/src/CommonForms/ВыборДаты/Help/ru.html +++ b/SSL/src/CommonForms/ВыборДаты/Help/ru.html @@ -1,6 +1,6 @@

          Предназначен для выбора даты переноса праздничного дня производственного календаря.

          -

          В поставку приложения входит общегосударственный производственный календарь с утвержденными правительством сведениями о рабочих днях, праздниках и переносах праздничных дней.

          -

          Однако иногда (как правило, в начале года) необходимо временно заполнить данные самостоятельно. Это имеет смысл, если данные календаря нужны, но официально он еще не принят и в приложении его еще нет, т.к. еще не все переносы правительство утвердило. Можно заполнить переносы раньше, а потом, когда данные общегосударственного календаря будут утверждены и войдут в поставку приложения, переносы автоматически корректируются.

          +

          В поставку приложения входит общегосударственный производственный календарь с утвержденными правительством сведениями о рабочих днях, праздниках и переносах праздничных дней.

          +

          Однако иногда (как правило, в начале года) необходимо временно заполнить данные самостоятельно. Это имеет смысл, если данные календаря нужны, но официально он еще не принят и в приложении его еще нет, т.к. еще не все переносы правительство утвердило. Можно заполнить переносы раньше, а потом, когда данные общегосударственного календаря будут утверждены и войдут в поставку приложения, переносы автоматически корректируются.

          Открывается по команде Перенести день в производственном календаре.

          -

          Выберите дату переноса, нажмите ОК.

          \ No newline at end of file +

          Выберите дату переноса, нажмите ОК.

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html index ba86170e5..9011016f1 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html @@ -1,8 +1,8 @@ -

          Предназначена для выбора исполнителя бизнес-процесса (например, Задания).

          -

          Открывается из бизнес-процесса по кнопке выбора в поле Исполнитель. 

          +

          Предназначена для выбора исполнителя бизнес-процесса (например, Задания).

          +

          Открывается из бизнес-процесса по кнопке выбора в поле Исполнитель.

          В зависимости от специфики бизнес-процессов задачи могут быть адресованы исполнителю или группе исполнителей как персонально (персональная адресация - в качестве исполнителя можно выбирать конкретного пользователя), так и для некоторых бизнес-процессов с использованием ролей бизнес-процесса (ролевая адресация).

          -

          Если выбирается исполнитель, то бизнес-процесс будет адресован этому исполнителю. Если выполняется выбор роли, то бизнес-процесс адресуется тому исполнителю, который в момент рассмотрения задачи назначен исполнителем этой роли.
          В процессе работы роли могут быть переназначены. В этом случае задача автоматически переадресовывается новым исполнителям.

          +

          Если выбирается исполнитель, то бизнес-процесс будет адресован этому исполнителю. Если выполняется выбор роли, то бизнес-процесс адресуется тому исполнителю, который в момент рассмотрения задачи назначен исполнителем этой роли.
          В процессе работы роли могут быть переназначены. В этом случае задача автоматически переадресовывается новым исполнителям.

          Пользователи

            @@ -17,18 +17,18 @@
          • Для этого нужно настроить список таких ролей, указав, что они предназначены для определенных категорий внешних пользователей.

          Роли исполнителей

          • -
            При ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу). 
            +
            При ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу).
            • Могут использоваться "уточняющие" объекты адресации, основные и дополнительные. Например, у роли Руководитель проектов могут присутствовать основной объект адресации Подразделение и дополнительный объект Проект.
            • Таким образом, с помощью объектов адресации происходит уточнение, руководителям какого проекта и в каком подразделении адресуется задача.
          • -
            Выделите нужную роль исполнителя, нажмите Выбрать.
            +
            Выделите нужную роль исполнителя, нажмите Выбрать.
          • Также можно воспользоваться двойным щелчком мыши.
          • При необходимости выберите объект адресации. Нажмите ОК.

          См. также:

          - \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборКонтакта/Help/ru.html b/SSL/src/CommonForms/ВыборКонтакта/Help/ru.html index 30dcf24cb..4345aa60f 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Help/ru.html +++ b/SSL/src/CommonForms/ВыборКонтакта/Help/ru.html @@ -1,13 +1,13 @@

          Предназначена для поиска и подбора контакта в документы взаимодействий.

          -

          Поле Контакт всегда присутствует во всех документах взаимодействий, однако представление контактов в документах различается:

          -
          • В документах Встреча и Запланированное взаимодействие присутствует список участников, в который необходимо добавить все контакты, которые будут участвовать в запланированном мероприятии или встрече. +

            Поле Контакт всегда присутствует во всех документах взаимодействий, однако представление контактов в документах различается:

            +
            • В документах Встреча и Запланированное взаимодействие присутствует список участников, в который необходимо добавить все контакты, которые будут участвовать в запланированном мероприятии или встрече.
            • В документе Сообщение SMS присутствует список адресатов, в который необходимо добавить контакты для рассылки сообщения.
            • -
            • В документе Телефонный звонок присутствует поле Контакт абонента. 

            Окно Выбор контактов открывается при заполнении поля Контакт документа взаимодействий.

            +
          • В документе Телефонный звонок присутствует поле Контакт абонента.

          Окно Выбор контактов открывается при заполнении поля Контакт документа взаимодействий.

          Содержит вкладки:

          -
          • Поиск контактов- поиск контактов в приложении по нескольким признакам: +
            • Поиск контактов- поиск контактов в приложении по нескольким признакам:
                • По адресу электронной почты (По e-mail);
                • По доменному имени почтового сервера; @@ -15,15 +15,15 @@
                • По телефону;
                • По строке, входящей в наименование контакта. -
                  • Для поиска контактов по строке используется полнотекстовый поиск приложения, в этом случае поиск осуществляется по всем реквизитам контактов. +
                    • Для поиска контактов по строке используется полнотекстовый поиск приложения, в этом случае поиск осуществляется по всем реквизитам контактов.
                    • В нижней части окна поиска выводится информация об актуальности индекса полнотекстового поиска и кнопка Обновить, которая становится активной, если индекс неактуален.
                  • по начальным символам наименования контакта (Начинается с).
                • Выберите способ поиска, напишите выражение для поиска и нажмите кнопку Найти. Будут подобраны контакты, удовлетворяющие условию.
                -
              • Пользователи - подбор контакта из списка пользователей приложения. +
              • Пользователи - подбор контакта из списка пользователей приложения.
                • Вкладки могут включать и другие списки, например, список партнеров.
                • Если в списке много элементов, используйте команду Найти. Можно работать со списком и использовать его возможности, вводить элементы.
              • -
              • Контакты по предмету - вкладка становится доступной, если в документе взаимодействий заполнено поле Предмет. Приложение автоматически подбирает контакты, связанные с предметом. Данная вкладка содержит список контактов, которые фигурируют в самом предмете, а также во всех документах взаимодействий, где этот предмет указан.

              Добавление контактов в документы взаимодействий

              +
            • Контакты по предмету - вкладка становится доступной, если в документе взаимодействий заполнено поле Предмет. Приложение автоматически подбирает контакты, связанные с предметом. Данная вкладка содержит список контактов, которые фигурируют в самом предмете, а также во всех документах взаимодействий, где этот предмет указан.

            Добавление контактов в документы взаимодействий

            • Двойной щелчок по контакту добавляет его в документ взаимодействия. Также можно использовать кнопку Выбрать.
            • Для одновременного добавления нескольких контактов из списка выделите их и нажмите кнопку Выбрать.

            См. также:

            diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index e142e5bc2..f9010473c 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -288,8 +288,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОСУЩЕСТВЛЕНИЯ ПОИСКА +#Область ПроцедурыИФункцииОсуществленияПоиска // Формирует список значений строк, по которым будет осуществляться поиск по текущему варианту поиска. // @@ -414,8 +413,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ +#КонецОбласти + +#Область ПроцедурыИФункцииОбщегоНазначения // Устанавливает текущим контакт в соответствующем динамическом списке. // @@ -516,3 +516,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html index 9f429a0b9..9f184693c 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html @@ -1,11 +1,11 @@ -

            Предназначен для выбора объектов приложения.

            -

            Вызывается из других объектов приложения по команде Выбрать или по соответствующей ссылке.

            +

            Предназначен для выбора объектов приложения.

            +

            Вызывается из других объектов приложения по команде Выбрать или по соответствующей ссылке.

            Группировка объектов приложения

            Объекты приложения могут быть сгруппированы (укажите с помощью переключателя):

            • По разделам интерфейса;
            • -
            • По видам объектов - список объектов приложения представляет собой дерево, сгруппирован по видам объектов приложения.

            +
          • По видам объектов - список объектов приложения представляет собой дерево, сгруппирован по видам объектов приложения.

          Выбор объектов приложения

          Для выбора нужных объектов включите соответствующие флажки.

          • Для того чтобы выбрать все объекты одного типа, включите флажок, относящийся к группе объектов, например, для того чтобы выбрать все справочники, включите флажок Справочники. diff --git a/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Form.form b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Form.form new file mode 100644 index 000000000..d796a1b46 --- /dev/null +++ b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Form.form @@ -0,0 +1,440 @@ + + + + <key>ru</key> + <value>Выбор основной формы</value> + + + ДекорацияИнформация + 37 + + <key>ru</key> + <value>Какая из форм будет считаться основной?</value> + + true + true + + true + + + ДекорацияИнформацияРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДекорацияИнформацияКонтекстноеМеню + 38 + true + + Label + true + true + + Left + + + + ГруппаВыборЗначения + 56 + + ГруппаОтступСлева + 58 + + ДекорацияОтступ + 62 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 63 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Отступ слева</value> + + + ГруппаОтступСлеваРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаЗначенияСправа + 60 + + ОсновнаяПечатнаяФорма + 34 + + <key>ru</key> + <value>Основная печатная форма</value> + + true + true + + true + + + ОсновнаяПечатнаяФорма + + None + + ОсновнаяПечатнаяФормаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ОсновнаяПечатнаяФормаКонтекстноеМеню + 35 + true + + RadioButtonField + Enter + true + Left + true + + 1 + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Значения справа</value> + + + ГруппаЗначенияСправаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Выбор значения</value> + + + ГруппаВыборЗначенияРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ДекорацияПояснениеКВыбраннымПечатнымФормам + 53 + true + + true + + + ДекорацияПояснениеКВыбраннымПечатнымФормамРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ДекорацияПояснениеКВыбраннымПечатнымФормамКонтекстноеМеню + 54 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + ГруппаКнопки + 45 + + Ок + 30 + + <key>ru</key> + <value>Выбрать и сформировать</value> + + true + true + + true + + + ОкРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.Command.ВыбратьИСформировать + Auto + true + true + true + UserCmds + Auto + + + Отмена + 32 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ОтменаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 67 + true + true + + true + + + СправкаРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки</value> + + + ГруппаКнопкиРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + ОсновнаяПечатнаяФорма + + <key>ru</key> + <value>Основная печатная форма</value> + + 2 + + Number + + 10 + + + + true + + + true + + ShowError + + + ВыбратьИСформировать + + <key>ru</key> + <value>Выбрать и сформировать</value> + + 1 + + true + + + + ВыбратьИСформировать + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + true + + + + Отмена + + + Auto + Auto + + + КомандыПечати + + + + МассивОбъектов + + + + + + + diff --git a/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Help/ru.html b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Help/ru.html new file mode 100644 index 000000000..a426f9b97 --- /dev/null +++ b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Help/ru.html @@ -0,0 +1,3 @@ + + +Основные печатные формы являются подтверждающими, первичными документами для хозяйственной операции. Они определяют внешнее представление документов.

            Основная печатная форма по документу может запоминаться только одна. Поэтому при формировании комплекта из нескольких основных, необходимо выбрать какую запоминать.

            Сохраненное наименавание может быть использовано при формировании исходящих документах.

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Module.bsl b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Module.bsl new file mode 100644 index 000000000..be25b7676 --- /dev/null +++ b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/Module.bsl @@ -0,0 +1,89 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ТипЗнч(Параметры.КомандыПечати) <> Тип("Массив") Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + ИдентификаторыКоманд = РегистрыСведений.ОсновныеПечатныеФормыОбъектов.ИдентификаторыКоманд(Параметры.МассивОбъектов); + СохраненныйИдентификатор = ""; + КоличествоИдентификаторовКоманд = ИдентификаторыКоманд.Количество(); + Если КоличествоИдентификаторовКоманд = 1 Тогда + Для Каждого КлючЗначение Из ИдентификаторыКоманд Цикл + СохраненныйИдентификатор = КлючЗначение.Ключ; + СохраненноеПредставление = УправлениеПечатью.НаименованиеСформированнойОсновнойПечатнойФормы(КлючЗначение.Значение[0]); + КонецЦикла; + КонецЕсли; + + ОбработатьИдентификаторыКомплекта(); + + Сч = 0; + Для Каждого Команда Из Параметры.КомандыПечати Цикл + Сч = Сч + 1; + Если Команда.ОсновнаяПечатнаяФорма Тогда + Элементы.ОсновнаяПечатнаяФорма.СписокВыбора.Добавить(Сч, Команда.Представление, Ложь); + Если УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(Команда.Идентификатор) = СохраненныйИдентификатор Тогда + ОсновнаяПечатнаяФорма = Сч; + СохраненноеПредставление = Команда.Представление; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ТекстЗаголовка = ""; + Если КоличествоИдентификаторовКоманд = 1 Тогда + ШаблонТекста = НСтр("ru = 'Сохраненная основная печатная форма: %1.'"); + ТекстЗаголовка = СтрШаблон(ШаблонТекста, СохраненноеПредставление); + КонецЕсли; + + Если Не ПустаяСтрока(ТекстЗаголовка) Тогда + Элементы.ДекорацияПояснениеКВыбраннымПечатнымФормам.Видимость = Истина; + Элементы.ДекорацияПояснениеКВыбраннымПечатнымФормам.Заголовок = ТекстЗаголовка; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыбратьИСформировать(Команда) + + Если ПроверитьЗаполнение() Тогда + Закрыть(ОсновнаяПечатнаяФорма - 1); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ОбработатьИдентификаторыКомплекта() + + Для Каждого Команда Из Параметры.КомандыПечати Цикл + Если СтрНайти(Команда.Идентификатор, ",") Тогда + Команда.Идентификатор = СтрРазделить(Команда.Идентификатор, ",", Ложь)[0]; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/ВыборОсновнойПечатнойФормы.mdo b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/ВыборОсновнойПечатнойФормы.mdo new file mode 100644 index 000000000..4374cd39f --- /dev/null +++ b/SSL/src/CommonForms/ВыборОсновнойПечатнойФормы/ВыборОсновнойПечатнойФормы.mdo @@ -0,0 +1,15 @@ + + + ВыборОсновнойПечатнойФормы + + ru + Выбор основной печатной формы + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html index 477991567..94bccacc8 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html @@ -3,7 +3,7 @@

            Если для хранения файлов используются тома на устройстве, то вместе с созданием начального образа автоматически будет создан архив с файлами, хранящимися в томах.

            Затем в процессе создания информационной базы подчиненного узла из начального образа в приложении-приемнике следует получить файлы из этого архива. Для этого необходимо воспользоваться командой Разместить файлы начального образа. В последующих итерациях синхронизации данных файлы в томах будут участвовать автоматически.

            В одном из полей укажите Путь к архиву с файлами начального образа:

            -
            • Для сервера 1С:Предприятия под управлением Microsoft Windows - укажите путь к архиву с помощью кнопки ;

            или

            +
            • Для сервера 1С:Предприятия под управлением Microsoft Windows - укажите путь к архиву с помощью кнопки ;

            или

            • Для сервера 1С:Предприятия под управлением Linux - напишите путь к архиву.

            Нажмите Разместить.

            Поля Полный путь для сервера 1С:Предприятия под управлением Microsoft Windows и Полный пусть для сервера 1С:Предприятия под управлением Linux должны ссылаться на одну и ту же физическую сетевую папку. Нужно заполнять в том случае, если в кластере есть сервера как под управлением Microsoft Windows, так и Linux.

            См. также:

            diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl index edf4a2a07..243e79020 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl @@ -32,8 +32,8 @@ СтандартнаяОбработка = Ложь; - Если Не РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); + Если Не РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда + РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено); Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html index 777eec11e..fd6b3f010 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Help/ru.html @@ -1,10 +1,10 @@

            Предназначен для выбора узлов плана обмена (информационных баз).

            -

            Вызывается по команде Подобрать или Добавить из других объектов приложения, например, при установке Даты запрета загрузки данных.

            +

            Вызывается по команде Подобрать или Добавить из других объектов приложения, например, при установке Даты запрета загрузки данных.

            В списке выводится:

            -
            • Приложение - перечень приложений, с которыми настроена синхронизация данных.  +
              • Приложение - перечень приложений, с которыми настроена синхронизация данных.
              • -
              • Информационная база - перечень информационных баз, с которыми настроена синхронизация данных. 

              Выбор узла плана обмена

              +
            • Информационная база - перечень информационных баз, с которыми настроена синхронизация данных.

            Выбор узла плана обмена

            • Выделите нужное значение, нажмите Выбрать.

            Подбор узлов плана обмена

            • Выделите несколько значений, нажмите Выбрать.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl index eea4b60b7..937fef92a 100644 --- a/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl +++ b/SSL/src/CommonForms/ВыборУзловПлановОбмена/Module.bsl @@ -133,11 +133,11 @@ |ГДЕ | НЕ ТаблицаПланаОбмена.ЭтотУзел"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПланОбменаПустаяСсылка", - "ЗНАЧЕНИЕ(" + ОбъектМетаданных.ПолноеИмя() + ".ПустаяСсылка)"); // @query-part-2 + "ЗНАЧЕНИЕ(" + ОбъектМетаданных.ПолноеИмя() + ".ПустаяСсылка)"); // @query-part-2, @query-part-3 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПланОбменаПредставление", """" + ОбъектМетаданных.Представление() + """"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаПланаОбмена", ОбъектМетаданных.ПолноеИмя()); Если ТекстыЗапросов.Количество() > 0 Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); // @query-part + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); // @query-part-1, @query-part-2 КонецЕсли; ТекстыЗапросов.Добавить(ТекстЗапроса); diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form index 59d7c01e4..f5eb76493 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form @@ -619,10 +619,6 @@ DontUse Auto - - НастройкиФормата - - ОграничениеФорматовСохранения @@ -630,6 +626,28 @@ + + ФорматыСохранения + + + + УпаковатьВАрхив + + Boolean + + + + ПереводитьИменаФайловВТранслит + + Boolean + + + + Подписать + + Boolean + + diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html b/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html index f6c7e1719..460fcb274 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html @@ -1,6 +1,6 @@ -

            Предназначена для выбора формата вложений при отправке печатных форм по электронной почте.

            -

            Вызывается по кнопке  Отправить по почте.

            +

            Предназначена для выбора формата вложений при отправке печатных форм по электронной почте.

            +

            Вызывается по кнопке Отправить по почте.

            • Укажите с помощью флажков, в каком формате (или нескольких форматах) нужно отправить документ.
            • Для уменьшения размера вложений печатную форму перед отправкой рекомендуется Дополнительно упаковать в архив (формат .zip). diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl index 0d731099a..985d5a46c 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl @@ -13,32 +13,26 @@ // Загрузка переданных параметров. ПереданныйМассивФорматов = Новый Массив; - ПараметрыНастройкиФормата = Параметры.НастройкиФормата; - Если ПараметрыНастройкиФормата <> Неопределено Тогда - ПереданныйМассивФорматов = ПараметрыНастройкиФормата.ФорматыСохранения; - УпаковатьВАрхив = ПараметрыНастройкиФормата.УпаковатьВАрхив; - ПереводитьИменаФайловВТранслит = ПараметрыНастройкиФормата.ПереводитьИменаФайловВТранслит; - Элементы.Подписать.Видимость = ПараметрыНастройкиФормата.Подписать <> Неопределено; - Подписать = ПараметрыНастройкиФормата.Подписать; + Если Параметры.ФорматыСохранения <> Неопределено Тогда + ПереданныйМассивФорматов = Параметры.ФорматыСохранения; КонецЕсли; - - МассивОграниченийФорматовСохранения = СтрРазделить(Параметры.ОграничениеФорматовСохранения, ",", Ложь); + УпаковатьВАрхив = Параметры.УпаковатьВАрхив; + ПереводитьИменаФайловВТранслит = Параметры.ПереводитьИменаФайловВТранслит; + Элементы.Подписать.Видимость = Параметры.Подписать <> Неопределено; + Подписать = Параметры.Подписать; // заполнение списка форматов Для Каждого ФорматСохранения Из СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента() Цикл Пометка = Ложь; - Если ПараметрыНастройкиФормата <> Неопределено Тогда + Если Параметры.ФорматыСохранения <> Неопределено Тогда ПереданныйФормат = ПереданныйМассивФорматов.Найти(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента)); Если ПереданныйФормат <> Неопределено Тогда Пометка = Истина; КонецЕсли; КонецЕсли; - Если МассивОграниченийФорматовСохранения.Количество() = 0 - Или МассивОграниченийФорматовСохранения.Найти(ФорматСохранения.Расширение) <> Неопределено Тогда - - ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), ФорматСохранения.Представление, Пометка, ФорматСохранения.Картинка); - КонецЕсли; + ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), + ФорматСохранения.Представление, Пометка, ФорматСохранения.Картинка); КонецЦикла; Если ВыбранныеФорматыСохранения.Количество() = 1 Тогда @@ -59,19 +53,11 @@ &НаСервере Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) - Если Параметры.НастройкиФормата <> Неопределено Тогда - Если Параметры.НастройкиФормата.ФорматыСохранения.Количество() > 0 Тогда - Настройки.Удалить("ВыбранныеФорматыСохранения"); - КонецЕсли; - Если Параметры.НастройкиФормата.Свойство("УпаковатьВАрхив") Тогда - Настройки.Удалить("УпаковатьВАрхив"); - КонецЕсли; - Если Параметры.НастройкиФормата.Свойство("ПереводитьИменаФайловВТранслит") Тогда - Настройки.Удалить("ПереводитьИменаФайловВТранслит"); - КонецЕсли; - Если Параметры.НастройкиФормата.Свойство("Подписать") Тогда - Настройки.Удалить("Подписать"); - КонецЕсли; + Если Параметры.ФорматыСохранения <> Неопределено И Параметры.ФорматыСохранения.Количество() > 0 Тогда + Настройки.Удалить("ВыбранныеФорматыСохранения"); + Настройки.Удалить("УпаковатьВАрхив"); + Настройки.Удалить("ПереводитьИменаФайловВТранслит"); + Настройки.Удалить("Подписать"); Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ГруппыПользователей/Help/ru.html b/SSL/src/CommonForms/ГруппыПользователей/Help/ru.html index da5d21b48..922bb0b65 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Help/ru.html +++ b/SSL/src/CommonForms/ГруппыПользователей/Help/ru.html @@ -4,7 +4,7 @@

              Назначение групп пользователю

              • Включите флажок, соответствующий нужной группе.
              • Нажмите Записать и закрыть.

              Удаление из всех групп

              -

              Эту возможность можно использовать, если группы были назначены ошибочно. Быстро удалите пользователя (внешнего пользователя) из всех групп, затем заново назначьте группы.

              +

              Эту возможность можно использовать, если группы были назначены ошибочно. Быстро удалите пользователя (внешнего пользователя) из всех групп, затем заново назначьте группы.

              • Нажмите Исключить из всех групп.

              См. также

              • Группы пользователей;
              • Группы внешних пользователей; diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html index a4cd681d3..7b2721ca8 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html @@ -1,16 +1,16 @@ -

                Предназначена для добавления электронной подписи из файла к элементам некоторых списков информационной базы. Эту возможность можно использовать, например, если подпись в виде файла была получена позже, чем подписанные данные.

                -

                Открывается из списка файлов (списка присоединенных файлов объекта), списка Присоединенные файлыпо кнопке  Электронная подпись и шифрование - Добавить электронную подпись из файла. Также можно найти эту команду в меню Еще карточки файла (карточки присоединенного файла).

                +

                Предназначена для добавления электронной подписи из файла к элементам некоторых списков информационной базы. Эту возможность можно использовать, например, если подпись в виде файла была получена позже, чем подписанные данные.

                +

                Открывается из списка файлов (списка присоединенных файлов объекта), списка Присоединенные файлыпо кнопке Электронная подпись и шифрование - Добавить электронную подпись из файла. Также можно найти эту команду в меню Еще карточки файла (карточки присоединенного файла).

                В списке выводится:

                • Файл электронной подписи - путь к файлу, содержащему электронную подпись.
                • -
                • Комментарий - сведения, которые поясняют добавляемую электронную подпись.

                Добавление электронной подписи из файла

                -
                • Выберите один или несколько файлов с электронными подписями. Поддерживается только отсоединенная подпись. Расширение файла подписи должно быть .p7s. Формат отсоединенной подписи PKS#7, причем в нее обязательно должен быть включен сертификат, которым выполнена подпись. Если не включен, будет ошибка при проверке подписи и при добавлении из файла. Подписи файлов сохраняются в информационной базе, в отличие от самих файлов, которые также могут храниться в томах.
                • -
                • На данный момент не поддерживается работа с присоединенной подписью в формате PKC#7. 
                • -
                • Нажмите Добавить,с помощью кнопки  укажите путь к файлу подписи на устройстве. +
                • Комментарий - сведения, которые поясняют добавляемую электронную подпись.

                Добавление электронной подписи из файла

                +
                • Выберите один или несколько файлов с электронными подписями. Поддерживается только отсоединенная подпись. Расширение файла подписи должно быть .p7s. Формат отсоединенной подписи PKS#7, причем в нее обязательно должен быть включен сертификат, которым выполнена подпись. Если не включен, будет ошибка при проверке подписи и при добавлении из файла. Подписи файлов сохраняются в информационной базе, в отличие от самих файлов, которые также могут храниться в томах.
                • +
                • На данный момент не поддерживается работа с присоединенной подписью в формате PKC#7.
                • +
                • Нажмите Добавить,с помощью кнопки укажите путь к файлу подписи на устройстве.
                • Напишите Комментарий к подписи.

                Удаление электронной подписи

                -
                • Нажмите Еще - Удалить, для того чтобы Удалить файл электронной подписи из списка.

                См. также:

                +
                • Нажмите Еще - Удалить, для того чтобы Удалить файл электронной подписи из списка.

                См. также:

                • Общая информация о файлах;
                • Настройки электронной подписи и шифрования; diff --git a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl index 096dcfb3f..46469ecd7 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl @@ -272,7 +272,16 @@ КонецПроцедуры &НаКлиенте -Процедура ВыбратьФайлы(МножественныйВыбор = Ложь) +Асинх Процедура ВыбратьФайлы(МножественныйВыбор = Ложь, ПовторныйВызов = Ложь) + + Если Не ПовторныйВызов Тогда + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения("ВыбратьФайлыПовторноПослеУстановкиКомпонент", ЭтотОбъект, МножественныйВыбор); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; ОшибкиПриЗагрузкеДоверенностей = ""; Доверенности.Очистить(); @@ -314,6 +323,16 @@ КонецПроцедуры +// Повторный вызов процедуры ВыбратьФайлы после установки компонент. +&НаКлиенте +Процедура ВыбратьФайлыПовторноПослеУстановкиКомпонент(Результат, МножественныйВыбор) Экспорт + + Если Результат = Истина Тогда + ВыбратьФайлы(МножественныйВыбор, Истина) + КонецЕсли; + +КонецПроцедуры + // Продолжение процедуры ВыбратьФайл. &НаКлиенте Процедура ВыбратьФайлыПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт @@ -438,8 +457,6 @@ Процедура ВыбратьФайлПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда - ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии(); - ПараметрыСоздания.ПоказатьОшибку = Неопределено; ЭлектроннаяПодписьСлужебныйКлиент.ПрочитатьСвойстваПодписи(Новый ОписаниеОповещения( "ВыбратьФайлПослеЧтенияСвойствПодписи", ЭтотОбъект, Контекст), Контекст.РезультатДобавленияПодписи.ДанныеПодписи, Истина, Ложь); @@ -448,17 +465,9 @@ Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); - Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда - МенеджерКриптографии.НачатьПолучениеКонтейнераПодписейКриптографии(Новый ОписаниеОповещения( - "ВыбратьФайлПослеПолученияКонтейнераПодписи", ЭтотОбъект, Контекст, - "ВыбратьФайлПослеОшибкиПолученияКонтейнераПодписи", ЭтотОбъект), Контекст.РезультатДобавленияПодписи.ДанныеПодписи); - Возврат; - КонецЕсли; - - Контекст.Вставить("ПараметрыПодписи", Неопределено); - МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения( - "ВыбратьФайлПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст, - "ВыбратьФайлПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект), Контекст.РезультатДобавленияПодписи.ДанныеПодписи); + МенеджерКриптографии.НачатьПолучениеКонтейнераПодписейКриптографии(Новый ОписаниеОповещения( + "ВыбратьФайлПослеПолученияКонтейнераПодписи", ЭтотОбъект, Контекст, + "ВыбратьФайлПослеОшибкиПолученияКонтейнераПодписи", ЭтотОбъект), Контекст.РезультатДобавленияПодписи.ДанныеПодписи); КонецПроцедуры @@ -543,26 +552,7 @@ // Продолжение процедуры ВыбратьФайл. &НаКлиенте -Процедура ВыбратьФайлПослеОшибкиПолученияСертификатовИзПодписи(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить сертификаты из файла подписи по причине: - |%1'"), - ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПоказатьИнструкцию", Истина); - ДополнительныеПараметры.Вставить("Подпись", Контекст.РезультатДобавленияПодписи.ДанныеПодписи); - - ДобавитьОшибку(ОшибкаНаКлиенте, Контекст, ДополнительныеПараметры); - -КонецПроцедуры - -// Продолжение процедуры ВыбратьФайл. -&НаКлиенте -Процедура ВыбратьФайлПослеПолученияСертификатовИзПодписи(Сертификаты, Контекст) Экспорт +Процедура ВыбратьФайлПослеПолученияСертификатовИзПодписи(Сертификаты, Контекст) Если Сертификаты.Количество() = 0 Тогда ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", @@ -751,68 +741,26 @@ Возврат РезультатДобавленияСтроки; КонецЕсли; - ПараметрыПодписи = Неопределено; - Если ЭлектроннаяПодпись.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда - - Попытка - КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(РезультатДобавленияСтроки.ДанныеПодписи); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - РезультатДобавленияСтроки.ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить контейнер подписи из файла подписи по причине: - |%1'"), - ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); - Возврат РезультатДобавленияСтроки; - КонецПопытки; - - ПараметрыПодписи = ЭлектроннаяПодписьСлужебный.ПараметрыПодписиКриптографии(КонтейнерПодписи, - ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса()); - - Если ЗначениеЗаполнено(ПараметрыПодписи.НеподтвержденнаяДатаПодписи) Тогда - РезультатДобавленияСтроки.ДатаПодписи = ПараметрыПодписи.НеподтвержденнаяДатаПодписи; - КонецЕсли; - + Попытка + КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(РезультатДобавленияСтроки.ДанныеПодписи); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + РезультатДобавленияСтроки.ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить контейнер подписи из файла подписи по причине: + |%1'"), + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); + Возврат РезультатДобавленияСтроки; + КонецПопытки; + + ПараметрыПодписи = ЭлектроннаяПодписьСлужебный.ПараметрыПодписиКриптографии(КонтейнерПодписи, + ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса()); + + Если ЗначениеЗаполнено(ПараметрыПодписи.НеподтвержденнаяДатаПодписи) Тогда + РезультатДобавленияСтроки.ДатаПодписи = ПараметрыПодписи.НеподтвержденнаяДатаПодписи; КонецЕсли; - Если ПараметрыПодписи = Неопределено Тогда - - Попытка - - Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(РезультатДобавленияСтроки.ДанныеПодписи); - - Если Сертификаты.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'В файле подписи нет ни одного сертификата.'"); - КонецЕсли; - - Если Сертификаты.Количество() = 1 Тогда - Сертификат = Сертификаты[0]; - ИначеЕсли Сертификаты.Количество() > 1 Тогда - ДанныеСертификатов = Новый Массив; - Для Каждого Сертификат Из Сертификаты Цикл - ДанныеСертификатов.Добавить(Сертификат.Выгрузить()); - КонецЦикла; - - ДвоичныеДанныеСертификата = ЭлектроннаяПодписьСлужебный.СертификатыПоПорядкуДоКорневого( - ДанныеСертификатов)[0]; - Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); - КонецЕсли; - - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - РезультатДобавленияСтроки.ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить сертификаты из файла подписи по причине: - |%1'"), - ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); - Возврат РезультатДобавленияСтроки; - КонецПопытки; - - СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификат); - - Иначе - - СвойстваСертификата = ПараметрыПодписи.ОписаниеСертификата; - Сертификат = КонтейнерПодписи.Подписи[0].СертификатПодписи; - КонецЕсли; + СвойстваСертификата = ПараметрыПодписи.ОписаниеСертификата; + Сертификат = КонтейнерПодписи.Подписи[0].СертификатПодписи; СвойстваСертификата.Вставить("ДвоичныеДанные", Сертификат.Выгрузить()); diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index 015173d62..ea46f4b47 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -688,6 +688,7 @@ СсылкаРодителя 8 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных @@ -768,6 +769,7 @@ СсылкаРаздела 7 + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Help/ru.html index 3b51bd502..6cd8f824c 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,16 +1,16 @@ -Предназначена для вызова дополнительных отчетов и обработок из разделов приложения. -
                  Размещается обычно в панелях действий Отчеты и Сервис разделов приложения.
                  С помощью команд из списка можно:
                  +Предназначена для вызова дополнительных отчетов и обработок из разделов приложения. +
                  Размещается обычно в панелях действий Отчеты и Сервис разделов приложения.
                  С помощью команд из списка можно:
                  -
                  • выполнять обработку произвольных данных приложения;
                  • +
                    • выполнять обработку произвольных данных приложения;
                    • формировать произвольные отчеты, не привязанные к конкретным спискам и документам.

                    Выполнение команд

                  • Выберите команду, нажмите Выполнить.
                  • Также можно выполнить команду двойным щелчком мыши.

                  Настройка списка команд

                  -
                  • Для просмотра доступных в списке дополнительных отчетов и обработок перейдите по ссылке Настроить список.
                  • +
                    • Для просмотра доступных в списке дополнительных отчетов и обработок перейдите по ссылке Настроить список.
                    • В списке можно включать и выключать команды, предусмотренные при настройке дополнительных отчетов и обработок, с помощью флажков.

                  Как добавляются команды в список команд

                  Список команд зависит от настроек глобальных дополнительных отчетов и обработок:
                  • Настройка текста и состава команд производится разработчиком при создании дополнительного отчета или обработки.
                  • -
                  • Для того чтобы можно было с помощью данных команд вызвать дополнительный отчет или обработку, администратор приложения при настройке дополнительного отчета или обработки должен сначала включить имя данного пользователя в список для быстрого доступа. Иначе список доступных по этим командам дополнительных отчетов и обработок может быть пустым.
                  +
                • Для того чтобы можно было с помощью данных команд вызвать дополнительный отчет или обработку, администратор приложения при настройке дополнительного отчета или обработки должен сначала включить имя данного пользователя в список для быстрого доступа. Иначе список доступных по этим командам дополнительных отчетов и обработок может быть пустым.

                \ No newline at end of file diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index 925a98857..d5eb064e5 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -21,6 +21,8 @@ Если ЗначениеЗаполнено(Параметры.ИмяРаздела) И Параметры.ИмяРаздела <> ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы() Тогда СсылкаРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Подсистемы.Найти(Параметры.ИмяРаздела)); + Иначе + СсылкаРаздела = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(); КонецЕсли; ВидОбработок = ДополнительныеОтчетыИОбработки.ПолучитьВидОбработкиПоСтроковомуПредставлениюВида(Параметры.Вид); @@ -138,9 +140,9 @@ ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы); ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме); - Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(ВидОбработок, ?(ЭтоГлобальныеОбработки, СсылкаРаздела, СсылкаРодителя), ЭтоФормаОбъекта, ТипыКоманд); - ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); - ТаблицаКоманд.Загрузить(ТаблицаРезультат); + ДополнительныеКоманды = ДополнительныеОтчетыИОбработки.ДополнительныеКоманды(ВидОбработок, + ?(ЭтоГлобальныеОбработки, СсылкаРаздела, СсылкаРодителя), ЭтоФормаОбъекта, ТипыКоманд); + ТаблицаКоманд.Загрузить(ДополнительныеКоманды); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html index 237f76d8e..8026181d4 100644 --- a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html @@ -4,8 +4,8 @@

                По умолчанию включен флажок Использовать прокси-сервер по умолчанию для всех протоколов.

                Основные параметры настройки (Адрес сервера и Порт) по умолчанию будут также использованы в качестве дополнительных параметров.

                Настройка дополнительных параметров

                -
                • Для того чтобы указать адреса прокси-серверов для отдельных протоколов, выключите флажок Один прокси-сервер для всех протоколов; -
                • В соответствующем поле - HTTP, HTTPS, FTP - откорректируйте имя прокси-сервера, который будет использоваться для каждого протокола; +
                  • Для того чтобы указать адреса прокси-серверов для отдельных протоколов, выключите флажок Один прокси-сервер для всех протоколов; +
                  • В соответствующем поле - HTTP, HTTPS, FTP - откорректируйте имя прокси-сервера, который будет использоваться для каждого протокола;
                  • При необходимости укажите Порт.
                  • В списке Не использовать прокси-сервер для адресов с помощью кнопки Добавить укажите адреса, к которым будет осуществляться прямой доступ.
                  • Для подтверждения введенных параметров нажмите ОК.

                  См. также:

                  diff --git a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl index 6f4ae98c8..ad4a9f805 100644 --- a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl +++ b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Module.bsl @@ -36,7 +36,7 @@ Процедура ПродолжитьВыполнить(Команда) Если БольшеНеПоказывать = Истина Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Ложь,,, Истина); КонецЕсли; diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html index 1c806b186..5fa029011 100644 --- a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html @@ -1,6 +1,6 @@ -

                  Предназначена для ввода данных регистрации на сервисе склонений http://morpher.ru/.

                  -

                  Открывается по команде Настройка доступа к сервису "Морфер" в разделе Администрирование - Интернет-Поддержка и Сервисы.

                  +

                  Предназначена для ввода данных регистрации на сервисе склонений http://morpher.ru/.

                  +

                  Открывается по команде Настройка доступа к сервису "Морфер" в разделе Администрирование - Интернет-Поддержка и Сервисы.

                  Анонимный вход

                  • По умолчанию используется Анонимный вход, который обеспечивает базовые возможности использования сервиса. Анонимное использование сервиса склонений имеет ограничения.
                  • Для того чтобы узнать об условиях доступа к сервису склонений и регистрации на сайте, перейдите по ссылке ограничения.

                  Вход для зарегистрированных пользователей

                  diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form b/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form index 6a9df2c06..a86c228ad 100644 --- a/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Form.form @@ -2134,6 +2134,16 @@ Auto Auto + + Настройки + + + + ЭтоИндивидуальныеНастройки + + Boolean + + diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Help/ru.html b/SSL/src/CommonForms/НастройкаКолонтитулов/Help/ru.html index 4c34521ea..b3fc7a1f8 100644 --- a/SSL/src/CommonForms/НастройкаКолонтитулов/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Help/ru.html @@ -1,5 +1,5 @@ Предназначена для настройки колонтитулов. -
                  Доступна общая и индивидуальная настройка. Для общей настройки перейдите по ссылке Колонтитулы в разделе Администрирование - Печатные формы, отчеты и обработки.
                  +
                  Доступна общая и индивидуальная настройка. Для общей настройки перейдите по ссылке Колонтитулы в разделе Администрирование - Печатные формы, отчеты и обработки.
                  В настройках каждого отчета (расширенный режим) имеется возможность настроить индивидуальные колонтитулы.
                  Колонтитулы - удобное средство сделать отчет более наглядным, применяются чаще для больших по объему отчетов, в этом случае на страницах отчета размещается справочная информация для удобства его восприятия:
                  • Наименование отчета;
                  • @@ -8,8 +8,8 @@
                  • Автор.

                  Возможна настройка шрифта, размера для каждого колонтитула с помощью стандартных кнопок форматирования.

                  Размещение колонтитулов

                  -
                  • С помощью кнопок панели навигации разместите колонтитулы в нужном месте (лево, право, центр) верхней или нижней части отчета, укажите, с какой страницы начинать вывод колонтитулов. Для этого выделите нужную ячейку, например, левую верхнюю, нажмите кнопку панели навигации, например Время. 
                  • -
                  • В выделенной ячейке выводится обозначение колонтитула, например [&Время]. 
                  • +
                    • С помощью кнопок панели навигации разместите колонтитулы в нужном месте (лево, право, центр) верхней или нижней части отчета, укажите, с какой страницы начинать вывод колонтитулов. Для этого выделите нужную ячейку, например, левую верхнюю, нажмите кнопку панели навигации, например Время.
                    • +
                    • В выделенной ячейке выводится обозначение колонтитула, например [&Время].
                    • В средней части окна выводится Образец отчета с размещенными колонтитулами, для того чтобы можно было сразу увидеть результат настройки.
                    • После окончания настройки нажмите Сохранить.

                    См. также:

                    diff --git a/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl b/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl index 20fc3a65e..f70f6fd45 100644 --- a/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl +++ b/SSL/src/CommonForms/НастройкаКолонтитулов/Module.bsl @@ -19,7 +19,8 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОпределитьПоведениеВМобильномКлиенте(); - ЭтоИндивидуальныеНастройки = Параметры.Свойство("Настройки", Настройки); + Настройки = Параметры.Настройки; // см. УправлениеКолонтитулами.НастройкиКолонтитулов + ЭтоИндивидуальныеНастройки = Параметры.ЭтоИндивидуальныеНастройки; Если Не ЭтоИндивидуальныеНастройки Тогда Элементы.ФормаОК.Заголовок = НСтр("ru = 'Сохранить'"); КонецЕсли; @@ -29,8 +30,8 @@ УстановитьСтандартныеНастройкиСервер(); ТекущийПользователь = Пользователи.ТекущийПользователь(); - ПримерСтраницы = 1; + КонецПроцедуры &НаКлиенте @@ -103,7 +104,6 @@ #КонецЕсли ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаШрифтаВерхнегоКолонтитулаЗавершение", ЭтотОбъект); - ДиалогВыбораШрифта.Показать(ОписаниеОповещения); КонецПроцедуры @@ -117,7 +117,6 @@ #КонецЕсли ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаШрифтаНижнегоКолонтитулаЗавершение", ЭтотОбъект); - ДиалогВыбораШрифта.Показать(ОписаниеОповещения); КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html b/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html index 9e300990c..eb74da263 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html @@ -1,11 +1,11 @@ -

                    Предназначена для настройки состава всех печатных форм, располагающихся в подменю Печать в документах и списках приложения.

                    +

                    Предназначена для настройки состава всех печатных форм, располагающихся в подменю Печать в документах и списках приложения.

                    Открывается по команде Подменю "Печать" в разделе Администрирование - Печатные формы, отчеты и обработки.

                    Список состоит из двух частей:

                    -
                    • в правой части перечислены команды печати. Команды сгруппированы по спискам объектов приложения; +
                      • в правой части перечислены команды печати. Команды сгруппированы по спискам объектов приложения;
                      • в левой части перечисляются внешние печатные формы, которые соответствуют командам печати.

                      Изменение состава печатных форм

                      -
                      • Состав печатных форм документов и списков можно определить с помощью флажков: можно включать или отключать отдельные команды или подменю Печать для всего списка или документа. +
                        • Состав печатных форм документов и списков можно определить с помощью флажков: можно включать или отключать отдельные команды или подменю Печать для всего списка или документа.
                        • После настройки подменю Печать нажмите Записать и закрыть, для того чтобы подтвердить изменения.

                        Переход в список

                        • @@ -21,10 +21,10 @@
                        • В подменю Печать команды выводятся с пометкой из расширения, ими можно управлять с помощью флажков.

                        Работа с подменю Печать

                        • -
                          Настроенный состав команд подменю Печать предусмотрен как в документах, так и в списках.
                          +
                          Настроенный состав команд подменю Печать предусмотрен как в документах, так и в списках.
                        • -
                          В списке можно выделить несколько документов и распечатать. При множественном выборе в форме списка или в журнале документов в составе подменю Печать остаются доступными только те печатные формы, которые подходят сразу ко всем выбранным документам.
                          +
                          В списке можно выделить несколько документов и распечатать. При множественном выборе в форме списка или в журнале документов в составе подменю Печать остаются доступными только те печатные формы, которые подходят сразу ко всем выбранным документам.
                        • Состав подменю Печать в ряде документов, списков и журналов автоматически подстраивается под выбранный документ: показываются только те печатные формы, которые могут быть для него сформированы при текущих значениях реквизитов.
                          diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Help/ru.html b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Help/ru.html index 4259e4da1..899b03f51 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Help/ru.html @@ -1,4 +1,4 @@ -Предназначен для просмотра и управления доступными командами текущим пользователем.  +Предназначен для просмотра и управления доступными командами текущим пользователем.

                          В списке можно включать или выключать предусмотренные команды с помощью флажков. -

                          Для того чтобы в списке были доступны команды, администратор приложения при настройке дополнительного отчета или обработки должен сначала включить имя данного пользователя в список для быстрого доступа, иначе список доступных команд может быть пустым. При этом состав и текст команд в дополнительных отчетах и обработках определяется разработчиком.
                          \ No newline at end of file +

                          Для того чтобы в списке были доступны команды, администратор приложения при настройке дополнительного отчета или обработки должен сначала включить имя данного пользователя в список для быстрого доступа, иначе список доступных команд может быть пустым. При этом состав и текст команд в дополнительных отчетах и обработках определяется разработчиком.
                  \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl index b4f23ed3e..68c09cb07 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl @@ -27,9 +27,9 @@ ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы); ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме); - Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Параметры.ВидОбработок, Параметры.СсылкаРаздела, , ТипыКоманд, Ложь); - ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); - ИспользуемыеКоманды.Загрузить(ТаблицаРезультат); + ДополнительныеКоманды = ДополнительныеОтчетыИОбработки.ДополнительныеКоманды(Параметры.ВидОбработок, + Параметры.СсылкаРаздела, , ТипыКоманд, Ложь); + ИспользуемыеКоманды.Загрузить(ДополнительныеКоманды); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html index 2da707d14..593dd15e7 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html @@ -13,5 +13,5 @@
                  • В поле Провайдер необходимо выбрать поставщика услуги, с которым заключен договор.
                  • Выберите Способ авторизации, указанный в договоре с провайдером;
                  • -
                  • При заключении договора получателю услуги предоставляются идентификационные данные, напишите их в соответствующие поля. Укажите Логин и Пароль или другие данные для авторизации, указанные в договоре.
                  • +
                  • При заключении договора получателю услуги предоставляются идентификационные данные, напишите их в соответствующие поля. Укажите Логин и Пароль или другие данные для авторизации, указанные в договоре.
                  • В настройках отправки SMS можно указать Имя отправителя. Поддерживается только латиница. В этом случае SMS будут приходить с указанного имени, а не с номера телефона отправителя.
                  \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаПереводаТекста/Form.form b/SSL/src/CommonForms/НастройкаПереводаТекста/Form.form index 1755e1c7b..d43aa9d11 100644 --- a/SSL/src/CommonForms/НастройкаПереводаТекста/Form.form +++ b/SSL/src/CommonForms/НастройкаПереводаТекста/Form.form @@ -1,5 +1,183 @@ + + ЗаголовокКонтекстногоРежима + 17 + + <key>ru</key> + <value>Для перевода текста выберите сервис и укажите настройки</value> + + true + true + + true + + + ЗаголовокКонтекстногоРежимаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ЗаголовокКонтекстногоРежимаКонтекстноеМеню + 18 + true + + Label + true + + System.DefaultGUIFont + true + false + false + false + + + Left + + + + КоманднаяПанель + 20 + + ЗаписатьИЗакрыть + 9 + + <key>ru</key> + <value>Записать и закрыть</value> + + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + true + true + true + UserCmds + + StdPicture.WriteAndClose + + Auto + + + ФормаЗаписать + 15 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СтандартныеКоманды + 11 + true + true + + true + + + <key>ru</key> + <value>Стандартные команды</value> + + + СтандартныеКомандыРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 13 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + CommandBar + + Left + + СервисПереводаТекста 1 @@ -113,117 +291,6 @@ ФормаКоманднаяПанель -1 - - ЗаписатьИЗакрыть - 9 - - <key>ru</key> - <value>Записать и закрыть</value> - - true - true - - true - - - ЗаписатьИЗакрытьРасширеннаяПодсказка - 10 - Label - true - true - - Left - - - Form.Command.ЗаписатьИЗакрыть - true - true - true - UserCmds - - StdPicture.WriteAndClose - - Auto - - - ФормаЗаписать - 15 - true - true - - true - - - ФормаЗаписатьРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - Form.StandardCommand.Write - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СтандартныеКоманды - 11 - true - true - - true - - - <key>ru</key> - <value>Стандартные команды</value> - - - СтандартныеКомандыРасширеннаяПодсказка - 12 - Label - true - true - - Left - - - - Form - - - - ФормаСправка - 13 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 14 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left @@ -253,6 +320,9 @@ true + + НаборКонстант.ИспользоватьСервисПереводаТекста +
                  true
                  true @@ -294,15 +364,29 @@ Auto Auto + + ЭтоКонтекстныйВызов + + Boolean + + + + AfterWrite + ПослеЗаписи + OnReadAtServer ПриЧтенииНаСервере + + BeforeWriteAtServer + ПередЗаписьюНаСервере + OnWriteAtServer ПриЗаписиНаСервере diff --git a/SSL/src/CommonForms/НастройкаПереводаТекста/Help/ru.html b/SSL/src/CommonForms/НастройкаПереводаТекста/Help/ru.html index b5d8e5659..568be1dc9 100644 --- a/SSL/src/CommonForms/НастройкаПереводаТекста/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаПереводаТекста/Help/ru.html @@ -1,6 +1,6 @@ -
                  Для упрощения перевода макетов и ввода реквизитов на разных языках в приложении предусмотрена возможность использования онлайн-сервисов перевода текста (например, Яндекс.Переводчик и Google Переводчик). Для того чтобы задействовать эту возможность, включите флажок Перевод текста с помощью внешнего сервиса в разделе Администрирование - Печатные формы, отчеты и обработки.
                  -
                  Выберите из списка нужный Сервис перевода текста, далее следуйте инструкции по настройке выбранного сервиса. За использование сервиса перевода текста может взиматься плата. Условия использования необходимо уточнить на сайте соответствующего сервиса.
                  +
                  Для упрощения перевода макетов и ввода реквизитов на разных языках в приложении предусмотрена возможность использования онлайн-сервисов перевода текста (например, Яндекс.Переводчик и Google Переводчик). Для того чтобы задействовать эту возможность, включите флажок Перевод текста с помощью внешнего сервиса в разделе Администрирование - Печатные формы, отчеты и обработки.
                  +
                  Выберите из списка нужный Сервис перевода текста, далее следуйте инструкции по настройке выбранного сервиса. За использование сервиса перевода текста может взиматься плата. Условия использования необходимо уточнить на сайте соответствующего сервиса.
                  После подключения сервиса становится возможным автоматический перевод текста.
                  diff --git a/SSL/src/CommonForms/НастройкаПереводаТекста/Module.bsl b/SSL/src/CommonForms/НастройкаПереводаТекста/Module.bsl index 44aa589c7..71d3a1129 100644 --- a/SSL/src/CommonForms/НастройкаПереводаТекста/Module.bsl +++ b/SSL/src/CommonForms/НастройкаПереводаТекста/Module.bsl @@ -15,6 +15,19 @@ Элементы.ЗаписатьИЗакрыть.Отображение = ОтображениеКнопки.Картинка; КонецЕсли; + Элементы.ЗаголовокКонтекстногоРежима.Видимость = Параметры.ЭтоКонтекстныйВызов; + + Если Параметры.ЭтоКонтекстныйВызов Тогда + Элементы.ЗаписатьИЗакрыть.Заголовок = НСтр("ru = 'Записать и продолжить'"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + ТекущийОбъект.ИспользоватьСервисПереводаТекста = ЗначениеЗаполнено(ТекущийОбъект.СервисПереводаТекста); + КонецПроцедуры &НаСервере @@ -36,13 +49,28 @@ Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если Не ЗначениеЗаполнено(НаборКонстант.СервисПереводаТекста) Тогда - НаборКонстант.СервисПереводаТекста = Перечисления.СервисыПереводаТекста.ЯндексПереводчик; + + СервисПереводаТекста = Неопределено; + ПереводТекстаНаДругиеЯзыкиЛокализация.ПриОпределенииСервисПереводаТекста(СервисПереводаТекста); + + НаборКонстант.СервисПереводаТекста = ?(ЗначениеЗаполнено(СервисПереводаТекста), + СервисПереводаТекста, Перечисления.СервисыПереводаТекста.GoogleПереводчик); КонецЕсли; ЗаполнитьНастройки(); КонецПроцедуры +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + + ЗаписанныеЗначения = Новый Структура; + ЗаписанныеЗначения.Вставить("СервисПереводаТекста", НаборКонстант.СервисПереводаТекста); + + Оповестить("Запись_НаборКонстант", ЗаписанныеЗначения, "ИспользоватьСервисПереводаТекста"); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html index ba95bc7d4..e0c401663 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Help/ru.html @@ -1,14 +1,14 @@

                  Предназначена для настройки параметров рабочего каталога.

                  -

                  Рабочий каталог - папка на Вашем персональном компьютере, в которой временно хранятся файлы, полученные из приложения для просмотра или редактирования.

                  -

                  Открывается по ссылке Настройка рабочего каталога в персональных настройках приложения (вкладка Работа с файлами).

                  +

                  Рабочий каталог - папка на Вашем персональном компьютере, в которой временно хранятся файлы, полученные из приложения для просмотра или редактирования.

                  +

                  Открывается по ссылке Настройка рабочего каталога в персональных настройках приложения (вкладка Работа с файлами).

                  Расположение рабочего каталога

                  -
                  • В поле Расположение указывается путь к основному рабочему каталогу на Вашем персональном компьютере. +
                    • В поле Расположение указывается путь к основному рабочему каталогу на Вашем персональном компьютере.
                    • -
                    • Устанавливается приложением автоматически, но может быть изменен при необходимости. Для этого  Выберите другую папку на компьютере. При выборе другого пути к основному рабочему каталогу надо выбирать пустой каталог (не содержащий файлов или подкаталогов). +
                    • Устанавливается приложением автоматически, но может быть изменен при необходимости. Для этого Выберите другую папку на компьютере. При выборе другого пути к основному рабочему каталогу надо выбирать пустой каталог (не содержащий файлов или подкаталогов).
                    • -
                    • Для того чтобы вернуться к первоначальным настройкам приложения, нажмите кнопку  Восстановить значение по умолчанию.

                    Максимальный размер

                    -
                    • В поле Максимальный размер (Мб) установите предел суммарного объема всех файлов в основном рабочем каталоге (по умолчанию 100 Мб). Если установлен равным 0, то объем файлов не ограничен. Размер указывается в мегабайтах (Мб).

                    Удаление файлов после редактирования

                    -
                    • Если установлен флажок Удалять файлы при завершении редактирования, то после переноса в приложение файл удаляется на Вашем персональном компьютере. Используйте эту настройку для экономии места на устройстве или в целях повышения безопасности. По умолчанию флажок снят.

                    Текущее состояние

                    +
                  • Для того чтобы вернуться к первоначальным настройкам приложения, нажмите кнопку Восстановить значение по умолчанию.

                  Максимальный размер

                  +
                  • В поле Максимальный размер (Мб) установите предел суммарного объема всех файлов в основном рабочем каталоге (по умолчанию 100 Мб). Если установлен равным 0, то объем файлов не ограничен. Размер указывается в мегабайтах (Мб).

                  Удаление файлов после редактирования

                  +
                  • Если установлен флажок Удалять файлы при завершении редактирования, то после переноса в приложение файл удаляется на Вашем персональном компьютере. Используйте эту настройку для экономии места на устройстве или в целях повышения безопасности. По умолчанию флажок снят.

                  Текущее состояние

                  • Приложение показывает Текущее состояние основного рабочего каталога - количество Файлов, содержащихся в нем и их Общий объем (Мб).

                  Очистка основного рабочего каталога

                  -
                  • Нажмите Очистить рабочий каталог, для того чтобы удалить все файлы в основном рабочем каталоге, кроме занятых Вами для редактирования. Для подтверждения очистки нажмите Да.
                  \ No newline at end of file +
                  • Нажмите Очистить рабочий каталог, для того чтобы удалить все файлы в основном рабочем каталоге, кроме занятых Вами для редактирования. Для подтверждения очистки нажмите Да.
                  \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl index 15f7d7f82..d5e6f5c42 100644 --- a/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl +++ b/SSL/src/CommonForms/НастройкаРабочегоКаталога/Module.bsl @@ -29,9 +29,9 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если НЕ РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда + Если НЕ РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Истина); - ПодключитьОбработчикОжидания("ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами", 0.1, Истина); + ПодключитьОбработчикОжидания("ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия", 0.1, Истина); Отказ = Истина; Возврат; КонецЕсли; @@ -51,7 +51,7 @@ СтандартнаяОбработка = Ложь; - Если НЕ РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда + Если НЕ РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда Возврат; КонецЕсли; @@ -85,10 +85,10 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами() +Процедура ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия() СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Ложь); - РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(Неопределено); + РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено); КонецПроцедуры @@ -139,7 +139,7 @@ Элемент.Вставить("Значение", УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования); ПерсональныеНастройки.Добавить(Элемент); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(ПерсональныеНастройки, Истина); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранитьМассив(ПерсональныеНастройки, Истина); КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html b/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html index 02b432e1d..0564b59a4 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html @@ -1,35 +1,35 @@ -

                  Предназначена для настройки параметров входа в приложение для внутренних и внешних пользователей.

                  +

                  Предназначена для настройки параметров входа в приложение для внутренних и внешних пользователей.

                  Содержит четыре вкладки:

                  • Для пользователей;
                  • Для внешних пользователей (если разрешен доступ внешним пользователям);
                  • Дополнительно;
                  • Запрещенные пароли (доступно в платформе 1С:Предприятие 8.3.26).

                  Требования к паролю


                  -

                  Для защиты от несанкционированного доступа к приложению укажите с помощью флажков:

                  +

                  Для защиты от несанкционированного доступа к приложению укажите с помощью флажков:

                  • Пароль должен отвечать требованиям сложности - настройка и контроль сложности пароля. Включите флажок, для того чтобы проверять, чтобы новый пароль имел не менее 7 символов, содержал любые 3 из 4-х типов символов: заглавные буквы, строчные буквы, цифры, специальные символы, не совпадал с именем (для входа);
                  • Минимальная длина пароля - по умолчанию 8 знаков;
                  • -
                  • Пароль должен отсутствовать в списке запрещенных - подробнее см. запрещенные пароли (доступно в платформе 1С:Предприятие 8.3.26);
                  • -
                  • Если одно из требований выше не выполнено при входе - то можно предложить или потребовать смену пароля (доступно в платформе 1С:Предприятие 8.3.26);
                  • +
                  • Пароль должен отсутствовать в списке запрещенных - подробнее см. запрещенные пароли (доступно в платформе 1С:Предприятие 8.3.26);
                  • +
                  • Если одно из требований выше не выполнено при входе - то можно предложить или потребовать смену пароля (доступно в платформе 1С:Предприятие 8.3.26);
                  • Максимальный срок действия пароля - срок после первого входа с новым паролем, после которого пользователю потребуется сменить пароль, по умолчанию 30 дней.
                  • Минимальный срок действия пароля - срок после первого входа с новым паролем, в течение которого пользователь не может сменить пароль, по умолчанию 1 день.
                  • Запретить повторение пароля среди последних - по умолчанию 10 значений. Таким образом, обеспечивается контроль повторяемости паролей;
                  • -
                  • Предупреждать об окончании срока действия пароля за - по умолчанию 5 дней до истечения срока действия пароля.  При входе в приложение появляется предупреждающее окно для смены пароля, где сразу можно сменить пароль;
                  • -
                  • Запрещать вход в приложение пользователям, которые не работали в приложении более - срок относительно последней активности пользователя, после которого вход в приложение будет запрещен, по умолчанию 45 дней.

                  Можно установить Отдельные настройки для внешних пользователей. 

                  -

                  На вкладке Дополнительно с помощью флажка Если пользователю ограничен срок работы в приложении, предупреждать за (по умолчанию 7 дней) - выводится предупреждение, если включено ограничение на вход в карточке пользователя или включена общая настройка входа.

                  -

                  Также отображается настройка Показывать в списке выбора в карточке пользователя: 

                  -
                  • Включено для новых пользователей - в карточке нового пользователя флажок Показывать в списке выбора будет включен;
                  • -
                  • Выключено для новых пользователей - в карточке нового пользователя флажок Показывать в списке выбора будет выключен; 
                  • -
                  • Скрыто и включено для всех пользователей - при входе в приложение список выбора пользователей будет полным, а флажок Показывать в списке выбора в карточках всех пользователей будет включен и скрыт;
                  • -
                  • Скрыто и выключено для всех пользователей  - при входе в приложение список пользователей станет пустым, а флажок Показывать в списке выбора в карточках всех пользователей будет очищен и скрыт. 

                  При использовании платформы 1С:Предприятие версии 8.3.26 на вкладке Дополнительно также можно задать следующие параметры: 

                  -
                  • Завершать сеанс при бездействии пользователя более  - если пользователь не выполняет никаких действий в приложении в течение определенного периода времени, то можно завершить его сеанс, по умолчанию более 960 мин. Также есть возможность Предупредить о завершении сеанса при бездействии, по умолчанию за 5 мин.; 
                  • -
                  • Разрешить сохранять пароль при входе в приложение - сохранение пароля при входе в приложение упрощает авторизацию и избавляет от необходимости вводить пароль каждый раз. При этом можно указать Время сохранения пароля, по умолчанию 7200 мин. 

                  В случае клиент-серверного варианта работы на вкладке Дополнительно также можно указать Количество попыток ввода пароля до блокировки (по умолчанию 3 попытки) и Длительность блокировки ввода пароля (по умолчанию 5 мин.).

                  -

                  На вкладке Запрещенные пароли отображается настройка списка запрещенных паролей, которая помогает повысить безопасность учетных записей пользователя (доступно в платформе 1С:Предприятие 8.3.26): 

                  -
                  • Стандартный список - база паролей, которая встроена в платформу 1С:Предприятие;
                  • -
                  • Дополнительный список - позволяет установить список паролей из текстового файла; 
                  • -
                  • Сервис проверки - позволяет проверить вводимые пароли на соответствие списку запрещенных паролей. Если вводимый пароль совпадает с одним из запрещенных, система отказывает в регистрации такого пароля. Максимальное время ожидания сервиса, по умолчанию 1 сек. Также можно Разрешить вход, если сервис не сможет выполнить проверку.

                  См. также:

                  +
                • Предупреждать об окончании срока действия пароля за - по умолчанию 5 дней до истечения срока действия пароля. При входе в приложение появляется предупреждающее окно для смены пароля, где сразу можно сменить пароль;
                • +
                • Запрещать вход в приложение пользователям, которые не работали в приложении более - срок относительно последней активности пользователя, после которого вход в приложение будет запрещен, по умолчанию 45 дней.

                Можно установить Отдельные настройки для внешних пользователей.

                +

                На вкладке Дополнительно с помощью флажка Если пользователю ограничен срок работы в приложении, предупреждать за (по умолчанию 7 дней) - выводится предупреждение, если включено ограничение на вход в карточке пользователя или включена общая настройка входа.

                +

                Также отображается настройка Показывать в списке выбора в карточке пользователя:

                +
                • Включено для новых пользователей - в карточке нового пользователя флажок Показывать в списке выбора будет включен;
                • +
                • Выключено для новых пользователей - в карточке нового пользователя флажок Показывать в списке выбора будет выключен;
                • +
                • Скрыто и включено для всех пользователей - при входе в приложение список выбора пользователей будет полным, а флажок Показывать в списке выбора в карточках всех пользователей будет включен и скрыт;
                • +
                • Скрыто и выключено для всех пользователей - при входе в приложение список пользователей станет пустым, а флажок Показывать в списке выбора в карточках всех пользователей будет очищен и скрыт.

                При использовании платформы 1С:Предприятие версии 8.3.26 на вкладке Дополнительно также можно задать следующие параметры:

                +
                • Завершать сеанс при бездействии пользователя более - если пользователь не выполняет никаких действий в приложении в течение определенного периода времени, то можно завершить его сеанс, по умолчанию более 960 мин. Также есть возможность Предупредить о завершении сеанса при бездействии, по умолчанию за 5 мин.;
                • +
                • Разрешить сохранять пароль при входе в приложение - сохранение пароля при входе в приложение упрощает авторизацию и избавляет от необходимости вводить пароль каждый раз. При этом можно указать Время сохранения пароля, по умолчанию 7200 мин.

                В случае клиент-серверного варианта работы на вкладке Дополнительно также можно указать Количество попыток ввода пароля до блокировки (по умолчанию 3 попытки) и Длительность блокировки ввода пароля (по умолчанию 5 мин.).

                +

                На вкладке Запрещенные пароли отображается настройка списка запрещенных паролей, которая помогает повысить безопасность учетных записей пользователя (доступно в платформе 1С:Предприятие 8.3.26):

                +
                • Стандартный список - база паролей, которая встроена в платформу 1С:Предприятие;
                • +
                • Дополнительный список - позволяет установить список паролей из текстового файла;
                • +
                • Сервис проверки - позволяет проверить вводимые пароли на соответствие списку запрещенных паролей. Если вводимый пароль совпадает с одним из запрещенных, система отказывает в регистрации такого пароля. Максимальное время ожидания сервиса, по умолчанию 1 сек. Также можно Разрешить вход, если сервис не сможет выполнить проверку.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl index ec4815be6..42a25eadb 100644 --- a/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl +++ b/SSL/src/CommonForms/НастройкиПравОбъектов/Module.bsl @@ -432,8 +432,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции &НаКлиенте Процедура ОбновитьЗависимыеПрава(Знач Данные, Знач Право, Знач СтароеЗначение, Знач ГлубинаРекурсии = 0) @@ -1014,3 +1013,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКДанным/Help/ru.html b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКДанным/Help/ru.html index ce8d58440..c723822d2 100644 --- a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКДанным/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКДанным/Help/ru.html @@ -1,6 +1,6 @@

                Предназначена для настройки регистрации событий доступа к любым данным (в рамках возможностей платформы 1С:Предприятие).

                -

                Открывается по команде Настройки из раздела Настройки пользователей и прав - Администрирование.

                -

                Для регистрации событий доступа к данным (событий чтения данных) нужно выбрать интересующие таблицы объектов метаданных, далее отметить поля (первая колонка), чтение которых требуется контролировать и поля (вторая колонка), значения которых нужно записывать в событие Доступ.Доступ журнала регистрации при чтении контролируемых полей.

                +

                Открывается по команде Настройки из раздела Настройки пользователей и прав - Администрирование.

                +

                Для регистрации событий доступа к данным (событий чтения данных) нужно выбрать интересующие таблицы объектов метаданных, далее отметить поля (первая колонка), чтение которых требуется контролировать и поля (вторая колонка), значения которых нужно записывать в событие Доступ.Доступ журнала регистрации при чтении контролируемых полей.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html index 538536ff7..a33e372b7 100644 --- a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html @@ -1,7 +1,7 @@ -

                Предназначена для настройки регистрации событий доступа к персональным данным (в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных").

                -

                Открывается по команде Регистрация событий доступа к персональным данным из раздела Настройки пользователей и прав - Администрирование.

                -

                Для регистрации событий доступа к личным данным физических лиц администратору приложения необходимо установить флажок Личные данные.

                -

                Для регистрации доступа к паспортным данным установите флажок Паспортные данные. После этого приложение автоматически регистрирует события доступа к этим данным в списке событий.

                +

                Предназначена для настройки регистрации событий доступа к персональным данным (в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных").

                +

                Открывается по команде Регистрация событий доступа к персональным данным из раздела Настройки пользователей и прав - Администрирование.

                +

                Для регистрации событий доступа к личным данным физических лиц администратору приложения необходимо установить флажок Личные данные.

                +

                Для регистрации доступа к паспортным данным установите флажок Паспортные данные. После этого приложение автоматически регистрирует события доступа к этим данным в списке событий.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Form.form b/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Form.form index 0aef64231..1a534f06d 100644 --- a/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Form.form +++ b/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Form.form @@ -52,7 +52,7 @@ 626 <key>ru</key> - <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то нажмите на кнопку "Новая синхронизация данных". + <value>Если для работы в этом приложении необходимо синхронизировать данные с другими приложениями или требуется настроить распределенную информационную базу, то нажмите на кнопку "Новая синхронизация данных". Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> true @@ -115,7 +115,7 @@ 631 <key>ru</key> - <value>Если для работы в этой программе необходимо синхронизировать данные с другими программами или требуется настроить распределенную информационную базу, то обратитесь к администратору информационной базы. + <value>Если для работы в этом приложении необходимо синхронизировать данные с другими приложениями или требуется настроить распределенную информационную базу, то обратитесь к администратору информационной базы. Данные могут синхронизироваться автоматически по расписанию или по требованию в любой момент времени.</value> true @@ -298,7 +298,7 @@ 749 <key>ru</key> - <value>Необходимо установить обновление программы, после чего синхронизация данных будет продолжена.</value> + <value>Необходимо установить обновление приложения, после чего синхронизация данных будет продолжена.</value> true true @@ -544,7 +544,7 @@ 764 <key>ru</key> - <value>Изменены расширения конфигурации. Чтобы продолжить работу с учетом сделанных изменений, необходимо <link 1>перезапустить</> программу.</value> + <value>Изменены расширения конфигурации. Чтобы продолжить работу с учетом сделанных изменений, необходимо <link 1>перезапустить</> приложение.</value> true true @@ -879,9 +879,9 @@ ru Для некоторых синхронизаций есть возможность настроить обмен через Интернет (веб-сервис). Это позволит ускорить обмен и более гибко настроить график синхронизации. -Для перехода на обмен посредством веб-сервиса, воспользуйтесь помощником перехода в списке <img :2d40609d-b56f-4082-9a6f-8216817ebd24:00000000-0000-0000-0000-000000000000/>. +Для перехода на обмен посредством веб-сервиса, воспользуйтесь помощником перехода (клик по значку <img 0:2d40609d-b56f-4082-9a6f-8216817ebd24/> в списке синхронизаций). -<link НеПредлагатьПерейтиНаВебСервис>Больше не предлагать перейти на веб-сервис</>. (Вызвать помощник перехода можно через меню узла синхронизации <b>Ещё</>) +<link НеПредлагатьПерейтиНаВебСервис>Больше не предлагать перейти на веб-сервис</>. (Вызвать помощник перехода можно через меню <b>Ещё</> узла синхронизации ) true true @@ -1645,12 +1645,64 @@ MoveUp SortListAsc SortListDesc + + СписокПриложенийТранспортКартинка + 798 + + <key>ru</key> + <value>Транспорт картинка</value> + + true + true + + true + + + СписокПриложений.ТранспортКартинка + + None + + СписокПриложенийТранспортКартинкаРасширеннаяПодсказка + 800 + Label + true + true + + Left + + + + СписокПриложенийТранспортКартинкаКонтекстноеМеню + 799 + true + + PictureField + Auto + true + + CommonPicture.ТранспортПередачаДанных + + Left + true + + true + 1 + true + true + true + + + 1 + + AsFileRef + + СписокПриложенийПрограмма 588 <key>ru</key> - <value>Программа</value> + <value>Приложение</value> true true @@ -2752,9 +2804,6 @@ СписокПриложений.РежимРаботыПриложения - - CommonPicture.РежимИспользованияПриложенияВСервисеЛокально - true @@ -2963,7 +3012,7 @@ 515 <key>ru</key> - <value>Префикс добавляется автоматически к кодам элементов справочников и номерам документов для того, чтобы различать, в какой из программ они были введены, и избежать дублирования данных. Префикс вводиться в панели администрирования до настройки первой синхронизации и неизменен до тех пор, пока в информационной базе есть хотя бы одна синхронизация.</value> + <value>Префикс добавляется автоматически к кодам элементов справочников и номерам документов для того, чтобы различать, в каком из приложений они были введены, и избежать дублирования данных. Префикс вводиться в панели администрирования до настройки первой синхронизации и неизменен до тех пор, пока в информационной базе есть хотя бы одна синхронизация.</value> Label true @@ -3601,7 +3650,7 @@ НаименованиеКорреспондента <key>ru</key> - <value>Программа</value> + <value>Приложение</value> 30 @@ -3740,6 +3789,37 @@ true + + ИдентификаторТранспорта + 39 + + String + + + + true + + + true + + + + ТранспортКартинка + + <key>ru</key> + <value>Транспорт картинка</value> + + 38 + + Picture + + + true + + + true + + ЕстьПраваНаАдминистрированиеОбменов diff --git a/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Help/ru.html b/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Help/ru.html index d30514aad..8bec4206a 100644 --- a/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Help/ru.html @@ -1,10 +1,10 @@

                Предназначено для настройки синхронизации данных и хранения существующих настроек синхронизации данных.

                -

                Список Настройки синхронизации данных можно найти на Рабочем столе приложения или открыть в разделе Администрирование - Синхронизация данных по соответствующей команде.

                -

                 В окне выводится:

                +

                Список Настройки синхронизации данных можно найти на Рабочем столе приложения или открыть в разделе Администрирование - Синхронизация данных по соответствующей команде.

                +

                В окне выводится:

                • -
                  Приложение - наименование приложения, с которой настроена данная синхронизация;
                  +
                  Приложение - наименование приложения, с которой настроена данная синхронизация;
                • @@ -16,10 +16,10 @@
                • -
                • Информация по датам выполненных отправок и получений, для наглядности неуспешные отправки и получения данных отмечаются красным значком . Отражается также состояние синхронизации (время, прошедшее с последней попытки синхронизации в минутах, Сейчас, Никогда). 
                • +
                • Информация по датам выполненных отправок и получений, для наглядности неуспешные отправки и получения данных отмечаются красным значком . Отражается также состояние синхронизации (время, прошедшее с последней попытки синхронизации в минутах, Сейчас, Никогда).
                • Если при синхронизации произошли ошибки или она не состоялась, по ссылке можно просмотреть список ошибок и проблем. Ссылка также показывает количество предупреждений, перейдя по ссылке можно ознакомиться с предупреждениями, возникшими при синхронизации данных:
                  • Данные отправлены - отражается время последней отправки данных, ссылка показывает количество предупреждений;
                  • -
                  • Данные получены - отражается время последнего получения данных, ссылка показывает количество предупреждений.
                •  - синхронизация данных выполняется по расписанию. В этой колонке проставляется аналогичный значок для синхронизаций, которые выполняются автоматически по заданному сценарию; +
                • Данные получены - отражается время последнего получения данных, ссылка показывает количество предупреждений.
              • - синхронизация данных выполняется по расписанию. В этой колонке проставляется аналогичный значок для синхронизаций, которые выполняются автоматически по заданному сценарию;
              • @@ -36,17 +36,17 @@
                Настройка не завершена - настройка синхронизации была прервана. В этом случае можно продолжить настройку, нажав кнопку Настроить.
              • -
                Настройка не завершена, получены данные для сопоставления - в таком состоянии настройка синхронизации данных между разными приложениями отражается в приложении-приемнике в случае прямого подключения и тогда необходимо продолжать настройку;
                +
                Настройка не завершена, получены данные для сопоставления - в таком состоянии настройка синхронизации данных между разными приложениями отражается в приложении-приемнике в случае прямого подключения и тогда необходимо продолжать настройку;
              • Получены данные для сопоставления - для анализа и сопоставления полученных данных нажмите кнопку Запустить синхронизацию.

            Настройка синхронизации данных

            • -
              Для настройки новой синхронизации данных с другим приложением или создания распределенной базы нажмите кнопку Создать, выберите команду из подменю Новая синхронизация данных. Откроется настройка синхронизации данных.

            Синхронизация данных

            +
            Для настройки новой синхронизации данных с другим приложением или создания распределенной базы нажмите кнопку Создать, выберите команду из подменю Новая синхронизация данных. Откроется настройка синхронизации данных.

          Синхронизация данных

          • -
            Выделите нужную настройку, нажмите  Синхронизировать, для того чтобы начать синхронизацию данных.
            +
            Выделите нужную настройку, нажмите Синхронизировать, для того чтобы начать синхронизацию данных.
          • -
            Для синхронизации данных между двумя приложениями с помощью кнопки  или команды Еще - Синхронизировать с дополнительными параметрами запускается сопоставление одинаковых данных.  Такая процедура полезна в тех случаях, когда в обоих приложениях по каким-то причинам были независимо друг от друга введены одни и те же данные. Для снижения вероятности таких ситуаций можно настроить частую синхронизацию данных по расписанию. 

          Изменение синхронизации данных

          +
          Для синхронизации данных между двумя приложениями с помощью кнопки или команды Еще - Синхронизировать с дополнительными параметрами запускается сопоставление одинаковых данных. Такая процедура полезна в тех случаях, когда в обоих приложениях по каким-то причинам были независимо друг от друга введены одни и те же данные. Для снижения вероятности таких ситуаций можно настроить частую синхронизацию данных по расписанию.

          Изменение синхронизации данных

          • Для того чтобы изменить или продолжить настройку синхронизации данных, нажмите кнопку Изменить настройки.
          • @@ -55,39 +55,39 @@

            Выгрузка данных для сопоставления

            • -
              Выполните команду меню Еще - Выгрузка данных для сопоставления. 

            Настройка синхронизации по расписанию

            +
            Выполните команду меню Еще - Выгрузка данных для сопоставления.

          Настройка синхронизации по расписанию

          • -
            С помощью ссылки в нижней части окна Синхронизация по расписанию можно  настроить синхронизацию данных по заданному расписанию. В этом случае в клиент-серверном режиме работы синхронизация данных будет выполняться в фоне, с помощью регламентного задания Синхронизация данных, а в файловом режиме дополнительно потребуется запустить отдельный сеанс для выполнения регламентных заданий.

          Просмотр журнала регистрации

          +
          С помощью ссылки в нижней части окна Синхронизация по расписанию можно настроить синхронизацию данных по заданному расписанию. В этом случае в клиент-серверном режиме работы синхронизация данных будет выполняться в фоне, с помощью регламентного задания Синхронизация данных, а в файловом режиме дополнительно потребуется запустить отдельный сеанс для выполнения регламентных заданий.

          Просмотр журнала регистрации

          • -
            С помощью команд меню Еще - События отправки данных или События получения данных можно подробно узнать, как проходила синхронизация данных, из журнала регистрации приложения, отфильтрованного по событиям синхронизации, а также просмотреть каждое событие.

          Замена правил для синхронизации из внешнего файла

          +
          С помощью команд меню Еще - События отправки данных или События получения данных можно подробно узнать, как проходила синхронизация данных, из журнала регистрации приложения, отфильтрованного по событиям синхронизации, а также просмотреть каждое событие.

          Замена правил для синхронизации из внешнего файла

          • -
            Для замены типовых правил конвертации объектов и правил регистрации объектов правилами из внешнего файла необходимо:
            +
            Для замены типовых правил конвертации объектов и правил регистрации объектов правилами из внешнего файла необходимо:
            • Открыть синхронизацию данных, для которой требуется изменить правила.
            • -
            • Выполнить команду Еще - Загрузить правила. +
            • Выполнить команду Еще - Загрузить правила.
            • -
            • В окне правил конвертации или регистрации объектов установить значение переключателя в положение Загрузить из файла на компьютере и по кнопке Загрузить выбрать файл правил на компьютере или в сетевой папке.
            • Обратить внимание, что загружены корректные правила, подходящие для используемых версий приложения-источника и приложения-приемника. +
            • В окне правил конвертации или регистрации объектов установить значение переключателя в положение Загрузить из файла на компьютере и по кнопке Загрузить выбрать файл правил на компьютере или в сетевой папке.
            • Обратить внимание, что загружены корректные правила, подходящие для используемых версий приложения-источника и приложения-приемника.
            • Нажать на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.

          Удаление настройки синхронизации

          • -
            Выделите настройку, нажмите Еще -  Удалить настройку.
            +
            Выделите настройку, нажмите Еще - Удалить настройку.
          • Внимание! Настройка будет удалена безвозвратно.

          Действия при восстановлении информационной базы из резервной копии

          • При восстановлении информационной базы из резервной копии рекомендуется:
            • -
              Временно отключить автоматическое выполнение синхронизации данных (снять флажок Автоматически по расписанию во всех сценариях синхронизации данных);
              +
              Временно отключить автоматическое выполнение синхронизации данных (снять флажок Автоматически по расписанию во всех сценариях синхронизации данных);
            • -
              Отменить отправку данных, приготовленных для других приложений (для каждой настройки синхронизации данных выполнить команду Еще – Состав отправляемых данных, в открывшемся окне Регистрация изменений в дереве объектов отметить корень и выполнить команду Отменить регистрацию – Всех объектов выбранных типов);
              +
              Отменить отправку данных, приготовленных для других приложений (для каждой настройки синхронизации данных выполнить команду Еще – Состав отправляемых данных, в открывшемся окне Регистрация изменений в дереве объектов отметить корень и выполнить команду Отменить регистрацию – Всех объектов выбранных типов);
            • -
              Заново выполнить отправку данных, введенных в других приложениях с момента выполнения резервной копии этой информационной базы, из других приложений в эту информационную базу;
              +
              Заново выполнить отправку данных, введенных в других приложениях с момента выполнения резервной копии этой информационной базы, из других приложений в эту информационную базу;
            • Восстановить автоматическое выполнение синхронизации данных.
          • -
            При потере существенной части данных рекомендуется удалить все настройки синхронизации данных с другими приложениями и выполнить настройку синхронизации заново. В противном случае, может произойти потеря данных в приложениях, с которыми настроена синхронизация, из-за отправки в них устаревших данных из восстановленной информационной базы.

          См. также:

          +
          При потере существенной части данных рекомендуется удалить все настройки синхронизации данных с другими приложениями и выполнить настройку синхронизации заново. В противном случае, может произойти потеря данных в приложениях, с которыми настроена синхронизация, из-за отправки в них устаревших данных из восстановленной информационной базы.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Module.bsl b/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Module.bsl index fb404a07a..393a939a1 100644 --- a/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Module.bsl +++ b/SSL/src/CommonForms/НастройкиСинхронизацииДанных/Module.bsl @@ -116,6 +116,30 @@ КонецЕсли; + ИначеЕсли Поле.Имя = "СписокПриложенийТранспортКартинка" Тогда + + ТекущиеДанные = Элементы.СписокПриложений.ТекущиеДанные; + + Если ЗначениеЗаполнено(ТекущиеДанные.ИдентификаторТранспорта) Тогда + + ПолноеИмяФормыНастройки = ТранспортСообщенийОбменаВызовСервера.ПолноеИмяФормыНастройки( + ТекущиеДанные.ИдентификаторТранспорта); + + НастройкиТранспорта = ТранспортСообщенийОбменаВызовСервера.НастройкиТранспорта( + ТекущиеДанные.УзелИнформационнойБазы, ТекущиеДанные.ИдентификаторТранспорта); + + ПараметрыФормы = Новый Структура("НастройкиТранспорта", НастройкиТранспорта); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); + ДополнительныеПараметры.Вставить("ИдентификаторТранспорта", ТекущиеДанные.ИдентификаторТранспорта); + + Оповещение = Новый ОписаниеОповещения("СохранитьНастройкиТранспорта", ЭтотОбъект, ДополнительныеПараметры); + + ОткрытьФорму(ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; + Иначе ВыполнитьКомандуСПредварительнойПроверкой("ИзменитьНастройкиСинхронизации"); @@ -124,6 +148,20 @@ КонецПроцедуры +&НаКлиенте +Процедура СохранитьНастройкиТранспорта(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ТранспортСообщенийОбменаВызовСервера.СохранитьНастройкиТранспорта( + ДополнительныеПараметры.Корреспондент, + ДополнительныеПараметры.ИдентификаторТранспорта, + Результат); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -294,11 +332,8 @@ &НаКлиенте Процедура ИзменитьПрефиксИБ(Команда) - ПараметрыФормы = Новый Структура("Префикс", ПрефиксИБ); + ОбменДаннымиКлиент.ОткрытьФормуИзмененияПрефиксаИБ(ПрефиксИБ); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ИзменениеПрефиксаУзлаИБ",ПараметрыФормы,,,,,, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - КонецПроцедуры #КонецОбласти @@ -323,6 +358,7 @@ ОписаниеСтрокиПриложения.Вставить("ЗапускОбменаИзКорреспондента", ТекущиеДанные.ЗапускОбменаИзКорреспондента); ОписаниеСтрокиПриложения.Вставить("ДоступнаИнтерактивнаяОтправка", ТекущиеДанные.ДоступнаИнтерактивнаяОтправка); ОписаниеСтрокиПриложения.Вставить("ВариантОбменаДанными", ТекущиеДанные.ВариантОбменаДанными); + ОписаниеСтрокиПриложения.Вставить("ИдентификаторТранспорта", ТекущиеДанные.ИдентификаторТранспорта); ОписаниеСтрокиПриложения.Вставить("ИспользоватьДопОтборы", ИспользоватьДопОтборы); ОписаниеСтрокиПриложения.Вставить("ЭтоНачальнаяВыгрузка", Ложь); ОписаниеСтрокиПриложения.Вставить("ОписаниеОшибки", Неопределено); @@ -368,8 +404,9 @@ ОписаниеСтрокиПриложения.Вставить("ВнешняяСистема", ТекущиеДанные.ВнешняяСистема); ОписаниеСтрокиПриложения.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); ОписаниеСтрокиПриложения.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); + ОписаниеСтрокиПриложения.Вставить("ИдентификаторТранспорта", ТекущиеДанные.ИдентификаторТранспорта); ОписаниеСтрокиПриложения.Вставить("ЭтоНачальнаяВыгрузка", Истина); - + РезультатыПроверок = СерверныеПроверкиПередВыполнениемКоманд(ОписаниеСтрокиПриложения, ДанныеДляЗавершенияНастройки, "Минимум"); Если РезультатыПроверок.ПродолжитьНастройкуНовойСинхронизации Тогда @@ -517,8 +554,9 @@ ОписаниеСтрокиПриложения.Вставить("ВнешняяСистема", ТекущиеДанные.ВнешняяСистема); ОписаниеСтрокиПриложения.Вставить("ОбластьДанныхКорреспондента", ТекущиеДанные.ОбластьДанных); ОписаниеСтрокиПриложения.Вставить("ЭтоОбменСПриложениемВСервисе", ТекущиеДанные.ЭтоОбменСПриложениемВСервисе); + ОписаниеСтрокиПриложения.Вставить("ИдентификаторТранспорта", ТекущиеДанные.ИдентификаторТранспорта); ОписаниеСтрокиПриложения.Вставить("ЭтоНачальнаяВыгрузка", Истина); - + ПродолжитьНастройкуНовойСинхронизации = НЕ НастройкаСинхронизацииЗавершена(ОписаниеСтрокиПриложения, ДанныеДляЗавершенияНастройки); Если ПродолжитьНастройкуНовойСинхронизации Тогда @@ -606,6 +644,32 @@ КонецЕсли; + КомандыДляПроверкиАутентификации = + "ВыполнитьСинхронизацию, + |ВыполнитьСинхронизациюСДополнительнымиОтборами, + |НачальнаяВыгрузкаДанных, + |УдалитьНастройкуСинхронизации"; + + Если СтрНайти(КомандыДляПроверкиАутентификации, КомандаСтрокой) > 0 Тогда + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Корреспондент", ТекущиеДанные.УзелИнформационнойБазы); + ДополнительныеПараметры.Вставить("КомандаСтрокой", КомандаСтрокой); + + ПараметрыАутентификации = ТранспортСообщенийОбменаКлиент.ПараметрыАутентификации(); + ПараметрыАутентификации.Корреспондент = ТекущиеДанные.УзелИнформационнойБазы; + ПараметрыАутентификации.ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта; + + ТребуетсяАутентификация = Ложь; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ЗавершениеАутентификации", ЭтотОбъект, ДополнительныеПараметры); + ТранспортСообщенийОбменаКлиент.НачалоАутентификации(ПараметрыАутентификации, ТребуетсяАутентификация, ОповещениеОЗакрытии); + + Если ТребуетсяАутентификация Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + Если КомандаСтрокой = "ВыполнитьСинхронизацию" Тогда ОбработкаКомандыВыполненияСинхронизации(ТекущиеДанные, Ложь); @@ -662,6 +726,20 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗавершениеАутентификации(ДанныеАутентификации, ДополнительныеПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(ДанныеАутентификации) Тогда + Возврат; + КонецЕсли; + + ТранспортСообщенийОбменаВызовСервера.УстановитьПарольСинхронизацииДанных( + ДополнительныеПараметры.Корреспондент, ДанныеАутентификации); + + ВыполнитьКомандуСПредварительнойПроверкой(ДополнительныеПараметры.КомандаСтрокой); + +КонецПроцедуры + &НаСервереБезКонтекста Функция НастройкаСинхронизацииЗавершена(СтрокаПриложение, ДанныеДляЗавершенияНастройки = Неопределено) @@ -685,18 +763,13 @@ КонецЕсли; НомераСообщений = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаПриложение.УзелИнформационнойБазы, "НомерПринятого, НомерОтправленного"); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(СтрокаПриложение.УзелИнформационнойБазы); - Если Не ЗначениеЗаполнено(ВидТранспорта) Тогда - - ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим; - - КонецЕсли; + ПассивныйРежим = ТранспортСообщенийОбмена.ПараметрТранспорта(СтрокаПриложение.ИдентификаторТранспорта, "ПассивныйРежим"); ДанныеДляЗавершенияНастройки = Новый Структура; ДанныеДляЗавершенияНастройки.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); ДанныеДляЗавершенияНастройки.Вставить("ОписаниеВариантаНастройки", ОписаниеВариантаНастройки); - ДанныеДляЗавершенияНастройки.Вставить("ПассивноеПодключение", ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); + ДанныеДляЗавершенияНастройки.Вставить("ПассивноеПодключение", ПассивныйРежим); Возврат ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(СтрокаПриложение.УзелИнформационнойБазы) И Не (НомераСообщений.НомерПринятого = 0 @@ -1320,7 +1393,6 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение доступных вариантов настроек обмена данными с внешними системами.'"); - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСВнешнимиСистемами.ПриПолученииВариантовНастроекОбменаДанными", @@ -1654,6 +1726,7 @@ Элементы.СписокПриложенийКонтекстноеМенюГруппаВыполненияОбменаДанными.Доступность = ЕстьНастроенныеОбмены; Элементы.СписокПриложенийКонтекстноеМенюГруппаУправление.Доступность = ЕстьПраваНаАдминистрированиеОбменов И ЕстьНастроенныеОбмены; Элементы.СписокПриложенийКонтекстноеМенюГруппаСобытия.Доступность = ЕстьПраваНаПросмотрЖурналаРегистрации И ЕстьНастроенныеОбмены; + Элементы.СписокПриложенийЗагрузитьПравилаСинхронизацииДанных.Доступность = Не МодельСервиса И ЕстьНастроенныеОбмены; // Видимость элементов в шапке формы. Элементы.ИнформационнаяПанельТребуетсяОбновление.Видимость = ТребуетсяОбновление; @@ -1703,7 +1776,7 @@ ТекстПредупреждения = СтрШаблон(Шаблон, "СписокСценариев"); Элементы.ПредупреждениеОбОтключенныхСценарияхОписание.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ТекстПредупреждения); - + КонецЕсли; КонецПроцедуры @@ -1769,23 +1842,7 @@ Иначе - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию( - СтрокаПриложение.УзелИнформационнойБазы); - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда - СтрокаПриложение.РежимРаботыПриложения = 1; // сервис - Иначе - СтрокаПриложение.РежимРаботыПриложения = 0; - КонецЕсли; - - Если Не ЗначениеЗаполнено(ВидТранспорта) - Или (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим) Тогда - // Обмен с этой базой настроен через WS. - СтрокаПриложение.ЗапускОбменаИзКорреспондента = Истина; - КонецЕсли; - - СтрокаПриложение.ВнешняяСистема = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + СтрокаПриложение.ЗапускОбменаИзКорреспондента = ТранспортСообщенийОбмена.ПараметрТранспорта(СтрокаПриложение.ИдентификаторТранспорта, "ПассивныйРежим"); СтрокаПриложение.ДоступнаИнтерактивнаяОтправка = Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(СтрокаПриложение.ИмяПланаОбмена) @@ -1793,6 +1850,8 @@ И Не СтрокаПриложение.ВнешняяСистема; КонецЕсли; + + СтрокаПриложение.ТранспортКартинка = ТранспортСообщенийОбмена.ПараметрТранспорта(СтрокаПриложение.ИдентификаторТранспорта, "Картинка"); СтрокаПриложение.ДоступнаИнтерактивнаяОтправка = СтрокаПриложение.ДоступнаИнтерактивнаяОтправка И Не (СтрокаПриложение.ВариантОбменаДанными = "ТолькоПолучение"); @@ -1870,5 +1929,4 @@ КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form index 0acc74126..838e5a2a4 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form @@ -24,6 +24,7 @@ СертификатыПоказать + None OnChange СертификатыПоказатьПриИзменении @@ -49,7 +50,7 @@ Left true - 30 + 25 true false true @@ -78,7 +79,7 @@ ru - Мои сертификаты с истекающим сроком действия + Мои сертификаты с истекающим сроком МоиСертификатыСИстекающимСрокомДействия @@ -106,6 +107,7 @@ СертификатыТолькоДействующие Right + 1 ru Только действующие сертификаты @@ -151,6 +153,7 @@ ПользовательОтбор + None OnChange ПользовательОтборПриИзменении @@ -176,6 +179,7 @@ Left true + 30 true true false @@ -185,6 +189,10 @@ true true Normal + + ru + Кто использует сертификат + @@ -192,7 +200,7 @@ 334 <key>ru</key> - <value>Состояние заявления</value> + <value>Заявления на сертификат</value> true true @@ -202,6 +210,7 @@ СертификатыПоказатьЗаявления + None OnChange СертификатыПоказатьЗаявленияПриИзменении @@ -309,7 +318,7 @@ 348 <key>ru</key> - <value>Для подписания и шифрования...</value> + <value>Для подписания и шифрования из личного хранилища...</value> true true @@ -335,6 +344,37 @@ Balloon Auto + + ДобавитьДляПодписанияИШифрованияИзФайлов + 501 + + <key>ru</key> + <value>Для подписания и шифрования из файлов...</value> + + true + true + + true + + + ДобавитьДляПодписанияИШифрованияИзФайловРасширеннаяПодсказка + 502 + Label + true + true + + Left + + + Form.Command.ДобавитьДляПодписанияИШифрованияИзФайлов + Normal + Auto + true + true + UserCmds + Balloon + Auto + ГруппаТолькоДляШифрования 455 @@ -507,7 +547,7 @@ 346 <key>ru</key> - <value>Оформить заявление...</value> + <value>Выпустить сертификат...</value> true true @@ -2934,7 +2974,7 @@ <key>ru</key> - <value>Путь к приложению, если установлено по нестандартному пути</value> + <value>Путь к приложению</value> ГруппаПрограммыLinuxПутьКПрограммеРасширеннаяПодсказка @@ -3233,6 +3273,97 @@ true + + ГруппаЛогирование + 499 + + ПутьКЛогуКомпонентыНаКлиенте + 493 + + <key>ru</key> + <value>Сохранять информацию компоненты ExtraCryptoAPI для технической поддержки в каталог</value> + + true + true + + true + + + ПутьКЛогуКомпонентыНаКлиенте + + Top + 2 + + OnChange + ПутьКЛогуКомпонентыНаКлиентеПриИзменении + + + ПутьКЛогуКомпонентыНаКлиентеРасширеннаяПодсказка + 495 + Label + true + true + + Left + + + + ПутьКЛогуКомпонентыНаКлиентеКонтекстноеМеню + 494 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПутьКЛогуКомпонентыНаКлиентеНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Диагностика</value> + + + ГруппаЛогированиеРасширеннаяПодсказка + 500 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + auto + Auto + Auto + + true true @@ -3293,78 +3424,237 @@ ФормаКоманднаяПанель -1 - - ФормаЗакрыть - 295 + + ГруппаВспомогательныеКоманды + 505 + + ФормаЗакрыть + 295 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 296 + Label + true + true + + Left + + + Form.StandardCommand.Close + Auto + true + true + true + UserCmds + Auto + + + ФормаОбновить + 232 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ФормаОбновитьРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаПоказатьВерсиюКомпонентыExtraCryptoAPI + 424 + + <key>ru</key> + <value>Показать версию компоненты ExtraCryptoAPI</value> + + true + true + + true + + + ФормаПоказатьВерсиюКомпонентыExtraCryptoAPIРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + Form.Command.ПоказатьВерсиюКомпонентыExtraCryptoAPI + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаУстановитьКомпонентуExtraCryptoAPI + 430 + + <key>ru</key> + <value>Установить компоненту ExtraCryptoAPI</value> + + true + true + + true + + + ФормаУстановитьКомпонентуExtraCryptoAPIРасширеннаяПодсказка + 431 + Label + true + true + + Left + + + Form.Command.УстановитьКомпонентуExtraCryptoAPI + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаУстановитьРасширение + 450 + + <key>ru</key> + <value>Установить расширение для работы с 1С:Предприятием</value> + + true + true + + true + + + ФормаУстановитьРасширениеРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + Form.Command.УстановитьРасширение + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВопросВПоддержку + 503 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ФормаВопросВПоддержкуРасширеннаяПодсказка + 504 + Label + true + true + + Left + + + Form.Command.ВопросВПоддержку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИнформацияДляОтправкиВПоддержку + 432 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ФормаИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 433 + Label + true + true + + Left + + + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true true - - ФормаЗакрытьРасширеннаяПодсказка - 296 - Label - true - true - - Left - - - Form.StandardCommand.Close - Auto - true - true - true - UserCmds - Auto - - - ФормаОбновить - 232 <key>ru</key> - <value>Обновить</value> + <value>Вспомогательные команды</value> - true - true - - true - - - ФормаОбновитьРасширеннаяПодсказка - 233 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаПоказатьВерсиюКомпонентыExtraCryptoAPI - 424 - + <toolTip> <key>ru</key> - <value>Показать версию компоненты ExtraCryptoAPI</value> - - true - true - - true - + Группа вспомогательные команды + - ФормаПоказатьВерсиюКомпонентыExtraCryptoAPIРасширеннаяПодсказка - 425 + ГруппаВспомогательныеКомандыРасширеннаяПодсказка + 506 Label true true @@ -3372,107 +3662,7 @@ Left
          - Form.Command.ПоказатьВерсиюКомпонентыExtraCryptoAPI - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаУстановитьКомпонентуExtraCryptoAPI - 430 - - <key>ru</key> - <value>Установить компоненту ExtraCryptoAPI</value> - - true - true - - true - - - ФормаУстановитьКомпонентуExtraCryptoAPIРасширеннаяПодсказка - 431 - Label - true - true - - Left - - - Form.Command.УстановитьКомпонентуExtraCryptoAPI - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаУстановитьРасширение - 450 - - <key>ru</key> - <value>Установить расширение для работы с 1С:Предприятием</value> - - true - true - - true - - - ФормаУстановитьРасширениеРасширеннаяПодсказка - 451 - Label - true - true - - Left - - - Form.Command.УстановитьРасширение - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаТехническаяИнформация - 432 - - <key>ru</key> - <value>Техническая информация</value> - - true - true - - true - - - ФормаТехническаяИнформацияРасширеннаяПодсказка - 433 - Label - true - true - - Left - - - Form.Command.ТехническаяИнформация - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu + Left true @@ -4058,6 +4248,31 @@ true + + Действие + 16 + + String + + + + true + + + true + + + + Параметры + 41 + + + true + + + true + + СертификатыПоказать @@ -4321,6 +4536,37 @@ true + + ПутьКЛогуКомпонентыНаКлиенте + + <key>ru</key> + <value>Путь к логу</value> + + 9 + + String + + + + true + + + true + + + + ВключитьЛогирование + 15 + + Boolean + + + true + + + true + + Обновить @@ -4399,13 +4645,9 @@ <name>ДобавитьЗаявлениеНаВыпускСертификата</name> <title> <key>ru</key> - <value>Оформить заявление...</value> + <value>Выпустить сертификат...</value> 3 - - ru - Оформить заявление на выпуск сертификата - true @@ -4425,7 +4667,7 @@ ДобавитьДляПодписанияИШифрования <key>ru</key> - <value>Для подписания и шифрования...</value> + <value>Для подписания и шифрования из личного хранилища...</value> 5 @@ -4488,18 +4730,21 @@ Auto - ТехническаяИнформация + ИнформацияДляОтправкиВПоддержку <key>ru</key> - <value>Техническая информация</value> + <value>Информация для отправки в поддержку</value> 8 true + + CommonPicture.Скачать + - ТехническаяИнформация + ИнформацияДляОтправкиВПоддержку Auto @@ -4571,6 +4816,53 @@ Auto Auto + + ДобавитьДляПодписанияИШифрованияИзФайлов + + <key>ru</key> + <value>Для подписания и шифрования из файлов...</value> + + 12 + + true + + + CommonPicture.СертификатВЛичномХранилище + + + + ДобавитьДляПодписанияИШифрованияИзФайлов + + + TextPicture + DontUse + Auto + + + ВопросВПоддержку + + <key>ru</key> + <value>Вопрос в поддержку</value> + + 13 + + ru + Оправить вопрос в службу поддержку фирмы "1С" + + + true + + + CommonPicture.ОтправитьЭлектронноеПисьмо + + + + ВопросВПоддержку + + + Auto + Auto + СертификатыПоказать diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html index 7ad36c64f..10b343cf6 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html @@ -1,11 +1,12 @@ -

          Настройка параметров для использования средств электронной подписи и шифрования (криптографии).

          +

          Настройка параметров для использования средств электронной подписи и шифрования (криптографии).

          Открывается по команде Настройки электронной подписи и шифрования раздела Администрирование - Общие настройки.

          Для электронной подписи и шифрования требуется установить специальное стороннее приложение (криптопровайдер).

          -

          Для того чтобы подписывать данные, нужно включить флажок Электронная подпись, а для шифрования нужно включить флажок Шифрование в разделе Администрирование - Общие настройки. После этого становятся доступными соответствующие команды в приложении.

          +

          Для того чтобы подписывать данные, нужно включить флажок Электронная подпись, а для шифрования нужно включить флажок Шифрование в разделе Администрирование - Общие настройки. После этого становятся доступными соответствующие команды в приложении.

          Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для установки подписи необходимо иметь сертификат ключа электронной подписи. Сертификат можно получить в удостоверяющем центре. Например, в удостоверяющем центре фирмы 1С http://ca.1c.ru/. Только удостоверяющий центр может выдать юридически значимый (квалифицированный сертификат).

          В случае использования распределенной информационной базы большую часть настроек можно изменить только в главном узле.

          -

          Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты ExtraCryptoAPI. Установить компоненту можно через меню Еще - Установить компоненту ExtraCryptoAPI.

          +

          Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты ExtraCryptoAPI. Установить компоненту можно через меню Еще - Установить компоненту ExtraCryptoAPI.

          +

          Для работы в веб-клиенте (первичной настройки) требуется установить все необходимые расширения и компоненты в специальной форме Начало работы с электронной подписью с помощью кнопки Установить все.

          Сертификаты

          • Показывает все сертификаты, которые используются для подписания и шифрования данных, а также заявления на выпуск нового сертификата.
          • @@ -13,28 +14,28 @@
          • Предусмотрен отбор по полю Состояние заявления ("Любое", "Не подготовлено", "Подготовлено", "Отправлено", "Отклонено", "Исполнено, сертификат не установлен", "Исполнено").
          • -
          • Сертификат можно Добавить из числа установленных на компьютере. Также это можно сделать в процессе подписания или шифрования данных. Выберите нужное действие с помощью переключателя, нажмите Добавить.
          • -
            • Сертификат только для шифрования можно Добавить из файла. Выберите нужное действие и перейдите по ссылке, укажите путь к файлу или каталогу на компьютере.
          • Также с помощью кнопки Оформить заявление можно подготовить Заявление на выпуск нового сертификата. +
          • Сертификат можно Добавить из числа установленных на компьютере. Также это можно сделать в процессе подписания или шифрования данных. Выберите нужное действие с помощью переключателя, нажмите Добавить.
          • +
            • Сертификат только для шифрования можно Добавить из файла. Выберите нужное действие и перейдите по ссылке, укажите путь к файлу или каталогу на компьютере.
          • Также с помощью кнопки Выпустить сертификт можно подготовить Заявление на выпуск нового сертификата.
          • Выпустить повторно сертификат, у которого закончился срок действия можно с помощью кнопки Перевыпустить (cкопировать, F9).
          • -
          • Для анализа сертификатов сотрудников и контроля своевременного обновления сертификатов можно воспользоваться кнопкой Отчеты для того, чтобы открыть список доступных вариантов отчета.
          • -
          • Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды Изменить контекстного меню по правой кнопке мыши или меню Еще.

          Приложения

          -
          • Содержит список настроенных приложений, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ). 
          • -
          • Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними. -
          • -
          • Если приложение не установлена, то после установки компоненты будет предложена гиперссылка на загрузку дистрибутива ViPNet CSP или КриптоПро CSP, поддерживающие ГОСТ. 
          • -
          • По гиперссылке также можно перейти на домашние страницы других приложений, соответствующих стандартам безопасности (например, ЛИССИ CSP, Сигнал-КОМ CSP).
          • +
          • Для анализа сертификатов сотрудников и контроля своевременного обновления сертификатов можно воспользоваться кнопкой Отчеты для того, чтобы открыть список доступных вариантов отчета.
          • +
          • Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды Изменить контекстного меню по правой кнопке мыши или меню Еще.

          Приложения и токены

          +
          • Содержит список настроенных приложений и токенов, которые будут использованы в приложении (в том числе во всех узлах распределенной ИБ).
          • +
          • Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними.
          • +
          • Если приложение ранее не было установлено, то после установки компоненты откроется форма Приложения электронной подписи и шифрования, где можно будет выбрать и установить необходимое приложение, например ViPNet CSP или КриптоПро CSP, или токен, например Рутокен ЭЦП или JaCarta для работы с УКЭП.
          • +
          • По кнопке также можно перейти на домашние страницы других приложений, соответствующих стандартам безопасности(например, Signal-COM CSP).
          • Если требуется использовать приложение отличную от известных, тогда нужно указать ее имя, тип и алгоритмы, как указано в инструкции, поставляемой ее производителем.
          • -
          • В колонке Результат проверки отражаются сведения, по которым можно понять установлено ли приложение на компьютере или нет или же установлена, но некорректно.
          • +
          • Для предприятий, которые работают с ЕГАИС можно создавать аппаратные неизвлекаемые ключи на носителе Рутокен ЭЦП или JaCarta. Для работы с токенами необходимо установить программное обеспечение с сайта производителя токена, а для создания подписей с помощью Рутокен ЭЦП требуется также установить библиотеку с сайта производителя.
          • +
          • В колонке Результат проверки отражаются сведения, по которым можно понять установлено ли приложение или токен на компьютер или нет, или же установлено, но некорректно.
          • Linux: Путь к приложению (<Имя приложения, соответствующей выделенной строке в списке>) - поле, которое требуется обязательно заполнять на компьютерах под управлением ОС Linux.
          • В нижней части списка расположена ссылка Инструкция по работе с приложениями электронной подписи и шифрования.

          Дополнительно

          -
          • Задайте расширение для зашифрованных файлов при отправке по почте, при выполнении команды Сохранить как и при экспорте папки (по умолчанию .p7m);
          • +
            • Задайте расширение для зашифрованных файлов при отправке по почте, при выполнении команды Сохранить как и при экспорте папки (по умолчанию .p7m);
            • Напишите расширение для файлов подписи (по умолчанию .p7s);
            • С помощью переключателя При сохранении данных в файл вместе с электронной подписью задайте поведение приложения:
            • -
              • Сохранять все подписи - все подписи сохраняются 
              • +
                • Сохранять все подписи - все подписи сохраняются
                • Спрашивать - выбор сохраняемых подписей осуществляется из списка.
                • -
                • Включите флажок Сохранить сертификат для сохранения на компьютер сертификата вместе с файлом и электронной подписью. 

          +
        • Включите флажок Сохранить сертификат для сохранения на компьютер сертификата вместе с файлом и электронной подписью.
        • Машиночитаемые доверенности (единый формат)

          diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index e35f9fe38..66e982115 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -20,14 +20,14 @@ Элементы.ДекорацияОткрытьМашиночитаемыеДоверенности.Видимость = Ложь; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный"); МодульМашиночитаемыеДоверенностиФНССлужебный.ПриСозданииНаСервере(ЭтотОбъект); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности ЭлектроннаяПодписьСлужебный.УстановитьВидимостьСсылкиНаИнструкциюПоРаботеСПрограммами(Элементы.Инструкция); @@ -153,6 +153,9 @@ Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = ОбщегоНазначения.ЭтоВебКлиент(); Элементы.ФормаУстановитьРасширение.Видимость = ОбщегоНазначения.ЭтоВебКлиент(); + Элементы.ФормаВопросВПоддержку.Видимость = + ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки"); + ЗаполнитьПрограммыИНастройки(); ОбновитьТекущуюВидимостьЭлементов(); @@ -208,8 +211,8 @@ // При изменении состава или настроек программ. Если ВРег(ИмяСобытия) = ВРег("Запись_ПрограммыЭлектроннойПодписиИШифрования") - Или ВРег(ИмяСобытия) = ВРег("Запись_ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux") - Или ВРег(ИмяСобытия) = ВРег("Запись_ЛичныеНастройкиЭлектроннойПодписиИШифрования") Тогда + Или ВРег(ИмяСобытия) = ВРег("Запись_ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux") + Или ВРег(ИмяСобытия) = ВРег("Запись_ЛичныеНастройкиЭлектроннойПодписиИШифрования") Тогда ПодключитьОбработчикОжидания("ПриИзмененииСоставаИлиНастроекПрограмм", 0.1, Истина); Возврат; @@ -218,6 +221,7 @@ Если ВРег(ИмяСобытия) = ВРег("Установка_РасширениеРаботыСКриптографией") Или ВРег(ИмяСобытия) = ВРег("Установка_КомпонентаExtraCryptoAPI") Тогда ОпределитьУстановленныеПрограммы(); + ПодключитьОбработчикОжидания("ДобавитьСертификатыВЛичномХранилищеВПараметрДинамическогоСписка", 0.1, Истина); Возврат; КонецЕсли; @@ -227,9 +231,8 @@ КонецЕсли; Если ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи") - Или ВРег(Источник) = ВРег("ИспользоватьШифрование") Тогда - - ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.1, Истина); + Или ВРег(Источник) = ВРег("ИспользоватьШифрование") Тогда + ПодключитьОбработчикОжидания("ПриИзмененииИспользованияПодписанияИлиШифрования", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -245,6 +248,15 @@ ОпределитьУстановленныеПрограммы(); КонецЕсли; + Если ТекущаяСтраница = Элементы.СтраницаНастройки Тогда + + ПерсональныеНастройки = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки(); + СистемнаяИнформация = Новый СистемнаяИнформация; + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + ПутьКЛогуКомпонентыНаКлиенте = ПерсональныеНастройки.ПутьККаталогуДиагностики.Получить(ИдентификаторКлиента); + + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -367,16 +379,25 @@ СтандартнаяОбработка = Ложь; - ПараметрыПроверки = Новый Структура; - ПараметрыПроверки.Вставить("УстанавливатьРасширение", Истина); - ПараметрыПроверки.Вставить("УстанавливатьКомпоненту", Истина); - ПараметрыПроверки.Вставить("ПредлагатьУстановитьПрограмму", Истина); - ПараметрыПроверки.Вставить("РасширенноеОписание", Истина); - - ОповещениеПослеПроверкиПрограмм = Новый ОписаниеОповещения( - "ОпределитьУстановленныеПрограммыПослеПроверкиПрограммКриптографии", ЭтотОбъект); - ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьУстановкуПрограммКриптографии(ЭтотОбъект, ПараметрыПроверки, - Новый ОписаниеОповещения("ПослеПроверкиПрограммКриптографии", ЭтотОбъект, ОповещениеПослеПроверкиПрограмм)); + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ТолькоУстановкаТокенов", Истина); + Если НавигационнаяСсылкаФорматированнойСтроки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДействиеУстановитьБиблиотекиДляТокенов() Тогда + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуУстановкиПрограммКриптопровайдеров(ПараметрыОткрытия, ЭтотОбъект, + Новый ОписаниеОповещения("ПослеВыполненияДействийПодробнее", ЭтотОбъект)); + Иначе + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("УстанавливатьРасширение", Истина); + ПараметрыПроверки.Вставить("УстанавливатьКомпоненту", Истина); + ПараметрыПроверки.Вставить("ПредлагатьУстановитьПрограмму", Истина); + ПараметрыПроверки.Вставить("РасширенноеОписание", Истина); + + ОповещениеПослеПроверкиПрограмм = Новый ОписаниеОповещения("ОпределитьУстановленныеПрограммыПослеПроверкиПрограммКриптографии", + ЭтотОбъект); + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьУстановкуПрограммКриптографии(ЭтотОбъект, ПараметрыПроверки, + Новый ОписаниеОповещения("ПослеПроверкиПрограммКриптографии", ЭтотОбъект, ОповещениеПослеПроверкиПрограмм)); + + КонецЕсли; КонецПроцедуры @@ -385,7 +406,7 @@ СтандартнаяОбработка = Ложь; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда Возврат; @@ -394,7 +415,23 @@ МодульМашиночитаемыеДоверенностиФНССлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебныйКлиент"); МодульМашиночитаемыеДоверенностиФНССлужебныйКлиент.ОткрытьСписокМЧД(НавигационнаяСсылкаФорматированнойСтроки); - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности + +КонецПроцедуры + +&НаКлиенте +Процедура ПутьКЛогуКомпонентыНаКлиентеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + Оповещение = Новый ОписаниеОповещения("ВыбратьКаталогПослеВыбора", + ЭтотОбъект); + ФайловаяСистемаКлиент.ВыбратьКаталог(Оповещение, НСтр("ru = 'Выберите каталог файлов диагностики'"), ПутьКЛогуКомпонентыНаКлиенте); + +КонецПроцедуры + +&НаКлиенте +Процедура ПутьКЛогуКомпонентыНаКлиентеПриИзменении(Элемент) + + СохранитьНастройки(); КонецПроцедуры @@ -519,11 +556,12 @@ Отказ = Истина; Если Элементы.Найти("ПрограммыИзменить") <> Неопределено - И Элементы.ПрограммыИзменить.Видимость Тогда + И Элементы.ПрограммыИзменить.Видимость + И ЗначениеЗаполнено(Элементы.Программы.ТекущиеДанные.Ссылка) Тогда РасширенноеОписаниеПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеРасширенноеОписаниеПрограммы(); ЗаполнитьЗначенияСвойств(РасширенноеОписаниеПрограммы, Элементы.Программы.ТекущиеДанные); РасширенноеОписаниеПрограммы.Представление = Элементы.Программы.ТекущиеДанные.Наименование; - РасширенноеОписаниеПрограммы.РежимИспользования = ПредопределенноеЗначение("Перечисление.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена"); + РасширенноеОписаниеПрограммы.РежимИспользования = ПредопределенноеЗначение("Перечисление.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено"); ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуПрограммы(РасширенноеОписаниеПрограммы, ЭтотОбъект); КонецЕсли; @@ -557,21 +595,32 @@ И Не ПустаяСтрока(ТекущиеДанные.Подробнее) Тогда СтандартнаяОбработка = Ложь; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Результат проверки приложения'")); - Если ТекущиеДанные.ЭтоТокен И СтрНайти(ТекущиеДанные.РезультатПроверки, ЭлектроннаяПодписьСлужебныйКлиент.ОшибкаНеНайденТокен()) <> 0 Тогда - ПараметрыФормы.Вставить("ТекстОшибкиКлиент", ТекущиеДанные.РезультатПроверки + Символы.ПС + ЭлектроннаяПодписьСлужебныйКлиент.РекомендацииДляТокена()); + + Если ТекущиеДанные.Действие = "УстановитьБиблиотекиДляТокенов" Тогда + ПараметрыОткрытия = Новый Структура("ВидТокена, ТолькоУстановкаТокенов"); + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ТекущиеДанные.Параметры); + ПараметрыОткрытия.ТолькоУстановкаТокенов = Истина; + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуУстановкиПрограммКриптопровайдеров(ПараметрыОткрытия, ЭтотОбъект, + Новый ОписаниеОповещения("ПослеВыполненияДействийПодробнее", ЭтотОбъект)); Иначе - ПараметрыФормы.Вставить("ТекстОшибкиКлиент", ТекущиеДанные.РезультатПроверки); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Результат проверки приложения'")); + Если ТекущиеДанные.ЭтоТокен И СтрНайти(ТекущиеДанные.РезультатПроверки, + ЭлектроннаяПодписьСлужебныйКлиент.ОшибкаНеНайденТокен()) <> 0 Тогда + ПараметрыФормы.Вставить("ТекстОшибкиКлиент", ТекущиеДанные.РезультатПроверки + Символы.ПС + + ЭлектроннаяПодписьСлужебныйКлиент.РекомендацииДляТокена()); + Иначе + ПараметрыФормы.Вставить("ТекстОшибкиКлиент", ТекущиеДанные.РезультатПроверки); + КонецЕсли; + + ПараметрыФормы.Вставить("ТекстОшибкиСервер", ТекущиеДанные.РезультатПроверкиНаСервере); + ПараметрыФормы.Вставить("ПоказатьТребуетсяПомощь", Истина); + ПараметрыФормы.Вставить("ПоказатьИнструкцию", Истина); + + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ЭтотОбъект); КонецЕсли; - ПараметрыФормы.Вставить("ТекстОшибкиСервер", ТекущиеДанные.РезультатПроверкиНаСервере); - ПараметрыФормы.Вставить("ПоказатьТребуетсяПомощь", Истина); - ПараметрыФормы.Вставить("ПоказатьИнструкцию", Истина); - - ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ЭтотОбъект); - ИначеЕсли Не ЗначениеЗаполнено(ТекущиеДанные.Ссылка) Тогда СтандартнаяОбработка = Ложь; @@ -628,6 +677,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ДобавитьДляПодписанияИШифрованияИзФайлов(Команда) + + ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыДобавленияСертификата(); + ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификатПослеВыбораНазначения("ДляПодписанияШифрованияИРасшифровкиИзФайлов", + ПараметрыСоздания); + +КонецПроцедуры + &НаКлиенте Процедура ДобавитьИзФайлов(Команда) @@ -677,10 +735,20 @@ КонецПроцедуры &НаКлиенте -Процедура ТехническаяИнформация(Команда) +Процедура ВопросВПоддержку(Команда) + + ПараметрыСообщения = Новый Структура("Тема, Сообщение", + НСтр("ru = 'Проблема при настройке электронной подписи и шифрования'"), Новый Массив); + + ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию(НСтр("ru = 'Настройки электронной подписи и шифрования'"), ПараметрыСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию(НСтр("ru = 'Настройки электронной подписи и шифрования'")); - + КонецПроцедуры &НаКлиенте @@ -742,6 +810,25 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ВыбратьКаталогПослеВыбора(ВыбранныйКаталог, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(ВыбранныйКаталог) Тогда + ПутьКЛогуКомпонентыНаКлиенте = ""; + Иначе + ПутьКЛогуКомпонентыНаКлиенте = ВыбранныйКаталог; + КонецЕсли; + + СохранитьНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыполненияДействийПодробнее(Результат, Контекст) Экспорт + ЭлектроннаяПодписьСлужебныйКлиент.ОчиститьКэшУстановленныхКриптопровайдеров(); + ОпределитьУстановленныеПрограммы(); +КонецПроцедуры + &НаКлиенте Процедура ОбновитьСписокСертификатов() @@ -964,7 +1051,7 @@ Если Объект.ПометкаУдаления Тогда Объект.РежимИспользования = Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.НеИспользуется; Иначе - Объект.РежимИспользования = Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена; + Объект.РежимИспользования = Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено; КонецЕсли; Объект.Записать(); @@ -984,7 +1071,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПриИзмененияИспользованияПодписанияИлиШифрования() +Процедура ПриИзмененииИспользованияПодписанияИлиШифрования() ОбновитьТекущуюВидимостьЭлементов(); @@ -1011,44 +1098,17 @@ Элементы, "ПеревыпуститьСертификат", "Видимость", Ложь); Возврат; КонецЕсли; - + Элементы.ДобавитьЗаявлениеНаВыпускСертификата.Видимость = ЗаявлениеНаВыпускСертификатаДоступно; - - Если ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда - - Элементы.ДобавитьДляПодписанияИШифрования.Заголовок = НСтр("ru = 'Для подписания и шифрования...'"); - - Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда - Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = НСтр( - "ru = 'Добавить для подписания и шифрования из установленных на сервере DSS и на компьютере'"); - ИначеЕсли ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда - Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = НСтр( - "ru = 'Добавить для подписания и шифрования из установленных в сервисе и на компьютере'"); - Иначе - Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = НСтр( - "ru = 'Добавить для подписания и шифрования из установленных на компьютере'"); - КонецЕсли; - - НазначениеДляПодписанияИШифрования = "ДляПодписанияШифрованияИРасшифровки"; - Иначе + СвойстваКомандыДобавленияСертификатов = ЭлектроннаяПодписьСлужебный.СвойстваКомандыДобавленияСертификатов(); + Элементы.ДобавитьДляПодписанияИШифрования.Заголовок = СвойстваКомандыДобавленияСертификатов.Заголовок; + Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = СвойстваКомандыДобавленияСертификатов.ЗаголовокРасширеннойПодсказки; + НазначениеДляПодписанияИШифрования = СвойстваКомандыДобавленияСертификатов.Назначение; - Элементы.ДобавитьДляПодписанияИШифрования.Заголовок = НСтр("ru = 'Для шифрования и расшифровки...'"); - - Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда - Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = НСтр( - "ru = 'Добавить для шифрования и расшифровки из установленных на сервере DSS и на компьютере'"); - ИначеЕсли ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда - Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = НСтр( - "ru = 'Добавить для шифрования и расшифровки из установленных в сервисе и на компьютере'"); - Иначе - Элементы.ДобавитьДляПодписанияИШифрования.РасширеннаяПодсказка.Заголовок = НСтр( - "ru = 'Добавить для шифрования и расшифровки из установленных на компьютере'"); - КонецЕсли; - - НазначениеДляПодписанияИШифрования = "ДляШифрованияИРасшифровки"; - - КонецЕсли; + СвойстваКомандыДобавленияСертификатов = ЭлектроннаяПодписьСлужебный.СвойстваКомандыДобавленияСертификатов(Истина); + Элементы.ДобавитьДляПодписанияИШифрованияИзФайлов.Заголовок = СвойстваКомандыДобавленияСертификатов.Заголовок; + Элементы.ДобавитьДляПодписанияИШифрованияИзФайлов.РасширеннаяПодсказка.Заголовок = СвойстваКомандыДобавленияСертификатов.ЗаголовокРасширеннойПодсказки; КонецПроцедуры @@ -1091,12 +1151,30 @@ // Продолжение процедуры ОбработчикОжиданияОпределитьУстановленныеПрограммы. &НаКлиенте -Процедура ОбработчикОжиданияОпределитьУстановленныеПрограммыПослеПодключенияРасширения(Подключено, Контекст) Экспорт +Асинх Процедура ОбработчикОжиданияОпределитьУстановленныеПрограммыПослеПодключенияРасширения(Подключено, Контекст) Экспорт Если Не Подключено Тогда +#Если ВебКлиент Тогда + Компоненты = ЭлектроннаяПодписьСлужебныйКлиент.НовыйКомпонентыРаботыСКриптографией(); + Компоненты.РасширениеРаботыСКриптографиейУстановлено = Ложь; + + ТребуетсяУстановкаДополнительныхКомпонент = + Ждать ЭлектроннаяПодписьСлужебныйКлиент.ТребуетсяУстановкаДополнительныхКомпонент(Компоненты); + + Если ТребуетсяУстановкаДополнительныхКомпонент Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Компоненты", Компоненты); + ПараметрыФормы.Вставить("ИмяТребуемойКомпоненты", "РасширениеРаботыСКриптографией"); + ОбработчикПродолжения = Новый ОписаниеОповещения("ОпределитьУстановленныеПрограммыПослеПодключенияРасширения", ЭтотОбъект, Контекст); + ОткрытьФорму("ОбщаяФорма.НачалоРаботыСЭлектроннойПодписью", ПараметрыФормы, + , , , , ОбработчикПродолжения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; +#Иначе ПоказатьЗаголовокДляУстановкиРасширения(); ПодключитьОбработчикОжидания("ОбработчикОжиданияОпределитьУстановленныеПрограммы", 3, Истина); Возврат; +#КонецЕсли КонецЕсли; ПутиКПрограммамПоУмолчанию.Очистить(); @@ -1235,7 +1313,7 @@ Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки; // Массив Из см. ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки Если Менеджер <> Неопределено Тогда - ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Установлена на компьютере.'")); + ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Установлено на компьютере.'")); Если ЗначениеЗаполнено(ОписаниеПрограммы.РезультатПроверкиНаСервере) И ОписаниеПрограммы.УстановленаНаСервере <> Истина Тогда ОбновитьЗначение(ОписаниеПрограммы.Подробнее, НСтр("ru = 'Подробнее'") + "..."); @@ -1256,7 +1334,7 @@ ОбновитьЗначение(ОписаниеПрограммы.Подробнее, НСтр("ru = 'Подробнее'") + "..."); ОбновитьЗначение(ОписаниеПрограммы.Установлена, ""); Иначе - ТекстОшибки = НСтр("ru = 'Не установлена на компьютере.'") + " " + Ошибка.Описание; + ТекстОшибки = НСтр("ru = 'Не установлено на компьютере.'") + " " + Ошибка.Описание; Если Ошибка.КАдминистратору И Не ЭтоПолноправныйПользователь Тогда ТекстОшибки = ТекстОшибки + " " + НСтр("ru = 'Обратитесь к администратору.'"); КонецЕсли; @@ -1323,24 +1401,8 @@ Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( НСтр("ru = 'Нажмите здесь, чтобы увидеть все приложения для работы с электронной подписью, установленные на компьютере.'"), "ПроверитьУстановкуПрограммКриптографии"); - // Локализация ИначеЕсли Результат.ВозможенКонфликт Тогда - - МассивПрограмм = Новый Массив; - Для Каждого Программа Из Результат.Программы Цикл - Если ЗначениеЗаполнено(Программа.Программа) - И МассивПрограмм.Найти(Программа.Программа) = Неопределено Тогда - МассивПрограмм.Добавить(Программа.Программа); - КонецЕсли; - КонецЦикла; - - Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина; - Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - НСтр("ru = 'На вашем компьютере установлено несколько приложений с алгоритмами ГОСТ: %1. - |Возможна некорректная работа из-за конфликта между ними. В этом случае следует удалить приложения и после перезагрузки установить только одно из них.'"), - СтрСоединить(МассивПрограмм, ", ")); - Элементы.ДекорацияИнформацияКриптопровайдеры.Картинка = БиблиотекаКартинок.Предупреждение; - // Конец Локализация + ЭлектроннаяПодписьКлиентЛокализация.ПриПроверкеКонфликтаПрограммКриптографии(ЭтотОбъект, Результат); Иначе Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Ложь; КонецЕсли; @@ -1349,11 +1411,9 @@ Для Каждого Криптопровайдер Из Результат.Программы Цикл - // Локализация Если ЗначениеЗаполнено(Криптопровайдер.Программа) И Не ЕстьПроверяемыеПрограммы Тогда ЕстьПроверяемыеПрограммы = Истина; КонецЕсли; - // Конец Локализация Найдено = Программы.НайтиСтроки(Новый Структура("ИмяПрограммы, ТипПрограммы", Криптопровайдер.ИмяПрограммы, Криптопровайдер.ТипПрограммы)); @@ -1394,19 +1454,25 @@ НоваяСтрока.ЭтоТокен = Истина; НоваяСтрока.ИмяПрограммы = Токен.СерийныйНомер; НоваяСтрока.Слот = Токен.Слот; + НоваяСтрока.Действие = ""; + НоваяСтрока.Параметры = Неопределено; + НоваяСтрока.Подробнее = ""; НоваяСтрока.РезультатПроверки = ?(ЗначениеЗаполнено(Токен.Ошибка), Токен.Ошибка, НСтр("ru = 'Доступен.'")); - НоваяСтрока.Подробнее = ?(ЗначениеЗаполнено(Токен.Ошибка), НСтр("ru = 'Подробнее'") + "...", ""); + + Если ЗначениеЗаполнено(Токен.Ошибка) Тогда + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ОшибкаЗагрузкиБиблиотекиТокена(Токен.Ошибка) Тогда + НоваяСтрока.Подробнее = НСтр("ru = 'Установить'") + "..."; + НоваяСтрока.Действие = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДействиеУстановитьБиблиотекиДляТокенов(); + НоваяСтрока.Параметры = Новый Структура("ВидТокена", Токен.Токен); + Иначе + НоваяСтрока.Подробнее = НСтр("ru = 'Подробнее'") + "..."; + КонецЕсли; + КонецЕсли; КонецЦикла; - // Локализация - Если Не ЕстьПроверяемыеПрограммы Тогда - Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина; - Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - НСтр("ru = 'Если планируется работа с усиленной квалифицированной электронной подписью, то на компьютере должно быть установлено сертифицированное приложение (средство криптографической защиты информации). - |Установить.'"), "ПроверитьУстановкуПрограммКриптографии"); - КонецЕсли; - // Конец Локализация + ЭлектроннаяПодписьКлиентЛокализация.ПриПроверкеУстановленныхПрограммКриптографии(ЭтотОбъект, Результат, ЕстьПроверяемыеПрограммы); + КонецЕсли; Если Оповещение <> Неопределено Тогда @@ -1423,12 +1489,13 @@ КонецЕсли; ПерсональныеНастройки = ЭлектроннаяПодпись.ПерсональныеНастройки(); - + ДействияПриСохраненииСЭП = ПерсональныеНастройки.ДействияПриСохраненииСЭП; РасширениеДляЗашифрованныхФайлов = ПерсональныеНастройки.РасширениеДляЗашифрованныхФайлов; РасширениеДляФайловПодписи = ПерсональныеНастройки.РасширениеДляФайловПодписи; ПутиКПрограммам = ПерсональныеНастройки.ПутиКПрограммамЭлектроннойПодписиИШифрования; СохранятьСертификатВместеСПодписью = ПерсональныеНастройки.СохранятьСертификатВместеСПодписью; + ЕстьПрограммыНаСервере = Ложь; Запрос = Новый Запрос; @@ -1462,7 +1529,7 @@ | Программы.АлгоритмШифрования, | Программы.ПометкаУдаления, | Программы.ЭтоВстроенныйКриптопровайдер, - | ЗНАЧЕНИЕ(Перечисление.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена), + | ЗНАЧЕНИЕ(Перечисление.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено), | 4 |ИЗ | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы @@ -1646,15 +1713,24 @@ СохраняемыеНастройки.Вставить("РасширениеДляЗашифрованныхФайлов", РасширениеДляЗашифрованныхФайлов); СохраняемыеНастройки.Вставить("РасширениеДляФайловПодписи", РасширениеДляФайловПодписи); СохраняемыеНастройки.Вставить("СохранятьСертификатВместеСПодписью", СохранятьСертификатВместеСПодписью); - СохранитьНастройкиНаСервере(СохраняемыеНастройки); + + СистемнаяИнформация = Новый СистемнаяИнформация; + ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; + + СохраняемыеНастройки.Вставить("ПутьКЛогуКомпонентыНаКлиенте", ПутьКЛогуКомпонентыНаКлиенте); + + СохранитьНастройкиНаСервере(СохраняемыеНастройки, ИдентификаторКлиента); КонецПроцедуры &НаСервереБезКонтекста -Процедура СохранитьНастройкиНаСервере(СохраняемыеНастройки) +Процедура СохранитьНастройкиНаСервере(СохраняемыеНастройки, ИдентификаторКлиента) ПерсональныеНастройки = ЭлектроннаяПодпись.ПерсональныеНастройки(); + ПутьККаталогуДиагностики = ПерсональныеНастройки.ПутьККаталогуДиагностики; ЗаполнитьЗначенияСвойств(ПерсональныеНастройки, СохраняемыеНастройки); + ПерсональныеНастройки.ПутьККаталогуДиагностики.Вставить(ИдентификаторКлиента, + СохраняемыеНастройки.ПутьКЛогуКомпонентыНаКлиенте); ЭлектроннаяПодписьСлужебный.СохранитьПерсональныеНастройки(ПерсональныеНастройки); // Требуется для обновления персональных настроек на клиенте. diff --git a/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/Form.form b/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/Form.form new file mode 100644 index 000000000..58ed76da7 --- /dev/null +++ b/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/Form.form @@ -0,0 +1,1486 @@ + + + + ДекорацияУстановкиКомпонент + 68 + + <key>ru</key> + <value>Декорация установки компонент</value> + + true + true + + true + + + ДекорацияУстановкиКомпонентРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ДекорацияУстановкиКомпонентКонтекстноеМеню + 69 + true + + true + true + Top + + + CommonPicture.ЗначокУстановкиКомпонентДляРаботыСЭП + + AutoSize + AsFileRef + + + + Отступ2 + 105 + true + true + + true + + + Отступ2РасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + Отступ2КонтекстноеМеню + 106 + true + + Label + 1 + true + true + + Left + + + + ГруппаУстановки + 64 + + ГруппаКомпоненты + 66 + + ГруппаУстановкиШапка + 87 + + ДекорацияЧастьКомпонентУстановлена + 61 + + <key>ru</key> + <value>Для работы с электронной подписью почти все готово:</value> + + true + true + + true + + + ДекорацияЧастьКомпонентУстановленаРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + ДекорацияЧастьКомпонентУстановленаКонтекстноеМеню + 62 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Установки шапка</value> + + + ГруппаУстановкиШапкаРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаОбщиеПроверки + 57 + + ГруппаПроверки + 29 + + ГруппаПроверкаУстановкиРасширения1С + 31 + + Расширение1СУстановлено + 33 + + <key>ru</key> + <value>Состояние установки расширения работы с 1С:Предприятием</value> + + true + true + + true + + + СостояниеУстановкиРасширенияРаботыС1СПредприятием + + None + + Расширение1СУстановленоРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + Расширение1СУстановленоКонтекстноеМеню + 34 + true + + PictureField + Top + Enter + true + Left + true + + true + true + + CommonPicture.СостоянияУстановкиКомпонентДляРаботыСЭП + + + 1 + + AsFileRef + + + + ГруппаПроверкаУстановкиРасширения1СПояснение + 36 + + ДекорацияРасширение1СУстановлено + 38 + + <key>ru</key> + <value>Расширение для работы с 1С:Предприятием установлено</value> + + true + true + + true + + + ДекорацияРасширение1СУстановленоРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ДекорацияРасширение1СУстановленоКонтекстноеМеню + 39 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа проверка установки расширения 1С</value> + + + ГруппаПроверкаУстановкиРасширения1СПояснениеРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверка установки расширения 1С</value> + + + ГруппаПроверкаУстановкиРасширения1СРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаПроверкаУстановкиРасширенияЭП + 44 + + РасширениеЭПУстановлено + 46 + + <key>ru</key> + <value>Состояние установки расширения работы с криптографией</value> + + true + true + + true + + + СостояниеУстановкиРасширенияРаботыСКриптографией + + None + + РасширениеЭПУстановленоРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + РасширениеЭПУстановленоКонтекстноеМеню + 47 + true + + PictureField + Top + Enter + true + Left + true + + true + true + + CommonPicture.СостоянияУстановкиКомпонентДляРаботыСЭП + + + 1 + + AsFileRef + + + + ГруппаПроверкаУстановкиРасширенияЭППояснение + 49 + + ДекорацияРасширениеЭПУстановлено + 51 + + <key>ru</key> + <value>Расширение для работы с криптографией установлено</value> + + true + true + + true + + + ДекорацияРасширениеЭПУстановленоРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ДекорацияРасширениеЭПУстановленоКонтекстноеМеню + 52 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Проверка установки расширения ЭП пояснение</value> + + + ГруппаПроверкаУстановкиРасширенияЭППояснениеРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверка установки расширения ЭП</value> + + + ГруппаПроверкаУстановкиРасширенияЭПРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаПроверкаУстановкиКомпоненты + 16 + + КомпонентаУстановлена + 18 + + <key>ru</key> + <value>Состояние установки компоненты ExtraCryptoAPI</value> + + true + true + + true + + + СостояниеУстановкиКомпонентыExtraCryptoAPI + + None + + КомпонентаУстановленаРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + КомпонентаУстановленаКонтекстноеМеню + 19 + true + + PictureField + Top + Enter + true + Left + true + + true + true + + CommonPicture.СостоянияУстановкиКомпонентДляРаботыСЭП + + + 1 + + AsFileRef + + + + ГруппаПроверкаУстановкиКомпонентыПояснение + 21 + + ДекорацияКомпонентаУстановлена + 23 + + <key>ru</key> + <value>Компонента установлена</value> + + true + true + + true + + + ДекорацияКомпонентаУстановленаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ДекорацияКомпонентаУстановленаКонтекстноеМеню + 24 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа проверка установки компоненты</value> + + + ГруппаПроверкаУстановкиКомпонентыПояснениеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверка установки компоненты</value> + + + ГруппаПроверкаУстановкиКомпонентыРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверки</value> + + + ГруппаПроверкиРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Общие проверки</value> + + false + + ГруппаОбщиеПроверкиРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаУстановитьОдновременно + 82 + + Отступ1 + 84 + + <key>ru</key> + <value>Отступ1</value> + + true + true + + true + + + Отступ1РасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + Отступ1КонтекстноеМеню + 85 + true + + true + true + + + CommonPicture.Пустая + + AsFileRef + + + + УстановитьВсе + 59 + + <key>ru</key> + <value>Установить все</value> + + true + true + + true + + + УстановитьВсеРасширеннаяПодсказка + 60 + + <key>ru</key> + <value>После нажатия <b>Установить все </>для окончательной установки каждой компоненты необходимо выполнить следующие действия: +1. В появившемся окне выберите сохранение файла. +2. Нажмите на кнопку, на которую будет указывать стрелка, и выберите скачанный файл. +3. Сделайте файл исполняемым и запустите.</value> + + true + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьВсе + Normal + Auto + true + 1 + true + Center + UserCmds + Button + Auto + + true + true + + true + + + <key>ru</key> + <value>Установить одновременно</value> + + + ГруппаУстановитьОдновременноРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаПроверкаУстановкиКриптопровайдера + 12 + + ГруппаВыполняетсяПроверка + 95 + + ДекорацияКартинкаВыполняетсяПроверка + 97 + + <key>ru</key> + <value>Декорация картинка выполняется проверка</value> + + true + true + + true + + + ДекорацияКартинкаВыполняетсяПроверкаРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + ДекорацияКартинкаВыполняетсяПроверкаКонтекстноеМеню + 98 + true + + true + true + + + CommonPicture.ДлительнаяОперация16 + + AsFileRef + + + + ДекорацияНадписьВыполняетсяПроверка + 100 + + <key>ru</key> + <value>Выполняется проверка установки приложений и токенов...</value> + + true + true + + true + + + ДекорацияНадписьВыполняетсяПроверкаРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ДекорацияНадписьВыполняетсяПроверкаКонтекстноеМеню + 101 + true + + Label + true + true + + Left + + + true + + true + + + <key>ru</key> + <value>Выполняется проверка установки приложений и токенов...</value> + + + ГруппаВыполняетсяПроверкаРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + Auto + Auto + + + + ГруппаСостояниеУстановкиКриптопровайдера + 103 + + КриптопровайдерУстановлен + 1 + + <key>ru</key> + <value>Состояние установки криптопровайдера</value> + + true + true + + true + + + СостояниеУстановкиКриптопровайдера + + None + + КриптопровайдерУстановленРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + КриптопровайдерУстановленКонтекстноеМеню + 2 + true + + PictureField + Top + Enter + true + Left + true + + true + true + + CommonPicture.СостоянияУстановкиКомпонентДляРаботыСЭП + + + 1 + + AsFileRef + + + + ГруппаПроверкаУстановкиКриптопровайдераПояснение + 14 + + ДекорацияКриптопровайдерУстановлен + 4 + + <key>ru</key> + <value>Криптопровайдер установлен</value> + + true + true + + true + + + ДекорацияКриптопровайдерУстановленРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ДекорацияКриптопровайдерУстановленКонтекстноеМеню + 5 + true + + Label + true + + Left + + + + ДекорацияКриптопровайдерУстановленПояснение + 9 + + <key>ru</key> + <value>Если планируется работа с усиленной квалифицированной электронной подписью, то на компьютере должно быть установлено сертифицированное приложение (средство криптографической защиты информации). +<link %1>Выбрать и установить</> приложение электронной подписи и шифрования, или библиотеку работы с токенами. После установки может потребоваться перезагрузка.</value> + + true + true + + true + + + ДекорацияКриптопровайдерУстановленПояснениеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ДекорацияКриптопровайдерУстановленПояснениеКонтекстноеМеню + 10 + true + + true + Label + true + true + + + URLProcessing + ДекорацияКриптопровайдерУстановленПояснениеОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Проверка установки криптопровайдера пояснение</value> + + 50 + + ГруппаПроверкаУстановкиКриптопровайдераПояснениеРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Состояние установки криптопровайдера</value> + + + ГруппаСостояниеУстановкиКриптопровайдераРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверка установки криптопровайдера</value> + + + ГруппаПроверкаУстановкиКриптопровайдераРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПродолжитьРаботу + 75 + + ДекорацияВсеУстановлено + 79 + + <key>ru</key> + <value>Все готово для работы с электронной подписью!</value> + + true + true + + true + + + ДекорацияВсеУстановленоРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ДекорацияВсеУстановленоКонтекстноеМеню + 80 + true + + Label + true + + Left + + + + ПродолжитьРаботу + 77 + + <key>ru</key> + <value>Продолжить работу</value> + + true + true + + true + + + ПродолжитьРаботуРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + UsualButton + Form.Command.ПродолжитьРаботу + Auto + true + true + true + Right + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Продолжить работу</value> + + true + + ГруппаПродолжитьРаботуРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Компоненты</value> + + + ГруппаКомпонентыРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Установки</value> + + + ГруппаУстановкиРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Right + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + LockOwner + true + true + true + AlwaysHorizontal + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
          true
          +
          + + СостояниеУстановкиКриптопровайдера + + <key>ru</key> + <value>Состояние установки криптопровайдера</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + СостояниеУстановкиКомпонентыExtraCryptoAPI + + <key>ru</key> + <value>Состояние установки компоненты ExtraCryptoAPI</value> + + 3 + + Number + + 1 + true + + + + true + + + true + + + + СостояниеУстановкиРасширенияРаботыСКриптографией + + <key>ru</key> + <value>Состояние установки расширения работы с криптографией</value> + + 4 + + Number + + 1 + true + + + + true + + + true + + + + СостояниеУстановкиРасширенияРаботыС1СПредприятием + + <key>ru</key> + <value>Состояние установки расширения работы с 1С:Предприятием</value> + + 5 + + Number + + 1 + true + + + + true + + + true + + + + ИмяТребуемойКомпоненты + 9 + + String + + + + true + + + true + + + + ТребоватьПерезагрузку + 6 + + Boolean + + + true + + + true + + + + ПроверятьКриптопровайдер + 7 + + Boolean + + + true + + + true + + + + УстановитьВсе + + <key>ru</key> + <value>Установить все</value> + + 2 + + ru + Установить все + + + true + + + + УстановитьВсе + + + TextPicture + Auto + Auto + + + ПродолжитьРаботу + + <key>ru</key> + <value>Продолжить работу</value> + + 3 + + ru + Продолжить работу + + + true + + + + ПродолжитьРаботу + + + Auto + Auto + + + РасширениеРаботыС1СПредприятиемУстановлено + + Boolean + + + + РасширениеРаботыСКриптографиейУстановлено + + Boolean + + + + КомпонентаExtraCryptoAPIУстановлена + + Boolean + + + + КриптопровайдерУстановлен + + Boolean + + + + ИмяТребуемойКомпоненты + + String + + + + + + + +
          diff --git a/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/Module.bsl b/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/Module.bsl new file mode 100644 index 000000000..312a2bb27 --- /dev/null +++ b/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/Module.bsl @@ -0,0 +1,411 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + НеУстановленоОдновременных = 0; + ПроверятьКриптопровайдер = Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено; + + ИмяТребуемойКомпоненты = Параметры.ИмяТребуемойКомпоненты; + Если Параметры.Свойство("Компоненты") Тогда + ЗаполнитьЗначенияСвойств(Параметры, Параметры.Компоненты); + КонецЕсли; + + Если Параметры.КриптопровайдерУстановлен И ПроверятьКриптопровайдер Тогда + Элементы.ГруппаПроверкаУстановкиКриптопровайдера.Видимость = Ложь; + СостояниеУстановкиКриптопровайдера = 2; + Иначе + Элементы.ГруппаПроверкаУстановкиКриптопровайдера.Видимость = Истина; + СостояниеУстановкиКриптопровайдера = 0; + КонецЕсли; + Если Параметры.РасширениеРаботыС1СПредприятиемУстановлено Тогда + Элементы.ГруппаПроверкаУстановкиРасширения1С.Видимость = Ложь; + СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2; + Иначе + Элементы.ГруппаПроверкаУстановкиРасширения1С.Видимость = Истина; + СостояниеУстановкиРасширенияРаботыС1СПредприятием = 0; + НеУстановленоОдновременных = НеУстановленоОдновременных + 1; + КонецЕсли; + Если Параметры.РасширениеРаботыСКриптографиейУстановлено Тогда + Элементы.ГруппаПроверкаУстановкиРасширенияЭП.Видимость = Ложь; + СостояниеУстановкиРасширенияРаботыСКриптографией = 2; + Иначе + Элементы.ГруппаПроверкаУстановкиРасширенияЭП.Видимость = Истина; + СостояниеУстановкиРасширенияРаботыСКриптографией = 0; + НеУстановленоОдновременных = НеУстановленоОдновременных + 1; + КонецЕсли; + Если Параметры.КомпонентаExtraCryptoAPIУстановлена Тогда + Элементы.ГруппаПроверкаУстановкиКомпоненты.Видимость = Ложь; + СостояниеУстановкиКомпонентыExtraCryptoAPI = 2; + Иначе + Элементы.ГруппаПроверкаУстановкиКомпоненты.Видимость = Истина; + СостояниеУстановкиКомпонентыExtraCryptoAPI = 0; + НеУстановленоОдновременных = НеУстановленоОдновременных + 1; + КонецЕсли; + + Если НеУстановленоОдновременных = 1 Тогда + Элементы.УстановитьВсе.Заголовок = НСтр("ru = 'Установить'"); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоWindowsКлиент() Тогда + Элементы.УстановитьВсеРасширеннаяПодсказка.Заголовок = + НСтр("ru = 'После окончания загрузки каждого из файлов нажмите на загруженный файл и следуйте инструкциям установщика.'"); + ИначеЕсли ОбщегоНазначения.ЭтоLinuxКлиент() Или ОбщегоНазначения.ЭтоMacOSКлиент() Тогда + Элементы.УстановитьВсеРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Для окончательной установки каждой компоненты необходимо выполнить следующие действия: + |1. В появившемся окне выберите сохранение файла. + |2. Нажмите на кнопку, на которую будет указывать стрелка, и выберите скачанный файл. + |3. Сделайте файл исполняемым и запустите.'")); + Иначе + Элементы.УстановитьВсеРасширеннаяПодсказка.Заголовок = ""; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Установка_ПриложениеКриптографии" Тогда + + ТребоватьПерезагрузку = ?(Параметр = Истина, Истина, Ложь); + Если ТребоватьПерезагрузку Тогда + Элементы.ПродолжитьРаботу.Заголовок = НСтр("ru = 'Перезагрузить'"); + КонецЕсли; + + ПослеУстановкиПрограммыКриптографии(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ЗавершениеРаботы Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ПродолжитьРаботу(Неопределено); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияКриптопровайдерУстановленПояснениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + УстановитьПрограммуКриптографии(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УстановитьВсе(Команда) + + Если СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2 Тогда + ПродолжитьУстановкуКомпонентПослеУстановкиРасширенияРаботыС1СПредприятием(Истина); + Иначе + СостояниеУстановкиРасширенияРаботыС1СПредприятием = 1; + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + НачатьУстановкуРасширенияРаботыСФайлами(Новый ОписаниеОповещения( + "ПослеУстановкиРасширенияРаботыС1СПредприятием", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьРаботу(Команда) + + Если ИмяТребуемойКомпоненты = "РасширениеРаботыС1СПредприятием" Тогда + Если СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2 Тогда + Закрыть(Истина); + Иначе + Закрыть(Ложь); + КонецЕсли; + ИначеЕсли ИмяТребуемойКомпоненты = "РасширениеРаботыСКриптографией" Тогда + Если СостояниеУстановкиРасширенияРаботыСКриптографией = 2 Тогда + Закрыть(Истина); + Иначе + Закрыть(Ложь); + КонецЕсли; + ИначеЕсли ИмяТребуемойКомпоненты = "КомпонентаExtraCryptoAPI" Тогда + ПараметрыЗакрытия = Новый Структура("Подключено, ОписаниеОшибки"); + ПараметрыЗакрытия.Подключено = ?(СостояниеУстановкиКомпонентыExtraCryptoAPI = 2, Истина, Ложь); + ПараметрыЗакрытия.ОписаниеОшибки = ""; + Закрыть(ПараметрыЗакрытия); + Иначе + Закрыть(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент() + + Если СостояниеУстановкиКриптопровайдера = 2 Тогда + ТекстТребуетсяПерезагрузка = ?(ТребоватьПерезагрузку, НСтр("ru = ', требуется перезапустить сеанс'"), ""); + Элементы.ДекорацияКриптопровайдерУстановлен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлено средство криптографической защиты информации%1'"), ТекстТребуетсяПерезагрузка); + Элементы.ДекорацияКриптопровайдерУстановленПояснение.Видимость = Ложь; + ИначеЕсли СостояниеУстановкиКриптопровайдера = 1 Тогда + Элементы.ДекорацияКриптопровайдерУстановлен.Заголовок = НСтр("ru = 'Выполняется установка средства криптографической защиты информации'"); + Элементы.ДекорацияКриптопровайдерУстановленПояснение.Видимость = Ложь; + Иначе + Элементы.ДекорацияКриптопровайдерУстановлен.Заголовок = НСтр("ru = 'Не установлено средство криптографической защиты информации'"); + Элементы.ДекорацияКриптопровайдерУстановленПояснение.Видимость = Истина; + КонецЕсли; + + Если СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2 Тогда + Элементы.ДекорацияРасширение1СУстановлено.Заголовок = НСтр("ru = 'Расширение для работы с 1С:Предприятием успешно установлено'"); + ИначеЕсли СостояниеУстановкиРасширенияРаботыС1СПредприятием = 1 Тогда + Элементы.ДекорацияРасширение1СУстановлено.Заголовок = НСтр("ru = 'Выполняется установка расширения для работы с 1С:Предприятием'"); + Иначе + Элементы.ДекорацияРасширение1СУстановлено.Заголовок = НСтр("ru = 'Расширение для работы с 1С:Предприятием не установлено'"); + КонецЕсли; + + Если СостояниеУстановкиРасширенияРаботыСКриптографией = 2 Тогда + Элементы.ДекорацияРасширениеЭПУстановлено.Заголовок = НСтр("ru = 'Расширение для работы с криптографией успешно установлено'"); + ИначеЕсли СостояниеУстановкиРасширенияРаботыСКриптографией = 1 Тогда + Элементы.ДекорацияРасширениеЭПУстановлено.Заголовок = НСтр("ru = 'Выполняется установка расширения для работы с криптографией'"); + Иначе + Элементы.ДекорацияРасширениеЭПУстановлено.Заголовок = НСтр("ru = 'Расширение для работы с криптографией не установлено'"); + КонецЕсли; + + Если СостояниеУстановкиКомпонентыExtraCryptoAPI = 2 Тогда + Элементы.ДекорацияКомпонентаУстановлена.Заголовок = НСтр("ru = 'Компонента ExtraCryptoAPI успешно установлена'"); + ИначеЕсли СостояниеУстановкиКомпонентыExtraCryptoAPI = 1 Тогда + Элементы.ДекорацияКомпонентаУстановлена.Заголовок = НСтр("ru = 'Выполняется установка компоненты ExtraCryptoAPI'"); + Иначе + Элементы.ДекорацияКомпонентаУстановлена.Заголовок = НСтр("ru = 'Компонента ExtraCryptoAPI не установлена'"); + КонецЕсли; + + Если СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2 + И СостояниеУстановкиРасширенияРаботыСКриптографией = 2 + И СостояниеУстановкиКомпонентыExtraCryptoAPI = 2 Тогда + + Элементы.ГруппаУстановитьОдновременно.Видимость = Ложь; + + Если СостояниеУстановкиКриптопровайдера = 2 Тогда + Элементы.ГруппаУстановкиШапка.Видимость = Ложь; + Элементы.ГруппаПродолжитьРаботу.Видимость = Истина; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПрограммуКриптографии() + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуУстановкиПрограммКриптопровайдеров(, ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУстановкиПрограммыКриптографии() + + СостояниеУстановкиКриптопровайдера = 2; + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУстановкиРасширенияРаботыС1СПредприятием(Результат) Экспорт + + НачатьПодключениеРасширенияРаботыСФайлами( + Новый ОписаниеОповещения("ПродолжитьУстановкуКомпонентПослеУстановкиРасширенияРаботыС1СПредприятием", ЭтотОбъект)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьУстановкуКомпонентПослеУстановкиРасширенияРаботыС1СПредприятием(Подключено, Контекст = Неопределено) Экспорт + + Если Подключено = Истина Тогда + СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2; + ПослеУстановкиКомпонентыИРасширений(); + Иначе + ПодключитьОбработчикОжидания("ОжидатьУстановкуРасширенияРаботыС1СПредприятием", 3); + КонецЕсли; + + Если СостояниеУстановкиРасширенияРаботыСКриптографией = 2 Тогда + ПродолжитьУстановкуКомпонентПослеУстановкиРасширенияРаботыСКриптографией(Истина); + Иначе + СостояниеУстановкиРасширенияРаботыСКриптографией = 1; + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + НачатьУстановкуРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( + "ПослеУстановкиРасширенияРаботыСКриптографией", ЭтотОбъект)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ОжидатьУстановкуРасширенияРаботыС1СПредприятием() + + Подключено = Ждать ПодключитьРасширениеРаботыСФайламиАсинх(); + Если Подключено Тогда + ОтключитьОбработчикОжидания("ОжидатьУстановкуРасширенияРаботыС1СПредприятием"); + СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2; + ПослеУстановкиКомпонентыИРасширений(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУстановкиРасширенияРаботыСКриптографией(Контекст) Экспорт + + НачатьПодключениеРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( + "ПродолжитьУстановкуКомпонентПослеУстановкиРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ПродолжитьУстановкуКомпонентПослеУстановкиРасширенияРаботыСКриптографией(Подключено, Контекст = Неопределено) Экспорт + + Если Подключено = Истина Тогда + Оповестить("Установка_РасширениеРаботыСКриптографией"); + СостояниеУстановкиРасширенияРаботыСКриптографией = 2; + ПослеУстановкиКомпонентыИРасширений(); + Иначе + ПодключитьОбработчикОжидания("ОжидатьУстановкуРасширенияРаботыСКриптографией", 3); + КонецЕсли; + + Если СостояниеУстановкиКомпонентыExtraCryptoAPI = 2 Тогда + ПослеУстановкиКомпонентыИРасширений(); + Иначе + ПараметрыПодключения = ОбщегоНазначенияКлиент.ПараметрыПодключенияКомпоненты(); + ПараметрыПодключения.ПредложитьУстановить = Истина; + ПараметрыПодключения.ПредложитьЗагрузить = Истина; + ПараметрыПодключения.ПоказыватьВопросУстановки = Ложь; + ОписаниеКомпоненты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеКомпоненты(); + + СостояниеУстановкиКомпонентыExtraCryptoAPI = 1; + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + + Результат = Ждать ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакетаАсинх( + ОписаниеКомпоненты.ИмяОбъекта, + ОписаниеКомпоненты.ПолноеИмяМакета, + ПараметрыПодключения); + + Если Результат.Подключено Тогда + СостояниеУстановкиКомпонентыExtraCryptoAPI = 2; + ПослеУстановкиКомпонентыИРасширений(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ОжидатьУстановкуРасширенияРаботыСКриптографией() + + Подключено = Ждать ПодключитьРасширениеРаботыСКриптографиейАсинх(); + Если Подключено Тогда + ОтключитьОбработчикОжидания("ОжидатьУстановкуРасширенияРаботыСКриптографией"); + СостояниеУстановкиРасширенияРаботыСКриптографией = 2; + ПослеУстановкиКомпонентыИРасширений(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУстановкиКомпонентыИРасширений() + + // Если установлены еще не все необходимые компоненты для загрузки программы криптографии или токена, + // то только актуализируем состояние установки компоненты. + Если СостояниеУстановкиРасширенияРаботыС1СПредприятием = 2 + И СостояниеУстановкиРасширенияРаботыСКриптографией = 2 + И СостояниеУстановкиКомпонентыExtraCryptoAPI = 2 Тогда + + ПроверитьУстановкуКриптопровайдераПослеУстановкиКомпонентыИРасширений(); + + Иначе + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьУстановкуКриптопровайдераПослеУстановкиКомпонентыИРасширений() + + Если ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() + Или ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() + Или ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() + Или ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() + Или Не ПроверятьКриптопровайдер Тогда + + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + Возврат; + + КонецЕсли; + + Если Не ИмяТребуемойКомпоненты = "ПрограммаКриптографии" + И Не Элементы.ГруппаПроверкаУстановкиКриптопровайдера.Видимость Тогда + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("ПредлагатьУстановитьПрограмму", Ложь); + + СостояниеУстановкиКриптопровайдера = 1; + Элементы.ГруппаПроверкаУстановкиКриптопровайдера.Видимость = Истина; + Элементы.ГруппаСостояниеУстановкиКриптопровайдера.Видимость = Ложь; + Элементы.ГруппаВыполняетсяПроверка.Видимость = Истина; + + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьУстановкуПрограммКриптографии(ЭтотОбъект, ПараметрыПроверки, + Новый ОписаниеОповещения("ПослеПроверкиУстановкиПрограммКриптографии", ЭтотОбъект)); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПроверкиУстановкиПрограммКриптографии(Результат, Контекст) Экспорт + + Если Результат.ПроверкаВыполнена Тогда + + КриптопровайдерУстановлен = Результат.Токены.Количество() > 0; + + Если Не КриптопровайдерУстановлен Тогда + Для Каждого Криптопровайдер Из Результат.Программы Цикл + Если ЗначениеЗаполнено(Криптопровайдер.Программа) И Не КриптопровайдерУстановлен Тогда + КриптопровайдерУстановлен = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если КриптопровайдерУстановлен Тогда + СостояниеУстановкиКриптопровайдера = 2; + Иначе + Элементы.ГруппаПроверкаУстановкиКриптопровайдера.Видимость = Истина; + СостояниеУстановкиКриптопровайдера = 0; + КонецЕсли; + + Элементы.ГруппаСостояниеУстановкиКриптопровайдера.Видимость = Истина; + Элементы.ГруппаВыполняетсяПроверка.Видимость = Ложь; + + УстановитьЗначениеДекорацийВЗависимостиОтСостоянияУстановкиКомпонент(); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/РезультатПроверки/РезультатПроверки.mdo b/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/НачалоРаботыСЭлектроннойПодписью.mdo similarity index 57% rename from SSL/src/CommonForms/РезультатПроверки/РезультатПроверки.mdo rename to SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/НачалоРаботыСЭлектроннойПодписью.mdo index 8fa2b95df..d83740432 100644 --- a/SSL/src/CommonForms/РезультатПроверки/РезультатПроверки.mdo +++ b/SSL/src/CommonForms/НачалоРаботыСЭлектроннойПодписью/НачалоРаботыСЭлектроннойПодписью.mdo @@ -1,9 +1,9 @@ - - РезультатПроверки + + НачалоРаботыСЭлектроннойПодписью ru - Результат проверки + Начало работы с электронной подписью PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html index a124b7449..531e95ad7 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html @@ -1,17 +1,17 @@ -

          Описание обновлений включает в себя список изменений в последней версии приложения, а также историю изменений в предыдущих версиях.

          -

          Выводится однократно после завершения обновления на новую версию. Описание обновлений можно просмотреть позднее по команде Описание изменений приложения в панели Информация в разделе Главное.

          +

          Описание обновлений включает в себя список изменений в последней версии приложения, а также историю изменений в предыдущих версиях.

          +

          Выводится однократно после завершения обновления на новую версию. Описание обновлений можно просмотреть позднее по команде Описание изменений приложения в панели Информация в разделе Главное.

          Доступные действия

          -
          • Сведения о последних изменениях и улучшениях в приложении можно сохранить в файл. Для этого нажмите Сохранить как, укажите путь к файлу на компьютере. Также можно их распечатать с помощью кнопки Печать. +
            • Сведения о последних изменениях и улучшениях в приложении можно сохранить в файл. Для этого нажмите Сохранить как, укажите путь к файлу на компьютере. Также можно их распечатать с помощью кнопки Печать.
            • -
            • Для удобства навигации по тексту можно свернуть или  Развернуть все группы (заголовки). +
            • Для удобства навигации по тексту можно свернуть или Развернуть все группы (заголовки).
            • -
            • Также предусмотрена команда поиска, с помощью которой можно быстро найти нужную информацию о новой версии.

            Информация о ходе обновления версии ИБ

            -
            • Если в приложении после обновления версии еще проводится обработка данных, то для всех пользователей выводится предупреждение  Выполняются дополнительные процедуры обработки данных. В это время работа в приложении временно ограничена, так как еще не завершен переход на новую версию.

            Возможности для администратора

            +
          • Также предусмотрена команда поиска, с помощью которой можно быстро найти нужную информацию о новой версии.

          Информация о ходе обновления версии ИБ

          +
          • Если в приложении после обновления версии еще проводится обработка данных, то для всех пользователей выводится предупреждение Выполняются дополнительные процедуры обработки данных. В это время работа в приложении временно ограничена, так как еще не завершен переход на новую версию.

          Возможности для администратора

          • Администратор может ознакомиться со списком дополнительных инструкций, которые рекомендуется выполнить после обязательной части процесса обновления ИБ. Перейти к выполнению инструкций можно с помощью ссылок, расположенных в тексте описания новой версии.
          • По ссылке Выполняются дополнительные процедуры обработки данных перейдите, для того чтобы узнать о ходе дополнительной обработки данных.
          • -
          • Перейдите по ссылке Техническая информация о результатах обновления, для того чтобы просмотреть события в журнале регистрации, возникшие в процессе обновления.

          См. также:

          +
        • Перейдите по ссылке Техническая информация о результатах обновления, для того чтобы просмотреть события в журнале регистрации, возникшие в процессе обновления.
        • См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl index 7e444ef53..e5c05b380 100644 --- a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl @@ -400,8 +400,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Служебные процедуры и функции +#Область ПереопределяемаяЧастьСлужебныеПроцедурыИФункции &НаСервере Процедура УдалитьАвтономноеРабочееМесто(Отказ, СообщениеОбОшибке = "") @@ -411,7 +410,6 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Удаление автономного рабочего места'"); ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "АвтономнаяРаботаСлужебный.УдалитьАвтономноеРабочееМесто", @@ -440,8 +438,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Обработчики событий переходов +#КонецОбласти + +#Область ПереопределяемаяЧастьОбработчикиСобытийПереходов &НаКлиенте Функция Подключаемый_Ожидание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -499,8 +498,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Инициализация переходов помощника +#КонецОбласти + +#Область ПереопределяемаяЧастьИнициализацияПереходовПомощника &НаСервере Процедура УстановитьОсновнойСценарий() @@ -526,3 +526,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html index 8c1af52af..58d9be250 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html +++ b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html @@ -1,16 +1,16 @@

          Предназначена для набора и отправки сообщений SMS.

          -

          Открывается из карточек объектов приложения (партнеров, организаций и т.п.) с помощью кнопки  - Отправить SMS.

          +

          Открывается из карточек объектов приложения (партнеров, организаций и т.п.) с помощью кнопки - Отправить SMS.

          Для отправки SMS необходимо заключить договор с одним из операторов сотовой связи (МТС или Билайн), указав в настройках отправки SMS полученные регистрационные данные.

          Заполнение сообщения

          • Напишите Текст сообщения. Максимальная длина текста одного сообщения составляет 140 символов (160 символов в латинице или 70 символов в кириллице). Провайдеры могут поддерживать отправку "длинных SMS" (несколько склеенных между собой SMS). Максимальная длина таких SMS определяется оператором, например, Билайн - 480 символов (в латинице), МТС - 1000 символов (в латинице). Необходимо учитывать, что некоторые модели телефонов не умеют склеивать длинные SMS.
          • Отправлять в транслите - включите флажок, для того чтобы использовать эту возможность.
          • -
          • В поле Длина сообщения, символов приложение подсчитывает количество символов в набранном сообщении. +
          • В поле Длина сообщения, символов приложение подсчитывает количество символов в набранном сообщении.
          • Включите флажок, для того чтобы включать в сообщение Имя отправителя (заполните соответствующее поле, поддерживается только латиница).

          Проверка настроек отправки SMS

          -
          • Нажмите Настройка отправки SMS, для того чтобы проверить правильность настроек.

          Отправка SMS

          -
          • Если все настроено правильно, для отсылки сообщения нажмите Отправить. Приложение сообщает о состоянии отправки.

          См. также:

          +
          • Нажмите Настройка отправки SMS, для того чтобы проверить правильность настроек.

          Отправка SMS

          +
          • Если все настроено правильно, для отсылки сообщения нажмите Отправить. Приложение сообщает о состоянии отправки.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ОтправкаSMS/Module.bsl b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl index 0a224be6e..a7df0dbde 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаSMS/Module.bsl @@ -101,16 +101,10 @@ &НаСервере Процедура ОтправитьSMS() - // Сброс отображаемого статуса доставки. ИдентификаторСообщения = ""; - - // Подготовка номеров получателей. МассивНомеров = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НомераПолучателей, ", ", Истина); - - // отправка РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ТекстСообщения, ?(ДобавлятьОтправителя, ИмяОтправителя, Неопределено), ОтправлятьВТранслите); - // Вывод информации об ошибках в процессе отправки. Если ПустаяСтрока(РезультатОтправки.ОписаниеОшибки) Тогда // Проверка доставки для первого получателя. Если РезультатОтправки.ОтправленныеСообщения.Количество() > 0 Тогда @@ -122,7 +116,6 @@ ШаблонСообщения = НСтр("ru = 'Отправка не выполнена: |%1.'"); - Элементы.ТекстСообщениеНеОтправлено.Заголовок = ФорматированнаяСтрока(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонСообщения, РезультатОтправки.ОписаниеОшибки)); КонецЕсли; diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html b/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html index 12ece6393..3225ecaba 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html +++ b/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html @@ -1,22 +1,22 @@

          Предназначена для отправки электронного сообщения.

          -

          Предусмотрены кнопки  Написать письмо или Отправить для отправки электронных сообщений из различных объектов приложения, например, из окна пользователя приложения и т.п.

          +

          Предусмотрены кнопки Написать письмо или Отправить для отправки электронных сообщений из различных объектов приложения, например, из окна пользователя приложения и т.п.

          Написание электронного сообщения

          -
          • В поле Кому можно указать через запятую сразу несколько адресов электронной почты получателей электронного сообщения. Примеры записи почтового адреса: -
            • ivanov@server - краткая запись, адрес почтового ящика; +
              • В поле Кому можно указать через запятую сразу несколько адресов электронной почты получателей электронного сообщения. Примеры записи почтового адреса: +
                • ivanov@server - краткая запись, адрес почтового ящика;
                • -
                • Иванов ivanov@server - полная запись почтового адреса состоит из имени адресата и адреса почтового ящика; +
                • Иванов ivanov@server - полная запись почтового адреса состоит из имени адресата и адреса почтового ящика;
                • -
                • ivanov (почтовый сервер при этом должен уметь сопоставлять данный краткий адрес полному).
              • +
              • ivanov (почтовый сервер при этом должен уметь сопоставлять данный краткий адрес полному).
            • Заполните поле Тема;
            • Напишите текст письма. Для форматирования текста можно использовать стандартные команды форматирования. Часть наиболее используемых выведена над текстом письма в виде значков, остальные можно найти в меню Еще;
            • -
            • Для того чтобы вложить в почтовое сообщение дополнительный файлы, нажмите  Приложить файл. -
              • Для удаления вложения выделите его и нажмите клавишу Del.
            • -
            • В поле От автоматически приложением будет предложена почта для рассылок уведомлений, настроенная для автоматического получения и отправки писем. +
            • Для того чтобы вложить в почтовое сообщение дополнительный файлы, нажмите Приложить файл. +
              • Для удаления вложения выделите его и нажмите клавишу Del.
            • +
            • В поле От автоматически приложением будет предложена почта для рассылок уведомлений, настроенная для автоматического получения и отправки писем.
            • -
            • В поле Адрес ответа можно задать e-mail адрес, на который получатели письма будут отправлять ответ. Это поле нужно заполнять в том случае, если почта предназначена только для отправки.

            Отправка

            +
          • В поле Адрес ответа можно задать e-mail адрес, на который получатели письма будут отправлять ответ. Это поле нужно заполнять в том случае, если почта предназначена только для отправки.

          Отправка

          • После окончания работы над электронным сообщением нажмите Отправить.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index 76ef5a8d5..604f9d642 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -468,10 +468,19 @@ Попытка СообщениеОтправлено = ОтправитьПочтовоеСообщение(ЕстьОшибочныеПолучатели); Исключение - ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) Тогда + ВызватьИсключение; + КонецЕсли; + + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); ЗаголовокОшибки = НСтр("ru = 'Письмо не отправлено'"); РаботаСПочтовымиСообщениямиКлиент.СообщитьОбОшибкеПодключения(УчетнаяЗапись, ЗаголовокОшибки, ТекстОшибки); + Возврат; + КонецПопытки; Если СообщениеОтправлено Тогда diff --git a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html index 702b8491f..8c2394d78 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html +++ b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html @@ -1,23 +1,23 @@ -

          Выводит варианты отчетов, размещенные в разделе или группах раздела приложения.

          -

          Открыть панель отчетов можно по соответствующей команде из разделов приложения, например, в разделе Администрирование - Обслуживание - Отчеты и обработки предусмотрена команда Отчеты администратора.

          -

          Панель отчетов позволяет работать с отчетами из одного места и группирует варианты отчетов по группам командного интерфейса. Работа с панелью отчетов ведется в двух режимах:

          +

          Выводит варианты отчетов, размещенные в разделе или группах раздела приложения.

          +

          Открыть панель отчетов можно по соответствующей команде из разделов приложения, например, в разделе Администрирование - Обслуживание - Отчеты и обработки предусмотрена команда Отчеты администратора.

          +

          Панель отчетов позволяет работать с отчетами из одного места и группирует варианты отчетов по группам командного интерфейса. Работа с панелью отчетов ведется в двух режимах:

          • в режиме просмотра;
          • в режиме настройки.

          Режим просмотра

          • При первом открытии панели отчетов выводится оповещение о том, что к отчетам выводятся описания. Приложение предоставляет возможность выбрать - оставить описания или отключить. Также можно это сделать в режиме настройки.
          • -
          • Группы панели отчетов соответствуют группам раздела приложения, в котором располагается отчет. +
          • Группы панели отчетов соответствуют группам раздела приложения, в котором располагается отчет.
            • Также в панели отчетов могут быть предусмотрены и другие виды группировки, которые зависят от конкретного списка отчетов.
            • -
            • Предусмотрена группа См. также, в ней обычно размещаются варианты отчетов, которые редко используются при работе с приложением. +
            • Предусмотрена группа См. также, в ней обычно размещаются варианты отчетов, которые редко используются при работе с приложением.
            • Важные отчеты в панели отчетов выделены жирным шрифтом.
            • -
            • Эти группы можно настроить в списке всех отчетов, к которому можно перейти по команде Все отчеты.
          • -
          • Нажмите Настройка или клавишу F2, для того чтобы перейти в режим настройки панели отчетов.

          Поиск отчетов

          +
        • Эти группы можно настроить в списке всех отчетов, к которому можно перейти по команде Все отчеты.
        • +
        • Нажмите Настройка или клавишу F2, для того чтобы перейти в режим настройки панели отчетов.
        • Поиск отчетов

          Поиск доступен как в режиме просмотра, так и в режиме настройки.

          -
          • Отчеты можно искать по слову (части слова), также возможен поиск по нескольким словам. Поиск осуществляется: +
            • Отчеты можно искать по слову (части слова), также возможен поиск по нескольким словам. Поиск осуществляется:
              • по наименованию отчета;
              • по описанию варианта отчета; @@ -28,29 +28,29 @@
              • по наименованиям пользовательских настроек варианта отчета;
              • -
              • в наименованиях разделов и групп приложения и панели отчетов.
            • -
            • В поле Поиск наберите искомое значение, нажмите Найти. Поиск проводится сначала в текущем разделе, а затем дополнительно во всех остальных разделах приложения (эти результаты выводятся под заголовком Отчеты, найденные в других разделах, найденные отчеты сгруппированы по разделам приложения, при этом каждый заголовок раздела является ссылкой, которая предназначена для быстрого перехода к панели отчетов другого раздела). +
            • в наименованиях разделов и групп приложения и панели отчетов.
          • +
          • В поле Поиск наберите искомое значение, нажмите Найти. Поиск проводится сначала в текущем разделе, а затем дополнительно во всех остальных разделах приложения (эти результаты выводятся под заголовком Отчеты, найденные в других разделах, найденные отчеты сгруппированы по разделам приложения, при этом каждый заголовок раздела является ссылкой, которая предназначена для быстрого перехода к панели отчетов другого раздела).
          • -
          • Настройки поиска и поисковые слова запоминаются.

          Формирование отчета

          -
          • Нажмите левой кнопкой мыши по наименованию отчета.

          Отмена настроек панели отчетов

          -
          • Нажмите Еще - Сбросить мои настройки, для того чтобы вернуться к настройкам панели отчетов по умолчанию, если отчеты были размещены ошибочно.

          Все отчеты

          -
          • Нажмите Все отчеты для перехода к списку всех отчетов. В списке можно настроить варианты отчетов и их размещение во всех разделах приложения.

          Режим настройки

          -
          • Перейти в этот режим можно с помощью кнопки Настройки (клавиши F2). 
          • +
          • Настройки поиска и поисковые слова запоминаются.

          Формирование отчета

          +
          • Нажмите левой кнопкой мыши по наименованию отчета.

          Отмена настроек панели отчетов

          +
          • Нажмите Еще - Сбросить мои настройки, для того чтобы вернуться к настройкам панели отчетов по умолчанию, если отчеты были размещены ошибочно.

          Все отчеты

          +
          • Нажмите Все отчеты для перехода к списку всех отчетов. В списке можно настроить варианты отчетов и их размещение во всех разделах приложения.

          Режим настройки

          +
          • Перейти в этот режим можно с помощью кнопки Настройки (клавиши F2).
          • -
            С помощью флажка Отображать для смартфонов можно дополнительно вывести варианты отчетов с назначением Для смартфонов, которые оптимизированы под устройства с узким экраном.
            -
            • Варианты отчетов, которые не относятся к вариантам по умолчанию отображаются в панели отчетов бежевым цветом. 
          • -
          • Настроить вывод описаний вариантов отчетов можно с помощью флажка Описания отчетов.
          • С помощью флажков можно управлять видимостью варианта отчета в группе. +
            С помощью флажка Отображать для смартфонов можно дополнительно вывести варианты отчетов с назначением Для смартфонов, которые оптимизированы под устройства с узким экраном.
            +
            • Варианты отчетов, которые не относятся к вариантам по умолчанию отображаются в панели отчетов бежевым цветом.
          • +
          • Настроить вывод описаний вариантов отчетов можно с помощью флажка Описания отчетов.
          • С помощью флажков можно управлять видимостью варианта отчета в группе.
          • При помощи контекстного меню по правой кнопке мыши вариант отчета можно переместить в быстрый доступ или открыть его для изменения наименования, описания или настроек размещения:
            • -
              Для настройки быстрого доступа щелкните по варианту отчета в списке правой кнопкой мыши, выберите команду Переместить в быстрый доступ;
              +
              Для настройки быстрого доступа щелкните по варианту отчета в списке правой кнопкой мыши, выберите команду Переместить в быстрый доступ;
            • Для отмены быстрого доступа к варианту отчета щелкните по нему правой кнопкой мыши, выберите команду Убрать из быстрого доступа.
            • -
              Для того чтобы открыть вариант отчета для изменения наименования, описания или настроек размещения, щелкните на вариант отчета правой кнопкой мыши, выберите команду  Изменить.
          • +
            Для того чтобы открыть вариант отчета для изменения наименования, описания или настроек размещения, щелкните на вариант отчета правой кнопкой мыши, выберите команду Изменить.
        • -
          Нажмите Настройки (клавишу F2), для того чтобы сохранить изменения и перевести панель отчетов в режим просмотра.
        • См. также:

          +
          Нажмите Настройки (клавишу F2), для того чтобы сохранить изменения и перевести панель отчетов в режим просмотра.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 3859ce3e5..b933d9c47 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -431,8 +431,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура ПоказатьСкрытьВариант(Вариант, Элемент, Показать) @@ -581,8 +580,9 @@ Возврат Неопределено; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаКлиентеНаСервереБезКонтекста Функция НайтиПодсистемуПоСсылке(Форма, Ссылка) @@ -598,8 +598,9 @@ Возврат Неопределено; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Процедура ПереместитьВариантБыстрогоДоступа(Знач ВариантИдентификатор, Знач БыстрыйДоступ) @@ -742,8 +743,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура ОпределитьПоведениеВМобильномКлиенте() @@ -940,8 +942,9 @@ ЛокальныеНастройки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер / Заполнение панели отчетов. +#КонецОбласти + +#Область СерверЗаполнениеПанелиОтчетов &НаСервере Функция ЗаполнитьПанельОтчетовВФоне() @@ -2333,3 +2336,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html index 6941ffe9a..ff5b60b62 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html @@ -1,11 +1,11 @@ -

          Предназначена для указания параметров доступа к кластеру серверов.

          +

          Предназначена для указания параметров доступа к кластеру серверов.

          Открывается из окна Блокировка работы пользователей по ссылке Включить возможность управления блокировкой регламентных заданий.

          -

          Параметры необходимы для выполнения различных административных действий с клиент-серверной информационной базой:

          -
          • имя и пароль Администратора информационной базы для выполнения блокировки регламентных и фоновых заданий от его имени. В простейшем случае, это могут быть Ваши имя и пароль, которые Вы используете для входа в приложение. В целях безопасности рекомендуется создать отдельного служебного пользователя с административными правами. Следует иметь в виду, что имя и пароль хранятся непосредственно в самой базе, и могут быть прочитаны, если злоумышленник получит полный доступ к базе. +

            Параметры необходимы для выполнения различных административных действий с клиент-серверной информационной базой:

            +
            • имя и пароль Администратора информационной базы для выполнения блокировки регламентных и фоновых заданий от его имени. В простейшем случае, это могут быть Ваши имя и пароль, которые Вы используете для входа в приложение. В целях безопасности рекомендуется создать отдельного служебного пользователя с административными правами. Следует иметь в виду, что имя и пароль хранятся непосредственно в самой базе, и могут быть прочитаны, если злоумышленник получит полный доступ к базе.
            • Параметры администрирования кластера: -
              • имя и пароль одного из Администраторов кластера серверов, от имени которого выполняется принудительное завершение (отключение) сеансов пользователей. Не задается, если в кластере серверов не задан ни один администратор; +
                • имя и пароль одного из Администраторов кластера серверов, от имени которого выполняется принудительное завершение (отключение) сеансов пользователей. Не задается, если в кластере серверов не задан ни один администратор;
                • номера портов для доступа к кластеру серверов и агенту сервера, если они не стандартные. Как правило, номер порта агента сервера отличается от порта кластера серверов на единицу, например: 3040 и 3041.
                • @@ -20,4 +20,4 @@
                • Активные пользователи;
                • -
                • Документация по платформе 1С:Предприятие. "Клиент-серверный вариант. Руководство администратора".
                \ No newline at end of file +
              • Документация по платформе 1С:Предприятие. "Клиент-серверный вариант. Руководство администратора".
              \ No newline at end of file diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html index 5d061c7d5..d3ad7a72c 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html @@ -1,32 +1,32 @@

              Предназначена для настройки параметров прокси-сервера.

              Приложение предоставляет возможности для получения файлов из сети Интернет по протоколам HTTP, HTTPS, FTP и сохранения полученных файлов на клиенте, сервере или во временном хранилище.

              -

              При работе с приложением для выполнения определенных операций (таких, как загрузка курсов валют, загрузка адресного классификатора, обмен данными через FTP-ресурс, обновление конфигурации с веб-сайта поставщика и т.п.) может потребоваться доступ к сети Интернет.

              -

              В случае если доступ в Интернет осуществляется через прокси-сервер, в приложении необходимо указать параметры прокси-сервера. При этом существуют клиентские и серверные настройки прокси-сервера.

              +

              При работе с приложением для выполнения определенных операций (таких, как загрузка курсов валют, загрузка адресного классификатора, обмен данными через FTP-ресурс, обновление конфигурации с веб-сайта поставщика и т.п.) может потребоваться доступ к сети Интернет.

              +

              В случае если доступ в Интернет осуществляется через прокси-сервер, в приложении необходимо указать параметры прокси-сервера. При этом существуют клиентские и серверные настройки прокси-сервера.

              В общем случае, параметры прокси-сервера нужны для работы механизмов, которые получают файлы из Интернета по протоколам HTTP, HTTPS и FTP. Настройка прокси-сервера на сервере нужна для работы механизмов на сервере.

              -

              А для клиентских механизмов (например, загрузка курсов валют в тонком и толстом клиенте) нужна настройка на рабочем месте. В то же время, для работы в приложении с электронной почтой настраивать прокси-сервер не требуется. Как правило, параметры прокси-сервера указываются для каждого рабочего места по отдельности, поскольку настройки доступа к сети Интернет могут различаться для разных рабочих мест.

              -

              Но если в организации используется клиент-серверная версия 1С:Предприятия, то параметры прокси-сервера необходимо указать и на сервере 1С:Предприятия(из раздела Администрирование - Общие настройки - Параметры серверной информационной базы).При этом параметры прокси-сервера для рабочего места и сервера 1С:Предприятия могут различаться.

              -

              Для доступа в Интернет с клиентских компьютеров параметры прокси‑сервера задаются на каждом клиентском рабочем месте (по команде Персональные настройки в разделе Администрирование).

              +

              А для клиентских механизмов (например, загрузка курсов валют в тонком и толстом клиенте) нужна настройка на рабочем месте. В то же время, для работы в приложении с электронной почтой настраивать прокси-сервер не требуется. Как правило, параметры прокси-сервера указываются для каждого рабочего места по отдельности, поскольку настройки доступа к сети Интернет могут различаться для разных рабочих мест.

              +

              Но если в организации используется клиент-серверная версия 1С:Предприятия, то параметры прокси-сервера необходимо указать и на сервере 1С:Предприятия(из раздела Администрирование - Общие настройки - Параметры серверной информационной базы).При этом параметры прокси-сервера для рабочего места и сервера 1С:Предприятия могут различаться.

              +

              Для доступа в Интернет с клиентских компьютеров параметры прокси‑сервера задаются на каждом клиентском рабочем месте (по команде Персональные настройки в разделе Администрирование).

              Внимание: при работе с включенными профилями безопасности для настройки параметров прокси-сервера можно использовать только конфигурационный файл inetcfg.xml.

              Настройка параметров прокси-сервера

              • Выберите вариант использования прокси-сервера с помощью переключателя: -
                • Не использовать прокси-сервер - значение по умолчанию при первом запуске приложения; +
                  • Не использовать прокси-сервер - значение по умолчанию при первом запуске приложения;
                  • Использовать системные настройки прокси-сервера - настройки заполняются автоматически значениями из настроек прокси-сервера операционной системы. В этом случае заполненные настройки недоступны для редактирования.
                  • Использовать другие настройки прокси-сервера - настройки задаются вручную: -
                    • Напишите Адрес сервера и Порт сервера (одинаковый параметр для сервера 1С:Предприятия и рабочих мест). +
                      • Напишите Адрес сервера и Порт сервера (одинаковый параметр для сервера 1С:Предприятия и рабочих мест).
                      • -
                      • Из выпадающего списка выберите способ Аутентификации: -
                        • Базовая - в этом случае для каждого рабочего места и сервера необходимо указать пользователя прокси-сервера и его пароль (в общем случае могут быть различными, зависит от сетевой политики в организации). +
                        • Из выпадающего списка выберите способ Аутентификации: +
                          • Базовая - в этом случае для каждого рабочего места и сервера необходимо указать пользователя прокси-сервера и его пароль (в общем случае могут быть различными, зависит от сетевой политики в организации).
                          • Операционная система - в этом случае для работы с прокси-сервером будет использована учетная запись пользователя операционной системы.
                        • Укажите имя Пользователя и Пароль.
                        • -
                        • Для каждого рабочего места и сервера включение флажка Не использовать прокси для локальных адресов позволит снизить нагрузку на прокси-сервер при работе в локальной сети организации.
                    • +
                    • Для каждого рабочего места и сервера включение флажка Не использовать прокси для локальных адресов позволит снизить нагрузку на прокси-сервер при работе в локальной сети организации.
                • Для подтверждения параметров прокси-сервера нажмите ОК.

                Дополнительные параметры

                • Нажмите Дополнительно:
                  • если используются системные настройки прокси-сервера - для того чтобы просмотреть дополнительные параметры;
                  • -
                  • если используются другие настройки прокси-сервера - для того чтобы перейти к настройке дополнительных параметров.

                См. также:

                +
              • если используются другие настройки прокси-сервера - для того чтобы перейти к настройке дополнительных параметров.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 42bbffefa..2d44438b8 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -66,6 +66,174 @@ Auto InCommandBarAndInAdditionalSubmenu + + УправлениеФлажками + 286 + + КнопкаУстановитьФлажкиПодменю + 122 + + <key>ru</key> + <value>Установить флажки</value> + + true + true + + true + + + КнопкаУстановитьФлажкиПодменюРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + + КнопкаСнятьФлажкиПодменю + 123 + + <key>ru</key> + <value>Снять флажки</value> + + true + true + + true + + + КнопкаСнятьФлажкиПодменюРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + true + true + + true + + + <key>ru</key> + <value>Управление флажками</value> + + + УправлениеФлажкамиРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + + Compact + + + + УправлениеСтроками + 288 + + КнопкаПереместитьВверхПодменю + 124 + true + true + + true + + + КнопкаПереместитьВверхПодменюРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + + КнопкаПереместитьВнизПодменю + 125 + true + true + + true + + + КнопкаПереместитьВнизПодменюРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + true + true + + true + + + <key>ru</key> + <value>Управление строками</value> + + + УправлениеСтрокамиРасширеннаяПодсказка + 289 + Label + true + true + + Left + + + + Compact + + true true @@ -375,7 +543,7 @@ Left - Form.Command.Сохранить + Form.Command.СохранитьНаКомпьютер Normal Auto true @@ -1015,40 +1183,40 @@ Auto InAdditionalSubmenu + + КнопкаСохранитьВсеДействия + 196 + + <key>ru</key> + <value>Сохранить...</value> + + true + true + + true + + + КнопкаСохранитьВсеДействияРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + Form.Command.СохранитьНаКомпьютер + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ГруппаСохранитьОтправитьВсеДействия 194 - - КнопкаСохранитьВсеДействия - 196 - - <key>ru</key> - <value>Сохранить...</value> - - true - true - - true - - - КнопкаСохранитьВсеДействияРасширеннаяПодсказка - 197 - Label - true - true - - Left - - - Form.Command.Сохранить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - ПодменюОтправитьВсеДействия 309 @@ -1057,7 +1225,7 @@ 198 <key>ru</key> - <value>Отправить...</value> + <value>Почта</value> true true @@ -1364,6 +1532,205 @@ + + УправлениеФлажкамиВсеДействия + 321 + + КнопкаУстановитьФлажкиВсеДействия + 323 + + <key>ru</key> + <value>Установить флажки</value> + + true + true + + true + + + КнопкаУстановитьФлажкиВсеДействияРасширеннаяПодсказка + 324 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КнопкаСнятьФлажкиВсеДействия + 325 + + <key>ru</key> + <value>Снять флажки</value> + + true + true + + true + + + КнопкаСнятьФлажкиВсеДействияРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Управление флажками</value> + + + УправлениеФлажкамиВсеДействияРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + + + + УправлениеСтрокамиВсеДействия + 315 + + КнопкаПереместитьВверхВсеДействия + 317 + true + true + + true + + + КнопкаПереместитьВверхВсеДействияРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КнопкаПереместитьВнизВсеДействия + 319 + true + true + + true + + + КнопкаПереместитьВнизВсеДействияРасширеннаяПодсказка + 320 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Управление строками</value> + + + ru + Управление строками все действия + + + УправлениеСтрокамиВсеДействияРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + + + + КнопкаСброситьНастройкиКомплекта + 126 + + <key>ru</key> + <value>Сбросить настройки комплекта</value> + + true + true + + true + + + КнопкаСброситьНастройкиКомплектаРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.СброситьНастройкиКомплекта + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + КнопкаИзменитьФормуВсеДействия 299 @@ -1754,227 +2121,6 @@ НастройкиПечатныхФормКоманднаяПанель 88 - - ГруппаНастройкаКомплектаКоманднаяПанель - 121 - - УправлениеФлажками - 286 - - КнопкаУстановитьФлажкиПодменю - 122 - - <key>ru</key> - <value>Установить флажки</value> - - true - true - - true - - - КнопкаУстановитьФлажкиПодменюРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - КнопкаСнятьФлажкиПодменю - 123 - - <key>ru</key> - <value>Снять флажки</value> - - true - true - - true - - - КнопкаСнятьФлажкиПодменюРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.Command.СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Управление флажками</value> - - - УправлениеФлажкамиРасширеннаяПодсказка - 287 - Label - true - true - - Left - - - - - - УправлениеСтроками - 288 - - КнопкаПереместитьВверхПодменю - 124 - true - true - - true - - - КнопкаПереместитьВверхПодменюРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveUp - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - КнопкаПереместитьВнизПодменю - 125 - true - true - - true - - - КнопкаПереместитьВнизПодменюРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveDown - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Управление строками</value> - - - УправлениеСтрокамиРасширеннаяПодсказка - 289 - Label - true - true - - Left - - - - - - КнопкаСброситьНастройкиПодменю - 126 - - <key>ru</key> - <value>Сбросить настройки комплекта</value> - - true - true - - true - - - КнопкаСброситьНастройкиПодменюРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - Form.Command.СброситьНастройки - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Настройка комплекта</value> - - - ГруппаНастройкаКомплектаКоманднаяПанельРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - - Compact - - <key>ru</key> @@ -2003,9 +2149,7 @@ <autoFill>true</autoFill> </contextMenu> <source>НастройкиПечатныхФорм</source> - <extInfo xsi:type="form:SearchStringAdditionExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - </extInfo> + <extInfo xsi:type="form:SearchStringAdditionExtInfo"/> </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> @@ -2246,7 +2390,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.СброситьНастройки</commandName> + <commandName>Form.Command.СброситьНастройкиКомплекта</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -3914,7 +4058,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>Сохранить</name> + <name>СохранитьНаКомпьютер</name> <title> <key>ru</key> <value>Сохранить...</value> @@ -3932,15 +4076,14 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>Сохранить</name> + <name>СохранитьНаКомпьютер</name> </handler> </action> - <representation>Picture</representation> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>СброситьНастройки</name> + <name>СброситьНастройкиКомплекта</name> <title> <key>ru</key> <value>Сбросить настройки комплекта</value> @@ -3948,14 +4091,14 @@ <id>9</id> <toolTip> <key>ru</key> - <value>Сбросить настройки</value> + <value>Сбросить настройки комплекта</value> </toolTip> <use> <common>true</common> </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>СброситьНастройки</name> + <name>СброситьНастройкиКомплекта</name> </handler> </action> <currentRowUse>DontUse</currentRowUse> diff --git a/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html b/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html index 42074af28..81d9307f1 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html +++ b/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body class=""> -<p>Предназначена для просмотра, редактирования и печати сформированных печатных форм, а также для отправки печатной формы по электронной почте и сохранения в файл.</p> -<p>Вызывается из документов и списков документов приложения по команде <img src="StdPicture.Print" width="16" height="16"></img> <strong>Печать</strong>. </p> -<p>Предусмотрены следующие возможности:</p> +<p>Предназначена для просмотра, редактирования и печати сформированных печатных форм, а также для отправки печатной формы по электронной почте и сохранения в файл.</p> +<p>Вызывается из документов и списков документов приложения по команде <img src="StdPicture.Print" width="16" height="16"></img><strong>Печать</strong>. </p> +<p>Предусмотрены следующие возможности:</p> <ul><li><strong>Печать документов</strong> - общая печатная форма для всех документов; </li> -<li><b>Печать документа со штампом визуализации электронной подписи</b>; +<li><b>Печать документа со штампом визуализации электронной подписи</b>; </li> <li><b>Печать комплекта</b>; </li> <li><b>Настраиваемый комплект</b>.</li></ul><h3>Вывод на принтер</h3> <ul><li>Нажмите <strong>Печать</strong> для вывода нужного количества копий сформированной печатной формы на принтер.</li></ul><h3>Количество копий</h3> -<ul><li>Укажите количество <strong>Копий</strong>. Выбранное количество копий запоминается. Для комплектов документов количество копий зависит от настроек комплекта.</li></ul><h3>Редактирование печатной формы</h3> -<ul><li>С помощью кнопки <img src="StdPicture.SpreadsheetReadOnly"></img> <strong>Редактирование</strong> можно включить режим редактирования этой печатной формы. В этом случае печатная форма будет занята и другие пользователи не смогут ее редактировать. Повторным нажатием кнопки можно отключить режим редактирования.</li></ul><h3>Сохранение печатных форм</h3> -<ul><li>По кнопке <strong>Сохранить</strong> имеется возможность <a href="CommonForm.СохранениеПечатнойФормы/Help">сохранить</a> печатные формы в нужных форматах в папку на компьютере или присоединить к документу. Выберите с помощью переключателя способ сохранения документа и нужные форматы для сохранения.</li></ul><h3>Отправка по электронной почте</h3> -<p>Сформированные печатные формы документа можно <strong>Отправить</strong> в качестве вложений в <a href="CommonForm.ОтправкаСообщения/Help">электронном письме</a>. </p> +<ul><li>Укажите количество <strong>Копий</strong>. Выбранное количество копий запоминается. Для комплектов документов количество копий зависит от настроек комплекта.</li></ul><h3>Редактирование печатной формы</h3> +<ul><li>С помощью кнопки <img src="StdPicture.SpreadsheetReadOnly"></img><strong>Редактирование</strong> можно включить режим редактирования этой печатной формы. В этом случае печатная форма будет занята и другие пользователи не смогут ее редактировать. Повторным нажатием кнопки можно отключить режим редактирования.</li></ul><h3>Сохранение печатных форм</h3> +<ul><li>С помощью команды <img src="StdPicture.SendMessage"></img><strong>Отправить - <img src="CommonPicture.СохранитьФайлКак"></img></strong><strong>на компьютер</strong> имеется возможность <a href="CommonForm.СохранениеПечатнойФормы/Help">сохранить</a> печатные формы в нужных форматах в каталог на компьютере. Выберите с помощью переключателя способ сохранения документа и нужные форматы для сохранения.</li></ul><h3>Отправка по электронной почте</h3> +<p>Сформированные печатные формы документа можно <img src="StdPicture.SendMessage"></img><strong>Отправить - <img src="CommonPicture.ЭлектронноеПисьмо"></img> по почте</strong> в качестве вложений в <a href="CommonForm.ОтправкаСообщения/Help">электронном письме</a>. </p> <ul><li>Перед отправкой необходимо указать с помощью флажков, в каком формате (или нескольких форматах) нужно отправить документ. </li> <li>Для уменьшения размера вложений печатную форму перед отправкой рекомендуется упаковать в архив (формат .zip). Нажмите кнопку <strong>Выбрать</strong>. Настройки будут сохранены. @@ -25,19 +25,19 @@ <div>Из списка документов можно выбрать несколько документов для печати. </div> </li> <li> -<div>В этом случае будет выведено несколько печатных форм. Для быстрого перехода к нужной печатной форме нажмите <img src="StdPicture.Back"></img> <strong>Перейти к документу</strong> (клавишу <strong>F7</strong>). </div> +<div>В этом случае будет выведено несколько печатных форм. Для быстрого перехода к нужной печатной форме нажмите <img src="StdPicture.Back"></img><strong>Перейти к документу</strong> (клавишу <strong>F7</strong>). </div> </li> <li> <div>Из предложенного списка выберите нужный документ, нажмите <strong>ОК</strong>.</div></li></ul><h3>Редактирование макета</h3> -<ul><li>Нажмите <strong>Еще -</strong> <strong>Изменить макет</strong>, для того чтобы перейти к <a href="CommonForm.РедактированиеТабличногоДокумента/Help">редактированию макета</a> печатной формы. Печатная форма становится неактивной. После завершения редактирования печатная форма изменится автоматически.</li></ul><h3>Переход к списку макетов печатных форм</h3> +<ul><li>Нажмите <strong>Еще -</strong> <strong>Изменить макет</strong>, для того чтобы перейти к <a href="CommonForm.РедактированиеТабличногоДокумента/Help">редактированию макета</a> печатной формы. Печатная форма становится неактивной. После завершения редактирования печатная форма изменится автоматически.</li></ul><h3>Переход к списку макетов печатных форм</h3> <ul><li> -<div>Выполните команду меню <strong>Еще - Перейти к макетам печатных форм</strong>, для того чтобы открыть <a href="InformationRegister.ПользовательскиеМакетыПечати/Help">список макетов</a>.</div></li></ul><h3>Печать документа со штампом визуализации электронной подписи</h3> +<div>Выполните команду меню <strong>Еще - Перейти к макетам печатных форм</strong>, для того чтобы открыть <a href="InformationRegister.ПользовательскиеМакетыПечати/Help">список макетов</a>.</div></li></ul><h3>Печать документа со штампом визуализации электронной подписи</h3> <p>Для добавления штампа визуализации электронной подписи в печатную форму выбранного документа:</p> <ul><li> -<div>В списке документов выберите документ и нажмите кнопку <strong>Печать</strong>.</div> +<div>В списке документов выберите документ и нажмите кнопку <strong>Печать</strong>.</div> </li> <li> -<div>С помощью кнопки <strong>Сохранить</strong> присоедините печатную форму к документу, выбрав формат сохранения - <strong>Табличный(.mxl)</strong>.</div> +<div>С помощью команды <img src="StdPicture.SendMessage"></img><strong>Отправить - <img src="CommonPicture.Скрепка"></img> В присоединенные файлы</strong> присоедините печатную форму к документу, выбрав формат сохранения - <strong>Табличный(.mxl)</strong>.</div> </li> <li> <div>В командной панели документа перейдите по гиперссылке <strong>Присоединенные файлы</strong>, выберите добавленный табличный документ и подпишите его электронной подписью.</div> @@ -45,32 +45,32 @@ <div>в контекстном меню выберите <strong>Электронная подпись и шифрование - Подписать</strong>, в поле <strong>Сертификат</strong> выберите нужный сертификат электронной подписи, введите пароль, нажмите <strong>Подписать</strong>.</div> </li> <li> -<div>в веб-клиенте на запрос расширения для работы с криптографией нажмите <strong>Да</strong>;</div></li></ul></li> +<div>в приложении в интернете на запрос расширения для работы с электронной подписью нажмите <strong>Да</strong>;</div></li></ul></li> <li> -<div>По завершении подписи, оставаясь на этом же табличном документе, нажмите <strong>Печать - Со штампом электронной подписи</strong>.</div> +<div>По завершении подписи, оставаясь на этом же табличном документе, нажмите <strong>Печать - Со штампом электронной подписи</strong>.</div> <div><br></div></li></ul><h3>Печать комплекта</h3> <ul><li>Приложение позволяет распечатать комплект различных документов. Печатные формы комплекта выводятся на отдельных страницах, при этом можно просмотреть конкретную форму, выбирая из списка печатных форм слева нужную. Можно изменить количество <strong>Копий комплекта</strong>.</li></ul><h3>Настраиваемый комплект </h3> -<p>В приложении предусмотрена возможность выборочной печати комплекта документов. </p> +<p>В приложении предусмотрена возможность выборочной печати комплекта документов. </p> <ul><li>В окне <strong>Настраиваемый комплект</strong> слева находится панель настройки количества копий, которая состоит из столбцов: -<ul><li> <img src="StdPicture.Print"></img> - в этом столбце с помощью флажков производится выбор для печати, +<ul><li> <img src="StdPicture.Print"></img> - в этом столбце с помощью флажков производится выбор для печати, </li> <li><strong>Печатная форма</strong>; </li> <li>количество <strong>Копий</strong>. </li></ul></li> -<li>Для того чтобы настроить печать комплекта, нажмите <strong>Еще -</strong> <strong>Настройка комплекта</strong>. С помощью команд выпадающего меню настройки можно <strong>Установить</strong> или <strong>Снять все флажки</strong>, поменять порядок печатных форм в комплекте (<strong>Переместить вверх/вниз</strong>) или <strong>Сбросить настройки комплекта</strong>. +<li>Для того чтобы настроить печать комплекта, нажмите <strong>Еще -</strong> <strong>Настройка комплекта</strong>. С помощью команд выпадающего меню настройки можно <strong>Установить</strong> или <strong>Снять все флажки</strong>, поменять порядок печатных форм в комплекте (<strong>Переместить вверх/вниз</strong>) или <strong>Сбросить настройки комплекта</strong>. </li> -<li>Выберите нужную печатную форму из комплекта для просмотра. Включите флажок для печати этой печатной формы. Проставьте необходимое количество копий для каждой печатной формы. Настройки будут сохранены. +<li>Выберите нужную печатную форму из комплекта для просмотра. Включите флажок для печати этой печатной формы. Проставьте необходимое количество копий для каждой печатной формы. Настройки будут сохранены. </li> <li>Кроме этого, можно изменить количество <strong>Копий комплекта</strong>. </li> <li>Для удобства просмотра печатной формы можно отключить панель настройки количества копий с помощью кнопки <img src="StdPicture.ListViewModeHierarchicalList"></img><strong>Показать/Скрыть настройку количества копий</strong>.</li></ul><h3>Показатели выделенных ячеек</h3> <ul><li> -<div>С помощью кнопки <img src="CommonPicture.Сумма" width="16" height="16"></img> можно подсчитать сумму, среднее, минимум и максимум. Указывается также общее количество выделенных ячеек и количество числовых ячеек. Расчеты проводятся только для числовых ячеек.</div> +<div>С помощью кнопки <img src="CommonPicture.Сумма" width="16" height="16"></img> можно подсчитать сумму, среднее, минимум и максимум. Указывается также общее количество выделенных ячеек и количество числовых ячеек. Расчеты проводятся только для числовых ячеек.</div> </li> <li> <div>Выделите нужные ячейки с числами.</div> </li> <li> -<div>Нажмите <img src="CommonPicture.Сумма"></img>, для того чтобы подсчитать <strong>Показатели выделенных ячеек</strong>.</div></li></ul><div><span style="font-size: 13.4399995803833px; font-weight: bold;">Формирование печатной формы на другом языке</span></div> +<div>Нажмите <img src="CommonPicture.Сумма"></img>, для того чтобы подсчитать <strong>Показатели выделенных ячеек</strong>.</div></li></ul><div>Формирование печатной формы на другом языке</div> <div> <ul><li>Если для печатной формы предусмотрен вывод на других языках, то при просмотре печатной формы появляется меню выбора языка. Выберите необходимый язык, печатная форма переформируется на этом языке. Можно проверить печатную форму и распечатать. Если в печатной форме наблюдаются ошибки, следует проверить корректность перевода макета, элементов списков и валюты.</li></ul></div></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index a49b7ed3c..543388412 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -106,21 +106,30 @@ Элементы.НастройкаКоличестваКопий.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; Элементы.Переместить(Элементы.КомандыПоказателей, Элементы.КомандыПоказателей.Родитель, Элементы.Показатель); Элементы.ГруппаКоманднаяПанель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + Элементы.КнопкаСохранить.Заголовок = НСтр("ru = 'На устройство...'"); + Элементы.КнопкаСохранитьВсеДействия.Заголовок = НСтр("ru = 'На устройство...'"); КонецЕсли; + СохранениеВПрисоединенныеФайлы = Ложь; + Если ОбъектыПечати.Количество() > 0 И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + СохранениеВПрисоединенныеФайлы = МодульРаботаСФайлами.КОбъектуМожноПрисоединятьФайлы(ОбъектыПечати[0].Значение); + КонецЕсли; + Если УправлениеПечатью.НастройкиПечати().СкрыватьПодписиИПечатиДляРедактирования Тогда АдресХранилищаРисунков = ПоместитьВоВременноеХранилище(ПодписиИПечатиТабличныхДокументов(), УникальныйИдентификатор); КонецЕсли; УбратьПодписьИПечать(); - УправлениеПечатью.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность"); МодульУправлениеПечатьюМультиязычность.ЗаполнитьПодменюЯзык(ЭтотОбъект, , ДоступныеЯзыкиПечатныхФорм()); КонецЕсли; УстановитьЗаголовокФормы(); + + УправлениеПечатью.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + КонецПроцедуры &НаСервере @@ -193,7 +202,7 @@ МодульРаботаСФайламиСлужебныйКлиент.ОповеститьОбИзмененииФайлов(ЗаписанныеОбъекты); КонецЕсли; - ПоказатьОповещениеПользователя(, , НСтр("ru = 'Сохранение завершено'"), БиблиотекаКартинок.ДиалогИнформация); + ПоказатьОповещениеПользователя(, , НСтр("ru = 'Печатная форма сохранена'"), БиблиотекаКартинок.ДиалогИнформация); КонецЕсли; КонецЕсли; @@ -501,10 +510,10 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура Сохранить(Команда) +Процедура СохранитьНаКомпьютер(Команда) - Оповещение = Новый ОписаниеОповещения("ПриПодключенииРасширения", ЭтотОбъект); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение); + Оповещение = Новый ОписаниеОповещения("СохранитьНаКомпьютерПриПодключенииРасширения", ЭтотОбъект); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение); КонецПроцедуры @@ -572,7 +581,7 @@ КонецПроцедуры &НаКлиенте -Процедура СброситьНастройки(Команда) +Процедура СброситьНастройкиКомплекта(Команда) ВосстановитьНастройкиПечатныхФорм(); НачатьСохранениеНастроек(); КонецПроцедуры @@ -794,6 +803,12 @@ ОбъектыПечати = ПечатныеФормы.ОбъектыПечати; ПараметрыВывода = ПечатныеФормы.ПараметрыВывода; Результат = ПечатныеФормы.КоллекцияПечатныхФорм; + + ОсновнаяПечатнаяФорма = Неопределено; + Параметры.ПараметрыПечати.Свойство("ОсновнаяПечатнаяФорма", ОсновнаяПечатнаяФорма); + Если ОсновнаяПечатнаяФорма <> Неопределено Тогда + УправлениеПечатью.ПриВыполненииКомандыПечати(Параметры.ПараметрКоманды, Параметры.ПараметрыПечати, Результат); + КонецЕсли; КонецЕсли; // Установка признака сохранения печатной формы в файл (не открывать форму, сразу сохранять в файл). @@ -983,6 +998,7 @@ Элементы.Копий.Видимость = ЕстьРазрешенныйВывод И ЕстьДанныеДляПечати; Элементы.КнопкаРедактирование.Видимость = ЕстьРазрешенныйВывод И ЕстьДанныеДляПечати И ЕстьРазрешенноеРедактирование; + Элементы.КнопкаПереключитьРедактированиеВсеДействия.Видимость = Элементы.КнопкаРедактирование.Видимость; Элементы.ГруппаПоказатель.Видимость = ЕстьДанныеДляПечати; Если Элементы.Найти("КнопкаПредварительныйПросмотр") <> Неопределено Тогда @@ -999,17 +1015,23 @@ Элементы.ТекущаяПечатнаяФорма.УстановитьДействие("ПриАктивизации", ""); КонецЕсли; - Элементы.КнопкаПоказатьСкрытьНастройкуКомплекта.Видимость = ЭтоПечатьКомплекта(); - Элементы.КнопкаПоказатьСкрытьНастройкуКомплектаВсеДействия.Видимость = ЭтоПечатьКомплекта(); - Элементы.НастройкиПечатныхФорм.Видимость = ЭтоПечатьКомплекта(); - + ЭтоПечатьКомплекта = ЭтоПечатьКомплекта(); ДоступнаНастройкаКомплекта = Истина; Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ФиксированныйКомплект") Тогда ДоступнаНастройкаКомплекта = Не Параметры.ПараметрыПечати.ФиксированныйКомплект; КонецЕсли; + ЭтоПечатьНастраиваемогоКомплекта = ЭтоПечатьКомплекта И ДоступнаНастройкаКомплекта; + + Элементы.КнопкаПоказатьСкрытьНастройкуКомплекта.Видимость = ЭтоПечатьКомплекта; + Элементы.КнопкаПоказатьСкрытьНастройкуКомплектаВсеДействия.Видимость = ЭтоПечатьКомплекта; + Элементы.КнопкаСброситьНастройкиКомплекта.Видимость = ЭтоПечатьКомплекта; + Элементы.НастройкиПечатныхФорм.Видимость = ЭтоПечатьКомплекта; Элементы.ГруппаНастройкаКомплектаКонтекстноеМеню.Видимость = ДоступнаНастройкаКомплекта; - Элементы.ГруппаНастройкаКомплектаКоманднаяПанель.Видимость = ЭтоПечатьКомплекта() И ДоступнаНастройкаКомплекта; + Элементы.УправлениеФлажками.Видимость = ЭтоПечатьНастраиваемогоКомплекта; + Элементы.УправлениеСтроками.Видимость = ЭтоПечатьНастраиваемогоКомплекта; + Элементы.УправлениеФлажкамиВсеДействия.Видимость = ЭтоПечатьНастраиваемогоКомплекта; + Элементы.УправлениеСтрокамиВсеДействия.Видимость = ЭтоПечатьНастраиваемогоКомплекта; Элементы.НастройкиПечатныхФормПечатать.Видимость = ДоступнаНастройкаКомплекта; Элементы.НастройкиПечатныхФормКоличество.Видимость = ДоступнаНастройкаКомплекта; Элементы.НастройкиПечатныхФорм.Шапка = ДоступнаНастройкаКомплекта; @@ -1057,7 +1079,10 @@ КонецЕсли; Элементы.НастройкиПечатныхФорм.Видимость = Видимость; - Элементы.ГруппаНастройкаКомплектаКоманднаяПанель.Видимость = Видимость И ДоступнаНастройкаКомплекта; + Элементы.УправлениеФлажками.Видимость = Видимость И ДоступнаНастройкаКомплекта; + Элементы.УправлениеСтроками.Видимость = Видимость И ДоступнаНастройкаКомплекта; + Элементы.УправлениеФлажкамиВсеДействия.Видимость = Видимость И ДоступнаНастройкаКомплекта; + Элементы.УправлениеСтрокамиВсеДействия.Видимость = Видимость И ДоступнаНастройкаКомплекта; КонецПроцедуры &НаКлиенте @@ -1472,7 +1497,7 @@ Оповещение = Новый ОписаниеОповещения("ОткрытьОфисныеДокументыПослеПодключенияРасширения", ЭтотОбъект, Контекст); ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение для работы с 1С:Предприятием.'"); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстСообщения); КонецЕсли; КонецПроцедуры @@ -1550,7 +1575,7 @@ Оповещение = Новый ОписаниеОповещения("ОткрытьОфисныеДокументыПослеПодключенияРасширения", ЭтотОбъект, Контекст); ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение для работы с 1С:Предприятием.'"); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстСообщения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстСообщения); КонецПроцедуры &НаКлиенте @@ -1704,7 +1729,7 @@ Возврат Истина; Иначе Возврат Не ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", - "ВыводитьСразу", Истина); + "ВыводитьСразу", Ложь); КонецЕсли; КонецФункции @@ -1752,8 +1777,9 @@ #Если Не ВебКлиент Тогда Если ЗначениеЗаполнено(ИмяКаталога) Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьПапкуСохранения", ЭтотОбъект, ИмяКаталога); - ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение успешно завершено'"), ОписаниеОповещения, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в папку %1'"), ИмяКаталога), БиблиотекаКартинок.ДиалогИнформация); + ПоказатьОповещениеПользователя(НСтр("ru = 'Печатная форма сохранена'"), ОписаниеОповещения, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в каталог %1'"), ИмяКаталога), + БиблиотекаКартинок.ДиалогИнформация); КонецЕсли; #КонецЕсли @@ -1885,6 +1911,10 @@ ПараметрыФормы.Вставить("ТипМакета", "MXL"); ПараметрыФормы.Вставить("КодЯзыка", СтрРазделить(ТекущийЯзык, "_", Истина)[0]); ПараметрыФормы.Вставить("ЭтоПечатнаяФорма", Параметры.ИмяМенеджераПечати = "УправлениеПечатью"); + ПараметрыФормы.Вставить("ОсновнаяПечатнаяФорма", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры.ПараметрыПечати, "ОсновнаяПечатнаяФорма", Ложь)); + ПараметрыФормы.Вставить("НаименованиеПечатнойФормы", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры.ПараметрыПечати, "НаименованиеПечатнойФормы", "")); СтандартныеПодсистемыКлиент.ПоказатьРедакторТабличногоДокумента(Неопределено, ПараметрыФормы, , ЭтотОбъект); @@ -1935,6 +1965,8 @@ Элементы.КнопкаРедактирование.Пометка = Пометка; Элементы.КнопкаРедактирование.Доступность = РедактированиеВозможно; + Элементы.КнопкаПереключитьРедактированиеВсеДействия.Пометка = Элементы.КнопкаРедактирование.Пометка; + Элементы.КнопкаПереключитьРедактированиеВсеДействия.Доступность = Элементы.КнопкаРедактирование.Доступность; КонецПроцедуры @@ -2377,18 +2409,18 @@ КонецФункции &НаКлиенте -Процедура ПриПодключенииРасширения(РасширениеПодключено, ДополнительныеПараметры) Экспорт +Процедура СохранитьНаКомпьютерПриПодключенииРасширения(РасширениеПодключено, ДополнительныеПараметры) Экспорт РасширениеДляРаботыСФайламиПодключено = РасширениеПодключено; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати); ПараметрыФормы.Вставить("РасширениеДляРаботыСФайламиПодключено", РасширениеПодключено); + ПараметрыФормы.Вставить("Назначение", "Компьютер"); ОткрытьФорму("ОбщаяФорма.СохранениеПечатнойФормы", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры - // Параметры: // ПараметрыПодготовки - см. УправлениеПечатьюКлиент.ПараметрыПодготовкиИменФайлов // diff --git a/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Form.form b/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Form.form index d56ced697..409c7126c 100644 --- a/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Form.form @@ -447,37 +447,6 @@ <items xsi:type="form:FormGroup"> <name>ГруппаСохранитьИОтправить</name> <id>24</id> - <items xsi:type="form:Button"> - <name>Сохранить</name> - <id>18</id> - <title> - <key>ru</key> - <value>Сохранить...</value> - - true - true - - true - - - СохранитьРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - Form.Command.Сохранить - Normal - Picture - true - true - UserCmds - Auto - InCommandBar - ПодменюОтправить 151 @@ -512,6 +481,67 @@ Auto InCommandBar + + Сохранить + 18 + + <key>ru</key> + <value>На компьютер</value> + + true + true + + true + + + СохранитьРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.Command.СохранитьНаКомпьютер + Normal + Picture + true + true + UserCmds + Auto + InCommandBar + + + СохранитьВПрисоединенныеФайлы + 161 + + <key>ru</key> + <value>В присоединенные файлы</value> + + true + true + + true + + + СохранитьВПрисоединенныеФайлыРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + Form.Command.СохранитьВПрисоединенныеФайлы + Normal + Auto + true + true + UserCmds + Auto + true true @@ -653,37 +683,6 @@ ГруппаСохранитьИОтправитьВсеДействия 45 - - КнопкаСохранитьВсеДействия - 47 - - <key>ru</key> - <value>Сохранить...</value> - - true - true - - true - - - КнопкаСохранитьВсеДействияРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - Form.Command.Сохранить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - ПодменюОтправитьВсеДействия 159 @@ -718,6 +717,68 @@ Auto InAdditionalSubmenu + + КнопкаСохранитьВсеДействия + 47 + + <key>ru</key> + <value>На компьютер</value> + + true + true + + true + + + КнопкаСохранитьВсеДействияРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.СохранитьНаКомпьютер + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КнопкаСохранитьВПрисоединенныеФайлыВсеДействия + 163 + + <key>ru</key> + <value>В присоединенные файлы</value> + + true + true + + true + + + КнопкаСохранитьВПрисоединенныеФайлыВсеДействияРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + Form.Command.СохранитьВПрисоединенныеФайлы + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -881,6 +942,94 @@ + + ГруппаУправлениеФлажкамиЕще + 165 + + ПечатныеФормыУстановитьФлажкиЕще + 167 + + <key>ru</key> + <value>Установить флажки</value> + + true + true + + true + + + ПечатныеФормыУстановитьФлажкиЕщеРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПечатныеФормыСнятьФлажкиЕще + 169 + + <key>ru</key> + <value>Снять флажки</value> + + true + true + + true + + + ПечатныеФормыСнятьФлажкиЕщеРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Управление флажками</value> + + + ГруппаУправлениеФлажкамиЕщеРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + Compact + + ГруппаУправлениеСтрокамиЕще 143 @@ -2434,25 +2583,25 @@ Auto - Сохранить + СохранитьНаКомпьютер <key>ru</key> - <value>Сохранить...</value> + <value>На компьютер</value> 4 ru - Сохранить на компьютере или в качестве присоединенного файла к объекту + Сохранить печатную форму в файл на компьютере true - StdPicture.SaveFile + CommonPicture.Скачать - Сохранить + СохранитьНаКомпьютер TextPicture @@ -2581,6 +2730,31 @@ Auto Auto + + СохранитьВПрисоединенныеФайлы + + <key>ru</key> + <value>В присоединенные файлы</value> + + 2 + + ru + Сохранить печатную форму в присоединенный файл к документу + + + true + + + CommonPicture.Скрепка + + + + СохранитьВПрисоединенныеФайлы + + + Auto + Auto + ОфисныеДокументы diff --git a/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Help/ru.html b/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Help/ru.html index e011d6023..d0d52d0f5 100644 --- a/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Help/ru.html +++ b/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Help/ru.html @@ -1,29 +1,29 @@

            Предназначена для предварительного просмотра и вывода на печать различных печатных форм в формате офисных документов. Также можно отправить сформированные печатные формы по электронной почте, сохранить в файл, подписать электронной подписью.

            -

            Вызывается из документов и списков документов приложения по команде  Печать. 

            -

            Предусмотрены следующие возможности:

            +

            Вызывается из документов и списков документов приложения по команде Печать.

            +

            Предусмотрены следующие возможности:

            • Для возможности сохранения, отправки и подписания - получение печатных форм в форму печати офисных документов;
            • Для получения офисных документов сразу, после нажатия кнопки печати - получение печатных форм без открытия формы печати офисных документов;
            • При необходимости получения печатной формы, на языке отличном от основного языка конфигурации - формирование печатной формы на другом языке.

            Форма печати офисных документов

            В левой части формы содержаться перечень сформированных печатных форм. При нажатии на любую из них, будет открыт соответствующий офисный документ.

            Форма предоставляет возможности:

            • отправить на печать;
            • -
            •  открыть офисный документ для просмотра;
            • -
            •  установить флажки у сформированных документов;
            • -
            •  изменить порядок документов;
            • +
            • открыть офисный документ для просмотра;
            • +
            • установить флажки у сформированных документов;
            • +
            • изменить порядок документов;
            • флажок Подпись и печать - позволяет выводить факсимиле подписи и печати, если в макете был предусмотрен их вывод;
            • флажок Одним документом - позволяет получить один офисный документ для всех печатных форм;
            • флажок Больше не показывать и открывать печатную форму сразу - позволяет получать готовые печатные формы сразу, минуя открытие формы печати;
            • -
            • сохранить, прикрепить и отправить печатные формы.

            Важно: Если флажок Больше не показывать и открывать печатную форму сразу установлен и документы формируются сразу, но требуется вернуться к форме печати, то следует нажать на гиперссылку во всплывающем уведомлении. Уведомление появляется в нижней части экрана при получении печатных форм.

            +
          • сохранить, прикрепить и отправить печатные формы.

          Важно: Если флажок Больше не показывать и открывать печатную форму сразу установлен и документы формируются сразу, но требуется вернуться к форме печати, то следует нажать на гиперссылку во всплывающем уведомлении. Уведомление появляется в нижней части экрана при получении печатных форм.

          Сохранение печатных форм

          -
          • По кнопке Сохранить имеется возможность сохранить печатную форму в папку на компьютер, дополнительно упаковать его в архив (.zip), транслитерировать имена файлов и подписать Электронной подписью.
          • +
            • По кнопке Сохранить имеется возможность сохранить печатную форму в папку на компьютер, дополнительно упаковать его в архив (.zip), транслитерировать имена файлов и подписать Электронной подписью.
            • С помощью переключателя имеется возможность каждую печатную форму Присоединить к своему документу.

            Отправка по электронной почте

            Сформированные печатные формы документа можно Отправить в качестве вложений в электронном письме.

            • Перед отправкой необходимо указать с помощью флажков, в каком формате (или нескольких форматах) нужно отправить документ.
            • Для уменьшения размера вложений печатную форму перед отправкой рекомендуется упаковать в архив (формат .zip). Нажмите кнопку Выбрать. Настройки будут сохранены.
            • -
            • При необходимости подписания документов электронной подписью используйте флажок Подписать. 
            • -
            • Заполните поля сообщения Кому, Тема, напишите содержание письма. Нажмите кнопку Отправить. 

            Переход к списку макетов печатных форм

            +
          • При необходимости подписания документов электронной подписью используйте флажок Подписать.
          • +
          • Заполните поля сообщения Кому, Тема, напишите содержание письма. Нажмите кнопку Отправить.

          Переход к списку макетов печатных форм

          • -
            Выполните команду меню Еще - Перейти к макетам печатных форм, для того чтобы открыть список макетов.

          Формирование печатной формы на другом языке

          +
          Выполните команду меню Еще - Перейти к макетам печатных форм, для того чтобы открыть список макетов.

          Формирование печатной формы на другом языке

          • Если для печатной формы предусмотрен вывод на других языках, то при просмотре печатной формы появляется меню выбора языка. Выберите необходимый язык, печатная форма переформируется на этом языке. Можно проверить печатную форму и распечатать. Если в печатной форме наблюдаются ошибки, следует проверить корректность перевода макета, элементов списков и валюты.
          \ No newline at end of file diff --git a/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Module.bsl b/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Module.bsl index 4cc344939..98ead2008 100644 --- a/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументовOfficeOpen/Module.bsl @@ -40,19 +40,20 @@ Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФормВходящие Цикл ПечатныеФормыДокумента = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ОфисныеДокументы); Для Каждого ПечатнаяФорма Из ПечатныеФормыДокумента Цикл - Если ЭтоАдресВременногоХранилища(ПечатнаяФорма.Ключ) Тогда - ЗаданныеИменаПечатныхФорм = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ИмяФайлаПечатнойФормы); - ПредставлениеПечатнойФормы = УправлениеПечатью.ИмяФайлаПечатнойФормыОбъекта(ПечатнаяФорма.Значение, ЗаданныеИменаПечатныхФорм, НастройкаПечатнойФормы.Название); - ДобавитьПечатнуюФорму(ТаблицаПечатныхФорм, НастройкаПечатнойФормы, ПечатнаяФорма, ПредставлениеПечатнойФормы); - СтруктураНастроек = Новый Структура("ПодписьИПечать, Пометка, ТекущийЯзык"); - ЗаполнитьЗначенияСвойств(СтруктураНастроек, НастройкаПечатнойФормы); - НастройкиСформированныхПечатныхФорм.Вставить(ПечатнаяФорма.Ключ, СтруктураНастроек); - НоваяНастройка = НастройкиПечатныхФорм.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяНастройка, НастройкаПечатнойФормы,,"ОфисныеДокументы"); - ОфисныеДокументы = Новый Соответствие; - ОфисныеДокументы.Вставить(ПечатнаяФорма.Ключ, ПечатнаяФорма.Значение); - НоваяНастройка.ОфисныеДокументы = ОбщегоНазначения.ЗначениеВСтрокуXML(ОфисныеДокументы); + Если Не ЭтоАдресВременногоХранилища(ПечатнаяФорма.Ключ) Тогда + Продолжить; КонецЕсли; + ЗаданныеИменаПечатныхФорм = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ИмяФайлаПечатнойФормы); + ПредставлениеПечатнойФормы = УправлениеПечатью.ИмяФайлаПечатнойФормыОбъекта(ПечатнаяФорма.Значение, ЗаданныеИменаПечатныхФорм, НастройкаПечатнойФормы.Название); + ДобавитьПечатнуюФорму(ТаблицаПечатныхФорм, НастройкаПечатнойФормы, ПечатнаяФорма, ПредставлениеПечатнойФормы); + СтруктураНастроек = Новый Структура("ПодписьИПечать, Пометка, ТекущийЯзык"); + ЗаполнитьЗначенияСвойств(СтруктураНастроек, НастройкаПечатнойФормы); + НастройкиСформированныхПечатныхФорм.Вставить(ПечатнаяФорма.Ключ, СтруктураНастроек); + НоваяНастройка = НастройкиПечатныхФорм.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяНастройка, НастройкаПечатнойФормы,,"ОфисныеДокументы"); + ОфисныеДокументы = Новый Соответствие; + ОфисныеДокументы.Вставить(ПечатнаяФорма.Ключ, ПечатнаяФорма.Значение); + НоваяНастройка.ОфисныеДокументы = ОбщегоНазначения.ЗначениеВСтрокуXML(ОфисныеДокументы); КонецЦикла; КонецЦикла; @@ -93,8 +94,28 @@ Элементы.ГруппаДополнительнаяИнформация.Видимость = Не ПустаяСтрока(Элементы.ДополнительнаяИнформация.Заголовок); Элементы.КартинкаИнформации.Видимость = Элементы.КартинкаИнформации.Картинка.Вид <> ВидКартинки.Пустая; - УправлениеПечатью.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + СохранениеВПрисоединенныеФайлы = Ложь; + Если ОбъектыПечати.Количество() > 0 И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + СохранениеВПрисоединенныеФайлы = МодульРаботаСФайлами.КОбъектуМожноПрисоединятьФайлы(ОбъектыПечати[0].Значение); + КонецЕсли; + Элементы.СохранитьВПрисоединенныеФайлы.Видимость = СохранениеВПрисоединенныеФайлы; + Элементы.КнопкаСохранитьВПрисоединенныеФайлыВсеДействия.Видимость = СохранениеВПрисоединенныеФайлы; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда + МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность"); + МодульУправлениеПечатьюМультиязычность.ЗаполнитьПодменюЯзык(ЭтотОбъект, , ДоступныеЯзыкиПечатныхФорм()); + КонецЕсли; + Элементы.ФлажокПодписьИПечать.Видимость = ЕстьПодписиИПечатиДляОбъектовПечати(); + + ОбъединитьДокументы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", + "ОднимДокументом", Ложь) И Элементы.ФлажокОбъединитьДокументы.Видимость; + ПодписьИПечать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", + "ПодписьИПечать", Ложь); + + УстановитьЗаголовокФормы(); + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Элементы.КоманднаяПанельЛеваяЧасть.Видимость = Ложь; Элементы.КоманднаяПанельПраваяЧасть.Видимость = Ложь; @@ -112,33 +133,17 @@ Элементы.ГруппаИнструкция.Видимость = Ложь; Элементы.Переместить(Элементы.Показать, Элементы.КоманднаяПанельЕще, Элементы.КнопкаСохранитьВсеДействия); Элементы.Показать.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю; - - Элементы.ПечатныеФормыУстановитьФлажки.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю; - Элементы.ПечатныеФормыСнятьФлажки.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю; - Элементы.Переместить(Элементы.ПечатныеФормыУстановитьФлажки, Элементы.КоманднаяПанельЕще); - Элементы.Переместить(Элементы.ПечатныеФормыСнятьФлажки, Элементы.КоманднаяПанельЕще); - + Элементы.Сохранить.Заголовок = НСтр("ru = 'На устройство...'"); + Элементы.КнопкаСохранитьВсеДействия.Заголовок = НСтр("ru = 'На устройство...'"); Элементы.ПерейтиКУправлениюМакетами.Видимость = Ложь; Иначе БольшеНеПоказывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", - "ВыводитьСразу", Истина); + "ВыводитьСразу", Ложь); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда - МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность"); - МодульУправлениеПечатьюМультиязычность.ЗаполнитьПодменюЯзык(ЭтотОбъект, , ДоступныеЯзыкиПечатныхФорм()); - КонецЕсли; + УправлениеПечатью.ПечатьДокументовПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); - Элементы.ФлажокПодписьИПечать.Видимость = ЕстьПодписиИПечатиДляОбъектовПечати(); - - ОбъединитьДокументы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", - "ОднимДокументом", Ложь) И Элементы.ФлажокОбъединитьДокументы.Видимость; - - ПодписьИПечать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПечатьДокументовOfficeOpen", - "ПодписьИПечать", Ложь); - - УстановитьЗаголовокФормы(); КонецПроцедуры &НаКлиенте @@ -251,7 +256,6 @@ ТребуетсяПереформирование = Истина; КонецПроцедуры - &НаКлиенте Процедура ОткрытьМакетДляРедактирования() @@ -285,13 +289,25 @@ КонецПроцедуры &НаКлиенте -Процедура Сохранить(Команда) +Процедура СохранитьНаКомпьютер(Команда) - Оповещение = Новый ОписаниеОповещения("ПриПодключенииРасширения", ЭтотОбъект); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение); + Оповещение = Новый ОписаниеОповещения("СохранитьНаКомпьютерПриПодключенииРасширения", ЭтотОбъект); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение); КонецПроцедуры +&НаКлиенте +Процедура СохранитьВПрисоединенныеФайлы(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати); + ПараметрыФормы.Вставить("РасширениеДляРаботыСФайламиПодключено", Ложь); + ПараметрыФормы.Вставить("ОграничениеФорматовСохранения", "docx"); + ПараметрыФормы.Вставить("Назначение", "ПрисоединенныеФайлы"); + ОткрытьФорму("ОбщаяФорма.СохранениеПечатнойФормы", ПараметрыФормы, ЭтотОбъект, "ПечатьДокументовOfficeOpen"); + +КонецПроцедуры + &НаКлиенте Процедура Отправить(Команда) ОтправитьПечатныеФормыПоПочте(); @@ -428,6 +444,8 @@ Элементы.ФлажокОбъединитьДокументы.Видимость = РежимМногихПечатныхФорм; Элементы.ПечатныеФормы.Видимость = РежимМногихПечатныхФорм Или ОбщегоНазначения.ЭтоМобильныйКлиент(); Элементы.ГруппаУправленияСпискомДокументов.Видимость = Элементы.ПечатныеФормы.Видимость; + Элементы.ГруппаУправлениеФлажкамиЕще.Видимость = Элементы.ПечатныеФормы.Видимость; + Элементы.ГруппаУправлениеСтрокамиЕще.Видимость = Элементы.ПечатныеФормы.Видимость; КонецПроцедуры @@ -893,7 +911,7 @@ МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); МодульРаботаСФайламиСлужебныйКлиент.ОповеститьОбИзмененииФайлов(ЗаписанныеОбъекты); - ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение завершено'"), , , БиблиотекаКартинок.ДиалогИнформация); + ПоказатьОповещениеПользователя(НСтр("ru = 'Печатная форма сохранена'"), , , БиблиотекаКартинок.ДиалогИнформация); КонецЕсли; КонецЕсли; @@ -902,15 +920,12 @@ Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда Если ВыбранноеЗначение.Подписать Тогда - ФайлыВоВременномХранилище = ПолучитьФайлыПодписейИПоместитьВАрхив(Результат, ВыбранноеЗначение, ПараметрыВыбора.СоответствиеФайловОбъектамПечати); + ФайлыВоВременномХранилище = ПолучитьФайлыПодписейИПоместитьВАрхив(Результат, ВыбранноеЗначение, + ПараметрыВыбора.СоответствиеФайловОбъектамПечати); ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение, ФайлыВоВременномХранилище); ОповещениеОЗакрытииФормы = Неопределено; Иначе - Если ВыбранноеЗначение.Свойство("СписокВложений") Тогда - Вложения = ВыбранноеЗначение.СписокВложений; - Иначе - Вложения = Неопределено; - КонецЕсли; + Вложения = ?(ВыбранноеЗначение.Свойство("СписокВложений"), ВыбранноеЗначение.СписокВложений, Неопределено); ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение, Вложения); ОповещениеОЗакрытииФормы = Неопределено; КонецЕсли; @@ -995,15 +1010,14 @@ УправлениеПечатьюКлиентПереопределяемый.ПечатьДокументовОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); КонецПроцедуры -// Ветка процедуры после установки расширения для работы с 1С:Предприятием. &НаКлиенте -Процедура ПродолжитьПечатьПослеУстановкиРасширенияРаботыСФайлами(РасширениеПодключено, ДополнительныеПараметры) Экспорт +Процедура ПродолжитьПечатьПослеУстановкиРасширения1СПредприятия(РасширениеПодключено, ДополнительныеПараметры) Экспорт #Если ВебКлиент Тогда - Текст = НСтр("ru = 'Распечатайте документ при помощи приложения, предназначенного для работы с данным файлом.'"); - ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьОтмеченныеПечатныеФормы", ЭтотОбъект); - ПоказатьПредупреждение(ОписаниеОповещения, Текст,,НСтр("ru = 'Печать документа из веб-клиента'")); - Возврат; + Текст = НСтр("ru = 'Распечатайте документ при помощи приложения, предназначенного для работы с данным файлом.'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьОтмеченныеПечатныеФормы", ЭтотОбъект); + ПоказатьПредупреждение(ОписаниеОповещения, Текст,,НСтр("ru = 'Печать документа из веб-клиента'")); + Возврат; #КонецЕсли Если Не РасширениеПодключено Тогда @@ -1022,8 +1036,7 @@ #Иначе ПечатьПослеПолученияИмениВременногоКаталога("", МассивПечатныхФорм); #КонецЕсли - - + КонецПроцедуры &НаКлиенте @@ -1141,7 +1154,7 @@ КонецФункции &НаКлиенте -Процедура ПриПодключенииРасширения(РасширениеПодключено, ДополнительныеПараметры) Экспорт +Процедура СохранитьНаКомпьютерПриПодключенииРасширения(РасширениеПодключено, ДополнительныеПараметры) Экспорт РасширениеДляРаботыСФайламиПодключено = РасширениеПодключено; @@ -1149,6 +1162,7 @@ ПараметрыФормы.Вставить("ОбъектыПечати", ОбъектыПечати); ПараметрыФормы.Вставить("РасширениеДляРаботыСФайламиПодключено", РасширениеПодключено); ПараметрыФормы.Вставить("ОграничениеФорматовСохранения", "docx"); + ПараметрыФормы.Вставить("Назначение", "Компьютер"); ОткрытьФорму("ОбщаяФорма.СохранениеПечатнойФормы", ПараметрыФормы, ЭтотОбъект, "ПечатьДокументовOfficeOpen"); КонецПроцедуры @@ -1180,7 +1194,6 @@ КонецЕсли; ПараметрыФормы.Вставить("ОграничениеФорматовСохранения", "docx"); - ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект, "ПечатьДокументовOfficeOpen"); КонецПроцедуры @@ -1496,8 +1509,9 @@ #Если Не ВебКлиент Тогда Если ЗначениеЗаполнено(ИмяКаталога) Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьПапкуСохранения", ЭтотОбъект, ИмяКаталога); - ПоказатьОповещениеПользователя(НСтр("ru = 'Сохранение успешно завершено'"), ОписаниеОповещения, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в папку %1'"), ИмяКаталога), БиблиотекаКартинок.ДиалогИнформация); + ПоказатьОповещениеПользователя(НСтр("ru = 'Печатная форма сохранена'"), ОписаниеОповещения, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'в каталог %1'"), ИмяКаталога), + БиблиотекаКартинок.ДиалогИнформация); КонецЕсли; #КонецЕсли @@ -1545,9 +1559,9 @@ &НаКлиенте Процедура ПечатьЗавершение(МассивПечатныхФорм) - Обработчик = Новый ОписаниеОповещения("ПродолжитьПечатьПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, МассивПечатныхФорм); + Обработчик = Новый ОписаниеОповещения("ПродолжитьПечатьПослеУстановкиРасширения1СПредприятия", ЭтотОбъект, МассивПечатныхФорм); ТекстСообщения = НСтр("ru = 'Для продолжения установите расширение для работы с 1С:Предприятием.'"); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Обработчик, ТекстСообщения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Обработчик, ТекстСообщения); КонецПроцедуры &НаКлиенте @@ -1567,6 +1581,7 @@ ОписаниеФайла.Вставить("ЭтоОфисныйДокумент", Истина); Возврат ОписаниеФайла; КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Help/ru.html b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Help/ru.html index a9fa3cb01..eebc7a137 100644 --- a/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Help/ru.html +++ b/SSL/src/CommonForms/ПоддерживаемыеКлиентскиеПриложения/Help/ru.html @@ -10,13 +10,13 @@
        • Может быть 32-х разрядная версия внешней компоненты и 64-х разрядная;
        • На процессоре с архитектурой x86, x86-64, ARM, ARM64, Е2К:
          • x86 - это 32-х разрядная архитектура, которая используется процессами Intel и AMD.
          • -
          • x86-64 - более современная архитектура, позволяет запускать 64-х разрядные приложения; 
          • +
          • x86-64 - более современная архитектура, позволяет запускать 64-х разрядные приложения;
          • ARM - популярная архитектура, разработанная для Android. Устройство на ARM работают под управлением 32-х разрядной ОС;
          • ARM64 - новый тип процессоров, поддерживающий 64-х разрядные ОС;
          • -
          • E2K (E2Kv4 и выше) - российский процессор Эльбрус 2000, который работает под ОС Linux Эльбрус: 7.0, 7.1.

          Для получения подробной информации о том, Как запустить - определенное клиентское приложение, см. инструкцию по разработке на портале 1С:ИТС.

          +
        • E2K (E2Kv4 и выше) - российский процессор Эльбрус 2000, который работает под ОС Linux Эльбрус: 7.0, 7.1.
        • Для получения подробной информации о том, Как запустить + определенное клиентское приложение, см. инструкцию по разработке на портале 1С:ИТС.



          \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступа/Help/ru.html b/SSL/src/CommonForms/ПраваДоступа/Help/ru.html index 77dd24f75..1661014f9 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Help/ru.html +++ b/SSL/src/CommonForms/ПраваДоступа/Help/ru.html @@ -2,14 +2,14 @@

          Предназначен для просмотра и настройки состава групп доступа пользователя (внешнего пользователя).

          Открывается по команде Права доступа на панели навигации пользователя (внешнего пользователя).

          Каждому пользователю, посредством профилей и групп доступа, может быть назначена одна или несколько ролей, которые в совокупности образуют его персональные настройки прав доступа.

          -

          Группа доступа определяет совокупность действий с данными приложения, которые могут выполнять участники этой группы. Как правило, группы доступа соответствуют различным должностным обязанностям (или видам деятельности) пользователей приложения. Пользователь может входить одновременно в одну или несколько групп доступа, которые в совокупности образуют его персональные настройки прав доступа.

          +

          Группа доступа определяет совокупность действий с данными приложения, которые могут выполнять участники этой группы. Как правило, группы доступа соответствуют различным должностным обязанностям (или видам деятельности) пользователей приложения. Пользователь может входить одновременно в одну или несколько групп доступа, которые в совокупности образуют его персональные настройки прав доступа.

          Настройку могут выполнять:

          -
          • администраторы - для всех пользователей приложения; +
            • администраторы - для всех пользователей приложения;
            • ответственные за списки пользователей и внешних пользователей - для всех пользователей из соответствующего списка, кроме групп доступа с административных правами.
            • ответственные за состав участников группы доступа - только для пользователей своей группы доступа.

            Список состоит из вкладок:

            -
            • Группы доступа - команды для настройки прав доступа конкретного пользователя и список групп доступа, в которые включен данный пользователь. +
              • Группы доступа - команды для настройки прав доступа конкретного пользователя и список групп доступа, в которые включен данный пользователь.
                • В списке выводятся сведения:
                  • Наименование - наименование группы доступа;
                  • @@ -18,13 +18,13 @@
                  • Ответственный - ответственный пользователь;
                  • Описание - в нижней части списка выводится описание выделенной в списке группы доступа.
              • -
              • Разрешенные действия (роли) - просмотр совокупности разрешенных действий пользователя (внешнего пользователя). Список ролей, назначенных пользователю, складывается из всех ролей, входящих в состав групп доступа, в которые включен пользователь.
                • Перечень ролей можно просмотреть в алфавитном порядке или По подсистемам, нажав на соответствующую кнопку.

              Настройка прав доступа

              -
              • С помощью кнопки Включить в группу можно добавить пользователя в состав участников любой из имеющихся групп доступа. +
              • Разрешенные действия (роли) - просмотр совокупности разрешенных действий пользователя (внешнего пользователя). Список ролей, назначенных пользователю, складывается из всех ролей, входящих в состав групп доступа, в которые включен пользователь.
                • Перечень ролей можно просмотреть в алфавитном порядке или По подсистемам, нажав на соответствующую кнопку.

              Настройка прав доступа

              +
              • С помощью кнопки Включить в группу можно добавить пользователя в состав участников любой из имеющихся групп доступа.
                • Выделите одну из групп доступа в списке, нажмите кнопку Выбрать. Также можно дважды щелкнуть левой кнопкой мыши по нужной группе.
              • С помощью кнопки Исключить из группы можно удалить выделенную группу доступа из списка групп доступа пользователя.
              • -
              • С помощью кнопки Изменить группу можно изменить настройки выбранной группы доступа.

              Отчет по правам доступа

              -
              • Для того чтобы увидеть полный список прав доступа пользователя, в том числе полный список объектов приложения и прав на них, настроенных для данного пользователя (группы пользователей), можно воспользоваться аналитическим отчетом Отчет по правам доступа пользователя. +
              • С помощью кнопки Изменить группу можно изменить настройки выбранной группы доступа.

              Отчет по правам доступа

              +
              • Для того чтобы увидеть полный список прав доступа пользователя, в том числе полный список объектов приложения и прав на них, настроенных для данного пользователя (группы пользователей), можно воспользоваться аналитическим отчетом Отчет по правам доступа пользователя.
              • Нажмите Отчет по правам доступа.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index 89edb3ef6..70d634067 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -250,8 +250,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаКлиенте Процедура ГруппировкаРолейПоПодсистемам(Команда) @@ -263,6 +262,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаКлиенте @@ -624,8 +625,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей. +#Область ДляРаботыИнтерфейсаРолей &НаСервере Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) @@ -655,3 +655,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html index 5fd4c5413..3b0f3c9e8 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html @@ -1,28 +1,28 @@

              Предназначена для упрощенного режима настройки прав доступа.

              -

              Настройка прав доступа пользователей осуществляется с помощью профилей. Профиль определяет некоторую совокупность действий с данными приложения, которые может выполнять пользователь. Как правило, профили соответствуют различным должностным обязанностям (или видам деятельности) пользователей приложения. Пользователю могут быть назначены одновременно несколько профилей, которые в совокупности образуют его персональные настройки прав доступа.

              -

              Для настройки прав доступа пользователя (внешнего пользователя) воспользуйтесь командой Права доступа панели навигации.

              +

              Настройка прав доступа пользователей осуществляется с помощью профилей. Профиль определяет некоторую совокупность действий с данными приложения, которые может выполнять пользователь. Как правило, профили соответствуют различным должностным обязанностям (или видам деятельности) пользователей приложения. Пользователю могут быть назначены одновременно несколько профилей, которые в совокупности образуют его персональные настройки прав доступа.

              +

              Для настройки прав доступа пользователя (внешнего пользователя) воспользуйтесь командой Права доступа панели навигации.

              Профили

              -
              • В списке Профили необходимо с помощью флажков отметить те профили, которые требуются для работы пользователя в приложении. +
                • В списке Профили необходимо с помощью флажков отметить те профили, которые требуются для работы пользователя в приложении.
                • -
                • Профиль, как правило, объединяет несколько ролей. При назначении профиля пользователю назначаются все роли, заданные в этом профиле. Например, в профиль Администратор входит роль Полные права, которая предоставляет неограниченный доступ ко всем данным. Права доступа могут настраивать только администраторы приложения (пользователи, у которых отмечен профиль Администратор). +
                • Профиль, как правило, объединяет несколько ролей. При назначении профиля пользователю назначаются все роли, заданные в этом профиле. Например, в профиль Администратор входит роль Полные права, которая предоставляет неограниченный доступ ко всем данным. Права доступа могут настраивать только администраторы приложения (пользователи, у которых отмечен профиль Администратор).
                • Различают основные и дополнительные профили: -
                  • Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в приложении определенного участка работ. +
                    • Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в приложении определенного участка работ.
                    • С помощью дополнительных профилей пользователя могут быть выданы вспомогательные права, дополнительно к основным. Виды доступа
                  • -
                  • Список выводится справа от списка профилей, если включен флажок Ограничивать доступ на уровне записей в разделе Администрирование - Настройки пользователей и прав. В списке с помощью поля Вид доступа можно задать границы области данных, с которой пользователю разрешено работать. +
                  • Список выводится справа от списка профилей, если включен флажок Ограничивать доступ на уровне записей в разделе Администрирование - Настройки пользователей и прав. В списке с помощью поля Вид доступа можно задать границы области данных, с которой пользователю разрешено работать.
                  • -
                  • Вид доступа - это некоторое правило, по которому "разрешается" доступ к данным приложения. Например, с помощью вида доступа Организации можно разрешить пользователю работать только с документами по конкретным организациям, или наоборот, скрыть от него документы некоторых организаций. +
                  • Вид доступа - это некоторое правило, по которому "разрешается" доступ к данным приложения. Например, с помощью вида доступа Организации можно разрешить пользователю работать только с документами по конкретным организациям, или наоборот, скрыть от него документы некоторых организаций.
                    • Состав видов доступа, перечисленных в списке, зависит от профиля, выбранного в списке слева. Кроме того, профиль также определяет, как именно действует настройка вида доступа: она разрешает просмотр или также включает возможность редактирования документов. Например, в случае если профиль включает в себя роль для чтения документов Поступление товаров, то пользователь получает возможность просматривать документы по заданным организациям. Если же в профиле содержится роль добавления и изменения, то появляется возможность редактировать такие документы.
                  • Для каждого вида доступа заполните Значения доступа. Выберите из списка значения Все запрещены, Все разрешены, или укажите исключения.
                    • Каждый вид доступа настраивается одним из двух способов:
                      • Укажите список разрешенных значений - такой способ настройки подходит втех случаях, когда стоит задача предоставить доступ только к определенной области данных.
                      • Укажите список тех значений, которые не должны быть доступны. -
                        • Такой способ настройки удобен тогда, когда требуется закрыть доступ к заранее известной области данных, а для всех новых значений, вводимых в приложение, должны по умолчанию действовать разрешительные правила. +
                          • Такой способ настройки удобен тогда, когда требуется закрыть доступ к заранее известной области данных, а для всех новых значений, вводимых в приложение, должны по умолчанию действовать разрешительные правила.
                          • -
                          • Например, если с помощью вида доступа Организации задано правило, запрещающее работать с документами по организации "Далекая перспектива", то на новую организацию "Новые технологии", введенную в приложение позднее, эти ограничения распространяться не будут. +
                          • Например, если с помощью вида доступа Организации задано правило, запрещающее работать с документами по организации "Далекая перспектива", то на новую организацию "Новые технологии", введенную в приложение позднее, эти ограничения распространяться не будут.
                          • При этом следует учитывать, что разрешающие настройки имеют приоритет над запрещающими. Если в приведенном выше примере пользователю будет разрешен ввод документов по организации "Далекая перспектива" в какой-либо другой группе с этим же профилем, то в итоге он получит доступ ко всем документам по этой организации.
                      • Для указания исключений нажмите Добавить и выберите из списка значений нужные. @@ -32,17 +32,17 @@
                        • Эти действия могут быть выполнены не только администратором, но и любым пользователем с соответствующими правами на редактирование списка партнеров.

                  Вид доступа "Пользователи"

                  • Для некоторых профилей предусмотрена настройка прав с помощью вида доступа Пользователи (Вид доступа Внешние пользователи для внешних пользователей).
                  • -
                  • Настройка может учитываться только в тех документах (и других объектах приложения), в полях которых могут быть указаны пользователи, получающие доступ к этим документам (Ответственный, Автор, Исполнитель и т.п.). +
                  • Настройка может учитываться только в тех документах (и других объектах приложения), в полях которых могут быть указаны пользователи, получающие доступ к этим документам (Ответственный, Автор, Исполнитель и т.п.).
                  • Для того чтобы дать доступ ко всем ограниченным данным, с которыми работает тот или иной пользователь, необходимо включить его в список разрешенных значений для вида доступа Пользователи.
                  • -
                  • Например, если доступ к документам поступления товаров и услуг зависит от того, кто указан в поле Ответственный, тогда пользователь сможет записывать документы, у которых Ответственный совпадает с пользователем, или добавлен в список разрешенных для вида доступа Пользователи. +
                  • Например, если доступ к документам поступления товаров и услуг зависит от того, кто указан в поле Ответственный, тогда пользователь сможет записывать документы, у которых Ответственный совпадает с пользователем, или добавлен в список разрешенных для вида доступа Пользователи.
                  • Аналогичным образом действует запрещающая настройка.

                  Отчет по правам доступа

                  -
                  • Для того чтобы увидеть полный список прав доступа пользователя, в том числе полный список объектов приложения и прав на них, настроенных для данного пользователя (группы пользователей), можно воспользоваться аналитическим отчетом Отчет по правам доступа пользователя. +
                    • Для того чтобы увидеть полный список прав доступа пользователя, в том числе полный список объектов приложения и прав на них, настроенных для данного пользователя (группы пользователей), можно воспользоваться аналитическим отчетом Отчет по правам доступа пользователя.
                    • Нажмите Отчет по правам доступа.

                    Просмотр неиспользуемых видов доступа

                    • -
                      С помощью команды Еще - Показывать неиспользуемые виды доступа можно просмотреть те виды доступа, которые не используются в данный момент (например, данная возможность отключена в приложении).

                    См. также:

                    +
                    С помощью команды Еще - Показывать неиспользуемые виды доступа можно просмотреть те виды доступа, которые не используются в данный момент (например, данная возможность отключена в приложении).

                  См. также:

                  \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index c8d271968..1e78d053d 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -255,8 +255,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ВсеРазрешеныПредставление таблицы формы ВидыДоступа. +#Область ОбработчикиСобытийЭлементаВсеРазрешеныПредставлениеТаблицыФормыВидыДоступа &НаКлиенте Процедура ВидыДоступаВсеРазрешеныПредставлениеПриИзменении(Элемент) @@ -276,6 +275,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа &НаКлиенте @@ -1016,4 +1017,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Help/ru.html b/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Help/ru.html index 10445607b..ff64d06dc 100644 --- a/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Help/ru.html +++ b/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Help/ru.html @@ -1,12 +1,12 @@ Предназначена для продления сроков действия (усовершенствования) электронных подписей вручную.
                  -
                  В приложении предусмотрено использование электронных подписей для длительного хранения документов. Выбрать тип подписи можно в разделе Администрирование - Общие настройки - Электронная подпись.
                  +
                  В приложении предусмотрено использование электронных подписей для длительного хранения документов. Выбрать тип подписи можно в разделе Администрирование - Общие настройки - Электронная подпись.
                  Продление сроков действия (усовершенствование) выполняется для выбранного файла или в списке - указывается подписанный объект (количество подписанных объектов).
                  Обычная электронная подпись (CAdES-BES) имеет ограниченный срок действия, он зависит от срока действия сертификата электронной подписи, который длится около года.
                  -
                  Для долговременного хранения в электронную подпись вносится метка доверенного времени (подпись CAdES-T) или архивная метка времени (подпись CAdES-A). 
                  -
                  Если в приложении применяются подписи с доверенной меткой времени, то можно продлить (усовершенствовать) выбранную подпись - добавить доверенную метку времени. 
                  +
                  Для долговременного хранения в электронную подпись вносится метка доверенного времени (подпись CAdES-T) или архивная метка времени (подпись CAdES-A).
                  +
                  Если в приложении применяются подписи с доверенной меткой времени, то можно продлить (усовершенствовать) выбранную подпись - добавить доверенную метку времени.
                  Приложение предлагает выбрать способы усовершенствования подписи:
                  • Усовершенствовать до - Выберите способ усовершенствования (тип подписи) из списка с помощью переключателя.
                  • diff --git a/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Module.bsl b/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Module.bsl index 48962d352..6c8dc2974 100644 --- a/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Module.bsl +++ b/SSL/src/CommonForms/ПродлениеСрокаДействияЭлектронныхПодписей/Module.bsl @@ -278,12 +278,16 @@ &НаСервере Процедура ОпределитьТипПодписейОбъекта() - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи( - ПодписанныйОбъект, ?(ЗначениеЗаполнено(ПорядковыйНомер), ПорядковыйНомер, Неопределено)); - - ЕстьБазоваяПодпись = Ложь; ЕстьПодписьСМеткойВремени = Ложь; ЕстьАрхивнаяПодпись = Ложь; + ПараметрыПолученияПодписей = ЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ПорядковыйНомер = ?(ЗначениеЗаполнено(ПорядковыйНомер), ПорядковыйНомер, Неопределено); - Для Каждого ТекущаяПодпись Из УстановленныеПодписи Цикл + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(ПодписанныйОбъект, ПараметрыПолученияПодписей); + + ЕстьБазоваяПодпись = Ложь; + ЕстьПодписьСМеткойВремени = Ложь; + ЕстьАрхивнаяПодпись = Ложь; + + Для Каждого ТекущаяПодпись Из ПодписиОбъекта Цикл Если Не ТекущаяПодпись.ПодписьВерна Тогда Продолжить; @@ -338,7 +342,7 @@ Параметры.ТипПодписи = Перечисления.ТипыПодписиКриптографии.АрхивнаяCAdESAv3; Элементы.ТипПодписи.Видимость = Ложь; КонецЕсли; - + КонецПроцедуры #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/РазблокированиеРеквизитов/Form.form b/SSL/src/CommonForms/РазблокированиеРеквизитов/Form.form index bd39b975a..5d320cacc 100644 --- a/SSL/src/CommonForms/РазблокированиеРеквизитов/Form.form +++ b/SSL/src/CommonForms/РазблокированиеРеквизитов/Form.form @@ -475,7 +475,7 @@ 2 ru - Проверить использование объекта в базе данных и убедится, что не будет рассогласования данных при изменении реквизитов + Проверить использование объекта в базе данных и убедиться, что не будет рассогласования данных при изменении реквизитов true diff --git a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form index 8f926511a..b4866ac95 100644 --- a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form +++ b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Form.form @@ -281,7 +281,7 @@ ТехническиеПодробностиКлиент - 119 + 128 ТекстОшибкиКлиент 9 @@ -346,7 +346,7 @@ ТехническиеПодробностиКлиентРасширеннаяПодсказка - 120 + 129 Label true true @@ -748,7 +748,7 @@ ТехническиеПодробностиСервер - 121 + 126 ТекстОшибкиСервер 37 @@ -813,7 +813,7 @@ ТехническиеПодробностиСерверРасширеннаяПодсказка - 122 + 127 Label true true @@ -1084,7 +1084,7 @@ ТехническиеПодробности - 123 + 124 ТекстОшибки 83 @@ -1150,7 +1150,7 @@ ТехническиеПодробностиРасширеннаяПодсказка - 124 + 125 Label true true @@ -1313,67 +1313,22 @@ ГруппаПодвал 60 - Помощь - 62 - - ИнформацияДляПоддержки - 67 - - <key>ru</key> - <value>При возникновении затруднений ознакомьтесь со списком <link %1>типичных проблем при работе с приложениями электронной подписи и их решений</>. - -В иных случаях обратитесь в службу поддержки фирмы "1С", предоставив <link %2>техническую информацию о возникшей проблеме</>.</value> - - true - true - - true - - - ИнформацияДляПоддержкиРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - - ИнформацияДляПоддержкиКонтекстноеМеню - 68 - true - - true - Label - true - true - - - URLProcessing - ИнформацияДляПоддержкиОбработкаНавигационнойСсылки - - Left - - + ГруппаТребуетсяПомощь + 130 - ГруппаСкачатьТехническуюИнформацию - 114 - - СкачатьТехническуюИнформацию - 104 - - <key>ru</key> - <value>Скачать техническую информацию</value> - + ГруппаОбращенияВТехническуюПоддержку + 132 + + ОписаниеОбращенияВПоддержку + 134 true true true - СкачатьТехническуюИнформациюРасширеннаяПодсказка - 105 + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 136 Label true true @@ -1381,10 +1336,78 @@ Left - UsualButton - Form.Command.СкачатьТехническуюИнформацию + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 135 + true + + Label + true + true + + Left + + + + ВопросВПоддержку + 137 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку Normal - Picture + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 139 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto true true UserCmds @@ -1393,108 +1416,6 @@ Auto - - ГруппаФормируетсяТехническаяИнформация - 106 - - ДекорацияКартинкаФормируетсяТехническаяИнформация - 108 - - <key>ru</key> - <value>Декорация картинка формируется техническая информация</value> - - true - true - - true - - - ДекорацияКартинкаФормируетсяТехническаяИнформацияРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - ДекорацияКартинкаФормируетсяТехническаяИнформацияКонтекстноеМеню - 109 - true - - true - true - - - CommonPicture.ДлительнаяОперация16 - - AsFileRef - - - - ДекорацияНадписьФормируетсяТехническаяИнформация - 111 - - <key>ru</key> - <value>Формируется техническая информация...</value> - - true - true - - true - - - ДекорацияНадписьФормируетсяТехническаяИнформацияРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - ДекорацияНадписьФормируетсяТехническаяИнформацияКонтекстноеМеню - 112 - true - - Label - true - true - - Left - - - true - - true - - - <key>ru</key> - <value>Формируется техническая информация</value> - - - ГруппаФормируетсяТехническаяИнформацияРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - WeakSeparation - true - true - Auto - Auto - - true true @@ -1502,11 +1423,11 @@ <key>ru</key> - <value>Скачать техническую информацию</value> + <value>Обращения в техническую поддержку</value> - ГруппаСкачатьТехническуюИнформациюРасширеннаяПодсказка - 115 + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 133 Label true true @@ -1516,9 +1437,8 @@ UsualGroup - AlwaysHorizontal + Vertical Auto - WeakSeparation true true Auto @@ -1534,9 +1454,10 @@ ru Требуется помощь? + Center - ПомощьРасширеннаяПодсказка - 63 + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 131 Label true true @@ -1709,17 +1630,12 @@ Left true - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере 55 LockOwner - true true Vertical true @@ -1879,17 +1795,6 @@ true - - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора - 11 - - - true - - - true - - ПерейтиКНастройкеПрограмм @@ -1931,10 +1836,10 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>СкачатьТехническуюИнформацию</name> + <name>ИнформацияДляОтправкиВПоддержку</name> <title> <key>ru</key> - <value>Скачать техническую информацию</value> + <value>Информация для отправки в поддержку</value> 3 @@ -1944,9 +1849,37 @@ true + + CommonPicture.Скачать + - СкачатьТехническуюИнформацию + ИнформацияДляОтправкиВПоддержку + + + Auto + Auto + + + ВопросВПоддержку + + <key>ru</key> + <value>Вопрос в поддержку</value> + + 4 + + ru + Вопрос в поддержку + + + true + + + CommonPicture.ОтправитьЭлектронноеПисьмо + + + + ВопросВПоддержку Auto diff --git a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl index 8310435b8..ad56d92fb 100644 --- a/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl +++ b/SSL/src/CommonForms/РасширенноеПредставлениеОшибки/Module.bsl @@ -17,12 +17,6 @@ ОшибкаПроверкиПодписи = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, "ДанныеПодписи", Ложь) = Истина; КонецЕсли; - Если ЗначениеЗаполнено(Параметры.ИнформацияДляПоддержки) Тогда - Элементы.ИнформацияДляПоддержки.Заголовок = Параметры.ИнформацияДляПоддержки; - Иначе - Элементы.ИнформацияДляПоддержки.Заголовок = ЭлектроннаяПодписьСлужебный.ЗаголовокИнформацииДляПоддержки(); - КонецЕсли; - ЭлектроннаяПодписьСлужебный.УстановитьЗаголовокОшибки(ЭтотОбъект, Параметры.ЗаголовокПредупреждения); @@ -49,7 +43,6 @@ ВидимостьСсылкиНаИнструкцию = НавигационнаяСсылка <> ""; Если Параметры.ПоказатьТребуетсяПомощь Тогда - Элементы.Помощь.Видимость = Параметры.ПоказатьИнструкцию; Элементы.ФормаПерейтиКНастройкеПрограмм.Видимость = Параметры.ПоказатьПереходКНастройкеПрограмм; Элементы.ФормаУстановитьРасширение.Видимость = Параметры.ПоказатьУстановкуРасширения; ОписаниеОшибки = Параметры.ОписаниеОшибки; @@ -67,16 +60,24 @@ Элементы.ДополнительнаяСсылка.Видимость = Ложь; КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - -#Если Не МобильноеПриложениеКлиент И Не МобильныйКлиент Тогда - Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора <> Неопределено Тогда - ПодключитьОбработчикОжидания("ДополнитьРешениеКлассификатораОшибокПодробностями", 0.1, Истина); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Если Параметры.ПоказатьИнструкцию Тогда + МодульОбращенияВТехническуюПоддержкуСлужебный.ПоказатьРазделТребуетсяПомощь(Элементы); + Иначе + МодульОбращенияВТехническуюПоддержкуСлужебный.СкрытьРазделТребуетсяПомощь(Элементы); + КонецЕсли; + + Иначе + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; КонецЕсли; -#КонецЕсли + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку КонецПроцедуры @@ -100,21 +101,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ИнформацияДляПоддержкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - Если НавигационнаяСсылка = "ТипичныеПроблемы" Тогда - ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - Иначе - - ВыгрузитьТехническуюИнформацию(Ложь); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Функция ТемаСообщения(Знач Ошибка) @@ -195,8 +181,16 @@ КонецПроцедуры &НаКлиенте -Процедура СкачатьТехническуюИнформацию(Команда) +Процедура ВопросВПоддержку(Команда) + ВыгрузитьТехническуюИнформацию(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) + + Элементы.ГруппаТребуетсяПомощь.Скрыть(); ВыгрузитьТехническуюИнформацию(Истина); КонецПроцедуры @@ -207,11 +201,6 @@ &НаКлиенте Процедура ВыгрузитьТехническуюИнформацию(ВыгрузитьАрхив) - - Если ВыгрузитьАрхив Тогда - Элементы.СкачатьТехническуюИнформацию.Доступность = Ложь; - Элементы.ГруппаФормируетсяТехническаяИнформация.Видимость = Истина; - КонецЕсли; ОписаниеФайлов = Новый Массив; ТекстОшибок = ""; @@ -255,7 +244,7 @@ Если ВыгрузитьАрхив Тогда ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( - ТекстОшибок, Неопределено, Новый ОписаниеОповещения("ПослеВыгрузкиТехническойИнформации", ЭтотОбъект), ОписаниеФайлов); + ТекстОшибок, Неопределено, , ОписаниеФайлов); Иначе ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( ТекстОшибок, Новый Структура("Тема, Сообщение", ТемаСообщения), , ОписаниеФайлов); @@ -263,41 +252,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПослеВыгрузкиТехническойИнформации(Результат, Контекст) Экспорт - - Элементы.СкачатьТехническуюИнформацию.Доступность = Истина; - Элементы.ГруппаФормируетсяТехническаяИнформация.Видимость = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура ДополнитьРешениеКлассификатораОшибокПодробностями() - - ОшибкаПоКлассификатору = Новый Структура; - ОшибкаПоКлассификатору.Вставить("ТекстОшибки", Элементы.ТекстОшибкиКлиент.Заголовок); - ОшибкаПоКлассификатору.Вставить("Причина", Элементы.ПричиныКлиентТекст.Заголовок); - ОшибкаПоКлассификатору.Вставить("Решение", Элементы.РешенияКлиентТекст.Заголовок); - - ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(ДополнительныеДанные); - ЭлектроннаяПодписьСлужебныйКлиент.ДополнитьРешениеКлассификатораОшибокПодробностями( - Новый ОписаниеОповещения("ПослеДополненияРешенияКлассификатораОшибок", ЭтотОбъект), - ОшибкаПоКлассификатору, ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, ДанныеДляДополнения); - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеДополненияРешенияКлассификатораОшибок(ОшибкаПоКлассификатору, Контекст) Экспорт - - Если Элементы.РешенияКлиентТекст.Заголовок <> ОшибкаПоКлассификатору.Решение Тогда - Элементы.РешенияКлиентТекст.Заголовок = ОшибкаПоКлассификатору.Решение; - КонецЕсли; - Если Элементы.ПричиныКлиентТекст.Заголовок <> ОшибкаПоКлассификатору.Причина Тогда - Элементы.ПричиныКлиентТекст.Заголовок = ОшибкаПоКлассификатору.Причина; - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура УстановитьЭлементы(ТекстОшибки, ДвеОшибки, МестоОшибки) @@ -345,13 +299,15 @@ "ДополнительныеДанныеПроверок" + СуффиксПроверок, Неопределено); // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата КонецЕсли; + ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(ДополнительныеДанные); Если ЗначениеЗаполнено(ЕстьПричинаИРешение) Тогда ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ПредставлениеОшибки(); Причина = ЕстьПричинаИРешение.Причина; // Строка ОшибкаПоКлассификатору.Причина = ФорматированнаяСтрока(Причина); ОшибкаПоКлассификатору.Решение = ФорматированнаяСтрока(ЕстьПричинаИРешение.Решение); Иначе - ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ТекстОшибки, МестоОшибки = "Сервер", ОшибкаПроверкиПодписи); + УказанСертификат = ЗначениеЗаполнено(ДанныеДляДополнения.ДанныеСертификата); + ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ТекстОшибки, МестоОшибки = "Сервер", ОшибкаПроверкиПодписи, УказанСертификат); КонецЕсли; ЭтоИзвестнаяОшибка = ОшибкаПоКлассификатору <> Неопределено; @@ -360,15 +316,8 @@ Если ЭтоИзвестнаяОшибка Тогда Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда - Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = Неопределено Тогда - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора(); - КонецЕсли; - ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(ДополнительныеДанные); - Дополнение = ЭлектроннаяПодписьСлужебный.ДополнитьРешениеКлассификатораОшибокПодробностями( - ОшибкаПоКлассификатору, ДанныеДляДополнения, - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, МестоОшибки); - ОшибкаПоКлассификатору = Дополнение.ОшибкаПоКлассификатору; - ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = Дополнение.ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте; + ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ДополнитьРешениеКлассификатораОшибокПодробностями( + ОшибкаПоКлассификатору, ДанныеДляДополнения, МестоОшибки); КонецЕсли; Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.Причина) Тогда diff --git a/SSL/src/CommonForms/РегиональныеНастройки/Form.form b/SSL/src/CommonForms/РегиональныеНастройки/Form.form index f8972672a..c94ca957a 100644 --- a/SSL/src/CommonForms/РегиональныеНастройки/Form.form +++ b/SSL/src/CommonForms/РегиональныеНастройки/Form.form @@ -283,260 +283,6 @@ ГруппаДополнительныеЯзыки 15 - - ГруппаДополнительныйЯзык1 - 17 - - ИспользоватьДополнительныйЯзык1 - 19 - - <key>ru</key> - <value>Использовать дополнительный язык1</value> - - true - true - - true - - - ИспользоватьДополнительныйЯзык1 - - None - - OnChange - ИспользоватьДополнительныйЯзык1ПриИзменении - - - ИспользоватьДополнительныйЯзык1РасширеннаяПодсказка - 21 - Label - true - true - - Left - - - - ИспользоватьДополнительныйЯзык1КонтекстноеМеню - 20 - true - - CheckBoxField - Enter - true - Left - true - - - - ДополнительныйЯзык1 - 22 - - <key>ru</key> - <value>Дополнительный язык1</value> - - true - true - - true - - - ДополнительныйЯзык1 - - None - - OnChange - ДополнительныйЯзык1ПриИзменении - - - ДополнительныйЯзык1РасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - ДополнительныйЯзык1КонтекстноеМеню - 23 - true - - InputField - Enter - true - Left - true - - - StartChoice - ДополнительныйЯзык1НачалоВыбора - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дополнительный язык 1</value> - - - ГруппаДополнительныйЯзык1РасширеннаяПодсказка - 18 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - ГруппаДополнительныйЯзык2 - 25 - - ИспользоватьДополнительныйЯзык2 - 27 - - <key>ru</key> - <value>Использовать дополнительный язык 2</value> - - true - true - - true - - - ИспользоватьДополнительныйЯзык2 - - None - - OnChange - ИспользоватьДополнительныйЯзык2ПриИзменении - - - ИспользоватьДополнительныйЯзык2РасширеннаяПодсказка - 29 - Label - true - true - - Left - - - - ИспользоватьДополнительныйЯзык2КонтекстноеМеню - 28 - true - - CheckBoxField - Enter - true - Left - true - - - - ДополнительныйЯзык2 - 30 - - <key>ru</key> - <value>Дополнительный язык1</value> - - true - true - - true - - - ДополнительныйЯзык2 - - None - - OnChange - ДополнительныйЯзык2ПриИзменении - - - ДополнительныйЯзык2РасширеннаяПодсказка - 32 - Label - true - true - - Left - - - - ДополнительныйЯзык2КонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - - StartChoice - ДополнительныйЯзык2НачалоВыбора - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дополнительный язык 2</value> - - - ГруппаДополнительныйЯзык2РасширеннаяПодсказка - 26 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - true true @@ -1037,10 +783,6 @@ ИспользоватьДополнительныйЯзык1 - - <key>ru</key> - <value>Использовать дополнительный язык1</value> - 2 Boolean @@ -1054,10 +796,6 @@ ДополнительныйЯзык1 - - <key>ru</key> - <value>Дополнительный язык1</value> - 3 String @@ -1090,10 +828,6 @@ ДополнительныйЯзык2 - - <key>ru</key> - <value>Дополнительный язык1</value> - 5 String @@ -1108,10 +842,6 @@ ИспользоватьДополнительныйЯзык2 - - <key>ru</key> - <value>Использовать дополнительный язык 2</value> - 6 Boolean @@ -1260,6 +990,22 @@ true + + КоличествоДополнительныхЯзыков + 16 + + Number + + 10 + + + + true + + + true + + ОК diff --git a/SSL/src/CommonForms/РегиональныеНастройки/Help/ru.html b/SSL/src/CommonForms/РегиональныеНастройки/Help/ru.html index dc6d684d3..37a520f9e 100644 --- a/SSL/src/CommonForms/РегиональныеНастройки/Help/ru.html +++ b/SSL/src/CommonForms/РегиональныеНастройки/Help/ru.html @@ -1,13 +1,13 @@ -<!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 class="">Предназначена для выбора региональных настроек при выборе других языков.  +<!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 class="">Предназначена для выбора региональных настроек при выборе других языков. <div>Открывается с помощью ссылки в разделе <b>Администрирование - Общие настройки</b>.</div> <div>В окне <b>Региональные Настройки</b> можно:</div> <div> -<ul><li>Выбрать <b>Часовой пояс приложения</b> - все операции в приложении будут выполняться во времени этого часового пояса;</li> +<ul><li>Выбрать <b>Часовой пояс приложения</b> - все операции в приложении будут выполняться во времени этого часового пояса;</li> <li>Посмотреть с помощью ссылки <b>Время текущего сеанса</b>;</li> <li>Настроить основной и дополнительный языки.</li></ul>При необходимости для формирования печатных форм можно добавить еще несколько языков.</div> <div>Приложение позволяет печатные формы на разных языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д. -<div>Для некоторых языков доступен выбор региональных настроек (указаны в скобках рядом с названием языка). Выбор региональных настроек влияет на вывод дат и чисел. Например, дата <b>24.12.2020</b> на языке "<b>французский</b>" будет выводиться <b>24/12/2020</b>, а на языке "<b>французский (Канада)</b>" - <b>2020-12-24</b>.</div> -<div>После выбора основного и дополнительных языков следует нажать кнопку <b>Изменить</b>. В приложении существуют предопределенные и поставляемые элементы. При смене языков с помощью кнопки <b>Изменить</b> вызывается механизм начального заполнения этих элементов. Через некоторое время приложение готово к работе.</div> +<div>Для некоторых языков доступен выбор региональных настроек (указаны в скобках рядом с названием языка). Выбор региональных настроек влияет на вывод дат и чисел. Например, дата <b>24.12.2020</b> на языке "<b>французский</b>" будет выводиться <b>24/12/2020</b>, а на языке "<b>французский (Канада)</b>" - <b>2020-12-24</b>.</div> +<div>После выбора основного и дополнительных языков следует нажать кнопку <b>Изменить</b>. В приложении существуют предопределенные и поставляемые элементы. При смене языков с помощью кнопки <b>Изменить</b> вызывается механизм начального заполнения этих элементов. Через некоторое время приложение готово к работе.</div> <div>Если строка на дополнительном языке отсутствует, то заполняется значением основного языка (реквизита).Мультиязычные строки хранятся в шапке объекта. Если строка на дополнительных языках отсутствует, то заполняется на основном языке.</div> <div>Если меняются местами основной и дополнительный языки, то значения также меняются местами:</div> <div> @@ -17,7 +17,7 @@ <ul><li>Предопределенные и поставляемые элементы перезаполняются;</li> <li>Старые значения (<b>ru</b>), введенные пользователем, сохраняются для нового языка (<b>pl</b>).</li></ul>При добавлении новых данных: если в интерактивном режиме данные на дополнительных языках не были введены, то реквизиты на дополнительных языках заполняются значениями основного языка.</div> <div>Отключить основной язык нельзя. При отключении доп. языков данные не очищаются.</div> -<div>На нескольких языках заполняются поля в следующих объектах приложения:</div> +<div>На нескольких языках заполняются поля в следующих объектах приложения:</div> <div> <ul><li><b>Виды контактной информации</b> (поле <b>Наименование</b>);</li> <li><b>Свойства</b> (поле <b>Наименование</b>);</li> diff --git a/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl b/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl index ea7c158b6..49106aecf 100644 --- a/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl +++ b/SSL/src/CommonForms/РегиональныеНастройки/Module.bsl @@ -52,21 +52,22 @@ УстановитьОсновнойЯзык(); Настройки = Новый Структура; - Настройки.Вставить("КодДополнительногоЯзыка1", ""); - Настройки.Вставить("КодДополнительногоЯзыка2", ""); Настройки.Вставить("МультиязычныеДанные", Истина); + КоличествоДополнительныхЯзыков = МультиязычностьСервер.КоличествоДополнительныхЯзыков(); + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + Настройки.Вставить("КодДополнительногоЯзыка" + Формат(ПорядковыйНомерЯзыка, "ЧГ=0"), ""); + КонецЦикла; + МультиязычностьПереопределяемый.ПриОпределенииНастроек(Настройки); КоличествоЯзыков = Метаданные.Языки.Количество(); - Если Не Настройки.МультиязычныеДанные ИЛИ КоличествоЯзыков = 1 Тогда + Если Не Настройки.МультиязычныеДанные Или КоличествоЯзыков = 1 Тогда Элементы.ГруппаДополнительныеЯзыки.Видимость = Ложь; Элементы.ГруппаОсновнойЯзык.Видимость = Ложь; Иначе - Если КоличествоЯзыков = 2 Тогда - Элементы.ГруппаДополнительныйЯзык2.Видимость = Ложь; - КонецЕсли; - ОтобразитьНастройкиДополнительныхЯзыков(Настройки, КоличествоЯзыков); + ОтобразитьНастройкиДополнительныхЯзыков(Настройки, КоличествоДополнительныхЯзыков); КонецЕсли; ДанныеДляИзмененияМультиязычныхРеквизитов = МультиязычностьСервер.ДанныеДляИзмененияМультиязычныхРеквизитов(); @@ -123,6 +124,52 @@ &НаСервере Процедура ОтобразитьНастройкиДополнительныхЯзыков(Настройки, КоличествоЯзыков) + МассивДобавляемыхРеквизитов = Новый Массив; + ОписаниеТипаРеквизитаСтрока = Новый ОписаниеТипов("Строка"); + ОписаниеТипаРеквизитаБулево = Новый ОписаниеТипов("Булево"); + + Для ПорядковыйНомерЯзыка = 1 По КоличествоЯзыков Цикл + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка), ОписаниеТипаРеквизитаСтрока)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка), ОписаниеТипаРеквизитаБулево)); + КонецЦикла; + + ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); + + Для ПорядковыйНомерЯзыка = 1 По КоличествоЯзыков Цикл + + ИмяРеквизита = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + ИмяЭлементаВключенияЯзыка = ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка); + + Группа = Элементы.Добавить(ИмяЭлементаГруппы(ПорядковыйНомерЯзыка), Тип("ГруппаФормы"), Элементы.РегиональныеНастройки); + Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Группа.Заголовок = ИмяЭлементаГруппы(ПорядковыйНомерЯзыка); + Группа.ОтображатьЗаголовок = Ложь; + Группа.РазрешитьИзменениеСостава = Ложь; + Группа.Отображение = ОтображениеОбычнойГруппы.Нет; + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + + ПолеИспользоватьДополнительныйЯзык = Элементы.Добавить(ИмяЭлементаВключенияЯзыка, + Тип("ПолеФормы"), Группа); + ПолеИспользоватьДополнительныйЯзык.Заголовок = ИмяЭлементаВключенияЯзыка; + ПолеИспользоватьДополнительныйЯзык.Вид = ВидПоляФормы.ПолеФлажка; + ПолеИспользоватьДополнительныйЯзык.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ПолеИспользоватьДополнительныйЯзык.ПутьКДанным = ИмяЭлементаВключенияЯзыка; + ПолеИспользоватьДополнительныйЯзык.УстановитьДействие("ПриИзменении", "Подключаемый_ИспользоватьДополнительныйЯзык_ПриИзменении"); + + ПолеДополнительныйЯзык = Элементы.Добавить(ИмяРеквизита, + Тип("ПолеФормы"), Группа); + ПолеДополнительныйЯзык.Заголовок = ИмяРеквизита; + ПолеДополнительныйЯзык.Вид = ВидПоляФормы.ПолеВвода; + ПолеДополнительныйЯзык.РежимВыбораИзСписка = Истина; + ПолеДополнительныйЯзык.ПутьКДанным = ИмяРеквизита; + ПолеДополнительныйЯзык.ПоложениеЗаголовка=ПоложениеЗаголовкаЭлементаФормы.Нет; + ПолеДополнительныйЯзык.АвтоОтметкаНезаполненного = Истина; + ПолеДополнительныйЯзык.ПодсказкаВвода= НСтр("ru = 'Дополнительный язык для ведения учета'"); + ПолеДополнительныйЯзык.УстановитьДействие("ПриИзменении", "Подключаемый_ДополнительныйЯзык_ПриИзменении"); + ПолеДополнительныйЯзык.УстановитьДействие("НачалоВыбора", "Подключаемый_ДополнительныйЯзык_НачалоВыбора"); + + КонецЦикла; + ДоступныеЯзыки = Новый Соответствие; Для каждого ЯзыкКонфигурации Из Метаданные.Языки Цикл Если СтрСравнить(ОсновнойЯзык, ЯзыкКонфигурации.КодЯзыка) = 0 Тогда @@ -131,80 +178,121 @@ ДоступныеЯзыки.Вставить(ЯзыкКонфигурации.КодЯзыка, Истина); КонецЦикла; - Язык1ПоУмолчанию = ""; - Если ЗначениеЗаполнено(Настройки.КодДополнительногоЯзыка1) Тогда - Если ДоступныеЯзыки.Получить(Настройки.КодДополнительногоЯзыка1) = Истина Тогда - Язык1ПоУмолчанию = Настройки.КодДополнительногоЯзыка1; - КонецЕсли; - КонецЕсли; - - Язык2ПоУмолчанию = ""; - Если КоличествоЯзыков > 2 И ЗначениеЗаполнено(Настройки.КодДополнительногоЯзыка2) Тогда - Если ДоступныеЯзыки.Получить(Настройки.КодДополнительногоЯзыка2) = Истина Тогда - Язык2ПоУмолчанию = Настройки.КодДополнительногоЯзыка2; - КонецЕсли; - КонецЕсли; - Для каждого Язык Из Метаданные.Языки Цикл - Если СтрСравнить(Язык.КодЯзыка, ОсновнойЯзык) <> 0 Тогда - Если ПустаяСтрока(Язык1ПоУмолчанию) Тогда - Язык1ПоУмолчанию = Язык.КодЯзыка; - ИначеЕсли ПустаяСтрока(Язык2ПоУмолчанию) И Язык.КодЯзыка <> Язык1ПоУмолчанию Тогда - Язык2ПоУмолчанию = Язык.КодЯзыка; - КонецЕсли; - КонецЕсли; - Элементы.ДополнительныйЯзык1.СписокВыбора.Добавить(Язык.КодЯзыка, Язык.Представление()); - Элементы.ДополнительныйЯзык2.СписокВыбора.Добавить(Язык.КодЯзыка, Язык.Представление()); + + Для ПорядковыйНомерЯзыка = 1 По КоличествоЯзыков Цикл + ИмяРеквизита = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + Элементы[ИмяРеквизита].СписокВыбора.Добавить(Язык.КодЯзыка, Язык.Представление()); + КонецЦикла; + КонецЦикла; - ИспользоватьДополнительныйЯзык1 = МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык(); - ИспользоватьДополнительныйЯзык2 = МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык(); - - ДополнительныйЯзык1 = МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы(); - ДополнительныйЯзык2 = МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы(); - - Элементы.ДополнительныйЯзык1.Доступность = ИспользоватьДополнительныйЯзык1; - Элементы.ДополнительныйЯзык2.Доступность = ИспользоватьДополнительныйЯзык2; - - Если ПустаяСтрока(ДополнительныйЯзык1) Тогда - ДополнительныйЯзык1 = Язык1ПоУмолчанию; - КонецЕсли; - - Если КоличествоЯзыков > 2 И ПустаяСтрока(ДополнительныйЯзык2) Тогда - ДополнительныйЯзык2 = Язык2ПоУмолчанию; - КонецЕсли; + Для ПорядковыйНомерЯзыка = 1 По КоличествоЯзыков Цикл + + ИмяЭлементаВключенияЯзыка = ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка); + ИмяРеквизита = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + + ЭтотОбъект[ИмяЭлементаВключенияЯзыка] = МультиязычностьСервер.ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка); + ЭтотОбъект[ИмяРеквизита] = МультиязычностьСервер.КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка); + + Элементы[ИмяРеквизита].Доступность = ЭтотОбъект[ИмяЭлементаВключенияЯзыка]; + + КонецЦикла; КонецПроцедуры +&НаКлиентеНаСервереБезКонтекста +Функция Разделитель() + Возврат "_"; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка) + Возврат "ДополнительныйЯзык" + Разделитель() + Формат(ПорядковыйНомерЯзыка,"ЧГ=0"); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка) + Возврат "ИспользоватьДополнительныйЯзык" + Разделитель() + Формат(ПорядковыйНомерЯзыка,"ЧГ=0"); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ИмяЭлементаГруппы(ПорядковыйНомерЯзыка) + Возврат "Группа" + Разделитель() + Формат(ПорядковыйНомерЯзыка,"ЧГ=0"); +КонецФункции + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ИспользоватьДополнительныйЯзык1ПриИзменении(Элемент) - Элементы.ДополнительныйЯзык1.Доступность = ИспользоватьДополнительныйЯзык1; +Процедура Подключаемый_ИспользоватьДополнительныйЯзык_ПриИзменении(Элемент) + + Позиция = СтрНайти(Элемент.Имя, Разделитель(), НаправлениеПоиска.СКонца); + + Если Позиция > 0 Тогда + ПорядковыйНомер = Сред(Элемент.Имя, Позиция + 1); + Элементы[ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомер)].Доступность = ЭтотОбъект[Элемент.Имя]; + КонецЕсли; + ДанныеБылиИзменены = Истина; + КонецПроцедуры &НаКлиенте -Процедура ИспользоватьДополнительныйЯзык2ПриИзменении(Элемент) - Элементы.ДополнительныйЯзык2.Доступность = ИспользоватьДополнительныйЯзык2; +Процедура Подключаемый_ДополнительныйЯзык_ПриИзменении(Элемент) + + Позиция = СтрНайти(Элемент.Имя, Разделитель(), НаправлениеПоиска.СКонца); + + Если Позиция > 0 Тогда + ПорядковыйНомерТекущегоЭлемента = Сред(Элемент.Имя, Позиция + 1); + КонецЕсли; + + НовоеЗначение = ЭтотОбъект[Элемент.Имя]; + + Если СтрСравнить(ПредыдущийЯзык, НовоеЗначение) <> 0 Тогда + Если СтрСравнить(НовоеЗначение, ОсновнойЯзык) = 0 Тогда + ОсновнойЯзык = ПредыдущийЯзык; + Иначе + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + Если СтрСравнить(ПорядковыйНомерТекущегоЭлемента, ПорядковыйНомерЯзыка) = 0 Тогда + Продолжить; + КонецЕсли; + Если СтрСравнить(НовоеЗначение, ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка)]) = 0 Тогда + ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка)] = ПредыдущийЯзык; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + КонецЕсли; + ДанныеБылиИзменены = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ДополнительныйЯзык_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПредыдущийЯзык = ЭтотОбъект[Элемент.Имя]; КонецПроцедуры &НаКлиенте Процедура ОсновнойЯзыкПриИзменении(Элемент) Если СтрСравнить(ПредыдущийЯзык, ОсновнойЯзык) <> 0 Тогда - Если СтрСравнить(ДополнительныйЯзык1, ОсновнойЯзык) = 0 Тогда - ДополнительныйЯзык1 = ПредыдущийЯзык; - ИначеЕсли СтрСравнить(ДополнительныйЯзык2, ОсновнойЯзык) = 0 Тогда - ДополнительныйЯзык2 = ПредыдущийЯзык; - КонецЕсли; + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяЭлементаПолеВыбораЯзыка = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + + Если СтрСравнить(ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка], ОсновнойЯзык) = 0 Тогда + ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка] = ПредыдущийЯзык; + Прервать; + КонецЕсли; + + КонецЦикла; + ДанныеБылиИзменены = Истина; + КонецЕсли; - ДанныеБылиИзменены = Истина; - КонецПроцедуры &НаКлиенте @@ -212,46 +300,6 @@ ПредыдущийЯзык = ОсновнойЯзык; КонецПроцедуры -&НаКлиенте -Процедура ДополнительныйЯзык1ПриИзменении(Элемент) - - Если СтрСравнить(ПредыдущийЯзык, ДополнительныйЯзык1) <> 0 Тогда - Если СтрСравнить(ДополнительныйЯзык1, ОсновнойЯзык) = 0 Тогда - ОсновнойЯзык = ПредыдущийЯзык; - ИначеЕсли СтрСравнить(ДополнительныйЯзык1, ДополнительныйЯзык2) = 0 Тогда - ДополнительныйЯзык2 = ПредыдущийЯзык; - КонецЕсли; - КонецЕсли; - - ДанныеБылиИзменены = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура ДополнительныйЯзык2ПриИзменении(Элемент) - - Если СтрСравнить(ПредыдущийЯзык, ДополнительныйЯзык2) <> 0 Тогда - Если СтрСравнить(ДополнительныйЯзык2, ДополнительныйЯзык1) = 0 Тогда - ДополнительныйЯзык1 = ПредыдущийЯзык; - ИначеЕсли СтрСравнить(ДополнительныйЯзык2, ОсновнойЯзык) = 0 Тогда - ОсновнойЯзык = ПредыдущийЯзык; - КонецЕсли; - КонецЕсли; - - ДанныеБылиИзменены = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура ДополнительныйЯзык2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ПредыдущийЯзык = ДополнительныйЯзык2; -КонецПроцедуры - -&НаКлиенте -Процедура ДополнительныйЯзык1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - ПредыдущийЯзык = ДополнительныйЯзык1; -КонецПроцедуры - &НаКлиенте Процедура ЧасовойПоясПрограммыПриИзменении(Элемент) СмещениеЧасовогоПояса = СмещениеЧасовогоПояса(ЧасовойПоясПрограммы, ТекущиеВремяНаКлиенте()); @@ -273,8 +321,6 @@ ЗаписатьЗначенияКонстантИЗакрыть(); КонецЕсли; - Иначе - ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Указаны некорректные значения региональных настроек'")); КонецЕсли; КонецПроцедуры @@ -396,7 +442,7 @@ НастройкиОбработки.Вставить("НастройкиИзмененияЯзыков", СтарыеИНовыеЗначенияКонстант); НастройкиОбработки.Вставить("Объекты", ТекущиеСсылкиНаОбъекты); - Значение = Новый ХранилищеЗначения(НастройкиОбработки); + Значение = Новый ХранилищеЗначения(НастройкиОбработки, Новый СжатиеДанных(9)); Возврат Значение; @@ -435,27 +481,45 @@ Функция ДанныеКорректны() Если ПустаяСтрока(ОсновнойЯзык) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не выбран основной язык приложения'"),, Элементы.ОсновнойЯзык); Возврат Ложь; КонецЕсли; Если ПустаяСтрока(ЧасовойПоясПрограммы) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не выбран часовой пояс приложения'"),, Элементы.ЧасовойПоясПрограммы); Возврат Ложь; КонецЕсли; УстановленныеЯзыки = Новый Соответствие; УстановленныеЯзыки.Вставить(ОсновнойЯзык, Истина); - Если ИспользоватьДополнительныйЯзык1 Тогда - Если ОсновнойЯзык = ДополнительныйЯзык1 Или ДополнительныйЯзык1 = ДополнительныйЯзык2 Тогда - Возврат Ложь; + Для ТекущийПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + + Если ЭтотОбъект[ИмяЭлементаВключенияЯзыка(ТекущийПорядковыйНомерЯзыка)] Тогда + ИмяТекущегоЭлемента = ИмяЭлементаПолеВыбораЯзыка(ТекущийПорядковыйНомерЯзыка); + + Если ПустаяСтрока(ЭтотОбъект[ИмяТекущегоЭлемента]) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не выбран дополнительный язык учета'"),, ИмяТекущегоЭлемента); + Возврат Ложь; + КонецЕсли; + + Для ПорядковыйНомерЯзыка= 1 По КоличествоДополнительныхЯзыков Цикл + ИмяЭлемента = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + + Если ТекущийПорядковыйНомерЯзыка = ПорядковыйНомерЯзыка Тогда + Если СтрСравнить(ОсновнойЯзык, ЭтотОбъект[ИмяЭлемента]) = 0 Тогда + ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Указаны некорректные значения региональных настроек'")); + Возврат Ложь; + КонецЕсли; + ИначеЕсли СтрСравнить(ЭтотОбъект[ИмяЭлемента], ЭтотОбъект[ИмяТекущегоЭлемента]) = 0 Тогда + ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Указаны некорректные значения региональных настроек'")); + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; - КонецЕсли; - - Если ИспользоватьДополнительныйЯзык2 Тогда - Если ОсновнойЯзык = ДополнительныйЯзык2 Или ДополнительныйЯзык1 = ДополнительныйЯзык2 Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; + + КонецЦикла; Возврат Истина; @@ -488,17 +552,21 @@ Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Или Не ОбщегоНазначения.РазделениеВключено() Тогда - КодЯзыка1 = ?(ИспользоватьДополнительныйЯзык1, ДополнительныйЯзык1, ""); - КодЯзыка2 = ?(ИспользоватьДополнительныйЯзык2, ДополнительныйЯзык2, ""); + ДанныеЗаполненияЯзыков = Новый Соответствие; КодыЯзыков = Новый Массив; КодыЯзыков.Добавить(ОсновнойЯзык); - Если ИспользоватьДополнительныйЯзык1 Тогда - КодыЯзыков.Добавить(ДополнительныйЯзык1); - КонецЕсли; - Если ИспользоватьДополнительныйЯзык2 Тогда - КодыЯзыков.Добавить(ДополнительныйЯзык2); - КонецЕсли; + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяЭлементаВключенияЯзыка = ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка); + ИмяЭлементаПолеВыбораЯзыка = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + КодТекущегоЯзыка = ""; + Если ЭтотОбъект[ИмяЭлементаВключенияЯзыка] Тогда + КодТекущегоЯзыка = ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка]; + КодыЯзыков.Добавить(КодТекущегоЯзыка); + КонецЕсли; + ДанныеЗаполненияЯзыков.Вставить(ПорядковыйНомерЯзыка, КодТекущегоЯзыка); + КонецЦикла; НачатьТранзакцию(); Попытка @@ -507,11 +575,15 @@ Константы.ОсновнойЯзык.Установить(ОсновнойЯзык); - Константы.ДополнительныйЯзык1.Установить(КодЯзыка1); - Константы.ИспользоватьДополнительныйЯзык1.Установить(ИспользоватьДополнительныйЯзык1); - - Константы.ДополнительныйЯзык2.Установить(КодЯзыка2); - Константы.ИспользоватьДополнительныйЯзык2.Установить(ИспользоватьДополнительныйЯзык2); + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяЭлементаВключенияЯзыка = ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка); + ИмяЭлементаПолеВыбораЯзыка = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + ИмяКонстантыЯзыка = МультиязычностьСервер.ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + ИмяФункциональнойОпции= МультиязычностьСервер.ИмяФункциональнойОпции(ПорядковыйНомерЯзыка); + + Константы[ИмяКонстантыЯзыка].Установить(ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка]); + Константы[ИмяФункциональнойОпции].Установить(ЭтотОбъект[ИмяЭлементаВключенияЯзыка]); + КонецЦикла; Константы.ДанныеДляИзмененияМультиязычныхРеквизитов.Установить(СписокМетаданныхДляОбработки); @@ -546,20 +618,25 @@ Возврат Истина; КонецЕсли; - Если (Константы.ИспользоватьДополнительныйЯзык1.Получить() = Ложь И ИспользоватьДополнительныйЯзык1 = Истина) - Или (Константы.ИспользоватьДополнительныйЯзык2.Получить() = Ложь И ИспользоватьДополнительныйЯзык2 = Истина) Тогда + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + + ИмяФункциональнойОпции = МультиязычностьСервер.ИмяФункциональнойОпции(ПорядковыйНомерЯзыка); + ИмяЭлементаВключенияЯзыка = ИмяЭлементаВключенияЯзыка(ПорядковыйНомерЯзыка); + + Если (Константы[ИмяФункциональнойОпции].Получить() = Ложь + И ЭтотОбъект[ИмяЭлементаВключенияЯзыка] = Истина) Тогда Возврат Истина; - КонецЕсли; - - Если ИспользоватьДополнительныйЯзык1 - И СтрСравнить(Константы.ДополнительныйЯзык1.Получить(), ДополнительныйЯзык1) <> 0 Тогда + КонецЕсли; + + ИмяКонстантыЯзыка = МультиязычностьСервер.ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + ИмяЭлементаПолеВыбораЯзыка = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + + Если ЭтотОбъект[ИмяЭлементаВключенияЯзыка] + И СтрСравнить(Константы[ИмяКонстантыЯзыка].Получить(), ЭтотОбъект[ИмяЭлементаПолеВыбораЯзыка]) <> 0 Тогда Возврат Истина; - КонецЕсли; - - Если ИспользоватьДополнительныйЯзык2 - И СтрСравнить(Константы.ДополнительныйЯзык2.Получить(), ДополнительныйЯзык2) <> 0 Тогда - Возврат Истина; - КонецЕсли; + КонецЕсли; + + КонецЦикла; Возврат Ложь; @@ -572,16 +649,17 @@ &НаСервере Функция СтарыеИНовыеЗначенияКонстант() - Результат = МультиязычностьСервер.ОписаниеСтарыхИНовыхНастроекЯзыков(); + Результат = МультиязычностьСервер.ОписаниеСтарыхИНовыхНастроекЯзыков(КоличествоДополнительныхЯзыков); - Результат.ОсновнойЯзыкСтароеЗначение= Константы.ОсновнойЯзык.Получить(); - Результат.ОсновнойЯзыкНовоеЗначение = ОсновнойЯзык; + Результат.ОсновнойЯзык.СтароеЗначение= Константы.ОсновнойЯзык.Получить(); + Результат.ОсновнойЯзык.НовоеЗначение = ОсновнойЯзык; - Результат.ДополнительныйЯзык1СтароеЗначение = Константы.ДополнительныйЯзык1.Получить(); - Результат.ДополнительныйЯзык1НовоеЗначение = ДополнительныйЯзык1; - - Результат.ДополнительныйЯзык2СтароеЗначение = Константы.ДополнительныйЯзык2.Получить(); - Результат.ДополнительныйЯзык2НовоеЗначение = ДополнительныйЯзык2; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяКонстантыЯзыка = МультиязычностьСервер.ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + ИмяЭлемента = ИмяЭлементаПолеВыбораЯзыка(ПорядковыйНомерЯзыка); + Результат[ИмяКонстантыЯзыка].СтароеЗначение = Константы[ИмяКонстантыЯзыка].Получить(); + Результат[ИмяКонстантыЯзыка].НовоеЗначение = ЭтотОбъект[ИмяЭлемента]; + КонецЦикла; Возврат Результат; diff --git a/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Help/ru.html b/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Help/ru.html index eb02b1f35..eb69d330c 100644 --- a/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta></head><body> <p>Предназначена для редактирования макетов офисных документов.</p> -<p>Для редактирования макета нажмите <strong>Открыть редактор</strong>. </p> -<p><strong>Важно: </strong>при редактировании макетов печатных форм необходимо иметь в виду, что изменение параметров макета может привести к потере работоспособности печатной формы. Восстановление стандартной печатной формы выполняется в списке <a href="InformationRegister.ПользовательскиеМакетыПечати.Form.МакетыПечатныхФорм/Help">Макеты печатных форм</a>.</p> +<p>Для редактирования макета нажмите <strong>Открыть редактор</strong>. </p> +<p><strong>Важно: </strong>при редактировании макетов печатных форм необходимо иметь в виду, что изменение параметров макета может привести к потере работоспособности печатной формы. Восстановление стандартной печатной формы выполняется в списке <a href="InformationRegister.ПользовательскиеМакетыПечати.Form.МакетыПечатныхФорм/Help">Макеты печатных форм</a>.</p> <h3>Редактирование</h3> <ul><li>Для редактирования макета офисного документа можно использовать любое приложение для работы с форматом DOCX: Microsoft Word, OpenOffice.org Writer, Р7-Офис, МойОфис и др. Приложение должно быть предварительно установлено на компьютере.</li> -<li>Рекомендуется расположить окна приложения и редактора рядом с помощью клавиш Win и стрелок.</li> -<li>Вставка полей в макет осуществляется с помощью переноса из одного окна в другое. Также предусмотрена кнопка <img src="CommonPicture.СкопироватьВБуферОбмена"></img> <b>Копировать</b>.</li></ul><h3>Создание или редактирование пользовательской печатной формы</h3> +<li>Рекомендуется расположить окна приложения и редактора рядом с помощью клавиш Win и стрелок.</li> +<li>Вставка полей в макет осуществляется с помощью переноса из одного окна в другое. Также предусмотрена кнопка <img src="CommonPicture.СкопироватьВБуферОбмена"></img><b>Копировать</b>.</li></ul><h3>Создание или редактирование пользовательской печатной формы</h3> <div>В списке макетов нажмите кнопку <b>Создать</b> или <b>Копировать</b>.</div> <div><br></div> <div>С помощью кнопок панели навигации верхнего ряда можно:<br></div> <ul><li>записать, записать и закрыть макет;</li> <li>открыть макет офисного документа для редактирования;</li> <li>переключиться на макет на другом языке;</li> -<li><img src="StdPicture.ShowData"></img> сформировать образец печатной формы по макету;</li> -<li><img width="32" height="29" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJKSURBVEhLxZbNi1JRGMZfJUGRjEGX0saVg+AyXGUuggK3QauWEQy0mYq+iD7oi2gKimhZf4LOEAyMOIuQloLgSiEQ2iiRYQp+dZ/X8565Olfneh2dHzz3nnvPufd9zjkP3OsaGtAJwgba7TYVi0VqNBo0GAxU13Jwu90UDAYpHo+Tz+cbGSgUChQKhSgSifCAZYIJVioVqtfrlEgkiKth5qsoDlADtVCTr3FADFZRXEAt1OQ2H08QzkA2m6V0Oq1ujXPn2XvVOuDf0EvrZ9foxrUr6s786JowkMlkcLLk9tN3QyM4Y3r7ZVv3OUVq2toCJNcs4dWDm5YrNA+2DBhGaXvvOwttsPV1h+X1evnaKbYNXL6QYKG9cfWiVqfTUaOccUqdZ4Jl/7b/Q12N2Nndp7Uzp+ln7ZfeBkfhNGZ0ZAiNWR7SrSdbC4VzrhACrIBZv//8PZZwagOGGUsJl86fGxOWH/2zwml+z6QEnQHzDMxg8MPXn9TVAdh79CGYAG2EUrj/8uPUd5rRBsyuzDy/u6Fa49x78YELTIYTYIXAtHea0Vsg+2hXwuTWSHFg9ZxIcGxAZjcZTlkR9Fs9JxKODOE0CbNWwOo5kaC/hqlUSt2yx6M3n1VrOo83r6vWYXK5HH8NtYFkMqm6VkM+n2cDjrdgUQmOQ7ioBDbQ6/VYVgOXIamnDeAnsVqtUr/ft1yu4xRqoJb8BHMIy+UylUolajabPGiZuFwuCgQCFIvFKBqNjgx0u12q1WrUarVWYsDv91M4HCaPx0P/AXwmMHvg92v1AAAAAElFTkSuQmCC" style="width: 24px; height: 20px;"></img> поместить выбранное поле в буфер обмена.</li></ul><p>В поле назначение, можно указать объекты, для которых текущая печатная форма будет применяться. При этом общие, для всех документов, поля будут выделяться флажком  <img src="StdPicture.AppearanceCheckBox"></img>, а поля присущие только некоторым видам, будут окрашены серым цветом.</p> +<li><img src="StdPicture.ShowData"></img> сформировать образец печатной формы по макету;</li> +<li><img width="32" height="29" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAcCAYAAAAAwr0iAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJKSURBVEhLxZbNi1JRGMZfJUGRjEGX0saVg+AyXGUuggK3QauWEQy0mYq+iD7oi2gKimhZf4LOEAyMOIuQloLgSiEQ2iiRYQp+dZ/X8565Olfneh2dHzz3nnvPufd9zjkP3OsaGtAJwgba7TYVi0VqNBo0GAxU13Jwu90UDAYpHo+Tz+cbGSgUChQKhSgSifCAZYIJVioVqtfrlEgkiKth5qsoDlADtVCTr3FADFZRXEAt1OQ2H08QzkA2m6V0Oq1ujXPn2XvVOuDf0EvrZ9foxrUr6s786JowkMlkcLLk9tN3QyM4Y3r7ZVv3OUVq2toCJNcs4dWDm5YrNA+2DBhGaXvvOwttsPV1h+X1evnaKbYNXL6QYKG9cfWiVqfTUaOccUqdZ4Jl/7b/Q12N2Nndp7Uzp+ln7ZfeBkfhNGZ0ZAiNWR7SrSdbC4VzrhACrIBZv//8PZZwagOGGUsJl86fGxOWH/2zwml+z6QEnQHzDMxg8MPXn9TVAdh79CGYAG2EUrj/8uPUd5rRBsyuzDy/u6Fa49x78YELTIYTYIXAtHea0Vsg+2hXwuTWSHFg9ZxIcGxAZjcZTlkR9Fs9JxKODOE0CbNWwOo5kaC/hqlUSt2yx6M3n1VrOo83r6vWYXK5HH8NtYFkMqm6VkM+n2cDjrdgUQmOQ7ioBDbQ6/VYVgOXIamnDeAnsVqtUr/ft1yu4xRqoJb8BHMIy+UylUolajabPGiZuFwuCgQCFIvFKBqNjgx0u12q1WrUarVWYsDv91M4HCaPx0P/AXwmMHvg92v1AAAAAElFTkSuQmCC" style="width: 24px; height: 20px;"></img> поместить выбранное поле в буфер обмена.</li></ul><p>В поле назначение, можно указать объекты, для которых текущая печатная форма будет применяться. При этом общие, для всех документов, поля будут выделяться флажком <img src="StdPicture.AppearanceCheckBox"></img>, а поля присущие только некоторым видам, будут окрашены серым цветом.</p> <div>В меню <strong>Еще</strong> также можно:</div> <div> <ul><li>воспользоваться расширенным поиском;</li> @@ -23,23 +23,23 @@ <div> <ul><li>удалить язык макета;</li> <li>сохранить макет в файл;</li> -<li>загрузить макет (или заготовку) из файла.</li></ul>Окно редактирования печатной формы состоит из двух частей:<br><ul><li>В правой верхней части находится список доступных полей документа для использования в макете;</li> +<li>загрузить макет (или заготовку) из файла.</li></ul>Окно редактирования печатной формы состоит из двух частей:<br><ul><li>В правой верхней части находится список доступных полей документа для использования в макете;</li> <ul><li>Список доступных полей содержит следующие колонки:</li> <ul><li><b>Поле</b> - доступное поле элемента-владельца макета. Поле можно перетаскивать в макет. Можно вставить поля табличной части документа.</li> -<li><b>Образец</b> - показывает, как будет выглядеть поле при выводе на печать. В качестве образца для заполнения полей берется случайный элемент списка. </li> -<li><b><img src="StdPicture.DataCompositionOutputParameters"></img> Формат поля</b> - предусмотрена настройка формата поля. Например, можно выбрать формат даты, отличный от стандартного.</li></ul></ul><li>В правой нижней части находится список операторов и функций для создания выражений. Подробное описание операторов и функций можно найти в <a href="https://its.1c.ru/bmk/bsp_print_templates">Инструкции по созданию макетов печатных форм</a>;</li></ul></div> +<li><b>Образец</b> - показывает, как будет выглядеть поле при выводе на печать. В качестве образца для заполнения полей берется случайный элемент списка. </li> +<li><b><img src="StdPicture.DataCompositionOutputParameters"></img> Формат поля</b> - предусмотрена настройка формата поля. Например, можно выбрать формат даты, отличный от стандартного.</li></ul></ul><li>В правой нижней части находится список операторов и функций для создания выражений. Подробное описание операторов и функций можно найти в <a href="https://its.1c.ru/bmk/bsp_print_templates">Инструкции по созданию макетов печатных форм</a>;</li></ul></div> <div>Для сохранения новой печатной формы нажмите <b>Записать и закрыть</b>.</div> -<h3 style="font-size: 13.43px;">Перевод макета на др<span style="font-size: 13.43px;">угой язык</span></h3> +<h3>Перевод макета на другой язык</h3> <p>Приложение позволяет формировать печатные формы на разных языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.</p> <p>Для этого необходимо:</p> <p></p> <ul><a name="СтандартныеПодсистемы.Печать"></a> -<li><a name="СтандартныеПодсистемы.Печать">выбрать </a><a href="Catalog.ЯзыкиПечатныхФорм/Help">дополнительные языки</a> печатных форм.</li> -<li>Ввести на дополнительном языке наименования, выводимые в печатной форме - элементы различных списков приложения. После специальных настроек можно использовать автоматический перевод.</li> -<li>добавить перевод макета печатной формы на дополнительный язык. Для упрощения перевода макетов в приложении предусмотрена возможность использования онлайн-сервисов перевода текста (например, <b>Яндекс. Переводчик</b> и <b>Google Переводчик)</b>.<b> </b>Онлайн-сервис можно включить в разделе <b>Администрирование</b> - <b>Печатные формы, отчеты и обработки</b> - <b>Перевод текста с помощью внешнего сервиса</b>. Далее выбрать из списка нужный сервис и следовать инструкции по настройке. После становится возможным автоматический перевод текста.</li> +<li><a name="СтандартныеПодсистемы.Печать">выбрать </a><a href="Catalog.ЯзыкиПечатныхФорм/Help">дополнительные языки</a> печатных форм.</li> +<li>Ввести на дополнительном языке наименования, выводимые в печатной форме - элементы различных списков приложения. После специальных настроек можно использовать автоматический перевод.</li> +<li>добавить перевод макета печатной формы на дополнительный язык. Для упрощения перевода макетов в приложении предусмотрена возможность использования онлайн-сервисов перевода текста (например, <b>Яндекс. Переводчик</b> и <b>Google Переводчик)</b>.<b> </b>Онлайн-сервис можно включить в разделе <b>Администрирование</b> - <b>Печатные формы, отчеты и обработки</b> - <b>Перевод текста с помощью внешнего сервиса</b>. Далее выбрать из списка нужный сервис и следовать инструкции по настройке. После становится возможным автоматический перевод текста.</li> <ul><li>После добавления других языков при редактировании макета появляется кнопка выбора языка.</li> <li>Откройте на редактирование нужный макет, переключите на дополнительный язык и выполните перевод.</li> <li>В макете следует переводить только статический текст, например заголовки, подписи и т.д.</li> -<li>Не нужно переводить параметры. Параметры в печатной форме находятся внутри текста и отображаются в квадратных скобках, например<b> Покупатель: [Контрагент.Наименование полное]</b>, переводить следует только текст за скобками.</li> -</ul></ul>После сохранения макета в колонке <b>Дополнительные языки</b> добавляется язык, на который был выполнен перевод.<br><h3>См. также:</h3> +<li>Не нужно переводить параметры. Параметры в печатной форме находятся внутри текста и отображаются в квадратных скобках, например<b> Покупатель: [Контрагент.Наименование полное]</b>, переводить следует только текст за скобками.</li> +</ul></ul>После сохранения макета в колонке <b>Дополнительные языки</b> добавляется язык, на который был выполнен перевод.<br><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Module.bsl b/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Module.bsl index b38c3b072..5bbded012 100644 --- a/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДокументаOfficeOpen/Module.bsl @@ -112,53 +112,48 @@ Элементы.КнопкаПоказатьОригиналВсеДействия.Видимость = Элементы.КнопкаПоказатьОригинал.Видимость; Элементы.КнопкаПоказатьОригиналВсеДействия.Доступность = Элементы.КнопкаПоказатьОригинал.Доступность; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул"); - - ИсточникДанных = Параметры.ИсточникДанных; - Если Не ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда - ИсточникДанных = ИсточникиДанных[0].Значение; - КонецЕсли; - - ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИсточникДанных); - ПодобратьОбразец(ОбъектМетаданных); - - ПараметрыДобавления = МодульКонструкторФормул.ПараметрыДобавленияСпискаПолей(); - ПараметрыДобавления.ИмяСписка = ИмяСпискаПолей(); - ПараметрыДобавления.МестоРазмещенияСписка = Элементы.ГруппаДоступныеПоля; - ПараметрыДобавления.КоллекцииПолей = КоллекцииПолей(ИсточникиДанных.ВыгрузитьЗначения(), ПараметрыРедактирования()); - ПараметрыДобавления.ПодсказкаВводаСтрокиПоиска = ПодсказкаВводаСтрокиПоискаСпискаПолей(); - ПараметрыДобавления.ПриОпределенииИсточниковДоступныхПолей = "УправлениеПечатью"; - ПараметрыДобавления.ОбработчикиСписка.Вставить("Выбор", "Подключаемый_СписокПолейВыбор"); - ПараметрыДобавления.ОбработчикиСписка.Вставить("ПередНачаломИзменения", "Подключаемый_ДоступныеПоляПередНачаломИзменения"); - ПараметрыДобавления.ОбработчикиСписка.Вставить("ПриОкончанииРедактирования", "Подключаемый_ДоступныеПоляПриОкончанииРедактирования"); - ПараметрыДобавления.ИспользоватьФоновыйПоиск = Истина; - - Если Не ЭтоLinuxКлиент Тогда - ПараметрыДобавления.КонтекстноеМеню.Вставить("Копировать", "ПоместитьВБуферОбмена"); - КонецЕсли; - - МодульКонструкторФормул.ДобавитьСписокПолейНаФорму(ЭтотОбъект, ПараметрыДобавления); - - ПараметрыДобавления = МодульКонструкторФормул.ПараметрыДобавленияСпискаПолей(); - ПараметрыДобавления.ИмяСписка = ИмяСпискаОператоров(); - ПараметрыДобавления.МестоРазмещенияСписка = Элементы.ГруппаОператорыИФункции; - ПараметрыДобавления.КоллекцииПолей.Добавить(СписокОператоров()); - ПараметрыДобавления.ПодсказкаВводаСтрокиПоиска = НСтр("ru = 'Найти оператор или функцию...'"); - ПараметрыДобавления.СкобкиПредставлений = Ложь; - ПараметрыДобавления.ОбработчикиСписка.Вставить("Выбор", "Подключаемый_СписокПолейВыбор"); - ПараметрыДобавления.ОбработчикиСписка.Вставить("ПриАктивизацииСтроки", "Подключаемый_СписокПолейАктивизацияСтроки"); - ПараметрыДобавления.ОбработчикиСписка.Вставить("НачалоПеретаскивания", "Подключаемый_ОператорыНачалоПеретаскивания"); - - Если Не ЭтоLinuxКлиент Тогда - ПараметрыДобавления.КонтекстноеМеню.Вставить("Копировать", "ПоместитьВБуферОбмена"); - КонецЕсли; - - МодульКонструкторФормул.ДобавитьСписокПолейНаФорму(ЭтотОбъект, ПараметрыДобавления); - ПодготовитьМакетКОткрытию(ПодготовленныйМакет); - РасширитьСписокПолей(); - + ИсточникДанных = Параметры.ИсточникДанных; + Если Не ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда + ИсточникДанных = ИсточникиДанных[0].Значение; КонецЕсли; + + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИсточникДанных); + ПодобратьОбразец(ОбъектМетаданных); + + ПараметрыДобавления = КонструкторФормул.ПараметрыДобавленияСпискаПолей(); + ПараметрыДобавления.ИмяСписка = ИмяСпискаПолей(); + ПараметрыДобавления.МестоРазмещенияСписка = Элементы.ГруппаДоступныеПоля; + ПараметрыДобавления.КоллекцииПолей = КоллекцииПолей(ИсточникиДанных.ВыгрузитьЗначения(), ПараметрыРедактирования()); + ПараметрыДобавления.ПодсказкаВводаСтрокиПоиска = ПодсказкаВводаСтрокиПоискаСпискаПолей(); + ПараметрыДобавления.ПриОпределенииИсточниковДоступныхПолей = "УправлениеПечатью"; + ПараметрыДобавления.ОбработчикиСписка.Вставить("Выбор", "Подключаемый_СписокПолейВыбор"); + ПараметрыДобавления.ОбработчикиСписка.Вставить("ПередНачаломИзменения", "Подключаемый_ДоступныеПоляПередНачаломИзменения"); + ПараметрыДобавления.ОбработчикиСписка.Вставить("ПриОкончанииРедактирования", "Подключаемый_ДоступныеПоляПриОкончанииРедактирования"); + ПараметрыДобавления.ИспользоватьФоновыйПоиск = Истина; + + Если Не ЭтоLinuxКлиент Тогда + ПараметрыДобавления.КонтекстноеМеню.Вставить("Копировать", "ПоместитьВБуферОбмена"); + КонецЕсли; + + КонструкторФормул.ДобавитьСписокПолейНаФорму(ЭтотОбъект, ПараметрыДобавления); + + ПараметрыДобавления = КонструкторФормул.ПараметрыДобавленияСпискаПолей(); + ПараметрыДобавления.ИмяСписка = ИмяСпискаОператоров(); + ПараметрыДобавления.МестоРазмещенияСписка = Элементы.ГруппаОператорыИФункции; + ПараметрыДобавления.КоллекцииПолей.Добавить(СписокОператоров()); + ПараметрыДобавления.ПодсказкаВводаСтрокиПоиска = НСтр("ru = 'Найти оператор или функцию...'"); + ПараметрыДобавления.СкобкиПредставлений = Ложь; + ПараметрыДобавления.ОбработчикиСписка.Вставить("Выбор", "Подключаемый_СписокПолейВыбор"); + ПараметрыДобавления.ОбработчикиСписка.Вставить("ПриАктивизацииСтроки", "Подключаемый_СписокПолейАктивизацияСтроки"); + ПараметрыДобавления.ОбработчикиСписка.Вставить("НачалоПеретаскивания", "Подключаемый_ОператорыНачалоПеретаскивания"); + + Если Не ЭтоLinuxКлиент Тогда + ПараметрыДобавления.КонтекстноеМеню.Вставить("Копировать", "ПоместитьВБуферОбмена"); + КонецЕсли; + + КонструкторФормул.ДобавитьСписокПолейНаФорму(ЭтотОбъект, ПараметрыДобавления); + ПодготовитьМакетКОткрытию(ПодготовленныйМакет); + РасширитьСписокПолей(); ПоместитьВоВременноеХранилище(ПодготовленныйМакет, АдресФайлаМакета); ХешРедактируемогоМакета = ПолучитьХешМакета(АдресФайлаМакета); @@ -637,12 +632,12 @@ &НаКлиенте Процедура ОповеститьОЗаписиОфисногоДокумента() - ПараметрыОповещения = Новый Структура; - ПараметрыОповещения.Вставить("ПутьКФайлу", ПутьКФайлуМакета); - ПараметрыОповещения.Вставить("ИмяОбъектаМетаданныхМакета", ИдентификаторМакета); - ПараметрыОповещения.Вставить("КодЯзыка", ТекущийЯзык); - ПараметрыОповещения.Вставить("Представление", ИмяДокумента); - ПараметрыОповещения.Вставить("ИсточникиДанных", ИсточникиДанных.ВыгрузитьЗначения()); + ПараметрыОповещения = СтандартныеПодсистемыКлиент.НовыйПараметрОповещенияЗаписиТабличногоДокумента(); + ПараметрыОповещения.ПутьКФайлу = ПутьКФайлуМакета; + ПараметрыОповещения.ИмяОбъектаМетаданныхМакета = ИдентификаторМакета; + ПараметрыОповещения.КодЯзыка = ТекущийЯзык; + ПараметрыОповещения.Представление = ИмяДокумента; + ПараметрыОповещения.ИсточникиДанных = ИсточникиДанных.ВыгрузитьЗначения(); Если ЗаписьВыполнена Тогда ИмяСобытия = "Запись_ОфисныйДокумент"; @@ -1242,7 +1237,7 @@ ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); ДополнительныеПараметры.Вставить("ВременныйКаталог", ВременныйКаталог); ПослеПодключенияРасширения = Новый ОписаниеОповещения("ПослеПодключенияРасширения", ЭтотОбъект, ДополнительныеПараметры); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ПослеПодключенияРасширения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ПослеПодключенияРасширения); Элементы.ОткрытьРедактор.КнопкаПоУмолчанию = Ложь; Элементы.ЗаписатьИЗакрыть.КнопкаПоУмолчанию = Истина; @@ -1639,8 +1634,24 @@ Возврат; КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииПроверкиНастроекПеревода", ЭтотОбъект, ПараметрыОткрытияМакета); + МодульПереводТекстаНаДругиеЯзыкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПереводТекстаНаДругиеЯзыкиКлиент"); + МодульПереводТекстаНаДругиеЯзыкиКлиент.ПроверитьНастройки(ЭтотОбъект, ОписаниеОповещения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПроверкиНастроекПеревода(НастройкаВыполнена, ПараметрыОткрытияМакета) Экспорт + + Если Не НастройкаВыполнена Тогда + Возврат; + КонецЕсли; + ПеревестиТекстыМакета(); ОткрытьМакет(ПараметрыОткрытияМакета); + КонецПроцедуры &НаСервере @@ -1695,11 +1706,7 @@ СписокПолей.Шапка = Истина; СписокПолей.УстановитьДействие("ПриАктивизацииСтроки", "Подключаемый_ДоступныеПоляПриАктивизацииСтроки"); - ИмяКолонкиПредставление = ИмяСпискаПолей() + "Представление"; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулСлужебный = ОбщегоНазначения.ОбщийМодуль("КонструкторФормулСлужебный"); - ИмяКолонкиПредставление = МодульКонструкторФормулСлужебный.ИмяКолонкиПредставление(ИмяСпискаПолей()); - КонецЕсли; + ИмяКолонкиПредставление = КонструкторФормулСлужебный.ИмяКолонкиПредставление(ИмяСпискаПолей()); КолонкаПредставление = Элементы[ИмяКолонкиПредставление]; КолонкаПредставление.Заголовок = НСтр("ru = 'Поле'"); @@ -1972,20 +1979,14 @@ &НаКлиенте Процедура Подключаемый_СписокПолейПередРазворачиванием(Элемент, Строка, Отказ) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - МодульКонструкторФормулКлиент.СписокПолейПередРазворачиванием(ЭтотОбъект, Элемент, Строка, Отказ); - КонецЕсли; + КонструкторФормулКлиент.СписокПолейПередРазворачиванием(ЭтотОбъект, Элемент, Строка, Отказ); КонецПроцедуры &НаКлиенте Процедура Подключаемый_РазвернутьТекущийЭлементСпискаПолей() - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - МодульКонструкторФормулКлиент.РазвернутьТекущийЭлементСпискаПолей(ЭтотОбъект); - КонецЕсли; + КонструкторФормулКлиент.РазвернутьТекущийЭлементСпискаПолей(ЭтотОбъект); КонецПроцедуры @@ -1999,19 +2000,16 @@ &НаСервере Процедура ЗаполнитьСписокДоступныхПолей(ПараметрыЗаполнения) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул"); - МодульКонструкторФормул.ЗаполнитьСписокДоступныхПолей(ЭтотОбъект, ПараметрыЗаполнения); - - ТекущиеДанные = ЭтотОбъект[ИмяСпискаПолей()].НайтиПоИдентификатору(ПараметрыЗаполнения.ИдентификаторСтроки); - УстановитьПримерыЗначений(ТекущиеДанные); - УстановитьФорматЗначенийПоУмолчанию(ТекущиеДанные); - Если (ТекущиеДанные.Папка Или ТекущиеДанные.Таблица) И ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда - ОтметитьОбщиеПоля(ТекущиеДанные); - Иначе - УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(ТекущиеДанные); - КонецЕсли; - КонецЕсли; + КонструкторФормул.ЗаполнитьСписокДоступныхПолей(ЭтотОбъект, ПараметрыЗаполнения); + + ТекущиеДанные = ЭтотОбъект[ИмяСпискаПолей()].НайтиПоИдентификатору(ПараметрыЗаполнения.ИдентификаторСтроки); + УстановитьПримерыЗначений(ТекущиеДанные); + УстановитьФорматЗначенийПоУмолчанию(ТекущиеДанные); + Если (ТекущиеДанные.Папка Или ТекущиеДанные.Таблица) И ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда + ОтметитьОбщиеПоля(ТекущиеДанные); + Иначе + УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(ТекущиеДанные); + КонецЕсли; КонецПроцедуры @@ -2040,10 +2038,7 @@ &НаКлиенте Процедура Подключаемый_СтрокаПоискаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - МодульКонструкторФормулКлиент.СтрокаПоискаИзменениеТекстаРедактирования(ЭтотОбъект, Элемент, Текст, СтандартнаяОбработка); - КонецЕсли; + КонструкторФормулКлиент.СтрокаПоискаИзменениеТекстаРедактирования(ЭтотОбъект, Элемент, Текст, СтандартнаяОбработка); КонецПроцедуры @@ -2057,10 +2052,7 @@ &НаСервере Процедура ВыполнитьПоискВСпискеПолей() - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул"); - МодульКонструкторФормул.ВыполнитьПоискВСпискеПолей(ЭтотОбъект); - КонецЕсли; + КонструкторФормул.ВыполнитьПоискВСпискеПолей(ЭтотОбъект); КонецПроцедуры @@ -2073,35 +2065,29 @@ &НаСервере Процедура Подключаемый_ОбработчикКонструктораФормулСервер(Параметр, ДополнительныеПараметры) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул"); - МодульКонструкторФормул.ОбработчикКонструктораФормул(ЭтотОбъект, Параметр, ДополнительныеПараметры); - КонецЕсли; - + + КонструкторФормул.ОбработчикКонструктораФормул(ЭтотОбъект, Параметр, ДополнительныеПараметры); Если ДополнительныеПараметры.КлючОперации = "ОбработатьСообщениеПоиска" Тогда ОтметитьОбщиеПоля(); УстановитьФорматЗначенийПоУмолчанию(); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбработчикКонструктораФормулКлиент(Параметр, ДополнительныеПараметры = Неопределено) Экспорт // АПК:78 Процедура вызывается из КонструкторФормулКлиент.НачатьПоискВСпискеПолей - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - МодульКонструкторФормулКлиент.ОбработчикКонструктораФормул(ЭтотОбъект, Параметр, ДополнительныеПараметры); - Если ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.ВыполнитьНаСервере Тогда - Подключаемый_ОбработчикКонструктораФормулСервер(Параметр, ДополнительныеПараметры); - КонецЕсли; + + КонструкторФормулКлиент.ОбработчикКонструктораФормул(ЭтотОбъект, Параметр, ДополнительныеПараметры); + Если ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.ВыполнитьНаСервере Тогда + Подключаемый_ОбработчикКонструктораФормулСервер(Параметр, ДополнительныеПараметры); КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура Подключаемый_НачатьПоискВСпискеПолей() - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - МодульКонструкторФормулКлиент.НачатьПоискВСпискеПолей(ЭтотОбъект); - КонецЕсли; + КонструкторФормулКлиент.НачатьПоискВСпискеПолей(ЭтотОбъект); КонецПроцедуры @@ -2174,16 +2160,11 @@ &НаКлиенте Процедура Подключаемый_ДоступныеПоляПередНачаломИзменения(Элемент, Отказ) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - - ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные; - ТекущиеДанные.Образец = ТекущиеДанные.Значение; - ПолеВвода = Элементы[ИмяСпискаПолей() + "Образец"]; - ВыбранноеПоле = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаПолей()); - ПолеВвода.ОграничениеТипа = ВыбранноеПоле.Тип; - - КонецЕсли; + ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные; + ТекущиеДанные.Образец = ТекущиеДанные.Значение; + ПолеВвода = Элементы[ИмяСпискаПолей() + "Образец"]; + ВыбранноеПоле = КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаПолей()); + ПолеВвода.ОграничениеТипа = ВыбранноеПоле.Тип; КонецПроцедуры @@ -2196,16 +2177,9 @@ &НаКлиенте Процедура Подключаемый_СписокПолейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - МодульКонструкторФормулКлиент = Неопределено; - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); - Иначе - Возврат; - КонецЕсли; - Если Поле.Имя = Элемент.Имя + "Представление" Тогда СтандартнаяОбработка = Ложь; - ВыбранноеПоле = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект); + ВыбранноеПоле = КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект); Если ЗначениеЗаполнено(ТекущееЗначение) Тогда ТекущееЗначение = СокрП(ТекущееЗначение) + " "; Иначе @@ -2214,7 +2188,7 @@ Если Элемент.Имя = ИмяСпискаПолей() Тогда ТекущееЗначение = ТекущееЗначение + "[" + ВыбранноеПоле.ПредставлениеПутиКДанным + "]"; Иначе - ТекущееЗначение = ТекущееЗначение + МодульКонструкторФормулКлиент.ВыражениеДляВставки(ВыбранноеПоле); + ТекущееЗначение = ТекущееЗначение + КонструкторФормулКлиент.ВыражениеДляВставки(ВыбранноеПоле); КонецЕсли; КонецЕсли; @@ -2231,59 +2205,51 @@ &НаКлиенте Процедура Подключаемый_СписокПолейАктивизацияСтроки(Элемент) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); + Оператор = КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаОператоров()); + + Если ЗначениеЗаполнено(Оператор.Родитель) Тогда + ГруппаОператоров = Оператор.Родитель; // см. КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей + ИмяГруппыОператоров = ГруппаОператоров.Имя; - Оператор = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаОператоров()); - - Если ЗначениеЗаполнено(Оператор.Родитель) Тогда - ГруппаОператоров = Оператор.Родитель; // см. КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей - ИмяГруппыОператоров = ГруппаОператоров.Имя; - - Если ИмяГруппыОператоров = "УсловныйВывод" Тогда - Если Оператор.Имя = "НачалоОбласти" Тогда - УстановитьВHTMLПоле(СтрШаблон("{%1 *текст условия*}", ИмяТегаУсловие())); - ИначеЕсли Оператор.Имя = "ОкончаниеОбласти" Тогда - УстановитьВHTMLПоле(СтрШаблон("{/%1}", ИмяТегаУсловие())); - КонецЕсли; - Возврат; + Если ИмяГруппыОператоров = "УсловныйВывод" Тогда + Если Оператор.Имя = "НачалоОбласти" Тогда + УстановитьВHTMLПоле(СтрШаблон("{%1 *текст условия*}", ИмяТегаУсловие())); + ИначеЕсли Оператор.Имя = "ОкончаниеОбласти" Тогда + УстановитьВHTMLПоле(СтрШаблон("{/%1}", ИмяТегаУсловие())); КонецЕсли; + Возврат; КонецЕсли; - - УстановитьВHTMLПоле(МодульКонструкторФормулКлиент.ВыражениеДляВставки(Оператор)); КонецЕсли; + УстановитьВHTMLПоле(КонструкторФормулКлиент.ВыражениеДляВставки(Оператор)); + КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОператорыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда - МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент"); + Оператор = КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаОператоров()); + + Если ЗначениеЗаполнено(Оператор.Родитель) Тогда + ГруппаОператоров = Оператор.Родитель; // см. КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей + ИмяГруппыОператоров = ГруппаОператоров.Имя; - Оператор = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаОператоров()); - - Если ЗначениеЗаполнено(Оператор.Родитель) Тогда - ГруппаОператоров = Оператор.Родитель; // см. КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей - ИмяГруппыОператоров = ГруппаОператоров.Имя; - - Если ИмяГруппыОператоров = "УсловныйВывод" Тогда - Если Оператор.Имя = "НачалоОбласти" Тогда - ПараметрыПеретаскивания.Значение = "{v8 Условие *текст условия*}"; - ИначеЕсли Оператор.Имя = "ОкончаниеОбласти" Тогда - ПараметрыПеретаскивания.Значение = "{/v8 Условие}"; - КонецЕсли; - Возврат; + Если ИмяГруппыОператоров = "УсловныйВывод" Тогда + Если Оператор.Имя = "НачалоОбласти" Тогда + ПараметрыПеретаскивания.Значение = "{v8 Условие *текст условия*}"; + ИначеЕсли Оператор.Имя = "ОкончаниеОбласти" Тогда + ПараметрыПеретаскивания.Значение = "{/v8 Условие}"; КонецЕсли; + Возврат; КонецЕсли; - - ПараметрыПеретаскивания.Значение = МодульКонструкторФормулКлиент.ВыражениеДляВставки(Оператор); - - Если Оператор.ПутьКДанным = "УправлениеПечатью_КоличествоСтрок" Тогда - ПредставлениеТекущейТаблицы = ПредставлениеТекущейТаблицы(); - Выполнение = ПредставлениеТекущейТаблицы <> Неопределено; - ПараметрыПеретаскивания.Значение = СтрЗаменить(ПараметрыПеретаскивания.Значение, "()", "(["+ПредставлениеТекущейТаблицы+"])"); - КонецЕсли; + КонецЕсли; + + ПараметрыПеретаскивания.Значение = КонструкторФормулКлиент.ВыражениеДляВставки(Оператор); + + Если Оператор.ПутьКДанным = "УправлениеПечатью_КоличествоСтрок" Тогда + ПредставлениеТекущейТаблицы = ПредставлениеТекущейТаблицы(); + Выполнение = ПредставлениеТекущейТаблицы <> Неопределено; + ПараметрыПеретаскивания.Значение = СтрЗаменить(ПараметрыПеретаскивания.Значение, "()", "(["+ПредставлениеТекущейТаблицы+"])"); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html index cbd28a0e2..e02423d82 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html @@ -1,21 +1,21 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Предназначен для просмотра и ввода значений дополнительных сведений. Ввод значений дополнительных сведений, как правило, осуществляется в отдельном окне, в отличие от дополнительных реквизитов.</p> -<p>Открывается с помощью кнопки <img src="CommonPicture.ДополнительныеСведения"></img> <strong>Дополнительные сведения</strong> из окон объектов приложения, для которых были <a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">настроены дополнительные сведения</a>.</p> +<p>Открывается с помощью кнопки <img src="CommonPicture.ДополнительныеСведения"></img><strong>Дополнительные сведения</strong> из окон объектов приложения, для которых были <a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">настроены дополнительные сведения</a>.</p> <p>В списке выводится:</p> <ul><li><strong>Наименование</strong> - наименование поля дополнительного сведения; </li> -<li>Поле <strong>Значение</strong> предназначено для просмотра или ввода значений дополнительного сведения.</li></ul><h3>Ввод значений</h3> +<li>Поле <strong>Значение</strong> предназначено для просмотра или ввода значений дополнительного сведения.</li></ul><h3>Ввод значений</h3> <ul><li>Для перехода в режим ввода или редактирования значения дополнительного сведения можно дважды щелкнуть мышью по нужному полю. </li> <li>Способ ввода значения зависит от типа дополнительного сведения (подробнее о типах дополнительных реквизитов и сведений см. <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.Form.ФормаЭлемента/Help">здесь</a>). </li> <li>Дополнительные сведения могут иметь выбор только из двух значений, например, <strong>Да</strong> или <strong>Нет</strong>. В этом случае ввод новых значений не предусмотрен. </li> -<li>Если для ввода предусмотрен список значений, нажмите <strong>Показать все</strong> (клавишу <strong>F4</strong>). Затем выберите нужное значение из предлагаемого списка. В зависимости от настроек список значений может быть <a href="Catalog.ЗначенияСвойствОбъектовИерархия/Help">с иерархией</a> или <a href="Catalog.ЗначенияСвойствОбъектов/Help">без иерархии</a>. При необходимости в эти списки можно добавлять значения. +<li>Если для ввода предусмотрен список значений, нажмите <strong>Показать все</strong> (клавишу <strong>F4</strong>). Затем выберите нужное значение из предлагаемого списка. В зависимости от настроек список значений может быть <a href="Catalog.ЗначенияСвойствОбъектовИерархия/Help">с иерархией</a> или <a href="Catalog.ЗначенияСвойствОбъектов/Help">без иерархии</a>. При необходимости в эти списки можно добавлять значения. </li> -<li>Выбор значений (в зависимости от настроек) может осуществляться также из справочников приложения. +<li>Выбор значений (в зависимости от настроек) может осуществляться также из справочников приложения. </li> -<li>В зависимости от настроек дополнительных сведений может потребоваться <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> тип данных.</li></ul><h3>Изменение состава дополнительных сведений</h3> -<ul><li>При наличии прав доступа можно настроить новое дополнительное сведение или изменить некоторые настройки уже существующих дополнительных сведений. Для этого выполните команду <strong>Еще</strong> - <strong>Изменить состав дополнительных сведений</strong>.</li></ul><h3>Удаленные дополнительные сведения</h3> -<ul><li>Дополнительное сведение, которое было помечено на удаление, изображается со значком <img src="StdPicture.MarkToDelete"></img>. Для того чтобы окончательно удалить дополнительное сведение, возможно, придется <img src="StdPicture.InputFieldClear"></img> <strong>Очистить</strong> значения. Дважды щелкните мышью по значению, для того чтобы перейти в режим редактирования.</li></ul><h3>См. также:</h3> +<li>В зависимости от настроек дополнительных сведений может потребоваться <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать</strong> тип данных.</li></ul><h3>Изменение состава дополнительных сведений</h3> +<ul><li>При наличии прав доступа можно настроить новое дополнительное сведение или изменить некоторые настройки уже существующих дополнительных сведений. Для этого выполните команду <strong>Еще</strong> - <strong>Изменить состав дополнительных сведений</strong>.</li></ul><h3>Удаленные дополнительные сведения</h3> +<ul><li>Дополнительное сведение, которое было помечено на удаление, изображается со значком <img src="StdPicture.MarkToDelete"></img>. Для того чтобы окончательно удалить дополнительное сведение, возможно, придется <img src="StdPicture.InputFieldClear"></img><strong>Очистить</strong> значения. Дважды щелкните мышью по значению, для того чтобы перейти в режим редактирования.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/РедактированиеМеток/Form.form b/SSL/src/CommonForms/РедактированиеМеток/Form.form index f049de458..46ab54fa6 100644 --- a/SSL/src/CommonForms/РедактированиеМеток/Form.form +++ b/SSL/src/CommonForms/РедактированиеМеток/Form.form @@ -29,6 +29,7 @@ <excludedCommands>Find</excludedCommands> <excludedCommands>FindByCurrentValue</excludedCommands> <excludedCommands>SearchEverywhere</excludedCommands> + <excludedCommands>SearchHistory</excludedCommands> <excludedCommands>SelectAll</excludedCommands> <excludedCommands>ShowMultipleSelection</excludedCommands> <items xsi:type="form:FormGroup"> diff --git a/SSL/src/CommonForms/РедактированиеМеток/Module.bsl b/SSL/src/CommonForms/РедактированиеМеток/Module.bsl index 66783cd4e..39d00d8f0 100644 --- a/SSL/src/CommonForms/РедактированиеМеток/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеМеток/Module.bsl @@ -162,7 +162,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("НаборСвойств", НаборСвойств); - ПараметрыФормы.Вставить("ВидСвойств", ПредопределенноеЗначение("Перечисление.ВидыСвойств.Метки")); + ПараметрыФормы.Вставить("ВидСвойства", ПредопределенноеЗначение("Перечисление.ВидыСвойств.Метки")); ПараметрыФормы.Вставить("ТекущийНаборСвойств", НаборСвойств); ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form index 69c336cd2..7a535bec1 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Form.form @@ -564,11 +564,11 @@ <name>КомандыРедактирования</name> <id>85</id> <items xsi:type="form:Button"> - <name>Переименовать</name> + <name>ИзменитьНастройкиМакета</name> <id>633</id> <title> <key>ru</key> - <value>Переименовать макет...</value> + <value>Изменить настройки макета...</value> true true @@ -576,7 +576,7 @@ true - ПереименоватьРасширеннаяПодсказка + ИзменитьНастройкиМакетаРасширеннаяПодсказка 634 Label true @@ -585,7 +585,7 @@ Left - Form.Command.Переименовать + Form.Command.ИзменитьНастройкиМакета Normal Auto true @@ -1938,6 +1938,159 @@ Compact + + РазмещениеТекстаЕще + 771 + + РазмещениеАвтоЕще + 761 + + <key>ru</key> + <value>Авто</value> + + true + true + + true + + + РазмещениеАвтоЕщеРасширеннаяПодсказка + 762 + Label + true + true + + Left + + + Form.Command.РазмещениеАвто + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РазмещениеПереноситьЕще + 763 + + <key>ru</key> + <value>Переносить</value> + + true + true + + true + + + РазмещениеПереноситьЕщеРасширеннаяПодсказка + 764 + Label + true + true + + Left + + + Form.Command.РазмещениеПереносить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РазмещениеЗабиватьЕще + 777 + + <key>ru</key> + <value>Забивать</value> + + true + true + + true + + + РазмещениеЗабиватьЕщеРасширеннаяПодсказка + 778 + Label + true + true + + Left + + + Form.Command.РазмещениеЗабивать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РазмещениеОбрезатьЕще + 779 + + <key>ru</key> + <value>Обрезать</value> + + true + true + + true + + + РазмещениеОбрезатьЕщеРасширеннаяПодсказка + 780 + Label + true + true + + Left + + + Form.Command.РазмещениеОбрезать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Размещение текста</value> + + true + + РазмещениеТекстаЕщеРасширеннаяПодсказка + 772 + Label + true + true + + Left + + + Popup + + PictureAndText + Normal + + ЦветВсеДействия 673 @@ -3365,6 +3518,232 @@ + + РазмещениеТекста + 759 + + РазмещениеАвто + 786 + + <key>ru</key> + <value>Авто</value> + + true + true + + true + + + РазмещениеАвтоРасширеннаяПодсказка + 787 + Label + true + true + + Left + + + Form.Command.РазмещениеАвто + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + + РазмещениеПереносить + 788 + + <key>ru</key> + <value>Переносить</value> + + true + true + + true + + + РазмещениеПереноситьРасширеннаяПодсказка + 789 + Label + true + true + + Left + + + Form.Command.РазмещениеПереносить + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + + РазмещениеЗабивать + 790 + + <key>ru</key> + <value>Забивать</value> + + true + true + + + РазмещениеЗабиватьРасширеннаяПодсказка + 791 + Label + true + true + + Left + + + Form.Command.РазмещениеЗабивать + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + + РазмещениеОбрезать + 792 + + <key>ru</key> + <value>Обрезать</value> + + true + true + + + РазмещениеОбрезатьРасширеннаяПодсказка + 793 + Label + true + true + + Left + + + Form.Command.РазмещениеОбрезать + Normal + Auto + true + true + UserCmds + Auto + InCommandBar + + true + true + + true + + + <key>ru</key> + <value>Размещение текста (командная панель)</value> + + + РазмещениеТекстаРасширеннаяПодсказка + 760 + Label + true + true + + Left + + + + Compact + + + + Области + 765 + + НазначитьИмя + 767 + true + true + + true + + + НазначитьИмяРасширеннаяПодсказка + 768 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.SetName + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + УдалитьИмя + 769 + true + true + + true + + + УдалитьИмяРасширеннаяПодсказка + 770 + Label + true + true + + Left + + + Form.Item.ТабличныйДокумент.StandardCommand.RemoveName + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Области</value> + + + ОбластиРасширеннаяПодсказка + 766 + Label + true + true + + Left + + + + Compact + + КоманднаяПанельКолонтитулов 478 @@ -4113,6 +4492,60 @@ ГруппаНазначениеМакета 735 + + ФорматСохраненияВыгрузки + 756 + + <key>ru</key> + <value>Формат сохранения выгрузки</value> + + true + true + + true + + + ФорматСохраненияВыгрузки + + + OnChange + ФорматСохраненияВыгрузкиПриИзменении + + + ФорматСохраненияВыгрузкиРасширеннаяПодсказка + 758 + Label + true + true + + Left + + + + ФорматСохраненияВыгрузкиКонтекстноеМеню + 757 + true + + InputField + Enter + true + Left + true + + + Clearing + ФорматСохраненияВыгрузкиОчистка + + 21 + true + true + false + true + true + true + Normal + + ЗаголовокНазначение 737 @@ -4747,6 +5180,80 @@ false + + СтраницаОбразецВыгрузки + 781 + + Выгрузка + 783 + + <key>ru</key> + <value>Выгрузка</value> + + true + true + + true + + + Выгрузка + + None + + ВыгрузкаРасширеннаяПодсказка + 785 + Label + true + true + + Left + + + + ВыгрузкаКонтекстноеМеню + 784 + true + + TextDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Страница образец выгрузки</value> + + + СтраницаОбразецВыгрузкиРасширеннаяПодсказка + 782 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true @@ -6243,6 +6750,83 @@ true + + МакетДляВыгрузкиОбъекта + 55 + + Boolean + + + true + + + true + + + + ФорматСохраненияВыгрузки + + <key>ru</key> + <value>Формат сохранения выгрузки</value> + + 56 + + EnumRef.ФорматыВыгрузкиОбъектов + + + true + + + true + + + + Выгрузка + + <key>ru</key> + <value>Выгрузка</value> + + 54 + + String + + + + true + + + true + + + + ОсновнаяПечатнаяФорма + 52 + + Boolean + + + true + + + true + + + + НаименованиеПечатнойФормы + 53 + + String + + 100 + + + + true + + + true + + ЗаписатьИЗакрыть @@ -6772,10 +7356,10 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>Переименовать</name> + <name>ИзменитьНастройкиМакета</name> <title> <key>ru</key> - <value>Переименовать макет...</value> + <value>Изменить настройки макета...</value> 42 @@ -6783,7 +7367,7 @@ - Переименовать + ИзменитьНастройкиМакета Auto @@ -6889,6 +7473,105 @@ Auto Auto + + РазмещениеАвто + + <key>ru</key> + <value>Авто</value> + + 43 + + ru + Автоматическое размещение текста + + + true + + + CommonPicture.РазмещениеТекстаАвто + + + + РазмещениеАвто + + + Auto + Auto + + + РазмещениеЗабивать + + <key>ru</key> + <value>Забивать</value> + + 44 + + ru + Забивать текст + + + true + + + CommonPicture.РазмещениеТекстаЗабивать + + + + РазмещениеЗабивать + + + Auto + Auto + + + РазмещениеОбрезать + + <key>ru</key> + <value>Обрезать</value> + + 45 + + ru + Обрезать текст + + + true + + + CommonPicture.РазмещениеТекстаОбрезать + + + + РазмещениеОбрезать + + + Auto + Auto + + + РазмещениеПереносить + + <key>ru</key> + <value>Переносить</value> + + 46 + + ru + Переносить текст + + + true + + + CommonPicture.РазмещениеТекстаПереносить + + + + РазмещениеПереносить + + + Auto + ТабличныйДокумент @@ -6982,6 +7665,34 @@ Boolean + + МакетДляВыгрузкиОбъекта + + Boolean + + + + ФорматСохраненияВыгрузки + + EnumRef.ФорматыВыгрузкиОбъектов + + + + ОсновнаяПечатнаяФорма + + Boolean + + true + + + НаименованиеПечатнойФормы + + String + + 100 + + + diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html index d4f714a93..365ed55cd 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html @@ -1,49 +1,60 @@

                    Предназначена для редактирования табличного документа.

                    -

                    Для редактирования табличного документа или макета в печатной форме или табличном документе выполните команду Изменить макет меню Еще.

                    -

                    Важно: при редактировании макетов печатных форм необходимо иметь в виду, что изменение имен областей, а также параметров макета может привести к потере работоспособности печатной формы. Восстановление стандартной печатной формы выполняется в списке Макеты печатных форм.

                    +

                    Для редактирования табличного документа, макета печатной формы или макета файла выгрузки выполните команду Изменить макет меню Еще.

                    +

                    Важно: при редактировании макетов печатных форм или макетов файлов выгрузки необходимо иметь в виду, что изменение имен областей, а также параметров макета может привести к потере работоспособности.

                    Редактирование

                    -
                    • Для редактирования можно использовать стандартные кнопки форматирования: можно изменить  размер и тип шрифта, выравнивание. Остальные команды форматирования (например, цвет фона и шрифта, границы и т.п.) можно найти в меню Еще. +
                      • Для редактирования можно использовать стандартные кнопки форматирования: можно изменить размер и тип шрифта, выравнивание. Остальные команды форматирования (например, цвет фона и шрифта, границы и т.п.) можно найти в меню Еще.
                      • -
                      • Можно Объединить ячейки с помощью соответствующей команды меню Еще, а также разъединить выделенные ячейки с помощью повторного выполнения этой же команды. +
                      • Можно Объединить ячейки с помощью соответствующей команды меню Еще, а также разъединить выделенные ячейки с помощью повторного выполнения этой же команды.
                      • -
                      • Можно Вставить примечание с помощью соответствующей команды меню Еще. +
                      • Можно Вставить примечание с помощью соответствующей команды меню Еще.
                      • -
                      • По окончании редактирования нажмите Записать и закрыть.

                      Создание или редактирование пользовательской печатной формы

                      -
                      В списке макетов нажмите кнопку Создать или Копировать.
                      +
                    • По окончании редактирования нажмите Записать и закрыть.

                    Создание или редактирование макета

                    +
                    В списке макетов нажмите кнопку Создать или Копировать.

                    -
                    С помощью кнопок панели навигации верхнего ряда можно:
                    • отменить или повторить действие;
                    • -
                    • проверить вид макета на бумаге;
                    • -
                    • задать колонтитулы макета печатной формы;
                    • -
                    • сформировать образец печатной формы по макету;
                    • -
                    • повторять выбранные строки в начале/конце страницы;
                    • -
                    • переключиться на макет на другом языке.
                    +
                    С помощью кнопок панели навигации верхнего ряда можно: +
                    • проверить вид макета на бумаге;
                    • +
                    • Для макета печатной формы можно задать колонтитулы;
                    • +
                    • сформировать образец печатной формы и файла выгрузки по макету;
                    • +
                    • Переключиться на макет на другом языке;
                    В нижнем ряду панели навигации также предусмотрены стандартные кнопки редактирования и форматирования, а также можно:
                    -
                    •  очистить формат выделенной ячейки;
                    • -
                    •  открыть меню работы над ячейками (перейти к ячейке, объединить ячейки и т.д.)
                    • -
                    •  открыть меню работы над картинками.
                    Окно редактирования печатной формы состоит из четырех частей:
                    • В левой верхней части строится макет печатной формы;
                    • +
                      • открыть меню работы над ячейками (перейти к ячейке, объединить ячейки и т.д.).
                      • +
                      • открыть меню работы над картинками.
                      • +
                      • автоматически разместить текст в ячейке.
                      • +
                      • перенести текст в ячейке.
                      • +
                      • в поле Назначение перейдите по ссылке, с помощью флажков выберите, для какого объекта предназначен макет печатной формы или макет выгрузки.
                      Окно редактирования печатной формы состоит из четырех частей:
                      • В левой верхней части строится макет печатной формы или макет файлов выгрузки;
                      • В левой нижней части можно просмотреть или написать текст выбранной ячейки;
                      • В правой верхней части находится список доступных полей документа для использования в макете;
                        • Список доступных полей содержит следующие колонки:
                          • Поле - доступное поле элемента-владельца макета. Поле можно перетаскивать в макет. Можно вставить поля табличной части документа.
                          • -
                          • Образец - показывает, как будет выглядеть поле при выводе на печать. В качестве образца для заполнения полей берется случайный элемент списка. 
                          • -
                          •  Формат поля - предусмотрена настройка формата поля. Например, можно выбрать формат даты, отличный от стандартного.
                      • В правой нижней части находится список операторов и функций для создания выражений. Подробное описание операторов и функций можно найти в Инструкции по созданию макетов печатных форм;
                      С помощью кнопки Доступные поля панели навигации можно убрать правую часть для просмотра всего макета.
                    -
                    Для сохранения новой печатной формы нажмите Записать и закрыть.
                    -

                    Перевод макета на другой язык

                    -

                    Приложение позволяет формировать печатные формы на других языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.

                    +
                  • Образец - показывает, как будет выглядеть поле при выводе на печать. В качестве образца для заполнения полей берется случайный элемент списка.
                  • +
                  • Формат поля - предусмотрена настройка формата поля. Например, можно выбрать формат даты, отличный от стандартного.
              • В правой нижней части находится список операторов и функций для создания выражений. Подробное описание операторов и функций можно найти в Инструкции по созданию макетов печатных форм;
              С помощью кнопки Доступные поля панели навигации можно убрать правую часть для просмотра всего макета.
              +
              Для сохранения новой печатной формы или файла выгрузки нажмите Записать и закрыть.
              +

              Формат сохранения выгрузки

              +

              В макете выгрузки необходимо указать формат сохранения выгрузки. На панели навигации доступны стандартные кнопки редактирования и форматирования. В зависимости от формата сохранения выгрузки могут быть ограничены определенные кнопки:

              +

              +
                +
              • в макетах формата XML, JSON, DBF недоступны кнопки настройки форматирования текста;
              • +
              • в макетах формата XML, JSON доступны команды Назначить имя/Убрать имя для управления областями строк.
              • +
              • некоторые форматы имеют свои структурные ограничения, которые необходимо учитывать при настройке макетов для корректного формирования файлов:
              • +
                • DBF - структура макета должна представлять собой таблицу: заголовок и его назначение. Наименование колонок должно содержать только латинские буквы. Длина наименования колонки не более 10 символов. Объединение колонок запрещено.
                • +
                • XML и JSON - структура макетов должна состоять из двух столбцов: наименование поля и его значение. Поля могут быть объединены в один элемент - тогда они должны входить в одну область строки. При записи макета производится проверка написания имен элементов согласно спецификации форматов (использование тех или иных символов).
                • +
                • DBF, HTML, TXT, XLS, MXL - запрещено использование областей строк/столбцов/ячеек (проверяется при записи макета).
                • +
                • XLS, XLSX, HTML, MXL - поддерживается использование изображений и форматированный текст.

              Перевод макета на другой язык

              +

              Приложение позволяет формировать печатные формы и файлы выгрузки на других языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.

              Для этого необходимо:

                -
              • выбрать дополнительные языки печатных форм.
              • -
              • Ввести на дополнительном языке наименования, выводимые в печатной форме - элементы различных списков приложения. После специальных настроек можно использовать автоматический перевод.
              • -
              • добавить перевод макета печатной формы на дополнительный язык.
              • +
              • Выбрать дополнительные языки.
              • +
              • Ввести на дополнительном языке наименования, выводимые в печатной форме или файле выгрузки - элементы различных списков приложения. После специальных настроек можно использовать автоматический перевод.
              • +
              • Добавить перевод на дополнительный язык.
                • После добавления других языков при редактировании макета появляется кнопка выбора языка.
                • Откройте на редактирование нужный макет, переключите на дополнительный язык и выполните перевод.
                • В макете следует переводить только статический текст, например заголовки, подписи и т.д.
                • -
                • Не нужно переводить имена областей и параметры. Параметры в печатной форме отображаются в угловых скобках, например, <Наименование>. Параметры могут находиться внутри шаблонов текста, в этом случае они отображаются в квадратных скобках, например, <Счет на оплату №[Номер]от[Дата]>, в этом случае переводить следует только текст шаблона за скобками.
                • -
                • Кнопка позволяет рядом расположить оригинал и переводимую печатную форму для удобства перевода и его проверки.
              После сохранения макета в колонке Доступные языки добавляется язык, на который был выполнен перевод.

              Переключение режимов редактирования и просмотра

              -
              • Для переключения режимов нажмите кнопку Редактирование. В режиме просмотра кнопки редактирования макета становится неактивными.

              Печать макета

              +
            • Не нужно переводить имена областей и параметры. Параметры в печатной форме отображаются в угловых скобках, например, <Наименование>. Параметры могут находиться внутри шаблонов текста, в этом случае они отображаются в квадратных скобках, например, <Счет на оплату №[Номер]от[Дата]>, в этом случае переводить следует только текст шаблона за скобками.
            • +
            • Кнопка позволяет рядом расположить оригинал и переводимую форму для удобства перевода и его проверки.
          После сохранения макета в колонке Доступные языки добавляется язык, на который был выполнен перевод.

          Переключение режимов редактирования и просмотра

          +
          • Для переключения режимов нажмите кнопку Редактирование. В режиме просмотра кнопки редактирования макета становится неактивными.

          Печать макета

          • Выполните команду Печать меню Еще, для того чтобы распечатать макет.
          • @@ -51,7 +62,7 @@
            Для Предварительного просмотра макета перед печатью выполните соответствующую команду меню Еще.
          • -
            Для того чтобы изменить настройки печати, нажмите Еще - Параметры страницы.

          Редактирование во внешнем приложении

          -
          • -
            Открыть макет в приложении можно с помощью команды Еще - Редактировать во внешнем приложении.

          См. также:

          +
          Для того чтобы изменить настройки печати, нажмите Еще - Параметры страницы.

          Выгрузка и загрузка макета

          +
          • Выполните команду Выгрузить в файл меню Еще, для того чтобы выгрузить макет .
          • +
          • Выполните команду Загрузить из файла меню Еще, для того чтобы загрузить макет из файла.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index 175237bb6..5cc5a8a9a 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -51,7 +51,27 @@ Элементы.КнопкаПоказатьСкрытьОригинал.Видимость = ЭтоМакет; Элементы.КнопкаПоказатьСкрытьОригиналВсеДействия.Видимость = ЭтоМакет; Элементы.УдалитьШтампЭП.Видимость = ЭтоМакет; - + + МакетДляВыгрузкиОбъекта = Параметры.МакетДляВыгрузкиОбъекта; + ФорматСохраненияВыгрузки = Параметры.ФорматСохраненияВыгрузки; + Если МакетДляВыгрузкиОбъекта + И НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) Тогда + + ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XLSX; + + КонецЕсли; + + Элементы.ФорматСохраненияВыгрузки.Видимость = МакетДляВыгрузкиОбъекта; + Элементы.ТекстНазначение.Доступность = НЕ МакетДляВыгрузкиОбъекта; + Элементы.ЗаголовокНазначение.Доступность = НЕ МакетДляВыгрузкиОбъекта; + + ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиТребующиеНаличиеОбластей(); + ВыводитьКомандыИменОбластей = + (МакетДляВыгрузкиОбъекта + И ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) <> Неопределено); + Элементы.НазначитьИмя.Видимость = ВыводитьКомандыИменОбластей; + Элементы.УдалитьИмя.Видимость = ВыводитьКомандыИменОбластей; + Если ЭтоМакет Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); @@ -70,7 +90,10 @@ Элементы.ТекстНазначение.Заголовок = ПредставлениеИсточниковДанных(ИсточникиДанных); ИмяДокумента = Параметры.ИмяДокумента; - Элементы.Переименовать.Видимость = ЗначениеЗаполнено(Параметры.Ссылка) + ОсновнаяПечатнаяФорма = Параметры.ОсновнаяПечатнаяФорма; + НаименованиеПечатнойФормы = Параметры.НаименованиеПечатнойФормы; + + Элементы.ИзменитьНастройкиМакета.Видимость = ЗначениеЗаполнено(Параметры.Ссылка) Или ПустаяСтрока(ИдентификаторМакета) И ПустаяСтрока(Параметры.ПутьКФайлу); Элементы.УдалитьЯзыкМакета.Видимость = Не ЗначениеЗаполнено(Параметры.Ссылка) И ПустаяСтрока(Параметры.ПутьКФайлу); @@ -195,6 +218,8 @@ Элементы.ПовторятьВКонцеСтраницы.Видимость = Ложь; КонецЕсли; + ВидимостьКнопокУправленияТекстом(ЭтотОбъект); + Элементы.ВерхнийКолонтитул.Видимость = Ложь; Элементы.НижнийКолонтитул.Видимость = Ложь; @@ -297,6 +322,26 @@ КонецПроцедуры +&НаКлиенте +Процедура ФорматСохраненияВыгрузкиПриИзменении(Элемент) + + ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиТребующиеНаличиеОбластей(); + ВыводитьКомандыИменОбластей = + (МакетДляВыгрузкиОбъекта И ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) <> Неопределено); + Элементы.НазначитьИмя.Видимость = ВыводитьКомандыИменОбластей; + Элементы.УдалитьИмя.Видимость = ВыводитьКомандыИменОбластей; + ВидимостьКнопокУправленияТекстом(ЭтотОбъект); + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ФорматСохраненияВыгрузкиОчистка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -524,10 +569,15 @@ КонецПроцедуры &НаКлиенте -Процедура Переименовать(Команда) +Процедура ИзменитьНастройкиМакета(Команда) - ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект); - ПоказатьВводСтроки(ОписаниеОповещения, ИмяДокумента, НСтр("ru = 'Введите наименование макета'"), 100, Ложь); + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("НаименованиеМакета", ИмяДокумента); + СтруктураПараметров.Вставить("ИдентификаторМакета", ИдентификаторМакета); + СтруктураПараметров.Вставить("КодЯзыка", ТекущийЯзык); + СтруктураПараметров.Вставить("ВладелецМакета", Образец); + + ПриИзмененииНастроекМакета(СтруктураПараметров); КонецПроцедуры @@ -555,6 +605,46 @@ КонецПроцедуры +&НаКлиенте +Процедура РазмещениеАвто(Команда) + + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто; + КонецЦикла; + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура РазмещениеЗабивать(Команда) + + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать; + КонецЦикла; + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура РазмещениеОбрезать(Команда) + + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать; + КонецЦикла; + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + +&НаКлиенте +Процедура РазмещениеПереносить(Команда) + + Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить; + КонецЦикла; + ОбновитьПометкиКнопокКоманднойПанели(); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -642,6 +732,17 @@ Элементы.ВыровнятьПоСерединеВсеДействия.Пометка = Элементы.ВыровнятьПоСередине.Пометка; Элементы.ВыровнятьПоНижнемуКраюВсеДействия.Пометка = Элементы.ВыровнятьПоНижнемуКраю.Пометка; + // Размещение + Элементы.РазмещениеАвто.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто); + Элементы.РазмещениеПереносить.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить); + Элементы.РазмещениеЗабивать.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать); + Элементы.РазмещениеОбрезать.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать); + + Элементы.РазмещениеАвтоЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто); + Элементы.РазмещениеПереноситьЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить); + Элементы.РазмещениеЗабиватьЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать); + Элементы.РазмещениеОбрезатьЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать); + #КонецЕсли КонецПроцедуры @@ -763,13 +864,31 @@ ОчиститьПодсветку(); - ЕстьСсылка = ЗначениеЗаполнено(Параметры.Ссылка); - Если ЭтоНовый() И Не ЭтоМакет И Не ЕстьСсылка Или РедактированиеЗапрещено Тогда - НачатьДиалогСохраненияФайла(ОбработчикЗавершения, ОсвободитьФайл); - Возврат; - КонецЕсли; + Если МакетДляВыгрузкиОбъекта Тогда - ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл); + Если НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) Тогда + + ТекстСообщения = Нстр("ru = 'Поле ""Формат сохранения"" не заполнено'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "ФорматСохраненияВыгрузки"); + Возврат; + + Иначе + + ПроверитьНаличиеНеИспользуемыхСвойств(ОбработчикЗавершения, ОсвободитьФайл); + + КонецЕсли; + + Иначе + + ЕстьСсылка = ЗначениеЗаполнено(Параметры.Ссылка); + Если ЭтоНовый() И Не ЭтоМакет И Не ЕстьСсылка Или РедактированиеЗапрещено Тогда + НачатьДиалогСохраненияФайла(ОбработчикЗавершения, ОсвободитьФайл); + Возврат; + КонецЕсли; + + ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл); + + КонецЕсли; КонецПроцедуры @@ -788,8 +907,23 @@ Если ЗаписатьМакет(Истина, ДополнительныеПараметры.АдресМакетаВоВременномХранилище) Тогда ПослеЗаписиТабличногоДокумента(ДополнительныеПараметры.ОбработчикЗавершения, ОсвободитьФайл); Иначе - ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьЗаписьТабличногоДокумента", ЭтотОбъект, ДополнительныеПараметры); - ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Макет заполнен некорректно. Продолжить запись?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если НЕ МакетДляВыгрузкиОбъекта Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПродолжитьЗаписьТабличногоДокумента", + ЭтотОбъект, + ДополнительныеПараметры); + ТекстВопроса = НСтр("ru = 'Макет заполнен некорректно. Продолжить запись?'"); + ПоказатьВопрос( + ОписаниеОповещения, + ТекстВопроса, + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Нет); + + КонецЕсли; + КонецЕсли; Иначе ТабличныйДокумент.НачатьЗапись( @@ -826,6 +960,11 @@ УстановитьЗаголовок(); СохраненныеЯзыкиМакета.Добавить(ТекущийЯзык); + Если Параметры.ОсновнаяПечатнаяФорма <> ОсновнаяПечатнаяФорма Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Параметры.ОсновнаяПечатнаяФорма = ОсновнаяПечатнаяФорма + КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда Если ЗначениеЗаполнено(Параметры.ПрисоединенныйФайл) Тогда МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); @@ -967,10 +1106,14 @@ КонецПроцедуры &НаСервере -Процедура ОбновитьТабличныйДокумент(ЗагруженныйТабличныйДокумент) +Процедура ОбновитьТабличныйДокумент(Знач ЗагруженныйТабличныйДокумент) ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ЗагруженныйТабличныйДокумент); КонецПроцедуры +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - входной и выходной параметр. +// ЗагруженныйТабличныйДокумент - ТабличныйДокумент +// &НаСервереБезКонтекста Процедура ЗаполнитьТабличныйДокумент(ТабличныйДокумент, Знач ЗагруженныйТабличныйДокумент) Для НомерСтроки = 1 По ЗагруженныйТабличныйДокумент.ВысотаТаблицы Цикл @@ -994,7 +1137,14 @@ ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре = ЗагруженныйТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре; ТабличныйДокумент.НижнийКолонтитул.ТекстСправа = ЗагруженныйТабличныйДокумент.НижнийКолонтитул.ТекстСправа; - Для Каждого Область Из ТабличныйДокумент.Области Цикл + ТаблицаОбластей = ТаблицаОбластей(ЗагруженныйТабличныйДокумент); + Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл + + Область = ТабличныйДокумент.Области.Найти(ТекущаяОбласть.Имя); + Если Область = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Или ТипЗнч(Область) = Тип("РисунокТабличногоДокумента") Тогда @@ -1115,22 +1265,26 @@ Возврат; КонецЕсли; - ПеревестиТекстыМакета(); - -КонецПроцедуры - -&НаСервере -Процедура ПеревестиТекстыМакета() - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда - МодульПереводТекстаНаДругиеЯзыки = ОбщегоНазначения.ОбщийМодуль("ПереводТекстаНаДругиеЯзыки"); - МодульПереводТекстаНаДругиеЯзыки.ПеревестиТекстыТабличногоДокумента(ТабличныйДокумент, ТекущийЯзык, ОбщегоНазначения.КодОсновногоЯзыка()); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииПеревода", ЭтотОбъект); + МодульПереводТекстаНаДругиеЯзыкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПереводТекстаНаДругиеЯзыкиКлиент"); + МодульПереводТекстаНаДругиеЯзыкиКлиент.ПеревестиТекстыТабличногоДокумента( + ТабличныйДокумент, ТекущийЯзык, ОбщегоНазначенияКлиент.КодОсновногоЯзыка(), ЭтотОбъект, ОписаниеОповещения); КонецЕсли; Модифицированность = Истина; КонецПроцедуры +&НаКлиенте +Процедура ПриЗавершенииПеревода(ПереведенныйТабличныйДокумент, ДополнительныеПараметры) Экспорт + + Если ТипЗнч(ПереведенныйТабличныйДокумент) = Тип("ТабличныйДокумент") Тогда + ТабличныйДокумент = ПереведенныйТабличныйДокумент; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПоказатьСкрытьОригинал(Команда) @@ -1172,12 +1326,16 @@ &НаКлиенте Процедура ОповеститьОЗаписиТабличногоДокумента() - ПараметрыОповещения = Новый Структура; - ПараметрыОповещения.Вставить("ПутьКФайлу", Параметры.ПутьКФайлу); - ПараметрыОповещения.Вставить("ИмяОбъектаМетаданныхМакета", ИдентификаторМакета); - ПараметрыОповещения.Вставить("КодЯзыка", ТекущийЯзык); - ПараметрыОповещения.Вставить("Представление", ИмяДокумента); - ПараметрыОповещения.Вставить("ИсточникиДанных", ИсточникиДанных.ВыгрузитьЗначения()); + ПараметрыОповещения = СтандартныеПодсистемыКлиент.НовыйПараметрОповещенияЗаписиТабличногоДокумента(); + ПараметрыОповещения.ПутьКФайлу = Параметры.ПутьКФайлу; + ПараметрыОповещения.ИмяОбъектаМетаданныхМакета = ИдентификаторМакета; + ПараметрыОповещения.КодЯзыка = ТекущийЯзык; + ПараметрыОповещения.Представление = ИмяДокумента; + ПараметрыОповещения.ИсточникиДанных = ИсточникиДанных.ВыгрузитьЗначения(); + ПараметрыОповещения.ОсновнаяПечатнаяФорма = ОсновнаяПечатнаяФорма; + ПараметрыОповещения.НаименованиеПечатнойФормы = НаименованиеПечатнойФормы; + ПараметрыОповещения.ФорматСохраненияВыгрузки = ФорматСохраненияВыгрузки; + ПараметрыОповещения.МакетДляВыгрузкиОбъекта = МакетДляВыгрузкиОбъекта; Если ЗаписьВыполнена Тогда ИмяСобытия = "Запись_ТабличныйДокумент"; @@ -1313,7 +1471,7 @@ Возврат; КонецЕсли; - РазместитьРисунокВТабличномДокументе(ВыбранноеПоле, СтандартнаяОбработка, Область.Лево, Область.Верх); + РазместитьРисунокВТабличномДокументе(ВыбранноеПоле, Область.Лево, Область.Верх, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда СтандартнаяОбработка = Ложь; @@ -1325,8 +1483,14 @@ КонецПроцедуры +// Параметры: +// ВыбранноеПоле - см. КонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей +// Лево - Число +// Верх - Число +// СтандартнаяОбработка - Число - выходной параметр. +// &НаСервере -Процедура РазместитьРисунокВТабличномДокументе(ВыбранноеПоле, СтандартнаяОбработка, Лево, Верх) +Процедура РазместитьРисунокВТабличномДокументе(Знач ВыбранноеПоле, Знач Лево, Знач Верх, СтандартнаяОбработка) Область = ТабличныйДокумент.Область(Верх, Лево, Верх, Лево); @@ -1536,6 +1700,8 @@ Элементы.ПовторятьВКонцеСтраницы.Пометка = Ложь; КонецЕсли; + ДоступностьКнопокУправленияТекстом(ТекущаяОбласть); + КонецПроцедуры &НаСервере @@ -1584,17 +1750,26 @@ &НаКлиенте Процедура ОчиститьФормат(Команда) + ТекущаяОбласть = Элементы.ТабличныйДокумент.ТекущаяОбласть; - ТекущаяОбласть.Шрифт = Неопределено; - ТекущаяОбласть.ЦветРамки = ЦветПоУмолчанию(); - ТекущаяОбласть.ЦветТекста = ЦветПоУмолчанию(); - ТекущаяОбласть.ЦветУзора = ЦветПоУмолчанию(); - ТекущаяОбласть.ЦветФона = ЦветПоУмолчанию(); - ТекущаяОбласть.ВертикальноеПоложение = Неопределено; - ТекущаяОбласть.ВертикальноеПоложениеКартинки = Неопределено; - ТекущаяОбласть.ГоризонтальноеПоложение = Неопределено; - ТекущаяОбласть.ГоризонтальноеПоложениеКартинки = Неопределено; + ОчиститьФорматОбласти(ТекущаяОбласть); Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьФорматОбласти(Область) + + Область.Шрифт = Неопределено; + Область.ЦветРамки = ЦветПоУмолчанию(); + Область.ЦветТекста = ЦветПоУмолчанию(); + Область.ЦветУзора = ЦветПоУмолчанию(); + Область.ЦветФона = ЦветПоУмолчанию(); + Область.ВертикальноеПоложение = Неопределено; + Область.ВертикальноеПоложениеКартинки = Неопределено; + Область.ГоризонтальноеПоложение = Неопределено; + Область.ГоризонтальноеПоложениеКартинки = Неопределено; + КонецПроцедуры &НаКлиентеНаСервереБезКонтекста @@ -2179,6 +2354,9 @@ КонецЕсли; ОбработанныеОбласти = Новый Соответствие(); + НомерПервойЗаполненнойСтроки = 0; + НомерПервойЗаполненнойКолонки = 0; + МассивИменКолонок = Новый Массив; // Массив из строка Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл @@ -2196,6 +2374,27 @@ Если ЗначениеЗаполнено(Область.Текст) Тогда ПредставлениеПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'стр. %1 кол. %2'"), НомерСтроки, НомерКолонки); ЗаменитьПредставленияПараметров(Область.Текст, , Отказ, ПредставлениеПоля); + + Если НомерПервойЗаполненнойСтроки = 0 Тогда + НомерПервойЗаполненнойСтроки = НомерСтроки; + НомерПервойЗаполненнойКолонки = НомерКолонки; + КонецЕсли; + + КонецЕсли; + + Если МакетДляВыгрузкиОбъекта Тогда + + ДанныеДляПроверки = Новый Структура; + ДанныеДляПроверки.Вставить("НомерПервойЗаполненнойСтроки", НомерПервойЗаполненнойСтроки); + ДанныеДляПроверки.Вставить("НомерПервойЗаполненнойКолонки", НомерПервойЗаполненнойКолонки); + ДанныеДляПроверки.Вставить("НомерСтроки", НомерСтроки); + ДанныеДляПроверки.Вставить("НомерКолонки", НомерКолонки); + ДанныеДляПроверки.Вставить("Макет", Макет); + ДанныеДляПроверки.Вставить("Область", Область); + ДанныеДляПроверки.Вставить("ТекстЯчейки", Область.Текст); + + ПроверитьПоляВыгрузки(ДанныеДляПроверки, МассивИменКолонок, Отказ); + КонецЕсли; КонецЦикла; @@ -2210,17 +2409,1044 @@ Для Каждого Область Из Макет.Области Цикл Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") - И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + Если МакетДляВыгрузкиОбъекта + И НЕ ЗначениеЗаполнено(Область.ПараметрРасшифровки) Тогда + Продолжить; + КонецЕсли; + Область.ПараметрРасшифровки = ФормулаИзПредставления(Область.ПараметрРасшифровки); КонецЕсли; КонецЦикла; - ПереименоватьУсловныеОбласти(Макет, ПрефиксУсловнойОбласти()); + ПереименоватьУсловныеОбласти(Макет, ПрефиксУсловнойОбласти(), МакетДляВыгрузкиОбъекта); + + Если МакетДляВыгрузкиОбъекта Тогда + + ПроверитьОбластиВыгрузки(Макет, Отказ); + + КонецЕсли; Возврат Макет; КонецФункции +&НаСервереБезКонтекста +Процедура ПроверитьЯчейкиОбъединены(Знач Область, Знач НомерСтроки, Знач НомерКолонки, Отказ) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + Шаблон = НСтр("ru = 'Объединение ячеек запрещено (стр. %1 кол. %2)'"); + ИдентификаторОбласти = МодульУправлениеПечатью.ИдентификаторОбласти(Область); + МассивАдреса = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИдентификаторОбласти, ":"); + + Если МассивАдреса[0] <> МассивАдреса[2] + ИЛИ МассивАдреса[1] <> МассивАдреса[3] Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПроверитьИмяПоляDBF(Знач ТекстЯчейки, Знач НомерСтроки, Знач НомерКолонки, Отказ) + + Если СтрДлина(ТекстЯчейки) > 10 Тогда + + Шаблон = НСтр("ru = 'Имя поля не может превышать 10 знаков (стр. %1 кол. %2)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + ДопустимыеСимволы = "0123456789_"; + Для Индекс = 1 По СтрДлина(ТекстЯчейки) Цикл + + Символ = Сред(ТекстЯчейки, Индекс, 1); + Если СтрНайти(ДопустимыеСимволы, Символ) <> 0 Тогда + Продолжить; + КонецЕсли; + + КодСимвола = КодСимвола(Символ); + + ПервыйСимволЛатиницыВРег = 65; + ПоследнийСимволЛатиницыВРег = 90; + ПервыйСимволЛатиницыНРег = 97; + ПоследнийСимволЛатиницыНРег = 122; + + ОшибкаКодаСимвола = ((КодСимвола < ПервыйСимволЛатиницыВРег) + Или (КодСимвола > ПоследнийСимволЛатиницыВРег + И КодСимвола < ПервыйСимволЛатиницыНРег) + Или (КодСимвола > ПоследнийСимволЛатиницыНРег)); + Если ОшибкаКодаСимвола Тогда + + Шаблон = НСтр("ru = 'Имена полей могут содержать только латинские буквы, цифры и символ подчеркивания (стр. %1 кол. %2)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + Прервать; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПроверитьПоляВыгрузкиDBF(Знач ДанныеДляПроверки, МассивИменКолонок, Отказ) + + НомерСтрокиИменПолей = ДанныеДляПроверки.НомерПервойЗаполненнойСтроки; + НомерСтроки = ДанныеДляПроверки.НомерСтроки; + НомерКолонки = ДанныеДляПроверки.НомерКолонки; + Макет = ДанныеДляПроверки.Макет; + Область = ДанныеДляПроверки.Область; + ТекстЯчейки = ДанныеДляПроверки.ТекстЯчейки; + + Если НомерСтрокиИменПолей = 0 Тогда + Возврат; + КонецЕсли; + + ПроверитьЯчейкиОбъединены(Область, НомерСтроки, НомерКолонки, Отказ); + + Если НЕ ПустаяСтрока(ТекстЯчейки) Тогда + + Если НомерСтроки = НомерСтрокиИменПолей Тогда + + Если МассивИменКолонок.Найти(ТекстЯчейки) <> Неопределено Тогда + + Шаблон = НСтр("ru = 'Неуникальное имя колонки (стр. %1 кол. %2)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + Иначе + + ПроверитьИмяПоляDBF(ТекстЯчейки, НомерСтроки, НомерКолонки, Отказ); + МассивИменКолонок.Добавить(ТекстЯчейки); + + КонецЕсли; + + Иначе + + ОбластьИменКолонок = Макет.Область(НомерСтрокиИменПолей, НомерКолонки); + ТекстЯчейкиИмен = ОбластьИменКолонок.Текст; + + Если НомерСтроки > НомерСтрокиИменПолей + 1 Тогда + + Шаблон = НСтр("ru = 'Данные выгрузки должны указываться в строке %1 (стр. %2 кол. %3)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерСтрокиИменПолей + 1, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + Если ПустаяСтрока(ТекстЯчейкиИмен) Тогда + + Шаблон = НСтр("ru = 'Не указано имя колонки (кол. %1)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПроверитьПоляВыгрузкиXML_JSON(Знач ДанныеДляПроверки, ЭтоXML, Отказ) + + НомерСтроки = ДанныеДляПроверки.НомерСтроки; + НомерКолонки = ДанныеДляПроверки.НомерКолонки; + Область = ДанныеДляПроверки.Область; + Макет = ДанныеДляПроверки.Макет; + ТекстЯчейки = ДанныеДляПроверки.ТекстЯчейки; + + ПроверитьЯчейкиОбъединены(Область, НомерСтроки, НомерКолонки, Отказ); + + НомерКолонкиИменПолей = 1; + НомерКолонкиЗначений = 2; + + Если НомерКолонки > НомерКолонкиЗначений + И НЕ ПустаяСтрока(ТекстЯчейки) Тогда + + Шаблон = НСтр("ru = 'Имена полей и их значения должны располагаться в %1 и во %2 колонке соответственно (стр. %3 кол. %4)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерКолонкиИменПолей, + НомерКолонкиЗначений, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + Если НомерКолонки = НомерКолонкиИменПолей Тогда + + Если НЕ ПустаяСтрока(ТекстЯчейки) Тогда + + ПроверитьСимволыЯчейки(ТекстЯчейки, НомерСтроки, НомерКолонки, ЭтоXML, Отказ); + + КонецЕсли; + + ОбластьЗначение = Макет.Область(НомерСтроки, НомерКолонки + 1); + ТекстЗначения = ОбластьЗначение.Текст; + + Если ПустаяСтрока(ТекстЯчейки) <> ПустаяСтрока(ТекстЗначения) Тогда + + Шаблон = НСтр("ru = 'Имя поля и его значение не сопоставлены (стр. %1)'"); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + НомерСтроки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ТекстСоответствуетТребованиямКИменам(Знач Текст, ЭтоXML = Истина, ЗапрещеннаяПодстрока = Неопределено) + + Результат = Новый Структура; + Результат.Вставить("СодержитЗапрещеннуюПодстроку", Ложь); + Результат.Вставить("СоответствуетТребованиямКИменам", Истина); + + Если ЭтоXML Тогда + ШаблонВыражения = "^[\p{L}_]+[\w.-]*$"; + Иначе + ШаблонВыражения = "^[\p{L}_]\w*$"; + КонецЕсли; + + Если ЗапрещеннаяПодстрока <> Неопределено Тогда + + ДлинаЗапрещеннойПодстроки = СтрДлина(ЗапрещеннаяПодстрока); + КоличествоСимволов = Мин(СтрДлина(СокрЛП(Текст)), ДлинаЗапрещеннойПодстроки); + ПроверяемаяПодстрока = Лев(СокрЛП(Текст), КоличествоСимволов); + Результат.СодержитЗапрещеннуюПодстроку = (НРег(ПроверяемаяПодстрока) = НРег(ЗапрещеннаяПодстрока)); + + КонецЕсли; + + Выражение = Текст; + РезультатВыражения = СтрНайтиПоРегулярномуВыражению(Выражение, ШаблонВыражения); + Результат.СоответствуетТребованиямКИменам = (РезультатВыражения.Длина <> 0); + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ПроверитьСимволыЯчейки(Знач ТекстЯчейки, Знач НомерСтроки, Знач НомерКолонки, Знач ЭтоXML, Отказ) + + ЗапрещеннаяПодстрока = Неопределено; + Если ЭтоXML Тогда + + ШаблонНеСоответствуетТребованиям = НСтр("ru = 'Имя поля ""%1"" не соответствует требованиям к именам токенов XML (стр. %2 кол. %3)'"); + ЗапрещеннаяПодстрока = "xml"; + + Иначе + + ШаблонНеСоответствуетТребованиям = НСтр("ru = 'Имя поля ""%1"" не соответствует требованиям к именам переменных (стр. %2 кол. %3)'"); + + КонецЕсли; + + РезультатПроверки = ТекстСоответствуетТребованиямКИменам(ТекстЯчейки, ЭтоXML, ЗапрещеннаяПодстрока); + + Если РезультатПроверки.СодержитЗапрещеннуюПодстроку Тогда + + ШаблонЗапрещеннаяСтрока = НСтр("ru = 'Имя поля ""%1"" не может начинаться с ""%2"" (стр. %3 кол. %4)'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗапрещеннаяСтрока, + ТекстЯчейки, + ЗапрещеннаяПодстрока, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + Если НЕ РезультатПроверки.СоответствуетТребованиямКИменам Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонНеСоответствуетТребованиям, + ТекстЯчейки, + НомерСтроки, + НомерКолонки); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПоляВыгрузки(Знач ДанныеДляПроверки, МассивИменКолонок, Отказ) + + Если НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) + ИЛИ НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + Возврат; + КонецЕсли; + + МассивФорматовБезИспользованияТД = Новый Массив; // Массив из ПеречислениеСсылка.ФорматыВыгрузкиОбъектов + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + МассивФорматовБезИспользованияТД = + МодульВыгрузкаОбъектовВФайлы.ФорматыВыгрузкиБезИспользованияТабличногоДокумента(); + + Если МассивФорматовБезИспользованияТД.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.DBF Тогда + ПроверитьПоляВыгрузкиDBF(ДанныеДляПроверки, МассивИменКолонок, Отказ); + ИначеЕсли ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда + ПроверитьПоляВыгрузкиXML_JSON(ДанныеДляПроверки, Истина, Отказ); + Иначе + ПроверитьПоляВыгрузкиXML_JSON(ДанныеДляПроверки, Ложь, Отказ); + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// Макет - ТабличныйДокумент +// ВсеОбласти - Булево - все области +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Имя - Строка +// * Верх - Число +// * Низ - Число +// * ПараметрРасшифровки - Строка +// * Приоритет - Число +// * ЭтоОбластьУсловияВывода - Булево +// * НомерОбласти - Число +// +&НаСервереБезКонтекста +Функция ТаблицаОбластей(Знач Макет, ВсеОбласти = Ложь) + + ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка"); + ОписаниеТиповЧисло = Новый ОписаниеТипов("Число"); + ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); + + ТаблицаОбластей = Новый ТаблицаЗначений; + ТаблицаОбластей.Колонки.Добавить("Имя", ОписаниеТиповСтрока); + ТаблицаОбластей.Колонки.Добавить("Верх", ОписаниеТиповЧисло); + ТаблицаОбластей.Колонки.Добавить("Низ", ОписаниеТиповЧисло); + ТаблицаОбластей.Колонки.Добавить("ПараметрРасшифровки", ОписаниеТиповСтрока); + ТаблицаОбластей.Колонки.Добавить("Приоритет", ОписаниеТиповЧисло); + ТаблицаОбластей.Колонки.Добавить("ЭтоОбластьУсловияВывода", ОписаниеТиповБулево); + ТаблицаОбластей.Колонки.Добавить("ЭтоОбластьКартинки", ОписаниеТиповБулево); + + Для Каждого Область Из Макет.Области Цикл + + ДобавлятьОбластьВТаблицу = Ложь; + + Если ВсеОбласти + ИЛИ ((ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки) + ИЛИ ТипЗнч(Область) = Тип("РисунокТабличногоДокумента")) Тогда + + ДобавлятьОбластьВТаблицу = Истина; + + КонецЕсли; + + Если ДобавлятьОбластьВТаблицу Тогда + + НоваяСтрока = ТаблицаОбластей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Область); + НоваяСтрока.ЭтоОбластьКартинки = (ТипЗнч(Область) = Тип("РисунокТабличногоДокумента")); + + Если Не ПустаяСтрока(Область.ПараметрРасшифровки) + И ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + НоваяСтрока.ЭтоОбластьУсловияВывода = Истина; + НоваяСтрока.Приоритет = 100; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + ТаблицаОбластей.Сортировать("Верх, Приоритет"); + + Возврат ТаблицаОбластей; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьНаличиеНеИспользуемыхСвойств(ОбработчикЗавершения, ОсвободитьФайл) + + Если НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) Тогда + Возврат; + КонецЕсли; + + ЕстьНеиспользуемыеСвойства = ЕстьФорматированиеИОбластиНеИспользуемыеФорматомВыгрузки(); + + Если ЕстьНеиспользуемыеСвойства Тогда + + НачатьДиалогУдаленияСвойств(ОбработчикЗавершения, ОсвободитьФайл); + + Иначе + + ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура НачатьДиалогУдаленияСвойств(Знач ОбработчикЗавершения, ОсвободитьФайл) + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + ПараметрыОповещения.Вставить("ОсвободитьФайл", ОсвободитьФайл); + + Оповещение = Новый ОписаниеОповещения("НачатьДиалогУдаленияСвойствЗавершение", ЭтотОбъект, ПараметрыОповещения); + + ТекстПредупреждения = НСтр("ru = 'Форматирование макета или его содержимое не соответствует требованиям формата. При сохранении макета будут очищены неподходящие настройки.'"); + + Кнопки = Новый СписокЗначений(); + Кнопки.Добавить("ОчиститьИСохранить", НСтр("ru = 'Очистить и сохранить'")); + Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'")); + + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание; + ПараметрыВопроса.КнопкаПоУмолчанию = "ОчиститьИСохранить"; + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + ПараметрыВопроса.Заголовок = ""; + + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ТекстПредупреждения, Кнопки, ПараметрыВопроса); + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьДиалогУдаленияСвойствЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса <> Неопределено Тогда + + Если РезультатВопроса.Значение = "ОчиститьИСохранить" Тогда + + ОбработчикЗавершения = ДополнительныеПараметры.ОбработчикЗавершения; + ОсвободитьФайл = ДополнительныеПараметры.ОсвободитьФайл; + + УдалитьНеИспользуемыеСвойства(); + ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл); + ОповеститьОЗаписиТабличногоДокумента(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьНеИспользуемыеСвойства() + + ОбработатьОбластиТабличногоДокумента(); + + ФорматыБезФорматированияТекста = ФорматыВыгрузкиНеТребующиеРаботыСТекстом(); + + Если ФорматыБезФорматированияТекста.Найти(ФорматСохраненияВыгрузки) <> Неопределено Тогда + + Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл + + Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл + + Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки); + ОчиститьФорматОбласти(Область); + Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто; + + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбработатьОбластиТабличногоДокумента() + + ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиРазрешеноНаличияОбластей(); + ФорматыСКартинками = ФорматыВыгрузкиРазрешеноНаличияКартинок(); + + МассивОбластейКартинок = Новый Массив; + МассивЗапрещенныхОбластей = Новый Массив; + + Если ФорматыСКартинками.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда + + Для Каждого ТекущаяОбласть Из ТабличныйДокумент.Рисунки Цикл + МассивОбластейКартинок.Добавить(ТекущаяОбласть); + КонецЦикла; + + КонецЕсли; + + ТаблицаДляАнализа = ТаблицаОбластей(ТабличныйДокумент, Истина); + + Для Каждого ТекущаяСтрокаТаблицы Из ТаблицаДляАнализа Цикл + + Если ТекущаяСтрокаТаблицы.ЭтоОбластьУсловияВывода + ИЛИ ТекущаяСтрокаТаблицы.ЭтоОбластьКартинки Тогда + Продолжить; + КонецЕсли; + + ТекущаяОбласть = ТабличныйДокумент.Область(ТекущаяСтрокаТаблицы.Имя); + + Если ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда + + МассивЗапрещенныхОбластей.Добавить(ТекущаяОбласть); + + Иначе + + Если ТекущаяОбласть.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + МассивЗапрещенныхОбластей.Добавить(ТекущаяОбласть); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Для Каждого ТекущаяОбласть Из МассивОбластейКартинок Цикл + ТабличныйДокумент.Рисунки.Удалить(ТекущаяОбласть); + КонецЦикла; + + Для Каждого ТекущаяОбласть Из МассивЗапрещенныхОбластей Цикл + ТекущаяОбласть.Имя = ""; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ЕстьФорматированиеИОбластиНеИспользуемыеФорматомВыгрузки() + + ЕстьНеИспользуемыеМодификации = ЕстьОбластиНеИспользуемыеФорматомВыгрузки(); + + ФорматыБезФорматированияТекста = ФорматыВыгрузкиНеТребующиеРаботыСТекстом(); + + Если НЕ ЕстьНеИспользуемыеМодификации + И ФорматыБезФорматированияТекста.Найти(ФорматСохраненияВыгрузки) <> Неопределено Тогда + + НовыйТабличныйДокумент = Новый ТабличныйДокумент; + ОбластьПоУмолчанию = НовыйТабличныйДокумент.Область(1, 1, 1, 1); + ШрифтПоУмолчанию = ОбластьПоУмолчанию.Шрифт; + ЦветПоУмолчанию = ЦветПоУмолчанию(); + + Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл + + Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл + + Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки); + + ЕстьНеИспользуемыеМодификации = ОбластьМодифицирована( + Область, + ОбластьПоУмолчанию, + ШрифтПоУмолчанию, + ЦветПоУмолчанию); + + Если ЕстьНеИспользуемыеМодификации Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ЕстьНеИспользуемыеМодификации Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат ЕстьНеИспользуемыеМодификации; + +КонецФункции + +&НаКлиенте +Функция ОбластьМодифицирована(Область, ОбластьПоУмолчанию, ШрифтПоУмолчанию, ЦветПоУмолчанию) + + Возврат НЕ (Область.Шрифт = ШрифтПоУмолчанию + И Область.ЦветРамки = ЦветПоУмолчанию + И Область.ЦветТекста = ЦветПоУмолчанию + И Область.ЦветУзора = ЦветПоУмолчанию + И Область.ЦветФона = ЦветПоУмолчанию + И Область.ВертикальноеПоложение = ОбластьПоУмолчанию.ВертикальноеПоложение + И Область.ВертикальноеПоложениеКартинки = ОбластьПоУмолчанию.ВертикальноеПоложениеКартинки + И Область.ГоризонтальноеПоложение = ОбластьПоУмолчанию.ГоризонтальноеПоложение + И Область.ГоризонтальноеПоложениеКартинки = ОбластьПоУмолчанию.ГоризонтальноеПоложениеКартинки + И Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто); + +КонецФункции + +&НаСервере +Функция ЕстьОбластиНеИспользуемыеФорматомВыгрузки() + + ЕстьЗапрещенныеОбласти = Ложь; + ЕстьОбластиСКартинками = Ложь; + + ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиРазрешеноНаличияОбластей(); + ФорматыСКартинками = ФорматыВыгрузкиРазрешеноНаличияКартинок(); + + ТаблицаДляАнализа = ТаблицаОбластей(ТабличныйДокумент, Истина); + + Для Каждого ТекущаяСтрокаТаблицы Из ТаблицаДляАнализа Цикл + + Если ТекущаяСтрокаТаблицы.ЭтоОбластьУсловияВывода + ИЛИ ТекущаяСтрокаТаблицы.ЭтоОбластьКартинки Тогда + Продолжить; + КонецЕсли; + + Если ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда + + ЕстьЗапрещенныеОбласти = Истина; + Прервать; + + Иначе + + ТекущаяОбласть = ТабличныйДокумент.Область(ТекущаяСтрокаТаблицы.Имя); + + Если ТекущаяОбласть.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + ЕстьЗапрещенныеОбласти = Истина; + Прервать; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ФорматыСКартинками.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда + + ЕстьОбластиСКартинками = (ТабличныйДокумент.Рисунки.Количество() > 0); + + КонецЕсли; + + Возврат Макс(ЕстьЗапрещенныеОбласти, ЕстьОбластиСКартинками); + +КонецФункции + +&НаСервере +Процедура ПроверитьОбластиУсловий(Знач ТаблицаОбластей, Отказ) + + НомерСтрокиОбласти = 0; + Для Каждого ОбластьМакета Из ТаблицаОбластей Цикл + + Если НомерСтрокиОбласти <> ОбластьМакета.Верх Тогда + + НомерСтрокиОбласти = ОбластьМакета.Верх; + Продолжить; + + КонецЕсли; + + Если ОбластьМакета.ЭтоОбластьУсловияВывода Тогда + + Шаблон = НСтр("ru = 'Область условия должна располагаться ниже области владельца хотя бы на одну строку (стр. %1)'"); + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + ОбластьМакета.Верх); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьИмяОбластей(Знач ТаблицаОбластей, Отказ) + + Если ФорматСохраненияВыгрузки <> Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда + Возврат; + КонецЕсли; + + ЗапрещеннаяПодстрока = "xml"; + ШаблонНеСоответствуетТребованиям = НСтр("ru = 'Имя области ""%1"" не соответствует требованиям к именам токенов XML (стр. %2)'"); + ШаблонЗапрещеннаяСтрока = НСтр("ru = 'Имя области ""%1"" не может начинаться с ""%2"" (стр. %3)'"); + + Для Каждого ОбластьМакета Из ТаблицаОбластей Цикл + + Если ОбластьМакета.ЭтоОбластьУсловияВывода Тогда + Продолжить; + КонецЕсли; + + ИмяОбласти = ОбластьМакета.Имя; + МассивИмен = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбласти, "_"); + + Если МассивИмен.Количество() = 1 Тогда + + РезультатПроверки = ТекстСоответствуетТребованиямКИменам(ИмяОбласти,, ЗапрещеннаяПодстрока); + + Если РезультатПроверки.СодержитЗапрещеннуюПодстроку Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗапрещеннаяСтрока, + ИмяОбласти, + ЗапрещеннаяПодстрока, + ОбластьМакета.Верх); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + Если НЕ РезультатПроверки.СоответствуетТребованиямКИменам Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонНеСоответствуетТребованиям, + ИмяОбласти, + ОбластьМакета.Верх); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + Иначе + + ПроверитьМассивИменОбласти(ИмяОбласти, МассивИмен, ОбластьМакета, ЗапрещеннаяПодстрока, Отказ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьМассивИменОбласти(Знач ИмяОбласти, Знач МассивИмен, ОбластьМакета, ЗапрещеннаяПодстрока, Отказ) + + Верх = ОбластьМакета.Верх; + СчетчикМассива = 0; + НомерПервойПодстроки = 1; + НомерВторойПодстроки = 2; + + ШаблонНеСоответствуетТребованиямДо = НСтр("ru = 'Часть имени области ""%1"" до первого символа ''_'' не соответствует требованиям к именам токенов XML (стр. %2)'"); + ШаблонНеСоответствуетТребованиямПосле = НСтр("ru = 'Часть имени области ""%1"" после первого символа ''_'' не соответствует требованиям к именам токенов XML (стр. %2)'"); + ШаблонЗапрещеннаяСтрока = НСтр("ru = 'Имя области не может начинаться с ""%1"" (стр. %2)'"); + ШаблонЗапрещеннаяСтрокаПосле = НСтр("ru = 'Часть имени области ""%1"" после первого символа ''_'' не может начинаться с ""%2"" (стр. %3)'"); + + Для Каждого ТекущееИмя Из МассивИмен Цикл + + СчетчикМассива = СчетчикМассива + 1; + + Если СчетчикМассива > НомерВторойПодстроки Тогда + Прервать; + КонецЕсли; + + РезультатПроверки = ТекстСоответствуетТребованиямКИменам(ТекущееИмя,, ЗапрещеннаяПодстрока); + + Если РезультатПроверки.СодержитЗапрещеннуюПодстроку Тогда + + Если СчетчикМассива = НомерПервойПодстроки Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗапрещеннаяСтрока, + ИмяОбласти, + ЗапрещеннаяПодстрока, + Верх); + + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонЗапрещеннаяСтрокаПосле, + ИмяОбласти, + ЗапрещеннаяПодстрока, + Верх); + + КонецЕсли; + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + Если НЕ РезультатПроверки.СоответствуетТребованиямКИменам Тогда + + Если СчетчикМассива = НомерПервойПодстроки Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонНеСоответствуетТребованиямДо, + ИмяОбласти, + Верх); + + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонНеСоответствуетТребованиямПосле, + ИмяОбласти, + Верх); + + КонецЕсли; + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПересечениеОбластей(Знач ТаблицаОбластей, Отказ) + + ТаблицаОбластейВЗапрос = ТаблицаОбластей.Скопировать(); + ТаблицаОбластейВЗапрос.Колонки.Добавить("НомерОбласти", Новый ОписаниеТипов("Число")); + ТаблицаОбластейВЗапрос.Колонки.Верх.Имя = "ВерхОбласти"; + ТаблицаОбластейВЗапрос.Колонки.Низ.Имя = "НизОбласти"; + + СчетчикСтрок = 0; + Для Каждого ТекущаяСтрока Из ТаблицаОбластейВЗапрос Цикл + + СчетчикСтрок = СчетчикСтрок + 1; + ТекущаяСтрока.НомерОбласти = СчетчикСтрок; + + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицаОбластей", ТаблицаОбластейВЗапрос); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаОбластей.Имя КАК Имя, + | ТаблицаОбластей.ВерхОбласти КАК ВерхОбласти, + | ТаблицаОбластей.НизОбласти КАК НизОбласти, + | ТаблицаОбластей.НомерОбласти КАК НомерОбласти + |ПОМЕСТИТЬ ВТ_ТаблицаОбластей + |ИЗ + | &ТаблицаОбластей КАК ТаблицаОбластей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ_ТаблицаОбластей.Имя КАК ИмяОбласти, + | ВТ_ТаблицаОбластейПересечение.Имя КАК ИмяОбластиПересечения + |ИЗ + | ВТ_ТаблицаОбластей КАК ВТ_ТаблицаОбластей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТаблицаОбластей КАК ВТ_ТаблицаОбластейПересечение + | ПО ВТ_ТаблицаОбластей.ВерхОбласти < ВТ_ТаблицаОбластейПересечение.ВерхОбласти + | И ВТ_ТаблицаОбластей.НизОбласти < ВТ_ТаблицаОбластейПересечение.НизОбласти + | И ВТ_ТаблицаОбластей.НизОбласти >= ВТ_ТаблицаОбластейПересечение.ВерхОбласти + | И ВТ_ТаблицаОбластей.НомерОбласти <> ВТ_ТаблицаОбластейПересечение.НомерОбласти + | + |УПОРЯДОЧИТЬ ПО + | ВТ_ТаблицаОбластей.НомерОбласти"; + + Результат = Запрос.Выполнить(); + + Если НЕ Результат.Пустой() Тогда + + Шаблон = НСтр("ru = 'Для типа макета выгрузки ""%1"" не допускается пересечение областей ""%2"" и ""%3""'"); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + ФорматСохраненияВыгрузки, + Выборка.ИмяОбласти, + Выборка.ИмяОбластиПересечения); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьВхождениеТаблиц(Знач Макет, Знач ТаблицаОбластей, Отказ) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Образец) Тогда + Возврат; + КонецЕсли; + + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + + КоллекцияПолей = ЭтотОбъект[ИмяСпискаПолей()]; + + Объекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец); + ОтображаемыеПоля = ЗаполнитьСписокОтображаемыхПолей(КоллекцияПолей); + + Попытка + + ДанныеПечати = МодульУправлениеПечатью.ДанныеПечати(Объекты, ОтображаемыеПоля, ТекущийЯзык); + + Исключение + + РазблокироватьДанныеДляРедактирования(КлючОбъектаРедактирования, УникальныйИдентификатор); + ВызватьИсключение ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + КонецПопытки; + + ОбластиМакета = МодульУправлениеПечатью.ОбластиМакета(Макет, ДанныеПечати); + ОбластиТаблиц = ОбластиМакета.ОбластиТаблиц; + + ТаблицыМакета = МодульВыгрузкаОбъектовВФайлы.ТаблицыМакета(Макет, ОбластиТаблиц); + ТаблицыМакетаОбластей = ТаблицыМакета.Скопировать(); + ТаблицыМакетаОбластей.Очистить(); + ТаблицыМакетаОбластей.Колонки.Добавить("ИмяОбласти", Новый ОписаниеТипов("Строка")); + + Для Каждого ТекущаяТаблицаМакета Из ТаблицыМакета Цикл + + ВерхТаблицы = ТекущаяТаблицаМакета.Верх; + НизТаблицы = ТекущаяТаблицаМакета.Низ; + МаксимальныйВерхОбласти = 0; + МинимальныйНизОбласти = 9999999999; + + Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл + + Если ТекущаяОбласть.ЭтоОбластьУсловияВывода Тогда + Продолжить; + КонецЕсли; + + ВерхОбласти = ТекущаяОбласть.Верх; + НизОбласти = ТекущаяОбласть.Низ; + + Если ВерхОбласти <= ВерхТаблицы + И НизОбласти >= НизТаблицы Тогда + + МаксимальныйВерхОбласти = Макс(МаксимальныйВерхОбласти, ВерхОбласти); + МинимальныйНизОбласти = Мин(МинимальныйНизОбласти, НизОбласти); + + КонецЕсли; + + КонецЦикла; + + Если МаксимальныйВерхОбласти <> 0 Тогда + + Отбор = Новый Структура; + Отбор.Вставить("Верх", МаксимальныйВерхОбласти); + Отбор.Вставить("Низ", МинимальныйНизОбласти); + НайденныеСтроки = ТаблицаОбластей.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() Тогда + + ИмяОбласти = НайденныеСтроки[0].Имя; + НоваяСтрока = ТаблицыМакетаОбластей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущаяТаблицаМакета); + НоваяСтрока.ИмяОбласти = ИмяОбласти; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ТаблицыМакетаОбластей.Сортировать("ИмяОбласти, Верх"); + АнализТаблицыМакетаОбластей(ТаблицыМакетаОбластей, ТаблицаОбластей, Отказ); + +КонецПроцедуры + +&НаСервере +Процедура АнализТаблицыМакетаОбластей(Знач ТаблицыМакетаОбластей, Знач ТаблицаОбластей, Отказ) + + Если ТаблицыМакетаОбластей.Количество() <= 1 Тогда + Возврат; + КонецЕсли; + + Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл + + Если ТекущаяОбласть.ЭтоОбластьУсловияВывода Тогда + Продолжить; + КонецЕсли; + + ИмяОбласти = ТекущаяОбласть.Имя; + Отбор = Новый Структура; + Отбор.Вставить("ИмяОбласти", ИмяОбласти); + + НайденныеСтроки = ТаблицыМакетаОбластей.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() <= 1 Тогда + Продолжить; + КонецЕсли; + + ИмяТаблицы = НайденныеСтроки[0].Имя; + + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + + ИмяТаблицыТекущее = НайденнаяСтрока.Имя; + + Если ИмяТаблицы = ИмяТаблицыТекущее Тогда + Продолжить; + КонецЕсли; + + Шаблон = НСтр("ru = 'В области ""%1"" уже есть таблица ""%2"". Область может содержать только одну таблицу (стр. %3)'"); + + ВерхОбласти = НайденнаяСтрока.Верх; + НизОбласти = НайденнаяСтрока.Низ; + + Пока ВерхОбласти <= НизОбласти Цикл + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + ИмяОбласти, + ИмяТаблицы, + ВерхОбласти); + ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ); + ВерхОбласти = ВерхОбласти + 1; + + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьОбластиВыгрузки(Знач Макет, Отказ) + + ТаблицаОбластей = ТаблицаОбластей(Макет); + ОбластиПрисутствуют = (ТаблицаОбластей.Количество() > 0); + + Если ОбластиПрисутствуют Тогда + + ОшибкаОбластиУсловий = Ложь; + ПроверитьОбластиУсловий(ТаблицаОбластей, ОшибкаОбластиУсловий); + Если ОшибкаОбластиУсловий Тогда + Отказ = Истина; + КонецЕсли; + + Если ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XML + ИЛИ ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.JSON Тогда + + Если НЕ ОшибкаОбластиУсловий Тогда + + ПроверитьИмяОбластей(ТаблицаОбластей, Отказ); + + КонецЕсли; + + ПроверитьПересечениеОбластей(ТаблицаОбластей, Отказ); + ПроверитьВхождениеТаблиц(Макет, ТаблицаОбластей, Отказ); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ЗаменитьПредставленияПараметров(Строка, Поле = Неопределено, Отказ = Ложь, ПредставлениеПоля = "") @@ -2335,7 +3561,7 @@ КонецФункции &НаСервере -Функция ПрочитатьМакет(ДвоичныеДанные = Неопределено) +Функция ПрочитатьМакет(Знач ДвоичныеДанные = Неопределено) КодЯзыка = ТабличныйДокумент.КодЯзыка; @@ -2380,12 +3606,18 @@ Для Каждого Область Из Макет.Области Цикл Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") - И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + Если МакетДляВыгрузкиОбъекта + И НЕ ЗначениеЗаполнено(Область.ПараметрРасшифровки) Тогда + Продолжить; + КонецЕсли; + Область.ПараметрРасшифровки = ПредставлениеФормулы(Область.ПараметрРасшифровки); КонецЕсли; КонецЦикла; - ПереименоватьУсловныеОбласти(Макет, ЛокализованныйПрефиксУсловнойОбласти()); + ПереименоватьУсловныеОбласти(Макет, ЛокализованныйПрефиксУсловнойОбласти(), МакетДляВыгрузкиОбъекта); Возврат Макет; @@ -2427,9 +3659,6 @@ Результат.КодЯзыка = КодЯзыка; Результат.Вывести(ТабличныйДокумент); - СистемнаяИнформация = Новый СистемнаяИнформация; - ЕстьФорматСтрок = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.1923") >= 0; - ОбработанныеЯчейки = Новый Соответствие; Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл Для НомерСтолбца = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл @@ -2449,7 +3678,7 @@ КонецЕсли; Ячейка = Результат.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца); - ЗаполнитьЗначенияСвойств(Ячейка, КопируемаяЯчейка, , ?(ЕстьФорматСтрок, "ФорматСтрок", Неопределено)); + ЗаполнитьЗначенияСвойств(Ячейка, КопируемаяЯчейка, , "ФорматСтрок"); Если КопируемаяЯчейка.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда Ячейка.Текст = КопируемаяЯчейка.Текст; @@ -2464,7 +3693,14 @@ Результат.НижнийКолонтитул.ТекстВЦентре = ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре; Результат.НижнийКолонтитул.ТекстСправа = ТабличныйДокумент.НижнийКолонтитул.ТекстСправа; - Для Каждого Область Из Результат.Области Цикл + ТаблицаОбластей = ТаблицаОбластей(ТабличныйДокумент); + Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл + + Область = Результат.Области.Найти(ТекущаяОбласть.Имя); + Если Область = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Или ТипЗнч(Область) = Тип("РисунокТабличногоДокумента") @@ -2555,6 +3791,10 @@ ОписаниеМакета.Ссылка = СсылкаМакета; ОписаниеМакета.ТипМакета = "MXL"; ОписаниеМакета.ИсточникиДанных = ИсточникиДанных.ВыгрузитьЗначения(); + ОписаниеМакета.ОсновнаяПечатнаяФорма = ОсновнаяПечатнаяФорма; + ОписаниеМакета.НаименованиеПечатнойФормы = НаименованиеПечатнойФормы; + ОписаниеМакета.МакетДляВыгрузкиОбъекта = МакетДляВыгрузкиОбъекта; + ОписаниеМакета.ФорматСохраненияВыгрузки = ФорматСохраненияВыгрузки; ИдентификаторМакета = МодульУправлениеПечатью.ЗаписатьМакет(ОписаниеМакета); Если Не ЗначениеЗаполнено(СсылкаМакета) Тогда @@ -2667,13 +3907,7 @@ СистемнаяИнформация = Новый СистемнаяИнформация; ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПлатформы, "8.3.23.838") >= 0 Тогда - ПодключитьОбработчикОжидания("ПодсветитьЯчейкиСВыбраннымПолем", 0.1, Истина); - Иначе -#Если Не ВебКлиент Тогда - ПодключитьОбработчикОжидания("ПодсветитьЯчейкиСВыбраннымПолем", 0.1, Истина); -#КонецЕсли - КонецЕсли; + ПодключитьОбработчикОжидания("ПодсветитьЯчейкиСВыбраннымПолем", 0.1, Истина); КонецПроцедуры @@ -2769,13 +4003,19 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПереименоватьУсловныеОбласти(Макет, Префикс) +Процедура ПереименоватьУсловныеОбласти(Макет, Префикс, МакетДляВыгрузки) Области = Новый Массив; Для Каждого Область Из Макет.Области Цикл Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") - И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + Если МакетДляВыгрузки + И НЕ ЗначениеЗаполнено(Область.ПараметрРасшифровки) Тогда + Продолжить; + КонецЕсли; + Области.Добавить(Область); КонецЕсли; КонецЦикла; @@ -2787,7 +4027,7 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция ПодобратьИмяОбласти(ТабличныйДокумент, Знач Префикс, Область = Неопределено) +Функция ПодобратьИмяОбласти(Знач ТабличныйДокумент, Знач Префикс, Область = Неопределено) ИспользованныеИмена = Новый Соответствие; @@ -2838,8 +4078,24 @@ НСтр("ru = 'Выберите образец, по данным которого будет формироваться печатная форма'"), , ИмяСпискаПолей() + "[0].Образец"); Возврат; КонецЕсли; - СформироватьПечатнуюФорму(); - Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразец; + + ФорматыВыгрузки = Новый Массив; // Массив из ПеречислениеСсылка.ФорматыВыгрузкиОбъектов + ФорматыВыгрузки.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON")); + ФорматыВыгрузки.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML")); + + Если ФорматыВыгрузки.Найти(ФорматСохраненияВыгрузки) <> Неопределено Тогда + + ОчиститьСообщения(); + СформироватьСтруктуруВыгрузки(); + Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразецВыгрузки; + + Иначе + + СформироватьПечатнуюФорму(); + Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразец; + + КонецЕсли; + КонецЕсли; Элементы.ПосмотретьПечатнуюФорму.Пометка = Не Элементы.ПосмотретьПечатнуюФорму.Пометка; @@ -2848,6 +4104,7 @@ Элементы.ПоказыватьКолонтитулы.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка; Элементы.ДействияСДокументом.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка; Элементы.Язык.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка; + Элементы.ФорматСохраненияВыгрузки.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка; КонецПроцедуры @@ -2866,6 +4123,55 @@ КонецПроцедуры +&НаСервере +Процедура СформироватьСтруктуруВыгрузки() + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + Возврат; + КонецЕсли; + + Отказ = Ложь; + Макет = ПодготовитьМакетДляЗаписи(, Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + Ссылки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец); + Выгрузка = ""; + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + Результат = МодульВыгрузкаОбъектовВФайлы.СформироватьСтруктуруДляВыгрузки( + Макет, + ФорматСохраненияВыгрузки, + Ссылки, + ТекущийЯзык); + + СтруктураСДанными = Результат[Образец]; + + ПредставлениеВыгрузки = ""; + ПолноеИмяФайла = ""; + + Если ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда + + МодульВыгрузкаОбъектовВФайлы.ВыполнитьВыгрузкуВXML( + СтруктураСДанными, + ПолноеИмяФайла, + ПредставлениеВыгрузки); + + ИначеЕсли ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.JSON Тогда + + МодульВыгрузкаОбъектовВФайлы.ВыполнитьВыгрузкуВJSON( + СтруктураСДанными, + ПолноеИмяФайла, + ПредставлениеВыгрузки); + + КонецЕсли; + + Выгрузка = ПредставлениеВыгрузки; + +КонецПроцедуры + &НаКлиенте Процедура УдалитьШтампЭП(Команда) @@ -3225,4 +4531,219 @@ Возврат Результат; КонецФункции +&НаКлиенте +Процедура ПриИзмененииНастроекМакета(СтруктураПараметров) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") + И НЕ МакетДляВыгрузкиОбъекта Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ЗавершениеОткрытияНастроекМакета", ЭтотОбъект, Новый Структура("Форма", ЭтотОбъект)); + + МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент"); + МодульУправлениеПечатьюКлиент.ПриИзмененииНастроекМакета(СтруктураПараметров, ОписаниеОповещения); + Иначе + ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект); + ПоказатьВводСтроки(ОписаниеОповещения, ИмяДокумента, НСтр("ru = 'Введите наименование макета'"), 100, Ложь); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеОткрытияНастроекМакета(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого КлючЗначение Из Результат Цикл + + ИмяРеквизита = КлючЗначение.Ключ; + НовоеЗначение = Результат[ИмяРеквизита]; + + Если НовоеЗначение <> ЭтотОбъект[ИмяРеквизита] Тогда + ЭтотОбъект[ИмяРеквизита] = НовоеЗначение; + Модифицированность = Истина; + + Если ИмяРеквизита = "ИмяДокумента" Тогда + УстановитьЗаголовок(); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ФорматыВыгрузкиТребующиеНаличиеОбластей() + + МассивФорматов = Новый Массив; + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML")); + + Возврат МассивФорматов; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ФорматыВыгрузкиНеТребующиеРаботыСТекстом() + + МассивФорматов = Новый Массив; + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.DBF")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.ANSITXT")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.TXT")); + + Возврат МассивФорматов; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ФорматыВыгрузкиРазрешеноНаличияОбластей() + + МассивФорматов = Новый Массив; + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML")); + + Возврат МассивФорматов; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ФорматыВыгрузкиРазрешеноНаличияКартинок() + + МассивФорматов = Новый Массив; + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XLS")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XLSX")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.HTML5")); + МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.MXL")); + + Возврат МассивФорматов; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура ВидимостьКнопокУправленияТекстом(Форма) + + ФорматСохраненияВыгрузки = Форма.ФорматСохраненияВыгрузки; + МакетДляВыгрузкиОбъекта = Форма.МакетДляВыгрузкиОбъекта; + + Если НЕ МакетДляВыгрузкиОбъекта Тогда + Возврат; + КонецЕсли; + + Элементы = Форма.Элементы; + Элементы.ПоказыватьКолонтитулы.Видимость = Ложь; + Элементы.ПовторятьВНачалеСтраницы.Видимость = Ложь; + Элементы.ПовторятьВКонцеСтраницы.Видимость = Ложь; + + ФорматыВыгрузки = ФорматыВыгрузкиНеТребующиеРаботыСТекстом(); + ВидимостьЭлемента = (ФорматыВыгрузки.Найти(ФорматСохраненияВыгрузки) = Неопределено); + + Элементы.ФорматированиеТекста.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументШрифт.Видимость = ВидимостьЭлемента; + Элементы.УменьшитьРазмерШрифта.Видимость = ВидимостьЭлемента; + Элементы.УвеличитьРазмерШрифта.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументЖирный.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументНаклонный.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументПодчеркивание.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументВыровнятьВлево.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументВыровнятьПоЦентру.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументВыровнятьВправо.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументВыровнятьПоШирине.Видимость = ВидимостьЭлемента; + + Элементы.ВыровнятьПоВерхнемуКраю.Видимость = ВидимостьЭлемента; + Элементы.ВыровнятьПоСередине.Видимость = ВидимостьЭлемента; + Элементы.ВыровнятьПоНижнемуКраю.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументЦветФона.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументЦветТекста.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументЦветГраницы.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументОчиститьФормат.Видимость = ВидимостьЭлемента; + + Элементы.ФорматированиеТекстаВсеДействия.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументШрифтВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.УменьшитьРазмерШрифтаВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.УвеличитьРазмерШрифтаВсеДействия.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументЖирныйВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументНаклонныйВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументПодчеркиваниеВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ЗачеркиваниеВсеДействия.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументВыровнятьВлевоВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументВыровнятьПоЦентруВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументВыровнятьВправоВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументВыровнятьПоШиринеВсеДействия.Видимость = ВидимостьЭлемента; + + Элементы.ВыровнятьПоВерхнемуКраюВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ВыровнятьПоСерединеВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ВыровнятьПоНижнемуКраюВсеДействия.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументЦветФонаВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументЦветТекстаВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументЦветГраницыВсеДействия.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументОчиститьФорматВсеДействия.Видимость = ВидимостьЭлемента; + + Элементы.ТабличныйДокументОбъединить.Видимость = ВидимостьЭлемента; + + Элементы.Рисунки.Видимость = ВидимостьЭлемента; + Элементы.Картинка.Видимость = ВидимостьЭлемента; + Элементы.Текст.Видимость = ВидимостьЭлемента; + Элементы.Прямоугольник.Видимость = ВидимостьЭлемента; + Элементы.Прямая.Видимость = ВидимостьЭлемента; + Элементы.Эллипс.Видимость = ВидимостьЭлемента; + Элементы.Сгруппировать.Видимость = ВидимостьЭлемента; + Элементы.Разгруппировать.Видимость = ВидимостьЭлемента; + + Элементы.Границы.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаСлева.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаСверху.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаСправа.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаСнизу.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаВезде.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаВокруг.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументГраницаВнутри.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументТолстаяГраницаВокруг.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументТолстаяГраницаСверху.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументТолстаяГраницаСнизу.Видимость = ВидимостьЭлемента; + Элементы.ТабличныйДокументНетГраницы.Видимость = ВидимостьЭлемента; + + Элементы.Таблица.Видимость = ВидимостьЭлемента; + + Элементы.РазмещениеАвто.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеПереносить.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеЗабивать.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеОбрезать.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеТекстаЕще.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеАвтоЕще.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеПереноситьЕще.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеЗабиватьЕще.Видимость = ВидимостьЭлемента; + Элементы.РазмещениеОбрезатьЕще.Видимость = ВидимостьЭлемента; + +КонецПроцедуры + +&НаКлиенте +Процедура ДоступностьКнопокУправленияТекстом(ТекущаяОбласть) + + ДоступностьЭлемента = (ТипЗнч(ТекущаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента")); + + Элементы.Шрифт.Доступность = ДоступностьЭлемента; + Элементы.ВертикальноеВыравнивание.Доступность = ДоступностьЭлемента; + Элементы.ТабличныйДокументЦветТекста.Доступность = ДоступностьЭлемента; + Элементы.ТабличныйДокументЦветГраницы.Доступность = ДоступностьЭлемента; + Элементы.ТабличныйДокументОчиститьФормат.Доступность = ДоступностьЭлемента; + Элементы.ФорматированиеТекстаВсеДействия.Доступность = ДоступностьЭлемента; + Элементы.РазмещениеТекста.Доступность = ДоступностьЭлемента; + Элементы.РазмещениеТекстаЕще.Доступность = ДоступностьЭлемента; + Элементы.НазначитьИмя.Доступность = ДоступностьЭлемента; + Элементы.УдалитьИмя.Доступность = ДоступностьЭлемента; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/РезультатПроверки/Form.form b/SSL/src/CommonForms/РезультатПроверки/Form.form deleted file mode 100644 index 84b4a6a5d..000000000 --- a/SSL/src/CommonForms/РезультатПроверки/Form.form +++ /dev/null @@ -1,229 +0,0 @@ - - - - <key>ru</key> - <value>Результат проверки</value> - - - ЗаголовокПредупреждения - 5 - true - true - - true - - - ЗаголовокПредупрежденияРасширеннаяПодсказка - 7 - Label - true - true - - Left - - - - ЗаголовокПредупрежденияКонтекстноеМеню - 6 - true - - Label - true - true - - Left - - - - ТекстПредупреждения - 11 - - <key>ru</key> - <value>Текст предупреждения</value> - - true - true - - true - - - ТекстПредупреждения - - None - - ТекстПредупрежденияРасширеннаяПодсказка - 13 - Label - true - true - - Left - - - - ТекстПредупрежденияКонтекстноеМеню - 12 - true - - InputField - Enter - true - Left - true - - 5 - true - true - true - true - true - true - Normal - - - - Инструкция - 8 - - <key>ru</key> - <value>Типичные проблемы при работе с приложениями электронной подписи и их решение</value> - - true - true - - true - - - ИнструкцияРасширеннаяПодсказка - 10 - Label - true - true - - Left - - - - ИнструкцияКонтекстноеМеню - 9 - true - - Label - true - - - Click - ИнструкцияНажатие - - true - Left - - - Top - true - - ФормаКоманднаяПанель - -1 - - ФормаЗакрыть - 16 - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - Form.StandardCommand.Close - Auto - true - true - true - UserCmds - Auto - - Left - - - OnCreateAtServer - ПриСозданииНаСервере - - Abort - Cancel - Help - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes - LockOwner - DefaultButton - true - Vertical - true - auto - true - - ТекстПредупреждения - - <key>ru</key> - <value>Текст предупреждения</value> - - 1 - - String - - - - true - - - true - - - - ОК - - <key>ru</key> - <value>ОК</value> - - 1 - - ru - ОК - - - true - - DontUse - Auto - - - ТекстПредупреждения - - String - - - - - ЗаголовокПредупреждения - - String - - - - - - - - diff --git a/SSL/src/CommonForms/СвязанныеДокументы/Help/ru.html b/SSL/src/CommonForms/СвязанныеДокументы/Help/ru.html index a9215ff67..4d69cce69 100644 --- a/SSL/src/CommonForms/СвязанныеДокументы/Help/ru.html +++ b/SSL/src/CommonForms/СвязанныеДокументы/Help/ru.html @@ -1,12 +1,12 @@ -

          Предназначен для вывода родительских и подчиненных объектов приложения.

          -

          Формируется командой Связанные документы на панели навигации объектов приложения.

          -

          Отчет предоставляет оперативный и наглядный доступ ко всей цепочке взаимосвязанных с точки зрения бизнес-логики документов и списков. Объекты приложения считаются взаимосвязанными, если один объект ссылается на другой. В приложении взаимосвязь объектов выглядит так: в одном объекте приложения (назовем его дочерним) в качестве какого-либо реквизита указан другой объект (назовем его родительским). Отчет позволяет из какого-либо одного объекта приложения увидеть всю цепочку взаимосвязанных с ним объектов.

          -

          В отчет попадают все дочерние и все родительские объекты текущего объекта приложения. В наглядной форме представлена взаимосвязь этих объектов.

          -

          Объект приложения, для которого сформирован отчет, отображается жирным шрифтом. Дерево родительских объектов строится вверх-вправо от объекта, для которого формируется отчет. Дерево дочерних объектов строится вниз-вправо от объекта, для которого формируется отчет.

          +

          Предназначен для вывода родительских и подчиненных объектов приложения.

          +

          Формируется командой Связанные документы на панели навигации объектов приложения.

          +

          Отчет предоставляет оперативный и наглядный доступ ко всей цепочке взаимосвязанных с точки зрения бизнес-логики документов и списков. Объекты приложения считаются взаимосвязанными, если один объект ссылается на другой. В приложении взаимосвязь объектов выглядит так: в одном объекте приложения (назовем его дочерним) в качестве какого-либо реквизита указан другой объект (назовем его родительским). Отчет позволяет из какого-либо одного объекта приложения увидеть всю цепочку взаимосвязанных с ним объектов.

          +

          В отчет попадают все дочерние и все родительские объекты текущего объекта приложения. В наглядной форме представлена взаимосвязь этих объектов.

          +

          Объект приложения, для которого сформирован отчет, отображается жирным шрифтом. Дерево родительских объектов строится вверх-вправо от объекта, для которого формируется отчет. Дерево дочерних объектов строится вниз-вправо от объекта, для которого формируется отчет.

          Доступные действия

          -
          • С помощью двойного щелчка мышью на любом выведенном в отчет объекте можно открыть данный объект для просмотра. +
            • С помощью двойного щелчка мышью на любом выведенном в отчет объекте можно открыть данный объект для просмотра.
            • -
            • С помощью кнопки Обновить можно переформировать отчет. +
            • С помощью кнопки Обновить можно переформировать отчет.
            • С помощью кнопки Вывести для текущего можно сформировать отчет Связанные документы для выделенного объекта.
            \ No newline at end of file diff --git a/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl b/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl index a22e966f8..7b0daa50e 100644 --- a/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl +++ b/SSL/src/CommonForms/СвязанныеДокументы/Module.bsl @@ -90,8 +90,7 @@ #Область СлужебныеПроцедурыИФункции -////////////////////////////////////////////////////////////////////////////////////////////// -// Процедуры вывода в табличный документ. +#Область ПроцедурыВыводаВТабличныйДокумент &НаСервере Процедура ВывестиТабличныйДокумент() @@ -417,8 +416,9 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////////////////// -// Процедуры построения дерева подчиненности документов. +#КонецОбласти + +#Область ПроцедурыПостроенияДереваПодчиненностиДокументов &НаСервере Процедура ОбновитьДеревоСтруктурыПодчиненности() @@ -539,7 +539,7 @@ Для Индекс = 1 По 3 Цикл ТекстПредставление = ТекстПредставление + ", | " + ?(ДопРеквизиты.Количество() >= Индекс, ДопРеквизиты[Индекс - 1], "NULL") - + " КАК ДополнительныйРеквизит" + Индекс; // @query-part + + " КАК ДополнительныйРеквизит" + Индекс; // @query-part-2, @query-part-3 КонецЦикла; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Представление", ТекстПредставление); @@ -1066,8 +1066,9 @@ КонецФункции -////////////////////////////////////////////////////////////////////////////////////////////// -// Процедуры изменения состояния объектов. +#КонецОбласти + +#Область ПроцедурыИзмененияСостоянияОбъектов &НаКлиенте Функция ВыбранныеЭлементы() @@ -1436,3 +1437,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/Сертификат/Help/ru.html b/SSL/src/CommonForms/Сертификат/Help/ru.html index 823880bc2..4dcd47680 100644 --- a/SSL/src/CommonForms/Сертификат/Help/ru.html +++ b/SSL/src/CommonForms/Сертификат/Help/ru.html @@ -12,13 +12,13 @@
            • Подписание - флажок включен, если сертификат предназначен для подписания;
            • Шифрование - флажок влючен, если сертификат предназначен для шифрования.
          • -
          • Субъект - список свойств субъекта сертификата в привычных названиях, которые удалось распознать; +
          • Субъект - список свойств субъекта сертификата в привычных названиях, которые удалось распознать;
          • Издатель - список свойств издателя сертификата в привычных названиях, которые удалось распознать;
          • -
          • Внутреннее содержание - состав и значения свойств, как они указаны в данных сертификата;
          • +
          • Внутреннее содержание - состав и значения свойств, как они указаны в данных сертификата;
          • Путь сертификации - содержит информацию о цепочке сертификатов, которые можно установить в личное хранилище,в хранилище доверенных корневых сертификатов или в найденный контейнер;
          • -
          • Списки отзыва -  ссылки на список отозванных сертификатов, которые устанавливаются с помощью кнопки Установить список отзыва. 

          Выгрузка сертификата

          -
          • Нажмите Сохранить в файл и укажите папку, для того чтобы сохранить данные сертификата на компьютер.

          Проверка сертификата

          +
        • Списки отзыва - ссылки на список отозванных сертификатов, которые устанавливаются с помощью кнопки Установить список отзыва.
        • Выгрузка сертификата

          +
          • Нажмите Сохранить в файл и укажите папку, для того чтобы сохранить данные сертификата на компьютер.

          Проверка сертификата

          • Нажмите Проверить, для того чтобы проверить действительность сертификата.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/Сертификат/Module.bsl b/SSL/src/CommonForms/Сертификат/Module.bsl index a8e9ffeba..729ec5909 100644 --- a/SSL/src/CommonForms/Сертификат/Module.bsl +++ b/SSL/src/CommonForms/Сертификат/Module.bsl @@ -49,8 +49,27 @@ КонецЕсли; СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификат); - ДополнительныеСвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата( - ДанныеСертификата); + + ДоступныДополнительныеСвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата(); + + Если ДоступныДополнительныеСвойстваСертификата Тогда + Элементы.ГруппаЛицензияКриптоПро.Видимость = СвойстваСертификата.СодержитВстроеннуюЛицензиюКриптоПро; + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи( + СвойстваСертификата.АлгоритмОткрытогоКлюча, Истина, Истина); + Элементы.ГруппаОшибкаПолученияСписковОтзыва.Видимость = Ложь; + НазначениеКоды = СтрЗаменить(СвойстваСертификата.Назначение, Символы.ПС, ", "); + Для Каждого Адрес Из СвойстваСертификата.АдресаСписковОтзыва Цикл + НоваяСтрока = СпискиОтзыва.Добавить(); + НоваяСтрока.Адрес = Адрес; + КонецЦикла; + Иначе + ДополнительныеСвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата( + ДанныеСертификата); + Элементы.ГруппаЛицензияКриптоПро.Видимость = ДополнительныеСвойстваСертификата.СодержитВстроеннуюЛицензиюКриптоПро; + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( + ДанныеСертификата, Истина); + ЗаполнитьКодыНазначенияСертификата(СвойстваСертификата.Назначение, НазначениеКоды); + КонецЕсли; НазначениеПодписание = Сертификат.ИспользоватьДляПодписи; НазначениеШифрование = Сертификат.ИспользоватьДляШифрования; @@ -62,16 +81,9 @@ ДатаОкончанияЗакрытогоКлюча = СвойстваСертификата.ДатаОкончанияЗакрытогоКлюча; Элементы.ДатаОкончанияЗакрытогоКлюча.Видимость = ЗначениеЗаполнено(ДатаОкончанияЗакрытогоКлюча); - АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( - ДанныеСертификата, Истина); - Элементы.АлгоритмПодписи.Подсказка = Метаданные.Справочники.ПрограммыЭлектроннойПодписиИШифрования.Реквизиты.АлгоритмПодписи.Подсказка; - Элементы.ГруппаЛицензияКриптоПро.Видимость = ДополнительныеСвойстваСертификата.СодержитВстроеннуюЛицензиюКриптоПро; - - ЗаполнитьКодыНазначенияСертификата(СвойстваСертификата.Назначение, НазначениеКоды); - ЗаполнитьСвойстваСубъекта(Сертификат); ЗаполнитьСвойстваИздателя(Сертификат); @@ -101,19 +113,20 @@ Элементы.ГруппаОшибкаПолученияЦепочкиСертификатов.Видимость = Истина; КонецЕсли; - СвойстваСертификатаРасширенные = ЭлектроннаяПодписьСлужебный.СвойстваСертификатаРасширенные( - ДанныеСертификата, УникальныйИдентификатор, ОбъектКомпоненты); - ОшибкаПриПолученииАдресовСписковОтзываНаСервере = СвойстваСертификатаРасширенные.Ошибка; - ЕстьОшибка = ЗначениеЗаполнено(СвойстваСертификатаРасширенные.Ошибка); - Элементы.ГруппаОшибкаПолученияСписковОтзыва.Видимость = ЕстьОшибка; - Элементы.СпискиОтзыва.Видимость = Не ЕстьОшибка; - Если Не ЕстьОшибка Тогда - Для Каждого ТекущийАдрес Из СвойстваСертификатаРасширенные.СвойстваСертификата.АдресаСписковОтзыва Цикл - НоваяСтрока = СпискиОтзыва.Добавить(); - НоваяСтрока.Адрес = ТекущийАдрес; - КонецЦикла; + Если Не ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + СвойстваСертификатаРасширенные = ЭлектроннаяПодписьСлужебный.СвойстваСертификатаРасширенные( + ДанныеСертификата, УникальныйИдентификатор, ОбъектКомпоненты); + ОшибкаПриПолученииАдресовСписковОтзываНаСервере = СвойстваСертификатаРасширенные.Ошибка; + ЕстьОшибка = ЗначениеЗаполнено(СвойстваСертификатаРасширенные.Ошибка); + Элементы.ГруппаОшибкаПолученияСписковОтзыва.Видимость = ЕстьОшибка; + Элементы.СпискиОтзыва.Видимость = Не ЕстьОшибка; + Если Не ЕстьОшибка Тогда + Для Каждого ТекущийАдрес Из СвойстваСертификатаРасширенные.СвойстваСертификата.АдресаСписковОтзыва Цикл + НоваяСтрока = СпискиОтзыва.Добавить(); + НоваяСтрока.Адрес = ТекущийАдрес; + КонецЦикла; + КонецЕсли; КонецЕсли; - КонецЕсли; Если Параметры.Свойство("ОткрытиеИзФормыЭлементаСертификата") Тогда @@ -164,7 +177,8 @@ КонецЕсли; Если ТекущаяСтраница = Элементы.СтраницаСпискиОтзыва - И СпискиОтзыва.Количество() = 0 Тогда + И СпискиОтзыва.Количество() = 0 + И Не ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда ЗаполнитьСпискиОтзыва(); @@ -400,7 +414,10 @@ ВнутреннееСодержание.Очистить(); ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата); Сертификат = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); - + ДоступныДополнительныеСвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата(); + Элементы.ВнутреннееСодержаниеИдентификатор.Видимость = Истина; + Элементы.ВнутреннееСодержаниеСвойство.Видимость = Истина; + Если ГруппаВнутреннихПолей = "Общие" Тогда Элементы.ВнутреннееСодержаниеИдентификатор.Видимость = Ложь; @@ -408,11 +425,20 @@ ДобавитьСвойство(Сертификат, "ДатаНачала", НСтр("ru = 'Дата начала'")); ДобавитьСвойство(Сертификат, "ДатаОкончания", НСтр("ru = 'Дата окончания'")); - Если ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ДатаНачалаЗакрытогоКлюча) Тогда - ДобавитьСвойство(ДополнительныеСвойстваСертификата, "ДатаНачалаЗакрытогоКлюча", НСтр("ru = 'Дата начала закрытого ключа'")); - КонецЕсли; - Если ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча) Тогда - ДобавитьСвойство(ДополнительныеСвойстваСертификата, "ДатаОкончанияЗакрытогоКлюча", НСтр("ru = 'Дата окончания закрытого ключа'")); + Если ДоступныДополнительныеСвойстваСертификата Тогда + Если ЗначениеЗаполнено(Сертификат.УниверсальнаяДатаНачалаЗакрытогоКлюча) Тогда + ДобавитьСвойство(Сертификат, "УниверсальнаяДатаНачалаЗакрытогоКлюча", НСтр("ru = 'Дата начала закрытого ключа'")); + КонецЕсли; + Если ЗначениеЗаполнено(Сертификат.УниверсальнаяДатаОкончанияЗакрытогоКлюча) Тогда + ДобавитьСвойство(Сертификат, "УниверсальнаяДатаОкончанияЗакрытогоКлюча", НСтр("ru = 'Дата окончания закрытого ключа'")); + КонецЕсли; + Иначе + Если ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ДатаНачалаЗакрытогоКлюча) Тогда + ДобавитьСвойство(ДополнительныеСвойстваСертификата, "ДатаНачалаЗакрытогоКлюча", НСтр("ru = 'Дата начала закрытого ключа'")); + КонецЕсли; + Если ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча) Тогда + ДобавитьСвойство(ДополнительныеСвойстваСертификата, "ДатаОкончанияЗакрытогоКлюча", НСтр("ru = 'Дата окончания закрытого ключа'")); + КонецЕсли; КонецЕсли; ДобавитьСвойство(Сертификат, "ИспользоватьДляПодписи", НСтр("ru = 'Использовать для подписи'")); @@ -421,15 +447,49 @@ ДобавитьСвойство(Сертификат, "Отпечаток", НСтр("ru = 'Отпечаток'"), Истина); ДобавитьСвойство(Сертификат, "СерийныйНомер", НСтр("ru = 'Серийный номер'"), Истина); + ИначеЕсли ГруппаВнутреннихПолей = "РасширенныеСвойства" И ДоступныДополнительныеСвойстваСертификата Тогда + + ИменаИдентификаторов = Новый СписокЗначений; + ИменаИдентификаторов.Добавить("2.5.29.31", НСтр("ru = 'Точки распространения списков отзыва'")); + ИменаИдентификаторов.Добавить("2.5.29.16", НСтр("ru = 'Период использования закрытого ключа'")); + ИменаИдентификаторов.Добавить("2.5.29.15", НСтр("ru = 'Использование ключа'")); + ИменаИдентификаторов.Добавить("2.5.29.37", НСтр("ru = 'Улучшенный ключ'")); + ИменаИдентификаторов.Добавить("1.2.643.100.114", НСтр("ru = 'Тип идентификации при выдаче сертификата'")); + ИменаИдентификаторов.Добавить("1.2.643.100.112", НСтр("ru = 'Средства электронной подписи и УЦ издателя'")); + ИменаИдентификаторов.Добавить("2.5.29.32", НСтр("ru = 'Политики сертификата'")); + ИменаИдентификаторов.Добавить("1.3.6.1.5.5.7.1.1", НСтр("ru = 'Адреса для загрузки сертификатов издателя и OCSP служб'")); + ИменаИдентификаторов.Добавить("1.2.643.100.111", НСтр("ru = 'Средство электронной подписи владельца'")); + ИменаИдентификаторов.Добавить("2.5.29.19", НСтр("ru = 'Основные ограничения'")); + ИменаИдентификаторов.Добавить("1.2.643.2.2.49.2", НСтр("ru = 'Ограниченная лицензия КриптоПро CSP'")); + + Коллекция = Сертификат.ДополненияСертификата; + + ИменаИИдентификаторы = Новый Соответствие; + + Для Каждого ЭлементСписка Из ИменаИдентификаторов Цикл + Если Коллекция[ЭлементСписка.Значение] <> Неопределено Тогда + ДобавитьСвойство(Коллекция, ЭлементСписка.Значение, ЭлементСписка.Представление); + КонецЕсли; + ИменаИИдентификаторы.Вставить(ЭлементСписка.Значение, Истина); + ИменаИИдентификаторы.Вставить(ЭлементСписка.Представление, Истина); + КонецЦикла; + + Для Каждого КлючИЗначение Из Коллекция Цикл + Если ИменаИИдентификаторы.Получить(КлючИЗначение.Ключ) = Неопределено Тогда + ДобавитьСвойство(Коллекция, КлючИЗначение.Ключ, КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; + ИначеЕсли ГруппаВнутреннихПолей = "РасширенныеСвойства" Тогда Элементы.ВнутреннееСодержаниеИдентификатор.Видимость = Ложь; Коллекция = Сертификат.РасширенныеСвойства; + Для Каждого КлючИЗначение Из Коллекция Цикл ДобавитьСвойство(Коллекция, КлючИЗначение.Ключ, КлючИЗначение.Ключ); КонецЦикла; + Иначе - Элементы.ВнутреннееСодержаниеИдентификатор.Видимость = Истина; ИменаИдентификаторов = Новый СписокЗначений; ИменаИдентификаторов.Добавить("OID2_5_4_3", "CN"); @@ -476,7 +536,7 @@ Значение = ЗначенияСвойств[Свойство]; Если ТипЗнч(Значение) = Тип("Дата") Тогда Значение = МестноеВремя(Значение, ЧасовойПоясСеанса()); - ИначеЕсли ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда + ИначеЕсли ТипЗнч(Значение) = Тип("ФиксированныйМассив") Или ТипЗнч(Значение) = Тип("Массив") Тогда ФиксированныйМассив = Значение; Значение = ""; Для каждого ЭлементМассива Из ФиксированныйМассив Цикл @@ -491,6 +551,7 @@ Строка.Свойство = Представление; КонецЕсли; Иначе + Строка.Идентификатор = Свойство; Строка.Свойство = Представление; КонецЕсли; diff --git a/SSL/src/CommonForms/Склонения/Help/ru.html b/SSL/src/CommonForms/Склонения/Help/ru.html index 91c4a78d6..f40824ded 100644 --- a/SSL/src/CommonForms/Склонения/Help/ru.html +++ b/SSL/src/CommonForms/Склонения/Help/ru.html @@ -1,9 +1,9 @@

          Склонения представления выбранного элемента списка.

          Открывается по ссылке Склонения из карточки элемента списка.

          -

          По умолчанию склонение проводится приложением собственными средствами. 

          +

          По умолчанию склонение проводится приложением собственными средствами.

          При необходимости можно использовать альтернативный сервис склонения "Морфер". Включить использование сервиса можно в настройках приложения.

          Возможны неточности автоматического склонения.

          Поэтому предусмотрена возможность исправить неточные склонения и сохранить правильный вариант в карточке элемента списка, для того чтобы в печатные формы выводились правильные варианты склонения.

          Исправьте склонения вручную, нажмите кнопку ОК. Для сохранения склонений в карточке элемента списка нажмите кнопку Записать и закрыть.

          -

          Если исправленный вариант склонения не устраивает, нажмите кнопку Просклонять повторно.

          \ No newline at end of file +

          Если исправленный вариант склонения не устраивает, нажмите кнопку Просклонять повторно.

          \ No newline at end of file diff --git a/SSL/src/CommonForms/СменаПароля/Help/ru.html b/SSL/src/CommonForms/СменаПароля/Help/ru.html index 60fa4183b..7aa7e73ba 100644 --- a/SSL/src/CommonForms/СменаПароля/Help/ru.html +++ b/SSL/src/CommonForms/СменаПароля/Help/ru.html @@ -1,10 +1,10 @@

          Предназначена для ввода или смены пароля.

          В целях информационной безопасности рекомендуется вводить пароли, не оставлять это поле пустым.

          -

          Ввод пароля

          +

          Ввод пароля

          • При смене пароля для обеспечения безопасности введите Старый пароль.
          • -
          • Напишите Новый пароль. +
          • Напишите Новый пароль.
          • В поле Подтверждение напишите новый пароль повторно.
          • @@ -13,7 +13,7 @@
          • Нажмите Установить пароль.

          Автоматическое создание пароля

          • Если самостоятельно создать пароль сложно, нажмите кнопку Создать пароль.
            • Приложение предлагает новый пароль.Запомните его или скопируйте в буфер обмена, затем напишите или вставьте в поле Новый пароль.
            • -
            • Если по какой-либо причине не устраивает сгенерированный пароль, то с помощью кнопки Создать другой можно обновить пароль.

          Рекомендации по созданию пароля для входа в приложение

          +
        • Если по какой-либо причине не устраивает сгенерированный пароль, то с помощью кнопки Создать другой можно обновить пароль.
        • Рекомендации по созданию пароля для входа в приложение

          Хороший пароль должен:

          • быть малопонятным выражением.
          • diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html index 02769307c..83c79dfad 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html @@ -1,6 +1,6 @@ -

            Предназначена для указания параметров файловой или клиент-серверной базы при создании начального образа РИБ. При настройке синхронизации РИБ (внешние файлы) необходимо указать, где будет создан начальный образ РИБ. Если файлы хранятся в томах, также потребуется указать путь к файлу, в который будет записан архив (.zip) со всеми файлами в томах.

            -

            Открывается по команде  Создать начальный образ из Помощника создания синхронизации данных при настройке синхронизации РИБ (внешние файлы). Также можно в списке Синхронизация данных с помощью кнопки  открыть настройку синхронизации РИБ (внешние файлы), нажать кнопку Создание начального образа подчиненного узла распределенной информационной базы.

            +

            Предназначена для указания параметров файловой или клиент-серверной базы при создании начального образа РИБ. При настройке синхронизации РИБ (внешние файлы) необходимо указать, где будет создан начальный образ РИБ. Если файлы хранятся в томах, также потребуется указать путь к файлу, в который будет записан архив (.zip) со всеми файлами в томах.

            +

            Открывается по команде Создать начальный образ из Помощника создания синхронизации данных при настройке синхронизации РИБ (внешние файлы). Также можно в списке Синхронизация данных с помощью кнопки открыть настройку синхронизации РИБ (внешние файлы), нажать кнопкуСоздание начального образа подчиненного узла распределенной информационной базы.

            Параметры информационной базы

            Укажите с помощью переключателя, где будет создаваться начальный образ информационной базы:

            • @@ -9,12 +9,12 @@
              Задайте Параметры информационной базы:
            • -
              В поле Язык (Страна) выберите нужное значение из списка. По умолчанию предлагаются параметры, которые были заданы при создании синхронизации данных.
              +
              В поле Язык (Страна) выберите нужное значение из списка. По умолчанию предлагаются параметры, которые были заданы при создании синхронизации данных.
            • Задайте Полное имя файловой базы:
              • -
                Для сервера 1С:Предприятия под управлением Microsoft Windows -с помощью кнопки  укажите путь к папке, в которой будет размещен файл.
          +
          Для сервера 1С:Предприятия под управлением Microsoft Windows -с помощью кнопки укажите путь к папке, в которой будет размещен файл.

          или

              • Для сервера 1С:Предприятия под управлением Linux - напишите путь к папке, в которой будет размещен файл начального образа.
          • @@ -28,7 +28,7 @@
            Напишите Имя информационной базы в кластере;
          • -
            В поле Защищенное соединение  выберите значение из списка (Выключено, Установка соединения, Постоянно);
            +
            В поле Защищенное соединение выберите значение из списка (Выключено, Установка соединения, Постоянно);
          • Выберите из списка Тип СУБД (Microcoft SQL Server, PostgreSQL, IBM DB2, Oracle Database);
            @@ -37,7 +37,7 @@
            Укажите Сервер базы данных;
          • -
            Напишите Имя базы данных;
            +
            Напишите Имя базы данных;
          • Напишите имя Пользователя базы данных иПароль Пользователя;
            @@ -53,10 +53,10 @@
            • Укажите Полное имя архива с файлами томов:
              • -
                Для сервера 1С:Предприятия под управлением Microsoft Windows - укажите с помощью кнопки  путь к каталогу

            или

            +
            Для сервера 1С:Предприятия под управлением Microsoft Windows - укажите с помощью кнопки путь к каталогу

          или

            • -
              Для сервера 1С:Предприятия под управлением Linux - напишите путь к папке, в которой будет размещен архив с файлами томов.

          Для продолжения нажмите Создать начальный образ.

          -

          Через некоторое время приложение выводит сообщение об успешном создании начального образа подчиненного узла распределенной информационной базы. Нажмите ОК для возвращения в приложение.

          +
          Для сервера 1С:Предприятия под управлением Linux - напишите путь к папке, в которой будет размещен архив с файлами томов.

          Для продолжения нажмите Создать начальный образ.

          +

          Через некоторое время приложение выводит сообщение об успешном создании начального образа подчиненного узла распределенной информационной базы. Нажмите ОК для возвращения в приложение.

          Для того чтобы загрузить файлы в томах в базе филиала, при первом запуске необходимо выполнить команду Разместить файлы начального образа, указав путь к файлу архива с файлами в томах.

          См. также:

          • diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Help/ru.html b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Help/ru.html index ec726c661..dc5649848 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Help/ru.html +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Help/ru.html @@ -1,17 +1,17 @@ -

            Предназначен для выбора электронных подписей, которые требуется сохранять вместе с данными.

            -

            Открывается при выполнении команды  Электронные подписи и шифрование - Сохранить вместе с электронной подписью, например, из списка файлов, присоединенных файлов или карточки файла (карточки присоединенного файла), если персональная настройка действий При сохранении с электронной подписью установлена в "Спрашивать". Команду можно найти в панели навигации или в меню Еще, а также в контекстном меню по правой кнопке мыши.

            +

            Предназначен для выбора электронных подписей, которые требуется сохранять вместе с данными.

            +

            Открывается при выполнении команды Электронные подписи и шифрование - Сохранить вместе с электронной подписью, например, из списка файлов, присоединенных файлов или карточки файла (карточки присоединенного файла), если персональная настройка действий При сохранении с электронной подписью установлена в "Спрашивать". Команду можно найти в панели навигации или в меню Еще, а также в контекстном меню по правой кнопке мыши.

            В списке выводится:

            -
            • Сохранить - флажок. +
              • Сохранить - флажок.
              • Автор подписи - представление лица, которому выдан сертификат;
              • Дата подписи;
              • -
              • Комментарий - подробная информация о подписи.

              Установите флажки для подписей, которые надо сохранить вместе с файлом, и нажмите Выбрать.

              +
            • Комментарий - подробная информация о подписи.

            Установите флажки для подписей, которые надо сохранить вместе с файлом, и нажмите Выбрать.

            Предусмотрено сохранение сертификата вместе с электронной подписью. Для этого включите флажок Сохранять сертификат вместе с подписью.

            -

            Для того чтобы не видеть это окно и всегда сохранять все подписи, включите флажок Больше не спрашивать.

            -

            Файл электронной подписи сохраняется с расширением .p7s, поддерживается работа только с отсоединенной подписью в формате PKC#7, 

            На данный момент не поддерживается работа с присоединенной подписью в формате PKC#7. 

            См. также:

            +

            Для того чтобы не видеть это окно и всегда сохранять все подписи, включите флажок Больше не спрашивать.

            +

            Файл электронной подписи сохраняется с расширением .p7s, поддерживается работа только с отсоединенной подписью в формате PKC#7,

            На данный момент не поддерживается работа с присоединенной подписью в формате PKC#7.

            См. также:

            • diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl index a3137ebe0..655c1ca23 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl @@ -107,7 +107,10 @@ Если ТипЗнч(Объект) = Тип("Строка") Тогда КоллекцияПодписей = ПолучитьИзВременногоХранилища(Объект); Иначе - КоллекцияПодписей = ЭлектроннаяПодпись.УстановленныеПодписи(Объект, Неопределено, Истина); + ПараметрыПолученияПодписей = ЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьДанныеМЧД = Истина; + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + КоллекцияПодписей = ЭлектроннаяПодпись.ПодписиОбъекта(Объект, ПараметрыПолученияПодписей); КонецЕсли; Для каждого ВсеСвойстваПодписи Из КоллекцияПодписей Цикл diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form index 95fcb6b47..134fa9cdf 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -6,12 +6,7 @@ VeryHigh ВариантСохранения - 67 - VeryHigh - - <key>ru</key> - <value>Вариант сохранения</value> - + 110 true true @@ -27,7 +22,7 @@ ВариантСохраненияРасширеннаяПодсказка - 83 + 112 Label true true @@ -37,7 +32,7 @@ ВариантСохраненияКонтекстноеМеню - 68 + 111 true RadioButtonField @@ -46,11 +41,10 @@ Left true - RadioButtons ru - Сохранить в папку на компьютер + Сохранитиь в папку на компьютер СохранитьВПапку @@ -69,11 +63,11 @@ - ПапкаДляСохраненияФайлов + КаталогСохраненияФайлов 42 <key>ru</key> - <value>Сохранить в папку на компьютер</value> + <value>Сохранить в каталог на компьютер</value> true true @@ -85,7 +79,7 @@ None - ПапкаДляСохраненияФайловРасширеннаяПодсказка + КаталогСохраненияФайловРасширеннаяПодсказка 86 Label true @@ -95,7 +89,7 @@ - ПапкаДляСохраненияФайловКонтекстноеМеню + КаталогСохраненияФайловКонтекстноеМеню 43 true @@ -171,14 +165,20 @@ None Add + CancelSearch Change Copy Delete EndEdit + Find + FindByCurrentValue MoveDown MoveUp Pickup + SearchEverywhere + SearchHistory SelectAll + ShowMultipleSelection SortListAsc SortListDesc @@ -375,7 +375,6 @@ ВыбранныеФорматыСохранения.Picture - Top true true @@ -631,10 +630,6 @@ OnSaveDataInSettingsAtServer ПриСохраненииДанныхВНастройкахНаСервере - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -710,10 +705,6 @@ ВариантСохранения - - <key>ru</key> - <value>Вариант сохранения</value> - 8 String @@ -727,9 +718,6 @@ true - - ВариантСохранения - ВыбранныеФорматыСохранения @@ -852,6 +840,14 @@ + + Назначение + + String + + + true + diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html b/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html index 7435cdf8d..8bc679032 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html @@ -2,6 +2,6 @@

              Предназначена для сохранения печатной формы. Имеетсявозможность сохранить печатные формы в нужных форматах на компьютере или присоединить к документу.

              • С помощью переключателя выберите, как сохранить печатную форму:
                • Сохранить в папку на компьютер. -
                  •   Выберите путь к папке на компьютере.
                • Присоединить к документу.
              • Установите флажки для выбора одного или нескольких форматов, в которых нужно сохранить (присоединить) печатную форму. +
                • Выберите путь к папке на компьютере.
              • Присоединить к документу.
            • Установите флажки для выбора одного или нескольких форматов, в которых нужно сохранить (присоединить) печатную форму.
            • Для уменьшения объема сохраненных файлов включите флажок Дополнительно упаковать в архив (zip). -
            • Нажмите Сохранить. Настройки также будут сохранены.
            \ No newline at end of file +
          • Нажмите Сохранить. Настройки также будут сохранены.
          \ No newline at end of file diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl index 6bad84a4a..e235d3a9a 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl @@ -11,12 +11,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - МассивОграниченийФорматовСохранения = СтрРазделить(Параметры.ОграничениеФорматовСохранения, ",", Ложь); - - // заполнение списка форматов + ОграничениеФорматовСохранения = СтрРазделить(Параметры.ОграничениеФорматовСохранения, ",", Ложь); Для Каждого ФорматСохранения Из УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл - Если Не МассивОграниченийФорматовСохранения.Количество() - ИЛИ МассивОграниченийФорматовСохранения.Найти(ФорматСохранения.Расширение) <> Неопределено Тогда + Если Не ОграничениеФорматовСохранения.Количество() + ИЛИ ОграничениеФорматовСохранения.Найти(ФорматСохранения.Расширение) <> Неопределено Тогда ВыбранныеФорматыСохранения.Добавить(Строка(ФорматСохранения.ТипФайлаТабличногоДокумента), ФорматСохранения.Представление, Ложь, ФорматСохранения.Картинка); КонецЕсли; @@ -29,53 +27,62 @@ ИначеЕсли ВыбранныеФорматыСохранения.Количество() > 1 Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, ""); КонецЕсли; + + ОбъектыПрикрепления = ОбъектыДляПрикрепления(Параметры.ОбъектыПечати); - // Место сохранения по умолчанию. - ВариантСохранения = "СохранитьВПапку"; - - // настройка видимости ЕстьВозможностьСохранения = Параметры.ОбъектыПечати.Количество() > 0; - - ОбъектыПрикрепления = ПолучитьОбъектыДляПрикрепления(Параметры.ОбъектыПечати); Если Параметры.ОбъектыПечати.Количество() = 1 Тогда ЕстьВозможностьПрисоединения = ОбъектыПрикрепления[0].Пометка; ИначеЕсли ЕстьВозможностьСохранения Тогда ЕстьВозможностьПрисоединения = Ложь; Для Каждого ОбъектДляПрикрепления Из ОбъектыПрикрепления Цикл - ЕстьВозможностьПрисоединения = ЕстьВозможностьПрисоединения Или ОбъектДляПрикрепления.Пометка; + ЕстьВозможностьПрисоединения = ЕстьВозможностьПрисоединения Или ОбъектДляПрикрепления.Пометка; КонецЦикла; Иначе ЕстьВозможностьПрисоединения = Ложь; КонецЕсли; - ЭлементПрисоединения = Элементы.ВариантСохранения.СписокВыбора.НайтиПоЗначению("Присоединить"); - - Если Не ЕстьВозможностьПрисоединения Тогда - Элементы.ВариантСохранения.СписокВыбора.Удалить(ЭлементПрисоединения); - ЭлементПрисоединения = Неопределено; - ВариантСохранения = "СохранитьВПапку"; - Элементы.ВариантСохранения.ТолькоПросмотр = Истина; - КонецЕсли; - Элементы.ВыборМестаСохраненияФайла.Видимость = Параметры.РасширениеДляРаботыСФайламиПодключено - Или ЕстьВозможностьСохранения; - Элементы.ВариантСохранения.Видимость = ЕстьВозможностьСохранения; - Если Не ЕстьВозможностьСохранения Тогда - Элементы.ПапкаДляСохраненияФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + Или ЕстьВозможностьПрисоединения; + + Элементы.ВариантСохранения.Видимость = ЕстьВозможностьПрисоединения; + + Если Не ЕстьВозможностьПрисоединения Тогда + Элементы.КаталогСохраненияФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; КонецЕсли; - Элементы.ПапкаДляСохраненияФайлов.Видимость = Параметры.РасширениеДляРаботыСФайламиПодключено; - Если Параметры.ОбъектыПечати.Количество() > 1 И ЭлементПрисоединения <> Неопределено Тогда - ЭлементПрисоединения.Представление = НСтр("ru='Присоединить к документам'") + Если Параметры.Назначение = "ПрисоединенныеФайлы" Тогда + ВариантСохранения = "Присоединить"; + Элементы.КаталогСохраненияФайлов.Видимость = Ложь; + Заголовок = ?(Параметры.ОбъектыПечати.Количество() > 1, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Присоединить к документам (%1)'"), Параметры.ОбъектыПечати.Количество()), + НСтр("ru='Присоединить к документу'")); + АвтоЗаголовок = Ложь; + Элементы.КнопкаСохранить.Заголовок = НСтр("ru='Присоединить'"); + Иначе + ВариантСохранения = "СохранитьВПапку"; + Элементы.КаталогСохраненияФайлов.Видимость = Параметры.РасширениеДляРаботыСФайламиПодключено; + КонецЕсли; + + Если Параметры.ОбъектыПечати.Количество() > 1 Тогда + Элемент = Элементы.ВариантСохранения.СписокВыбора.НайтиПоЗначению("Присоединить"); + Если Элемент <> Неопределено Тогда + Элемент.Представление = НСтр("ru='Присоединить к документам'") + " (" + Формат(Параметры.ОбъектыПечати.Количество(), "ЧДЦ=0;") + ")"; + КонецЕсли; КонецЕсли; - Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + ЭтоСеансВнешнегоПользователя = Пользователи.ЭтоСеансВнешнегоПользователя(); + ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент(); + + Если ЭтоМобильныйКлиент Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; Элементы.КнопкаСохранить.Отображение = ОтображениеКнопки.Картинка; - Элементы.Подписать.Видимость = Ложь; КонецЕсли; + Элементы.Подписать.Видимость = Не ЭтоМобильныйКлиент И Не ЭтоСеансВнешнегоПользователя; + КонецПроцедуры &НаСервере @@ -96,10 +103,6 @@ Настройки.Удалить("ВыбранныеФорматыСохранения"); КонецЕсли; - Если Элементы.ВариантСохранения.ТолькоПросмотр Тогда - Настройки["ВариантСохранения"] = "СохранитьВПапку"; - КонецЕсли; - Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда Настройки["Подписать"] = Ложь; КонецЕсли; @@ -113,26 +116,16 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте -Процедура ПриОткрытии(Отказ) - УстановитьСтраницуМестаСохранения(); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура ВариантСохраненияПриИзменении(Элемент) - УстановитьСтраницуМестаСохранения(); - ОчиститьСообщения(); -КонецПроцедуры - &НаКлиенте Процедура ПапкаДляСохраненияФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ВыбраннаяПапка = Элемент.ТекстРедактирования; - ФайловаяСистемаКлиент.ВыбратьКаталог(Новый ОписаниеОповещения("ПапкаДляСохраненияФайловЗавершениеВыбора", ЭтотОбъект), , ВыбраннаяПапка); + ФайловаяСистемаКлиент.ВыбратьКаталог( + Новый ОписаниеОповещения("ПапкаДляСохраненияФайловЗавершениеВыбора", ЭтотОбъект), , ВыбраннаяПапка); КонецПроцедуры @@ -147,6 +140,13 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ВариантСохраненияПриИзменении(Элемент) + + УстановитьСтраницуМестаСохранения(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -154,15 +154,14 @@ &НаКлиенте Процедура Сохранить(Команда) - Если Элементы.ПапкаДляСохраненияФайлов.Видимость Тогда + Если Элементы.КаталогСохраненияФайлов.Видимость Тогда Если ВариантСохранения = "СохранитьВПапку" И ПустаяСтрока(ВыбраннаяПапка) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Укажите папку.'"),,"ВыбраннаяПапка"); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Укажите каталог.'"),, "ВыбраннаяПапка"); Возврат; КонецЕсли; КонецЕсли; ФорматыСохранения = Новый Массив; - Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл Если ВыбранныйФормат.Пометка Тогда ФорматыСохранения.Добавить(ВыбранныйФормат.Значение); @@ -170,7 +169,7 @@ КонецЦикла; Если ФорматыСохранения.Количество() = 0 Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Укажите как минимум один из предложенных форматов.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Укажите один из предложенных форматов.'")); Возврат; КонецЕсли; @@ -182,41 +181,42 @@ РезультатВыбора.Вставить("ПереводитьИменаФайловВТранслит", ПереводитьИменаФайловВТранслит); РезультатВыбора.Вставить("Подписать", Подписать); - Если ВариантСохранения = "Присоединить" Тогда - СтрокаОшибки = ""; - ОбъектыДляПрикрепления = Новый Соответствие; - Для Каждого ОбъектПрикрепления Из ОбъектыПрикрепления Цикл - Если Не ОбъектПрикрепления.Пометка Тогда - СтрокаОшибки = СтрокаОшибки + ОбъектПрикрепления.Значение; - Иначе - ОбъектыДляПрикрепления.Вставить(ОбъектПрикрепления.Значение, Истина); - КонецЕсли; - КонецЦикла; - - РезультатВыбора.Вставить("ОбъектыДляПрикрепления", ОбъектыДляПрикрепления); - - Если СтрокаОшибки <> "" Тогда - ОписаниеОповещенияПродолжениеСохранения = Новый ОписаниеОповещения("ПродолжениеСохранения", ЭтотОбъект, РезультатВыбора); - - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Прикрепление не будет выполнено для объектов: - | %1'"), СтрокаОшибки); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Отменить", НСтр("ru = 'Отменить'")); - Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); - - ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); - ПараметрыВопроса.Заголовок = НСтр("ru = 'Недостаточно прав для прикрепления'"); - ПараметрыВопроса.БлокироватьВесьИнтерфейс = Истина; - ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; - - СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОписаниеОповещенияПродолжениеСохранения, ТекстВопроса, Кнопки, ПараметрыВопроса); - Иначе - ОповеститьОВыборе(РезультатВыбора); - КонецЕсли; - Иначе + Если ВариантСохранения = "СохранитьВПапку" Тогда ОповеститьОВыборе(РезультатВыбора); + Возврат; + КонецЕсли; + + СтрокаОшибки = ""; + ОбъектыДляПрикрепления = Новый Соответствие; + Для Каждого ОбъектПрикрепления Из ОбъектыПрикрепления Цикл + Если Не ОбъектПрикрепления.Пометка Тогда + СтрокаОшибки = СтрокаОшибки + ОбъектПрикрепления.Значение; + Иначе + ОбъектыДляПрикрепления.Вставить(ОбъектПрикрепления.Значение, Истина); + КонецЕсли; + КонецЦикла; + + РезультатВыбора.Вставить("ОбъектыДляПрикрепления", ОбъектыДляПрикрепления); + + Если ПустаяСтрока(СтрокаОшибки) Тогда + ОповеститьОВыборе(РезультатВыбора); + Возврат; КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл не будет присоединен к документам: + | %1'"), СтрокаОшибки); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Отменить", НСтр("ru = 'Отменить'")); + Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); + + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.Заголовок = НСтр("ru = 'Недостаточно прав для присоединения файла'"); + ПараметрыВопроса.БлокироватьВесьИнтерфейс = Истина; + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьПослеПодтверждения", ЭтотОбъект, РезультатВыбора); + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОписаниеОповещения, ТекстВопроса, Кнопки, ПараметрыВопроса); КонецПроцедуры @@ -227,32 +227,38 @@ &НаКлиенте Процедура УстановитьСтраницуМестаСохранения() - Если Элементы.ПапкаДляСохраненияФайлов.Видимость Тогда - Элементы.ПапкаДляСохраненияФайлов.Доступность = Не ВариантСохранения = "Присоединить"; + Если Элементы.КаталогСохраненияФайлов.Видимость Тогда + Элементы.КаталогСохраненияФайлов.Доступность = Не ВариантСохранения = "Присоединить"; КонецЕсли КонецПроцедуры &НаКлиенте -Процедура ПродолжениеСохранения(РезультатВопроса, РезультатВыбора) Экспорт - Если РезультатВопроса.Значение = "Отменить" Тогда +Процедура СохранитьПослеПодтверждения(РезультатВопроса, РезультатВыбора) Экспорт + + Если РезультатВопроса = Неопределено Или РезультатВопроса.Значение = "Отменить" Тогда Закрыть(); - Иначе - ОповеститьОВыборе(РезультатВыбора); + Возврат; КонецЕсли; + + ОповеститьОВыборе(РезультатВыбора); + КонецПроцедуры &НаСервереБезКонтекста -Функция ПолучитьОбъектыДляПрикрепления(ОбъектыПечати) +Функция ОбъектыДляПрикрепления(ОбъектыПечати) Результат = Новый СписокЗначений; - МодульУправлениеДоступом = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульРаботаСФайлами = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); КонецЕсли; Для Каждого ОбъектПечати Из ОбъектыПечати Цикл - Результат.Добавить(ОбъектПечати.Значение,,?(МодульУправлениеДоступом <> Неопределено, - МодульУправлениеДоступом.ИзменениеРазрешено(ОбъектПечати.Значение), Истина)); + МожноПрисоединятьФайлы = Ложь; + Если МодульРаботаСФайлами <> Неопределено Тогда + МожноПрисоединятьФайлы = МодульРаботаСФайлами.КОбъектуМожноПрисоединятьФайлы(ОбъектПечати.Значение); + КонецЕсли; + Результат.Добавить(ОбъектПечати.Значение,, МожноПрисоединятьФайлы); КонецЦикла; Возврат Результат; diff --git a/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/Form.form b/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/Form.form new file mode 100644 index 000000000..fddf53d42 --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/Form.form @@ -0,0 +1,481 @@ + + + + ВыборВариантаВыгрузки + 14 + + ВариантВыгрузки + 1 + VeryHigh + + <key>ru</key> + <value>Путь для сохранения выгрузки</value> + + true + true + + true + + + ВариантВыгрузки + + None + + OnChange + ВариантВыгрузкиПриИзменении + + + ВариантВыгрузкиРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВариантВыгрузкиКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + RadioButtons + + + ru + Сохранить в папку на компьютер + + + СохранитьВПапку + + + + + ru + Присоединить к документу + + + Присоединить + + + Vertical + + + + КаталогДляСохраненияФайлов + 4 + + <key>ru</key> + <value>Выбранный каталог</value> + + true + true + + true + + + ВыбранныйКаталог + + None + + КаталогДляСохраненияФайловРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + КаталогДляСохраненияФайловКонтекстноеМеню + 5 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + КаталогДляСохраненияФайловНачалоВыбора + + 60 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Выбор варианта выгрузки</value> + + + ВыборВариантаВыгрузкиРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + УпаковатьВАрхив + 11 + + <key>ru</key> + <value>Дополнительно упаковать в архив (.zip)</value> + + true + true + + true + + + УпаковатьВАрхив + + Right + + УпаковатьВАрхивРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + УпаковатьВАрхивКонтекстноеМеню + 12 + true + + CheckBoxField + Enter + true + Left + true + + + + ПереводитьИменаФайловВТранслит + 16 + + <key>ru</key> + <value>Транслитерировать имена файлов</value> + + true + true + + true + + + ПереводитьИменаФайловВТранслит + + Right + + ru + Сохраненные файлы будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл "Документ.txt" будет сохранен с именем "Document.txt". + + Button + + ПереводитьИменаФайловВТранслитРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПереводитьИменаФайловВТранслитКонтекстноеМеню + 17 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаВыполнитьВыбранныйВариант + 7 + + <key>ru</key> + <value>Выполнить</value> + + true + true + + true + + + ФормаВыполнитьВыбранныйВариантРасширеннаяПодсказка + 8 + Label + true + true + + 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 + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + LockOwner + Use + true + true + Vertical + true + true + true + auto + true + + ВариантВыгрузки + + <key>ru</key> + <value>Вариант выгрузки</value> + + 1 + + String + + 20 + + + + true + + + true + + + ВариантВыгрузки + + + + ВыбранныйКаталог + + <key>ru</key> + <value>Выбранный каталог</value> + + 2 + + String + + 250 + + + + true + + + true + + + ВыбранныйКаталог + + + + УпаковатьВАрхив + + <key>ru</key> + <value>Упаковать в архив (.zip)</value> + + 3 + + Boolean + + + true + + + true + + + УпаковатьВАрхив + + + + ОписаниеКомандыВыполнения + 4 + + + true + + + true + + + + ОбъектыПрикрепления + 5 + + ValueList + + + true + + + true + + + + + + + ПереводитьИменаФайловВТранслит + + <key>ru</key> + <value>Транслитерировать имена файлов</value> + + 6 + + Boolean + + + true + + + true + + + ПереводитьИменаФайловВТранслит + + + + РасширениеДляРаботыСФайламиПодключено + 7 + + Boolean + + + true + + + true + + + + ВыполнитьВыбранныйВариант + + <key>ru</key> + <value>Выполнить</value> + + 1 + + ru + Выполнить выбранный вариант + + + true + + + + ВыполнитьВыбранныйВариант + + + Auto + Auto + + + РасширениеДляРаботыСФайламиПодключено + + Boolean + + + + ОписаниеКомандыВыполнения + + + + + + + diff --git a/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/Module.bsl b/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/Module.bsl new file mode 100644 index 000000000..8a9bd929f --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/Module.bsl @@ -0,0 +1,699 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +// @strict-types + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + + Отказ = Истина; + Возврат; + + КонецЕсли; + + // Место сохранения по умолчанию. + ВариантВыгрузки = "СохранитьВПапку"; + + Если ТипЗнч(Параметры.ОписаниеКомандыВыполнения) = Тип("Структура") Тогда + + ОписаниеКомандыВыполнения = Параметры.ОписаниеКомандыВыполнения; // Структура + ОбъектыПечати = ОписаниеКомандыВыполнения.ОбъектыПечати; // Массив Из ДокументСсылка + + НастроитьДоступностьВариантовДействий(ОбъектыПечати, Параметры); + + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; + Элементы.ФормаВыполнитьВыбранныйВариант.Отображение = ОтображениеКнопки.Картинка; + + КонецЕсли; + + Иначе + + Отказ = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьСтраницуМестаСохранения(); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + + Если ВариантВыгрузки = "СохранитьВПапку" Тогда + Настройки["ВариантВыгрузки"] = "СохранитьВПапку"; + Иначе + Настройки["ВариантВыгрузки"] = "Присоединить"; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВариантВыгрузкиПриИзменении(Элемент) + + УстановитьСтраницуМестаСохранения(); + ОчиститьСообщения(); + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогДляСохраненияФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыбранныйКаталог = Элемент.ТекстРедактирования; + Оповещение = Новый ОписаниеОповещения("КаталогДляСохраненияФайловЗавершениеВыбора", ЭтотОбъект); + ФайловаяСистемаКлиент.ВыбратьКаталог(Оповещение,, ВыбранныйКаталог); + +КонецПроцедуры + +// Обработчик завершения выбора каталога сохраненных файлов. +// См. Синтакс-помощник: ДиалогВыбораФайла.Показать() +// +// Параметры: +// Каталог - Строка +// ДополнительныеПараметры - Структура +// +&НаКлиенте +Процедура КаталогДляСохраненияФайловЗавершениеВыбора(Каталог, ДополнительныеПараметры) Экспорт + + Если Не ПустаяСтрока(Каталог) Тогда + + ВыбранныйКаталог = Каталог; + ОчиститьСообщения(); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьВыбранныйВариант(Команда) + + Если ВариантВыгрузки = "СохранитьВПапку" + И ПустаяСтрока(ВыбранныйКаталог) Тогда + + ТекстСообщения = НСтр("ru = 'Укажите папку'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "ВыбранныйКаталог"); + Возврат; + + КонецЕсли; + + СтрокаОшибки = ""; + СчетчикОшибок = 0; + СчетчикЕщеОшибок = 0; + КоличествоВыводимыхОшибокПрисоединений = 10; + + Если ВариантВыгрузки = "Присоединить" Тогда + + РезультатВыбора = Новый Структура; + + ОбъектыДляПрикрепления = Новый Массив; + Для Каждого ОбъектПрикрепления Из ОбъектыПрикрепления Цикл + + Если Не ОбъектПрикрепления.Пометка Тогда + + СчетчикОшибок = СчетчикОшибок + 1; + + Если СчетчикОшибок < КоличествоВыводимыхОшибокПрисоединений Тогда + СтрокаОшибки = СтрокаОшибки + ?(СчетчикОшибок = 1, " ", ", ") + ОбъектПрикрепления.Значение; + Иначе + СчетчикЕщеОшибок = СчетчикЕщеОшибок + 1; + КонецЕсли; + + Иначе + ОбъектыДляПрикрепления.Добавить(ОбъектПрикрепления.Значение); + КонецЕсли; + + КонецЦикла; + + РезультатВыбора.Вставить("ОбъектыДляПрикрепления", ОбъектыДляПрикрепления); + + КонецЕсли; + + Если СтрокаОшибки <> "" Тогда + + ОписаниеОповещенияПродолжениеВыгрузки = Новый ОписаниеОповещения( + "ПродолжениеВыгрузки", + ЭтотОбъект, + РезультатВыбора); + + Если СчетчикЕщеОшибок > 0 Тогда + + ТекстВопросаШаблон = НСтр("ru = 'Прикрепление не будет выполнено для объектов: + | %1 ... и еще %2'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопросаШаблон, + СтрокаОшибки, + СчетчикЕщеОшибок); + + Иначе + + ТекстВопросаШаблон = НСтр("ru = 'Прикрепление не будет выполнено для объектов: + | %1'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопросаШаблон, СтрокаОшибки); + + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Отменить", НСтр("ru = 'Отменить'")); + Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); + + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.Заголовок = НСтр("ru = 'Недостаточно прав для прикрепления'"); + ПараметрыВопроса.БлокироватьВесьИнтерфейс = Истина; + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю( + ОписаниеОповещенияПродолжениеВыгрузки, + ТекстВопроса, + Кнопки, + ПараметрыВопроса); + + Иначе + + ОписаниеКоманды = ОписаниеКомандыВыполнения.ОписаниеКоманды; + ОписаниеКоманды.Вставить("ВариантВыгрузки", ВариантВыгрузки); + + ВыполнитьКомандуВыгрузитьВФайл( + ОписаниеКоманды.МенеджерПечати, + ОписаниеКоманды.Идентификатор, + ОписаниеКомандыВыполнения.ОбъектыПечати, + ВладелецФормы, + ОписаниеКоманды); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура НастроитьДоступностьВариантовДействий(ОбъектыПечати, Параметры) + + // настройка видимости + ЕстьВозможностьСохранения = (ОбъектыПечати.Количество() > 0); + + ОбъектыПрикрепления = ОбъектыДляПрикрепления(ОбъектыПечати); + Если ОбъектыПечати.Количество() = 1 Тогда + + ЕстьВозможностьПрисоединения = ОбъектыПрикрепления[0].Пометка; + + ИначеЕсли ЕстьВозможностьСохранения Тогда + + ЕстьВозможностьПрисоединения = Ложь; + Для Каждого ОбъектДляПрикрепления Из ОбъектыПрикрепления Цикл + ЕстьВозможностьПрисоединения = ЕстьВозможностьПрисоединения Или ОбъектДляПрикрепления.Пометка; + КонецЦикла; + + Иначе + + ЕстьВозможностьПрисоединения = Ложь; + + КонецЕсли; + + ЭлементПрисоединения = Элементы.ВариантВыгрузки.СписокВыбора.НайтиПоЗначению("Присоединить"); + + Если Не ЕстьВозможностьПрисоединения Тогда + + Элементы.ВариантВыгрузки.СписокВыбора.Удалить(ЭлементПрисоединения); + ЭлементПрисоединения = Неопределено; + ВариантВыгрузки = "СохранитьВПапку"; + Элементы.ВариантВыгрузки.ТолькоПросмотр = Истина; + + КонецЕсли; + + РасширениеДляРаботыСФайламиПодключено = Параметры.РасширениеДляРаботыСФайламиПодключено; + Элементы.ВыборВариантаВыгрузки.Видимость = (РасширениеДляРаботыСФайламиПодключено + Или ЕстьВозможностьСохранения); + Элементы.ВариантВыгрузки.Видимость = ЕстьВозможностьСохранения; + Если Не ЕстьВозможностьСохранения Тогда + + Элементы.КаталогДляСохраненияФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + + ИначеЕсли НЕ РасширениеДляРаботыСФайламиПодключено Тогда + + ВариантВыгрузки = "Присоединить"; + Элементы.ВариантВыгрузки.Доступность = Ложь; + + КонецЕсли; + Элементы.КаталогДляСохраненияФайлов.Видимость = РасширениеДляРаботыСФайламиПодключено; + + Если ОбъектыПечати.Количество() > 1 + И ЭлементПрисоединения <> Неопределено Тогда + + Шаблон = НСтр("ru = 'Присоединить к документам (%1)'"); + КоличествоСтрокой = Формат(ОбъектыПечати.Количество(), "ЧДЦ=0;"); + ЭлементПрисоединения.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + КоличествоСтрокой); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжениеВыгрузки(РезультатВопроса, РезультатВыбора) Экспорт + + Если РезультатВопроса.Значение = "Отменить" Тогда + Закрыть(); + Иначе + + ОписаниеКоманды = ОписаниеКомандыВыполнения.ОписаниеКоманды; + ОписаниеКоманды.Вставить("ВариантВыгрузки", ВариантВыгрузки); + + ВыполнитьКомандуВыгрузитьВФайл( + ОписаниеКоманды.МенеджерПечати, + ОписаниеКоманды.Идентификатор, + РезультатВыбора.ОбъектыДляПрикрепления, + ВладелецФормы, + ОписаниеКоманды); + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОбъектыДляПрикрепления(ОбъектыПечати) + + Результат = Новый СписокЗначений; + МодульУправлениеДоступом = Неопределено; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + КонецЕсли; + + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + + ИзменениеРазрешено = Истина; + Если МодульУправлениеДоступом <> Неопределено Тогда + ИзменениеРазрешено = МодульУправлениеДоступом.ИзменениеРазрешено(ОбъектПечати); + КонецЕсли; + Результат.Добавить(ОбъектПечати,, ИзменениеРазрешено); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Параметры: +// ИмяМенеджераПечати - Строка - менеджер печати для выгружаемых объектов; +// ИменаМакетов - Строка - идентификаторы печатных форм; +// МассивОбъектов - ЛюбаяСсылка +// - Массив из ЛюбаяСсылка - объекты печати; +// ВладелецФормы - ФормаКлиентскогоПриложения - форма, из которой выполняется выгрузка; +// ОписаниеКоманды - Структура - произвольные параметры для передачи в менеджер печати. +// +&НаКлиенте +Процедура ВыполнитьКомандуВыгрузитьВФайл(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ВладелецФормы, ОписаниеКоманды) + + Если НЕ ПроверитьКоличествоПереданныхОбъектов(МассивОбъектов) Тогда + Возврат; + КонецЕсли; + + ПараметрыОткрытия = УправлениеПечатьюСлужебныйКлиент.ПараметрыОткрытияФормыПечати(); + ПараметрыОткрытия.ИмяМенеджераПечати = ИмяМенеджераПечати; + ПараметрыОткрытия.ИменаМакетов = ИменаМакетов; + ПараметрыОткрытия.ПараметрКоманды = МассивОбъектов; + ПараметрыОткрытия.ПараметрыПечати = ОписаниеКоманды; + + Если ВладелецФормы = Неопределено Тогда + ПараметрыОткрытия.УникальныйИдентификаторХранилища = Новый УникальныйИдентификатор; + Иначе + ПараметрыОткрытия.УникальныйИдентификаторХранилища = ВладелецФормы.УникальныйИдентификатор; + КонецЕсли; + + АдресРезультата = ВыполнитьКомандуВыгрузкиВФайл(ПараметрыОткрытия); + ВыполнитьКомандуВыгрузкиВФайлЗавершение(АдресРезультата, ОписаниеКоманды); + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьКомандуВыгрузкиВФайл(Знач ПараметрыОткрытия) + + ОбъектыПечати = ПараметрыОткрытия.ПараметрКоманды; + КомандыВыгрузки = ПараметрыОткрытия.ПараметрыПечати; + УникальныйИдентификаторХранилища = ПараметрыОткрытия.УникальныйИдентификаторХранилища; + НастройкиСохранения = УправлениеПечатью.НастройкиСохранения(); + НастройкиСохранения.ПереводитьИменаФайловВТранслит = ПереводитьИменаФайловВТранслит; + + ТаблицаФайлов = ВыгрузкаОбъектовВФайлы.СохранитьПоФорматуВФайл(КомандыВыгрузки, ОбъектыПечати, НастройкиСохранения); + АдресРезультата = ПоместитьВоВременноеХранилище(ТаблицаФайлов, УникальныйИдентификаторХранилища); + Возврат АдресРезультата; + +КонецФункции + +&НаКлиенте +Функция ПроверитьКоличествоПереданныхОбъектов(ПараметрКоманды) + + ОбъектыПереданы = Истина; + + Если ТипЗнч(ПараметрКоманды) = Тип("Массив") + И ПараметрКоманды.Количество() = 0 Тогда + ОбъектыПереданы = Ложь; + КонецЕсли; + + Возврат ОбъектыПереданы; + +КонецФункции + +&НаКлиенте +Процедура ВыполнитьКомандуВыгрузкиВФайлЗавершение(АдресРезультата, ПараметрыПечати) + + ФайлыВоВременномХранилище = ОбработатьСообщенияИПоместитьРезультатВоВременноеХранилище( + АдресРезультата, + ПараметрыПечати); + + Если ФайлыВоВременномХранилище.Количество() > 0 Тогда + + Если ВариантВыгрузки = "СохранитьВПапку" Тогда + + СохранитьПечатныеФормыВКаталог(ФайлыВоВременномХранилище, ВыбранныйКаталог); + + Иначе + + ЗаписанныеОбъекты = ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище); + + Если ЗаписанныеОбъекты.Количество() > 0 Тогда + ОповеститьОбИзменении(ТипЗнч(ЗаписанныеОбъекты[0])); + КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент"); + МодульРаботаСФайламиСлужебныйКлиент.ОповеститьОбИзмененииФайлов(ЗаписанныеОбъекты); + КонецЕсли; + + ПоказатьОповещениеПользователя(,, НСтр("ru = 'Сохранение завершено'"), БиблиотекаКартинок.Информация32); + + КонецЕсли; + + КонецЕсли; + + Закрыть(); + +КонецПроцедуры + +&НаСервере +Функция ОбработатьСообщенияИПоместитьРезультатВоВременноеХранилище(Знач АдресРезультата, Знач ПараметрыПечати) + + Представление = ПараметрыПечати.Представление; + + ФайлыВоВременномХранилище = Новый Массив; + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + ТаблицаРезультата = Результат.ТаблицаФайлов; + МассивОшибок = Результат.МассивОшибок; + + Для Каждого ТекстСообщения Из МассивОшибок Цикл + + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); + + КонецЦикла; + + Иначе + + ТаблицаРезультата = Результат; + + КонецЕсли; + + УдалитьИзВременногоХранилища(АдресРезультата); + + Для Каждого ТекущиеДанныеФайла Из ТаблицаРезультата Цикл + + ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище( + ТекущиеДанныеФайла.ДвоичныеДанные, + Новый УникальныйИдентификатор()); + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); + ОписаниеФайла.Вставить("Представление", ТекущиеДанныеФайла.ИмяФайла); + ОписаниеФайла.Вставить("ОбъектВыгрузки", ТекущиеДанныеФайла.ОбъектВыгрузки); + ФайлыВоВременномХранилище.Добавить(ОписаниеФайла); + + КонецЦикла; + + Если УпаковатьВАрхив Тогда + + ФайлыВоВременномХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременномХранилище, Представление); + + КонецЕсли; + + Возврат ФайлыВоВременномХранилище; + +КонецФункции + +&НаКлиенте +Процедура СохранитьПечатныеФормыВКаталог(СписокФайловВоВременномХранилище, Знач ИмяКаталога = "") + + Если РасширениеДляРаботыСФайламиПодключено И ЗначениеЗаполнено(ИмяКаталога) Тогда + ИмяКаталога = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога); + Иначе + + ПриПодготовкеИменФайлов(СписокФайловВоВременномХранилище, ""); + Возврат; + + КонецЕсли; + + ОписаниеОповещения = Новый ОписаниеОповещения("ПриПодготовкеИменФайлов", ЭтотОбъект, ИмяКаталога); + ПараметрыПодготовки = УправлениеПечатьюКлиент.ПараметрыПодготовкиИменФайлов( + СписокФайловВоВременномХранилище, + ИмяКаталога, + ОписаниеОповещения); + ПодготовитьИменаФайловДляСохраненияВКаталог(ПараметрыПодготовки); + +КонецПроцедуры + +// Сохраняет файл в переданном каталоге, показывает окно оповещения о результатах сохранения +// +// Параметры: +// СписокФайловВоВременномХранилище - Массив из Структура: +// * Представление - Строка +// * АдресВоВременномХранилище - Строка +// ИмяКаталога - Строка +// +&НаКлиенте +Процедура ПриПодготовкеИменФайлов(СписокФайловВоВременномХранилище, ИмяКаталога) Экспорт + + СохраняемыеФайлы = Новый Массив; + + Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл + + ИмяФайла = ФайлДляЗаписи.Представление; + СохраняемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, ФайлДляЗаписи.АдресВоВременномХранилище)); + + КонецЦикла; + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); + ПараметрыСохранения.Диалог.Каталог = ИмяКаталога; + ПараметрыСохранения.Интерактивно = Не ЗначениеЗаполнено(ИмяКаталога); + ФайловаяСистемаКлиент.СохранитьФайлы(Неопределено, СохраняемыеФайлы, ПараметрыСохранения); + +#Если Не ВебКлиент Тогда + + Если ЗначениеЗаполнено(ИмяКаталога) Тогда + + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьПапкуСохранения", ЭтотОбъект, ИмяКаталога); + Шаблон = НСтр("ru = 'в папку %1'"); + ПутьСохранения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяКаталога); + Текст = НСтр("ru = 'Сохранение успешно завершено'"); + ПоказатьОповещениеПользователя( + Текст, + ОписаниеОповещения, + ПутьСохранения, + БиблиотекаКартинок.ДиалогИнформация); + + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + +// Открывает проводник с указанным путем. +// +// Параметры: +// ИмяКаталога - Строка +// +&НаКлиенте +Процедура ОткрытьПапкуСохранения(ИмяКаталога) Экспорт + + ФайловаяСистемаКлиент.ОткрытьПроводник(ИмяКаталога); + +КонецПроцедуры + +// Параметры: +// ПараметрыПодготовки - см. УправлениеПечатьюКлиент.ПараметрыПодготовкиИменФайлов +// +&НаКлиенте +Процедура ПодготовитьИменаФайловДляСохраненияВКаталог(ПараметрыПодготовки) + + УправлениеПечатьюКлиент.ПодготовитьИменаФайловДляСохраненияВКаталог(ПараметрыПодготовки); + +КонецПроцедуры + +// Помещает файл в архив. +// +// Параметры: +// ПечатныеФормыДокументов - Массив из Структура +// ПредставлениеВАрхив - Строка +// +// Возвращаемое значение: +// Массив из Структура: +// * Представление - Строка +// * ОбъектПечати - Строка +// * АдресВоВременномХранилище - Строка +// +&НаСервере +Функция ПоместитьФайлыВАрхив(ПечатныеФормыДокументов, ПредставлениеВАрхив) + + Перем ЗаписьZipФайла; // ЗаписьZipФайла + ИмяАрхива = ""; + + Результат = Новый Массив; // Массив из Структура + + УстанавливатьОбъектПечати = ВариантВыгрузки = "Присоединить"; + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); + СоответствиеДляАрхивов = Новый Соответствие; + + Для Каждого СтруктураФайла Из ПечатныеФормыДокументов Цикл + + ДанныеФайла = ПолучитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище); + УдалитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище); + ПолноеИмяФайла = ИмяВременногоКаталога + СтруктураФайла.Представление; + ПолноеИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ПолноеИмяФайла); + ДанныеФайла.Записать(ПолноеИмяФайла); + + Если УстанавливатьОбъектПечати Тогда + + ОбъектВыгрузки = СтруктураФайла.ОбъектВыгрузки; + + Иначе + + ОбъектВыгрузки = Неопределено; + + КонецЕсли; + + Если СоответствиеДляАрхивов[ОбъектВыгрузки] = Неопределено Тогда + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); + ПараметрыЗаписи = Новый Структура("ЗаписьZipФайла, ИмяАрхива", ЗаписьZipФайла, ИмяАрхива); + СоответствиеДляАрхивов.Вставить(ОбъектВыгрузки, ПараметрыЗаписи); + + КонецЕсли; + + СоответствиеДляАрхивов[ОбъектВыгрузки].ЗаписьZipФайла.Добавить(ПолноеИмяФайла); + + КонецЦикла; + + Для Каждого АрхивОбъекта Из СоответствиеДляАрхивов Цикл + + ЗаписьZipФайла = АрхивОбъекта.Значение.ЗаписьZipФайла; + ИмяАрхива = АрхивОбъекта.Значение.ИмяАрхива; + ЗаписьZipФайла.Записать(); + ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); + УникальныйИдентификаторХранилища = Новый УникальныйИдентификатор; + ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификаторХранилища); + ИмяФайлаВАрхив = ИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, ПредставлениеВАрхив); + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Представление", ИмяФайлаВАрхив); + ОписаниеФайла.Вставить("ОбъектВыгрузки", АрхивОбъекта.Ключ); + ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); + Результат.Добавить(ОписаниеФайла); + ФайловаяСистема.УдалитьВременныйФайл(ИмяАрхива); + + КонецЦикла; + + ФайловаяСистема.УдалитьВременныйКаталог(ИмяВременногоКаталога); + + Возврат Результат; + +КонецФункции + +// Возвращает имя файла в архива. +// +// Параметры: +// ПереводитьИменаФайловВТранслит - Булево +// ПредставлениеВАрхив - Строка +// +// Возвращаемое значение: +// Строка - имя файла для архива +// +&НаСервере +Функция ИмяФайлаДляАрхива(ПереводитьИменаФайловВТранслит, ПредставлениеВАрхив) + + Результат = ""; + Если ПредставлениеВАрхив <> "" Тогда + Результат = ПредставлениеВАрхив; + Иначе + Результат = НСтр("ru = 'Документы'"); + КонецЕсли; + + Если ПереводитьИменаФайловВТранслит Тогда + Результат = СтроковыеФункции.СтрокаЛатиницей(Результат); + КонецЕсли; + + Возврат Результат + ".zip"; + +КонецФункции + +&НаСервере +Функция ПрисоединитьПечатныеФормыКОбъекту(Знач ФайлыВоВременномХранилище) + + Результат = Новый Массив; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайлами = ОбщегоНазначения.ОбщийМодуль("РаботаСФайлами"); + Для Каждого Файл Из ФайлыВоВременномХранилище Цикл + + Если МодульРаботаСФайлами.КОбъектуМожноПрисоединятьФайлы(Файл.ОбъектВыгрузки) Тогда + + ПараметрыФайла = МодульРаботаСФайлами.ПараметрыДобавленияФайла(); + ПараметрыФайла.ВладелецФайлов = Файл.ОбъектВыгрузки; + ПараметрыФайла.ИмяБезРасширения = Файл.Представление; + ПрисоединенныйФайл = МодульРаботаСФайлами.ДобавитьФайл( + ПараметрыФайла, Файл.АдресВоВременномХранилище, , НСтр("ru = 'Выгрузка'")); + Результат.Добавить(ПрисоединенныйФайл); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура УстановитьСтраницуМестаСохранения() + + Если Элементы.КаталогДляСохраненияФайлов.Видимость Тогда + Элементы.КаталогДляСохраненияФайлов.Доступность = (ВариантВыгрузки <> "Присоединить"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/СохранениеПоФорматуВыгрузки.mdo b/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/СохранениеПоФорматуВыгрузки.mdo new file mode 100644 index 000000000..b81e76f04 --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПоФорматуВыгрузки/СохранениеПоФорматуВыгрузки.mdo @@ -0,0 +1,10 @@ + + + СохранениеПоФорматуВыгрузки + + ru + Сохранение по формату выгрузки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html b/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html index f5a8687ae..98f95d4a2 100644 --- a/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html +++ b/SSL/src/CommonForms/УстановленныеИсправления/Help/ru.html @@ -1,18 +1,18 @@

          Предназначен для управления исправлениями (патчами).

          Открывается с помощью ссылки Установленные исправления (патчи) в разделе Администрирование - Обновление приложения.

          -

          Исправление (патч) позволяет оперативно исправлять ошибки в приложении, не дожидаясь следующего исправительного релиза. Установка патчей также не требует обязательного завершения сеансов пользователей, работающих с приложением. Для применения исправлений достаточно перезапустить приложение в удобный момент времени.

          -

          Автоматическая установка патчей

          +

          Исправление (патч) позволяет оперативно исправлять ошибки в приложении, не дожидаясь следующего исправительного релиза. Установка патчей также не требует обязательного завершения сеансов пользователей, работающих с приложением. Для применения исправлений достаточно перезапустить приложение в удобный момент времени.

          +

          Автоматическая установка патчей

          -
          • Загрузка и установка патчей выполняется автоматически при наличии подписки 1С:ИТС и доступа к сети Интернет. Это рекомендуемый режим работы. 
          • -
          • Для настройки автоматической загрузки необходимо перейти в раздел Администрирование - Интернет-поддержка и сервисы - Обновление приложения и включить флажок Загружать и устанавливать исправления (патчи) автоматически. Потребуется подключение Интернет-поддержки.

          -

          Установка исправлений вручную

          +
          • Загрузка и установка патчей выполняется автоматически при наличии подписки 1С:ИТС и доступа к сети Интернет. Это рекомендуемый режим работы.
          • +
          • Для настройки автоматической загрузки необходимо перейти в раздел Администрирование - Интернет-поддержка и сервисы - Обновление приложения и включить флажок Загружать и устанавливать исправления (патчи) автоматически. Потребуется подключение Интернет-поддержки.

          +

          Установка исправлений вручную

          Если на компьютере не доступен Интернет, но есть возможность скачать патч с 1С:ИТС:

          • На сайте 1С:ИТС можно прочитать, какую ошибку каждый патч исправляет.
          • -
          • Загрузить архив с патчами с сайта для интересующей версии приложения.
          • +
          • Загрузить архив с патчами с сайта для интересующей версии приложения.
          • Распаковать загруженный архив в произвольный каталог на компьютере.
          • -
          • В данном списке нажать кнопку Установить исправление, для того чтобы открыть помощник Установка обновлений. Следуйте указаниям приложения, при выборе файла обновления или исправления укажите ранее распакованные файлы.
          • +
          • В данном списке нажать кнопку Установить исправление, для того чтобы открыть помощник Установка обновлений. Следуйте указаниям приложения, при выборе файла обновления или исправления укажите ранее распакованные файлы.
          • После установки патчей перезапустить сеанс, для того чтобы они применились и появились в данном списке.

          Удаление исправлений

          • Нажмите кнопку Удалить исправление, если установленное исправление (патч) по каким-либо причинам не устраивает.

          Сохранение на компьютер

          diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Help/ru.html b/SSL/src/CommonForms/УточнениеКонтактов/Help/ru.html index 6e12a1967..b7b4b53aa 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Help/ru.html +++ b/SSL/src/CommonForms/УточнениеКонтактов/Help/ru.html @@ -1,21 +1,21 @@ -

          Предназначена для сохранения адресов отправителей входящих электронных писем в контактах приложения.

          -

          Также можно сопоставить и обновить адреса электронной почты, содержащиеся в письме, с контактами и их текущей контактной информацией в приложении.

          -

          Открывается по ссылке Сохранить адреса в контакты во входящем электронном письме. Если контакты были сопоставлены автоматически, ссылка не выводится. В этом случае можно воспользоваться командой Сохранить адреса в контакты меню Еще.

          +

          Предназначена для сохранения адресов отправителей входящих электронных писем в контактах приложения.

          +

          Также можно сопоставить и обновить адреса электронной почты, содержащиеся в письме, с контактами и их текущей контактной информацией в приложении.

          +

          Открывается по ссылке Сохранить адреса в контакты во входящем электронном письме. Если контакты были сопоставлены автоматически, ссылка не выводится. В этом случае можно воспользоваться командой Сохранить адреса в контакты меню Еще.

          Список состоит из колонок:

          • Адрес в письме - в колонку помещаются все адреса электронной почты, которые фигурируют во входящем письме.
          • Сохранить в контактах: -
            • Контакт - выберите контакт из списков приложения для сопоставления. Если контакт еще не сопоставлен, то открывается окно Выбор контакта. С его помощью можно подобрать соответствующий список приложения. +
              • Контакт - выберите контакт из списков приложения для сопоставления. Если контакт еще не сопоставлен, то открывается окно Выбор контакта. С его помощью можно подобрать соответствующий список приложения.
              • Вид эл.почты контакта - подбирается из контакта автоматически.

            Сопоставление контактов

            • Если адрес был ранее сопоставлен с контактом, то он будет отображен в списке.
            • -
            • Если адрес не был ранее сопоставлен с контактом, или если необходимо сопоставить адрес с другим контактом, или записать адрес в другое поле контактной информации, то в поле Контакт можно выбрать контакт, в который будет записан новый адрес электронной почты. В поле Вид эл. почты контакта можно уточнить, в какое именно поле будет записан электронный адрес контакта. +
            • Если адрес не был ранее сопоставлен с контактом, или если необходимо сопоставить адрес с другим контактом, или записать адрес в другое поле контактной информации, то в поле Контакт можно выбрать контакт, в который будет записан новый адрес электронной почты. В поле Вид эл. почты контакта можно уточнить, в какое именно поле будет записан электронный адрес контакта.
            • С помощью кнопки Записать и закрыть для указанных контактов адреса будут перезаписаны в указанный вид электронной почты.
            • После сопоставления к адресу электронной почты (его представлению) в письме будет добавлено наименование контакта.
            • -
            • Если у контакта в приложении указан адрес электронной почты, то при получении письма от такого контакта сопоставление контакта с адресом электронной почты произойдет автоматически.

            См. также:

            +
          • Если у контакта в приложении указан адрес электронной почты, то при получении письма от такого контакта сопоставление контакта с адресом электронной почты произойдет автоматически.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html b/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html index f7e3c17e0..c890c6400 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html +++ b/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html @@ -3,15 +3,15 @@

          В каждом томе файлы хранятся в подкаталогах. На каждую дату создания версии файла создается свой подкаталог. Все файлы хранятся с оригинальным именем и расширением, между ними добавляется номер версии, например, Приказ2.2.txt.

          Список вызывается по команде Файлы в томе панели навигации Тома.

          В списке выводится:

          -
          • Путь к файлу в томе - полное имя файла, включает подкаталог, в котором хранится файл; +
            • Путь к файлу в томе - полное имя файла, включает подкаталог, в котором хранится файл;
            • Размер - объем в байтах;
            • Автор - пользователь, который добавил файл.

            Отбор файлов

            -
            • Файлы можно отобрать по объекту приложения, к которому они относятся. Для этого в поле Владелец файлов выберите из списка соответствующее значение. Например, можно в качестве владельца выбрать Присоединенные файлы (Встреча) - будут выведены все файлы, которые присоединены к документам Встреча. +
              • Файлы можно отобрать по объекту приложения, к которому они относятся. Для этого в поле Владелец файлов выберите из списка соответствующее значение. Например, можно в качестве владельца выбрать Присоединенные файлы (Встреча) - будут выведены все файлы, которые присоединены к документам Встреча.
              • -
              • Файлы могут храниться в приложении без привязки к каким-либо объектам. Информацию о них можно посмотреть в списке файлов. Для того чтобы просмотреть файлы из этого списка, выберите в качестве владельца Версии файлов.

              Просмотр информации о файле

              -

              См. также:

              +
            • Файлы могут храниться в приложении без привязки к каким-либо объектам. Информацию о них можно посмотреть в списке файлов. Для того чтобы просмотреть файлы из этого списка, выберите в качестве владельца Версии файлов.

            Просмотр информации о файле

            +

            См. также:

            • Общая информация о файлах;
            • Тома хранения файлов; diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form index b045fcd61..c9159de0c 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -3928,6 +3928,17 @@ НастройкиОтчета + + ИдентификаторЭлементаСтруктурыНастроек + + + + ПутьКЭлементуСтруктурыНастроек + + String + + + diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index d3368ea75..0edf2c4dd 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -45,11 +45,8 @@ НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; КонецЕсли; - Параметры.Свойство("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек); - - ПутьКЭлементуСтруктурыНастроек = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - Параметры, "ПутьКЭлементуСтруктурыНастроек", ""); - + ИдентификаторЭлементаСтруктурыНастроек = Параметры.ИдентификаторЭлементаСтруктурыНастроек; + ПутьКЭлементуСтруктурыНастроек = Параметры.ПутьКЭлементуСтруктурыНастроек; ЭлементСтруктуры = ОтчетыСервер.ЭлементНастроекПоПолномуПути(НастройкиКД, ПутьКЭлементуСтруктурыНастроек); Если ЭлементСтруктуры <> Неопределено Тогда ИдентификаторЭлементаСтруктурыНастроек = НастройкиКД.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html index 997ae0f16..33b74cf84 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html @@ -1,7 +1,7 @@

              Предназначена для настройки отчета.

              Открывается из формы отчета по кнопке Настройки.

              -

              С помощью кнопки Вид можно перевести настройки в один из режимов:

              +

              С помощью кнопки Вид можно перевести настройки в один из режимов:

              • Простой - можно только менять уже имеющиеся параметры, с помощью флажков добавлять или убирать их. В простом режиме на вкладке Основное, открыв раздел Дополнительно с помощью кнопки, можно добавить следующие возможности:
                • Выводить заголовок;
                • Выводить параметры и отборы - если флажок выключить, то будет выведена только шапка таблицы отчета, перечень параметров отчета выводиться не будет; @@ -15,13 +15,13 @@
                • Структура - управление структурой отчета.

                Фильтры

                • При формировании отчетов могут использоваться различные параметры и фильтры.
                • -
                • На вкладке можно менять параметры фильтров (отборов). С помощью флажка отбор по параметру (например, Период) можно сделать активным или отключить. +
                • На вкладке можно менять параметры фильтров (отборов). С помощью флажка отбор по параметру (например, Период) можно сделать активным или отключить.
                • -
                • В Простом режиме можно в каждом поле с помощью соответствующей команды контекстного меню по правой кнопке мыши Изменить условия отбора. +
                • В Простом режиме можно в каждом поле с помощью соответствующей команды контекстного меню по правой кнопке мыши Изменить условия отбора.
                • -
                • Для выбора значений может быть предусмотрена ссылка Подбор. Выберите конкретное значение из списка. +
                • Для выбора значений может быть предусмотрена ссылка Подбор. Выберите конкретное значение из списка.
                • -
                • С помощью кнопки  можно выбрать значения из буфера обмена. +
                • С помощью кнопки можно выбрать значения из буфера обмена.
                • В режиме Расширенный можно перейти к настройке всех предусмотренных параметров отчета.
                • @@ -42,48 +42,48 @@
                • Введите значение параметра с помощью кнопкиВыбрать. Включите флажки рядом с параметрами, по которым необходимо произвести отбор. Можно задействовать все параметры для отбора или часть, включая или выключая флажки.
                • Для выбора нескольких значений предусмотрена кнопка Подбор. Откройте список, выберите несколько значений из списка. Включите флажки рядом с нужными для отбора параметрами. Введите значения параметров для отбора или выберите из списка.
                -
              •  Размещение - видимость параметра или фильтра в окне отчета. Для смены видимости фильтра с помощью двойного щелчка мышью можно выбрать одно из нескольких значений: -
                •  В шапке отчета - параметр или фильтр выводится в шапке отчета и в шапке настроек отчета; +
                • Размещение - видимость параметра или фильтра в окне отчета. Для смены видимости фильтра с помощью двойного щелчка мышью можно выбрать одно из нескольких значений: +
                  • В шапке отчета - параметр или фильтр выводится в шапке отчета и в шапке настроек отчета;
                  • -
                  •  Только флажок в шапке отчета - в шапке отчета и шапке настроек отчета выводится только флажок отбора. С помощью флажка можно только включить или отключить этот отбор. При таком размещении рекомендуется задать полностью понятный заголовок, описывающий значение отбора, поскольку значение отбора не выводится. Применимо только для отборов; +
                  • Только флажок в шапке отчета - в шапке отчета и шапке настроек отчета выводится только флажок отбора. С помощью флажка можно только включить или отключить этот отбор. При таком размещении рекомендуется задать полностью понятный заголовок, описывающий значение отбора, поскольку значение отбора не выводится. Применимо только для отборов;
                  • -
                  •  В настройках отчета - параметр или отбор выводится в форме настроек. Используется по умолчанию; +
                  • В настройках отчета - параметр или отбор выводится в форме настроек. Используется по умолчанию;
                  • -
                  •  Только флажок в настройках отчета - в настройках отчета выводится только флажок отбора. С помощью флажка можно только включить или отключить этот отбор. При таком размещении рекомендуется задать полностью понятный заголовок, описывающий значение отбора, поскольку значение отбора не выводится. Применимо только для отборов; +
                  • Только флажок в настройках отчета - в настройках отчета выводится только флажок отбора. С помощью флажка можно только включить или отключить этот отбор. При таком размещении рекомендуется задать полностью понятный заголовок, описывающий значение отбора, поскольку значение отбора не выводится. Применимо только для отборов;
                  • -
                  •  Не показывать - параметр или отбор выводится только в расширенном режиме настроек отчета.
                • +
                • Не показывать - параметр или отбор выводится только в расширенном режиме настроек отчета.
              • Заголовок - можно ввести свой заголовок для отбора.
            • Отборы можно группировать. Для этого выделите несколько условий для отбора, выполните команду Сгруппировать контекстного меню по правой кнопке мыши или меню Еще. Объединить отборы можно в группы И, Или, Не. Для отмены группировки выполните команду Разгруппировать.
            • -
            • Подробнее об отчетах и операциях отборов см. книгу 1С:Предприятие 8.3 Руководство пользователя.

            Поля и сортировки

            +
          • Подробнее об отчетах и операциях отборов см. книгу 1С:Предприятие 8.3 Руководство пользователя.

          Поля и сортировки

          • Вкладка Поля и сортировки состоит из двух частей:
            • В правой части можно с помощью флажков удалить или добавить поля в отчет. Данная настройка меняет вид всего отчета;
            • В левой части можно: -
              • с помощью кнопок  и  можно добавлять или удалять поля для сортировки. +
                • с помощью кнопок и можно добавлять или удалять поля для сортировки.
                • -
                • с помощью кнопки  Удалить все сортировки. +
                • с помощью кнопки Удалить все сортировки.
                • -
                • нажав на ссылку, изменить порядок сортировки, с помощью флажка включить или отключить сортировку. +
                • нажав на ссылку, изменить порядок сортировки, с помощью флажка включить или отключить сортировку.
                • -
                • если сортировок несколько, то с помощью кнопок  и  поднять или понизить приоритет сортировки.
            • +
            • если сортировок несколько, то с помощью кнопок и поднять или понизить приоритет сортировки.
        • В расширенном режиме можно: -
          • в правой части с помощью кнопки Добавить вывести в отчет другие поля документов и списков приложения; +
            • в правой части с помощью кнопки Добавить вывести в отчет другие поля документов и списков приложения;
            • -
            • в левой части с помощью соответствующей кнопки Добавить сортировку по полю. Выберите поле для сортировки из предлагаемого приложения списка.

          Оформление

          -
          • На вкладке в простом режиме можно:
          • +
          • в левой части с помощью соответствующей кнопки Добавить сортировку по полю. Выберите поле для сортировки из предлагаемого приложения списка.
        • Оформление

          +
          • На вкладке в простом режиме можно:
            • поменять некоторые параметры оформления отчета, например, с помощью флажка включить или выключить Цвет фона, в который можно окрасить все поля. Можно также включить Заголовок.
          • В расширенном режиме:
          • -
            • Можно настроить индивидуальные Колонтитулы. Если они не устраивают, можно их отменить с помощью команды Установить стандартные настройки меню Еще. 
            • -
            • Включите флажок, для того чтобы Выводить заголовок для печати. Также эта возможность предусмотрена в простом режиме в разделе Дополнительно. Заголовок можно изменить. Для этого дважды щелкните мышкой по строке с наименованием заголовка.
            • +
              • Можно настроить индивидуальные Колонтитулы. Если они не устраивают, можно их отменить с помощью команды Установить стандартные настройки меню Еще.
              • +
              • Включите флажок, для того чтобы Выводить заголовок для печати. Также эта возможность предусмотрена в простом режиме в разделе Дополнительно. Заголовок можно изменить. Для этого дважды щелкните мышкой по строке с наименованием заголовка.
              • Выводить фильтры - если флажок включен, то в отчете выводится строка с перечнем настроенных фильтров.
              • Предусмотрена возможность условного оформления, т.е. можно изменить цвет полей в зависимости от некоторого условия.
              • С помощью кнопки Добавить можно ввести новый Элемент условного оформления отчета.

            Структура

            • Изменить параметры на вкладке можно только в Расширенном режиме.
            • -
            • На вкладке можно добавить группируемые поля в отчет. С помощью кнопок панели навигации можно добавить, изменить поля, поменять их местами. +
            • На вкладке можно добавить группируемые поля в отчет. С помощью кнопок панели навигации можно добавить, изменить поля, поменять их местами.
            • -
            • С помощью кнопки  можно изменить группировку отчета. Для каждого элемента структуры отчета можно на одноименных вкладках настроить: +
            • С помощью кнопки можно изменить группировку отчета. Для каждого элемента структуры отчета можно на одноименных вкладках настроить:
              • Состав группировки;
                • На вкладке можно с помощью кнопки Добавить выбрать поле для группировки. Выберите из списка Тип группировки: Без иерархии, Иерархия, Только иерархия.
                • @@ -94,19 +94,19 @@
                • Оформление.

              Добавление формул в окне Выбор поля отчета

              -
              • В настройках в окне Выбор поля отчета (из всех вкладок открывается по кнопке Добавить) имеется возможность работать с формулами. Открывается окно Редактирование формулы. 
              • +
                • В настройках в окне Выбор поля отчета (из всех вкладок открывается по кнопке Добавить) имеется возможность работать с формулами. Открывается окно Редактирование формулы.
                • Нажмите кнопку Добавить формулу для перехода к построению формулы.
                • Появляется новый элемент в группе Формулы. Заменить формулой имеющиеся поля невозможно. В формулу можно добавить различные поля из списка и операции (арифметические операторы, операции сравнения, логические операции, агрегатные функции). Можно добавить Наименование формулы в нижней части окна. После окончания составления формулы необходимо нажать кнопку Завершить редактирование, выделить новую формулу и нажать Выбрать.
                • -
                • После добавления формулы ее можно редактировать с помощью кнопки . Также можно сделать с помощью команды контекстного меню по правой кнопке мыши.
              +
            • После добавления формулы ее можно редактировать с помощью кнопки . Также можно сделать с помощью команды контекстного меню по правой кнопке мыши.

            Изменение условий отборов

            • -
              С помощью кнопки  можно просмотреть и при необходимости Изменить условия отборов по каждому полю.

            Получение данных отчета

            -
            • Укажите нужные параметры, нажмите кнопку Закрыть и сформировать. Последние настройки будут сохранены автоматически. Если были применены ошибочные настройки, их можно не только изменить, но и сбросить с помощью команд формы отчета.

            Изменение варианта отчета

            -
            • Нажмите Еще - Настройки для технического специалиста. Можно добавить поля, изменить параметры и настройки отчета. 
            • +
              С помощью кнопки можно просмотреть и при необходимости Изменить условия отборов по каждому полю.

            Получение данных отчета

            +
            • Укажите нужные параметры, нажмите кнопку Закрыть и сформировать. Последние настройки будут сохранены автоматически. Если были применены ошибочные настройки, их можно не только изменить, но и сбросить с помощью команд формы отчета.

            Изменение варианта отчета

            +
            • Нажмите Еще - Настройки для технического специалиста. Можно добавить поля, изменить параметры и настройки отчета.
            • Внесенные изменения можно сохранить в другой вариант отчета.
            \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index dce9e1042..e3b033dbb 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -14,6 +14,8 @@ Перем ПриемникПеретаскиванияНаКлиенте; &НаКлиенте Перем Список_ПередНачаломИзменения; +&НаСервере +Перем НесуществующиеПоля; #КонецОбласти @@ -277,8 +279,7 @@ УстановитьМодифицированность(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые +#Область Подключаемые &НаКлиенте Процедура Подключаемый_Период_ПриИзменении(Элемент) @@ -471,6 +472,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыСортировка &НаКлиенте @@ -2005,16 +2008,14 @@ &НаКлиенте Процедура НастроитьКолонтитулы(Команда) - Перем Настройки; - Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", Настройки); - - ОткрытьФорму("ОбщаяФорма.НастройкаКолонтитулов", - Новый Структура("Настройки", Настройки), - ЭтотОбъект, - УникальныйИдентификатор,,, + Перем НастройкиКолонтитулов; + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", НастройкиКолонтитулов); + ОткрытьФорму("ОбщаяФорма.НастройкаКолонтитулов", Новый Структура("Настройки, ЭтоИндивидуальныеНастройки", НастройкиКолонтитулов, Истина), + ЭтотОбъект, УникальныйИдентификатор,,, Новый ОписаниеОповещения("ЗапомнитьНастройкиКолонтитулов", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецПроцедуры #КонецОбласти @@ -2072,8 +2073,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые команды +#Область ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыбратьПериод(Команда) @@ -2132,6 +2132,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -5827,8 +5829,7 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура ЗаписатьИЗакрыть(Переформировать) @@ -6146,8 +6147,9 @@ Возврат Ложь; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Таблицы полей (универсальные точки входа). +#КонецОбласти + +#Область КлиентТаблицыПолейУниверсальныеТочкиВхода &НаКлиенте Процедура ВыбратьРежимОтображенияДляСтрок(СвойстваЭлементовНастроек, ИмяКоллекции, ПоказыватьРежимыФлажков = Ложь, ТекущийРежимОтображения = Неопределено) @@ -6342,8 +6344,9 @@ Возврат КартинкаРежимаОтображения; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент - Таблицы полей (функциональная часть). +#КонецОбласти + +#Область КлиентТаблицыПолейФункциональнаяЧасть // Параметры: // УзелНастроек - НастройкиКомпоновкиДанных @@ -6585,8 +6588,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент или сервер +#КонецОбласти + +#Область КлиентИлиСервер &НаКлиентеНаСервереБезКонтекста Функция МассивСортировать(ИсходныйМассив, Направление = Неопределено) @@ -6601,8 +6605,9 @@ Возврат Список.ВыгрузитьЗначения(); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Процедура ОбновитьФорму(ПараметрыОбновления) @@ -6647,7 +6652,9 @@ // Поиск помеченных на удаление. ПомеченныеНаУдаление.Очистить(); + НесуществующиеПоля = Новый Соответствие; НайтиПомеченныеНаУдалениеПоля(); + УстановитьПодсказкуНесуществующихПолей(НесуществующиеПоля); КонецПроцедуры &НаСервере @@ -6912,8 +6919,9 @@ #КонецОбласти КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура ОпределитьПоведениеВМобильномКлиенте() @@ -7716,6 +7724,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработкаПомеченныхНаУдалениеПолей // Поиск полей, помеченных на удаление. @@ -7791,6 +7801,7 @@ Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); Запись.КлючСвойстваЭлементаСтруктуры = "Выбор"; + ДобавитьНесуществующееПоле(ЭлементНастройки.Поле, НСтр("ru = 'Выбор'")); КонецЦикла; КонецПроцедуры @@ -7820,6 +7831,7 @@ Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); Запись.КлючСвойстваЭлементаСтруктуры = "Отбор"; + ДобавитьНесуществующееПоле(ЭлементНастройки.ЛевоеЗначение, НСтр("ru = 'Отбор'")); КонецЦикла; КонецПроцедуры @@ -7843,6 +7855,7 @@ Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); Запись.КлючСвойстваЭлементаСтруктуры = "Порядок"; + ДобавитьНесуществующееПоле(ЭлементНастройки.Поле, НСтр("ru = 'Порядок'")); КонецЦикла; КонецПроцедуры @@ -7865,6 +7878,7 @@ Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); Запись.КлючСвойстваЭлементаСтруктуры = "УсловноеОформление"; + ДобавитьНесуществующееПоле(Элемент.Поле, НСтр("ru = 'Условное оформление'")); КонецЦикла; НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления(Настройки, ЭлементСтруктуры, ЭлементНастройки); @@ -7894,6 +7908,7 @@ Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементОформления); Запись.КлючСвойстваЭлементаСтруктуры = "УсловноеОформление"; + ДобавитьНесуществующееПоле(ЭлементНастройки.ЛевоеЗначение, НСтр("ru = 'Условное оформление'")); КонецЦикла; КонецПроцедуры @@ -7913,6 +7928,7 @@ Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры); Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки); Запись.КлючСвойстваЭлементаСтруктуры = "ПоляГруппировки"; + ДобавитьНесуществующееПоле(ЭлементНастройки.Поле, НСтр("ru = 'Поля группировки'")); КонецЦикла; КонецПроцедуры @@ -7958,6 +7974,44 @@ КонецФункции +&НаСервере +Процедура ДобавитьНесуществующееПоле(Знач ИмяПоля, Знач ИмяКоллекции) + + ИмяПоля = Строка(ИмяПоля); + ИмяКоллекции = Строка(ИмяКоллекции); + + Свойства = НесуществующиеПоля.Получить(ИмяПоля); + Если Свойства = Неопределено Тогда + Свойства = Новый Массив; + НесуществующиеПоля.Вставить(ИмяПоля, Свойства); + КонецЕсли; + + Если Свойства.Найти(ИмяКоллекции) = Неопределено Тогда + Свойства.Добавить(ИмяКоллекции); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПодсказкуНесуществующихПолей(НесуществующиеПоля) + + ТекстПодсказки = + НСтр("ru = 'Несуществующие поля могут появиться, если разработчик отчета удалил поле или запретил его вывод. + |Использование таких полей может привести к ошибкам при формировании отчета. + |Рекомендуется удалить несуществующие поля из настроек отчета или заменить их на существующие.'"); + + Строки = Новый Массив; + Для Каждого КлючИЗначение Из НесуществующиеПоля Цикл + Строки.Добавить("- " + КлючИЗначение.Ключ + " (" + СтрСоединить(КлючИЗначение.Значение, ", ") + ")"); + КонецЦикла; + + Элементы.ГруппаЕстьНесуществующиеПоля.РасширеннаяПодсказка.Заголовок = ТекстПодсказки + + Символы.ПС + Символы.ПС + + НСтр("ru = 'Несуществующие поля:'") + + Символы.ПС + СтрСоединить(Строки, Символы.ПС); + +КонецПроцедуры + // Удаление полей, помеченных на удаление. &НаКлиенте diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index 9d8b2bdfe..cbe7b827c 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -782,14 +782,14 @@ - ГруппаСохранениеИРассылкаВарианта + ПодменюОтправить 1123 СохранитьОтчет 1101 <key>ru</key> - <value>Сохранить в файл</value> + <value>На компьютер</value> true true @@ -815,40 +815,40 @@ Auto InCommandBar + + ОтправитьПоПочте + 97 + + <key>ru</key> + <value>Почта</value> + + true + true + + true + + + ОтправитьПоПочтеРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Form.Command.ОтправитьПоПочте + Normal + Picture + true + true + UserCmds + Auto + InCommandBar + ГруппаОтправить 63 - - ОтправитьПоПочте - 97 - - <key>ru</key> - <value>Отправить сейчас...</value> - - true - true - - true - - - ОтправитьПоПочтеРасширеннаяПодсказка - 128 - Label - true - true - - Left - - - Form.Command.ОтправитьПоПочте - Normal - Picture - true - true - UserCmds - Auto - InCommandBar - true true @@ -872,14 +872,7 @@ Left - Popup - - - CommonPicture.ЭлектронноеПисьмо - - Picture - Normal - + true true @@ -888,10 +881,10 @@ <key>ru</key> - <value>Сохранение и рассылка варианта</value> + <value>Отправить</value> - ГруппаСохранениеИРассылкаВариантаРасширеннаяПодсказка + ПодменюОтправитьРасширеннаяПодсказка 1124 Label true @@ -900,8 +893,13 @@ Left - - Compact + Popup + + + StdPicture.SendMessage + + Auto + Normal true @@ -2625,46 +2623,46 @@ Auto InAdditionalSubmenu - - СохранитьОтчетЕще - 1103 - - <key>ru</key> - <value>Сохранить в файл</value> - - true - true - - true - - - СохранитьОтчетЕщеРасширеннаяПодсказка - 1104 - Label + + ГруппаОтправитьОтчетЕще + 1226 + + СохранитьОтчетЕще + 1103 + + <key>ru</key> + <value>На компьютер</value> + + true + true + + true + + + СохранитьОтчетЕщеРасширеннаяПодсказка + 1104 + Label + true + true + + Left + + + Form.Command.СохранитьОтчет + Normal + Auto true true - - Left - - - Form.Command.СохранитьОтчет - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ГруппаОтправитьЕще - 754 + UserCmds + Auto + InAdditionalSubmenu + ОтправитьПоПочтеЕще 756 <key>ru</key> - <value>Отправить сейчас...</value> + <value>Почта</value> true true @@ -2690,6 +2688,34 @@ Auto InAdditionalSubmenu + + ГруппаОтправитьЕще + 754 + true + true + + true + + + <key>ru</key> + <value>Отправить</value> + + + ru + Отправить отчет по электронной почте + + + ГруппаОтправитьЕщеРасширеннаяПодсказка + 755 + Label + true + true + + Left + + + + true true @@ -2699,13 +2725,9 @@ ru Отправить - - ru - Отправить отчет по электронной почте - - ГруппаОтправитьЕщеРасширеннаяПодсказка - 755 + ГруппаОтправитьОтчетЕщеРасширеннаяПодсказка + 1227 Label true true @@ -2716,9 +2738,9 @@ Popup - CommonPicture.ЭлектронноеПисьмо + StdPicture.SendMessage - Picture + Auto Normal @@ -7881,7 +7903,7 @@ СохранитьВариантОтчетаВФайл <key>ru</key> - <value>Сохранить в файл...</value> + <value>На компьютер</value> 22 diff --git a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html index 424b89c8a..102bc6d81 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html @@ -1,11 +1,11 @@ -

            Для просмотра отчета необходимо нажать кнопку Сформировать, предварительно задав параметры (если они предусмотрены). В клиент-серверном варианте работы приложения предусмотрено формирование отчетов в фоновом режиме.

            -

            В приложении можно установить общие колонтитулы для оформления отчета.

            +

            Для просмотра отчета необходимо нажать кнопку Сформировать, предварительно задав параметры (если они предусмотрены). В клиент-серверном варианте работы приложения предусмотрено формирование отчетов в фоновом режиме.

            +

            В приложении можно установить общие колонтитулы для оформления отчета.

            Режим формирования

            -
            • Установите флажок Формировать сразу меню Еще, для того чтобы отчет формировался автоматически сразу после открытия, без нажатия кнопки Сформировать.

            Период

            +
            • Установите флажок Формировать сразу меню Еще, для того чтобы отчет формировался автоматически сразу после открытия, без нажатия кнопки Сформировать.

            Период

            -
            • Период может выводиться в виде полей Дата начала и Дата окончания. 
            • -
            • Ввести начало и окончание произвольного периода можно вручную или выбрать из календаря с помощью кнопок . 
            • +
              • Период может выводиться в виде полей Дата начала и Дата окончания.
              • +
              • Ввести начало и окончание произвольного периода можно вручную или выбрать из календаря с помощью кнопок .
              • С помощью ссылки Сегодня можно установить в календаре текущую дату.
            • С помощью кнопки справа можно выбрать месяц, квартал или год, а также стандартный период.
            • @@ -16,82 +16,82 @@

              Панель быстрых (избранных) настроек

              • Размещается в шапке отчета, в панель выводятся наиболее важные настройки, некоторые из которых могут быть обязательными для заполнения.
              • -
              • С помощью кнопки  Изменить состав быстрых настроек можно открыть быстрые настройки и изменить их состав с помощью флажков.
              • -
              • С помощью флажка можно Выводить заголовки настроек или спрятать их при необходимости. 
              • +
              • С помощью кнопки Изменить состав быстрых настроек можно открыть быстрые настройки и изменить их состав с помощью флажков.
              • +
              • С помощью флажка можно Выводить заголовки настроек или спрятать их при необходимости.
              • В большинстве случаев поля в шапке отчетов вполне понятны без заголовков: по их содержимому, подсказке ввода или всплывающей подсказке при наведении курсором. Тем самым, шапка отчета занимает меньше места по ширине экрана.
              • С помощью ссылки Больше возможностей можно открыть Настройки отчета (расширенный режим).

              Сохранение отчета

              -
              • С помощью кнопки  (Ctrl+S) можно Сохранить результат отчета в файл. Укажите папку для сохранения, выберите тип и напишите имя файла. Для сохранения отчета можно выбрать несколько типов файла, например в Excel.
              • +
                • С помощью кнопки (Ctrl+S) можно Сохранить результат отчета в файл. Укажите папку для сохранения, выберите тип и напишите имя файла. Для сохранения отчета можно выбрать несколько типов файла, например в Excel.
                • При сохранении результата отчета в формат Excel из шапки отчета скрываются картинки-индикаторы сортировки.

              Расчетные показатели и строка фильтра

              • Справа в шапке отчета выводится строка фильтра и автосуммы (расчетных показателей).
              • -
              • С помощью строки фильтра можно добавлять новые фильтры по точному значению или фрагменту значения любого из полей, выведенных в отчет. Например, для того чтобы быстро установить фильтр по значению Розничный склад, достаточно ввести в эту строку фрагмент "роз" и приложение сама предложит варианты фильтров. Кроме того, можно добавлять фильтры с условиями, например, Остатки > 500. С помощью знаков операций можно построить выражение для поиска.
              • +
              • С помощью строки фильтра можно добавлять новые фильтры по точному значению или фрагменту значения любого из полей, выведенных в отчет. Например, для того чтобы быстро установить фильтр по значению Розничный склад, достаточно ввести в эту строку фрагмент "роз" и приложение сама предложит варианты фильтров. Кроме того, можно добавлять фильтры с условиями, например, Остатки > 500. С помощью знаков операций можно построить выражение для поиска.
              • Если выделить несколько ячеек, можно воспользоваться расчетом показателей, в этом случае в данной строке появляется результат.
              • -
              • Перед строкой фильтра предусмотрена кнопка  с выпадающим подменю для выбора основного вида расчетного показателя для выделенных ячеек:
              • -
                • С помощью кнопки  можно открыть выпадающее меню расчетных показателей для выделенных ячеек (выбранный показатель отображается на кнопке): Сумма, Количество, Среднее арифметическое выделенных ячеек, Минимум и Максимум, значение выводится в универсальной строке поиска.
                • +
                • Перед строкой фильтра предусмотрена кнопка с выпадающим подменю для выбора основного вида расчетного показателя для выделенных ячеек:
                • +
                  • С помощью кнопки можно открыть выпадающее меню расчетных показателей для выделенных ячеек (выбранный показатель отображается на кнопке): Сумма, Количество, Среднее арифметическое выделенных ячеек, Минимум и Максимум, значение выводится в универсальной строке поиска.
                  • Если включить Все показатели, то в нижней части варианта отчета показывается строка, в которой выводятся показатели.
                  • При вычислении показателей выполняется преобразование текстовых строк в выбранных ячейках в числа. Преобразование происходит в соответствии с региональными настройками. При этом если форматирование числовых полей было перенастроено так, что представление числа перестает им соответствовать, то показатели не вычисляются.

              Варианты отчета

              -
              • В приложении может быть предусмотрено несколько вариантов отчетов, выполняющих схожий анализ. Для их просмотра предусмотрена кнопка  Варианты отчета. +
                • В приложении может быть предусмотрено несколько вариантов отчетов, выполняющих схожий анализ. Для их просмотра предусмотрена кнопка Варианты отчета.
                  • Выберите из выпадающего списка нужный вариант отчета. Текущий вариант отчета отмечен флажком.
                  • -
                  • для просмотра списка других вариантов отчетов предназначена команда Другие отчеты. В окне размещен список похожих по смыслу отчетов.
                    • В списке выводятся наименования и описания отчетов. Список отчетов сгруппирован. Предусмотрены группы, в которых выводятся схожие по смыслу другие отчеты того же раздела приложения. 
                    • +
                    • для просмотра списка других вариантов отчетов предназначена команда Другие отчеты. В окне размещен список похожих по смыслу отчетов.
                      • В списке выводятся наименования и описания отчетов. Список отчетов сгруппирован. Предусмотрены группы, в которых выводятся схожие по смыслу другие отчеты того же раздела приложения.
                      • Для перехода к другому варианту отчета нажмите на заголовок левой кнопкой мыши.
                      • -
                      • С помощью соответствующего флажка можно Закрывать окно после перехода к отчету.

                  Сохранение варианта отчета

                  -
                  • Нажмите  Варианты отчета - Сохранить как, укажите Наименование и другие параметры.
                  • -
                  • Также можно воспользоваться командой Сохранить как меню Еще - Варианты отчета.
                  • +
                  • С помощью соответствующего флажка можно Закрывать окно после перехода к отчету.

              Сохранение варианта отчета

              +
              • Нажмите Варианты отчета - Сохранить как, укажите Наименование и другие параметры.
              • +
              • Также можно воспользоваться командой Сохранить как меню Еще - Варианты отчета.
              • Для сохранения пользовательских отчетов предусмотрен быстрый вариант - Сохранить.

              Сохранение варианта отчета в файл

              -
              • Нажмите Еще - Варианты отчета - Сохранить в файл для сохранения варианта отчета вместе с пользовательскими настройками в архивный файл на компьютере. Укажите путь к архивному файлу на компьютере. Вместе с вариантом отчета по умолчанию сохраняются и пользовательские настройки. Можно отменить сохранение всех или некоторых настроек с помощью флажков.
              • +
                • Нажмите Еще - Варианты отчета - Сохранить в файл для сохранения варианта отчета вместе с пользовательскими настройками в архивный файл на компьютере. Укажите путь к архивному файлу на компьютере. Вместе с вариантом отчета по умолчанию сохраняются и пользовательские настройки. Можно отменить сохранение всех или некоторых настроек с помощью флажков.
                • Эта возможность предназначена для обмена настройками вариантов отчетов между информационными базами идентичной структуры.

              Загрузка варианта отчета из файла

              -
              • Нажмите Еще - Варианты отчета - Обновить из файла для загрузки варианта отчета, сохраненного вместе с пользовательскими настройками в архивный файл на компьютере. Укажите путь к архиву с вариантом отчета.
              • +
                • Нажмите Еще - Варианты отчета - Обновить из файла для загрузки варианта отчета, сохраненного вместе с пользовательскими настройками в архивный файл на компьютере. Укажите путь к архиву с вариантом отчета.
                • Данная возможность предназначена для обмена настройками вариантов отчетов между информационными базами идентичной структуры.

                Контекстное меню

                -
                • С помощью команд контекстного меню ячейки по правой кнопке мыши можно быстро изменить вид отчета, настроить фильтры, сортировки:  +
                  • С помощью команд контекстного меню ячейки по правой кнопке мыши можно быстро изменить вид отчета, настроить фильтры, сортировки:
                    • изменить уровни группировок отчета;
                    • -
                    • Открыть значение выделенной ячейки; 
                    • -
                    • С помощью команды Фильтровать можно быстро установить отбор по текущему значению, используя предлагаемые команды сравнения. 
                    • -
                      • С помощью команды Еще можно получить дополнительные возможности по настройке фильтра. 
                      • -
                      • С помощью команды Больше возможностей можно перейти к расширенным настройкам отборов отчета.
                    • Сортировать - по возрастанию или убыванию; 
                    • +
                    • Открыть значение выделенной ячейки;
                    • +
                    • С помощью команды Фильтровать можно быстро установить отбор по текущему значению, используя предлагаемые команды сравнения.
                    • +
                      • С помощью команды Еще можно получить дополнительные возможности по настройке фильтра.
                      • +
                      • С помощью команды Больше возможностей можно перейти к расширенным настройкам отборов отчета.
                    • Сортировать - по возрастанию или убыванию;
                    • Отсортированная колонка обозначается значком.
                    • -
                    • Оформить - быстро изменить цвет выделенных ячеек, высоту и ширину колонки;
                    • +
                    • Оформить - быстро изменить цвет выделенных ячеек, высоту и ширину колонки;
                      • По команде Еще можно перейти к более сложному форматированию для выбранных ячеек, при этом некоторые параметры (поле для условного оформления, отбор) заполняются автоматически из контекста.
                      • -
                      • Можно оформить выбранные ячейки цветом, определить высоту строк или ширину колонок. 
                      • +
                      • Можно оформить выбранные ячейки цветом, определить высоту строк или ширину колонок.
                      • Можно выделить отрицательные или положительные значения цветом.
                    • По команде Детальные записи можно перейти к расшифровке отчета по детальным записям. В структуре такого отчета имеется только один элемент Детальные записи.
                    • -
                    • С помощью команды контекстного меню по правой кнопке мыши можно выбранную позицию отчета Расшифровать по детальным записям.
                    • -
                    • Расшифровать - переход к выбору полей для расшифровки и формированию отчета.
                  • +
                  • С помощью команды контекстного меню по правой кнопке мыши можно выбранную позицию отчета Расшифровать по детальным записям.
                  • +
                  • Расшифровать - переход к выбору полей для расшифровки и формированию отчета.
                • Контекстное меню шапки отчета содержит полезные команды:
                  • с помощью меню по левой кнопке мыши можно настроить сортировку в выбранном поле, задать фильтры по значению, выбрав из списка.
                  • -
                    • По команде Еще можно перейти к настройке поля, вставить в шапку дополнительные поля, выбрав их из списка, оформить поле, скрыть или переименовать.
                  • С помощью меню по правой кнопке мыши можно оформить поля, настроить отборы и сортировки. 
                  • +
                    • По команде Еще можно перейти к настройке поля, вставить в шапку дополнительные поля, выбрав их из списка, оформить поле, скрыть или переименовать.
                  • С помощью меню по правой кнопке мыши можно оформить поля, настроить отборы и сортировки.
                    • По команде Еще можно открыть дополнительные возможности оформления поля, можно настроить условное оформление поля.

              Настройки

              • Значения настроек отчета автоматически сохраняются при закрытии отчета и восстанавливаются при следующем открытии отчета.
              • -
              • По кнопке Настройки можно перейти к настройке параметров отчета. Часть настроек (отборы) иногда выведены в шапку отчета. +
              • По кнопке Настройки можно перейти к настройке параметров отчета. Часть настроек (отборы) иногда выведены в шапку отчета.
              • В форме настройки отчета, в расширенном режиме, теперь можно добавлять отборы не только с помощью выбора полей из списка, но и вводом по первым буквам.
              • Нажмите Еще - Стандартные настройки, для того чтобы вернуться к настройкам по умолчанию.
              • -
              • Нажмите Еще - Персональные настройки - Сохранить настройки, для того чтобы записать текущие настройки отчета. Напишите имя настроек для сохранения.
              • -
              • Нажмите Еще - Персональные настройки - Выбрать настройки, для того чтобы воспользоваться ранее сохраненными настройками отчета. В списке можно посмотреть также настройки отчета, переданные другими пользователями.
              • -
              • Нажмите Еще - Персональные настройки - Поделиться настройками, для того чтобы передать текущие настройки отчета другим пользователям. Настройки передаются и без предварительного сохранения. В открывшемся списке выберите пользователей или группы пользователей, нажмите Поделиться. Если все в порядке, через некоторое время приложение выводит сообщение об успешной передаче настроек.

              Отмена и повтор действий

              +
            • Нажмите Еще - Персональные настройки - Сохранить настройки, для того чтобы записать текущие настройки отчета. Напишите имя настроек для сохранения.
            • +
            • Нажмите Еще - Персональные настройки - Выбрать настройки, для того чтобы воспользоваться ранее сохраненными настройками отчета. В списке можно посмотреть также настройки отчета, переданные другими пользователями.
            • +
            • Нажмите Еще - Персональные настройки - Поделиться настройками, для того чтобы передать текущие настройки отчета другим пользователям. Настройки передаются и без предварительного сохранения. В открывшемся списке выберите пользователей или группы пользователей, нажмите Поделиться. Если все в порядке, через некоторое время приложение выводит сообщение об успешной передаче настроек.

            Отмена и повтор действий

            • В командной панели отчета размещены кнопки отмены и повтора действий.
            • -
            • При активной настройке отчета с их помощью удобно отменять одно или несколько последних настроечных действий, выполненных из контекстного меню или в форме настроек: добавление фильтров, группировок, перемещение колонок, изменение сортировки и т.п. 
            • -
            • Также можно сбросить до стандартных настроек. 
            +
          • При активной настройке отчета с их помощью удобно отменять одно или несколько последних настроечных действий, выполненных из контекстного меню или в форме настроек: добавление фильтров, группировок, перемещение колонок, изменение сортировки и т.п.
          • +
          • Также можно сбросить до стандартных настроек.

          Печать отчета

          -
          • Сформированный отчет можно распечатать, нажав кнопку  Печать. +
            • Сформированный отчет можно распечатать, нажав кнопку Печать.
            • -
            • Для того чтобы проверить отчет и изменить параметры страницы, нажмите  Предварительный просмотр. +
            • Для того чтобы проверить отчет и изменить параметры страницы, нажмите Предварительный просмотр.
            • -
            • С помощью команды Еще - Параметры страницы можно настроить печать отчета.

            Отправка отчета по электронной почте

            -

            С помощью кнопки  Отправить отчет по электронной почте можно:

            +
          • С помощью команды Еще - Параметры страницы можно настроить печать отчета.

          Отправка отчета по электронной почте

          +

          С помощью кнопки Отправить отчет по электронной почте можно:

          • Отправить сейчас, для этого:

            Выбор варианта отчета

            -
            • Для загрузки ранее сохраненного варианта отчета воспользуйтесь командой Еще - Варианты отчета - Выбрать. +
              Включить в существующую рассылку отчетов. Для этого из списка рассылок выберите нужную.

            Выбор варианта отчета

            +
            • Для загрузки ранее сохраненного варианта отчета воспользуйтесь командой Еще - Варианты отчета - Выбрать.

            Сброс настроек

            -
            • Нажмите Еще - Стандартные настройки, для того чтобы сбросить пользовательские настройки.

            Редактирование таблицы отчета

            +
            • Нажмите Еще - Стандартные настройки, для того чтобы сбросить пользовательские настройки.

            Редактирование таблицы отчета

            • С помощью команд меню Еще - Таблица можно изменить таблицу отчета и вид отчета:
            • Зафиксировать таблицу;
            • Отображать группы - включить или выключить группы;
            • Редактирование - начать или закончить редактирование.
            • -
            • В некоторых отчетах может быть предусмотрена кнопка  Изменить табличный документ, которая позволяет отредактировать таблицу отчета как табличный документ - изменить форматы ячеек и внешний вид. Можно изменить цвет, шрифт, оформление всего отчета, но информацию отчета изменить уже нельзя.
            • +
            • В некоторых отчетах может быть предусмотрена кнопка Изменить табличный документ, которая позволяет отредактировать таблицу отчета как табличный документ - изменить форматы ячеек и внешний вид. Можно изменить цвет, шрифт, оформление всего отчета, но информацию отчета изменить уже нельзя.
            • С помощью кнопки Записать и закрыть можно сохранить табличный документ на компьютер. Напишите адрес для сохранения файла.
            -

            Изменение варианта отчета

            +

            Изменение варианта отчета

            -
            • При работе с отчетом можно перейти к изменению данного варианта отчета. Для этого в настройках отчета выполните команду Настройки для технического специалиста меню Еще.
            +
            • При работе с отчетом можно перейти к изменению данного варианта отчета. Для этого в настройках отчета выполните команду Настройки для технического специалиста меню Еще.

          Отчеты в автономном режиме

          • В мобильном клиенте в автономном режиме (при отсутствии соединения с сервером) можно просмотреть сохраненные в стандартном приложении отчеты: -
            • c помощью команды меню Еще - Сохранить снимок отчета можно сохранить снимок интересующего отчета.
            • -
            • с помощью команды Еще - Снимки отчетов откроется форма, где можно просмотреть список сохраненных снимков отчетов,  а также актуализировать снимки с помощью кнопки Обновить или удалить снимки с помощью кнопки Удалить.
          -
          Просмотр снимков отчетов доступен только в мобильном клиенте. 
          +
          • c помощью команды меню Еще - Сохранить снимок отчета можно сохранить снимок интересующего отчета.
          • +
          • с помощью команды Еще - Снимки отчетов откроется форма, где можно просмотреть список сохраненных снимков отчетов, а также актуализировать снимки с помощью кнопки Обновить или удалить снимки с помощью кнопки Удалить.
          +
          Просмотр снимков отчетов доступен только в мобильном клиенте.

          Другие доступные действия

          • Для поиска в отчете воспользуйтесь командой Найти.
          • -
          • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета. +
          • С помощью кнопок Свернуть все группы или Развернуть все группы можно скрыть или показать группировку отчета.
          • С помощью кнопки Разворачивать до можно выбрать уровень группировки отчета. Если отчет сложный, состоит из нескольких разделов, например из таблицы, диаграммы и двух списков, то уровни группировок нумеруются.
          \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl index a708380c4..24b7f5247 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -535,8 +535,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые +#Область Подключаемые &НаКлиенте Процедура Подключаемый_ЭлементНастройки_ПриИзменении(Элемент) @@ -602,6 +601,8 @@ ОтчетыКлиент.СдвинутьПериод(ЭтотОбъект, Команда.Имя); КонецПроцедуры +#КонецОбласти + #Область ОбработчикиСобытийЭлементовУниверсальнойСтрокиПоиска &НаКлиенте @@ -912,8 +913,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд модификации СКД. +#Область ОбработчикиКомандМодификацииСКД &НаКлиенте Процедура ЗагрузитьСхему(Команда) @@ -966,8 +966,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд обмена настройками (основными и пользовательскими). +#КонецОбласти + +#Область ОбработчикиКомандОбменаНастройкамиОсновнымиИПользовательскими &НаКлиенте Процедура СохранитьВариантОтчетаВФайл(Команда) @@ -999,8 +1000,9 @@ ВариантыОтчетовКлиент.ПоделитьсяПользовательскимиНастройками(ОписаниеНастроек); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд сохранения результата отчета. +#КонецОбласти + +#Область ОбработчикиКомандСохраненияРезультатаОтчета &НаКлиенте Процедура СохранитьОтчет(Команда) @@ -1039,8 +1041,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд контекстного меню табличного документа - результат отчета. +#КонецОбласти + +#Область ОбработчикиКомандКонтекстногоМенюТабличногоДокументаРезультатОтчета &НаКлиенте Процедура СгруппироватьПоВыбранномуПолю(Команда) @@ -1191,8 +1194,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд расчета показателей. +#КонецОбласти + +#Область ОбработчикиКомандРасчетаПоказателей &НаКлиенте Процедура ВыбратьПоказательНажатие(Элемент) @@ -1238,8 +1242,9 @@ ОбщегоНазначенияСлужебныйКлиент.УстановитьВидимостьПанелиПоказателей(Элементы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Подключаемые +#КонецОбласти + +#Область Подключаемые // Параметры: // Команда - КомандаФормы @@ -1329,10 +1334,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура ОпределитьПоведениеНаНачальнойСтранице() @@ -1396,6 +1402,8 @@ КонецПроцедуры +#КонецОбласти + #Область ФормированиеСОтправкойПоПочте &НаКлиенте @@ -3922,8 +3930,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#Область ВызовСервера &НаСервере Процедура УстановитьВидимостьДоступность() @@ -4079,8 +4086,9 @@ БиблиотекаКартинок.ДиалогИнформация); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура ОпределитьПоведениеВМобильномКлиенте() @@ -4303,6 +4311,8 @@ Возврат АдресСхемы; КонецФункции +#КонецОбласти + #Область СобытияНастроек &НаСервере diff --git a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html index 2a8cd322c..e6832838d 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html +++ b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html @@ -2,15 +2,15 @@

          Предназначена для полнотекстового поиска.

          Можно выполнять поиск прямо с Начальной страницы.

          Полнотекстовый поиск

          -
          • Для поиска данных в приложении наберите слово или словосочетание, нажмите Найти. +
            • Для поиска данных в приложении наберите слово или словосочетание, нажмите Найти.
            • -
            • Поисковая фраза сохраняется и при последующих поисках приложение выводит список ранее введенных поисковых фраз. +
            • Поисковая фраза сохраняется и при последующих поисках приложение выводит список ранее введенных поисковых фраз.
            • Поиск может осуществляться по одному и нескольким словам. В строке ввода допускается использование поисковых операторов типа И, ИЛИ, НЕ и т.д. Можно использовать и другие поисковые операторы, а также проводить поиск по части слова.
            • В окне результатов поиска выводятся объекты, в которых содержится поисковая фраза или слово и краткое описание объекта. Поисковая фраза или слово подсвечивается. Из окна результатов поиска, выбрав объект, можно открыть его.
            • -
            • С помощью кнопок  и  можно перелистывать страницы результатов поиска.

            Ограничение области поиска

            +
          • С помощью кнопок и можно перелистывать страницы результатов поиска.

          Ограничение области поиска

          • Если найдено большое количество информации, для увеличения точности результатов можно ограничить Область поиска.
          • Например, можно искать данные, которые относятся только к ключевым операциям замера производительности. @@ -19,9 +19,9 @@
          • Нажмите на ссылку, для того чтобы изменить настройки.

          Ошибки поиска и методы исправления

          • -
            Если данные не найдены, приложение выдает сообщение об ошибке. Пути исправления ошибки:
            +
            Если данные не найдены, приложение выдает сообщение об ошибке. Пути исправления ошибки:
            • -
              Проверьте поисковое выражение. Доработайте его при необходимости, исправьте ошибки по рекомендациям приложения.
              +
              Проверьте поисковое выражение. Доработайте его при необходимости, исправьте ошибки по рекомендациям приложения.
            • Возможно, выбрана не та Область поиска. Попробуйте ее убрать или изменить с помощью соответствующей ссылки.
              diff --git a/SSL/src/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index be9f3dc49..6b1f4f601 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -75,7 +75,6 @@ ПараметрыОткрытия.Вставить("ИскатьВРазделах", ИскатьВРазделах); Оповещение = Новый ОписаниеОповещения("ПослеПолученияНастроекОбластиПоиска", ЭтотОбъект); - ОткрытьФорму("Обработка.ПолнотекстовыйПоискВДанных.Форма.ВыборОбластиПоиска", ПараметрыОткрытия,,,,, Оповещение); @@ -87,7 +86,6 @@ СтандартнаяОбработка = Ложь; СсылкаHTML = ДанныеСобытия.Anchor; - Если СсылкаHTML = Неопределено Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form b/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form index bdb9127c1..e79e9558f 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form @@ -917,44 +917,6 @@ Auto - - Инструкция - 38 - - <key>ru</key> - <value>Решение типовых проблем при работе с приложениями электронной подписи</value> - - true - true - - true - - - ИнструкцияРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - ИнструкцияКонтекстноеМеню - 39 - true - - Label - true - - - Click - ИнструкцияНажатие - - true - Left - - ФормаКоманднаяПанель -1 @@ -1112,7 +1074,6 @@ ПриСозданииНаСервере LockOwner - true true true Vertical diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html b/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html index a470f6035..35b4c0d37 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html @@ -1,22 +1,22 @@

              Предназначена для просмотра основных свойств электронной подписи.

              -

              Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи и документа,а также проверки действительности сертификата. Контроль неизменности электронного документа можно выполнить в любой момент времени.

              -

              С помощью электронной подписи можно:

              -
              • Подписывать объекты приложения (например, поля Наименование и Краткое содержание); +

                Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи и документа,а также проверки действительности сертификата. Контроль неизменности электронного документа можно выполнить в любой момент времени.

                +

                С помощью электронной подписи можно:

                +
                • Подписывать объекты приложения (например, поля Наименование и Краткое содержание);
                • Подписывать содержимое хранимых файлов.

                Сведения о подписи

                -
                • Автор подписи - данные о том, кому был выдан сертификат; +
                  • Автор подписи - данные о том, кому был выдан сертификат;
                  • -
                  • Тип подписи - существует несколько типов подписей в зависимости от срока действия;
                  • -
                  • Установивший подпись - приложение автоматически выводит пользователя, который установил подпись; +
                  • Тип подписи - существует несколько типов подписей в зависимости от срока действия;
                  • +
                  • Установивший подпись - приложение автоматически выводит пользователя, который установил подпись;
                  • Дата подписи - дата и время установки подписи;
                  • Комментарий - дополнительная информация о подписи.

                  Выгрузка подписи

                  -
                  • Нажмите Сохранить в файл, укажите папку на устройстве, для того чтобы сохранить данные электронной подписи на компьютер.

                  Просмотр сертификата

                  +
                  • Нажмите Сохранить в файл, укажите папку на устройстве, для того чтобы сохранить данные электронной подписи на компьютер.

                  Просмотр сертификата

                  Продление срока действия (усовершенствование) подписи

                  -

                  См. также:

                  \ No newline at end of file diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl index ccf5223b7..c87c7db31 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Module.bsl @@ -23,7 +23,7 @@ Элементы.ГруппаМЧД.Видимость = Ложь; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль( @@ -37,21 +37,19 @@ КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Элементы.ОбоснованиеРучнойПроверкиДополнительныхАтрибутов.Видимость = ЗначениеЗаполнено(ОбоснованиеРучнойПроверкиДополнительныхАтрибутов) И СтрДлина(ОбоснованиеРучнойПроверкиДополнительныхАтрибутов) > 100; - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Если ЗначениеЗаполнено(ОшибкаМатематическойПроверкиПодписи) + Или ЗначениеЗаполнено(ОшибкаПроверкиДополнительныхАтрибутов) + Или ЗначениеЗаполнено(ОписаниеОшибки) Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ОписаниеОшибки"); - Элементы.Инструкция.Видимость = - ЭлектроннаяПодписьСлужебный.ВидимостьСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); ИначеЕсли ЗначениеЗаполнено(ОбоснованиеРучнойПроверкиДополнительныхАтрибутов) Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "РучнаяПроверка"); - Элементы.Инструкция.Видимость = Ложь; Иначе СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, ""); - Элементы.Инструкция.Видимость = Ложь; КонецЕсли; Если Не ЭтоАдресВременногоХранилища(АдресПодписи) Тогда @@ -96,14 +94,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы -&НаКлиенте -Процедура ИнструкцияНажатие(Элемент) - - ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - -КонецПроцедуры - -// Локализация +// СтандартныеПодсистемы.МашиночитаемыеДоверенности &НаКлиенте Процедура Подключаемый_КомандаОтметитьВручную(Элемент) @@ -122,12 +113,13 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( "МашиночитаемыеДоверенностиФНССлужебныйКлиент"); - МодульМашиночитаемыеДоверенностиФНССлужебныйКлиент.ПриОбработкеНавигационнойСсылкиОшибкиПроверкиПодписи(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); + МодульМашиночитаемыеДоверенностиФНССлужебныйКлиент.ПриОбработкеНавигационнойСсылкиОшибкиПроверкиПодписи( + ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры -// Конец Локализация +// Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности #КонецОбласти @@ -237,7 +229,7 @@ &НаСервере Процедура ОбновитьДанныеФормы() - Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() И ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда + Если ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда Если (ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) И СрокДействияПоследнейМеткиВремени <= ТекущаяДатаСеанса()) Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS Или Не ПодписьВерна Тогда Элементы.ФормаПродлитьДействиеПодписи.Видимость = Ложь; diff --git a/SSL/src/CommonModules/GoogleПереводчик/Module.bsl b/SSL/src/CommonModules/GoogleПереводчик/Module.bsl index 5507b5684..c779bc7f9 100644 --- a/SSL/src/CommonModules/GoogleПереводчик/Module.bsl +++ b/SSL/src/CommonModules/GoogleПереводчик/Module.bsl @@ -20,6 +20,13 @@ Функция ПеревестиТексты(Тексты, ЯзыкПеревода = Неопределено, ИсходныйЯзык = Неопределено) Экспорт + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить перевод текста по причине: + |%1'"), ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения())); + ВызватьИсключение ТекстОшибки(НСтр("ru = 'Не удалось выполнить перевод текста.'")); + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПеревестиТексты", "Тексты", Тексты, Тип("Массив")); Если Не ЗначениеЗаполнено(ЯзыкПеревода) Тогда @@ -100,6 +107,7 @@ ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); Попытка + ДоступРазрешен = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(Истина); Соединение = Новый HTTPСоединение(ИмяХоста, , , , Прокси, 60, ЗащищенноеСоединение); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение diff --git a/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl b/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl index 564a3cad5..b3b6d844f 100644 --- a/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРабота/Module.bsl @@ -41,7 +41,7 @@ // и автономным рабочим местом в случаях когда, не задан пароль для установки подключения. // // Параметры: -// Источник - РегистрСведенийНаборЗаписей.НастройкиТранспортаОбменаДанными - запись регистра настроек транспорта, +// Источник - Справочник.НастройкиТранспортаСообщенийОбмена - запись справочника настроек транспорта, // которая была изменена. // Процедура ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете(Источник) Экспорт diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl index bba8f07ef..f12c25c16 100644 --- a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl @@ -11,10 +11,14 @@ // Обработчики условных вызовов из БСП // Читает и устанавливает настройку предупреждение о продолжительной синхронизации АРМ +// // Параметры: -// ЗначениеФлага - Булево - устанавливаемое значение флага -// ОписаниеНастройки - Структура - принимает значение для описания настройки +// ЗначениеФлага - Булево - устанавливаемое значение флага +// ОписаниеНастройки - Структура - принимает значение для описания настройки // Для внутреннего использования. +// +// Возвращаемое значение: +// Булево - признак, требуется ли показывать вопрос о долгой синхронизации // Функция ФлагНастройкиВопросаОДолгойСинхронизации(ЗначениеФлага = Неопределено, ОписаниеНастройки = Неопределено) Экспорт ОписаниеНастройки = Новый Структура; @@ -37,15 +41,18 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Строка - значение константы АдресДляВосстановленияПароляУчетнойЗаписи +// Функция АдресДляВосстановленияПароляУчетнойЗаписи() Экспорт УстановитьПривилегированныйРежим(Истина); Возврат СокрЛП(Константы.АдресДляВосстановленияПароляУчетнойЗаписи.Получить()); + КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ, ИСПОЛЬЗУЕМЫЕ НА СТОРОНЕ СЕРВИСА +#Область СлужебныеПроцедурыИФункцииИспользуемыеНаСторонеСервиса // Для внутреннего использования // @@ -100,6 +107,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Булево - Истина, если в приложении содержится один план обмена автономной работы +// Функция АвтономнаяРаботаПоддерживается() Экспорт Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается(); @@ -108,6 +118,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Число +// Функция КоличествоАвтономныхРабочихМест() Экспорт ШаблонТекста = "ПланОбмена.%1"; @@ -136,6 +149,10 @@ // Для внутреннего использования // +// Возвращаемое значение: +// - Неопределено - см. ОбменДаннымиСервер.ГлавныйУзел +// - ПланОбменаСсылка +// Функция ПриложениеВСервисе() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -154,6 +171,10 @@ // Для внутреннего использования // +// Возвращаемое значение: +// - Неопределено +// - ПланОбменаСсылка +// Функция АвтономноеРабочееМесто() Экспорт ШаблонТекста = "ПланОбмена.%1"; @@ -188,14 +209,16 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Строка - имя объекта метаданных ПланОбмена, который является автономным рабочим местом +// Функция ПланОбменаАвтономнойРаботы() Экспорт Возврат ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); КонецФункции -// Для внутреннего использования -// +// См. ОбменДаннымиСервер.ЭтоУзелАвтономногоРабочегоМеста. Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -206,6 +229,13 @@ // Для внутреннего использования // +// Параметры: +// АвтономноеРабочееМесто - ПланОбменаСсылка - ссылка на узел плана обмена, +// +// Возвращаемое значение: +// - Неопределено - если не заполнена дата последней синхронизации по переданному узлу +// - Дата +// Функция ДатаПоследнейУспешнойСинхронизации(АвтономноеРабочееМесто) Экспорт ТекстЗапроса = @@ -235,6 +265,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Строка +// Функция СформироватьНаименованиеАвтономногоРабочегоМестаПоУмолчанию() Экспорт ШаблонТекста = "ПланОбмена.%1"; @@ -275,6 +308,12 @@ // Для внутреннего использования // +// Параметры: +// ПоследнийПрефикс - Строка +// +// Возвращаемое значение: +// Строка - префикс автономного рабочего места +// Функция СформироватьПрефиксАвтономногоРабочегоМеста(Знач ПоследнийПрефикс = "") Экспорт ДопустимыеСимволы = ДопустимыеСимволыПрефиксаАвтономногоРабочегоМеста(); @@ -308,6 +347,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Строка +// Функция ИмяФайлаПакетаУстановки() Экспорт Возврат НСтр("ru = 'Автономная работа.zip'"); @@ -316,6 +358,12 @@ // Для внутреннего использования // +// Параметры: +// АвтономноеРабочееМесто - ПланОбменаСсылка - ссылка на узел плана обмена +// +// Возвращаемое значение: +// Строка +// Функция ОписаниеОграниченийПередачиДанных(АвтономноеРабочееМесто) Экспорт ПланОбменаАвтономнойРаботы = ПланОбменаАвтономнойРаботы(); @@ -366,6 +414,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// ТаблицаЗначений - монитор автономных рабочих мест +// Функция МониторАвтономныхРабочихМест() Экспорт ШаблонТекста = "ПланОбмена.%1"; @@ -421,6 +472,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Строка - событие журнала регистрации создание автономного рабочего места +// Функция СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста() Экспорт Возврат НСтр("ru = 'Автономная работа.Создание автономного рабочего места'", ОбщегоНазначения.КодОсновногоЯзыка()); @@ -429,6 +483,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Строка - описание события +// Функция СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста() Экспорт Возврат НСтр("ru = 'Автономная работа.Удаление автономного рабочего места'", ОбщегоНазначения.КодОсновногоЯзыка()); @@ -437,6 +494,12 @@ // Для внутреннего использования // +// Параметры: +// ИмяМакета - Строка - имя макета обработки ПомощникСозданияАвтономногоРабочегоМеста +// +// Возвращаемое значение: +// Строка +// Функция ТекстИнструкцииИзМакета(Знач ИмяМакета) Экспорт Результат = Обработки.ПомощникСозданияАвтономногоРабочегоМеста.ПолучитьМакет(ИмяМакета).ПолучитьТекст(); @@ -445,8 +508,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ, ИСПОЛЬЗУЕМЫЕ НА СТОРОНЕ АВТОНОМНОГО РАБОЧЕГО МЕСТА +#КонецОбласти + +#Область СлужебныеПроцедурыИФункцииИспользуемыеНаСторонеАвтономногоРабочегоМеста // Для внутреннего использования // @@ -480,7 +544,7 @@ КонецЕсли; ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS; + ПараметрыОбмена.ИдентификаторТранспорта = "WS"; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Истина; @@ -499,6 +563,9 @@ // Для внутреннего использования. // +// Параметры: +// ЗагрузкаДанных - Булево - значение по умолчанию - Ложь. +// Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(ЗагрузкаДанных = Ложь) Экспорт Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда @@ -532,21 +599,13 @@ Если Не ОбщегоНазначения.РазделениеВключено() Тогда - ОтключитьАвтоматическуюСинхронизацию = Ложь; + Параметры = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + Параметры.Корреспондент = Источник.Корреспондент; + Параметры.ИдентификаторТранспорта = Источник.ИдентификаторТранспорта; - Для Каждого СтрокаНабора Из Источник Цикл - - Если СтрокаНабора.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не СтрокаНабора.WSЗапомнитьПароль Тогда - - ОтключитьАвтоматическуюСинхронизацию = Истина; - Прервать; - - КонецЕсли; - - КонецЦикла; + Транспорт = ТранспортСообщенийОбмена.Инициализация(Параметры); - Если ОтключитьАвтоматическуюСинхронизацию Тогда + Если Транспорт.ТребуетсяАутентификация() Тогда УстановитьПривилегированныйРежим(Истина); @@ -561,6 +620,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Булево +// Функция НеобходимоВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -570,6 +632,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Булево +// Функция СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы() Экспорт Возврат ЭтоАвтономноеРабочееМесто() @@ -582,6 +647,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Булево +// Функция СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы() Экспорт Возврат ЭтоАвтономноеРабочееМесто() @@ -593,6 +661,13 @@ // Для внутреннего использования // +// Возвращаемое значение: +// РасписаниеРегламентногоЗадания: +// *Месяцы - Массив из Число +// *ДниНедели - Массив из Число +// *ПериодПовтораВТечениеДня - Число - 60 минут. +// *ПериодПовтораДней - Число +// Функция РасписаниеСинхронизацииДанныхПоУмолчанию() Экспорт // Каждый час Месяцы = Новый Массив; @@ -616,6 +691,9 @@ // Для внутреннего использования // +// Возвращаемое значение: +// см. ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто +// Функция ЭтоАвтономноеРабочееМесто() Экспорт Возврат ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); @@ -624,6 +702,12 @@ // Для внутреннего использования // +// Возвращаемое значение: +// Структура: +// * УзелИнформационнойБазы - см. ПриложениеВСервисе +// * АдресДляВосстановленияПароляУчетнойЗаписи - см. АдресДляВосстановленияПароляУчетнойЗаписи +// * ЗакрытьПриУспешнойСинхронизации - Булево - по умолчанию - Истина. +// Функция ПараметрыФормыВыполненияОбменаДанными() Экспорт Возврат Новый Структура("УзелИнформационнойБазы, АдресДляВосстановленияПароляУчетнойЗаписи, ЗакрытьПриУспешнойСинхронизации", @@ -632,6 +716,12 @@ // Для внутреннего использования // +// Параметры: +// Интервал - Число - по умолчанию - 1 час. +// +// Возвращаемое значение: +// Булево +// Функция СинхронизацияССервисомДавноНеВыполнялась(Знач Интервал = 3600) Экспорт // 1 час по умолчанию Возврат Истина; @@ -910,6 +1000,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура УстановитьИспользованиеИтоговРегистров(ФлагИспользования) @@ -1063,13 +1155,10 @@ Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); // Добавляем запись в РС транспорта обмена. - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); - СтруктураЗаписи.Вставить("WSURLВебСервиса", Параметры.URL); - СтруктураЗаписи.Вставить("Корреспондент", ПриложениеВСервисе()); - - РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); + Корреспондент = ПриложениеВСервисе(); + НастройкиТранспорта = Новый Структура(); + НастройкиТранспорта.Вставить("АдресВебСервиса", Параметры.URL); + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта(Корреспондент, "WS", НастройкиТранспорта, Истина); // Добавляем запись в РС общих настроек узлов информационных баз. СтруктураЗаписи = Новый Структура; @@ -1393,8 +1482,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы +#Область ОбработчикиУсловныхВызововВДругиеПодсистемы // Выполняет проверку объекта на вхождение в список исключений Функция ОбъектМетаданныхЯвляетсяИсключением(Знач ОбъектМетаданных) @@ -1416,4 +1504,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index 27e649df2..684f9c2ad 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -68,8 +68,11 @@ #Область СлужебныйПрограммныйИнтерфейс -Процедура ОткрытьСведенияОбАдресномКлассификаторе(Параметры, ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт - ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.СведенияОбАдресномКлассификаторе", Параметры,,,,, ОписаниеОповещенияОЗакрытии); +Процедура ОткрытьСведенияОбАдресномКлассификаторе(Параметры, ОбработчикЗавершения = Неопределено) Экспорт + + ОткрытьФорму( + "РегистрСведений.АдресныеОбъекты.Форма.СведенияОбАдресномКлассификаторе", Параметры, , , , , ОбработчикЗавершения); + КонецПроцедуры Процедура АвторизоватьНаСайтеПоддержкиПользователей(ОповещениеОЗакрытии, ВладелецФормы) Экспорт @@ -251,7 +254,7 @@ Представление = ДополнительныеПараметры.Результат.КодыРегионов.НайтиПоЗначению(ОтсутствующийФайл.Ключ); СообщениеОбОшибке = НСтр("ru = 'Для региона ""%1"" не существует файл данных ""%2""'") + Символы.ПС; - СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу http://its.1c.ru/download/fias2'"); + СообщениеОбОшибке = СообщениеОбОшибке + НСтр("ru = 'Актуальные адресные сведения можно загрузить по адресу its.1c.ru/download/fias2'"); ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(ДополнительныеПараметры.Результат.Ошибки, ДополнительныеПараметры.ПолеОшибки, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, Представление, ОтсутствующийФайл.Значение), Неопределено); @@ -263,7 +266,6 @@ КонецПроцедуры - // Обработчик оповещения после вызова метода НачатьПоискФайлов // // Параметры: diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index 3913f01cf..bbc2db9a8 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -1937,17 +1937,10 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. - -Функция НавигационнаяСсылкаЗагрузкиАдресногоКлассификатора() Экспорт - Возврат "e1cib/command/РегистрСведений.АдресныеОбъекты.Команда.ЗагрузитьАдресныйКлассификатор"; -КонецФункции - // Возвращает признак, указывающий на наличие улиц в адресном объекте. // // Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор объекта, для которого проверяется наличие улиц. +// Идентификатор - УникальныйИдентификатор - идентификатор объекта, для которого проверяется наличие улиц. // ЭтоМуниципальныйАдрес - Булево - признак, что адрес муниципальный. // // Возвращаемое значение: @@ -2132,12 +2125,12 @@ // Возвращает признак, указывающий на присутствие в данном адресном объекте дочерних элементов. // // Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор объекта, для которого проверяется наличие улиц. +// Идентификатор - УникальныйИдентификатор - идентификатор объекта, для которого проверяется наличие улиц. // ЭтоМуниципальныйАдрес - Булево - признак, что адрес муниципальный. // // Возвращаемое значение: -// Массив - Набор наименований дочерних уровней с адресными объектами. -// +// Массив - набор наименований дочерних уровней с адресными объектами. +// Функция ДочерниеУровниСАдреснымиОбъектами(Идентификатор, ЭтоМуниципальныйАдрес) Экспорт Результат = Новый Массив; @@ -2191,6 +2184,174 @@ КонецФункции +// Возвращает информацию для поддержки. +// +// Параметры: +// ПредставлениеАдреса - Строка - представление адреса. +// СведенияОбАдресе - см. РаботаСАдресами.СведенияОбАдресе. +// +// Возвращаемое значение: +// Строка - информация для поддержки. +// +Функция ИнформацияДляПоддержки(Знач ПредставлениеАдреса, Знач СведенияОбАдресе) Экспорт + + Результат = Новый Массив; + + Если ЗначениеЗаполнено(ПредставлениеАдреса) Тогда + + Результат.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Адрес: %1'"), + ПредставлениеАдреса)); + + Результат.Добавить(""); + + КонецЕсли; + + Если ТипЗнч(СведенияОбАдресе) = Тип("Структура") Тогда + + Поля = Новый Соответствие; + Поля.Вставить("ИдентификаторАдресногоОбъекта", Истина); + Поля.Вставить("ИдентификаторДома", Истина); + Поля.Вставить("ИдентификаторЗемельногоУчастка", Истина); + Поля.Вставить("Идентификаторы", Истина); + Поля.Вставить("ДополнительныеКоды", Истина); + Поля.Вставить("КодРегиона", Истина); + + Результат.Добавить(НСтр("ru = 'Коды и идентификаторы адреса:'")); + + Для Каждого Элемент Из СведенияОбАдресе Цикл + + Если Поля[Элемент.Ключ] <> Истина Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда + Результат.Добавить(""); + Результат.Добавить(Элемент.Ключ + ": "); + Для Каждого ЭлементВложенный Из Элемент.Значение Цикл + Если СтрЗаканчиваетсяНа(ЭлементВложенный.Ключ, "Идентификатор") + Или ПустаяСтрока(ЭлементВложенный.Значение) Тогда + Продолжить; + КонецЕсли; + Результат.Добавить(ЭлементВложенный.Ключ + ": " + ЭлементВложенный.Значение); + КонецЦикла; + Иначе + Результат.Добавить(Элемент.Ключ + ": " + Элемент.Значение); + КонецЕсли; + + КонецЦикла; + + Результат.Добавить(""); + + КонецЕсли; + + СведенияОЗагрузкеСубъектовРФ = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); + КлассификаторДоступен = СведенияОЗагрузкеСубъектовРФ.Получить("КлассификаторДоступен"); + ИспользоватьЗагруженные = СведенияОЗагрузкеСубъектовРФ.Получить("ИспользоватьЗагруженные"); + + Если Не ИспользоватьЗагруженные Тогда + Результат.Добавить(НСтр("ru = 'В адресном классификаторе отсутствуют загруженные адресные сведения.'")); + Иначе + Результат.Добавить(НСтр("ru = 'Автоподбор адреса выполняется по загруженным данным для регионов:'")); + КонецЕсли; + + СведенияОРегионах = Новый СписокЗначений; + + Для Каждого СведенияОЗагрузкеСубъектаРФ Из СведенияОЗагрузкеСубъектовРФ Цикл + + Значение = СведенияОЗагрузкеСубъектаРФ.Значение; + Если ТипЗнч(Значение) = Тип("Структура") И Значение.ИспользоватьЗагруженные Тогда + СведенияОРегионах.Добавить( + Формат(СведенияОЗагрузкеСубъектаРФ.Ключ,"ЧЦ=2; ЧВН="), + НСтр("ru = 'Загружен'") + " - " + Строка(Значение.ДатаЗагрузки)); + КонецЕсли; + + КонецЦикла; + + СведенияОРегионах.СортироватьПоЗначению(); + + Для Каждого Регион Из СведенияОРегионах Цикл + ИмяРегиона = АдресныйКлассификатор.НаименованиеРегионаПоКоду(Регион.Значение); + СтрокаОтчета = Регион.Значение + ", " + ИмяРегиона + ": " + Регион.Представление; + Результат.Добавить(СтрокаОтчета); + КонецЦикла; + + Результат.Добавить(""); + + ИПППодключена = Ложь; + + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда + + МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); + + ИПППодключена = + МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); + + Если ИПППодключена Тогда + Результат.Добавить(НСтр("ru = 'Подключен к Интернет-поддержке пользователей: Да.'")); + Иначе + Результат.Добавить(НСтр("ru = 'Подключен к Интернет-поддержке пользователей: Нет.'")); + КонецЕсли; + + Результат.Добавить(""); + + КонецЕсли; + + Если ИПППодключена Тогда + + Если Не АдресныйКлассификаторПовтИсп.ИспользоватьТолькоЗагруженныеДанные() Тогда + + ОписаниеСервиса = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(10); + ИнформацияОСервисе = ОписаниеСервиса.СервисКлассификатора; + + СсылкаНаВебСервис = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = ':%1/%2'"), + ИнформацияОСервисе.Порт, + ПрефиксВерсииЗапроса()); + + Если КлассификаторДоступен Тогда + + Шаблон = НСтр("ru = 'Веб-сервис доступен. + |URL подключения: %1'"); + Результат.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, СсылкаНаВебСервис)); + + Иначе + + Результат.Добавить(НСтр("ru = 'Веб-сервис недоступен.'")); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Результат = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(СсылкаНаВебСервис,,Ложь); + Результат.Добавить(Результат.ЖурналДиагностики); + + КонецЕсли; + + КонецЕсли; + Иначе + Результат.Добавить(НСтр("ru = 'Использование веб-сервиса отключено.'")); + КонецЕсли; + + Результат.Добавить(""); + + КонецЕсли; + + ОбщаяИнформацияДляПоддержки = СтандартныеПодсистемыСервер.ИнформацияДляПоддержки(); + Результат.Добавить(ОбщаяИнформацияДляПоддержки); + + Результат.Добавить(""); + Результат.Добавить(НСтр("ru = 'Отчет создан'") + ": " + ТекущаяДатаСеанса()); + + Возврат СтрСоединить(Результат, Символы.ПС); + +КонецФункции + +#Область ОбработчикиСобытийПодсистемКонфигурации + +Функция НавигационнаяСсылкаЗагрузкиАдресногоКлассификатора() Экспорт + Возврат "e1cib/command/РегистрСведений.АдресныеОбъекты.Команда.ЗагрузитьАдресныйКлассификатор"; +КонецФункции + // Параметры: // НазначениеРолей - см. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей.НазначениеРолей // @@ -2368,7 +2529,7 @@ УстановитьПривилегированныйРежим(Истина); Источник = Константы.ИсточникДанныхАдресногоКлассификатора.Получить(); - Возврат СтрСравнить(Источник, "Приложение") <> 0; + Возврат СтрСравнить(Источник, "Приложение") <> 0 И ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); КонецФункции @@ -2411,6 +2572,8 @@ КонецФункции +#КонецОбласти + #Область АдресныйКлассификаторВМоделиСервиса //////////////////////////////////////////////////////////////////////////////// @@ -3837,6 +4000,8 @@ КонецФункции + + // Параметры: // СведенияОбАдресномОбъекте - см. СведенияОбАдресномОбъекта // @@ -4475,7 +4640,7 @@ Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("НачалоФразы", ТекстПоиска + "%"); Запрос.УстановитьПараметр("НачалоФразыСПробелом", "% " + ТекстПоиска + "%"); - + РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Возврат; @@ -4611,7 +4776,7 @@ НоваяКолонка = Приоритеты.Добавить(); НоваяКолонка.Уровень = НомераУровнейАдресаПоНаименованию.locality; НоваяКолонка.Порядок = 3; - + НоваяКолонка = Приоритеты.Добавить(); НоваяКолонка.Уровень = НомераУровнейАдресаПоНаименованию.territory; НоваяКолонка.Порядок = 4; @@ -4625,7 +4790,7 @@ НоваяКолонка.Порядок = 6; Возврат Приоритеты; - + КонецФункции // Преобразует введенные английские буквы к русской раскладке при подборе адреса @@ -4704,7 +4869,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 10 + |ВЫБРАТЬ ПЕРВЫЕ 15 | Приоритеты.Порядок КАК Порядок, | АдресныеОбъекты.ТипОбъекта КАК ТипОбъекта, | АдресныеОбъекты.Наименование КАК Наименование, @@ -5382,7 +5547,7 @@ ПараметрыАдресногоКлассификатора = Константы.ПараметрыАдресногоКлассификатора.Получить().Получить(); ОписаниеФайлов = ПараметрыАдресногоКлассификатора.ОписаниеФайлов; ПараметрыАдресногоКлассификатора.Удалить("ОписаниеФайлов"); - ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыАдресногоКлассификатора); + ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыАдресногоКлассификатора, Новый СжатиеДанных(9)); Константы.ПараметрыАдресногоКлассификатора.Установить(ХранилищеПараметров); КонецЕсли; @@ -7248,7 +7413,7 @@ Результат.Вставить(ЗаписьОКТМО.КлючЗаписиОКТМО, СведенияПоОКТМО); КонецЦикла; - + КонецПроцедуры Функция ПроверитьОКМТОБюджетополучателя(ОКТМОБюджетополучателей) Экспорт @@ -8685,7 +8850,7 @@ Возврат "Россия"; КонецФункции -Функция ПрефиксВерсииЗапроса() Экспорт +Функция ПрефиксВерсииЗапроса() Возврат "rest/v4/"; КонецФункции @@ -9195,6 +9360,8 @@ // Функция СервисКлассификатора1С(ВремяОжидания = 20) Экспорт + ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(Истина); + URLПорталаПоддержки = "https://portal.1c.ru/"; СохраненныйТекущийURLПорталаПоддержки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLПорталаПоддержки"); Если ТипЗнч(СохраненныйТекущийURLПорталаПоддержки) = Тип("Строка") И ЗначениеЗаполнено(СохраненныйТекущийURLПорталаПоддержки) Тогда @@ -9249,6 +9416,7 @@ УстановитьОтключениеБезопасногоРежима(Истина); Попытка + Соединение = Новый HTTPСоединение( ИмяСервера, Порт, @@ -9276,6 +9444,7 @@ ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(СсылкаНаРесурс,,Ложь); diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index ff0c1d13b..4a75e0949 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -114,8 +114,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Заполнение дерева анкеты +#Область ЗаполнениеДереваАнкеты // Параметры: // Вопросы - см. Справочник.ШаблоныАнкет.Форма.ФормаМастераТабличныхВопросов.Вопросы @@ -514,8 +513,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Формирование формы заполнения анкеты. +#КонецОбласти + +#Область ФормированиеФормыЗаполненияАнкеты // Параметры: // Форма - см. Документ.Анкета.Форма.ФормаДокумента @@ -575,8 +575,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Создание реквизитов формы заполнения анкеты. +#КонецОбласти + +#Область СозданиеРеквизитовФормыЗаполненияАнкеты // Параметры: // ДобавляемыеРеквизиты - Массив - предназначен для аккумулирования создаваемых реквизитов формы. @@ -830,8 +831,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Создание элементов формы заполнения анкеты. +#КонецОбласти + +#Область СозданиеЭлементовФормыЗаполненияАнкеты Процедура СформироватьЭлементыФормыДляРаздела(Форма) @@ -1604,8 +1606,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры формы заполнения анкеты. +#КонецОбласти + +#Область ВспомогательныеПроцедурыФормыЗаполненияАнкеты // Параметры: // ЭлементарныйВопрос - ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования - вопрос, для которого получаются ответы. @@ -2117,8 +2120,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее Процедура УдалитьВопросыШаблонаАнкеты(СсылкаВладелец) Экспорт @@ -2393,4 +2397,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 13a0d8928..f7ef4dab8 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -8,6 +8,9 @@ #Область ПрограммныйИнтерфейс +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.ФормаВыполненияЗадачи. // Получить структуру с описанием формы выполнения задачи. // // Параметры: @@ -18,24 +21,11 @@ // Функция ФормаВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи", - "ЗадачаСсылка", ЗадачаСсылка, Тип("ЗадачаСсылка.ЗадачаИсполнителя")); - - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "БизнесПроцесс,ТочкаМаршрута"); - Если Реквизиты.БизнесПроцесс = Неопределено ИЛИ Реквизиты.БизнесПроцесс.Пустая() Тогда - Возврат Новый Структура(); - КонецЕсли; - - ТипБизнесПроцесса = Реквизиты.БизнесПроцесс.Метаданные(); // ОбъектМетаданныхБизнесПроцесс - ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка, - Реквизиты.ТочкаМаршрута); - БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи( - ТипБизнесПроцесса.Имя, ЗадачаСсылка, Реквизиты.ТочкаМаршрута, ПараметрыФормы); - - Возврат ПараметрыФормы; + Возврат БизнесПроцессыИЗадачиСервер.ФормаВыполненияЗадачи(ЗадачаСсылка); КонецФункции +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.ЭтоЗадачаИсполнителю. // Проверяет, находится ли в ячейке отчета ссылка на задачу и в параметре // ЗначениеРасшифровки возвращает значение расшифровки. // @@ -50,12 +40,11 @@ // Функция ЭтоЗадачаИсполнителю(Знач Расшифровка, Знач ДанныеРасшифровкиОтчета, ЗначениеРасшифровки) Экспорт - ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиОтчета); // ДанныеРасшифровкиКомпоновкиДанных - ЗначениеРасшифровки = ДанныеРасшифровкиОбъект.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; - Возврат ТипЗнч(ЗначениеРасшифровки) = Тип("ЗадачаСсылка.ЗадачаИсполнителя"); + Возврат БизнесПроцессыИЗадачиСервер.ЭтоЗадачаИсполнителю(Расшифровка, ДанныеРасшифровкиОтчета, ЗначениеРасшифровки); КонецФункции +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.ВыполнитьЗадачу. // Выполнить задачу ЗадачаСсылка, при необходимости выполнив обработчик. // ОбработкаВыполненияПоУмолчанию модуля менеджера бизнес-процесса, // к которому относится задача ЗадачаСсылка. @@ -67,35 +56,113 @@ // Процедура ВыполнитьЗадачу(ЗадачаСсылка, ДействиеПоУмолчанию = Ложь) Экспорт - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(ЗадачаСсылка); - - СведенияЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "Выполнена, БизнесПроцесс, ТочкаМаршрута"); - Если СведенияЗадачи.Выполнена Тогда - ВызватьИсключение НСтр("ru = 'Задача уже была выполнена ранее.'"); - КонецЕсли; - - Если ДействиеПоУмолчанию - И СведенияЗадачи.БизнесПроцесс <> Неопределено - И Не СведенияЗадачи.БизнесПроцесс.Пустая() Тогда - ТипБизнесПроцесса = СведенияЗадачи.БизнесПроцесс.Метаданные(); // ОбъектМетаданныхБизнесПроцесс - БизнесПроцессы[ТипБизнесПроцесса.Имя].ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, - СведенияЗадачи.БизнесПроцесс, СведенияЗадачи.ТочкаМаршрута); - КонецЕсли; - - ЗадачаОбъект = ЗадачаСсылка.ПолучитьОбъект(); - ЗадачаОбъект.Выполнена = Ложь; - ЗадачаОбъект.ВыполнитьЗадачу(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + БизнесПроцессыИЗадачиСервер.ВыполнитьЗадачу(ЗадачаСсылка, ДействиеПоУмолчанию); КонецПроцедуры -// Перенаправить задачи МассивЗадач новому исполнителю, указанному в структуре ИнфоОПеренаправлении. +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.ЭтоВедущаяЗадача. +// Проверяет, является ли указанная задача ведущей. +// +// Параметры: +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоВедущаяЗадача(Знач ЗадачаСсылка) Экспорт + + Возврат БизнесПроцессыИЗадачиСервер.ЭтоВедущаяЗадача(ЗадачаСсылка); + +КонецФункции + +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.СформироватьДанныеВыбораИсполнителя. +// Формирует список подбора для указания исполнителя в полях ввода составного типа (Пользователь и Роль). +// +// Параметры: +// Текст - Строка - фрагмент текста для поиска возможных исполнителей. +// +// Возвращаемое значение: +// СписокЗначений - список подбора, содержащий возможных исполнителей. +// +Функция СформироватьДанныеВыбораИсполнителя(Знач Текст) Экспорт + + Возврат БизнесПроцессыИЗадачиСервер.СформироватьДанныеВыбораИсполнителя(Текст); + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Отмечает указанные бизнес-процессы как активные. +// +// Параметры: +// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс +// +Процедура СделатьАктивнымБизнесПроцессы(БизнесПроцессы) Экспорт + + БизнесПроцессыИЗадачиСервер.СделатьАктивнымБизнесПроцессы(БизнесПроцессы); + +КонецПроцедуры + +// Отмечает указанный бизнес-процесс как активный. +// +// Параметры: +// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс +// +Процедура СделатьАктивнымБизнесПроцесс(БизнесПроцесс) Экспорт + + БизнесПроцессыИЗадачиСервер.СделатьАктивнымБизнесПроцесс(БизнесПроцесс); + +КонецПроцедуры + +// Отмечает указанные бизнес-процессы как остановленные. +// +// Параметры: +// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс +// +Процедура ОстановитьБизнесПроцессы(БизнесПроцессы) Экспорт + + БизнесПроцессыИЗадачиСервер.ОстановитьБизнесПроцессы(БизнесПроцессы); + +КонецПроцедуры + +// Отмечает указанный бизнес-процесс как остановленный. +// +// Параметры: +// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс +// +Процедура ОстановитьБизнесПроцесс(БизнесПроцесс) Экспорт + + БизнесПроцессыИЗадачиСервер.ОстановитьБизнесПроцесс(БизнесПроцесс); + +КонецПроцедуры + +// Отмечает указанные задачи как принятые к исполнению. +// +// Параметры: +// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя +// +Процедура ПринятьЗадачиКИсполнению(Задачи) Экспорт + + БизнесПроцессыИЗадачиСервер.ПринятьЗадачиКИсполнению(Задачи); + +КонецПроцедуры + +// Отмечает указанные задачи как не принятые к исполнению. +// +// Параметры: +// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя +// +Процедура ОтменитьПринятиеЗадачКИсполнению(Задачи) Экспорт + + БизнесПроцессыИЗадачиСервер.ОтменитьПринятиеЗадачКИсполнению(Задачи); + +КонецПроцедуры + +// Перенаправить задачи ПеренаправляемыеЗадачи новому исполнителю, указанному в параметре ИнфоОПеренаправлении. // // Параметры: // ПеренаправляемыеЗадачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя @@ -113,385 +180,15 @@ Функция ПеренаправитьЗадачи(Знач ПеренаправляемыеЗадачи, Знач ИнфоОПеренаправлении, Знач ТолькоПроверка = Ложь, ПеренаправленныеЗадачи = Неопределено) Экспорт - Результат = Истина; - - СведенияОЗадачах = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПеренаправляемыеЗадачи, "БизнесПроцесс,Выполнена"); - НачатьТранзакцию(); - Попытка - Для Каждого Задача Из СведенияОЗадачах Цикл - - Если Задача.Значение.Выполнена Тогда - Результат = Ложь; - Если ТолькоПроверка Тогда - ОтменитьТранзакцию(); - Возврат Результат; - КонецЕсли; - КонецЕсли; - - БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задача.Ключ); - Если ЗначениеЗаполнено(Задача.Значение.БизнесПроцесс) И Не Задача.Значение.БизнесПроцесс.Пустая() Тогда - БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(Задача.Значение.БизнесПроцесс); - КонецЕсли; - КонецЦикла; - - Если ТолькоПроверка Тогда - Для Каждого Задача Из СведенияОЗадачах Цикл - ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект(); - ЗадачаОбъект.Выполнена = Ложь; - ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина); - ЗадачаОбъект.ДополнительныеСвойства.Вставить("ТолькоПроверка", Истина); - ЗадачаОбъект.ВыполнитьЗадачу(); - КонецЦикла; - ОтменитьТранзакцию(); - Возврат Результат; - КонецЕсли; - - Для Каждого Задача Из СведенияОЗадачах Цикл - - Если НЕ ЗначениеЗаполнено(ПеренаправленныеЗадачи) Тогда - ПеренаправленныеЗадачи = Новый Массив(); - КонецЕсли; - - // Не устанавливаем объектную блокировку на задачу Задача для того, чтобы - // позволить выполнять перенаправление по команде из формы этой задачи. - ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект(); - - УстановитьПривилегированныйРежим(Истина); - НоваяЗадача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу(); - НоваяЗадача.Заполнить(ЗадачаОбъект); - ЗаполнитьЗначенияСвойств(НоваяЗадача, ИнфоОПеренаправлении, - "Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации"); - НоваяЗадача.Записать(); - УстановитьПривилегированныйРежим(Ложь); - - ПеренаправленныеЗадачи.Добавить(НоваяЗадача.Ссылка); - - ЗадачаОбъект.РезультатВыполнения = ИнфоОПеренаправлении.Комментарий; - ЗадачаОбъект.Выполнена = Ложь; - ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина); - ЗадачаОбъект.ВыполнитьЗадачу(); - - УстановитьПривилегированныйРежим(Истина); - ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.ВыбратьБизнесПроцессыВедущейЗадачи(Задача.Ключ, Истина).Выбрать(); - УстановитьПривилегированныйРежим(Ложь); - Пока ПодчиненныеБизнесПроцессы.Следующий() Цикл - БизнесПроцессОбъект = ПодчиненныеБизнесПроцессы.Ссылка.ПолучитьОбъект(); - БизнесПроцессОбъект.ВедущаяЗадача = НоваяЗадача.Ссылка; - БизнесПроцессОбъект.Записать(); - КонецЦикла; - - УстановитьПривилегированныйРежим(Истина); - ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.БизнесПроцессыГлавнойЗадачи(Задача.Ключ, Истина); - УстановитьПривилегированныйРежим(Ложь); - - Для каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл - БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); - БизнесПроцессОбъект.ГлавнаяЗадача = НоваяЗадача.Ссылка; - БизнесПроцессОбъект.Записать(); - КонецЦикла; - - ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадача); - - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - Результат = Ложь; - Если Не ТолькоПроверка Тогда - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - - Возврат Результат; + Возврат БизнесПроцессыИЗадачиСервер.ПеренаправитьЗадачи(ПеренаправляемыеЗадачи, ИнфоОПеренаправлении, ТолькоПроверка, + ПеренаправленныеЗадачи); КонецФункции -// Отмечает указанные бизнес-процессы как активные. -// -// Параметры: -// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс -// -Процедура СделатьАктивнымБизнесПроцессы(БизнесПроцессы) Экспорт - - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессы); - - Для каждого БизнесПроцесс Из БизнесПроцессы Цикл - СделатьАктивнымБизнесПроцесс(БизнесПроцесс); - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Отмечает указанный бизнес-процесс как активный. -// -// Параметры: -// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс -// -Процедура СделатьАктивнымБизнесПроцесс(БизнесПроцесс) Экспорт - - Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцесс); - - Объект = БизнесПроцесс.ПолучитьОбъект(); - Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен Тогда - - Если Объект.Завершен Тогда - ВызватьИсключение НСтр("ru = 'Невозможно сделать активными завершенные бизнес-процессы.'"); - КонецЕсли; - - Если Не Объект.Стартован Тогда - ВызватьИсключение НСтр("ru = 'Невозможно сделать активными не стартовавшие бизнес-процессы.'"); - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже активен.'"); - КонецЕсли; - - Объект.Заблокировать(); - Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; - Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Отмечает указанные бизнес-процессы как остановленные. -// -// Параметры: -// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс -// -Процедура ОстановитьБизнесПроцессы(БизнесПроцессы) Экспорт - - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцессы); - - Для каждого БизнесПроцесс Из БизнесПроцессы Цикл - ОстановитьБизнесПроцесс(БизнесПроцесс); - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Отмечает указанный бизнес-процесс как остановленный. -// -// Параметры: -// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс -// -Процедура ОстановитьБизнесПроцесс(БизнесПроцесс) Экспорт - - Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(БизнесПроцесс); - - Объект = БизнесПроцесс.ПолучитьОбъект(); - Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда - - Если Объект.Завершен Тогда - ВызватьИсключение НСтр("ru = 'Невозможно остановить завершенные бизнес-процессы.'"); - КонецЕсли; - - Если Не Объект.Стартован Тогда - ВызватьИсключение НСтр("ru = 'Невозможно остановить не стартовавшие бизнес-процессы.'"); - КонецЕсли; - - ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже остановлен.'"); - КонецЕсли; - - Объект.Заблокировать(); - Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен; - Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Отмечает указанные задачи как принятые к исполнению. -// -// Параметры: -// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя -// -Процедура ПринятьЗадачиКИсполнению(Задачи) Экспорт - - НовыйМассивЗадач = Новый Массив(); - - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задачи); - - Для каждого Задача Из Задачи Цикл - - Если ТипЗнч(Задача) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Продолжить; - КонецЕсли; - - ЗадачаОбъект = Задача.ПолучитьОбъект(); - Если ЗадачаОбъект.Выполнена Тогда - Продолжить; - КонецЕсли; - - ЗадачаОбъект.Заблокировать(); - ЗадачаОбъект.ПринятаКИсполнению = Истина; - ЗадачаОбъект.ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); - Если НЕ ЗначениеЗаполнено(ЗадачаОбъект.Исполнитель) Тогда - ЗадачаОбъект.Исполнитель = Пользователи.АвторизованныйПользователь(); - КонецЕсли; - ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи. - - НовыйМассивЗадач.Добавить(Задача); - - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Задачи = НовыйМассивЗадач; - -КонецПроцедуры - -// Отмечает указанные задачи как не принятые к исполнению. -// -// Параметры: -// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя -// -Процедура ОтменитьПринятиеЗадачКИсполнению(Задачи) Экспорт - - НовыйМассивЗадач = Новый Массив(); - - НачатьТранзакцию(); - Попытка - БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задачи); - - Для каждого Задача Из Задачи Цикл - - Если ТипЗнч(Задача) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Продолжить; - КонецЕсли; - - ЗадачаОбъект = Задача.ПолучитьОбъект(); - Если ЗадачаОбъект.Выполнена Тогда - Продолжить; - КонецЕсли; - - ЗадачаОбъект.Заблокировать(); - ЗадачаОбъект.ПринятаКИсполнению = Ложь; - ЗадачаОбъект.ДатаПринятияКИсполнению = "00010101000000"; - Если Не ЗадачаОбъект.РольИсполнителя.Пустая() Тогда - ЗадачаОбъект.Исполнитель = Неопределено; - КонецЕсли; - ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи. - - НовыйМассивЗадач.Добавить(Задача); - - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Задачи = НовыйМассивЗадач; - -КонецПроцедуры - -// Проверяет, является ли указанная задача ведущей. -// -// Параметры: -// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя -// -// Возвращаемое значение: -// Булево -// -Функция ЭтоВедущаяЗадача(ЗадачаСсылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Результат = БизнесПроцессыИЗадачиСервер.ВыбратьБизнесПроцессыВедущейЗадачи(ЗадачаСсылка); - Возврат НЕ Результат.Пустой(); - -КонецФункции - -// Формирует список подбора для указания исполнителя в полях ввода составного типа (Пользователь и Роль). -// -// Параметры: -// Текст - Строка - фрагмент текста для поиска возможных исполнителей. -// -// Возвращаемое значение: -// СписокЗначений - список подбора, содержащий возможных исполнителей. -// -Функция СформироватьДанныеВыбораИсполнителя(Текст) Экспорт - - ДанныеВыбора = Новый СписокЗначений; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Пользователи.Ссылка КАК Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~"" - | И Пользователи.Недействителен = ЛОЖЬ - | И Пользователи.Служебный = ЛОЖЬ - | И Пользователи.ПометкаУдаления = ЛОЖЬ - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | РолиИсполнителей.Ссылка - |ИЗ - | Справочник.РолиИсполнителей КАК РолиИсполнителей - |ГДЕ - | РолиИсполнителей.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~"" - | И НЕ РолиИсполнителей.ПометкаУдаления"; - Запрос.УстановитьПараметр("Текст", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(Текст) + "%"); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ДанныеВыбора.Добавить(Выборка.Ссылка); - КонецЦикла; - - Возврат ДанныеВыбора; - -КонецФункции - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Возвращаемое значение: // Число // -Функция КоличествоНевыполненныхЗадачБизнесПроцессов(БизнесПроцессы) Экспорт +Функция КоличествоНевыполненныхЗадачБизнесПроцессов(Знач БизнесПроцессы) Экспорт МассивБизнесПроцессов = Новый Массив; Для каждого БизнесПроцесс Из БизнесПроцессы Цикл @@ -522,7 +219,7 @@ // Возвращаемое значение: // Число // -Функция КоличествоНевыполненныхЗадачБизнесПроцесса(БизнесПроцесс) Экспорт +Функция КоличествоНевыполненныхЗадачБизнесПроцесса(Знач БизнесПроцесс) Экспорт Возврат КоличествоНевыполненныхЗадачБизнесПроцессов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(БизнесПроцесс)); @@ -532,7 +229,7 @@ // - БизнесПроцессСсылка // - Неопределено // -Функция ПометитьНаУдалениеБизнесПроцессы(ВыделенныеСтроки) Экспорт +Функция ПометитьНаУдалениеБизнесПроцессы(Знач ВыделенныеСтроки) Экспорт Количество = 0; Для Каждого СтрокаТаблицы Из ВыделенныеСтроки Цикл @@ -556,22 +253,4 @@ Возврат ?(Количество = 1, ВыделенныеСтроки[0].Владелец, Неопределено); КонецФункции -Процедура ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадачаОбъект) - - Если ЗадачаОбъект.БизнесПроцесс = Неопределено Или ЗадачаОбъект.БизнесПроцесс.Пустая() Тогда - Возврат; - КонецЕсли; - - ПодключенныеБизнесПроцессы = Новый Соответствие; - ПодключенныеБизнесПроцессы.Вставить(Метаданные.БизнесПроцессы.Задание.ПолноеИмя(), ""); - БизнесПроцессыИЗадачиПереопределяемый.ПриОпределенииБизнесПроцессов(ПодключенныеБизнесПроцессы); - - ТипБизнесПроцесса = ЗадачаОбъект.БизнесПроцесс.Метаданные(); - СведенияОБизнесПроцессе = ПодключенныеБизнесПроцессы[ТипБизнесПроцесса.ПолноеИмя()]; - Если СведенияОБизнесПроцессе <> Неопределено Тогда - БизнесПроцессы[ТипБизнесПроцесса.Имя].ПриПеренаправленииЗадачи(ЗадачаОбъект.Ссылка, НоваяЗадачаОбъект.Ссылка); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 1af470310..b7afd7610 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Команды работы с бизнес-процессами. +#Область КомандыРаботыСБизнесПроцессами // Отмечает указанные бизнес-процессы как остановленные. // @@ -329,8 +328,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительные процедуры и функции. +#КонецОбласти + +#Область ДополнительныеПроцедурыИФункции // Стандартный обработчик оповещения для форм выполнения задач. // Для вызова из обработчика события формы ОбработкаОповещения. @@ -467,7 +467,7 @@ ПеренаправляемыеЗадачи[0], ПеренаправляемыеЗадачи.Количество(), ?(ПеренаправляемыеЗадачи.Количество() > 1, НСтр("ru = 'Перенаправить задачи'"), НСтр("ru = 'Перенаправить задачу'"))), - ФормаВладелец,,,,Оповещение); + ФормаВладелец,,,, Оповещение); КонецПроцедуры @@ -483,10 +483,8 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - +// Открывает список ролей и исполнителей задач. +// Процедура ОткрытьСписокРолейИИсполнителейЗадач() Экспорт ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.РолиИИсполнителиЗадач"); @@ -518,7 +516,7 @@ // * РольИсполнителя - СправочникСсылка.РолиИсполнителей - роль для ролевой адресации задачи участникам бизнес-процессов. // * ОсновнойОбъектАдресации - Произвольный - основной объект адресации для направления задачи // * ДополнительныйОбъектАдресации - Произвольный - дополнительный объект адресации для направления задачи -// * ВыборОбъектаАдресации - Булево - Если Истина, то в списке будет выбран основной объект адресации. +// * ВыборОбъектаАдресации - Булево - если Истина, то в списке будет выбран основной объект адресации. // Функция ПараметрыФормыВыбораРолиИсполнителя(РольИсполнителя, ОсновнойОбъектАдресации = Неопределено, ДополнительныйОбъектАдресации = Неопределено) Экспорт @@ -535,6 +533,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ОткрытьБизнесПроцесс(Список) Экспорт @@ -613,30 +613,20 @@ КонецЕсли; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда - БизнесПроцессыИЗадачиВызовСервера.ОстановитьБизнесПроцессы(ПараметрКоманды); - Иначе - БизнесПроцессыИЗадачиВызовСервера.ОстановитьБизнесПроцесс(ПараметрКоманды); - КонецЕсли; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда - Если ПараметрКоманды.Количество() <> 0 Тогда - Для Каждого Параметр Из ПараметрКоманды Цикл - Если ТипЗнч(Параметр) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда ОповеститьОбИзменении(ТипЗнч(Параметр)); Прервать; КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе ОповеститьОбИзменении(ПараметрКоманды); КонецЕсли; @@ -665,30 +655,20 @@ КонецЕсли; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда - БизнесПроцессыИЗадачиВызовСервера.СделатьАктивнымБизнесПроцессы(ПараметрКоманды); - Иначе - БизнесПроцессыИЗадачиВызовСервера.СделатьАктивнымБизнесПроцесс(ПараметрКоманды); - КонецЕсли; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда - Если ПараметрКоманды.Количество() <> 0 Тогда - Для Каждого Параметр Из ПараметрКоманды Цикл - Если ТипЗнч(Параметр) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда ОповеститьОбИзменении(ТипЗнч(Параметр)); Прервать; КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе ОповеститьОбИзменении(ПараметрКоманды); КонецЕсли; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 93944ba25..9f0e9e12b 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -49,7 +49,7 @@ ЗадачаОбъект.ОсновнойОбъектАдресации, ЗадачаОбъект.ДополнительныйОбъектАдресации)); КонецЕсли; - Если БизнесПроцессыИЗадачиВызовСервера.ЭтоВедущаяЗадача(ЗадачаОбъект.Ссылка) Тогда + Если ЭтоВедущаяЗадача(ЗадачаОбъект.Ссылка) Тогда Если ЭлементГруппаСостояние <> Неопределено Тогда ЭлементГруппаСостояние.Видимость = Истина; КонецЕсли; @@ -692,8 +692,489 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Отложенный старт бизнес-процессов. +// Получить структуру с описанием формы выполнения задачи. +// +// Параметры: +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя +// +// Возвращаемое значение: +// см. БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи.ПараметрыФормы +// +Функция ФормаВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("БизнесПроцессыИЗадачи.ФормаВыполненияЗадачи", + "ЗадачаСсылка", ЗадачаСсылка, Тип("ЗадачаСсылка.ЗадачаИсполнителя")); + + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "БизнесПроцесс,ТочкаМаршрута"); + Если Реквизиты.БизнесПроцесс = Неопределено ИЛИ Реквизиты.БизнесПроцесс.Пустая() Тогда + Возврат Новый Структура(); + КонецЕсли; + + ТипБизнесПроцесса = Реквизиты.БизнесПроцесс.Метаданные(); // ОбъектМетаданныхБизнесПроцесс + ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка, + Реквизиты.ТочкаМаршрута); + БизнесПроцессыИЗадачиПереопределяемый.ПриПолученииФормыВыполненияЗадачи( + ТипБизнесПроцесса.Имя, ЗадачаСсылка, Реквизиты.ТочкаМаршрута, ПараметрыФормы); + + Возврат ПараметрыФормы; + +КонецФункции + +// Проверяет, находится ли в ячейке отчета ссылка на задачу и в параметре +// ЗначениеРасшифровки возвращает значение расшифровки. +// +// Параметры: +// Расшифровка - Строка - имя ячейки. +// ДанныеРасшифровкиОтчета - Строка - адрес во временном хранилище. +// ЗначениеРасшифровки - ЗадачаСсылка.ЗадачаИсполнителя +// - Произвольный - значение расшифровки из ячейки. +// +// Возвращаемое значение: +// Булево - Истина, если это задача исполнителю. +// +Функция ЭтоЗадачаИсполнителю(Знач Расшифровка, Знач ДанныеРасшифровкиОтчета, ЗначениеРасшифровки) Экспорт + + ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиОтчета); // ДанныеРасшифровкиКомпоновкиДанных + ЗначениеРасшифровки = ДанныеРасшифровкиОбъект.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; + Возврат ТипЗнч(ЗначениеРасшифровки) = Тип("ЗадачаСсылка.ЗадачаИсполнителя"); + +КонецФункции + +// Выполнить задачу ЗадачаСсылка, при необходимости выполнив обработчик. +// ОбработкаВыполненияПоУмолчанию модуля менеджера бизнес-процесса, +// к которому относится задача ЗадачаСсылка. +// +// Параметры: +// ЗадачаСсылка - ЗадачаСсылка +// ДействиеПоУмолчанию - Булево - признак необходимости вызова процедуры +// ОбработкаВыполненияПоУмолчанию у бизнес-процесса задачи. +// +Процедура ВыполнитьЗадачу(ЗадачаСсылка, ДействиеПоУмолчанию = Ложь) Экспорт + + НачатьТранзакцию(); + Попытка + ЗаблокироватьЗадачи(ЗадачаСсылка); + + СведенияЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "Выполнена, БизнесПроцесс, ТочкаМаршрута"); + Если СведенияЗадачи.Выполнена Тогда + ВызватьИсключение НСтр("ru = 'Задача уже была выполнена ранее.'"); + КонецЕсли; + + Если ДействиеПоУмолчанию + И СведенияЗадачи.БизнесПроцесс <> Неопределено + И Не СведенияЗадачи.БизнесПроцесс.Пустая() Тогда + ТипБизнесПроцесса = СведенияЗадачи.БизнесПроцесс.Метаданные(); // ОбъектМетаданныхБизнесПроцесс + БизнесПроцессы[ТипБизнесПроцесса.Имя].ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, + СведенияЗадачи.БизнесПроцесс, СведенияЗадачи.ТочкаМаршрута); + КонецЕсли; + + ЗадачаОбъект = ЗадачаСсылка.ПолучитьОбъект(); + ЗадачаОбъект.Выполнена = Ложь; + ЗадачаОбъект.ВыполнитьЗадачу(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Перенаправить задачи МассивЗадач новому исполнителю, указанному в структуре ИнфоОПеренаправлении. +// +// Параметры: +// ПеренаправляемыеЗадачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя +// ИнфоОПеренаправлении - Структура - новые значения реквизитов адресации задачи. +// ТолькоПроверка - Булево - если Истина, то функция не будет выполнять +// физического перенаправления задач, а только +// проверит возможность перенаправления. +// ПеренаправленныеЗадачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя - перенаправленные задачи. +// Может отличаться по составу элементов от массива +// ПеренаправляемыеЗадачи, если не все задачи удалось перенаправить. +// +// Возвращаемое значение: +// Булево - Истина, если перенаправление выполнено успешно. +// +Функция ПеренаправитьЗадачи(Знач ПеренаправляемыеЗадачи, Знач ИнфоОПеренаправлении, Знач ТолькоПроверка = Ложь, + ПеренаправленныеЗадачи = Неопределено) Экспорт + + Результат = Истина; + + СведенияОЗадачах = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПеренаправляемыеЗадачи, "БизнесПроцесс,Выполнена"); + НачатьТранзакцию(); + Попытка + Для Каждого Задача Из СведенияОЗадачах Цикл + + Если Задача.Значение.Выполнена Тогда + Результат = Ложь; + Если ТолькоПроверка Тогда + ОтменитьТранзакцию(); + Возврат Результат; + КонецЕсли; + КонецЕсли; + + ЗаблокироватьЗадачи(Задача.Ключ); + Если ЗначениеЗаполнено(Задача.Значение.БизнесПроцесс) И Не Задача.Значение.БизнесПроцесс.Пустая() Тогда + ЗаблокироватьБизнесПроцессы(Задача.Значение.БизнесПроцесс); + КонецЕсли; + КонецЦикла; + + Если ТолькоПроверка Тогда + Для Каждого Задача Из СведенияОЗадачах Цикл + ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект(); + ЗадачаОбъект.Выполнена = Ложь; + ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина); + ЗадачаОбъект.ДополнительныеСвойства.Вставить("ТолькоПроверка", Истина); + ЗадачаОбъект.ВыполнитьЗадачу(); + КонецЦикла; + ОтменитьТранзакцию(); + Возврат Результат; + КонецЕсли; + + Для Каждого Задача Из СведенияОЗадачах Цикл + + Если НЕ ЗначениеЗаполнено(ПеренаправленныеЗадачи) Тогда + ПеренаправленныеЗадачи = Новый Массив(); + КонецЕсли; + + // Не устанавливаем объектную блокировку на задачу Задача для того, чтобы + // позволить выполнять перенаправление по команде из формы этой задачи. + ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект(); + + УстановитьПривилегированныйРежим(Истина); + НоваяЗадача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу(); + НоваяЗадача.Заполнить(ЗадачаОбъект); + ЗаполнитьЗначенияСвойств(НоваяЗадача, ИнфоОПеренаправлении, + "Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации"); + НоваяЗадача.Записать(); + УстановитьПривилегированныйРежим(Ложь); + + ПеренаправленныеЗадачи.Добавить(НоваяЗадача.Ссылка); + + ЗадачаОбъект.РезультатВыполнения = ИнфоОПеренаправлении.Комментарий; + ЗадачаОбъект.Выполнена = Ложь; + ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина); + ЗадачаОбъект.ВыполнитьЗадачу(); + + УстановитьПривилегированныйРежим(Истина); + //@skip-check query-in-loop - пообъектная запись больших объемов данных. + ПодчиненныеБизнесПроцессы = ВыбратьБизнесПроцессыВедущейЗадачи(Задача.Ключ, Истина).Выбрать(); + УстановитьПривилегированныйРежим(Ложь); + Пока ПодчиненныеБизнесПроцессы.Следующий() Цикл + БизнесПроцессОбъект = ПодчиненныеБизнесПроцессы.Ссылка.ПолучитьОбъект(); + БизнесПроцессОбъект.ВедущаяЗадача = НоваяЗадача.Ссылка; + БизнесПроцессОбъект.Записать(); + КонецЦикла; + + УстановитьПривилегированныйРежим(Истина); + //@skip-check query-in-loop - пообъектная запись больших объемов данных. + ПодчиненныеБизнесПроцессы = БизнесПроцессыГлавнойЗадачи(Задача.Ключ, Истина); + УстановитьПривилегированныйРежим(Ложь); + + Для каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл + БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); + БизнесПроцессОбъект.ГлавнаяЗадача = НоваяЗадача.Ссылка; + БизнесПроцессОбъект.Записать(); + КонецЦикла; + + ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадача); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + Результат = Ложь; + Если Не ТолькоПроверка Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Проверяет, является ли указанная задача ведущей. +// +// Параметры: +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоВедущаяЗадача(ЗадачаСсылка) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Результат = ВыбратьБизнесПроцессыВедущейЗадачи(ЗадачаСсылка); + Возврат НЕ Результат.Пустой(); + +КонецФункции + +// Формирует список подбора для указания исполнителя в полях ввода составного типа (Пользователь и Роль). +// +// Параметры: +// Текст - Строка - фрагмент текста для поиска возможных исполнителей. +// +// Возвращаемое значение: +// СписокЗначений - список подбора, содержащий возможных исполнителей. +// +Функция СформироватьДанныеВыбораИсполнителя(Текст) Экспорт + + ДанныеВыбора = Новый СписокЗначений; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Пользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~"" + | И Пользователи.Недействителен = ЛОЖЬ + | И Пользователи.Служебный = ЛОЖЬ + | И Пользователи.ПометкаУдаления = ЛОЖЬ + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | РолиИсполнителей.Ссылка + |ИЗ + | Справочник.РолиИсполнителей КАК РолиИсполнителей + |ГДЕ + | РолиИсполнителей.Наименование ПОДОБНО &Текст СПЕЦСИМВОЛ ""~"" + | И НЕ РолиИсполнителей.ПометкаУдаления"; + Запрос.УстановитьПараметр("Текст", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(Текст) + "%"); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ДанныеВыбора.Добавить(Выборка.Ссылка); + КонецЦикла; + + Возврат ДанныеВыбора; + +КонецФункции + +#Область КомандыРаботыСБизнесПроцессами + +// Отмечает указанные бизнес-процессы как активные. +// +// Параметры: +// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс +// +Процедура СделатьАктивнымБизнесПроцессы(БизнесПроцессы) Экспорт + + НачатьТранзакцию(); + Попытка + ЗаблокироватьБизнесПроцессы(БизнесПроцессы); + + Для каждого БизнесПроцесс Из БизнесПроцессы Цикл + СделатьАктивнымБизнесПроцесс(БизнесПроцесс); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Отмечает указанный бизнес-процесс как активный. +// +// Параметры: +// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс +// +Процедура СделатьАктивнымБизнесПроцесс(БизнесПроцесс) Экспорт + + Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + ЗаблокироватьБизнесПроцессы(БизнесПроцесс); + + Объект = БизнесПроцесс.ПолучитьОбъект(); + Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен Тогда + + Если Объект.Завершен Тогда + ВызватьИсключение НСтр("ru = 'Невозможно сделать активными завершенные бизнес-процессы.'"); + КонецЕсли; + + Если Не Объект.Стартован Тогда + ВызватьИсключение НСтр("ru = 'Невозможно сделать активными не стартовавшие бизнес-процессы.'"); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже активен.'"); + КонецЕсли; + + Объект.Заблокировать(); + Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; + Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Отмечает указанные бизнес-процессы как остановленные. +// +// Параметры: +// БизнесПроцессы - Массив из ОпределяемыйТип.БизнесПроцесс +// +Процедура ОстановитьБизнесПроцессы(БизнесПроцессы) Экспорт + + НачатьТранзакцию(); + Попытка + ЗаблокироватьБизнесПроцессы(БизнесПроцессы); + + Для каждого БизнесПроцесс Из БизнесПроцессы Цикл + ОстановитьБизнесПроцесс(БизнесПроцесс); + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Отмечает указанный бизнес-процесс как остановленный. +// +// Параметры: +// БизнесПроцесс - ОпределяемыйТип.БизнесПроцесс +// +Процедура ОстановитьБизнесПроцесс(БизнесПроцесс) Экспорт + + Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + ЗаблокироватьБизнесПроцессы(БизнесПроцесс); + + Объект = БизнесПроцесс.ПолучитьОбъект(); + Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда + + Если Объект.Завершен Тогда + ВызватьИсключение НСтр("ru = 'Невозможно остановить завершенные бизнес-процессы.'"); + КонецЕсли; + + Если Не Объект.Стартован Тогда + ВызватьИсключение НСтр("ru = 'Невозможно остановить не стартовавшие бизнес-процессы.'"); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже остановлен.'"); + КонецЕсли; + + Объект.Заблокировать(); + Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен; + Объект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы. + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Отмечает указанные задачи как принятые к исполнению. +// +// Параметры: +// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя +// +Процедура ПринятьЗадачиКИсполнению(Задачи) Экспорт + + НовыйМассивЗадач = Новый Массив(); + + НачатьТранзакцию(); + Попытка + ЗаблокироватьЗадачи(Задачи); + + Для каждого Задача Из Задачи Цикл + + Если ТипЗнч(Задача) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + + ЗадачаОбъект = Задача.ПолучитьОбъект(); + Если ЗадачаОбъект.Выполнена Тогда + Продолжить; + КонецЕсли; + + ЗадачаОбъект.Заблокировать(); + ЗадачаОбъект.ПринятаКИсполнению = Истина; + ЗадачаОбъект.ДатаПринятияКИсполнению = ТекущаяДатаСеанса(); + Если НЕ ЗначениеЗаполнено(ЗадачаОбъект.Исполнитель) Тогда + ЗадачаОбъект.Исполнитель = Пользователи.АвторизованныйПользователь(); + КонецЕсли; + ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи. + + НовыйМассивЗадач.Добавить(Задача); + + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Задачи = НовыйМассивЗадач; + +КонецПроцедуры + +// Отмечает указанные задачи как не принятые к исполнению. +// +// Параметры: +// Задачи - Массив из ЗадачаСсылка.ЗадачаИсполнителя +// +Процедура ОтменитьПринятиеЗадачКИсполнению(Задачи) Экспорт + + НовыйМассивЗадач = Новый Массив(); + + НачатьТранзакцию(); + Попытка + ЗаблокироватьЗадачи(Задачи); + + Для каждого Задача Из Задачи Цикл + + Если ТипЗнч(Задача) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + + ЗадачаОбъект = Задача.ПолучитьОбъект(); + Если ЗадачаОбъект.Выполнена Тогда + Продолжить; + КонецЕсли; + + ЗадачаОбъект.Заблокировать(); + ЗадачаОбъект.ПринятаКИсполнению = Ложь; + ЗадачаОбъект.ДатаПринятияКИсполнению = "00010101000000"; + Если Не ЗадачаОбъект.РольИсполнителя.Пустая() Тогда + ЗадачаОбъект.Исполнитель = Неопределено; + КонецЕсли; + ЗадачаОбъект.Записать(); // АПК:1327 Блокировка установлена ранее в БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи. + + НовыйМассивЗадач.Добавить(Задача); + + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Задачи = НовыйМассивЗадач; + +КонецПроцедуры + +#КонецОбласти + +#Область ОтложенныйСтартБизнесПроцессов // Добавляет процесс в очередь для отложенного старта. // @@ -752,12 +1233,10 @@ Попытка ЗаблокироватьДанныеДляРедактирования(БизнесПроцесс); - БизнесПроцессОбъект = БизнесПроцесс.ПолучитьОбъект(); // Стартуем бизнес процесс и регистрируем этот старт в регистре. БизнесПроцессОбъект.Старт(); РегистрыСведений.ПроцессыДляЗапуска.ЗарегистрироватьСтартПроцесса(БизнесПроцесс); - РазблокироватьДанныеДляРедактирования(БизнесПроцесс); ЗафиксироватьТранзакцию(); @@ -850,8 +1329,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики регламентных заданий. +#КонецОбласти + +#Область ОбработчикиРегламентныхЗаданий // Выполняет рассылку уведомлений исполнителям о новых задачах за период с момента предыдущей рассылки. // Рассылка выполняется по почте от системной учетной записи. @@ -920,7 +1400,7 @@ Возврат; КонецЕсли; - ПросроченныеЗадачи = ВыбратьПросроченныеЗадачи(); + ПросроченныеЗадачи = СписокПросроченныхЗадач(); Если ПросроченныеЗадачи.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -932,8 +1412,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Подготовить первую порцию объектов для отложенной обработки прав доступа. // Для вызова из отложенных обработчиков обновления при изменении логики формирования наборов значений доступа. @@ -1052,6 +1533,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// @@ -1430,12 +1913,13 @@ // См. СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании. Процедура ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка) Экспорт - Если Объект = Метаданные.Справочники["Пользователи"] Тогда + Если Объект = Метаданные.Справочники.Пользователи Тогда БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - Если Объект = Метаданные.Справочники["Файлы"] Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + Если МодульРаботаСФайламиСлужебный.ЭтоСправочникФайлы(Объект) Тогда БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании); КонецЕсли; КонецЕсли; @@ -1446,8 +1930,25 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Мониторинг и контроль исполнения. +Процедура ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадачаОбъект) + + Если ЗадачаОбъект.БизнесПроцесс = Неопределено Или ЗадачаОбъект.БизнесПроцесс.Пустая() Тогда + Возврат; + КонецЕсли; + + ПодключенныеБизнесПроцессы = Новый Соответствие; + ПодключенныеБизнесПроцессы.Вставить(Метаданные.БизнесПроцессы.Задание.ПолноеИмя(), ""); + БизнесПроцессыИЗадачиПереопределяемый.ПриОпределенииБизнесПроцессов(ПодключенныеБизнесПроцессы); + + ТипБизнесПроцесса = ЗадачаОбъект.БизнесПроцесс.Метаданные(); + СведенияОБизнесПроцессе = ПодключенныеБизнесПроцессы[ТипБизнесПроцесса.ПолноеИмя()]; + Если СведенияОБизнесПроцессе <> Неопределено Тогда + БизнесПроцессы[ТипБизнесПроцесса.Имя].ПриПеренаправленииЗадачи(ЗадачаОбъект.Ссылка, НоваяЗадачаОбъект.Ссылка); + КонецЕсли; + +КонецПроцедуры + +#Область МониторингИКонтрольИсполнения Функция ВыгрузитьИсполнителей(ТекстЗапроса, ОсновнойОбъектАдресацииСсылка = Неопределено, ДопОбъектАдресацииСсылка = Неопределено) @@ -1534,10 +2035,10 @@ ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ - | ЗадачаИсполнителя.Ссылка КАК Задача, + | ЗадачаИсполнителя.Ссылка КАК ЗадачаИсполнителя, | ИсполнителиЗадач.Исполнитель КАК Исполнитель |ИЗ - | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя + | ЗадачаИсполнителя.ЗадачаИсполнителя КАК ЗадачаИсполнителя | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач | ПО ИсполнителиЗадач.РольИсполнителя = ЗадачаИсполнителя.РольИсполнителя | И ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗадачаИсполнителя.ОсновнойОбъектАдресации @@ -1552,10 +2053,10 @@ Запрос.УстановитьПараметр("Задачи", Задачи); ВыборкаЗапроса = Запрос.Выполнить().Выбрать(); Пока ВыборкаЗапроса.Следующий() Цикл - ИсполнителиЗадачи = Результат.ПоЗадачам[ВыборкаЗапроса.Задача]; + ИсполнителиЗадачи = Результат.ПоЗадачам[ВыборкаЗапроса.ЗадачаИсполнителя]; Если ИсполнителиЗадачи = Неопределено Тогда ИсполнителиЗадачи = Новый Массив; - Результат.ПоЗадачам[ВыборкаЗапроса.Задача] = ИсполнителиЗадачи; + Результат.ПоЗадачам[ВыборкаЗапроса.ЗадачаИсполнителя] = ИсполнителиЗадачи; КонецЕсли; Если ЗначениеЗаполнено(ВыборкаЗапроса.Исполнитель) Тогда ИсполнителиЗадачи.Добавить(ВыборкаЗапроса.Исполнитель); @@ -1597,23 +2098,6 @@ КонецПроцедуры -Функция ВыбратьПросроченныеЗадачи() - - ПросроченныеЗадачи = СписокПросроченныхЗадач(); - - Индекс = ПросроченныеЗадачи.Количество() - 1; - Пока Индекс >= 0 Цикл - ПросроченнаяЗадача = ПросроченныеЗадачи.Получить(Индекс); - Если НЕ ЗначениеЗаполнено(ПросроченнаяЗадача.Исполнитель) И БизнесПроцессыИЗадачиВызовСервера.ЭтоВедущаяЗадача(ПросроченнаяЗадача.Ссылка) Тогда - ПросроченныеЗадачи.Удалить(ПросроченнаяЗадача); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; - - Возврат ПросроченныеЗадачи; - -КонецФункции - // Возвращаемое значение: // ТаблицаЗначений: // * Ссылка - ЗадачаСсылка.ЗадачаИсполнителя @@ -1654,6 +2138,23 @@ Запрос.УстановитьПараметр("Дата", СрокИсполнения); ПросроченныеЗадачи = Запрос.Выполнить().Выгрузить(); + + ВыборкаБизнесПроцессов = ВыбратьБизнесПроцессыВедущихЗадач(ПросроченныеЗадачи.ВыгрузитьКолонку("Ссылка")); + Индекс = ПросроченныеЗадачи.Количество() - 1; + Отбор = Новый Структура("ВедущаяЗадача"); + Пока Индекс >= 0 Цикл + ПросроченнаяЗадача = ПросроченныеЗадачи.Получить(Индекс); + Индекс = Индекс - 1; + Если ЗначениеЗаполнено(ПросроченнаяЗадача.Исполнитель) Тогда + Продолжить; + КонецЕсли; + ВыборкаБизнесПроцессов.Сбросить(); + Отбор.ВедущаяЗадача = ПросроченнаяЗадача.Ссылка; + Если ВыборкаБизнесПроцессов.НайтиСледующий(Отбор) Тогда + ПросроченныеЗадачи.Удалить(ПросроченнаяЗадача); + КонецЕсли; + КонецЦикла; + Возврат ПросроченныеЗадачи; КонецФункции @@ -1770,12 +2271,23 @@ ТекстСообщения = ""; МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + МодульРаботаСПочтовымиСообщениямиСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль( + "РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер"); + + УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); Попытка - УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); - Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); Исключение - ОписаниеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не МодульРаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты( + ИнформацияОбОшибке) Тогда + + ВызватьИсключение; + КонецЕсли; + + ОписаниеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не отправлены уведомления о просроченных задачах по причине: |%1.'"), @@ -1888,11 +2400,22 @@ ПараметрыПисьма.Вставить("Кому", ПочтовыйАдресПолучателя); МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); - Попытка - УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); - Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениямиСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль( + "РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер"); + + УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + Попытка МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не МодульРаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты( + ИнформацияОбОшибке) Тогда + + ВызватьИсключение; + КонецЕсли; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, @@ -1946,8 +2469,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции Функция ВыбратьРолиСКоличествомИсполнителей(ОсновнойОбъектАдресации) Экспорт Если ОсновнойОбъектАдресации <> Неопределено Тогда @@ -2085,7 +2609,7 @@ КонецФункции -Функция ВыбратьБизнесПроцессыВедущейЗадачи(ЗадачаСсылка, ДляИзменения = Ложь) Экспорт +Функция ВыбратьБизнесПроцессыВедущейЗадачи(ЗадачаСсылка, ДляИзменения = Ложь) ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Таблица.Ссылка КАК Ссылка @@ -2119,6 +2643,43 @@ КонецФункции +Функция ВыбратьБизнесПроцессыВедущихЗадач(Задачи, ДляИзменения = Ложь) + + ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Таблица.Ссылка КАК Ссылка, + | Таблица.ВедущаяЗадача КАК ВедущаяЗадача + |ИЗ + | &ИмяТаблицы КАК Таблица + |ГДЕ + | Таблица.ВедущаяЗадача В (&ВедущиеЗадачи)"; + ТекстыЗапросов = Новый Массив; + Для Каждого ТипБизнесПроцесса Из Метаданные.ОпределяемыеТипы.БизнесПроцесс.Тип.Типы() Цикл + + МетаданныеБизнесПроцесса = Метаданные.НайтиПоТипу(ТипБизнесПроцесса); + + Если ДляИзменения Тогда + Блокировка = Новый БлокировкаДанных; + Для каждого ЗадачаСсылка Из Задачи Цикл + ЭлементБлокировки = Блокировка.Добавить(МетаданныеБизнесПроцесса.ПолноеИмя()); + ЭлементБлокировки.УстановитьЗначение("ВедущаяЗадача", ЗадачаСсылка); + КонецЦикла; + Блокировка.Заблокировать(); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ШаблонЗапроса, "&ИмяТаблицы", МетаданныеБизнесПроцесса.ПолноеИмя()); + Если ТекстыЗапросов.Количество() > 0 Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); // @Query-part-1, @Query-part-2 + КонецЕсли; + ТекстыЗапросов.Добавить(ТекстЗапроса); + + КонецЦикла; + + Запрос = Новый Запрос(СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС)); + Запрос.УстановитьПараметр("ВедущиеЗадачи", Задачи); + Возврат Запрос.Выполнить(); + +КонецФункции + Функция СобытиеЖурналаРегистрации() Экспорт Возврат НСтр("ru = 'Бизнес-процессы и задачи'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции @@ -2194,16 +2755,16 @@ ЗадачиСсылки = Задачи.ВыгрузитьКолонку("Ссылка"); ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | БизнесПроцессы.Ссылка КАК Ссылка + | ВложенныеБизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | #БизнесПроцессы КАК БизнесПроцессы + | #БизнесПроцессы КАК ВложенныеБизнесПроцессы |ГДЕ - | БизнесПроцессы.ВедущаяЗадача В (&Задачи) - | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ - | И БизнесПроцессы.Завершен = ЛОЖЬ"; + | ВложенныеБизнесПроцессы.ВедущаяЗадача В (&Задачи) + | И ВложенныеБизнесПроцессы.ПометкаУдаления = ЛОЖЬ + | И ВложенныеБизнесПроцессы.Завершен = ЛОЖЬ"; ТекстыЗапроса = Новый Массив; - // Меняем состояние вложенных и подчиненных бизнес-процессов. + // Меняем состояние вложенных бизнес-процессов. Для каждого МетаданныеБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл Если НЕ ПравоДоступа("Изменение", МетаданныеБизнесПроцесса) Тогда @@ -2232,13 +2793,13 @@ ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | БизнесПроцессы.Ссылка КАК Ссылка + | ПодчиненныеБизнесПроцессы.Ссылка КАК Ссылка |ИЗ - | #БизнесПроцессы КАК БизнесПроцессы + | #БизнесПроцессы КАК ПодчиненныеБизнесПроцессы |ГДЕ - | БизнесПроцессы.ГлавнаяЗадача В (&Задачи) - | И БизнесПроцессы.ПометкаУдаления = ЛОЖЬ - | И БизнесПроцессы.Завершен = ЛОЖЬ"; + | ПодчиненныеБизнесПроцессы.ГлавнаяЗадача В (&Задачи) + | И ПодчиненныеБизнесПроцессы.ПометкаУдаления = ЛОЖЬ + | И ПодчиненныеБизнесПроцессы.Завершен = ЛОЖЬ"; ТекстыЗапроса = Новый Массив; // Меняем состояние подчиненных бизнес-процессов. @@ -2518,8 +3079,9 @@ // СтандартныеПодсистемы.УправлениеДоступом -//////////////////////////////////////////////////////////////////////////////// -// Процедуры используемые при обмене данными РИБ. +#КонецОбласти + +#Область ПроцедурыИспользуемыеПриОбменеДаннымиРИБ // Переопределяет стандартное поведение при загрузке данных. Процедура ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента) @@ -2578,8 +3140,9 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Инициализировать предопределенную роль исполнителей ОтветственныйЗаКонтрольИсполнения. // @@ -2748,4 +3311,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl index d6ece6bcb..49b670aab 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl @@ -90,7 +90,7 @@ КонецПроцедуры -// Обработчик регламентного задания СтартОтложенныхПроцессов +// Обработчик регламентного задания СтартОтложенныхПроцессов. // Процедура СтартОтложенныхПроцессов() Экспорт @@ -101,22 +101,21 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ПроцессыДляЗапуска.Владелец КАК БизнесПроцесс + | БизнесПроцессыДляЗапуска.Владелец КАК БизнесПроцессДляЗапуска |ИЗ - | РегистрСведений.ПроцессыДляЗапуска КАК ПроцессыДляЗапуска + | РегистрСведений.ПроцессыДляЗапуска КАК БизнесПроцессыДляЗапуска | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов - | ПО ПроцессыДляЗапуска.Владелец = ДанныеБизнесПроцессов.Владелец + | ПО БизнесПроцессыДляЗапуска.Владелец = ДанныеБизнесПроцессов.Владелец |ГДЕ - | ПроцессыДляЗапуска.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияПроцессовДляЗапуска.ГотовКСтарту) - | И ПроцессыДляЗапуска.ДатаОтложенногоСтарта <= &ТекущаяДата - | И ПроцессыДляЗапуска.ДатаОтложенногоСтарта <> ДАТАВРЕМЯ(1, 1, 1) + | БизнесПроцессыДляЗапуска.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияПроцессовДляЗапуска.ГотовКСтарту) + | И БизнесПроцессыДляЗапуска.ДатаОтложенногоСтарта <= &ТекущаяДата + | И БизнесПроцессыДляЗапуска.ДатаОтложенногоСтарта <> ДАТАВРЕМЯ(1, 1, 1) | И ДанныеБизнесПроцессов.ПометкаУдаления = ЛОЖЬ"; Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - БизнесПроцессыИЗадачиСервер.СтартоватьОтложенныйПроцесс(Выборка.БизнесПроцесс); + БизнесПроцессыИЗадачиСервер.СтартоватьОтложенныйПроцесс(Выборка.БизнесПроцессДляЗапуска); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl b/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl index 8dbe51975..edf853e99 100644 --- a/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl +++ b/SSL/src/CommonModules/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -115,6 +115,26 @@ КонецПроцедуры +Процедура ПриВключенииДоступаКИнтернетСервисам() Экспорт + + НачатьТранзакцию(); + Попытка + ЗаблокироватьДанныеПараметровБлокировки(); + + ПараметрыБлокировки = СохраненныеПараметрыБлокировки(); + ВключитьОтключенныеРегламентныеЗадания(ПараметрыБлокировки, Истина); + + НовыеПараметрыБлокировки = ТекущиеПараметрыБлокировки(); + СохранитьПараметрыБлокировки(НовыеПараметрыБлокировки); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + #Область ОбработчикиПодписокНаСобытия Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт @@ -163,11 +183,14 @@ Возврат; КонецЕсли; - Если Не РегламентноеЗаданиеРаботаетСВнешнимиРесурсами(РегламентноеЗадание) Тогда - Возврат; - КонецЕсли; + РаботаСВнешнимиРесурсами = РегламентноеЗаданиеРаботаетСВнешнимиРесурсами(РегламентноеЗадание); + ЗаблокироватьДляРаботыСВнешнимиРесурсами = РаботаСВнешнимиРесурсами.РаботаетСВнешнимиРесурсами + И РаботаСВнешнимиРесурсамиЗаблокирована(); + ЗаблокироватьДляДоступаКВнешнимРесурсам = Не ЗаблокироватьДляРаботыСВнешнимиРесурсами + И Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() + И РаботаСВнешнимиРесурсами.ОбращаетсяКВнешнимРесурсам; - Если Не РаботаСВнешнимиРесурсамиЗаблокирована() Тогда + Если Не ЗаблокироватьДляРаботыСВнешнимиРесурсами И Не ЗаблокироватьДляДоступаКВнешнимРесурсам Тогда Возврат; КонецЕсли; @@ -176,7 +199,7 @@ ЗаблокироватьДанныеПараметровБлокировки(); ПараметрыБлокировки = СохраненныеПараметрыБлокировки(); - ОтключитьРегламентноеЗадание(ПараметрыБлокировки, РегламентноеЗадание); + ОтключитьРегламентноеЗадание(ПараметрыБлокировки, РегламентноеЗадание, ЗаблокироватьДляДоступаКВнешнимРесурсам); СохранитьПараметрыБлокировки(ПараметрыБлокировки); ЗафиксироватьТранзакцию(); @@ -185,17 +208,23 @@ ВызватьИсключение; КонецПопытки; - Если ОбщегоНазначения.РазделениеВключено() Тогда + Если ЗаблокироватьДляДоступаКВнешнимРесурсам Тогда ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Приложение было перемещено. - |Регламентное задание ""%1"", работающее с внешними ресурсами, отключено.'"), - РегламентноеЗадание.Синоним); + НСтр("ru = '%1 + |Регламентное задание ""%2"", обращающееся к внешним ресурсам, отключено.'"), + ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения(), + РегламентноеЗадание.Синоним); + ИначеЕсли ОбщегоНазначения.РазделениеВключено() Тогда + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Приложение было перемещено. + |Регламентное задание ""%1"", работающее с внешними ресурсами, отключено.'"), + РегламентноеЗадание.Синоним); Иначе - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Изменилась строка соединения информационной базы. - |Возможно информационная база была перемещена. - |Регламентное задание ""%1"" отключено.'"), - РегламентноеЗадание.Синоним); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменилась строка соединения информационной базы. + |Возможно информационная база была перемещена. + |Регламентное задание ""%1"" отключено.'"), + РегламентноеЗадание.Синоним); КонецЕсли; РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, ТекстИсключения); @@ -282,6 +311,7 @@ Результат.Вставить("ПроверятьИмяСервера", Истина); Результат.Вставить("РаботаСВнешнимиРесурсамиЗаблокирована", Ложь); Результат.Вставить("ОтключенныеЗадания", Новый Массив); + Результат.Вставить("ОтключенныеЗаданияПриОтключенииДоступаКИнтернетСервисам", Новый Массив); Результат.Вставить("ПричинаБлокировки", ""); Возврат Результат; @@ -323,7 +353,7 @@ УстановитьПривилегированныйРежим(Истина); - ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки, Новый СжатиеДанных(9)); Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); УстановитьПривилегированныйРежим(Ложь); @@ -334,10 +364,10 @@ #Область РегламентныеЗадания -// АПК:453-выкл интегрированное управление регламентными заданиями в блоке блокировки работы. - Функция РегламентноеЗаданиеРаботаетСВнешнимиРесурсами(РегламентноеЗадание) + Результат = Новый Структура("РаботаетСВнешнимиРесурсами, ОбращаетсяКВнешнимРесурсам", Ложь, Ложь); + ЗависимостиЗаданий = РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); Отбор = Новый Структура; @@ -345,11 +375,26 @@ Отбор.Вставить("РаботаетСВнешнимиРесурсами", Истина); НайденныеСтроки = ЗависимостиЗаданий.НайтиСтроки(Отбор); - Возврат НайденныеСтроки.Количество() <> 0; + Если НайденныеСтроки.Количество() <> 0 Тогда + Результат.РаботаетСВнешнимиРесурсами = Истина; + Результат.ОбращаетсяКВнешнимРесурсам = Истина; + Возврат Результат; + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("РегламентноеЗадание", РегламентноеЗадание); + Отбор.Вставить("ОбращаетсяКВнешнимРесурсам", Истина); + + НайденныеСтроки = ЗависимостиЗаданий.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() <> 0 Тогда + Результат.ОбращаетсяКВнешнимРесурсам = Истина; + КонецЕсли; + + Возврат Результат; КонецФункции -Процедура ОтключитьРегламентноеЗадание(ПараметрыБлокировки, РегламентноеЗадание) +Процедура ОтключитьРегламентноеЗадание(ПараметрыБлокировки, РегламентноеЗадание, ЗаблокироватьДляДоступаКВнешнимРесурсам) Отбор = Новый Структура; Отбор.Вставить("Метаданные", РегламентноеЗадание); @@ -359,16 +404,25 @@ Для Каждого Задание Из НайденныеЗадания Цикл РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Новый Структура("Использование", Ложь)); - ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.УникальныйИдентификатор); + Если ЗаблокироватьДляДоступаКВнешнимРесурсам Тогда + ПараметрыБлокировки.ОтключенныеЗаданияПриОтключенииДоступаКИнтернетСервисам.Добавить(Задание.УникальныйИдентификатор); + Иначе + ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.УникальныйИдентификатор); + КонецЕсли; КонецЦикла; КонецПроцедуры -Процедура ВключитьОтключенныеРегламентныеЗадания(ПараметрыБлокировки) +Процедура ВключитьОтключенныеРегламентныеЗадания(ПараметрыБлокировки, РазблокироватьДляДоступаКИнтернетСервисам = Ложь) РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + Если РазблокироватьДляДоступаКИнтернетСервисам Тогда + ОтключенныеЗадания = ПараметрыБлокировки.ОтключенныеЗаданияПриОтключенииДоступаКИнтернетСервисам; + Иначе + ОтключенныеЗадания = ПараметрыБлокировки.ОтключенныеЗадания; + КонецЕсли; - Для Каждого ИдентификаторЗадания Из ПараметрыБлокировки.ОтключенныеЗадания Цикл + Для Каждого ИдентификаторЗадания Из ОтключенныеЗадания Цикл Если РазделениеВключено = (ТипЗнч(ИдентификаторЗадания) = Тип("УникальныйИдентификатор")) Тогда Продолжить; @@ -382,15 +436,13 @@ Для Каждого Задание Из НайденныеЗадания Цикл РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Новый Структура("Использование", Истина)); - ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.УникальныйИдентификатор); + ОтключенныеЗадания.Добавить(Задание.УникальныйИдентификатор); КонецЦикла; КонецЦикла; КонецПроцедуры -// АПК:453-вкл - #КонецОбласти #Область ФайлПроверкиИдентификатораФайловойБазы @@ -509,7 +561,7 @@ // поэтому проверку перемещения базы осуществляем через файл проверки. Если Не ФайлПроверкиИдентификатораФайловойБазыСуществует() Тогда - ТекстСообщения = НСтр("ru = 'В папке информационной базы отсутствует файл проверки %1.'"); + ТекстСообщения = НСтр("ru = 'В каталоге информационной базы отсутствует файл проверки %1.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "DoNotCopy.txt"); УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); Возврат Истина; diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 6c7e83906..e2c2d5735 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -28,18 +28,18 @@ Если ТипЗнч(Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | Отчеты.Ссылка КАК ВариантОтчета + | ВариантыОтчетов.Ссылка КАК ВариантОтчета |ИЗ | РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ОтчетыРасширений - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК Отчеты - | ПО Отчеты.ПредопределенныйВариант = ОтчетыРасширений.Вариант + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ПО ВариантыОтчетов.ПредопределенныйВариант = ОтчетыРасширений.Вариант |ГДЕ | ОтчетыРасширений.Отчет = &Отчет | И ОтчетыРасширений.ВерсияРасширений = &ВерсияРасширений | И ОтчетыРасширений.КлючВарианта = &КлючВарианта | |УПОРЯДОЧИТЬ ПО - | Отчеты.ПометкаУдаления"; + | ВариантыОтчетов.ПометкаУдаления"; Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); Иначе @@ -142,8 +142,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Поддержка переопределяемых модулей. +#Область ПоддержкаПереопределяемыхМодулей // Вызывает модуль менеджера отчета для заполнения его настроек. // Для вызова из процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. @@ -405,8 +404,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для вызова из отчетов. +#КонецОбласти + +#Область ДляВызоваИзОтчетов // Обновляет состав справочника ПользовательскиеНастройкиОтчетов после сохранения новой настройки. // Вызывается в одноименном обработчике формы отчета после выполнения кода формы. @@ -593,8 +593,9 @@ Возврат Ложь; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для вызова из обработчиков обновления прикладной конфигурации. +#КонецОбласти + +#Область ДляВызоваИзОбработчиковОбновленияПрикладнойКонфигурации // Сбрасывает пользовательские настройки указанных отчетов. // @@ -1003,7 +1004,7 @@ Если ТипЗнч(ОписаниеВарианта.Настройки) = Тип("ХранилищеЗначения") Тогда ХранилищеВарианта.Настройки = ОписаниеВарианта.Настройки; Иначе - ХранилищеВарианта.Настройки = Новый ХранилищеЗначения(ОписаниеВарианта.Настройки); + ХранилищеВарианта.Настройки = Новый ХранилищеЗначения(ОписаниеВарианта.Настройки, Новый СжатиеДанных(9)); КонецЕсли; // Поскольку переносятся пользовательские варианты отчетов, @@ -1030,6 +1031,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Получает объект отчета по ссылке на вариант отчета. @@ -1515,8 +1518,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры служебного программного интерфейса. +#Область ПрочиеПроцедурыСлужебногоПрограммногоИнтерфейса Функция ПараметрыОбновленияНастроек() Экспорт @@ -2147,8 +2149,9 @@ Возврат Не ОбщегоНазначения.РазделениеВключено(); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для отчета по внедрению. +#КонецОбласти + +#Область ДляОтчетаПоВнедрению // Параметры: // ТипОтчетов - Строка @@ -2417,8 +2420,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -2544,14 +2548,12 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - ОбщегоНазначения.ДобавитьПереименование( - Итог, "2.1.0.2", "Роль.ЧтениеВариантовОтчетов", "Роль.ИспользованиеВариантовОтчетов", Библиотека); - ОбщегоНазначения.ДобавитьПереименование( - Итог, "2.3.3.3", "Роль.ИспользованиеВариантовОтчетов", "Роль.ДобавлениеИзменениеЛичныхВариантовОтчетов", Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.1.0.2", + "Роль.ЧтениеВариантовОтчетов", "Роль.ИспользованиеВариантовОтчетов", "СтандартныеПодсистемы"); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.3", + "Роль.ИспользованиеВариантовОтчетов", "Роль.ДобавлениеИзменениеЛичныхВариантовОтчетов", "СтандартныеПодсистемы"); КонецПроцедуры @@ -2781,6 +2783,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Представление подсистемы. Используется при записи в журнал регистрации и в других местах. @@ -3347,8 +3351,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Журнал регистрации +#Область ЖурналРегистрации // Запись в журнал регистрации. Процедура ЗаписатьВЖурнал(Уровень, Сообщение, ВариантОтчета = Неопределено) Экспорт @@ -3385,8 +3388,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики стандартных событий. +#КонецОбласти + +#Область ОбработчикиСтандартныхСобытий // Удаление личных вариантов отчетов при удалении пользователя. Процедура ПриУдаленииПользователя(ПользовательОбъект, Отказ) Экспорт @@ -3469,8 +3473,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // [*] Актуализирует кэш метаданных конфигурации: справочник ПредопределенныеВариантыОтчетов // и параметры вариантов отчетов в регистре. @@ -3554,8 +3559,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы / Начальное заполнение и актуализация справочников. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазыНачальноеЗаполнениеИАктуализацияСправочников // Актуализирует кэш метаданных конфигурации/подключенных расширений. Функция ОперативноеОбновлениеОбщихДанных(Режим, РазделенныеОбработчики) @@ -4044,25 +4050,27 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); + МодульМультиязычностьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьКлиентСервер"); Если ОбщегоНазначения.ЭтоОсновнойЯзык() Тогда ВариантОбъект.Наименование = ОписаниеВарианта.Наименование; ВариантОбъект.Описание = ОписаниеВарианта.Описание; КонецЕсли; - Если МодульМультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы() = ТекущийЯзык().КодЯзыка Тогда - ВариантОбъект.НаименованиеЯзык1 = ?(ЗначениеЗаполнено(ОписаниеВарианта.Наименование), ОписаниеВарианта.Наименование, - ВариантОбъект.Наименование); - ВариантОбъект.ОписаниеЯзык1 = ?(ЗначениеЗаполнено(ОписаниеВарианта.Описание), ОписаниеВарианта.Описание, - ВариантОбъект.Описание); - КонецЕсли; + КоличествоДополнительныхЯзыков = МодульМультиязычностьСервер.КоличествоДополнительныхЯзыков(); + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяСуффиксаЯзыка = МодульМультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + КодЯзыка = МодульМультиязычностьСервер.КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка); + + Если КодЯзыка = ТекущийЯзык().КодЯзыка Тогда + ВариантОбъект["Наименование" + ИмяСуффиксаЯзыка ] = ?(ЗначениеЗаполнено(ОписаниеВарианта.Наименование), + ОписаниеВарианта.Наименование, ВариантОбъект.Наименование); + ВариантОбъект["Описание" + ИмяСуффиксаЯзыка ] = ?(ЗначениеЗаполнено(ОписаниеВарианта.Описание), + ОписаниеВарианта.Описание, ВариантОбъект.Описание); + КонецЕсли; + + КонецЦикла; - Если МодульМультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы() = ТекущийЯзык().КодЯзыка Тогда - ВариантОбъект.НаименованиеЯзык2 = ?(ЗначениеЗаполнено(ОписаниеВарианта.Наименование), ОписаниеВарианта.Наименование, - ВариантОбъект.Наименование); - ВариантОбъект.ОписаниеЯзык2 = ?(ЗначениеЗаполнено(ОписаниеВарианта.Описание), ОписаниеВарианта.Описание, - ВариантОбъект.Описание); - КонецЕсли; КонецЕсли; ПоляДляПоиска.Наименование = ОписаниеВарианта.Наименование; @@ -4183,19 +4191,19 @@ // Обновление сведений предопределенных вариантов. ТекстЗапроса = "ВЫБРАТЬ - | ПредопределенныеКонфигурации.Ссылка КАК ПредопределенныйВариант, - | ПредопределенныеКонфигурации.Наименование КАК Наименование, - | ПредопределенныеКонфигурации.Отчет КАК Отчет, - | ПредопределенныеКонфигурации.ГруппироватьПоОтчету КАК ГруппироватьПоОтчету, - | ПредопределенныеКонфигурации.КлючВарианта КАК КлючВарианта, - | ПредопределенныеКонфигурации.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, - | ПредопределенныеКонфигурации.Назначение КАК Назначение, - | ПредопределенныеКонфигурации.Родитель КАК Родитель + | ПредопределенныеВариантыОтчетов.Ссылка КАК ПредопределенныйВариант, + | &ПредопределенныеВариантыОтчетовНаименование, + | ПредопределенныеВариантыОтчетов.Отчет КАК Отчет, + | ПредопределенныеВариантыОтчетов.ГруппироватьПоОтчету КАК ГруппироватьПоОтчету, + | ПредопределенныеВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ПредопределенныеВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию, + | ПредопределенныеВариантыОтчетов.Назначение КАК Назначение, + | ПредопределенныеВариантыОтчетов.Родитель КАК Родитель |ПОМЕСТИТЬ втПредопределенные |ИЗ - | Справочник.ПредопределенныеВариантыОтчетов КАК ПредопределенныеКонфигурации + | &ТаблицаПредопределенныеВариантыОтчетов КАК ПредопределенныеВариантыОтчетов |ГДЕ - | ПредопределенныеКонфигурации.ПометкаУдаления = ЛОЖЬ + | ПредопределенныеВариантыОтчетов.ПометкаУдаления = ЛОЖЬ |; | |//////////////////////////////////////////////////////////////////////////////// @@ -4205,7 +4213,7 @@ | ВариантыОтчетов.Отчет, | ВариантыОтчетов.ТипОтчета, | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.Наименование КАК Наименование, + | &ВариантыОтчетовНаименование, | ВариантыОтчетов.ПредопределенныйВариант, | ВариантыОтчетов.Назначение, | ВариантыОтчетов.Родитель @@ -4232,8 +4240,8 @@ | КОНЕЦ КАК СоздатьНовый, | втПредопределенные.ПредопределенныйВариант КАК ПредопределенныйВариант, | втПредопределенные.Назначение КАК Назначение, - | втПредопределенные.Наименование КАК Наименование, - | втПредопределенные.Отчет КАК Отчет, + | &втПредопределенныеНаименование, + | втПредопределенные.Отчет КАК СсылкаОтчета, | втПредопределенные.КлючВарианта КАК КлючВарианта, | втПредопределенные.ГруппироватьПоОтчету КАК ГруппироватьПоОтчету, | ВЫБОР @@ -4245,7 +4253,7 @@ | втВариантыОтчетов.Родитель КАК РеквизитРодитель, | втВариантыОтчетов.Отчет КАК РеквизитОтчет, | втВариантыОтчетов.КлючВарианта КАК РеквизитКлючВарианта, - | втВариантыОтчетов.Наименование КАК РеквизитНаименование, + | &втВариантыОтчетовНаименование, | втВариантыОтчетов.ПредопределенныйВариант КАК РеквизитПредопределенныйВариант, | втВариантыОтчетов.Назначение КАК РеквизитНазначение, | втВариантыОтчетов.ПометкаУдаления КАК РеквизитПометкаУдаления @@ -4259,11 +4267,12 @@ Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Внутренний); Запрос.УстановитьПараметр("ТипРеквизитаОтчет", Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); Запрос.УстановитьПараметр("ПустаяСсылкаВарианта", Справочники.ПредопределенныеВариантыОтчетов.ПустаяСсылка()); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаПредопределенныеВариантыОтчетов", "Справочник.ПредопределенныеВариантыОтчетов"); ИначеЕсли Режим = "РазделенныеДанныеРасширений" Тогда Запрос.УстановитьПараметр("ТипОтчета", Перечисления.ТипыОтчетов.Расширение); Запрос.УстановитьПараметр("ТипРеквизитаОтчет", Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")); Запрос.УстановитьПараметр("ПустаяСсылкаВарианта", Справочники.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка()); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаПредопределенныеВариантыОтчетов", "Справочник.ПредопределенныеВариантыОтчетовРасширений"); КонецЕсли; ИзменяемыеРеквизиты = Новый Структура("ПометкаУдаления, Родитель, @@ -4277,43 +4286,77 @@ СоответствиеРеквизитов.Вставить("ПредопределенныйВариант", "РеквизитПредопределенныйВариант"); СоответствиеРеквизитов.Вставить("Назначение", "РеквизитНазначение"); + СуффиксЯзыка = ""; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда - МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); + МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); + МодульМультиязычностьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьКлиентСервер"); + СуффиксЯзыка = МодульМультиязычностьСервер.СуффиксТекущегоЯзыка(); Если ЗначениеЗаполнено(СуффиксЯзыка) Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПредопределенныеКонфигурации.Наименование КАК Наименование,", - "ПредопределенныеКонфигурации.Наименование КАК Наименование, - |ПредопределенныеКонфигурации.НаименованиеЯзык1 КАК НаименованиеЯзык1, - |ПредопределенныеКонфигурации.НаименованиеЯзык2 КАК НаименованиеЯзык2,"); + + КоличествоДополнительныхЯзыков = МодульМультиязычностьСервер.КоличествоДополнительныхЯзыков(); + + НаборПредопределенныеВариантыОтчетов = Новый Массив; + НаборВариантыОтчетов = Новый Массив; + НаборВТПредопределенные = Новый Массив; + НаборВТВариантыОтчетов = Новый Массив; + + НаборПредопределенныеВариантыОтчетов.Добавить("ПредопределенныеВариантыОтчетов.Наименование КАК Наименование"); + НаборВариантыОтчетов.Добавить("ВариантыОтчетов.Наименование КАК Наименование"); + НаборВТПредопределенные.Добавить("втПредопределенные.Наименование КАК Наименование"); + НаборВТВариантыОтчетов.Добавить("втВариантыОтчетов.Наименование КАК РеквизитНаименование"); + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяСуффиксаЯзыка = МодульМультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + ИмяРеквизита = "Наименование" + ИмяСуффиксаЯзыка ; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Наименование КАК Наименование,", - "ВариантыОтчетов.Наименование КАК Наименование, - |ВариантыОтчетов.НаименованиеЯзык1 КАК НаименованиеЯзык1, - |ВариантыОтчетов.НаименованиеЯзык2 КАК НаименованиеЯзык2,"); + НаборПредопределенныеВариантыОтчетов.Добавить( + СтрШаблон("ПредопределенныеВариантыОтчетов.%1 КАК %1", ИмяРеквизита)); + НаборВариантыОтчетов.Добавить(СтрШаблон("ВариантыОтчетов.%1 КАК %1", ИмяРеквизита)); + НаборВТПредопределенные.Добавить(СтрШаблон("втПредопределенные.%1 КАК %1", ИмяРеквизита)); + НаборВТВариантыОтчетов.Добавить(СтрШаблон("втВариантыОтчетов.%1 КАК Реквизит%1", ИмяРеквизита)); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "втВариантыОтчетов.Наименование КАК РеквизитНаименование,", - "втВариантыОтчетов.Наименование КАК РеквизитНаименование, - |втВариантыОтчетов.НаименованиеЯзык1 КАК РеквизитНаименованиеЯзык1, - |втВариантыОтчетов.НаименованиеЯзык2 КАК РеквизитНаименованиеЯзык2,"); + ИзменяемыеРеквизиты.Вставить(ИмяРеквизита); + СоответствиеРеквизитов.Вставить(ИмяРеквизита, "Реквизит" + ИмяРеквизита); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "втПредопределенные.Наименование КАК Наименование,", - "втПредопределенные.Наименование КАК Наименование, - |втПредопределенные.НаименованиеЯзык1 КАК НаименованиеЯзык1, - |втПредопределенные.НаименованиеЯзык2 КАК НаименованиеЯзык2,"); - - ИзменяемыеРеквизиты.Вставить("НаименованиеЯзык1"); - ИзменяемыеРеквизиты.Вставить("НаименованиеЯзык2"); - СоответствиеРеквизитов.Вставить("НаименованиеЯзык1", "РеквизитНаименованиеЯзык1"); - СоответствиеРеквизитов.Вставить("НаименованиеЯзык2", "РеквизитНаименованиеЯзык2"); + КонецЦикла; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПредопределенныеВариантыОтчетовНаименование", + СтрСоединить(НаборПредопределенныеВариантыОтчетов, "," + Символы.ПС)); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВариантыОтчетовНаименование", + СтрСоединить(НаборВариантыОтчетов, "," + Символы.ПС)); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&втПредопределенныеНаименование", + СтрСоединить(НаборВТПредопределенные, "," + Символы.ПС)); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&втВариантыОтчетовНаименование", + СтрСоединить(НаборВТВариантыОтчетов, "," + Символы.ПС)); КонецЕсли; КонецЕсли; + Если Не ЗначениеЗаполнено(СуффиксЯзыка) Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПредопределенныеВариантыОтчетовНаименование", + "ПредопределенныеВариантыОтчетов.Наименование КАК Наименование"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ВариантыОтчетовНаименование", + "ВариантыОтчетов.Наименование КАК Наименование"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&втПредопределенныеНаименование", + "втПредопределенные.Наименование КАК Наименование"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&втВариантыОтчетовНаименование", + "втВариантыОтчетов.Наименование КАК РеквизитНаименование"); + КонецЕсли; + Запрос.Текст = ТекстЗапроса; СводнаяТаблицаПредопределенных = Запрос.Выполнить().Выгрузить(); + СводнаяТаблицаПредопределенных.Колонки.СсылкаОтчета.Имя = "Отчет"; СводнаяТаблицаПредопределенных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); СводнаяТаблицаПредопределенных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов")); @@ -4778,8 +4821,9 @@ ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление представлений на других языках. +#КонецОбласти + +#Область ОбновлениеПредставленийНаДругихЯзыках // Обработчик регламентного задания ОбновлениеПредопределенныхВариантовОтчетов. Процедура ЗаполнитьПредставленияПредопределенныхВариантовОтчетов(Языки, ИндексТекущегоЯзыка) Экспорт @@ -4976,8 +5020,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с деревом подсистем из форм. +#КонецОбласти + +#Область РаботаСДеревомПодсистемИзФорм // Добавляет элементы условного оформления дерева подсистем. // @@ -5210,8 +5255,9 @@ Возврат Неопределено; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа со списком варианта отчета. +#КонецОбласти + +#Область РаботаСоСпискомВариантаОтчета // Обработчик установки условного оформления списка пользователей варианта отчета. // @@ -5367,8 +5413,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Формирование представлений полей, параметров и отборов для поиска. +#КонецОбласти + +#Область ФормированиеПредставленийПолейПараметровИОтборовДляПоиска // Вызывается из события ПриЗаписи вариантов. // Возвращаемое значение: @@ -5825,8 +5872,9 @@ Возврат СтрСоединить(ТекстыОбластей, Символы.ПС); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Уменьшение количества пользовательских настроек. +#КонецОбласти + +#Область УменьшениеКоличестваПользовательскихНастроек // Параметры: // ОтчетСсылка - СправочникСсылка.ВариантыОтчетов @@ -6099,8 +6147,9 @@ Возврат Истина; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Поиск. +#КонецОбласти + +#Область Поиск // Параметры: // ПараметрыПоиска - Структура @@ -6319,6 +6368,7 @@ Запрос.Текст = ТекстЗапроса; ИсходнаяТаблица = ИсходнаяТаблицаВариантовОтчетов(Запрос); + ИсходнаяТаблица.Колонки.ОтчетСсылка.Имя = "Отчет"; Если ПолучатьИтоговуюТаблицу Тогда Результат.ТаблицаЗначений = ИсходнаяТаблица; @@ -6405,7 +6455,7 @@ | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК Автор, | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.Пользовательский КАК Пользовательский, @@ -6492,7 +6542,7 @@ | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК Автор, | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.Пользовательский КАК Пользовательский, @@ -6734,10 +6784,10 @@ | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """") | ИНАЧЕ """" | КОНЕЦ КАК АвторПредставление, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.ОтчетСсылка КАК ОтчетСсылка, | ВЫБОР | КОГДА &ПолучатьИтоговуюТаблицу - | ТОГДА ВариантыОтчетов.Отчет.Имя + | ТОГДА ВариантыОтчетов.ОтчетСсылка.Имя | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК ИмяОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, @@ -6781,10 +6831,10 @@ | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """") | ИНАЧЕ """" | КОНЕЦ, - | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ОтчетСсылка, | ВЫБОР | КОГДА &ПолучатьИтоговуюТаблицу - | ТОГДА ВариантыОтчетов.Отчет.Имя + | ТОГДА ВариантыОтчетов.ОтчетСсылка.Имя | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ, | ВариантыОтчетов.КлючВарианта, @@ -6881,7 +6931,7 @@ | ТОГДА ПРЕДСТАВЛЕНИЕ(ВариантыОтчетов.Автор) | ИНАЧЕ """" | КОНЕЦ КАК АвторПредставление, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | &ИмяОтчета КАК ИмяОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, @@ -6975,7 +7025,7 @@ | ТОГДА ПРЕДСТАВЛЕНИЕ(ВариантыОтчетов.Автор) | ИНАЧЕ """" | КОНЕЦ КАК АвторПредставление, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | &ИмяОтчета КАК ИмяОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, @@ -7508,6 +7558,7 @@ КонецЕсли; ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); + ТаблицаРезультат.Колонки.ОтчетСсылка.Имя = "Отчет"; ЗаполнитьИменаОтчетов(ТаблицаРезультат); ТаблицаРезультат.Колонки.Добавить("ВыводитсяВместеСОсновным", Новый ОписаниеТипов("Булево")); @@ -7586,7 +7637,7 @@ | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.Автор КАК Автор, @@ -7691,7 +7742,7 @@ | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ОтчетыКонфигурации.Описание, ОтчетыРасширений.Описание) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.ТипОтчета, | ВариантыОтчетов.КлючВарианта, | ВариантыОтчетов.Автор, @@ -7770,7 +7821,7 @@ | ТОГДА ВЫРАЗИТЬ(ПредставленияВариантов.Описание КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВариантыОтчетов.Автор КАК Автор, @@ -7903,7 +7954,7 @@ | ТОГДА ВЫРАЗИТЬ(ПредставленияОтчетов.Описание КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияОтчетовКонфигурации.Описание, ПредставленияОтчетовРасширений.Описание), ВариантыОтчетов.Описание) КАК СТРОКА(1000)) | КОНЕЦ КАК Описание, - | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.ТипОтчета, | ВариантыОтчетов.КлючВарианта, | ВариантыОтчетов.Автор, @@ -7968,7 +8019,7 @@ | ЕСТЬNULL(втВарианты.Наименование, втПредопределенные.Наименование) КАК Наименование, | ЕСТЬNULL(втВарианты.Описание, втПредопределенные.Описание) КАК Описание, | ЕСТЬNULL(втВарианты.Автор, втПредопределенные.Автор) КАК Автор, - | ЕСТЬNULL(втВарианты.Отчет, втПредопределенные.Отчет) КАК Отчет, + | ЕСТЬNULL(втВарианты.ОтчетСсылка, втПредопределенные.ОтчетСсылка) КАК ОтчетСсылка, | ЕСТЬNULL(втВарианты.ТипОтчета, втПредопределенные.ТипОтчета) КАК ТипОтчета, | ЕСТЬNULL(втВарианты.КлючВарианта, втПредопределенные.КлючВарианта) КАК КлючВарианта, | ЕСТЬNULL(втВарианты.Родитель, втПредопределенные.Родитель) КАК Родитель, @@ -7998,7 +8049,7 @@ | ВариантыОтчетов.Наименование КАК Наименование, | ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) КАК Описание, | ВариантыОтчетов.Автор КАК Автор, - | ВариантыОтчетов.Отчет КАК Отчет, + | ВариантыОтчетов.Отчет КАК ОтчетСсылка, | ВариантыОтчетов.ТипОтчета КАК ТипОтчета, | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, | ВЫБОР @@ -8055,7 +8106,7 @@ | втВсеВариантыСПодсистемами.Наименование, | втВсеВариантыСПодсистемами.Описание, | втВсеВариантыСПодсистемами.Автор, - | втВсеВариантыСПодсистемами.Отчет, + | втВсеВариантыСПодсистемами.ОтчетСсылка, | втВсеВариантыСПодсистемами.ТипОтчета, | втВсеВариантыСПодсистемами.КлючВарианта, | втВсеВариантыСПодсистемами.Родитель, @@ -8102,15 +8153,15 @@ | ВЫБОР | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний) | ИЛИ втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) - | ТОГДА втВсеВарианты.Отчет.Имя + | ТОГДА втВсеВарианты.ОтчетСсылка.Имя | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) | ТОГДА """" - | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) + | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.ОтчетСсылка КАК СТРОКА(150)), 14, 137) | КОНЕЦ КАК ИмяОтчета, | ЕСТЬNULL(втВсеВарианты.Наименование, """") КАК Наименование, | втВсеВарианты.Описание КАК Описание, | втВсеВарианты.Автор КАК Автор, - | втВсеВарианты.Отчет КАК Отчет, + | втВсеВарианты.ОтчетСсылка КАК ОтчетСсылка, | втВсеВарианты.ТипОтчета КАК ТипОтчета, | втВсеВарианты.КлючВарианта КАК КлючВарианта, | втВсеВарианты.Родитель КАК Родитель, @@ -8165,15 +8216,15 @@ | ВЫБОР | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Внутренний) | ИЛИ втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение) - | ТОГДА втВсеВарианты.Отчет.Имя + | ТОГДА втВсеВарианты.ОтчетСсылка.Имя | КОГДА втВсеВарианты.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) | ТОГДА """" - | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.Отчет КАК СТРОКА(150)), 14, 137) + | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(втВсеВарианты.ОтчетСсылка КАК СТРОКА(150)), 14, 137) | КОНЕЦ, | ЕСТЬNULL(втВсеВарианты.Наименование, """"), | втВсеВарианты.Описание, | втВсеВарианты.Автор, - | втВсеВарианты.Отчет, + | втВсеВарианты.ОтчетСсылка, | втВсеВарианты.ТипОтчета, | втВсеВарианты.КлючВарианта, | втВсеВарианты.Родитель, @@ -8237,8 +8288,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Определение используемых таблиц. +#КонецОбласти + +#Область ОпределениеИспользуемыхТаблиц // Регистрирует в массиве таблицы, используемые в наборах данных. Процедура ЗарегистрироватьТаблицыНаборовДанных(Таблицы, НаборыДанных) @@ -8292,8 +8344,9 @@ Возврат НСтр("ru = 'Отчет может содержать некорректные данные, так как не завершен переход на новую версию приложения. Если отчет долгое время недоступен, обратитесь к администратору.'"); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Подменю "Отчеты". +#КонецОбласти + +#Область ПодменюОтчеты // Вызывается из ПриОпределенииКомандПодключенныхКОбъекту. Процедура ПриДобавленииКомандОтчетов(Команды, СведенияОбОбъекте, НастройкиФормы) @@ -8314,8 +8367,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные для служебного программного интерфейса +#КонецОбласти + +#Область ВспомогательныеДляСлужебногоПрограммногоИнтерфейса // Обработчик определения доступности отчетов конфигурации и расширений. Процедура ПриОпределенииДоступностиОтчетов(СсылкиОтчетов, Результат) @@ -8414,8 +8468,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Отборы. +#КонецОбласти + +#Область Отборы // Устанавливает отборы по расширенной информации из структуры. Процедура ДополнитьОтборыИзСтруктуры(Отбор, Структура, РежимОтображения = Неопределено) Экспорт @@ -8453,6 +8508,8 @@ КонецЦикла; КонецПроцедуры +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Обмен настройками вариантов отчетов @@ -8808,7 +8865,7 @@ Если ЗначениеЗаполнено(ВариантОтчета.Ссылка) Тогда Объект = ВариантОтчета.Ссылка.ПолучитьОбъект(); - Объект.Настройки = Новый ХранилищеЗначения(ОписаниеВариантаОтчета.Настройки); + Объект.Настройки = Новый ХранилищеЗначения(ОписаниеВариантаОтчета.Настройки, Новый СжатиеДанных(9)); ПользователиВарианта = Новый СписокЗначений; РегистрыСведений.НастройкиВариантовОтчетов.ПрочитатьНастройкиДоступностиВариантаОтчета( Объект.Ссылка, ПользователиВарианта); @@ -8911,42 +8968,40 @@ ВариантОтчета = Новый Структура("Ссылка, КлючВариантаЗанят"); -#Область ЗапросПользовательскогоВариантаОтчета - Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | Отчеты.Ссылка, - | Отчеты.ПометкаУдаления + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.ПометкаУдаления |ИЗ - | Справочник.ВариантыОтчетов КАК Отчеты + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ТИПЗНАЧЕНИЯ(&Отчет) <> ТИП(Справочник.ИдентификаторыОбъектовРасширений) - | И Отчеты.Отчет = &Отчет - | И Отчеты.КлючВарианта = &КлючВарианта - | И Отчеты.Автор = &Автор - | И Отчеты.Пользовательский + | И ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта + | И ВариантыОтчетов.Автор = &Автор + | И ВариантыОтчетов.Пользовательский | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ ПЕРВЫЕ 1 - | Отчеты.Ссылка, - | Отчеты.ПометкаУдаления + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.ПометкаУдаления |ИЗ - | Справочник.ВариантыОтчетов КАК Отчеты + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ОтчетыРасширений - | ПО ОтчетыРасширений.Вариант = Отчеты.ПредопределенныйВариант - | И ОтчетыРасширений.Отчет = Отчеты.Отчет - | И ОтчетыРасширений.КлючВарианта = Отчеты.КлючВарианта + | ПО ОтчетыРасширений.Вариант = ВариантыОтчетов.ПредопределенныйВариант + | И ОтчетыРасширений.Отчет = ВариантыОтчетов.Отчет + | И ОтчетыРасширений.КлючВарианта = ВариантыОтчетов.КлючВарианта |ГДЕ | ТИПЗНАЧЕНИЯ(&Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) - | И Отчеты.Отчет = &Отчет - | И Отчеты.КлючВарианта = &КлючВарианта - | И Отчеты.Автор = &Автор - | И Отчеты.Пользовательский + | И ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта + | И ВариантыОтчетов.Автор = &Автор + | И ВариантыОтчетов.Пользовательский | И ОтчетыРасширений.ВерсияРасширений = &ВерсияРасширений | |УПОРЯДОЧИТЬ ПО - | Отчеты.ПометкаУдаления УБЫВ + | ВариантыОтчетов.ПометкаУдаления УБЫВ |; | |ВЫБРАТЬ @@ -8966,9 +9021,6 @@ Запрос.УстановитьПараметр("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); РезультатыЗапроса = Запрос.ВыполнитьПакет(); // Массив из РезультатЗапроса - -#КонецОбласти - Для Каждого Результат Из РезультатыЗапроса Цикл Выборка = Результат.Выбрать(); // ВыборкаИзРезультатаЗапроса @@ -9874,4 +9926,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 2dce7b2b4..41ad68ef6 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -600,7 +600,7 @@ КоличествоПомеченных = 0; Для Каждого СтрокаТаблицы Из Форма.ПользователиВарианта Цикл - Если СтрокаТаблицы.Значение = ВариантАвтор Тогда + Если СтрокаТаблицы.Значение = ВариантАвтор И ВариантАвтор <> Неопределено Тогда ПризнакАвтора = "[ЭтоАвторВариантаОтчета]"; Иначе ПризнакАвтора = ""; diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index a9155988f..ca46c613d 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -47,8 +47,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Настройки размещения отчетов +#Область НастройкиРазмещенияОтчетов // Определяет разделы командного интерфейса, в которых предусмотрены панели отчетов. // В Разделы необходимо добавить метаданные тех подсистем первого уровня, @@ -217,8 +216,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Настройки команд отчетов +#КонецОбласти + +#Область НастройкиКомандОтчетов // Определяет объекты конфигурации, в модулях менеджеров которых предусмотрена процедура ДобавитьКомандыОтчетов, // описывающая команды открытия контекстных отчетов. @@ -300,3 +300,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВариантыОтчетовСлужебный/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовСлужебный/Module.bsl index c2db1ff52..250cfef6d 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовСлужебный/Module.bsl @@ -2053,7 +2053,7 @@ ТипЭлементаРасшифровки = ВариантыОтчетовСлужебныйКлиентСервер.ТипЭлементаРасшифровкиГруппировка(); Иначе - ТипЭлементаРасшифровки = ТипРеквизит(); + ТипЭлементаРасшифровки = ВариантыОтчетовСлужебныйКлиентСервер.ТипРеквизит(); КонецЕсли; ДанныеЭлементаРасшифровки = Новый Структура; @@ -2259,12 +2259,6 @@ КонецФункции -Функция ТипРеквизит() - - Возврат "Реквизит"; - -КонецФункции - #КонецОбласти #Область ЗначениеЯчейки diff --git a/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиент/Module.bsl index a9d6eba6e..7104ee456 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиент/Module.bsl @@ -2373,7 +2373,7 @@ ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляВыбора, Поле); ВставитьПоле(Настройки, Настройки2, Поле, Действие, СвойстваЗаголовка, РолиПолей); - ИначеЕсли СтрНачинаетсяС(Действие, "ВставитьГруппировку") Тогда + ИначеЕсли СтрСравнить(Действие, "ВставитьГруппировкуВыше") = 0 Или СтрСравнить(Действие, "ВставитьГруппировкуНиже") = 0 Тогда ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляГруппировок, Поле); ВставитьГруппировку(Настройки, Действие, Поле, СвойстваЗаголовка); @@ -3252,6 +3252,12 @@ Процедура ОткрытьФормуОтчета(Форма, ПараметрыОткрытия) + Если ПараметрыОткрытия.Данные <> Неопределено + И ПараметрыОткрытия.Данные.Тип = ВариантыОтчетовСлужебныйКлиентСервер.ТипРеквизит() Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Действие недоступно. Нельзя расшифровывать детальные записи.'")); + Возврат; + КонецЕсли; + НастройкиОтчета = Форма.НастройкиОтчета; Расшифровка = ПараметрыОткрытия.Расшифровка; diff --git a/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиентСервер/Module.bsl index 55140ac5f..82ca3f703 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовСлужебныйКлиентСервер/Module.bsl @@ -350,6 +350,12 @@ КонецФункции +Функция ТипРеквизит() Экспорт + + Возврат "Реквизит"; + +КонецФункции + #КонецОбласти Функция ФормулаПоПутиКДанным(Настройки, ПутьКДанным) Экспорт diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index cb1d812e8..181ffe833 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -753,8 +753,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт @@ -1344,6 +1343,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -2273,8 +2274,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для получения отчета по объекту. +#Область ФункцииДляПолученияОтчетаПоОбъекту // Возвращает сериализованный объект в виде двоичных данных. // @@ -3645,3 +3645,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index b37351a98..3082946fc 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -550,8 +550,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Шаблоны сообщений. +#Область ШаблоныСообщений // Создает и отправляет электронное письмо. // @@ -730,15 +729,15 @@ Попытка РезультатОтправки = ВыполнитьОтправкуПисьма(Письмо); - ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP; - РезультатОтправкиПисьма.ОшибочныеПолучатели = РезультатОтправки.ОшибочныеПолучатели; - РезультатОтправкиПисьма.ИдентификаторПисьма = ИдентификаторПисьма; Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) Тогда + ВызватьИсключение; + КонецЕсли; + ШаблонТекстаСообщения = НСтр("ru = 'Не удалось отправить письмо по причине: |%1'"); - ТекстОшибки = РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки(ИнформацияОбОшибке, ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,, Письмо, @@ -746,8 +745,10 @@ РезультатОтправкиПисьма.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаСообщения, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Возврат РезультатОтправкиПисьма; - КонецПопытки; + ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP; + РезультатОтправкиПисьма.ОшибочныеПолучатели = РезультатОтправки.ОшибочныеПолучатели; + РезультатОтправкиПисьма.ИдентификаторПисьма = ИдентификаторПисьма; Если Не Письмо.УдалятьПослеОтправки Тогда @@ -947,8 +948,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных. Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт @@ -1404,6 +1406,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает поля для получения наименования владельца, если такой имеется. @@ -1426,8 +1430,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции отвечающие за поиск контактов. +#Область ВспомогательныеПроцедурыИФункцииОтвечающиеЗаПоискКонтактов // Возвращает список доступных видов поиска контактов. // @@ -1673,8 +1676,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Основные процедуры и функции поиска контактов. +#КонецОбласти + +#Область ОсновныеПроцедурыИФункцииПоискаКонтактов // Возвращает таблицу всех контактов, связанных с предметом взаимодействия. // @@ -1764,10 +1768,9 @@ СписокПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиОтвета", "Контакт"); СписокПоиска.Добавить("ЭлектронноеПисьмоИсходящее.ПолучателиСкрытыхКопий", "Контакт"); - // @query-part-1 ТекстВременнаяТаблица = ?(ПомещатьВоВременнуюТаблицу, "ПОМЕСТИТЬ ТаблицаКонтактов |", - ""); + ""); // @query-part-1 ШаблонУсловияНаСсылки = ШаблонУсловияНаСсылкиКонтактовДляЗапроса(); ТекстыЗапроса = Новый Массив; @@ -1956,11 +1959,10 @@ КонецЦикла; - // @query-part-1 ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО - | Наименование"; // @query-part-1 + | Наименование"; // @query-part-1, @query-part-2 Возврат ТекстЗапроса; @@ -2020,10 +2022,10 @@ КонецЦикла; - ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) // @query-part + ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО - | Наименование"; // @query-part + | Наименование"; // @query-part-1, @query-part-2 Если ИтогиПоEmail Тогда ТекстЗапроса = ТекстЗапроса + " |ИТОГИ ПО @@ -2196,11 +2198,10 @@ Возврат Неопределено; КонецЕсли; - // @query-part ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО | Ссылка, - | АдресЭП"; // @query-part + | АдресЭП"; // @query-part-1, @query-part-2 Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("СтрокаПоиска", "%@" + ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(ИмяДомена) + "%"); @@ -2329,11 +2330,10 @@ КонецЦикла; - // @query-part ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО - | Наименование"; // @query-part + | Наименование"; // @query-part-1, @query-part-2 Возврат ТекстЗапроса; @@ -2395,11 +2395,10 @@ КонецЦикла; - // @query-part ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО - | Наименование"; // @query-part + | Наименование"; // @query-part-1, @query-part-2 Возврат ТекстЗапроса; @@ -2445,8 +2444,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции получения данных контактов, взаимодействий и предметов взаимодействий. +#КонецОбласти + +#Область ПроцедурыИФункцииПолученияДанныхКонтактовВзаимодействийИПредметовВзаимодействий // Параметры: // Ссылка - ссылка на взаимодействие. @@ -2552,8 +2552,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с взаимодействиями. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСВзаимодействиями // Возвращаемое значение: // СписокЗначений - список значений, который содержит контакты, которые можно создать интерактивно. @@ -2920,7 +2921,6 @@ КонецЦикла; - // @query-part ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |; @@ -2946,7 +2946,7 @@ |ИТОГИ |ПО | Контакт - |"; // @query-part-1 + |"; // @query-part-1, @query-part-2 Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("МассивКонтактов", Контакты); @@ -3330,7 +3330,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронныеПодписиВладельца = МодульЭлектроннаяПодпись.УстановленныеПодписи(ВыборкаВложения.Ссылка); + ЭлектронныеПодписиВладельца = МодульЭлектроннаяПодпись.ПодписиОбъекта(ВыборкаВложения.Ссылка); НомерСтроки = 1; Для каждого ЭП Из ЭлектронныеПодписиВладельца Цикл ИмяФайла = ВыборкаВложения.ПолноеНаименование + "-DS("+ НомерСтроки + ")." + РасширениеДляФайловПодписи; @@ -3778,7 +3778,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ПодписиВложения = МодульЭлектроннаяПодпись.УстановленныеПодписи(ВыборкаВложения.Ссылка); + ПодписиВложения = МодульЭлектроннаяПодпись.ПодписиОбъекта(ВыборкаВложения.Ссылка); НомерСтроки = 1; Для Каждого ЭП Из ПодписиВложения Цикл Имя = ВыборкаВложения.ПолноеНаименование + "-DS("+ НомерСтроки + ")." + РасширениеДляФайловПодписи(); @@ -3870,6 +3870,8 @@ Возврат ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML"); КонецФункции +#КонецОбласти + #Область ОбработчикиОбновления Процедура ОтключитьПодсистемуВМоделиСервиса() Экспорт @@ -3887,8 +3889,7 @@ #КонецОбласти -////////////////////////////////////////////////////////////////////////////////// -// Работа с элементами и реквизитами форм списков и документов. +#Область РаботаСЭлементамиИРеквизитамиФормСписковИДокументов // Динамически формирует общие формы "Адресная книга" и "Подбор контактов" согласно возможным типам контактов. // @@ -4071,13 +4072,14 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, для которой выполняется инициализация реквизитов, содержит: // * Команды - КомандыФормы - содержат в том числе: -// ** ПредметСписок - КомандаФормы - изменяет предмет взаимодействий. -// ** Предмет - КомандаФормы - изменяет предмет взаимодействий. -// Параметры - Структура - параметры инициализации команд. +// ** ПредметСписок - КомандаФормы +// ** Предмет - КомандаФормы +// Параметры - Структура: +// * ТолькоПочта - Булево // Процедура ИнициализироватьФормуСпискаВзаимодействий(Форма, Параметры) Экспорт - Если Параметры.Свойство("ТолькоПочта") И Параметры.ТолькоПочта Тогда + Если Параметры.ТолькоПочта Тогда Форма.ТолькоПочта = Истина; Иначе Форма.ТолькоПочта = НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПрочиеВзаимодействия"); @@ -4127,8 +4129,9 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////// -// Работа с предметами взаимодействий. +#КонецОбласти + +#Область РаботаСПредметамиВзаимодействий // Параметры: // Ссылка - ДокументСсылка.ЭлектронноеПисьмоВходящее @@ -4147,8 +4150,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////// -// Формирование письма +#КонецОбласти + +#Область ФормированиеПисьма // Формирует текст HTML для входящего электронного письма. // @@ -5240,8 +5244,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////////// -// Работа с настройками +#КонецОбласти + +#Область РаботаСНастройками // Возвращает настройку текущего пользователя. // Если настройка не задана и передав параметр ЗначениеЕслиНеЗадана, @@ -6739,8 +6744,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Расчет состояний +#КонецОбласти + +#Область РасчетСостояний // Рассчитывает состояния предметов взаимодействий. // @@ -7398,8 +7404,9 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее // Параметры: // ПолеВводаФормы - ПолеФормы - элемент формы, к которому относится список выбора. @@ -8159,8 +8166,9 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// Шаблоны сообщений +#КонецОбласти + +#Область ШаблоныСообщений // Параметры: // Папка - СправочникСсылка.ПапкиЭлектронныхПисем - папка, имеет смысл для документов "Электронное письмо входящее" @@ -8214,8 +8222,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Определение типа ссылки +#КонецОбласти + +#Область ОпределениеТипаСсылки // Параметры: // ОбъектСсылка - ЛюбаяСсылка - для которой выполняется проверка. @@ -8493,11 +8502,10 @@ КонецЦикла; - // @query-part ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО - | Наименование"; // @query-part + | Наименование"; // @query-part-1, @query-part-2 Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Телефон", Телефон); @@ -8563,11 +8571,10 @@ КонецЦикла; - // @query-part ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + " |УПОРЯДОЧИТЬ ПО - | Наименование"; // @query-part + | Наименование"; // @query-part-1, @query-part-2 Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Наименование", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска) + "%"); @@ -8679,8 +8686,9 @@ КонецФункции -////////////////////////////////////////////////////////////////////////////////// -// Работа с элементами и реквизитами форм взаимодействий. +#КонецОбласти + +#Область РаботаСЭлементамиИРеквизитамиФормВзаимодействий // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, для которой устанавливается условное оформление. @@ -8963,8 +8971,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////////// -// Работа с объектом Документ HTML. +#КонецОбласти + +#Область РаботаСОбъектомДокументHTML // Получает массив дочерних узлов элемента HTML, содержащих HTML. // @@ -8993,3 +9002,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index 00db91ebf..abfbdbfbd 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -8,8 +8,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Основные процедуры и функции поиска контактов. +#Область ОсновныеПроцедурыИФункцииПоискаКонтактов // Параметры: // Контакт - ОпределяемыйТип.КонтактВзаимодействия - контакт для которого получается информация. @@ -254,8 +253,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее // Параметры: // МассивВзаимодействий - Массив - массив взаимодействий для которых будет установлен предмет. @@ -403,3 +403,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 1547a6742..a7934d4d0 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -504,8 +504,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Общие обработчики событий документов взаимодействий +#Область ОбщиеОбработчикиСобытийДокументовВзаимодействий // Открывает форму выбора контакта и обрабатывает результат выбора. // @@ -787,8 +786,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Определение типа ссылки +#КонецОбласти + +#Область ОпределениеТипаСсылки // Параметры: // ОбъектСсылка - ЛюбаяСсылка - для которой, необходимо выполнить проверку. @@ -804,3 +804,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index d54e31590..ac11f701e 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -113,8 +113,7 @@ Возврат "Таблица_"; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Определение типа ссылки +#Область ОпределениеТипаСсылки // Параметры: // ОбъектСсылка - ЛюбаяСсылка - для которой необходимо выполняется проверка. @@ -175,8 +174,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее // Параметры: // ИмяФайла - Строка - имя проверяемого файла. @@ -644,3 +644,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl b/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl index 7af0fd2bf..8554112e1 100644 --- a/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияЛокализация/Module.bsl @@ -6,7 +6,7 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Возможность преобразовать указанный пользователем телефонный номер, в формат, который принимает провайдер отправки SMS // @@ -44,7 +44,7 @@ // протоколу IMAP. // // Параметры: -// ИменаПапок - Массив Из Строка - массив имен игнорируемых папок. +// ИменаПапок - Массив из Строка - массив имен игнорируемых папок. // Процедура ПриОпределенииИгнорируемыхИменПапокПриЗагрузкеПисем(ИменаПапок) Экспорт @@ -63,8 +63,9 @@ // При отправке такого письма почтовый сервер мог указать в адресе отправителя другой домен. // // Параметры: -// СинонимыДоменовЭлектроннойПочты - Соответствие - где ключ имя, которое нужно заменить, -// а значение имя домена, на который нужно заменить. +// СинонимыДоменовЭлектроннойПочты - Соответствие из КлючИЗначение: +// * Ключ - имя, которое нужно заменить +// * Значение - имя домена, на который нужно заменить // Процедура ПриОпределенииСинонимовДоменовЭлектроннойПочты(СинонимыДоменовЭлектроннойПочты) Экспорт diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl index 86ef31620..94175d8e3 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВМоделиСервисаСлужебный/Module.bsl @@ -64,8 +64,8 @@ Процедура ОбновитьОбщуюКомпоненту(ОписаниеКомпоненты) Экспорт Если Не ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - ВызватьИсключение - НСтр("ru = 'Загрузка общих внешних компонент возможна только в неразделенном режиме модели сервиса.'"); + ВызватьИсключение(НСтр("ru = 'Загрузка общих внешних компонент недоступна.'"), + КатегорияОшибки.НарушениеПравДоступа); КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -76,14 +76,12 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Инициирована загрузка поставляемой обработки |%1'"), - ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( - ОписаниеКомпоненты.Идентификатор, + ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(ОписаниеКомпоненты.Идентификатор, ОписаниеКомпоненты.Версия))); НачатьТранзакцию(); Попытка - Ссылка = Справочники.ОбщиеВнешниеКомпоненты.НайтиПоИдентификатору( - ОписаниеКомпоненты.Идентификатор, + Ссылка = Справочники.ОбщиеВнешниеКомпоненты.НайтиПоИдентификатору(ОписаниеКомпоненты.Идентификатор, ОписаниеКомпоненты.Версия); Если Ссылка.Пустая() Тогда @@ -98,7 +96,7 @@ ОбщаяКомпонента.Заблокировать(); КонецЕсли; - ОбщаяКомпонента.Заполнить(Неопределено); // Конструктор по умолчанию. + ОбщаяКомпонента.Заполнить(Неопределено); ДвоичныеДанныеКомпоненты = Новый ДвоичныеДанные(ОписаниеКомпоненты.ПутьКФайлу); Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ДвоичныеДанныеКомпоненты, Ложь); @@ -144,9 +142,8 @@ // Параметры: // Результат - см. ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте -// Идентификатор - Строка - идентификатор объекта внешней компоненты. -// Версия - Строка -// - Неопределено - версия компоненты. +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. // Процедура ЗаполнитьИнформациюОКомпоненте(Результат, Версия, Идентификатор) Экспорт @@ -160,31 +157,33 @@ Результат.Состояние = "НайденаВОбщемХранилище"; Результат.Ссылка = СсылкаИзОбщегоХранилища; КонецЕсли; + Возврат; + КонецЕсли; + + Если СсылкаИзОбщегоХранилища.Пустая() Тогда + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Версия) Тогда + // Компонента одной и той же версии есть и в общем хранилище, и в хранилище области данных. + // Приоритет компоненте области данных. + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; + Возврат; + КонецЕсли; + + ВерсияХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзХранилища, "ДатаВерсии"); + ВерсияОбщегоХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзОбщегоХранилища, "ДатаВерсии"); + Если ВерсияОбщегоХранилища > ВерсияХранилища Тогда + Результат.Состояние = "НайденаВОбщемХранилище"; + Результат.Ссылка = СсылкаИзОбщегоХранилища; Иначе - Если СсылкаИзОбщегоХранилища.Пустая() Тогда - Результат.Состояние = "НайденаВХранилище"; - Результат.Ссылка = СсылкаИзХранилища; - Иначе - Если ЗначениеЗаполнено(Версия) Тогда - // Компонента одной и той же версии есть и в общем хранилище, и в хранилище области. - // Приоритет компоненте области. - Результат.Состояние = "НайденаВХранилище"; - Результат.Ссылка = СсылкаИзХранилища; - Иначе - ВерсияХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзХранилища, "ДатаВерсии"); - ВерсияОбщегоХранилища = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаИзОбщегоХранилища, "ДатаВерсии"); - - Если ВерсияОбщегоХранилища > ВерсияХранилища Тогда - Результат.Состояние = "НайденаВОбщемХранилище"; - Результат.Ссылка = СсылкаИзОбщегоХранилища; - Иначе - // Компонента есть и в общем хранилище, и в хранилище области, - // Приоритет компоненте области. - Результат.Состояние = "НайденаВХранилище"; - Результат.Ссылка = СсылкаИзХранилища; - КонецЕсли; - КонецЕсли; - КонецЕсли; + // Компонента есть и в общем хранилище, и в хранилище области, + // Приоритет компоненте области. + Результат.Состояние = "НайденаВХранилище"; + Результат.Ссылка = СсылкаИзХранилища; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl index fe5e9fd00..1d707e2e7 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыВызовСервера/Module.bsl @@ -8,7 +8,10 @@ #Область ПрограммныйИнтерфейс -// Информация о внешней компоненте по идентификатору и версии. +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ВнешниеКомпонентыСервер.ИнформацияОКомпоненте. +// Возвращает информацию о внешней компоненте по идентификатору и версии. // // Параметры: // Идентификатор - Строка - идентификатор объекта внешней компоненты. @@ -35,53 +38,12 @@ // ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ОписаниеОшибки); // КонецЕсли; // -Функция ИнформацияОКомпоненте(Идентификатор, Версия = Неопределено) Экспорт +Функция ИнформацияОКомпоненте(Знач Идентификатор, Знач Версия = Неопределено) Экспорт - Результат = РезультатИнформацияОКомпоненте(); - Результат.Идентификатор = Идентификатор; - - Информация = ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); - - Если Информация.Состояние = "НеНайдена" Тогда - Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента не существует'"); - Возврат Результат; - КонецЕсли; - - Если Информация.Состояние = "ОтключенаАдминистратором" Тогда - Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента отключена'"); - Возврат Результат; - КонецЕсли; - - Результат.Существует = Истина; - Результат.ДоступноРедактирование = Истина; - - Если Информация.Состояние = "НайденаВОбщемХранилище" Тогда - Результат.ДоступноРедактирование = Ложь; - КонецЕсли; - - Результат.Версия = Информация.Реквизиты.Версия; - Результат.Наименование = Информация.Реквизиты.Наименование; - - Возврат Результат; + Возврат ВнешниеКомпонентыСервер.ИнформацияОКомпоненте(Идентификатор, Версия); КонецФункции #КонецОбласти -#Область СлужебныеПроцедурыИФункции - -Функция РезультатИнформацияОКомпоненте() - - Результат = Новый Структура; - Результат.Вставить("Существует", Ложь); - Результат.Вставить("ДоступноРедактирование", Ложь); - Результат.Вставить("Идентификатор", ""); - Результат.Вставить("Версия", ""); - Результат.Вставить("Наименование", ""); - Результат.Вставить("ОписаниеОшибки", ""); - - Возврат Результат; - -КонецФункции - -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыКлиентЛокализация/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыКлиентЛокализация/Module.bsl index cc5bbc4a6..53b396a72 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыКлиентЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыКлиентЛокализация/Module.bsl @@ -6,18 +6,19 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс +// Вызывается для открытия формы поиска внешних компонент в Интернете. +// // Параметры: // Оповещение - ОписаниеОповещения // Контекст - Структура: // * ТекстПояснения - Строка // * Идентификатор - Строка // * Версия - Строка -// - Неопределено // * ОбновлятьАвтоматически - Булево // -Процедура ПоискКомпонентыНаПортале(Оповещение, Контекст) Экспорт +Процедура ПриПоискеКомпонентНаПортале(Оповещение, Контекст) Экспорт // Локализация ПараметрыФормы = Новый Структура; @@ -32,7 +33,13 @@ КонецПроцедуры -Процедура ОбновитьКомпонентыСПортала(Оповещение, ОбновляемыеКомпоненты) Экспорт +// Вызывается для открытия формы обновление внешних компонент через Интернет. +// +// Параметры: +// Оповещение - ОписаниеОповещения +// ОбновляемыеКомпоненты - Массив из СправочникСсылка.ВнешниеКомпоненты +// +Процедура ПриОбновленииКомпонентСПортала(Оповещение, ОбновляемыеКомпоненты) Экспорт // Локализация ПараметрыФормы = Новый Структура; diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl index 84c63cce3..55872819b 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСервер/Module.bsl @@ -29,7 +29,7 @@ Параметры = Новый Структура; Параметры.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив); - Параметры.Вставить("Изолированно", ОбщегоНазначения.ТипПодключенияКомпонентыПоУмолчанию()); + Параметры.Вставить("Изолированно"); Параметры.Вставить("ПолноеИмяМакета"); Возврат Параметры; @@ -58,7 +58,7 @@ Функция ПодключитьКомпоненту(Знач Идентификатор, Версия = Неопределено, ПараметрыПодключения = Неопределено) Экспорт Если ПараметрыПодключения = Неопределено Тогда - Изолированно = ОбщегоНазначения.ТипПодключенияКомпонентыПоУмолчанию(); + Изолированно = Неопределено; Иначе Изолированно = ПараметрыПодключения.Изолированно; КонецЕсли; @@ -78,45 +78,104 @@ КонецФункции +// Возвращает информацию о внешней компоненте по идентификатору и версии. +// +// Параметры: +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// +// Возвращаемое значение: +// Структура: +// * Существует - Булево - признак отсутствия компоненты. +// * ДоступноРедактирование - Булево - признак того, что компоненту может изменить администратор области. +// * ОписаниеОшибки - Строка - краткое описание ошибки. +// * Идентификатор - Строка - идентификатор объекта внешней компоненты. +// * Версия - Строка - версия компоненты. +// * Наименование - Строка - наименование и краткая информация о компоненте. +// +// Пример: +// +// Результат = ВнешниеКомпонентыСервер.ИнформацияОКомпоненте("InputDevice", "8.1.7.10"); +// Если Результат.Существует Тогда +// Идентификатор = Результат.Идентификатор; +// Версия = Результат.Версия; +// Наименование = Результат.Наименование; +// Иначе +// ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ОписаниеОшибки); +// КонецЕсли; +// +Функция ИнформацияОКомпоненте(Знач Идентификатор, Знач Версия = Неопределено) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Существует", Ложь); + Результат.Вставить("ДоступноРедактирование", Ложь); + Результат.Вставить("Идентификатор", Идентификатор); + Результат.Вставить("Версия", ""); + Результат.Вставить("Наименование", ""); + Результат.Вставить("ОписаниеОшибки", ""); + + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия); + + Если Информация.Состояние = "НеНайдена" Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента не существует'"); + Возврат Результат; + КонецЕсли; + + Если Информация.Состояние = "ОтключенаАдминистратором" Тогда + Результат.ОписаниеОшибки = НСтр("ru = 'Внешняя компонента отключена'"); + Возврат Результат; + КонецЕсли; + + Результат.Существует = Истина; + Результат.ДоступноРедактирование = Истина; + + Если Информация.Состояние = "НайденаВОбщемХранилище" Тогда + Результат.ДоступноРедактирование = Ложь; + КонецЕсли; + + Результат.Версия = Информация.Реквизиты.Версия; + Результат.Наименование = Информация.Реквизиты.Наименование; + + Возврат Результат; + +КонецФункции + #Область ДляВызоваИзДругихПодсистем // ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент -// Возвращает таблицу описаний внешних компонент +// Возвращает таблицу описаний внешних компонент. // // Параметры: // Вариант - Строка - может принимать значения: -// "ДляОбновления" - компоненты только из справочника с установленным признаком ОбновлятьСПортала1СИТС. +// "ДляОбновления" - компоненты с установленным признаком обновления из Интернета. // "ДляЗагрузки" - компоненты, используемые в конфигурации. // "Поставляемые" - для определения поставляемых компонент в модели сервиса. // // Возвращаемое значение: // - ТаблицаЗначений: -// * Идентификатор - Строка - содержит уникальный идентификатор внешней -// компоненты, который указывается пользователем в базе публикаций; -// * Версия - Строка - содержит версию внешней компоненты; -// * Наименование - Строка - содержит наименование компоненты; -// * ДатаВерсии - Дата - содержит дату версии (сборки) внешней компоненты. -// * ОбновлятьАвтоматически - Булево - признак автоматического обновления внешней компоненты. -// - Массив - идентификаторы поставляемых компонент, если Вариант = "Поставляемые" +// * Идентификатор - Строка - уникальный идентификатор внешней компоненты, +// который указан в базе публикаций. +// * Версия - Строка - версия внешней компоненты. +// * Наименование - Строка - наименование компоненты. +// * ДатаВерсии - Дата - дата версии (сборки) внешней компоненты. +// * ОбновлятьАвтоматически - Булево - признак автоматического обновления внешней компоненты. +// - Массив из Строка - идентификаторы поставляемых компонент, если Вариант = "Поставляемые". // Функция ИспользуемыеКомпоненты(Вариант) Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"), - "ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + ВызватьИсключение НСтр("ru = 'Действие недоступно.'"); КонецЕсли; Если Вариант = "Поставляемые" Тогда Возврат ВнешниеКомпонентыСлужебный.ПоставляемыеКомпоненты(); КонецЕсли; - ДанныеВнешнихКомпонент = ВнешниеКомпонентыСлужебный.ДанныеВнешнихКомпонент(Вариант); - МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + ДанныеВнешнихКомпонент = ВнешниеКомпонентыСлужебный.ДанныеВнешнихКомпонент(Вариант); Для Каждого ОписаниеКомпоненты Из ДанныеВнешнихКомпонент Цикл НоваяСтрока = ОписаниеВнешнихКомпонент.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ОписаниеКомпоненты); @@ -129,193 +188,185 @@ // Выполняет обновление внешних компонент. // // Параметры: -// ДанныеВнешнихКомпонент - ТаблицаЗначений - сведения об обновляемых компонентах: -// * Идентификатор - Строка - идентификатор. -// * Версия - Строка - версия. -// * ДатаВерсии - Строка - дата версии. -// * Наименование - Строка - наименование. -// * ИмяФайла - Строка - имя файла. -// * АдресФайла - Строка - адрес файла. -// * КодОшибки - Строка - код ошибки. -// АдресРезультата - Строка - адрес временного хранилища. -// Если указан, в него будет помещено описание результата операции. +// ДанныеВнешнихКомпонент - ТаблицаЗначений: +// * Идентификатор - Строка +// * Версия - Строка +// * ДатаВерсии - Строка +// * Наименование - Строка +// * ИмяФайла - Строка +// * АдресФайла - Строка +// * КодОшибки - Строка +// АдресРезультата - Строка - адрес временного хранилища. Если указан, в него будет помещен результат операции. // Структура: -// # Результат - Булево - Ложь, если есть ошибки +// # Результат - Булево - Ложь, если есть ошибки. // # Ошибки - Соответствие: -// ## Ключ - Строка - Идентификатор -// ## Значение - Строка - СообщениеОбОшибке +// ## Ключ - Строка - идентификатор внешней компоненты. +// ## Значение - Строка - текст сообщения. // # Успех - Соответствие: -// ## Ключ - Строка - Идентификатор -// ## Значение - Строка - СообщениеОбОшибке +// ## Ключ - Строка - идентификатор внешней компоненты. +// ## Значение - Строка - текст сообщения. // Процедура ОбновитьВнешниеКомпоненты(ДанныеВнешнихКомпонент, АдресРезультата = Неопределено) Экспорт + Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + ВызватьИсключение НСтр("ru = 'Действие недоступно.'"); + КонецЕсли; + РезультатВыполнения = Новый Структура; РезультатВыполнения.Вставить("Результат", Ложь); РезультатВыполнения.Вставить("Ошибки", Новый Соответствие); РезультатВыполнения.Вставить("Успех", Новый Соответствие); - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеКомпоненты.Ссылка КАК Ссылка, + | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, + | ВнешниеКомпоненты.Версия КАК Версия, + | ВнешниеКомпоненты.ДатаВерсии КАК ДатаВерсии + |ИЗ + | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты + |ГДЕ + | ВнешниеКомпоненты.Идентификатор В(&Идентификаторы)"; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВнешниеКомпоненты.Ссылка КАК Ссылка, - | ВнешниеКомпоненты.Идентификатор КАК Идентификатор, - | ВнешниеКомпоненты.Версия КАК Версия, - | ВнешниеКомпоненты.ДатаВерсии КАК ДатаВерсии - |ИЗ - | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты - |ГДЕ - | ВнешниеКомпоненты.Идентификатор В(&Идентификаторы)"; + Запрос.УстановитьПараметр("Идентификаторы", ДанныеВнешнихКомпонент.ВыгрузитьКолонку("Идентификатор")); + Выборка = Запрос.Выполнить().Выбрать(); + + ИспользуемыеВнешниеКомпоненты = Неопределено; + Для каждого СтрокаРезультата Из ДанныеВнешнихКомпонент Цикл - Запрос.УстановитьПараметр("Идентификаторы", ДанныеВнешнихКомпонент.ВыгрузитьКолонку("Идентификатор")); + ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( + СтрокаРезультата.Идентификатор, СтрокаРезультата.Версия); - РезультатЗапроса = Запрос.Выполнить(); - Выборка = РезультатЗапроса.Выбрать(); + КодОшибки = СтрокаРезультата.КодОшибки; - ИспользуемыеВнешниеКомпоненты = Неопределено; - - // Обход результата запроса. - Для каждого СтрокаРезультата Из ДанныеВнешнихКомпонент Цикл + Если ЗначениеЗаполнено(КодОшибки) Тогда - ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( - СтрокаРезультата.Идентификатор, СтрокаРезультата.Версия); - - КодОшибки = СтрокаРезультата.КодОшибки; - - Если ЗначениеЗаполнено(КодОшибки) Тогда - - Если КодОшибки = "АктуальнаяВерсия" Тогда - РезультатВыполнения.Успех.Вставить(СтрокаРезультата.Идентификатор, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - актуальная версия.'"), ПредставлениеКомпоненты)); - Продолжить; - КонецЕсли; - - ИнформацияОбОшибке = ""; - Если КодОшибки = "ОтсутствуетКомпонента" Тогда - ИнформацияОбОшибке = НСтр("ru = 'В сервисе отсутствует данная внешняя компонента'"); - ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда - ИнформацияОбОшибке = НСтр("ru = 'Файл внешней компоненты не загружен из сервиса'"); - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось загрузить внешнюю компоненту %1 из сервиса: - |%2'"), - ПредставлениеКомпоненты, ИнформацияОбОшибке); - - РезультатВыполнения.Ошибки.Вставить(СтрокаРезультата.Идентификатор, ТекстОшибки); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); - + Если КодОшибки = "АктуальнаяВерсия" Тогда + РезультатВыполнения.Успех.Вставить(СтрокаРезультата.Идентификатор, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - актуальная версия.'"), ПредставлениеКомпоненты)); Продолжить; КонецЕсли; - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаРезультата.АдресФайла); - Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь); - - Если Не Информация.Разобрано Тогда - - РезультатВыполнения.Ошибки.Вставить(СтрокаРезультата.Идентификатор, ПредставлениеКомпоненты + " - " - + Информация.ОписаниеОшибки + ?(Информация.ИнформацияОбОшибке = Неопределено, "", ": " - + ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация.ИнформацияОбОшибке))); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , - Информация.ОписаниеОшибки); - Продолжить; + ИнформацияОбОшибке = ""; + Если КодОшибки = "ОтсутствуетКомпонента" Тогда + ИнформацияОбОшибке = НСтр("ru = 'В сервисе отсутствует данная внешняя компонента.'"); + ИначеЕсли КодОшибки = "ФайлНеЗагружен" Тогда + ИнформацияОбОшибке = НСтр("ru = 'Файл внешней компоненты не загружен из сервиса.'"); КонецЕсли; - // Поиск ссылки. - Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); - Выборка.Сбросить(); - Если Выборка.НайтиСледующий(Отбор) Тогда - // Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять. - Если Выборка.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда - ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( - СтрокаРезультата.Идентификатор, Выборка.Версия); - - РезультатВыполнения.Успех.Вставить(СтрокаРезультата.Идентификатор, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - в приложении более новая версия, чем в сервисе (%2 от %3).'"), - ПредставлениеКомпоненты, СтрокаРезультата.Версия, Формат(СтрокаРезультата.ДатаВерсии, "ДЛФ=Д"))); - Продолжить; - КонецЕсли; - - СсылкаНаОбъект = Выборка.Ссылка; - Иначе - СсылкаНаОбъект = Неопределено; - Если ИспользуемыеВнешниеКомпоненты = Неопределено Тогда - ИспользуемыеВнешниеКомпоненты = ВнешниеКомпонентыСлужебный.ИспользуемыеВнешниеКомпоненты(); - КонецЕсли; - СтрокаКомпоненты = ИспользуемыеВнешниеКомпоненты.Найти(СтрокаРезультата.Идентификатор, "Идентификатор"); - Если СтрокаКомпоненты <> Неопределено Тогда - ОбновлятьАвтоматически = СтрокаКомпоненты.ОбновлятьАвтоматически; - Иначе - ОбновлятьАвтоматически = Ложь; - КонецЕсли; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеКомпоненты"); - Если СсылкаНаОбъект <> Неопределено Тогда - ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаОбъект); - КонецЕсли; - Блокировка.Заблокировать(); - - Если СсылкаНаОбъект <> Неопределено Тогда - Объект = СсылкаНаОбъект.ПолучитьОбъект(); - Объект.Заблокировать(); - Иначе - Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); - Объект.ОбновлятьСПортала1СИТС = ОбновлятьАвтоматически; - Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. - - Объект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Информация.Реквизиты.ЦелевыеПлатформы); - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), - ТекущаяДатаСеанса()); - - Объект.Записать(); - - РезультатВыполнения.Успех.Вставить(СтрокаРезультата.Идентификатор, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - успешно обновлена.'"), ПредставлениеКомпоненты)); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - РезультатВыполнения.Ошибки.Вставить(СтрокаРезультата.Идентификатор, ПредставлениеКомпоненты - + " - " + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось загрузить внешнюю компоненту %1 из сервиса: + |%2'"), + ПредставлениеКомпоненты, ИнформацияОбОшибке); - КонецЦикла; + РезультатВыполнения.Ошибки.Вставить(СтрокаРезультата.Идентификатор, ТекстОшибки); - РезультатВыполнения.Результат = РезультатВыполнения.Ошибки.Количество() = 0; - - Если ЗначениеЗаполнено(АдресРезультата) Тогда - ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресРезультата); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + + Продолжить; КонецЕсли; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"), - "ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаРезультата.АдресФайла); + Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь); + + Если Не Информация.Разобрано Тогда + + РезультатВыполнения.Ошибки.Вставить(СтрокаРезультата.Идентификатор, ПредставлениеКомпоненты + " - " + + Информация.ОписаниеОшибки + ?(Информация.ИнформацияОбОшибке = Неопределено, "", ": " + + ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация.ИнформацияОбОшибке))); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , + Информация.ОписаниеОшибки); + Продолжить; + КонецЕсли; + + // Поиск ссылки. + Отбор = Новый Структура("Идентификатор", СтрокаРезультата.Идентификатор); + Выборка.Сбросить(); + Если Выборка.НайтиСледующий(Отбор) Тогда + // Когда уже загружена компонента по дате более свежая, чем на Портале 1С:ИТС, обновление не следует выполнять. + Если Выборка.ДатаВерсии > СтрокаРезультата.ДатаВерсии Тогда + ПредставлениеКомпоненты = ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты( + СтрокаРезультата.Идентификатор, Выборка.Версия); + + РезультатВыполнения.Успех.Вставить(СтрокаРезультата.Идентификатор, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - в приложении более новая версия, чем в сервисе (%2 от %3).'"), + ПредставлениеКомпоненты, СтрокаРезультата.Версия, Формат(СтрокаРезультата.ДатаВерсии, "ДЛФ=Д"))); + Продолжить; + КонецЕсли; + + СсылкаНаОбъект = Выборка.Ссылка; + Иначе + СсылкаНаОбъект = Неопределено; + Если ИспользуемыеВнешниеКомпоненты = Неопределено Тогда + ИспользуемыеВнешниеКомпоненты = ВнешниеКомпонентыСлужебный.ИспользуемыеВнешниеКомпоненты(); + КонецЕсли; + СтрокаКомпоненты = ИспользуемыеВнешниеКомпоненты.Найти(СтрокаРезультата.Идентификатор, "Идентификатор"); + Если СтрокаКомпоненты <> Неопределено Тогда + ОбновлятьАвтоматически = СтрокаКомпоненты.ОбновлятьАвтоматически; + Иначе + ОбновлятьАвтоматически = Ложь; + КонецЕсли; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеКомпоненты"); + Если СсылкаНаОбъект <> Неопределено Тогда + ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаОбъект); + КонецЕсли; + Блокировка.Заблокировать(); + + Если СсылкаНаОбъект <> Неопределено Тогда + Объект = СсылкаНаОбъект.ПолучитьОбъект(); + Объект.Заблокировать(); + Иначе + Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); + Объект.ОбновлятьСПортала1СИТС = ОбновлятьАвтоматически; + Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + + Объект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Информация.Реквизиты.ЦелевыеПлатформы, Новый СжатиеДанных(9)); + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), + ТекущаяДатаСеанса()); + + Объект.Записать(); + + РезультатВыполнения.Успех.Вставить(СтрокаРезультата.Идентификатор, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - успешно обновлена.'"), ПредставлениеКомпоненты)); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + РезультатВыполнения.Ошибки.Вставить(СтрокаРезультата.Идентификатор, ПредставлениеКомпоненты + + " - " + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЦикла; + + РезультатВыполнения.Результат = РезультатВыполнения.Ошибки.Количество() = 0; + + Если ЗначениеЗаполнено(АдресРезультата) Тогда + ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресРезультата); КонецЕсли; КонецПроцедуры @@ -371,16 +422,13 @@ Функция АвтоматическиОбновляемыеКомпоненты() Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"), - "ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + ВызватьИсключение НСтр("ru = 'Действие недоступно.'"); КонецЕсли; МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); ДанныеВнешнихКомпонент = ВнешниеКомпонентыСлужебный.ДанныеВнешнихКомпонент("ДляОбновления"); - Для Каждого ОписаниеКомпоненты Из ДанныеВнешнихКомпонент Цикл НоваяСтрока = ОписаниеВнешнихКомпонент.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ОписаниеКомпоненты); @@ -390,9 +438,9 @@ КонецФункции -#КонецОбласти - // Конец ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент #КонецОбласти +#КонецОбласти + diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl index b399e3088..ddf4acdcf 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебный/Module.bsl @@ -25,9 +25,11 @@ Функция ПредставлениеКомпоненты(Идентификатор, Версия) Экспорт Если ЗначениеЗаполнено(Версия) Тогда - ПредставлениеКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (версии %2)'"), Идентификатор, Версия); + ПредставлениеКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (версии %2)'"), Идентификатор, Версия); Иначе - ПредставлениеКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (последней версии)'"), Идентификатор); + ПредставлениеКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (последней версии)'"), Идентификатор); КонецЕсли; Возврат ПредставлениеКомпоненты; @@ -37,7 +39,7 @@ // Проверят доступна ли загрузка внешних компонент с портала. // // Возвращаемое значение: -// Булево - признак доступности. +// Булево // Функция ДоступнаЗагрузкаСПортала() Экспорт @@ -207,11 +209,15 @@ И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()) Тогда Если Не СтрНачинаетсяС(Местоположение, "e1cib/data/Справочник.ВнешниеКомпоненты.ХранилищеКомпоненты") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось подключить компоненту ""%1"" по причине: - |Доступ запрещен. Обратитесь к администратору сервиса, чтобы разместить внешнюю компоненту в справочник ""Общие внешние компоненты"".'"), Идентификатор); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить компоненту ""%1"" по причине: + |Доступ запрещен. Обратитесь к администратору сервиса, чтобы разместить внешнюю компоненту в справочник ""Общие внешние компоненты"".'"), + Идентификатор); Иначе - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось подключить компоненту ""%1"" по причине: - |Доступ запрещен.'"), Идентификатор); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить компоненту ""%1"" по причине: + |Доступ запрещен.'"), + Идентификатор); КонецЕсли; ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -221,8 +227,10 @@ Возврат; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось подключить компоненту ""%1"" по причине: - |Недопустимое местоположение компоненты ""%2"".'"), Идентификатор, Местоположение); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить компоненту ""%1"" по причине: + |Недопустимое местоположение компоненты ""%2"".'"), + Идентификатор, Местоположение); КонецПроцедуры @@ -247,10 +255,10 @@ // * Наименование - Строка // * Версия - Строка // * ИмяФайла - Строка -// * ОписаниеОшибки - Строка - информация о загрузке компоненты +// * ОписаниеОшибки - Строка - информация о загрузке компоненты. // * ОбновлятьСПортала1СИТС - Булево -// * Данные - Строка - адрес двоичных данных во временном хранилище -// - ДвоичныеДанные +// * Данные - Строка - адрес двоичных данных во временном хранилище. +// - ДвоичныеДанные // Функция ПараметрыЗагрузки() Экспорт @@ -272,33 +280,32 @@ // Параметры: // Параметры - см. ПараметрыЗагрузки // ВыполнятьРазборИнфоФайла - Булево - требуется ли дополнительно анализировать -// данные файла INFO.XML, если он есть +// данные файла INFO.XML, если он есть. // ИспользуемыеВнешниеКомпоненты - см. ИспользуемыеВнешниеКомпоненты // -Процедура ЗагрузитьКомпонентуИзДвоичныхДанных(Параметры, ВыполнятьРазборИнфоФайла = Истина, ИспользуемыеВнешниеКомпоненты = Неопределено) Экспорт +Процедура ЗагрузитьКомпонентуИзДвоичныхДанных(Параметры, ВыполнятьРазборИнфоФайла = Истина, + ИспользуемыеВнешниеКомпоненты = Неопределено) Экспорт Если ТипЗнч(Параметры.Данные) = Тип("Строка") Тогда - Если ПустаяСтрока(Параметры.Данные) Тогда - ТекстИсключения = НСтр("ru = 'Не заполнены данные.'"); - ВызватьИсключение ТекстИсключения; - Иначе - Если ЭтоАдресВременногоХранилища(Параметры.Данные) Тогда - ДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.Данные); - Иначе - ВызватьИсключение НСтр("ru = 'Адрес данных не является адресом временного хранилища.'"); - КонецЕсли; + Если ПустаяСтрока(Параметры.Данные) Или Не ЭтоАдресВременногоХранилища(Параметры.Данные) Тогда + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не указан адрес временного хранилища в параметре %1 при вызове %2.'"), + "Параметры.Данные", "ЗагрузитьКомпонентуИзДвоичныхДанных"); + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; + ДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.Данные); Иначе ДвоичныеДанные = Параметры.Данные; КонецЕсли; Если ТипЗнч(ДвоичныеДанные) <> Тип("ДвоичныеДанные") Тогда - ТекстИсключения = НСтр("ru = 'Данные файла не являются двоичными данными.'"); - ВызватьИсключение ТекстИсключения; + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Данные во временном хранилище в параметре %1 не являются двоичными данными при вызове %2.'"), + "Параметры.Данные", "ЗагрузитьКомпонентуИзДвоичныхДанных"); + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Информация = ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, ВыполнятьРазборИнфоФайла); - Если Не Информация.Разобрано Тогда ТекстИсключения = Информация.ОписаниеОшибки + ?(Информация.ИнформацияОбОшибке = Неопределено, "", @@ -310,9 +317,8 @@ КонецЕсли; Идентификатор = ?(ЗначениеЗаполнено(Параметры.Идентификатор), Параметры.Идентификатор, Информация.Реквизиты.Идентификатор); - Если Не ЗначениеЗаполнено(Идентификатор) Тогда - ТекстИсключения = НСтр("ru = 'Не указан идентификатор, необходимо ввести его вручную.'"); + ТекстИсключения = НСтр("ru = 'Не указан идентификатор компоненты, необходимо ввести его вручную.'"); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -324,7 +330,6 @@ Блокировка.Заблокировать(); Компонента = Справочники.ВнешниеКомпоненты.НайтиПоИдентификатору(Идентификатор); - Если ЗначениеЗаполнено(Компонента) Тогда Объект = Компонента.ПолучитьОбъект(); Попытка @@ -339,21 +344,21 @@ КонецЕсли; Иначе Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); - // Создание экземпляра компоненты. - Объект.Заполнить(Неопределено); // Конструктор по умолчанию. + Объект.Заполнить(Неопределено); КонецЕсли; - // По данным манифеста. + // По данным манифеста. ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты, , "Наименование, Версия, ИмяФайла"); Объект.Идентификатор = Идентификатор; // Если в параметрах Наименование, Версия, ИмяФайла не заполнены, берем из информации. - Объект.Наименование = ?(ЗначениеЗаполнено(Параметры.Наименование), Параметры.Наименование, Информация.Реквизиты.Наименование); + Объект.Наименование = ?(ЗначениеЗаполнено(Параметры.Наименование), Параметры.Наименование, + Информация.Реквизиты.Наименование); Объект.Версия = ?(ЗначениеЗаполнено(Параметры.Версия), Параметры.Версия, Информация.Реквизиты.Версия); Объект.ИмяФайла = ?(ЗначениеЗаполнено(Параметры.ИмяФайла), Параметры.ИмяФайла, Информация.Реквизиты.ИмяФайла); Объект.ОписаниеОшибки = Параметры.ОписаниеОшибки; Объект.ОбновлятьСПортала1СИТС = Параметры.ОбновлятьСПортала1СИТС; - Объект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Информация.Реквизиты.ЦелевыеПлатформы); + Объект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Информация.Реквизиты.ЦелевыеПлатформы, Новый СжатиеДанных(9)); Если ИспользуемыеВнешниеКомпоненты <> Неопределено Тогда СтрокаКомпоненты = ИспользуемыеВнешниеКомпоненты.Найти(Идентификатор, "Идентификатор"); @@ -363,7 +368,6 @@ КонецЕсли; Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - Объект.Записать(); ЗафиксироватьТранзакцию(); @@ -397,8 +401,7 @@ КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхГлавному. -Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, - Получатель) Экспорт +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; @@ -407,8 +410,7 @@ КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному. -Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, - СозданиеНачальногоОбраза, Получатель) Экспорт +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; @@ -417,8 +419,7 @@ КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного. -Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, - ОтправкаНазад, Отправитель) Экспорт +Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; @@ -427,8 +428,7 @@ КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного. -Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, - ОтправкаНазад, Отправитель) Экспорт +Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеКомпоненты") Тогда ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; @@ -441,16 +441,13 @@ Оповещение = СерверныеОповещения.НовоеСерверноеОповещение( "СтандартныеПодсистемы.ВнешниеКомпоненты"); - Оповещение.ИмяМодуляОтправки = "ВнешниеКомпонентыСлужебный"; Оповещение.ИмяМодуляПолучения = "ВнешниеКомпонентыСлужебныйКлиент"; - Оповещения.Вставить(Оповещение.Имя, Оповещение); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистемы ТекущиеДела. +#Область ОбработчикиСобытийПодсистемыТекущиеДела // Параметры: // ТекущиеДела - см. ТекущиеДелаСервер.ТекущиеДела. @@ -481,6 +478,8 @@ #КонецОбласти +#КонецОбласти + // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -501,7 +500,7 @@ #Область СлужебныеПроцедурыИФункции -// Внешние компоненты, используемые в конфигурации. +// Возвращает внешние компоненты, используемые в конфигурации. // // Возвращаемое значение: // ТаблицаЗначений: @@ -515,18 +514,18 @@ ИспользуемыеВнешниеКомпоненты.Колонки.Добавить("ОбновлятьАвтоматически", Новый ОписаниеТипов("Булево")); ИнтеграцияПодсистемБСП.ПриОпределенииИспользуемыхВнешнихКомпонент(ИспользуемыеВнешниеКомпоненты); - Возврат ИспользуемыеВнешниеКомпоненты; КонецФункции -// Проверят доступна ли интерактивная загрузка внешних компонент с портала. +// Проверят, доступна ли интерактивная загрузка внешних компонент с портала. // // Возвращаемое значение: -// Булево - признак доступности. +// Булево // Функция ДоступнаИнтерактивнаяЗагрузкаСПортала() Экспорт + // ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") И ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда МодульИнтернетПоддержкаПользователейКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиентСервер"); @@ -536,16 +535,17 @@ Возврат МодульПолучениеВнешнихКомпонент.ДоступнаЗагрузкаВнешнихКомпонент(); КонецЕсли; КонецЕсли; + // Конец ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент Возврат Ложь; КонецФункции -// Возвращает таблицу описаний внешних компонент +// Возвращает таблицу описаний внешних компонент. // // Параметры: // Вариант - Строка - может принимать значения: -// "ДляОбновления" - компоненты только из справочника с установленным признаком ОбновлятьСПортала1СИТС. +// "ДляОбновления" - компоненты только из справочника с установленным признаком загрузки из Интернета. // "ДляЗагрузки" - компоненты, используемые в конфигурации. // // Возвращаемое значение: @@ -600,14 +600,11 @@ Запрос.УстановитьПараметр("ИспользуемыеВнешниеКомпоненты", ИспользуемыеВнешниеКомпоненты()); Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный параметр ""%1"" в ""%2"".'"), Вариант, - "ВнешниеКомпонентыСлужебный.ДанныеВнешнихКомпонент"); + НСтр("ru = 'Недопустимое значение параметра %1 (%2) при вызове %3.'"), + "Вариант", Вариант, "ВнешниеКомпонентыСлужебный.ДанныеВнешнихКомпонент"); КонецЕсли; - РезультатЗапроса = Запрос.Выполнить(); - ОписаниеВнешнихКомпонент = РезультатЗапроса.Выгрузить(); - - Возврат ОписаниеВнешнихКомпонент; + Возврат Запрос.Выполнить().Выгрузить(); КонецФункции @@ -655,8 +652,6 @@ Функция КоличествоНеиспользуемыхКомпонент() - КоличествоНеиспользуемыхКомпонент = 0; - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -670,11 +665,11 @@ Запрос.УстановитьПараметр("Идентификаторы", ПоставляемыеКомпоненты()); Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл + Если Выборка.Следующий() Тогда Возврат Выборка.КоличествоНеиспользуемыхКомпонент; - КонецЦикла; + КонецЕсли; - Возврат КоличествоНеиспользуемыхКомпонент; + Возврат 0; КонецФункции @@ -695,7 +690,6 @@ ИмяПараметра = "СтандартныеПодсистемы.ВнешниеКомпоненты.Версии"; СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина); НовоеЗначение = ХешСуммаВерсийВнешнихКомпонент(); - Если СтароеЗначение = НовоеЗначение Тогда Возврат; КонецЕсли; @@ -747,9 +741,8 @@ Версии = СтрСоединить(СписокВерсий.ВыгрузитьЗначения(), Символы.ПС); Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); Хеширование.Добавить(Версии); - СтрокаХешСуммы = Base64Строка(Хеширование.ХешСумма); - Возврат СтрокаХешСуммы; + Возврат Base64Строка(Хеширование.ХешСумма); КонецФункции @@ -762,8 +755,7 @@ Процедура ДобавитьВерсииКомпонент(СписокВерсий, Выборка) Пока Выборка.Следующий() Цикл - СписокВерсий.Добавить(НРег(Выборка.Ссылка.УникальныйИдентификатор()) - + " " + Выборка.ВерсияДанных); + СписокВерсий.Добавить(НРег(Выборка.Ссылка.УникальныйИдентификатор()) + " " + Выборка.ВерсияДанных); КонецЦикла; КонецПроцедуры @@ -779,9 +771,8 @@ // Возвращаемое значение: // Строка - краткое описание ошибки. // -Функция ПроверитьПодключениеКомпоненты(Знач Идентификатор, - Знач Версия = Неопределено, - Знач ПараметрыПодключения = Неопределено) Экспорт +Функция ПроверитьПодключениеКомпоненты(Знач Идентификатор, Знач Версия = Неопределено, + Знач ПараметрыПодключения = Неопределено) Экспорт Если ПараметрыПодключения = Неопределено Тогда ПараметрыПодключения = ВнешниеКомпонентыСервер.ПараметрыПодключения(); @@ -790,9 +781,10 @@ Если ПустаяСтрока(Идентификатор) Тогда КомпонентаСодержитЕдинственныйКлассОбъектов = (ПараметрыПодключения.ИдентификаторыСозданияОбъектов.Количество() = 0); Если КомпонентаСодержитЕдинственныйКлассОбъектов Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимо одновременно не указывать %1 и %2 при подключении внешней компоненты.'"), "Идентификатор", "ИдентификаторыСозданияОбъектов"); + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Идентификатор = СтрСоединить(ПараметрыПодключения.ИдентификаторыСозданияОбъектов, ", "); КонецЕсли; @@ -803,15 +795,17 @@ Результат.Вставить("ОписаниеОшибки", ""); Результат.Вставить("Версия", ""); - Информация = ВнешниеКомпонентыСлужебныйВызовСервера.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия, ПараметрыПодключения.ПолноеИмяМакета); - Результат.Вставить("Версия", Версия); + Информация = ВнешниеКомпонентыСлужебныйВызовСервера.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия, + ПараметрыПодключения.ПолноеИмяМакета); + Результат.Вставить("Версия", Информация.Реквизиты.Версия); Если Информация.Состояние = "ОтключенаАдминистратором" Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Компонента отключена администратором.'"); Возврат Результат; ИначеЕсли Информация.Состояние = "НеНайдена" Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Компонента отсутствует в списке разрешенных внешних компонент.'"); Возврат Результат; - ИначеЕсли Информация.ЗаполненыЦелевыеПлатформы И Не ОперационнаяСистемаПоддерживаетсяКомпонентой(Информация.Реквизиты.ЦелевыеПлатформы) Тогда + ИначеЕсли Информация.ЗаполненыЦелевыеПлатформы + И Не ОперационнаяСистемаПоддерживаетсяКомпонентой(Информация.Реквизиты.ЦелевыеПлатформы) Тогда Результат.ОписаниеОшибки = ОписаниеОшибкиСовместимости(); Возврат Результат; КонецЕсли; @@ -827,7 +821,7 @@ СистемнаяИнформация = Новый СистемнаяИнформация; ИмяТипаПлатформы = ОбщегоНазначенияКлиентСервер.ИмяТипаПлатформы(СистемнаяИнформация.ТипПлатформы); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не предусмотрена работа компоненты в операционной системе %1'"), ИмяТипаПлатформы); + НСтр("ru = 'Не предусмотрена работа компоненты в операционной системе %1.'"), ИмяТипаПлатформы); КонецФункции @@ -845,12 +839,12 @@ Иначе МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница()); МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница()); - МенеджерОбъектаПоПолномуИмени = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрСоединить(МестоположениеМакетаРазделенное, ".")); + МенеджерОбъектаПоПолномуИмени = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( + СтрСоединить(МестоположениеМакетаРазделенное, ".")); ДвоичныеДанныеКомпоненты = МенеджерОбъектаПоПолномуИмени.ПолучитьМакет(ИмяМакета); КонецЕсли; ИнформацияОКомпонентеИзФайла = ИнформацияОКомпонентеИзФайла(ДвоичныеДанныеКомпоненты); - Если Не ИнформацияОКомпонентеИзФайла.Разобрано Тогда Возврат Неопределено; КонецЕсли; @@ -864,9 +858,7 @@ Функция ОперационнаяСистемаПоддерживаетсяКомпонентой(РеквизитыКомпоненты) СистемнаяИнформация = Новый СистемнаяИнформация; - ИмяТипаПлатформы = ОбщегоНазначенияКлиентСервер.ИмяТипаПлатформы(СистемнаяИнформация.ТипПлатформы); - Если ИмяТипаПлатформы = "Linux_x86" Тогда Возврат РеквизитыКомпоненты.Linux_x86; ИначеЕсли ИмяТипаПлатформы = "Linux_x86_64" Тогда @@ -914,12 +906,9 @@ КонецФункции // Параметры: -// Идентификатор - Строка - идентификатор объекта внешней компоненты. -// Версия - Строка -// - Неопределено - версия компоненты. -// ПутьКМакетуДляПоискаПоследнейВерсии -// - Неопределено -// - Строка +// Идентификатор - Строка - идентификатор объекта внешней компоненты. +// Версия - Строка - версия компоненты. +// ПутьКМакетуДляПоискаПоследнейВерсии - Строка // // Возвращаемое значение: // Структура: @@ -930,11 +919,10 @@ // * Ссылка - ЛюбаяСсылка // * Реквизиты - см. РеквизитыКомпоненты // * ЗаполненыЦелевыеПлатформы - Булево -// * ПоследняяВерсияКомпонентыИзМакета -// - см. СтандартныеПодсистемыПовтИсп.ПоследняяВерсияКомпонентыИзМакета -// - Неопределено +// * ПоследняяВерсияКомпонентыИзМакета - см. СтандартныеПодсистемыПовтИсп.ПоследняяВерсияКомпонентыИзМакета // -Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено, ПутьКМакетуДляПоискаПоследнейВерсии = Неопределено) Экспорт +Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено, + ПутьКМакетуДляПоискаПоследнейВерсии = Неопределено) Экспорт Результат = Новый Структура; Результат.Вставить("Ссылка"); @@ -987,7 +975,8 @@ ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не заполнена информация о совместимости компоненты %1.'"), Идентификатор); ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка совместимости компоненты'", - ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , Результат.Ссылка, ТекстПредупреждения); + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , Результат.Ссылка, + ТекстПредупреждения); РеквизитыОбъекта.ЦелевыеПлатформы = ЦелевыеПлатформы(); Иначе @@ -1123,223 +1112,241 @@ ЧтениеXML.ОткрытьФайл(ИмяФайлаManifestXML); ЧтениеXML.ПерейтиКСодержимому(); - Если ЧтениеXML.Имя = "bundle" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.Имя = "component" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - - ОперационнаяСистема = НРег(ЧтениеXML.ЗначениеАтрибута("os")); - ТипКомпоненты = НРег(ЧтениеXML.ЗначениеАтрибута("type")); - АрхитектураПлатформы = НРег(ЧтениеXML.ЗначениеАтрибута("arch")); - ПрограммаПросмотра = НРег(ЧтениеXML.ЗначениеАтрибута("client")); - - Если ОперационнаяСистема = "windows" И (ТипКомпоненты = "native" Или ТипКомпоненты = "com") Тогда - - Если АрхитектураПлатформы = "i386" Тогда - Реквизиты.Windows_x86 = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" Тогда - Реквизиты.Windows_x86_64 = Истина; - Продолжить; - КонецЕсли; - - Продолжить; - КонецЕсли; - - Если ОперационнаяСистема = "linux" И ТипКомпоненты = "native" Тогда - - Если АрхитектураПлатформы = "i386" Тогда - Реквизиты.Linux_x86 = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" Тогда - Реквизиты.Linux_x86_64 = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "arm64" Тогда - Реквизиты.Linux_ARM64 = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "e2k" Тогда - Реквизиты.Linux_E2K = Истина; - Продолжить; - КонецЕсли; - - Продолжить; - КонецЕсли; - - Если ОперационнаяСистема = "macos" И ТипКомпоненты = "native" И (АрхитектураПлатформы = "x86_64" - Или АрхитектураПлатформы = "universal") Тогда - Реквизиты.MacOS_x86_64 = Истина; - Продолжить; - КонецЕсли; - - Если ОперационнаяСистема = "windowsruntime" Тогда - - Если АрхитектураПлатформы = "arm" Тогда - Реквизиты.WindowsRT_ARM = Истина; - ИначеЕсли АрхитектураПлатформы = "x86_64" Тогда - Реквизиты.WindowsRT_x86_64 = Истина; - ИначеЕсли АрхитектураПлатформы = "x86" Тогда - Реквизиты.WindowsRT_x86 = Истина; - КонецЕсли; - - Продолжить; - - КонецЕсли; - - Если ОперационнаяСистема = "android" Тогда - - Если АрхитектураПлатформы = "arm" Тогда - Реквизиты.Android_ARM = Истина; - ИначеЕсли АрхитектураПлатформы = "arm64" Тогда - Реквизиты.Android_ARM64 = Истина; - ИначеЕсли АрхитектураПлатформы = "x86_64" Тогда - Реквизиты.Android_x86_64 = Истина; - ИначеЕсли АрхитектураПлатформы = "i386" Тогда - Реквизиты.Android_x86 = Истина; - КонецЕсли; - - Продолжить; - - КонецЕсли; - - Если ОперационнаяСистема = "ios" Тогда - - Если АрхитектураПлатформы = "arm" Или АрхитектураПлатформы = "universal" Тогда - Реквизиты.iOS_ARM = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "arm64" Или АрхитектураПлатформы = "universal" Тогда - Реквизиты.iOS_ARM64 = Истина; - КонецЕсли; - - Продолжить; - - КонецЕсли; - - Если ОперационнаяСистема = "linux" И ТипКомпоненты = "plugin" Тогда - - Если АрхитектураПлатформы = "i386" И ПрограммаПросмотра = "firefox" Тогда - Реквизиты.Linux_x86_Firefox = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" И ПрограммаПросмотра = "firefox" Тогда - Реквизиты.Linux_x86_64_Firefox = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "arm64" И ПрограммаПросмотра = "firefox" Тогда - Реквизиты.Linux_ARM64_Firefox = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "e2k" И ПрограммаПросмотра = "firefox" Тогда - Реквизиты.Linux_E2K_Firefox = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_x86_ЯндексБраузер = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_x86_Chrome = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_x86_64_ЯндексБраузер = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_x86_64_Chrome = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "arm64" И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_ARM64_ЯндексБраузер = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "arm64" И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_ARM64_Chrome = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "e2k" И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_E2K_ЯндексБраузер = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "e2k" И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Linux_E2K_Chrome = Истина; - КонецЕсли; - - Продолжить; - КонецЕсли; - - Если ОперационнаяСистема = "windows" И ТипКомпоненты = "plugin" Тогда - - Если АрхитектураПлатформы = "i386" И ПрограммаПросмотра = "msie" Тогда - Реквизиты.Windows_x86_MSIE = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" И ПрограммаПросмотра = "msie" Тогда - Реквизиты.Windows_x86_64_MSIE = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "i386" И ПрограммаПросмотра = "firefox" Тогда - Реквизиты.Windows_x86_Firefox = Истина; - Продолжить; - КонецЕсли; - - Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Windows_x86_Chrome = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Windows_x86_ЯндексБраузер = Истина; - КонецЕсли; - - Если АрхитектураПлатформы = "x86_64" И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.Windows_x86_64_ЯндексБраузер = Истина; - КонецЕсли; - - Продолжить; - - КонецЕсли; - - Если ОперационнаяСистема = "macos" И ТипКомпоненты = "plugin" Тогда - - Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") И ПрограммаПросмотра = "safari" Тогда - Реквизиты.MacOS_x86_64_Safari = Истина; - Продолжить; - КонецЕсли; - - Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") И ПрограммаПросмотра = "firefox" Тогда - Реквизиты.MacOS_x86_64_Firefox = Истина; - Продолжить; - КонецЕсли; - - Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.MacOS_x86_64_Chrome = Истина; - КонецЕсли; - - Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") И (ПрограммаПросмотра = "yandexbrowser" - Или ПрограммаПросмотра = "anychromiumbased") Тогда - Реквизиты.MacOS_x86_64_ЯндексБраузер = Истина; - КонецЕсли; - - Продолжить; - - КонецЕсли; - - КонецЕсли; - КонецЦикла; + Если ЧтениеXML.Имя <> "bundle" Или ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ЧтениеXML.Закрыть(); + Возврат; КонецЕсли; + + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.Имя <> "component" Или ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; + КонецЕсли; + + ОперационнаяСистема = НРег(ЧтениеXML.ЗначениеАтрибута("os")); + ТипКомпоненты = НРег(ЧтениеXML.ЗначениеАтрибута("type")); + АрхитектураПлатформы = НРег(ЧтениеXML.ЗначениеАтрибута("arch")); + ПрограммаПросмотра = НРег(ЧтениеXML.ЗначениеАтрибута("client")); + + Если ОперационнаяСистема = "windows" И (ТипКомпоненты = "native" Или ТипКомпоненты = "com") Тогда + + Если АрхитектураПлатформы = "i386" Тогда + Реквизиты.Windows_x86 = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" Тогда + Реквизиты.Windows_x86_64 = Истина; + Продолжить; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если ОперационнаяСистема = "linux" И ТипКомпоненты = "native" Тогда + + Если АрхитектураПлатформы = "i386" Тогда + Реквизиты.Linux_x86 = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" Тогда + Реквизиты.Linux_x86_64 = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "arm64" Тогда + Реквизиты.Linux_ARM64 = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "e2k" Тогда + Реквизиты.Linux_E2K = Истина; + Продолжить; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если ОперационнаяСистема = "macos" И ТипКомпоненты = "native" И (АрхитектураПлатформы = "x86_64" + Или АрхитектураПлатформы = "universal") Тогда + Реквизиты.MacOS_x86_64 = Истина; + Продолжить; + КонецЕсли; + + Если ОперационнаяСистема = "windowsruntime" Тогда + + Если АрхитектураПлатформы = "arm" Тогда + Реквизиты.WindowsRT_ARM = Истина; + ИначеЕсли АрхитектураПлатформы = "x86_64" Тогда + Реквизиты.WindowsRT_x86_64 = Истина; + ИначеЕсли АрхитектураПлатформы = "x86" Тогда + Реквизиты.WindowsRT_x86 = Истина; + КонецЕсли; + + Продолжить; + + КонецЕсли; + + Если ОперационнаяСистема = "android" Тогда + + Если АрхитектураПлатформы = "arm" Тогда + Реквизиты.Android_ARM = Истина; + ИначеЕсли АрхитектураПлатформы = "arm64" Тогда + Реквизиты.Android_ARM64 = Истина; + ИначеЕсли АрхитектураПлатформы = "x86_64" Тогда + Реквизиты.Android_x86_64 = Истина; + ИначеЕсли АрхитектураПлатформы = "i386" Тогда + Реквизиты.Android_x86 = Истина; + КонецЕсли; + + Продолжить; + + КонецЕсли; + + Если ОперационнаяСистема = "ios" Тогда + + Если АрхитектураПлатформы = "arm" Или АрхитектураПлатформы = "universal" Тогда + Реквизиты.iOS_ARM = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "arm64" Или АрхитектураПлатформы = "universal" Тогда + Реквизиты.iOS_ARM64 = Истина; + КонецЕсли; + + Продолжить; + + КонецЕсли; + + Если ОперационнаяСистема = "linux" И ТипКомпоненты = "plugin" Тогда + + Если АрхитектураПлатформы = "i386" И ПрограммаПросмотра = "firefox" Тогда + Реквизиты.Linux_x86_Firefox = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" И ПрограммаПросмотра = "firefox" Тогда + Реквизиты.Linux_x86_64_Firefox = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "arm64" И ПрограммаПросмотра = "firefox" Тогда + Реквизиты.Linux_ARM64_Firefox = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "e2k" И ПрограммаПросмотра = "firefox" Тогда + Реквизиты.Linux_E2K_Firefox = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "yandexbrowser" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_x86_ЯндексБраузер = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "chrome" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_x86_Chrome = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" И (ПрограммаПросмотра = "yandexbrowser" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_x86_64_ЯндексБраузер = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" И (ПрограммаПросмотра = "chrome" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_x86_64_Chrome = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "arm64" И (ПрограммаПросмотра = "yandexbrowser" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_ARM64_ЯндексБраузер = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "arm64" И (ПрограммаПросмотра = "chrome" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_ARM64_Chrome = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "e2k" И (ПрограммаПросмотра = "yandexbrowser" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_E2K_ЯндексБраузер = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "e2k" И (ПрограммаПросмотра = "chrome" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Linux_E2K_Chrome = Истина; + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если ОперационнаяСистема = "windows" И ТипКомпоненты = "plugin" Тогда + + Если АрхитектураПлатформы = "i386" И ПрограммаПросмотра = "msie" Тогда + Реквизиты.Windows_x86_MSIE = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" И ПрограммаПросмотра = "msie" Тогда + Реквизиты.Windows_x86_64_MSIE = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "i386" И ПрограммаПросмотра = "firefox" Тогда + Реквизиты.Windows_x86_Firefox = Истина; + Продолжить; + КонецЕсли; + + Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "chrome" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Windows_x86_Chrome = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "i386" И (ПрограммаПросмотра = "yandexbrowser" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Windows_x86_ЯндексБраузер = Истина; + КонецЕсли; + + Если АрхитектураПлатформы = "x86_64" И (ПрограммаПросмотра = "yandexbrowser" + Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.Windows_x86_64_ЯндексБраузер = Истина; + КонецЕсли; + + Продолжить; + + КонецЕсли; + + Если ОперационнаяСистема = "macos" И ТипКомпоненты = "plugin" Тогда + + Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") + И ПрограммаПросмотра = "safari" Тогда + Реквизиты.MacOS_x86_64_Safari = Истина; + Продолжить; + КонецЕсли; + + Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") + И ПрограммаПросмотра = "firefox" Тогда + Реквизиты.MacOS_x86_64_Firefox = Истина; + Продолжить; + КонецЕсли; + + Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") + И (ПрограммаПросмотра = "chrome" Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.MacOS_x86_64_Chrome = Истина; + КонецЕсли; + + Если (АрхитектураПлатформы = "x86_64" Или АрхитектураПлатформы = "universal") + И (ПрограммаПросмотра = "yandexbrowser" Или ПрограммаПросмотра = "anychromiumbased") Тогда + Реквизиты.MacOS_x86_64_ЯндексБраузер = Истина; + КонецЕсли; + + Продолжить; + + КонецЕсли; + КонецЦикла; + ЧтениеXML.Закрыть(); КонецПроцедуры @@ -1355,17 +1362,17 @@ ЧтениеXML.ПерейтиКСодержимому(); Если ЧтениеXML.Имя = "drivers" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.Имя = "component" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - - Идентификатор = ЧтениеXML.ЗначениеАтрибута("progid"); - - Реквизиты.Идентификатор = Сред(Идентификатор, СтрНайти(Идентификатор, ".") + 1); - Реквизиты.Наименование = ЧтениеXML.ЗначениеАтрибута("name"); - Реквизиты.Версия = ЧтениеXML.ЗначениеАтрибута("version"); - - ФайлПрочитан = Истина; - + Если ЧтениеXML.Имя <> "component" Или ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + Продолжить; КонецЕсли; + + Идентификатор = ЧтениеXML.ЗначениеАтрибута("progid"); + + Реквизиты.Идентификатор = Сред(Идентификатор, СтрНайти(Идентификатор, ".") + 1); + Реквизиты.Наименование = ЧтениеXML.ЗначениеАтрибута("name"); + Реквизиты.Версия = ЧтениеXML.ЗначениеАтрибута("version"); + + ФайлПрочитан = Истина; КонецЦикла; КонецЕсли; ЧтениеXML.Закрыть(); @@ -1416,6 +1423,8 @@ #КонецОбласти +// ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент + #Область ЗагрузкаСПортала Процедура ПроверитьДоступностьЗагрузкиСПортала() @@ -1448,103 +1457,102 @@ // Процедура НоваяКомпонентаСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда - - Идентификатор = ПараметрыПроцедуры.Идентификатор; - Версия = ПараметрыПроцедуры.Версия; - - ПроверитьДоступностьЗагрузкиСПортала(); - - МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); - - ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - ОписаниеВнешнейКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); - ОписаниеВнешнейКомпоненты.Идентификатор = Идентификатор; - ОписаниеВнешнейКомпоненты.Версия = Версия; - - Если Не ЗначениеЗаполнено(Версия) Тогда - РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); - Иначе - РезультатОперации = МодульПолучениеВнешнихКомпонент.ВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); - КонецЕсли; - - Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда - ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), РезультатОперации.ИнформацияОбОшибке, РезультатОперации.СообщениеОбОшибке); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда - ТекстИсключения = НСтр("ru = 'На портале 1С:ИТС внешняя компонента отсутствует.'"); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ТекстИсключения); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; - КодОшибки = СтрокаРезультата.КодОшибки; - - Если ЗначениеЗаполнено(КодОшибки) Тогда - - ИнформацияОбОшибке = ""; - Если КодОшибки = "ОтсутствуетКомпонента" Тогда - ИнформацияОбОшибке = НСтр("ru = 'На портале 1С:ИТС нет требуемой внешней компоненты %1.'"); - ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда - ИнформацияОбОшибке = НСтр("ru = 'На портале 1С:ИТС нет требуемой версии внешней компоненты %1.'"); - ИначеЕсли КодОшибки = "ФайлНеЗагружен" Или КодОшибки = "АктуальнаяВерсия" Тогда - ИнформацияОбОшибке = НСтр("ru = 'Не удалось загрузить внешнюю компоненту %1 по непредвиденной причине (код %2).'"); - КонецЕсли; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформацияОбОшибке, - ПредставлениеКомпоненты(Идентификатор, Версия), КодОшибки); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаРезультата.АдресФайла); - Информация = ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь); - - Если Не Информация.Разобрано Тогда - - ТекстИсключения = Информация.ОписаниеОшибки + ?(Информация.ИнформацияОбОшибке = Неопределено, "", - ": " + ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация.ИнформацияОбОшибке)); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ТекстИсключения); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - // Создание экземпляра компоненты. - Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); - Объект.Заполнить(Неопределено); // Конструктор по умолчанию. - ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. - ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. - Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), ТекущаяДатаСеанса()); - Объект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Информация.Реквизиты.ЦелевыеПлатформы); - Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); - - Если Не ЗначениеЗаполнено(Версия) Тогда // Если запрос конкретной версии - пропускаем. - Объект.ОбновлятьСПортала1СИТС = Объект.ЭтоКомпонентаПоследнейВерсии() - И ПараметрыПроцедуры.ОбновлятьАвтоматически; - КонецЕсли; - - Объект.Записать(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты(); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"), - "ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + ВызватьИсключение НСтр("ru = 'Действие недоступно.'"); КонецЕсли; + + Идентификатор = ПараметрыПроцедуры.Идентификатор; + Версия = ПараметрыПроцедуры.Версия; + + ПроверитьДоступностьЗагрузкиСПортала(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + ОписаниеВнешнейКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеВнешнейКомпоненты.Идентификатор = Идентификатор; + ОписаниеВнешнейКомпоненты.Версия = Версия; + + Если Не ЗначениеЗаполнено(Версия) Тогда + РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + Иначе + РезультатОперации = МодульПолучениеВнешнихКомпонент.ВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + КонецЕсли; + + Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда + ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), РезультатОперации.ИнформацияОбОшибке, + РезультатОперации.СообщениеОбОшибке); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Если РезультатОперации.ДанныеВнешнихКомпонент.Количество() = 0 Тогда + ТекстИсключения = НСтр("ru = 'На портале 1С:ИТС внешняя компонента отсутствует.'"); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстИсключения); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + СтрокаРезультата = РезультатОперации.ДанныеВнешнихКомпонент[0]; + КодОшибки = СтрокаРезультата.КодОшибки; + + Если ЗначениеЗаполнено(КодОшибки) Тогда + + ИнформацияОбОшибке = ""; + Если КодОшибки = "ОтсутствуетКомпонента" Тогда + ИнформацияОбОшибке = НСтр("ru = 'На портале 1С:ИТС нет требуемой внешней компоненты %1.'"); + ИначеЕсли КодОшибки = "ОтсутствуетВерсия" Тогда + ИнформацияОбОшибке = НСтр("ru = 'На портале 1С:ИТС нет требуемой версии внешней компоненты %1.'"); + ИначеЕсли КодОшибки = "ФайлНеЗагружен" Или КодОшибки = "АктуальнаяВерсия" Тогда + ИнформацияОбОшибке = НСтр("ru = 'Не удалось загрузить внешнюю компоненту %1 по непредвиденной причине (код %2).'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформацияОбОшибке, + ПредставлениеКомпоненты(Идентификатор, Версия), КодОшибки); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(СтрокаРезультата.АдресФайла); + Информация = ИнформацияОКомпонентеИзФайла(ДвоичныеДанные, Ложь); + + Если Не Информация.Разобрано Тогда + + ТекстИсключения = Информация.ОписаниеОшибки + ?(Информация.ИнформацияОбОшибке = Неопределено, "", + ": " + ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация.ИнформацияОбОшибке)); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ТекстИсключения); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент(); + Объект.Заполнить(Неопределено); // Конструктор по умолчанию. + ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста. + ЗаполнитьЗначенияСвойств(Объект, СтрокаРезультата); // По данным с сайта. + Объект.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загружена с Портала 1С:ИТС. %1.'"), ТекущаяДатаСеанса()); + Объект.ЦелевыеПлатформы = Новый ХранилищеЗначения(Информация.Реквизиты.ЦелевыеПлатформы, Новый СжатиеДанных(9)); + Объект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", Информация.ДвоичныеДанные); + + Если Не ЗначениеЗаполнено(Версия) Тогда // Если запрос конкретной версии - пропускаем. + Объект.ОбновлятьСПортала1СИТС = Объект.ЭтоКомпонентаПоследнейВерсии() + И ПараметрыПроцедуры.ОбновлятьАвтоматически; + КонецЕсли; + + Объект.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты(); КонецПроцедуры @@ -1566,37 +1574,37 @@ // Процедура ОбновитьКомпонентыСПортала(ПараметрыПроцедуры, АдресРезультата) Экспорт - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда - - ПроверитьДоступностьЗагрузкиСПортала(); - - МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); - ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); - - ОбновляемыеКомпоненты = ПараметрыПроцедуры.ОбновляемыеКомпоненты; - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ОбновляемыеКомпоненты, "Идентификатор, Версия"); - Для Каждого ОбновляемаяКомпонента Из ОбновляемыеКомпоненты Цикл - ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); - ОписаниеКомпоненты.Идентификатор = Реквизиты[ОбновляемаяКомпонента].Идентификатор; - ОписаниеКомпоненты.Версия = Реквизиты[ОбновляемаяКомпонента].Версия; - КонецЦикла; - - РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); - Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда - ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), РезультатОперации.ИнформацияОбОшибке, РезультатОперации.СообщениеОбОшибке); - ВызватьИсключение ТекстИсключения; - КонецЕсли; - - ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата); - ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты(); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"), - "ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент"); + Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент") Тогда + ВызватьИсключение НСтр("ru = 'Действие недоступно.'"); КонецЕсли; + ПроверитьДоступностьЗагрузкиСПортала(); + + МодульПолучениеВнешнихКомпонент = ОбщегоНазначения.ОбщийМодуль("ПолучениеВнешнихКомпонент"); + ОписаниеВнешнихКомпонент = МодульПолучениеВнешнихКомпонент.ОписаниеВнешнихКомпонент(); + + ОбновляемыеКомпоненты = ПараметрыПроцедуры.ОбновляемыеКомпоненты; + Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ОбновляемыеКомпоненты, "Идентификатор, Версия"); + Для Каждого ОбновляемаяКомпонента Из ОбновляемыеКомпоненты Цикл + ОписаниеКомпоненты = ОписаниеВнешнихКомпонент.Добавить(); + ОписаниеКомпоненты.Идентификатор = Реквизиты[ОбновляемаяКомпонента].Идентификатор; + ОписаниеКомпоненты.Версия = Реквизиты[ОбновляемаяКомпонента].Версия; + КонецЦикла; + + РезультатОперации = МодульПолучениеВнешнихКомпонент.АктуальныеВерсииВнешнихКомпонент(ОписаниеВнешнихКомпонент); + Если ЗначениеЗаполнено(РезультатОперации.КодОшибки) Тогда + ТекстИсключения = ?(Пользователи.ЭтоПолноправныйПользователь(), РезультатОперации.ИнформацияОбОшибке, + РезультатОперации.СообщениеОбОшибке); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата); + ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты(); + КонецПроцедуры #КонецОбласти +// Конец ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl index 043282be7..cecd4d8a6 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйВызовСервера/Module.bsl @@ -11,13 +11,13 @@ // Параметры: // Идентификатор - Строка // Версия - Строка -// - Неопределено -// ПутьКМакетуДляПоискаПоследнейВерсии - Неопределено, Строка +// ПутьКМакетуДляПоискаПоследнейВерсии - Строка // // Возвращаемое значение: // см. ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте // -Функция ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия = Неопределено, ПутьКМакетуДляПоискаПоследнейВерсии = Неопределено) Экспорт +Функция ИнформацияОСохраненнойКомпоненте(Знач Идентификатор, Знач Версия = Неопределено, + Знач ПутьКМакетуДляПоискаПоследнейВерсии = Неопределено) Экспорт Результат = ВнешниеКомпонентыСлужебный.ИнформацияОСохраненнойКомпоненте(Идентификатор, Версия, ПутьКМакетуДляПоискаПоследнейВерсии); Если Результат.Состояние = "НайденаВХранилище" Или Результат.Состояние = "НайденаВОбщемХранилище" Тогда @@ -41,37 +41,36 @@ КонецФункции -// Описание файлов компонент. -// // Параметры: -// Ссылки Ссылки +// Ссылки - Массив из СправочникСсылка.ВнешниеКомпоненты // // Возвращаемое значение: // Массив из Структура: // * Местоположение - Строка // * ИмяФайла - Строка // -Функция ОписаниеФайловКомпонент(Ссылки) Экспорт +Функция ОписаниеФайловКомпонент(Знач Ссылки) Экспорт - Массив = Новый Массив; + Результат = Новый Массив; - ЗначенияРеквизитовОбъектов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Ссылки, "ИмяФайла, Идентификатор"); - Для Каждого КлючИЗначение Из ЗначенияРеквизитовОбъектов Цикл - Структура = Новый Структура; - Структура.Вставить("Хранение", ПолучитьНавигационнуюСсылку(КлючИЗначение.Ключ, "ХранилищеКомпоненты")); + ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Ссылки, "ИмяФайла, Идентификатор"); + Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл + ОписаниеФайлаКомпоненты = Новый Структура; + ОписаниеФайлаКомпоненты.Вставить("Хранение", + ПолучитьНавигационнуюСсылку(КлючИЗначение.Ключ, "ХранилищеКомпоненты")); ИмяФайла = КлючИЗначение.Значение.ИмяФайла; Если Не ЗначениеЗаполнено(ИмяФайла) Тогда ИмяФайла = КлючИЗначение.Значение.Идентификатор + ".zip"; КонецЕсли; - Структура.Вставить("Имя", ИмяФайла); - Массив.Добавить(Структура); + ОписаниеФайлаКомпоненты.Вставить("Имя", ИмяФайла); + Результат.Добавить(ОписаниеФайлаКомпоненты); КонецЦикла; - Возврат Массив; + Возврат Результат; КонецФункции -Функция ИнформацияОВнешнейКомпонентеИзМакета(Местоположение) Экспорт +Функция ИнформацияОВнешнейКомпонентеИзМакета(Знач Местоположение) Экспорт Возврат ВнешниеКомпонентыСлужебный.ИнформацияОВнешнейКомпонентеИзМакета(Местоположение); КонецФункции diff --git a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl index 8180eb2af..cc867e66b 100644 --- a/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеКомпонентыСлужебныйКлиент/Module.bsl @@ -44,7 +44,7 @@ Информация = ВнешниеКомпонентыСлужебныйВызовСервера.ИнформацияОСохраненнойКомпоненте( Контекст.Идентификатор, Контекст.Версия, ПутьКМакетуДляПоискаПоследнейВерсии); - + Контекст.Версия = Информация.Реквизиты.Версия; Контекст.Местоположение = Информация.Местоположение; // Информация.Состояние: @@ -77,7 +77,7 @@ КонтекстПоиска); Оповещение = Новый ОписаниеОповещения("ПоискКомпонентыНаПорталеПриФормированииРезультата", ЭтотОбъект, ОповещениеФормы); - ВнешниеКомпонентыКлиентЛокализация.ПоискКомпонентыНаПортале(Оповещение, Контекст); + ВнешниеКомпонентыКлиентЛокализация.ПриПоискеКомпонентНаПортале(Оповещение, Контекст); Иначе Результат.ОписаниеОшибки = НСтр("ru = 'Компонента отсутствует в списке разрешенных внешних компонент.'"); @@ -143,6 +143,7 @@ Контекст.Идентификатор, Контекст.Версия, ПутьКМакетуДляПоискаПоследнейВерсии); Контекст.Местоположение = Информация.Местоположение; + Контекст.Версия = Информация.Реквизиты.Версия; // Информация.Состояние: // * НеНайдена @@ -1172,7 +1173,7 @@ Процедура ОбновитьКомпонентыСПортала(Оповещение, ОбновляемыеКомпоненты) Экспорт ОповещениеФормы = Новый ОписаниеОповещения("ОбновитьКомпонентыСПорталаПриФормированииРезультата", ЭтотОбъект, Оповещение); - ВнешниеКомпонентыКлиентЛокализация.ОбновитьКомпонентыСПортала(ОповещениеФормы, ОбновляемыеКомпоненты); + ВнешниеКомпонентыКлиентЛокализация.ПриОбновленииКомпонентСПортала(ОповещениеФормы, ОбновляемыеКомпоненты); КонецПроцедуры @@ -1203,8 +1204,9 @@ ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения внешней компоненты'"); - ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip'")+"|" - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы()); + ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Файлы внешних компонент (*.zip)|*.zip'") + "|" + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), + ПолучитьМаскуВсеФайлы()); Оповещение = Новый ОписаниеОповещения("СохранитьКомпонентуВФайлПослеПолученияФайлов", ЭтотОбъект); ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, ОписаниеФайлов[0].Хранение, ОписаниеФайлов[0].Имя, ПараметрыСохранения); diff --git a/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлы/Module.bsl b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлы/Module.bsl new file mode 100644 index 000000000..b67a199c9 --- /dev/null +++ b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлы/Module.bsl @@ -0,0 +1,2792 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Выгружает объекты в требуемом формате и записывает в файлы. +// +// Параметры: +// КомандыВыгрузки - Структура +// - Массив - команда или несколько команд выгрузки, +// см. УправлениеПечатью.КомандыПечатиФормы. +// СписокОбъектов - Массив из СправочникСсылка, ДокументСсылка - ссылки на сохраняемые объекты. +// НастройкиСохранения - см. УправлениеПечатью.НастройкиСохранения. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ИмяФайла - Строка - имя файла; +// * ДвоичныеДанные - ДвоичныеДанные - файл печатной формы. +// +Функция СохранитьПоФорматуВФайл(КомандыВыгрузки, СписокОбъектов, НастройкиСохранения) Экспорт + + МассивТипов = Новый Массив; // Массив Из ОписаниеТипов + + Для Каждого ОбъектВыгрузки Из СписокОбъектов Цикл + + ТекущийТип = ТипЗнч(ОбъектВыгрузки); + Если МассивТипов.Найти(ТекущийТип) = Неопределено Тогда + + МассивТипов.Добавить(ТекущийТип); + + КонецЕсли; + + КонецЦикла; + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ДвоичныеДанные", Новый ОписаниеТипов("ДвоичныеДанные")); + Результат.Колонки.Добавить("ОбъектВыгрузки", Новый ОписаниеТипов(МассивТипов)); + + СписокКоманд = КомандыВыгрузки; + Если ТипЗнч(КомандыВыгрузки) <> Тип("Массив") Тогда + СписокКоманд = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КомандыВыгрузки); + КонецЕсли; + + Для Каждого КомандаВыгрузки Из СписокКоманд Цикл + + //@skip-check query-in-loop - запрос используется внутри обработки исключения для заранее неизвестных данных. + ВыполнитьВыгрузкуВФайл(КомандаВыгрузки, НастройкиСохранения, СписокОбъектов, Результат); + + КонецЦикла; + + Если ЗначениеЗаполнено(Результат) И НастройкиСохранения.УпаковатьВАрхив Тогда + + ДвоичныеДанные = УправлениеПечатью.УпаковатьВАрхив(Результат); + Результат.Очистить(); + Файл = Результат.Добавить(); + ИмяФайла = УправлениеПечатью.ИмяФайла(ПолучитьИмяВременногоФайла("zip")); + Файл.ИмяФайла = ИмяФайла; + Файл.ДвоичныеДанные = ДвоичныеДанные; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту +Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт + + СписокОбъектов = Новый Массив; + Для Каждого Источник Из Источники.Строки Цикл + СписокОбъектов.Добавить(Источник.Метаданные); + КонецЦикла; + + ЭтоЖурналДокументов = ОбщегоНазначения.ЭтоЖурналДокументов(Источники.Строки[0].Метаданные); + + Если Источники.Строки.Количество() = 1 + И ЭтоЖурналДокументов Тогда + СписокОбъектов = Неопределено; + КонецЕсли; + + ИмяФормы = НастройкиФормы.ИмяФормы; + КомандыВыгрузки = КомандыВыгрузкиФормы(ИмяФормы, СписокОбъектов); + + КлючиПараметровОбработчика = "Обработчик, МенеджерПечати, ЗаголовокФормы, ФорматСохранения, + |ВыполнятьВФоновомЗадании, ИдентификаторМакета, ТипИсточника"; + + Для Каждого КомандаВыгрузки Из КомандыВыгрузки Цикл + + Если КомандаВыгрузки.Отключена Тогда + Продолжить; + КонецЕсли; + + Команда = Команды.Добавить(); + ЗаполнитьЗначенияСвойств(Команда, КомандаВыгрузки,, "Обработчик"); + Команда.Вид = "ВыгрузкаДанныхОбъекта"; + Команда.МножественныйВыбор = Истина; + Команда.ВидимостьВФормах = КомандаВыгрузки.СписокФорм; + Команда.РежимЗаписи = "ЗаписыватьТолькоНовые"; + Если КомандаВыгрузки.ТипыОбъектовПечати.Количество() > 0 Тогда + Команда.ТипПараметра = Новый ОписаниеТипов(КомандаВыгрузки.ТипыОбъектовПечати); + КонецЕсли; + Команда.Обработчик = "ВыгрузкаОбъектовВФайлыСлужебныйКлиент.ОбработчикКомандыВыполнитьВыгрузку"; + Команда.ДополнительныеПараметры = Новый Структура(КлючиПараметровОбработчика); + ЗаполнитьЗначенияСвойств(Команда.ДополнительныеПараметры, КомандаВыгрузки); + + МассивФорматовСохранения = Новый Массив; + Если ЗначениеЗаполнено(КомандаВыгрузки.ФорматСохранения) Тогда + МассивФорматовСохранения.Добавить(КомандаВыгрузки.ФорматСохранения); + КонецЕсли; + + Команда.ДополнительныеПараметры.ФорматСохранения = МассивФорматовСохранения; + Если Команда.Порядок = 0 Тогда + Команда.Порядок = 50; + КонецЕсли; + + КонецЦикла; + + Если КомандыВыгрузки.Количество() > 0 + И НЕ ЭтоЖурналДокументов + И Источники.Строки.Количество() = 1 + И ПравоДоступа("Изменение", Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати) Тогда + + ОбъектМетаданных = Источники.Строки[0].Метаданные; + ТипПараметра = Новый Массив; // Массив Из Тип + ТипОбъекта = Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")); + ТипПараметра.Добавить(ТипОбъекта); + + Команда = Команды.Добавить(); + Команда.Вид = "ВыгрузкаДанныхОбъекта"; + Команда.Представление = Нстр("ru = 'Перейти к макетам файлов выгрузки'"); + Команда.МножественныйВыбор = Ложь; + Команда.Обработчик = "ВыгрузкаОбъектовВФайлыСлужебныйКлиент.ОткрытьФормуМакетовВыгрузки"; + Команда.ТипПараметра = Новый ОписаниеТипов(ТипПараметра); + Команда.Важность = "СмТакже"; + ДополнительныеПараметры = Команда.ДополнительныеПараметры; + ДополнительныеПараметры.Вставить("Владелец", ОбъектМетаданных.ПолноеИмя()); + + Команда.Порядок = 50; + + КонецЕсли; + +КонецПроцедуры + +// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд +Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт + + Вид = ВидыПодключаемыхКоманд.Добавить(); + Вид.Имя = "ВыгрузкаДанныхОбъекта"; + Вид.ИмяПодменю = "ПодменюВыгрузкаДанныхОбъекта"; + Вид.Заголовок = НСтр("ru = 'Выгрузить в файл'"); + Вид.Порядок = 40; + Вид.Картинка = БиблиотекаКартинок.СохранитьФайлКак; + Вид.Отображение = ОтображениеКнопки.КартинкаИТекст; + +КонецПроцедуры + +// Возвращает список команд выгрузки для указанной формы. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// - Строка - форма или полное имя формы, для которой необходимо получить список +// команд выгрузки. +// СписокОбъектов - Массив - коллекция объектов метаданных, команды печати которых необходимо использовать при составлении +// списка команд печати для указанной формы. +// Возвращаемое значение: +// см. УправлениеПечатью.СоздатьКоллекциюКомандПечати +// +Функция КомандыВыгрузкиФормы(Форма, СписокОбъектов = Неопределено) Экспорт + + Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") Тогда + ИмяФормы = Форма.ИмяФормы; + Иначе + ИмяФормы = Форма; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяФормы); + Если ОбъектМетаданных <> Неопределено И Не Метаданные.ОбщиеФормы.Содержит(ОбъектМетаданных) Тогда + ОбъектМетаданных = ОбъектМетаданных.Родитель(); + Иначе + ОбъектМетаданных = Неопределено; + КонецЕсли; + + Если ОбъектМетаданных <> Неопределено Тогда + СсылкаОМ = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + КонецЕсли; + + КомандыВыгрузки = УправлениеПечатью.СоздатьКоллекциюКомандПечати(); + + Если СписокОбъектов = Неопределено + И ОбъектМетаданных = Неопределено Тогда + Возврат КомандыВыгрузки; + КонецЕсли; + + Если СписокОбъектов <> Неопределено Тогда + + ЗаполнитьКомандыВыгрузкиДляСпискаОбъектов(СписокОбъектов, КомандыВыгрузки); + + Иначе + + ЭтоЖурналДокументов = ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектМетаданных); + Если ЭтоЖурналДокументов Тогда + + ЗаполнитьКомандыВыгрузкиДляСпискаОбъектов(ОбъектМетаданных.РегистрируемыеДокументы, КомандыВыгрузки); + + Иначе + + ДобавляемыеКомандыВыгрузки = КомандыВыгрузкиОбъекта(ОбъектМетаданных); + Для Каждого КомандаВыгрузки Из ДобавляемыеКомандыВыгрузки Цикл + ЗаполнитьЗначенияСвойств(КомандыВыгрузки.Добавить(), КомандаВыгрузки); + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + Для Каждого КомандаВыгрузки Из КомандыВыгрузки Цикл + + Если КомандаВыгрузки.Порядок = 0 Тогда + КомандаВыгрузки.Порядок = 50; + КонецЕсли; + + КонецЦикла; + + КомандыВыгрузки.Сортировать("Порядок Возр, Представление Возр"); + + ЧастиИмени = СтрРазделить(ИмяФормы, "."); + КраткоеИмяФормы = ЧастиИмени[ЧастиИмени.Количество() - 1]; + + // фильтр по именам форм + КоличествоКоманд = КомандыВыгрузки.Количество(); + Для НомерСтроки = 1 По КоличествоКоманд Цикл + + ИндексСтроки = КоличествоКоманд - НомерСтроки; + КомандаВыгрузки = КомандыВыгрузки[ИндексСтроки]; + СписокФорм = СтрРазделить(КомандаВыгрузки.СписокФорм, ",", Ложь); + Если СписокФорм.Количество() > 0 И СписокФорм.Найти(КраткоеИмяФормы) = Неопределено Тогда + КомандыВыгрузки.Удалить(КомандаВыгрузки); + КонецЕсли; + + КонецЦикла; + + УправлениеПечатью.ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыВыгрузки, Форма); + + Возврат КомандыВыгрузки; + +КонецФункции + +// Формирует структуру выгрузки объекта в соответствии с макетом выгрузки +// +// Параметры: +// Макет - ТабличныйДокумент - макет выгрузки +// ФорматСохранения - ПеречислениеСсылка.ФорматыВыгрузкиОбъектов +// МассивОбъектов - Массив из СправочникСсылка, ДокументСсылка - ссылки на сохраняемые объекты +// КодЯзыка - Строка - код языка +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - ЛюбаяСсылка +// * Значение - см. НоваяСтруктураДанных +// +Функция СформироватьСтруктуруДляВыгрузки(Макет, ФорматСохранения, МассивОбъектов, КодЯзыка) Экспорт + + Если ТипЗнч(ФорматСохранения) <> Тип("ПеречислениеСсылка.ФорматыВыгрузкиОбъектов") Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Соответствие; + + ПоляМакета = УправлениеПечатью.ПоляМакета(Макет); + ДанныеПечати = УправлениеПечатью.ДанныеПечати(МассивОбъектов, ПоляМакета, КодЯзыка); + НастройкиФорматаПолей = ДанныеПечати["НастройкиФорматаПолей"]; + ТипыПолейПараметров = ДанныеПечати["ТипыПолейПараметров"]; + ОбластиМакета = УправлениеПечатью.ОбластиМакета(Макет, ДанныеПечати); + ОбластиТаблиц = ОбластиМакета.ОбластиТаблиц; + + ТаблицыМакета = ТаблицыМакета(Макет, ОбластиТаблиц); + ТаблицаОбластей = ТаблицаОбластей(Макет); + ДополнитьТаблицуОбластейДаннымиТаблицы(Макет, ТаблицаОбластей, ТаблицыМакета); + + ДопДанные = Новый Структура; + ДопДанные.Вставить("Макет", Макет); + ДопДанные.Вставить("НастройкиФорматаПолей", НастройкиФорматаПолей); + ДопДанные.Вставить("ТипыПолейПараметров", ТипыПолейПараметров); + ДопДанные.Вставить("ТаблицаОбластей", ТаблицаОбластей); + ДопДанные.Вставить("ТаблицыМакета", ТаблицыМакета); + ДопДанные.Вставить("КодЯзыка", КодЯзыка); + ДопДанные.Вставить("ФорматСохранения", ФорматСохранения); + + Если ФорматСохранения = Перечисления.ФорматыВыгрузкиОбъектов.DBF Тогда + + Результат = СформироватьДанныеВыгрузкиДляDBF( + МассивОбъектов, + ДанныеПечати, + ДопДанные); + + Иначе + + Результат = СформироватьДанныеВыгрузки( + МассивОбъектов, + ДанныеПечати, + ДопДанные); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Параметры: +// Макет - ТабличныйДокумент +// ОбластиТаблиц - Соответствие из КлючИЗначение: +// * Ключ - Строка - адрес таблицы +// * Значение - Строка - имя таблицы +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * Имя - Строка +// * Верх - Число +// * Низ - Число +// * ПараметрРасшифровки - Строка +// +Функция ТаблицыМакета(Макет, ОбластиТаблиц) Экспорт + + ТаблицаМакета = Новый ТаблицаЗначений; + ТаблицаМакета.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ТаблицаМакета.Колонки.Добавить("Верх", Новый ОписаниеТипов("Число")); + ТаблицаМакета.Колонки.Добавить("Низ", Новый ОписаниеТипов("Число")); + ТаблицаМакета.Колонки.Добавить("ПараметрРасшифровки", Новый ОписаниеТипов("Строка")); + + Для Каждого ТекСоответствие Из ОбластиТаблиц Цикл + + ИдентификаторОбласти = ТекСоответствие.Ключ; + ИмяТаблицы = ТекСоответствие.Значение; + + МассивАдреса = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИдентификаторОбласти, ":"); + НомерСтрокиВерх = Число(СтрЗаменить(МассивАдреса[0], "R", "")); + НомерСтрокиНиз = Число(СтрЗаменить(МассивАдреса[1], "R", "")); + + НоваяСтрока = ТаблицаМакета.Добавить(); + НоваяСтрока.Имя = ИмяТаблицы; + НоваяСтрока.Верх = НомерСтрокиВерх; + НоваяСтрока.Низ = НомерСтрокиНиз; + + ОбластьЯчейки = Макет.Область("R" + XMLСтрока(НомерСтрокиВерх) + "C2:" + "R" + XMLСтрока(НомерСтрокиВерх) + "C2"); + НоваяСтрока.ПараметрРасшифровки = ОбластьЯчейки.ПараметрРасшифровки; + + КонецЦикла; + ТаблицаМакета.Сортировать("Верх, Низ"); + + Возврат ТаблицаМакета; + +КонецФункции + +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ФорматыВыгрузкиОбъектов - форматы выгрузки без использования табличного документа +// +Функция ФорматыВыгрузкиБезИспользованияТабличногоДокумента() Экспорт + + МассивФорматов = Новый Массив; // Массив из ПеречислениеСсылка.ФорматыВыгрузкиОбъектов + МассивФорматов.Добавить(Перечисления.ФорматыВыгрузкиОбъектов.DBF); + МассивФорматов.Добавить(Перечисления.ФорматыВыгрузкиОбъектов.JSON); + МассивФорматов.Добавить(Перечисления.ФорматыВыгрузкиОбъектов.XML); + + Возврат МассивФорматов; + +КонецФункции + +// Параметры: +// СтруктураСДанными - Структура +// ПолноеИмяФайла - Строка - полное имя файла +// ПредставлениеВыгрузки - Строка - представление выгрузки +// +Процедура ВыполнитьВыгрузкуВXML(СтруктураСДанными, ПолноеИмяФайла, ПредставлениеВыгрузки) Экспорт + + ИмяТела = НСтр("ru = 'Документ'"); + ЗаписьXML = Новый ЗаписьXML; + Если НЕ ПустаяСтрока(ПолноеИмяФайла) Тогда + ЗаписьXML.ОткрытьФайл(ПолноеИмяФайла, "UTF-8"); // Открываем файл для записи, указываем кодировку + Иначе + ЗаписьXML.УстановитьСтроку(); + КонецЕсли; + ЗаписьXML.ЗаписатьОбъявлениеXML(); // Записываем объявление XML + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяТела); + + КоличествоДанных = СтруктураСДанными.КоличествоДанных; + + Для НомерДанных = 1 По КоличествоДанных Цикл + + НомерДанныхСтрокой = Формат(НомерДанных, "ЧДЦ=0; ЧГ="); + Данные = СтруктураСДанными["Данные_" + НомерДанныхСтрокой]; + ОбработатьДанныеОбластьXML(ЗаписьXML, Данные); + + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + ПредставлениеВыгрузки = ЗаписьXML.Закрыть(); + +КонецПроцедуры + +// Параметры: +// СтруктураСДанными - Структура +// ПолноеИмяФайла - Строка - полное имя файла +// ПредставлениеВыгрузки - Строка - представление выгрузки +// +Процедура ВыполнитьВыгрузкуВJSON(СтруктураСДанными, ПолноеИмяФайла, ПредставлениеВыгрузки) Экспорт + + ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб); + + ЗаписьJSON = Новый ЗаписьJSON; + Если НЕ ПустаяСтрока(ПолноеИмяФайла) Тогда + ЗаписьJSON.ОткрытьФайл(ПолноеИмяФайла,,, ПараметрыЗаписиJSON); + Иначе + ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); + КонецЕсли; + ДанныеВJSON = Новый Структура; + ОбработатьДанныеОбластьJSON(СтруктураСДанными, ДанныеВJSON); + + ЗаписатьJSON(ЗаписьJSON, ДанныеВJSON); + ПредставлениеВыгрузки = ЗаписьJSON.Закрыть(); + +КонецПроцедуры + +// Соответствие формата выгрузки формату сохранения. +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - ПеречислениеСсылка.ФорматыВыгрузкиОбъектов +// * Значение - Строка +// +Функция СоответствиеФорматаВыгрузкиФорматуСохранения() Экспорт + + СоответствиеФорматРасширение = Новый Соответствие; + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.DBF, "DBF"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.JSON, "json"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.XML, "xml"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.ANSITXT, "txt"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.TXT, "txt"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.HTML5, "html"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.XLS, "xls"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.XLSX, "xlsx"); + СоответствиеФорматРасширение.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.MXL, "mxl"); + + Возврат СоответствиеФорматРасширение; + +КонецФункции + +// Параметры: +// ОбъектМетаданных - СправочникСсылка, ДокументСсылка - ссылки на сохраняемые объекты +// +// Возвращаемое значение: +// ТаблицаЗначений - см. УправлениеПечатью.КомандыПечатиФормы +// +Функция КомандыВыгрузкиОбъектаДоступныеДляВложений(ОбъектМетаданных) Экспорт + + ИсточникиКомандПечати = УправлениеПечатью.ИсточникиКомандПечати(); + Если ИсточникиКомандПечати.Найти(ОбъектМетаданных) <> Неопределено Тогда + + КомандыВыгрузки = КомандыВыгрузкиОбъекта(ОбъектМетаданных); + + Иначе + + КомандыВыгрузки = УправлениеПечатью.СоздатьКоллекциюКомандПечати(); + + КонецЕсли; + + Возврат КомандыВыгрузки; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ПроцедурыФормированияСтруктурыДляВыгрузки + +// Параметры: +// ОбъектМетаданных - СправочникСсылка, ДокументСсылка - ссылки на сохраняемые объекты +// +// Возвращаемое значение: +// см. УправлениеПечатью.КомандыПечатиФормы +// +Функция КомандыВыгрузкиОбъекта(ОбъектМетаданных) + + КомандыВыгрузки = УправлениеПечатью.СоздатьКоллекциюКомандПечати(); + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + Возврат КомандыВыгрузки; + КонецЕсли; + + Источники = ПодключаемыеКоманды.ДеревоИсточниковКоманд(); + НастройкиAPI = ПодключаемыеКоманды.НастройкиПрограммногоИнтерфейсаПодключаемыхОбъектов(); + ПодключенныеОтчетыИОбработки = ПодключаемыеКоманды.ТаблицаПодключаемыхОбъектов(НастройкиAPI); + Источник = ПодключаемыеКоманды.ЗарегистрироватьИсточник( + ОбъектМетаданных, + Источники, + ПодключенныеОтчетыИОбработки, + НастройкиAPI); + + Если Источник.Менеджер = Неопределено Тогда + Возврат КомандыВыгрузки; + КонецЕсли; + + ДобавитьКомандыВыгрузкиОбъекта(КомандыВыгрузки, ОбъектМетаданных); + + КомандыВыгрузки.Сортировать("Порядок Возр, Представление Возр"); + УправлениеПечатью.ИсправитьПризнакПроверкаПроведенияПередПечатью(КомандыВыгрузки, ОбъектМетаданных); + УправлениеПечатью.ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыВыгрузки); + + КомандыВыгрузки.Индексы.Добавить("УникальныйИдентификатор"); + + Возврат КомандыВыгрузки; + +КонецФункции + +// Формирует таблицу значений с описанием команд выгрузки +// +// Параметры: +// КомандыВыгрузки - ТаблицаЗначений: +// * Идентификатор - Строка +// * Представление - Строка +// * МенеджерПечати - Строка +// * ТипыОбъектовПечати - Массив из ЛюбаяСсылка +// * Обработчик - Строка +// * Порядок - Число +// * Картинка - Картинка +// * СписокФорм - Строка +// * МестоРазмещения - Строка +// * ЗаголовокФормы - Строка +// * ФункциональныеОпции - Строка +// * УсловияВидимости - Массив из Структура: +// ** ВидСравнения - ВидСравненияКомпоновкиДанных +// ** Значение - ЛюбаяСсылка +// ** Реквизит - Строка +// * ПроверкаПроведенияПередПечатью - Булево +// * СразуНаПринтер - Булево +// * ФорматСохранения - ПеречислениеСсылка.ФорматыВыгрузкиОбъектов +// * ПереопределитьПользовательскиеНастройкиКоличества - Булево +// * ДополнитьКомплектВнешнимиПечатнымиФормами - Булево +// * ФиксированныйКомплект - Булево +// * ДополнительныеПараметры - Структура +// * НеВыполнятьЗаписьВФорме - Булево +// * ТребуетсяРасширениеРаботыСФайлами - Булево +// * СкрытаФункциональнымиОпциями - Булево +// * УникальныйИдентификатор - Строка +// * Отключена - Булево +// * ИмяКомандыНаФорме - Строка +// * УсловияВидимостиПоТипамОбъектов - Соответствие из КлючИЗначение: +// ** Ключ - ОписаниеТипов - тип объекта +// ** Значение - Структура +// * ВыполнятьВФоновомЗадании - Булево +// * ИдентификаторМакета - Строка +// * ТипИсточника - Тип +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных +// +Процедура ДобавитьКомандыВыгрузкиОбъекта(КомандыВыгрузки, ОбъектМетаданных) + + Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных, Ложь); + Если Владелец = Неопределено Тогда + Возврат; + КонецЕсли; + + Если КомандыВыгрузки.Колонки.Найти("ИдентификаторМакета") = Неопределено Тогда + КомандыВыгрузки.Колонки.Добавить("ИдентификаторМакета", Новый ОписаниеТипов("Строка")); + КонецЕсли; + Если КомандыВыгрузки.Колонки.Найти("ТипИсточника") = Неопределено Тогда + КомандыВыгрузки.Колонки.Добавить("ТипИсточника", Новый ОписаниеТипов("Тип")); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | МакетыПечатныхФорм.Идентификатор КАК Идентификатор, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА ТИПЗНАЧЕНИЯ(ВЫРАЗИТЬ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных КАК Справочник.ИдентификаторыОбъектовМетаданных).ЗначениеПустойСсылки) + | КОГДА ТИПЗНАЧЕНИЯ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | ТОГДА ТИПЗНАЧЕНИЯ(ВЫРАЗИТЬ(МакетыПечатныхФормИсточникиДанных.ИсточникДанных КАК Справочник.ИдентификаторыОбъектовРасширений).ЗначениеПустойСсылки) + | ИНАЧЕ НЕОПРЕДЕЛЕНО + | КОНЕЦ КАК ТипИсточника, + | МакетыПечатныхФорм.Представление КАК Представление, + | МакетыПечатныхФорм.УсловиеВидимости КАК УсловияВидимости, + | МакетыПечатныхФорм.Ссылка КАК Ссылка, + | МакетыПечатныхФорм.ФорматСохраненияОбъекта КАК ФорматСохранения + |ИЗ + | Справочник.МакетыПечатныхФорм.ИсточникиДанных КАК МакетыПечатныхФормИсточникиДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.МакетыПечатныхФорм КАК МакетыПечатныхФорм + | ПО МакетыПечатныхФормИсточникиДанных.Ссылка = МакетыПечатныхФорм.Ссылка + |ГДЕ + | МакетыПечатныхФормИсточникиДанных.ИсточникДанных = &Владелец + | И МакетыПечатныхФорм.Используется + | И МакетыПечатныхФорм.МакетДляВыгрузкиОбъекта + | И НЕ МакетыПечатныхФорм.ПометкаУдаления + | И МакетыПечатныхФорм.ФорматСохраненияОбъекта <> ЗНАЧЕНИЕ(Перечисление.ФорматыВыгрузкиОбъектов.ПустаяСсылка)"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("Владелец", Владелец); + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + КлючиПараметровОбработчика = "ИдентификаторМакета,ТипИсточника,ФорматСохранения"; + + Пока Выборка.Следующий() Цикл + + КомандаВыгрузки = КомандыВыгрузки.Добавить(); + ЗаполнитьЗначенияСвойств(КомандаВыгрузки, Выборка); + КомандаВыгрузки.Идентификатор = "ПФ_" + Строка(КомандаВыгрузки.Идентификатор); + КомандаВыгрузки.МенеджерПечати = "УправлениеПечатью"; + КомандаВыгрузки.ИдентификаторМакета = Строка(Выборка.Идентификатор); + КомандаВыгрузки.УникальныйИдентификатор = Строка(Выборка.Идентификатор); + КомандаВыгрузки.ВыполнятьВФоновомЗадании = Ложь; + + КомандаВыгрузки.ДополнительныеПараметры = Новый Структура(КлючиПараметровОбработчика); + КомандаВыгрузки.ДополнительныеПараметры.ИдентификаторМакета = Строка(Выборка.Идентификатор); + КомандаВыгрузки.ДополнительныеПараметры.ТипИсточника = Выборка.ТипИсточника; + КомандаВыгрузки.ДополнительныеПараметры.ФорматСохранения = Выборка.ФорматСохранения; + + УсловияВидимостиХранилище = Выборка.УсловияВидимости; // ХранилищеЗначения + УсловияВидимости = УсловияВидимостиХранилище.Получить(); + + Если ЗначениеЗаполнено(УсловияВидимости) Тогда + + Для Каждого Условие Из УсловияВидимости Цикл + + ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды( + КомандаВыгрузки, + Условие.Реквизит, + Условие.Значение, + Условие.ВидСравнения); + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция СформироватьДанныеДляВыгрузки(Знач ИмяМенеджераПечати, ТаблицаОбъектовПоМакетам, Знач КодЯзыка = Неопределено) + + КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(Новый Массив); + КоллекцияПечатныхФорм.Колонки.Добавить( + "ФорматСохранения", + Новый ОписаниеТипов("ПеречислениеСсылка.ФорматыВыгрузкиОбъектов")); + КоллекцияПечатныхФорм.Колонки.Добавить("СтруктураВыгрузки"); + + ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); + Если ЗначениеЗаполнено(КодЯзыка) Тогда + ПараметрыВывода.КодЯзыка = КодЯзыка; + КонецЕсли; + + ИменаМакетов = ТаблицаОбъектовПоМакетам.ВыгрузитьКолонку("ИмяМакета"); + ДанныеМакетов = Справочники.МакетыПечатныхФорм.ДанныеМакетов(ИменаМакетов); + МассивФорматовБезИспользованияТД = ФорматыВыгрузкиБезИспользованияТабличногоДокумента(); + + ОбъектыВыгрузки = Новый СписокЗначений; + + Для Каждого СтрокаТаблицы Из ТаблицаОбъектовПоМакетам Цикл + + ИмяМакета = СтрокаТаблицы.ИмяМакета; + МассивОбъектов = СтрокаТаблицы.МассивОбъектов; + + ФорматСохранения = ДанныеМакетов[ИмяМакета].ФорматСохраненияОбъекта; + ДопустимыеТипыОбъектовВыгрузки = ДанныеМакетов[ИмяМакета].ТипыИсточников; + ПредставлениеМакета = ДанныеМакетов[ИмяМакета].Представление; + + Идентификатор = ИмяМакета; + + ОбъектыСоответствующиеМакетуВыгрузки = ПроверкаСоответствияОбъектовМакетуВыгрузки( + МассивОбъектов, + ДопустимыеТипыОбъектовВыгрузки); + + ВременнаяКоллекцияДляОднойПечатнойФормы = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(Идентификатор); + ВыгрузкаБезИспользованияТД = (МассивФорматовБезИспользованияТД.Найти(ФорматСохранения) <> Неопределено); + + ТипФорматСохранения = Новый ОписаниеТипов("ПеречислениеСсылка.ФорматыВыгрузкиОбъектов"); + ВременнаяКоллекцияДляОднойПечатнойФормы.Колонки.Добавить("ФорматСохранения", ТипФорматСохранения); + ВременнаяКоллекцияДляОднойПечатнойФормы.Колонки.Добавить("СтруктураВыгрузки"); + + Если ОбъектыСоответствующиеМакетуВыгрузки <> Неопределено Тогда + + Если ВыгрузкаБезИспользованияТД Тогда + + СлужебныеПараметры = Новый Структура; + СлужебныеПараметры.Вставить("ПараметрыВывода", ПараметрыВывода); + СлужебныеПараметры.Вставить("ФорматСохранения", ФорматСохранения); + + // @skip-check query-in-loop - Малый цикл + НачатьПодготовкуКВыгрузке( + ОбъектыСоответствующиеМакетуВыгрузки, + ВременнаяКоллекцияДляОднойПечатнойФормы, + СлужебныеПараметры); + Иначе + + ПараметрыПечати = Новый Структура; + // @skip-check query-in-loop - Малый цикл + УправлениеПечатью.Печать( + ОбъектыСоответствующиеМакетуВыгрузки, + ПараметрыПечати, + ВременнаяКоллекцияДляОднойПечатнойФормы, + ОбъектыВыгрузки, + ПараметрыВывода); + + КонецЕсли; + + КонецЕсли; + + // обновление коллекции + Отказ = ВременнаяКоллекцияДляОднойПечатнойФормы.Количество() = 0; + ОбновитьКоллекцию( + КоллекцияПечатныхФорм, + ВременнаяКоллекцияДляОднойПечатнойФормы, + ИмяМакета, + ФорматСохранения, + Отказ); + + // Вызов исключения при возникновении ошибки. + Если Отказ Тогда + + ШаблонСообщения = НСтр("ru = 'Не удалось выполнить выгрузку по шаблону ""%1"" (""%2""). Обратитесь к администратору.'"); + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + ПредставлениеМакета, + ИмяМакета); + ВызватьИсключение ТекстСообщенияОбОшибке; + + КонецЕсли; + + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм); + Результат.Вставить("ОбъектыВыгрузки", ОбъектыВыгрузки); + Результат.Вставить("ПараметрыВывода", ПараметрыВывода); + + Возврат Результат; + +КонецФункции + +Функция ПроверкаСоответствияОбъектовМакетуВыгрузки(МассивОбъектов, ДопустимыеТипыОбъектовВыгрузки) + + // Проверка соответствия выгружаемых объектов выбранному макету выгрузки. + ОбъектыСоответствующиеМакетуВыгрузки = МассивОбъектов; + Если ДопустимыеТипыОбъектовВыгрузки <> Неопределено И ДопустимыеТипыОбъектовВыгрузки.Количество() > 0 Тогда + + Если ТипЗнч(МассивОбъектов) = Тип("Массив") Тогда + + ОбъектыСоответствующиеМакетуВыгрузки = Новый Массив; + Для Каждого Объект Из МассивОбъектов Цикл + + Если ДопустимыеТипыОбъектовВыгрузки.Найти(ТипЗнч(Объект)) = Неопределено Тогда + СообщитьВыгрузкаНедоступна(Объект); + Иначе + ОбъектыСоответствующиеМакетуВыгрузки.Добавить(Объект); + КонецЕсли; + + КонецЦикла; + + Если ОбъектыСоответствующиеМакетуВыгрузки.Количество() = 0 Тогда + ОбъектыСоответствующиеМакетуВыгрузки = Неопределено; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат ОбъектыСоответствующиеМакетуВыгрузки; + +КонецФункции + +Процедура ОбновитьКоллекцию(КоллекцияПечатныхФорм, ВременнаяКоллекция, ИмяМакета, ФорматСохранения, Отказ) + + Для Каждого ВременнаяПечатнаяФорма Из ВременнаяКоллекция Цикл + + Если НЕ ВременнаяПечатнаяФорма.ОфисныеДокументы = Неопределено Тогда + ВременнаяПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент; + КонецЕсли; + + Если Не УправлениеПечатью.МакетСуществует(ВременнаяПечатнаяФорма.ПолныйПутьКМакету) Тогда + ВременнаяПечатнаяФорма.ПолныйПутьКМакету = ""; + КонецЕсли; + + Если ВременнаяПечатнаяФорма.ТабличныйДокумент <> Неопределено + ИЛИ ВременнаяПечатнаяФорма.СтруктураВыгрузки <> Неопределено Тогда + + НоваяКоллекция = КоллекцияПечатныхФорм.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКоллекция, ВременнаяПечатнаяФорма); + Если ВременнаяКоллекция.Количество() = 1 Тогда + + НоваяКоллекция.ИмяМакета = ИмяМакета; + НоваяКоллекция.ИмяВРЕГ = ВРег(ИмяМакета); + + КонецЕсли; + + Если ВременнаяПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда + + НоваяКоллекция.Защита = ВременнаяПечатнаяФорма.ТабличныйДокумент.Защита; + + КонецЕсли; + + НоваяКоллекция.ФорматСохранения = ФорматСохранения; + + Иначе + Отказ = Истина; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура НачатьПодготовкуКВыгрузке(МассивОбъектов, КоллекцияПечатныхФорм, СлужебныеПараметры) + + ПараметрыВывода = СлужебныеПараметры.ПараметрыВывода; + ФорматСохранения = СлужебныеПараметры.ФорматСохранения; + + Если КоллекцияПечатныхФорм.Колонки.Найти("СтруктураВыгрузки") = Неопределено Тогда + КоллекцияПечатныхФорм.Колонки.Добавить("СтруктураВыгрузки"); + КонецЕсли; + + Если КоллекцияПечатныхФорм.Колонки.Найти("ФорматСохранения") = Неопределено Тогда + + ТипФорматСохранения = Новый ОписаниеТипов("ПеречислениеСсылка.ФорматыВыгрузкиОбъектов"); + КоллекцияПечатныхФорм.Колонки.Добавить("ФорматСохранения", ТипФорматСохранения); + + КонецЕсли; + + КодЯзыка = ПараметрыВывода.КодЯзыка; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(МассивОбъектов[0]); + Если УправлениеПечатью.НастройкиПечатиОбъекта(МенеджерОбъекта).ПриОпределенииПолучателей Тогда + + МенеджерОбъекта.ПриОпределенииПолучателей( + ПараметрыВывода.ПараметрыОтправки, + МассивОбъектов, + КоллекцияПечатныхФорм); + + КонецЕсли; + + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + + ПечатнаяФорма.ДоступенВыводНаДругихЯзыках = Истина; + ПечатнаяФорма.ПолныйПутьКМакету = ПечатнаяФорма.ИмяМакета; + ПечатнаяФорма.СинонимМакета = УправлениеПечатью.ПредставлениеМакета(ПечатнаяФорма.ПолныйПутьКМакету, КодЯзыка); + // @skip-check query-in-loop - Небольшое количество итераций цикла с запросом к таблице РегистрСведений.ПользовательскиеМакетыПечати + // с заведомо небольшим количеством записей + Макет = УправлениеПечатью.МакетПечатнойФормы(ПечатнаяФорма.ПолныйПутьКМакету, КодЯзыка); + Результат = СформироватьСтруктуруДляВыгрузки( + Макет, + ФорматСохранения, + МассивОбъектов, + КодЯзыка); + + Если ТипЗнч(Результат) = Тип("Соответствие") Тогда + ПечатнаяФорма.СтруктураВыгрузки = Результат; + Иначе + ПечатнаяФорма.СтруктураВыгрузки = Неопределено; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращаемое значение: +// Структура : +// * ЭтоТаблица - Булево +// * ЭтоСтрокаТаблицы - Булево +// * ЭтоОбласть - Булево +// * ИмяТаблицы - Строка +// * ИменаКолонок - Структура +// * ИмяОбласти - Строка +// * ПредставлениеСтрокиТаблицы - Строка +// * КоличествоДанных - Число +// * ТипыКолонок - Соответствие из КлючИЗначение: +// ** Ключ - Строка +// ** Значение - ОписаниеТипов +// +Функция НоваяСтруктураДанных() + + Структура = Новый Структура; + Структура.Вставить("ЭтоТаблица", Ложь); + Структура.Вставить("ЭтоСтрокаТаблицы", Ложь); + Структура.Вставить("ЭтоОбласть", Ложь); + Структура.Вставить("ЭтоПараметр", Ложь); + Структура.Вставить("ИмяТаблицы", ""); + Структура.Вставить("ИменаКолонок", Новый Структура); + Структура.Вставить("ИмяОбласти", ""); + Структура.Вставить("ПредставлениеСтрокиТаблицы", ""); + Структура.Вставить("КоличествоДанных", 0); + Структура.Вставить("ТипыКолонок", Новый Соответствие); + + Возврат Структура; + +КонецФункции + +Функция РазложитьИмяОбласти(ПолноеИмяОбласти, Разделитель) + + Результат = Новый Структура; + Результат.Вставить("ИмяОбласти", ПолноеИмяОбласти); + Результат.Вставить("ИмяВложеннойОбласти", НСтр("ru = 'СтрокаТаблицы'")); + + Если СтрНайти(ПолноеИмяОбласти, Разделитель,, 2) = 0 Тогда + Возврат Результат; + КонецЕсли; + + МассивИмен = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОбласти, Разделитель, Истина); + Если МассивИмен.Количество() > 1 Тогда + + НомерПозиции = СтрНайти(ПолноеИмяОбласти, МассивИмен[0]); + ИмяОбласти = Лев(ПолноеИмяОбласти, НомерПозиции - 1) + МассивИмен[0]; + ИмяВложеннойОбласти = Прав(ПолноеИмяОбласти, СтрДлина(ПолноеИмяОбласти) - СтрДлина(ИмяОбласти) - 1); + + Результат.ИмяОбласти = ИмяОбласти; + Результат.ИмяВложеннойОбласти = ИмяВложеннойОбласти; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// Структура - новая структура параметров: +// * ЭтоОбласть - Булево +// * ПолныйПуть - Строка +// * Значение - Произвольный +// * УсловноеОформление - Строка +// * ИмяПараметра - Строка +// * Выводить - Булево +// +Функция НоваяСтруктураПараметра() + + Структура = Новый Структура; + Структура.Вставить("ЭтоПараметр", Истина); + Структура.Вставить("ЭтоОбласть", Ложь); + Структура.Вставить("ПолныйПуть", ""); + Структура.Вставить("Значение"); + Структура.Вставить("УсловноеОформление", ""); + Структура.Вставить("ИмяПараметра", ""); + Структура.Вставить("ТипПоля", ""); + Структура.Вставить("Выводить", Истина); + Структура.Вставить("КодЯзыка", ""); + + Возврат Структура; + +КонецФункции + +// Возвращаемое значение: +// Структура - новая структура для расчета параметра: +// * НастройкиФорматаПолей - Соответствие из КлючИЗначение: +// ** Ключ - Строка +// ** Значение - Строка +// * ТипыПолейПараметров - Соответствие из КлючИЗначение: +// ** Ключ - Строка +// ** Значение - ОписаниеТипов +// * КодЯзыка - Строка +// * Макет - ТабличныйДокумент +// * НомерСтрокиТабличнойЧасти - Число +// * НомерСтрокиИмениПараметра - Число +// * НомерСтрокиПараметра - Число +// * НомерКолонкиИмениПараметра - Число +// * НомерКолонкиПараметра - Число +// +Функция НоваяСтруктураДляРасчетаПараметра() + + Структура = Новый Структура; + Структура.Вставить("НастройкиФорматаПолей", Новый Соответствие); + Структура.Вставить("ТипыПолейПараметров", Новый Соответствие); + Структура.Вставить("КодЯзыка", ""); + Структура.Вставить("Макет", Новый ТабличныйДокумент); + Структура.Вставить("ИмяТаблицы", ""); + Структура.Вставить("НомерСтрокиТабличнойЧасти", 0); + Структура.Вставить("НомерСтрокиИмениПараметра", 0); + Структура.Вставить("НомерСтрокиПараметра", 0); + Структура.Вставить("НомерКолонкиИмениПараметра", 1); + Структура.Вставить("НомерКолонкиПараметра", 2); + + Возврат Структура; + +КонецФункции + +Функция ЯчейкаПринадлежитОбласти(ТаблицаОбластей, МассивОбработанных, НомерСтроки) + + Результат = Новый Структура; + Результат.Вставить("ЯчейкаПринадлежитОбласти", Ложь); + Результат.Вставить("СтрокаОбрабатываемойОбласти", Неопределено); + + Для Каждого СтрокаОбрабатываемойОбласти Из ТаблицаОбластей Цикл + + Результат.СтрокаОбрабатываемойОбласти = СтрокаОбрабатываемойОбласти; + Если МассивОбработанных.Найти(СтрокаОбрабатываемойОбласти.Имя) <> Неопределено + ИЛИ СтрокаОбрабатываемойОбласти.ЭтоОбластьУсловияВывода Тогда + Продолжить; + КонецЕсли; + + Если СтрокаОбрабатываемойОбласти.Верх <= НомерСтроки + И СтрокаОбрабатываемойОбласти.Низ >= НомерСтроки Тогда + + Результат.ЯчейкаПринадлежитОбласти = Истина; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ЯчейкаПринадлежитТаблице(ТаблицыМакета, НомерСтроки) + + Результат = Новый Структура; + Результат.Вставить("ЭтоТаблица", Ложь); + Результат.Вставить("ТекущаяСтрокаТаблицыМакета", Неопределено); + + Для Каждого ТекущаяСтрокаТаблицыМакета Из ТаблицыМакета Цикл + + Если ТекущаяСтрокаТаблицыМакета.Верх <= НомерСтроки + И ТекущаяСтрокаТаблицыМакета.Низ >= НомерСтроки Тогда + + Результат.ЭтоТаблица = Истина; + Результат.ТекущаяСтрокаТаблицыМакета = ТекущаяСтрокаТаблицыМакета; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СтруктураТекущихДанных(СтрокаОбрабатываемойОбласти, МассивОбработанных, ИмяТаблицыВладельца = Неопределено, НомерСтрокиВладельца = Неопределено) + + ТекущиеДанные = Новый Структура; + ТекущиеДанные.Вставить("СтрокаТаблицы", СтрокаОбрабатываемойОбласти); + ТекущиеДанные.Вставить("МассивОбработанных", МассивОбработанных); + ТекущиеДанные.Вставить("ИмяТаблицыВладельца", ИмяТаблицыВладельца); + ТекущиеДанные.Вставить("НомерСтрокиВладельца", НомерСтрокиВладельца); + + Возврат ТекущиеДанные; + +КонецФункции + +Функция СформироватьДанныеВыгрузки(МассивОбъектов, ДанныеПечати, ДопДанные) + + Результат = Новый Соответствие; + + Для Каждого Ссылка Из МассивОбъектов Цикл + + ДанныеОбъекта = ДанныеПечати[Ссылка]; + ИсточникДанных = Новый Соответствие; + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ИсточникДанных, ДанныеОбъекта); + + ДанныеИсточника = Новый Структура; + ДанныеИсточника.Вставить("ДанныеОбъекта", ДанныеОбъекта); + ДанныеИсточника.Вставить("ИсточникДанныхПереданный", ИсточникДанных); + + МассивОбработанных = Новый Массив; + СчДанных = 0; + ИмяОбласти = НСтр("ru = 'Документ'"); + + СтруктураСДанными = НоваяСтруктураДанных(); + СтруктураСДанными.ИмяОбласти = ИмяОбласти; + ОбъектВСтруктуру(СтруктураСДанными, ДанныеИсточника, ДопДанные, МассивОбработанных, СчДанных); + + Результат.Вставить(Ссылка, СтруктураСДанными); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ОбъектВСтруктуру(СтруктураСДанными, ДанныеИсточника, ДопДанные, МассивОбработанных, СчДанных) + + Макет = ДопДанные.Макет; + ТаблицаОбластей = ДопДанные.ТаблицаОбластей; + + Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл + + Область = Макет.Область(НомерСтроки, 1); + ТекстЯчейки = Область.Текст; + + Если ПустаяСтрока(ТекстЯчейки) Тогда + Продолжить; + КонецЕсли; + + РезультатПроверки = ЯчейкаПринадлежитОбласти(ТаблицаОбластей, МассивОбработанных, НомерСтроки); + ЯчейкаПринадлежитОбласти = РезультатПроверки.ЯчейкаПринадлежитОбласти; + СтрокаОбрабатываемойОбласти = РезультатПроверки.СтрокаОбрабатываемойОбласти; + + Если НЕ ЯчейкаПринадлежитОбласти Тогда + + СтрокуМакетаВСтруктуру( + СтруктураСДанными, + ДанныеИсточника, + ДопДанные, + МассивОбработанных, + НомерСтроки, + СтрокаОбрабатываемойОбласти, + СчДанных); + + Иначе + + ТекущиеДанные = СтруктураТекущихДанных(СтрокаОбрабатываемойОбласти, МассивОбработанных); + СтруктураОбласти = ОбластьМакетаВСтруктуру(ДанныеИсточника, ДопДанные, ТекущиеДанные); + + Если СтруктураОбласти <> Неопределено + И СтруктураОбласти.КоличествоДанных > 0 Тогда + + СчДанных = СчДанных + 1; + СчДанныхСтрокой = XMLСтрока(СчДанных); + СтруктураСДанными.Вставить("Данные_" + СчДанныхСтрокой, СтруктураОбласти); + СтруктураСДанными.КоличествоДанных = СчДанных; + + КонецЕсли; + + НомерСтроки = СтрокаОбрабатываемойОбласти.Низ; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура СтрокуМакетаВСтруктуру(СтруктураСДанными, ДанныеИсточника, ДопДанные, МассивОбработанных, НомерСтроки, СтрокаОбрабатываемойОбласти, СчДанных) + + ТаблицыМакета = ДопДанные.ТаблицыМакета; + ТаблицаОбластей = ДопДанные.ТаблицаОбластей; + ИмяТаблицы = ""; + НомерСтрокиТабличнойЧасти = 0; + + РезультатПроверки = ЯчейкаПринадлежитТаблице(ТаблицыМакета, НомерСтроки); + ЭтоТаблица = РезультатПроверки.ЭтоТаблица; + ТекущаяСтрокаТаблицыМакета = РезультатПроверки.ТекущаяСтрокаТаблицыМакета; + + Если ЭтоТаблица Тогда + + ТаблицаОбластейСтрок = ТаблицаОбластей.Скопировать(); + ТаблицаОбластейСтрок.Очистить(); + СтрокаОбрабатываемойОбласти = ТаблицаОбластейСтрок.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаОбрабатываемойОбласти, ТекущаяСтрокаТаблицыМакета); + СтрокаОбрабатываемойОбласти.ИмяТаблицы = СтрокаОбрабатываемойОбласти.Имя; + СтрокаОбрабатываемойОбласти.ЭтоТаблица = Истина; + ЭтоУсловиеВывода = НЕ ПустаяСтрока(СтрокаОбрабатываемойОбласти.ПараметрРасшифровки); + СтрокаОбрабатываемойОбласти.ЭтоОбластьУсловияВывода = ЭтоУсловиеВывода; + + ТекущиеДанные = СтруктураТекущихДанных(СтрокаОбрабатываемойОбласти, МассивОбработанных); + СтруктураОбласти = ОбластьМакетаВСтруктуру(ДанныеИсточника, ДопДанные, ТекущиеДанные); + + Если СтруктураОбласти <> Неопределено + И СтруктураОбласти.КоличествоДанных > 0 Тогда + + СчДанных = СчДанных + 1; + СчДанныхСтрокой = XMLСтрока(СчДанных); + СтруктураСДанными.Вставить("Данные_" + СчДанныхСтрокой, СтруктураОбласти); + СтруктураСДанными.КоличествоДанных = СчДанных; + + КонецЕсли; + + НомерСтроки = СтрокаОбрабатываемойОбласти.Низ; + + Иначе + + ДанныеДляРасчетаПараметра = НоваяСтруктураДляРасчетаПараметра(); + ЗаполнитьЗначенияСвойств(ДанныеДляРасчетаПараметра, ДопДанные); + ДанныеДляРасчетаПараметра.ИмяТаблицы = ИмяТаблицы; + ДанныеДляРасчетаПараметра.НомерСтрокиТабличнойЧасти = НомерСтрокиТабличнойЧасти; + ДанныеДляРасчетаПараметра.НомерСтрокиИмениПараметра = НомерСтроки; + ДанныеДляРасчетаПараметра.НомерСтрокиПараметра = НомерСтроки; + + ДанныеПараметраСтруктура = ДанныеПараметра(ДанныеИсточника, ДанныеДляРасчетаПараметра); + + ДобавитьВСтруктуру = (ДанныеПараметраСтруктура <> Неопределено + И ДанныеПараметраСтруктура.Выводить); + + Если ДобавитьВСтруктуру Тогда + + СчДанных = СчДанных + 1; + СчДанныхСтрокой = XMLСтрока(СчДанных); + СтруктураСДанными.Вставить("Данные_" + СчДанныхСтрокой, ДанныеПараметраСтруктура); + СтруктураСДанными.КоличествоДанных = СчДанных; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция СформироватьДанныеВыгрузкиДляDBF(Знач МассивОбъектов, Знач ДанныеПечати, Знач ДопДанные) + + Результат = Новый Соответствие; + + Для Каждого Ссылка Из МассивОбъектов Цикл + + ДанныеОбъекта = ДанныеПечати[Ссылка]; + ИсточникДанных = Новый Соответствие; + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ИсточникДанных, ДанныеОбъекта); + + ДанныеИсточника = Новый Структура; + ДанныеИсточника.Вставить("ДанныеОбъекта", ДанныеОбъекта); + ДанныеИсточника.Вставить("ИсточникДанныхПереданный", ИсточникДанных); + + СтруктураСДанными = ОбластьМакетаВСтруктуруДляDBF(ДанныеИсточника, ДопДанные); + Результат.Вставить(Ссылка, СтруктураСДанными); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СтрокаТаблицыОбластейСодержитТаблицу(СтрокаТаблицы, ИмяТаблицыВладельца) + + ЭтоТаблица = СтрокаТаблицы.ЭтоТаблица; + Если ЭтоТаблица Тогда + + ИмяТаблицы = СокрЛП(СтрокаТаблицы.ИмяТаблицы); + ЭтоТаблица = (ИмяТаблицы <> ИмяТаблицыВладельца); // Если ЭтоТаблица = Ложь - это вложенная область таблицы, обрабатываем как область + + Иначе + ИмяТаблицы = ИмяТаблицыВладельца; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ЭтоТаблица", ЭтоТаблица); + Результат.Вставить("ИмяТаблицы", ИмяТаблицы); + + Возврат Результат; + +КонецФункции + +Процедура ДополнитьИсточникДанныхДаннымиТаблицы(Знач ИмяТаблицы, Знач ДанныеСтрокиТабличнойЧастиПараметры, ИсточникДанныхДляОбласти) + + Для Каждого КлючИЗначение Из ДанныеСтрокиТабличнойЧастиПараметры Цикл + ИсточникДанныхДляОбласти[ИмяТаблицы + "." + КлючИЗначение.Ключ] = КлючИЗначение.Значение; + КонецЦикла; + +КонецПроцедуры + +Функция ОбластьМакетаВСтруктуру(ДанныеИсточникаПереданные, ДопДанные, ТекущиеДанныеПереданные) + + ДанныеОбъекта = ДанныеИсточникаПереданные.ДанныеОбъекта; + ИсточникДанныхПереданный = ДанныеИсточникаПереданные.ИсточникДанныхПереданный; + + Макет = ДопДанные.Макет; + СтрокаТаблицы = ТекущиеДанныеПереданные.СтрокаТаблицы; + МассивОбработанных = ТекущиеДанныеПереданные.МассивОбработанных; + ИмяТаблицыВладельца = ТекущиеДанныеПереданные.ИмяТаблицыВладельца; + НомерСтрокиВладельца = ТекущиеДанныеПереданные.НомерСтрокиВладельца; + ПолноеИмяОбласти = СокрЛП(СтрокаТаблицы.Имя); + + РезультатПроверки = СтрокаТаблицыОбластейСодержитТаблицу(СтрокаТаблицы, ИмяТаблицыВладельца); + ЭтоТаблица = РезультатПроверки.ЭтоТаблица; + ИмяТаблицы = РезультатПроверки.ИмяТаблицы; + + МассивОбработанных.Добавить(ПолноеИмяОбласти); + КоличествоПовторений = 1; + ПредставлениеСтрокиТаблицы = ""; + ИмяОбласти = ПолноеИмяОбласти; + МассивВложенных = Новый Массив; + + ИсточникДанныхДляОбласти = Новый Соответствие; + Если ИсточникДанныхПереданный <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ИсточникДанныхДляОбласти, ИсточникДанныхПереданный); + КонецЕсли; + + НомерПервойСтроки = 1; + + Если ЭтоТаблица Тогда + + КоличествоПовторений = ДанныеОбъекта[ИмяТаблицы].Количество(); + + Если ДопДанные.ФорматСохранения = Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда + + РезультатРазбивки = РазложитьИмяОбласти(ПолноеИмяОбласти, "_"); + ИмяОбласти = РезультатРазбивки.ИмяОбласти; + ПредставлениеСтрокиТаблицы = РезультатРазбивки.ИмяВложеннойОбласти; + + КонецЕсли; + + СтруктураТаблицы = НоваяСтруктураДанных(); + ЗаполнитьЗначенияСвойств(СтруктураТаблицы, СтрокаТаблицы); + СтруктураТаблицы.ЭтоСтрокаТаблицы = Ложь; + СтруктураТаблицы.ЭтоОбласть = Ложь; + СтруктураТаблицы.ПредставлениеСтрокиТаблицы = ПредставлениеСтрокиТаблицы; + СтруктураТаблицы.ИмяОбласти = ИмяОбласти; + + Если ИмяТаблицыВладельца = ИмяТаблицы Тогда + + КоличествоПовторений = НомерСтрокиВладельца; + НомерПервойСтроки = НомерСтрокиВладельца; + + КонецЕсли; + + КонецЕсли; + + СчСтрокДанных = 0; + Для НомерСтрокиТабличнойЧасти = НомерПервойСтроки По КоличествоПовторений Цикл + + СчДанных = 0; + + СтруктураСДанными = НоваяСтруктураДанных(); + ЗаполнитьЗначенияСвойств(СтруктураСДанными, СтрокаТаблицы); + СтруктураСДанными.ЭтоСтрокаТаблицы = ЭтоТаблица; + СтруктураСДанными.ЭтоТаблица = ЭтоТаблица; + СтруктураСДанными.ЭтоОбласть = НЕ ЭтоТаблица; + СтруктураСДанными.ПредставлениеСтрокиТаблицы = ПредставлениеСтрокиТаблицы; + СтруктураСДанными.ИмяОбласти = ИмяОбласти; + + Если ЭтоТаблица Тогда + + ДанныеСтрокиТабличнойЧастиПараметры = ДанныеОбъекта[ИмяТаблицы][НомерСтрокиТабличнойЧасти]; + ДополнитьИсточникДанныхДаннымиТаблицы( + ИмяТаблицы, + ДанныеСтрокиТабличнойЧастиПараметры, + ИсточникДанныхДляОбласти); + + КонецЕсли; + + ТекущиеДанныеТабличнойЧасти = Новый Структура; + ТекущиеДанныеТабличнойЧасти.Вставить("СтрокаТаблицы", СтрокаТаблицы); + ТекущиеДанныеТабличнойЧасти.Вставить("НомерСтрокиТабличнойЧасти", НомерСтрокиТабличнойЧасти); + ТекущиеДанныеТабличнойЧасти.Вставить("ИмяТаблицы", ИмяТаблицы); + + ДанныеИсточника = Новый Структура; + ДанныеИсточника.Вставить("ДанныеОбъекта", ДанныеОбъекта); + ДанныеИсточника.Вставить("ИсточникДанныхПереданный", ИсточникДанныхДляОбласти); + + ЗаполнитьСтруктуруСДанными( + СтруктураСДанными, + МассивВложенных, + МассивОбработанных, + ДанныеИсточника, + ДопДанные, + СчДанных, + ТекущиеДанныеТабличнойЧасти); + + ДанныеДляАнализа = Новый Структура; + ДанныеДляАнализа.Вставить("НомерСтрокиТабличнойЧасти", НомерСтрокиТабличнойЧасти); + ДанныеДляАнализа.Вставить("КоличествоПовторений", КоличествоПовторений); + ДанныеДляАнализа.Вставить("МассивВложенных", МассивВложенных); + ДанныеДляАнализа.Вставить("Макет", Макет); + ДанныеДляАнализа.Вставить("ИмяОбласти", ПолноеИмяОбласти); + + АктуализироватьОбработанныеОбласти(МассивОбработанных, ДанныеДляАнализа); + + Если ЭтоТаблица + И СтруктураСДанными.КоличествоДанных > 0 Тогда + + СчСтрокДанных = СчСтрокДанных + 1; + СчСтрокДанныхСтрокой = XMLСтрока(СчСтрокДанных); + СтруктураТаблицы.Вставить("Данные_" + СчСтрокДанныхСтрокой, СтруктураСДанными); + СтруктураТаблицы.КоличествоДанных = СчСтрокДанных; + + КонецЕсли; + + КонецЦикла; + + Если ЭтоТаблица Тогда + Возврат СтруктураТаблицы; + Иначе + Возврат СтруктураСДанными; + КонецЕсли; + +КонецФункции + +Процедура ЗаполнитьСтруктуруСДанными(СтруктураСДанными, МассивВложенных, МассивОбработанных, ДанныеИсточника, ДопДанные, СчДанных, ТекущиеДанныеТабличнойЧасти) + + СтрокаТаблицы = ТекущиеДанныеТабличнойЧасти.СтрокаТаблицы; + ИмяТаблицы = ТекущиеДанныеТабличнойЧасти.ИмяТаблицы; + НомерСтрокиТабличнойЧасти = ТекущиеДанныеТабличнойЧасти.НомерСтрокиТабличнойЧасти; + + Верх = СтрокаТаблицы.Верх; + Низ = СтрокаТаблицы.Низ; + ТаблицаОбластей = ДопДанные.ТаблицаОбластей; + + Для НомерСтроки = Верх По Низ Цикл + + ЭтоСтрокаТекущейОбласти = Истина; + Отбор = Новый Структура; + Отбор.Вставить("Верх", НомерСтроки); + НайденныеОбласти = ТаблицаОбластей.НайтиСтроки(Отбор); + Выводить = Истина; + + Если НайденныеОбласти.Количество() > 0 Тогда + + КонецВложеннойОбласти = 0; + ДанныеДляАнализаИЗаполнения = Новый Структура; + ДанныеДляАнализаИЗаполнения.Вставить("ДанныеИсточника", ДанныеИсточника); + ДанныеДляАнализаИЗаполнения.Вставить("ДопДанные", ДопДанные); + ДанныеДляАнализаИЗаполнения.Вставить("ТекущиеДанныеТабличнойЧасти", ТекущиеДанныеТабличнойЧасти); + ДанныеДляАнализаИЗаполнения.Вставить("НайденныеОбласти", НайденныеОбласти); + ДанныеДляАнализаИЗаполнения.Вставить("НомерСтроки", НомерСтроки); + + ДополнитьСтруктуруДаннымиНайденныхОбластей( + СтруктураСДанными, + МассивВложенных, + МассивОбработанных, + СчДанных, + ДанныеДляАнализаИЗаполнения); + Выводить = ДанныеДляАнализаИЗаполнения.Выводить; + ЭтоСтрокаТекущейОбласти = ДанныеДляАнализаИЗаполнения.ЭтоСтрокаТекущейОбласти; + КонецВложеннойОбласти = ДанныеДляАнализаИЗаполнения.КонецВложеннойОбласти; + + НомерСтроки = Макс(НомерСтроки, КонецВложеннойОбласти); + + КонецЕсли; + + Если ЭтоСтрокаТекущейОбласти + И Выводить Тогда + + ДанныеДляРасчетаПараметра = НоваяСтруктураДляРасчетаПараметра(); + ЗаполнитьЗначенияСвойств(ДанныеДляРасчетаПараметра, ДопДанные); + ДанныеДляРасчетаПараметра.ИмяТаблицы = ИмяТаблицы; + ДанныеДляРасчетаПараметра.НомерСтрокиТабличнойЧасти = НомерСтрокиТабличнойЧасти; + ДанныеДляРасчетаПараметра.НомерСтрокиИмениПараметра = НомерСтроки; + ДанныеДляРасчетаПараметра.НомерСтрокиПараметра = НомерСтроки; + + ДанныеПараметраСтруктура = ДанныеПараметра(ДанныеИсточника, ДанныеДляРасчетаПараметра); + + Если ДанныеПараметраСтруктура = Неопределено + ИЛИ НЕ ДанныеПараметраСтруктура.Выводить Тогда + Продолжить; + КонецЕсли; + + СчДанных = СчДанных + 1; + СчДанныхСтрокой = XMLСтрока(СчДанных); + СтруктураСДанными.Вставить("Данные_" + СчДанныхСтрокой, ДанныеПараметраСтруктура); + СтруктураСДанными.КоличествоДанных = СчДанных; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДополнитьСтруктуруДаннымиНайденныхОбластей(СтруктураСДанными, МассивВложенных, МассивОбработанных, СчДанных, Знач ДанныеДляАнализаИЗаполнения) + + ДанныеИсточника = ДанныеДляАнализаИЗаполнения.ДанныеИсточника; + ДопДанные = ДанныеДляАнализаИЗаполнения.ДопДанные; + ТекущиеДанныеТабличнойЧасти = ДанныеДляАнализаИЗаполнения.ТекущиеДанныеТабличнойЧасти; + НайденныеОбласти = ДанныеДляАнализаИЗаполнения.НайденныеОбласти; + НомерСтроки = ДанныеДляАнализаИЗаполнения.НомерСтроки; + + СтрокаТаблицы = ТекущиеДанныеТабличнойЧасти.СтрокаТаблицы; + ИмяТаблицы = ТекущиеДанныеТабличнойЧасти.ИмяТаблицы; + НомерСтрокиТабличнойЧасти = ТекущиеДанныеТабличнойЧасти.НомерСтрокиТабличнойЧасти; + Верх = СтрокаТаблицы.Верх; + ЭтоТаблица = СтрокаТаблицы.ЭтоТаблица; + + КонецВложеннойОбласти = 0; + Выводить = Истина; + ЭтоСтрокаТекущейОбласти = Истина; + + Для Каждого ТекНайденнаяСтрока Из НайденныеОбласти Цикл + + Если МассивОбработанных.Найти(ТекНайденнаяСтрока.Имя) <> Неопределено + И НомерСтроки = Верх Тогда + Продолжить; + ИначеЕсли ТекНайденнаяСтрока.ЭтоОбластьУсловияВывода Тогда + + Если ЭтоТаблица + И ИмяТаблицы <> ТекНайденнаяСтрока.ИмяТаблицы Тогда + Продолжить; + КонецЕсли; + + ПроверкаУсловияВыводаОбласти( + ДанныеИсточника, + ДопДанные, + ТекНайденнаяСтрока, + КонецВложеннойОбласти, + Выводить); + + Иначе + + ЭтоСтрокаТекущейОбласти = Ложь; + КонецВложеннойОбласти = Макс(КонецВложеннойОбласти, ТекНайденнаяСтрока.Низ); + + ТекущиеДанные = СтруктураТекущихДанных( + ТекНайденнаяСтрока, + МассивОбработанных, + ИмяТаблицы, + НомерСтрокиТабличнойЧасти); + ДанныеСтроки = ОбластьМакетаВСтруктуру(ДанныеИсточника, ДопДанные, ТекущиеДанные); + + ИмяВложеннойОбласти = ТекНайденнаяСтрока.Имя; + МассивВложенных.Добавить(ИмяВложеннойОбласти); + + Если ДанныеСтроки <> Неопределено + И ДанныеСтроки.КоличествоДанных > 0 Тогда + + СчДанных = СчДанных + 1; + СчДанныхСтрокой = XMLСтрока(СчДанных); + СтруктураСДанными.Вставить("Данные_" + СчДанныхСтрокой, ДанныеСтроки); + СтруктураСДанными.КоличествоДанных = СчДанных; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ДанныеДляАнализаИЗаполнения.Вставить("Выводить", Выводить); + ДанныеДляАнализаИЗаполнения.Вставить("КонецВложеннойОбласти", КонецВложеннойОбласти); + ДанныеДляАнализаИЗаполнения.Вставить("ЭтоСтрокаТекущейОбласти", ЭтоСтрокаТекущейОбласти); + +КонецПроцедуры + +Процедура ПроверкаУсловияВыводаОбласти(ДанныеИсточника, ДопДанные, СтрокаТаблицыОбластей, КонецВложеннойОбласти, Выводить) + + ИсточникДанныхДляОбласти = ДанныеИсточника.ИсточникДанныхПереданный; + НастройкиФорматаПолей = ДопДанные.НастройкиФорматаПолей; + КодЯзыка = ДопДанные.КодЯзыка; + ПараметрРасшифровки = СтрокаТаблицыОбластей.ПараметрРасшифровки; + КонецОбласти = СтрокаТаблицыОбластей.Низ; + + Если НЕ ПустаяСтрока(ПараметрРасшифровки) Тогда + + Выводить = УправлениеПечатью.ВычислитьВыражение( + "[" + ПараметрРасшифровки + "]", + ИсточникДанныхДляОбласти, + НастройкиФорматаПолей, + КодЯзыка); + + КонецЕсли; + + Если ТипЗнч(Выводить) = Тип("Булево") + И Не Выводить Тогда + + КонецВложеннойОбласти = Макс(КонецВложеннойОбласти, КонецОбласти); + + КонецЕсли; + +КонецПроцедуры + +Функция НомерПервойЗаполненнойСтрокиКолонки(Знач Макет) + + НомерПервойЗаполненнойСтроки = 0; + НомерПервойЗаполненнойКолонки = 0; + НачалоНайдено = Ложь; + + Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл + + Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл + + Область = Макет.Область(НомерСтроки, НомерКолонки); + + Если НЕ ПустаяСтрока(Область.Текст) Тогда + + НомерПервойЗаполненнойСтроки = НомерСтроки; + НомерПервойЗаполненнойКолонки = НомерКолонки; + НачалоНайдено = Истина; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если НачалоНайдено Тогда + + Прервать; + + КонецЕсли; + + КонецЦикла; + + ДанныеНачалаЗаполнения = Новый Структура; + ДанныеНачалаЗаполнения.Вставить("НомерПервойЗаполненнойСтроки", НомерПервойЗаполненнойСтроки); + ДанныеНачалаЗаполнения.Вставить("НомерПервойЗаполненнойКолонки", НомерПервойЗаполненнойКолонки); + + Возврат ДанныеНачалаЗаполнения; + +КонецФункции + +Функция ОбластьМакетаВСтруктуруДляDBF(ДанныеИсточникаПереданные, ДопДанные) + + ДанныеОбъекта = ДанныеИсточникаПереданные.ДанныеОбъекта; + ТипыПолейПараметров = ДопДанные.ТипыПолейПараметров; + Макет = ДопДанные.Макет; + ТаблицыМакета = ДопДанные.ТаблицыМакета; + + СтруктураСДанными = НоваяСтруктураДанных(); + КоличествоПовторений = 1; + ИмяТаблицы = ""; + + Если ТаблицыМакета.Количество() > 0 Тогда + + СтрокаТаблицы = ТаблицыМакета[0]; + Верх = СтрокаТаблицы.Верх; + ИмяТаблицы = СокрЛП(СтрокаТаблицы.Имя); + КоличествоПовторений = ДанныеОбъекта[ИмяТаблицы].Количество(); + СтруктураСДанными.ЭтоТаблица = Истина; + + Иначе + + ДанныеНачалаЗаполнения = НомерПервойЗаполненнойСтрокиКолонки(Макет); + Верх = ДанныеНачалаЗаполнения.НомерПервойЗаполненнойСтроки + 1; + СтруктураСДанными.ЭтоТаблица = Ложь; + + КонецЕсли; + + СтруктураСДанными.ИмяТаблицы = ИмяТаблицы; + + ШиринаТаблицы = Макет.ШиринаТаблицы; + МассивПолейКолонок = Новый Массив; + ТипыКолонок = Новый Соответствие; + ИменаКолонок = Новый Структура; + + ДанныеМакета = Новый Структура; + ДанныеМакета.Вставить("Макет", Макет); + ДанныеМакета.Вставить("ШиринаТаблицы", ШиринаТаблицы); + ДанныеМакета.Вставить("Верх", Верх); + ДанныеМакета.Вставить("НомерСтроки", 0); + ТекущийНомерСтроки = 0; + + Для НомерСтроки = 1 По Верх - 1 Цикл + + ТекущийНомерСтроки = НомерСтроки; + ДанныеМакета.НомерСтроки = ТекущийНомерСтроки; + КолонкиИПоляТаблицы(ИменаКолонок, МассивПолейКолонок, ТипыКолонок, ТипыПолейПараметров, ДанныеМакета); + + Если МассивПолейКолонок.Количество() > 0 Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если МассивПолейКолонок.Количество() > 0 Тогда + + ДанныеТаблицы = Новый Структура; + ДанныеТаблицы.Вставить("МассивПолейКолонок", МассивПолейКолонок); + ДанныеТаблицы.Вставить("ИменаКолонок", ИменаКолонок); + ДанныеТаблицы.Вставить("КоличествоПовторений", КоличествоПовторений); + ДанныеТаблицы.Вставить("ТипыКолонок", ТипыКолонок); + + СтруктураТаблицыDBF( + СтруктураСДанными, + ДанныеИсточникаПереданные, + ДопДанные, + ДанныеТаблицы, + Верх, + ТекущийНомерСтроки); + + КонецЕсли; + + СтруктураСДанными.ТипыКолонок = ТипыКолонок; + Возврат СтруктураСДанными; + +КонецФункции + +Процедура СтруктураТаблицыDBF(СтруктураСДанными, ДанныеИсточникаПереданные, ДопДанные, ДанныеТаблицы, Верх, ТекущийНомерСтроки) + + МассивПолейКолонок = ДанныеТаблицы.МассивПолейКолонок; + ИменаКолонок = ДанныеТаблицы.ИменаКолонок; + КоличествоПовторений = ДанныеТаблицы.КоличествоПовторений; + ТипыКолонок = ДанныеТаблицы.ТипыКолонок; + + ДанныеОбъекта = ДанныеИсточникаПереданные.ДанныеОбъекта; + ИсточникДанных = ДанныеИсточникаПереданные.ИсточникДанныхПереданный; + + НастройкиФорматаПолей = ДопДанные.НастройкиФорматаПолей; + Макет = ДопДанные.Макет; + КодЯзыка = ДопДанные.КодЯзыка; + ТаблицыМакета = ДопДанные.ТаблицыМакета; + + ИмяТаблицы = СтруктураСДанными.ИмяТаблицы; + НомерСтолбца = МассивПолейКолонок[0]; + ПараметрРасшифровки = Макет.Область(Верх, НомерСтолбца, Верх, НомерСтолбца).ПараметрРасшифровки; + + СтруктураСДанными.ИменаКолонок = ИменаКолонок; + + СчДанных = 0; + Для НомерСтрокиТабличнойЧасти = 1 По КоличествоПовторений Цикл + + Если ТаблицыМакета.Количество() > 0 Тогда + + ДанныеСтрокиТабличнойЧастиПараметры = ДанныеОбъекта[ИмяТаблицы][НомерСтрокиТабличнойЧасти]; + ДополнитьИсточникДанныхДаннымиТаблицы( + ИмяТаблицы, + ДанныеСтрокиТабличнойЧастиПараметры, + ИсточникДанных); + + КонецЕсли; + + СлужебныеДанные = Новый Структура; + СлужебныеДанные.Вставить("ИмяТаблицы", ИмяТаблицы); + СлужебныеДанные.Вставить("НомерСтрокиТабличнойЧасти", НомерСтрокиТабличнойЧасти); + СлужебныеДанные.Вставить("Верх", Верх); + СлужебныеДанные.Вставить("НомерСтроки", ТекущийНомерСтроки); + СлужебныеДанные.Вставить("МассивПолейКолонок", МассивПолейКолонок); + СлужебныеДанные.Вставить("ДопДанные", ДопДанные); + СлужебныеДанные.Вставить("ИсточникДанных", ИсточникДанных); + СлужебныеДанные.Вставить("ДанныеОбъекта", ДанныеОбъекта); + + СтруктураСтроки = НоваяСтруктураДанных(); + СтруктураСтрокиDBF(СтруктураСтроки, ТипыКолонок, СлужебныеДанные); + + Выводить = Истина; + Если НЕ ПустаяСтрока(ПараметрРасшифровки) Тогда + + Выводить = УправлениеПечатью.ВычислитьВыражение( + "[" + ПараметрРасшифровки + "]", + ИсточникДанных, + НастройкиФорматаПолей, + КодЯзыка); + + КонецЕсли; + + Если ТипЗнч(Выводить) = Тип("Булево") + И Не Выводить Тогда + Продолжить; + КонецЕсли; + + СчДанных = СчДанных + 1; + СчДанныхСтрокой = XMLСтрока(СчДанных); + + СтруктураСДанными.Вставить("Данные_" + СчДанныхСтрокой, СтруктураСтроки); + СтруктураСДанными.КоличествоДанных = СчДанных; + + КонецЦикла; + +КонецПроцедуры + +Процедура СтруктураСтрокиDBF(СтруктураСтроки, ТипыКолонок, СлужебныеДанные) + + ИмяТаблицы = СлужебныеДанные.ИмяТаблицы; + НомерСтрокиТабличнойЧасти = СлужебныеДанные.НомерСтрокиТабличнойЧасти; + Верх = СлужебныеДанные.Верх; + НомерСтроки = СлужебныеДанные.НомерСтроки; + МассивПолейКолонок = СлужебныеДанные.МассивПолейКолонок; + ДопДанные = СлужебныеДанные.ДопДанные; + ИсточникДанных = СлужебныеДанные.ИсточникДанных; + ДанныеОбъекта = СлужебныеДанные.ДанныеОбъекта; + + ДанныеДляРасчетаПараметра = НоваяСтруктураДляРасчетаПараметра(); + ЗаполнитьЗначенияСвойств(ДанныеДляРасчетаПараметра, ДопДанные); + ДанныеДляРасчетаПараметра.ИмяТаблицы = ИмяТаблицы; + ДанныеДляРасчетаПараметра.НомерСтрокиТабличнойЧасти = НомерСтрокиТабличнойЧасти; + ДанныеДляРасчетаПараметра.НомерСтрокиИмениПараметра = НомерСтроки; + ДанныеДляРасчетаПараметра.НомерСтрокиПараметра = Верх; + + СчетчикКолонок = 0; + Для Каждого НомерКолонки Из МассивПолейКолонок Цикл + + СчетчикКолонок = СчетчикКолонок + 1; + СчетчикКолонокСтрокой = XMLСтрока(СчетчикКолонок); + НомерКолонкиСтрокой = XMLСтрока(НомерКолонки); + + ДанныеДляРасчетаПараметра.НомерКолонкиИмениПараметра = НомерКолонки; + ДанныеДляРасчетаПараметра.НомерКолонкиПараметра = НомерКолонки; + + ДанныеИсточника = Новый Структура; + ДанныеИсточника.Вставить("ДанныеОбъекта", ДанныеОбъекта); + ДанныеИсточника.Вставить("ИсточникДанныхПереданный", ИсточникДанных); + + ДанныеПараметраСтруктура = ДанныеПараметра(ДанныеИсточника, ДанныеДляРасчетаПараметра); + СтруктураСтроки.Вставить("Данные_" + СчетчикКолонокСтрокой, ДанныеПараметраСтруктура); + СтруктураСтроки.КоличествоДанных = СчетчикКолонок; + Если ТипыКолонок["НомерКолонки_" + НомерКолонкиСтрокой] = Неопределено Тогда + ТипыКолонок.Вставить("НомерКолонки_" + НомерКолонкиСтрокой, ДанныеПараметраСтруктура.ТипПоля); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура КолонкиИПоляТаблицы(ИменаКолонок, МассивПолейКолонок, ТипыКолонок, ТипыПолейПараметров, ДанныеМакета) + + ИмяКолонки = ""; + + Макет = ДанныеМакета.Макет; + ШиринаТаблицы = ДанныеМакета.ШиринаТаблицы; + Верх = ДанныеМакета.Верх; + НомерСтроки = ДанныеМакета.НомерСтроки; + + Для НомерСтолбца = 1 По ШиринаТаблицы Цикл + + НомерСтолбцаСтрокой = XMLСтрока(НомерСтолбца); + ИмяКолонки = Макет.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца).Текст; + + Если НЕ ПустаяСтрока(ИмяКолонки) Тогда + + ИменаКолонок.Вставить("НомерКолонки_" + НомерСтолбцаСтрокой, ИмяКолонки); + МассивПолейКолонок.Добавить(НомерСтолбца); + + КонецЕсли; + + КонецЦикла; + + Для Каждого НомерКолонки Из МассивПолейКолонок Цикл + + НомерКолонкиСтрокой = XMLСтрока(НомерКолонки); + ПолныйПуть = Макет.Область(Верх, НомерКолонки, Верх, НомерКолонки).Текст; + ПолныйПуть = СокрЛП(ПолныйПуть); + ИмяПоля = УправлениеПечатью.ОчиститьКвадратныеСкобки(ПолныйПуть); + ТипПоля = ТипыПолейПараметров[СтрЗаменить(ИмяПоля, ".", "_")]; + ТипыКолонок["НомерКолонки_" + НомерКолонкиСтрокой] = ТипПоля; + + КонецЦикла; + +КонецПроцедуры + +Процедура АктуализироватьОбработанныеОбласти(МассивОбработанных, Знач ДанныеДляАнализа) + + НомерСтрокиТабличнойЧасти = ДанныеДляАнализа.НомерСтрокиТабличнойЧасти; + КоличествоПовторений = ДанныеДляАнализа.КоличествоПовторений; + МассивВложенных = ДанныеДляАнализа.МассивВложенных; + Макет = ДанныеДляАнализа.Макет; + ИмяОбласти = ДанныеДляАнализа.ИмяОбласти; + + Если НомерСтрокиТабличнойЧасти < КоличествоПовторений Тогда + + УдалитьИзМассиваВложенныеОбласти(МассивОбработанных, МассивВложенных); + + Иначе + + ДополнитьМассивОбработанныхОбластейВложеннымиОбластями(МассивОбработанных, Макет, ИмяОбласти); + + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьИзМассиваВложенныеОбласти(МассивОбработанных, Знач МассивВложенных) + + Для Каждого ТекИмяОбласти Из МассивВложенных Цикл + + Область = МассивОбработанных.Найти(ТекИмяОбласти); + Если Область <> Неопределено Тогда + МассивОбработанных.Удалить(Область); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДополнитьМассивОбработанныхОбластейВложеннымиОбластями(МассивОбработанных, Знач Макет, Знач ИмяОбласти) + + Для Каждого ТекущаяОбласть Из Макет.Области Цикл + + Если ТекущаяОбласть.Имя = ИмяОбласти Тогда + + ВложенныеОбласти = Макет.ПолучитьОбласть(ИмяОбласти).Области; + Для Каждого ТекВложеннаяОбласть Из ВложенныеОбласти Цикл + + ИмяТекущейОбласти = ТекВложеннаяОбласть.Имя; + Если МассивОбработанных.Найти(ИмяТекущейОбласти) = Неопределено Тогда + МассивОбработанных.Добавить(ИмяТекущейОбласти); + КонецЕсли; + + КонецЦикла; + + Прервать; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ДанныеПараметра(ДанныеИсточника, ДанныеДляРасчетаПараметра) + + ИсточникДанныхЗначения = ДанныеИсточника.ИсточникДанныхПереданный; + + НастройкиФорматаПолей = ДанныеДляРасчетаПараметра.НастройкиФорматаПолей; + ТипыПолейПараметров = ДанныеДляРасчетаПараметра.ТипыПолейПараметров; + КодЯзыка = ДанныеДляРасчетаПараметра.КодЯзыка; + Макет = ДанныеДляРасчетаПараметра.Макет; + НомерСтрокиТабличнойЧасти = ДанныеДляРасчетаПараметра.НомерСтрокиТабличнойЧасти; + НомерСтрокиИмениПараметра = ДанныеДляРасчетаПараметра.НомерСтрокиИмениПараметра; + НомерКолонкиИмениПараметра = ДанныеДляРасчетаПараметра.НомерКолонкиИмениПараметра; + НомерСтрокиПараметра = ДанныеДляРасчетаПараметра.НомерСтрокиПараметра; + НомерКолонкиПараметра = ДанныеДляРасчетаПараметра.НомерКолонкиПараметра; + + ИмяПараметра = СокрЛП(Макет.Область( + НомерСтрокиИмениПараметра, + НомерКолонкиИмениПараметра, + НомерСтрокиИмениПараметра, + НомерКолонкиИмениПараметра).Текст); + + Если ПустаяСтрока(ИмяПараметра) Тогда + Возврат Неопределено; + КонецЕсли; + + ПолныйПуть = СокрЛП(Макет.Область( + НомерСтрокиПараметра, + НомерКолонкиПараметра, + НомерСтрокиПараметра, + НомерКолонкиПараметра).Текст); + ПараметрРасшифровки = СокрЛП(Макет.Область( + НомерСтрокиПараметра, + НомерКолонкиПараметра, + НомерСтрокиПараметра, + НомерКолонкиПараметра).ПараметрРасшифровки); + + ИмяПоля = УправлениеПечатью.ОчиститьКвадратныеСкобки(ПолныйПуть); + ТипПоля = ТипыПолейПараметров[СтрЗаменить(ИмяПоля, ".", "_")]; + + СтруктураПараметра = НоваяСтруктураПараметра(); + СтруктураПараметра.ПолныйПуть = ПолныйПуть; + СтруктураПараметра.УсловноеОформление = НастройкиФорматаПолей[ИмяПоля]; + СтруктураПараметра.ИмяПараметра = СтрЗаменить(ИмяПараметра, " ", ""); + СтруктураПараметра.КодЯзыка = КодЯзыка; + + Если СтрНайти(ПолныйПуть, "[") = 0 Тогда + + ЗначениеПоля = ПолныйПуть; + ТипПоля = ОбщегоНазначения.ОписаниеТипаСтрока(СтрДлина(Строка(ЗначениеПоля))); + + Иначе + + Результат = ЗначениеПоляИсточника( + ДанныеИсточника, + ДанныеДляРасчетаПараметра, + ИмяПоля, + ПолныйПуть, + НомерСтрокиТабличнойЧасти); + ЗначениеПоля = Результат.ЗначениеПоля; + + Если ЗначениеПоля <> Неопределено + И Результат.РезультатВычислен Тогда + + ТипПоля = ТипПоляПоЗначению(ЗначениеПоля); + + КонецЕсли; + + КонецЕсли; + + Выводить = Истина; + Если НЕ ПустаяСтрока(ПараметрРасшифровки) Тогда + + Выводить = УправлениеПечатью.ВычислитьВыражение( + "[" + ПараметрРасшифровки + "]", + ИсточникДанныхЗначения, + НастройкиФорматаПолей, + КодЯзыка); + + КонецЕсли; + + СтруктураПараметра.ТипПоля = ТипПоля; + СтруктураПараметра.Значение = ЗначениеПоля; + + Если ТипЗнч(Выводить) = Тип("Булево") + И Не Выводить Тогда + СтруктураПараметра.Выводить = Ложь; + Иначе + СтруктураПараметра.Выводить = Истина; + КонецЕсли; + + Возврат СтруктураПараметра; + +КонецФункции + +Функция ЗначениеПоляИсточника(ДанныеИсточника, ДанныеДляРасчетаПараметра, ИмяПоля, ПолныйПуть, НомерСтрокиТабличнойЧасти) + + ДанныеОбъекта = ДанныеИсточника.ДанныеОбъекта; + ИсточникДанныхЗначения = ДанныеИсточника.ИсточникДанныхПереданный; + + НастройкиФорматаПолей = ДанныеДляРасчетаПараметра.НастройкиФорматаПолей; + ИмяТаблицы = ДанныеДляРасчетаПараметра.ИмяТаблицы; + КодЯзыка = ДанныеДляРасчетаПараметра.КодЯзыка; + + СтруктураРезультат = Новый Структура; + СтруктураРезультат.Вставить("ЗначениеПоля"); + СтруктураРезультат.Вставить("РезультатВычислен", Ложь); + + Результат = Неопределено; + + Если НЕ ПустаяСтрока(ИмяТаблицы) Тогда + + ИмяПараметраТаблицы = УправлениеПечатью.ИмяПоляВТаблицу(ИмяПоля, ИмяТаблицы); + Результат = ДанныеОбъекта[ИмяТаблицы][НомерСтрокиТабличнойЧасти][ИмяПараметраТаблицы]; + + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = ДанныеОбъекта[ИмяПоля]; + КонецЕсли; + + Если Результат = Неопределено Тогда + + ПараметрыТекста = УправлениеПечатью.НайтиПараметрыВТексте(ПолныйПуть); + ЗначенияПараметров = УправлениеПечатью.ЗначенияПараметров( + ПараметрыТекста, + ИсточникДанныхЗначения, + НастройкиФорматаПолей, + КодЯзыка); + + Если ЗначенияПараметров.Количество() = 1 Тогда + + Результат = ЗначенияПараметров[ПараметрыТекста[0]]; + + Иначе + + Если ТипЗнч(ПолныйПуть) = Тип("ФорматированнаяСтрока") Тогда + Результат = УправлениеПечатью.ЗаменитьВФорматированнойСтроке(ПолныйПуть, ЗначенияПараметров); + Иначе + Результат = УправлениеПечатью.ЗаменитьВСтроке(ПолныйПуть, ЗначенияПараметров); + КонецЕсли; + + КонецЕсли; + + СтруктураРезультат.РезультатВычислен = Истина; + + КонецЕсли; + + СтруктураРезультат.ЗначениеПоля = Результат; + + Возврат СтруктураРезультат; + +КонецФункции + +// Параметры: +// ЗначениеПоля - Строка, Произвольный - значение поля +// +// Возвращаемое значение: +// ОписаниеТипов - тип поля по значению +// +Функция ТипПоляПоЗначению(ЗначениеПоля) + + Если ТипЗнч(ЗначениеПоля) = Тип("Булево") Тогда + + ТипПоля = Новый ОписаниеТипов("Булево"); + + ИначеЕсли ТипЗнч(ЗначениеПоля) = Тип("Дата") Тогда + + ТипПоля = ОбщегоНазначения.ОписаниеТипаДата(ЗначениеПоля); + + ИначеЕсли ТипЗнч(ЗначениеПоля) = Тип("Число") Тогда + + МинимальнаяРазрядность = 2; + Разрядность = СтрДлина(ЗначениеПоля - Цел(ЗначениеПоля)) - МинимальнаяРазрядность; + Если Разрядность < МинимальнаяРазрядность Тогда + Разрядность = МинимальнаяРазрядность; + КонецЕсли; + ТипПоля = ОбщегоНазначения.ОписаниеТипаЧисло(15, Разрядность); + + Иначе + + ТипПоля = ОбщегоНазначения.ОписаниеТипаСтрока(СтрДлина(Строка(ЗначениеПоля))); + + КонецЕсли; + + Возврат ТипПоля; + +КонецФункции + +Функция ТаблицаОбластей(Макет) + + ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка"); + ОписаниеТиповЧисло = Новый ОписаниеТипов("Число"); + ОписаниеТиповБулево = Новый ОписаниеТипов("Булево"); + + ТаблицаОбластей = Новый ТаблицаЗначений; + ТаблицаОбластей.Колонки.Добавить("Имя", ОписаниеТиповСтрока); + ТаблицаОбластей.Колонки.Добавить("Верх", ОписаниеТиповЧисло); + ТаблицаОбластей.Колонки.Добавить("Низ", ОписаниеТиповЧисло); + ТаблицаОбластей.Колонки.Добавить("ПараметрРасшифровки", ОписаниеТиповСтрока); + ТаблицаОбластей.Колонки.Добавить("ИмяТаблицы", ОписаниеТиповСтрока); + ТаблицаОбластей.Колонки.Добавить("ЭтоТаблица", ОписаниеТиповБулево); + ТаблицаОбластей.Колонки.Добавить("Приоритет", ОписаниеТиповЧисло); + ТаблицаОбластей.Колонки.Добавить("ЭтоОбластьУсловияВывода", ОписаниеТиповБулево); + + Для Каждого Область Из Макет.Области Цикл + + Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + + НоваяСтрока = ТаблицаОбластей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Область); + Если ЗначениеЗаполнено(Область.ПараметрРасшифровки) > 0 Тогда + + НоваяСтрока.ЭтоОбластьУсловияВывода = Истина; + НоваяСтрока.Приоритет = 100; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ТаблицаОбластей.Сортировать("Верх, Низ Убыв, Приоритет"); + Возврат ТаблицаОбластей; + +КонецФункции + +Процедура ДополнитьТаблицуОбластейДаннымиТаблицы(Макет, ТаблицаОбластей, ТаблицыМакета) + + МассивОбработанных = Новый Массив; + Для Каждого ТекСтрокаОбласти Из ТаблицаОбластей Цикл + + Область = Макет.Области[ТекСтрокаОбласти.Имя]; + Верх = Область.Верх; + Низ = Область.Низ; + ИмяОбласти = Область.Имя; + МассивОбработанных.Добавить(ИмяОбласти); + + Для НомерСтроки = Верх По Низ Цикл + + СтрокаТаблиц = ТаблицыМакета.Найти(НомерСтроки, "Верх"); + ЭтоСтрокаТекущейОбласти = Истина; + Отбор = Новый Структура; + Отбор.Вставить("Верх", НомерСтроки); + НайденныеОбласти = ТаблицаОбластей.НайтиСтроки(Отбор); + + Если НайденныеОбласти.Количество() > 0 Тогда + + Результат = КонецОбласти(МассивОбработанных, ЭтоСтрокаТекущейОбласти, НайденныеОбласти); + КонецВложеннойОбласти = Результат.КонецВложеннойОбласти; + ЭтоСтрокаТекущейОбласти = Результат.ЭтоСтрокаТекущейОбласти; + НомерСтроки = Макс(НомерСтроки, КонецВложеннойОбласти); + + КонецЕсли; + + Если СтрокаТаблиц <> Неопределено + И ЭтоСтрокаТекущейОбласти Тогда + + ТекСтрокаОбласти.ИмяТаблицы = СтрокаТаблиц.Имя; + ТекСтрокаОбласти.ЭтоТаблица = Истина; + Прервать; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ТаблицаОбластей.Сортировать("Верх, Низ Убыв, Приоритет"); + +КонецПроцедуры + +Функция КонецОбласти(Знач МассивОбработанных, Знач ЭтоСтрокаТекущейОбластиПереданная, Знач НайденныеОбласти) + + КонецВложеннойОбласти = 0; + ЭтоСтрокаТекущейОбласти = ЭтоСтрокаТекущейОбластиПереданная; + + Для Каждого ТекНайденнаяСтрока Из НайденныеОбласти Цикл + + Если МассивОбработанных.Найти(ТекНайденнаяСтрока.Имя) <> Неопределено + ИЛИ ТекНайденнаяСтрока.ЭтоОбластьУсловияВывода Тогда + Продолжить; + Иначе + + ЭтоСтрокаТекущейОбласти = Ложь; + КонецВложеннойОбласти = Макс(КонецВложеннойОбласти, ТекНайденнаяСтрока.Низ); + + КонецЕсли; + + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ЭтоСтрокаТекущейОбласти", ЭтоСтрокаТекущейОбласти); + Результат.Вставить("КонецВложеннойОбласти", КонецВложеннойОбласти); + Возврат Результат; + +КонецФункции + +Процедура СообщитьВыгрузкаНедоступна(Объект) + + Шаблон = НСтр("ru = 'Выгрузка %1 не выполнена: выбранный макет недоступен.'"); + ОбъектСтрокой = Строка(Объект); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОбъектСтрокой); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Объект); + +КонецПроцедуры + +// Параметры: +// КомандаПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати +// НастройкиСохранения - см. УправлениеПечатью.НастройкиСохранения +// СписокОбъектов - Массив из СправочникСсылка, ДокументСсылка +// Результат - ТаблицаЗначений: +// * ИмяФайла - Строка +// * ДвоичныеДанные - ДвоичныеДанные +// +Процедура ВыполнитьВыгрузкуВФайл(КомандаПечати, НастройкиСохранения, СписокОбъектов, Результат) + + ТаблицаОбъектовПоМакетам = Новый ТаблицаЗначений; + ТаблицаОбъектовПоМакетам.Колонки.Добавить("ИмяМакета", Новый ОписаниеТипов("Строка")); + ТаблицаОбъектовПоМакетам.Колонки.Добавить("МассивОбъектов", Новый ОписаниеТипов("Массив")); + + НоваяСтрока = ТаблицаОбъектовПоМакетам.Добавить(); + НоваяСтрока.ИмяМакета = КомандаПечати.Идентификатор; + НоваяСтрока.МассивОбъектов = СписокОбъектов; + + ДанныеВыгрузки = СформироватьДанныеДляВыгрузки(КомандаПечати.МенеджерПечати, ТаблицаОбъектовПоМакетам); + + КоллекцияПечатныхФорм = ДанныеВыгрузки.КоллекцияПечатныхФорм; + ОбъектыВыгрузки = ДанныеВыгрузки.ОбъектыВыгрузки; + + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); + + ПодписиИПечатиОбластей = Неопределено; + Если НастройкиСохранения.ПодписьИПечать Тогда + ПодписиИПечатиОбластей = УправлениеПечатью.ПодписиИПечатиОбластей(ОбъектыВыгрузки); + КонецЕсли; + + Для Каждого ТекущаяКоллекция Из КоллекцияПечатныхФорм Цикл + + ТабличныйДокумент = ТекущаяКоллекция.ТабличныйДокумент; + + Если ТабличныйДокумент <> Неопределено Тогда + + ОбработатьНастройкиСохраненияПодписьИПечать( + НастройкиСохранения, + ТабличныйДокумент, + ОбъектыВыгрузки, + ПодписиИПечатиОбластей); + + ВыгрузкиПоОбъектам = УправлениеПечатью.ПечатныеФормыПоОбъектам(ТабличныйДокумент, ОбъектыВыгрузки); + + Иначе + + ВыгрузкиПоОбъектам = ТекущаяКоллекция.СтруктураВыгрузки; + + КонецЕсли; + + ВыполнитьОбходПоОбъектам(ВыгрузкиПоОбъектам, ТекущаяКоллекция, НастройкиСохранения, Результат); + + КонецЦикла; + + ФайловаяСистема.УдалитьВременныйКаталог(ИмяВременногоКаталога); + +КонецПроцедуры + +Процедура ОбработатьНастройкиСохраненияПодписьИПечать(НастройкиСохранения, ТабличныйДокумент, ОбъектыВыгрузки, Знач ПодписиИПечатиОбластей) + + Если НастройкиСохранения.ПодписьИПечать Тогда + + ДанныеПечатиРисунковТабличногоДокумента = УправлениеПечатью.ПодписиИПечатиТабличногоДокумента( + ОбъектыВыгрузки, + ТабличныйДокумент, + ОбщегоНазначения.КодОсновногоЯзыка()); + + Для Каждого ПодписиИПечатиОбласти Из ПодписиИПечатиОбластей Цикл + + ИмяОбласти = ПодписиИПечатиОбласти.Ключ; + Если ДанныеПечатиРисунковТабличногоДокумента[ИмяОбласти] = Неопределено Тогда + ДанныеПечатиРисунковТабличногоДокумента[ИмяОбласти] = Новый Соответствие(); + КонецЕсли; + Для Каждого Элемент Из ПодписиИПечатиОбласти.Значение Цикл + ДанныеПечатиРисунковТабличногоДокумента[ИмяОбласти][Элемент.Ключ] = Элемент.Значение; + КонецЦикла; + + КонецЦикла; + + УправлениеПечатью.ДобавитьПодписьИПечать(ТабличныйДокумент, ДанныеПечатиРисунковТабличногоДокумента); + + Иначе + УправлениеПечатью.УбратьПодписьИПечать(ТабличныйДокумент); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОбходПоОбъектам(ВыгрузкиПоОбъектам, ТекущаяКоллекция, НастройкиСохранения, Результат) + + СоответствиеФорматаВыгрузкиРасширению = СоответствиеФорматаВыгрузкиФорматуСохранения(); + СоответствиеФорматов = СоответствиеФорматовВыгрузкиТипуФайлаТабличногоДокумента(); + ТаблицаФорматов = УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента(); + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); + + ДанныеДляРасширения = Новый Структура; + ДанныеДляРасширения.Вставить("СоответствиеФорматаВыгрузкиРасширению", СоответствиеФорматаВыгрузкиРасширению); + ДанныеДляРасширения.Вставить("СоответствиеФорматов", СоответствиеФорматов); + ДанныеДляРасширения.Вставить("ТаблицаФорматов", ТаблицаФорматов); + + ПереводитьИменаФайловВТранслит = НастройкиСохранения.ПереводитьИменаФайловВТранслит; + ВыбранныйФормат = ТекущаяКоллекция.ФорматСохранения; // ПеречислениеСсылка.ФорматыВыгрузкиОбъектов + + Счетчик = 0; + + Для Каждого СоответствиеОбъектаВыгрузке Из ВыгрузкиПоОбъектам Цикл + + Счетчик = Счетчик + 1; + + ОбъектВыгрузки = СоответствиеОбъектаВыгрузке.Ключ; + РезультатВыгрузки = СоответствиеОбъектаВыгрузке.Значение; + + ИмяФайла = УправлениеПечатью.ИмяФайлаПечатнойФормыОбъекта(ОбъектВыгрузки, "", ТекущаяКоллекция.СинонимМакета); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); + + Если ПереводитьИменаФайловВТранслит Тогда + ИмяФайла = СтроковыеФункции.СтрокаЛатиницей(ИмяФайла); + КонецЕсли; + + ДанныеДляРасширения.Вставить("ИмяФайла", ИмяФайла); + ДанныеДляРасширения.Вставить("ВыбранныйФормат", ВыбранныйФормат); + + ДанныеРасширения = ДанныеРасширенияФайла(РезультатВыгрузки, ДанныеДляРасширения, Счетчик); + РасширениеФайла = ДанныеРасширения.РасширениеФайла; + ТипФайла = ДанныеРасширения.ТипФайла; + ИмяФайлаСРасширениемПредставление = ДанныеРасширения.ИмяФайлаСРасширениемПредставление; + ИмяФайла = ДанныеРасширения.ИмяФайла; + + ШаблонИмяФайла = "%1.%2"; + ШаблонПолноеИмяФайла = "%1%2.%3"; + + ИмяФайлаСРасширением = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонИмяФайла, + ИмяФайла, + РасширениеФайла); + ПолноеИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПолноеИмяФайла, + ИмяВременногоКаталога, + ИмяФайла, + РасширениеФайла); + + ПолноеИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ПолноеИмяФайла); + + Если ТипЗнч(РезультатВыгрузки) = Тип("Структура") Тогда + СформироватьФайлВыгрузкиСтруктуры(РезультатВыгрузки, ВыбранныйФормат, ПолноеИмяФайла); + Иначе + ЗаписатьТабличныйДокумент(РезультатВыгрузки, ПолноеИмяФайла, ТипФайла); + КонецЕсли; + + Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда + УправлениеПечатью.ВставитьКартинкиВHTML(ПолноеИмяФайла); + КонецЕсли; + + ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла); + УдалитьФайлы(ПолноеИмяФайла); + + Файл = Результат.Добавить(); + Файл.ИмяФайла = ИмяФайлаПоФормату(ИмяФайлаСРасширением, ИмяФайлаСРасширениемПредставление, ВыбранныйФормат); + Файл.ДвоичныеДанные = ДвоичныеДанные; + Файл.ОбъектВыгрузки = ОбъектВыгрузки; + + КонецЦикла; + +КонецПроцедуры + +Функция ИмяФайлаПоФормату(Знач ИмяФайлаСРасширением, Знач ИмяФайлаСРасширениемПредставление, Знач ВыбранныйФормат) + + Если ВыбранныйФормат = Перечисления.ФорматыВыгрузкиОбъектов.DBF Тогда + Возврат ИмяФайлаСРасширениемПредставление; + Иначе + Возврат ИмяФайлаСРасширением; + КонецЕсли; + +КонецФункции + +Процедура ЗаписатьТабличныйДокумент(ПечатнаяФорма, ПолноеИмяФайла, ТипФайла) + + ПечатнаяФорма.Записать(ПолноеИмяФайла, ТипФайла); // ТабличныйДокумент + + Если ТипФайла = ТипФайлаТабличногоДокумента.ANSITXT + ИЛИ ТипФайла = ТипФайлаТабличногоДокумента.TXT Тогда + + ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла); + ИсходныйТекст = ЧтениеТекста.Прочитать(); + НовыйТекст = СтрЗаменить(ИсходныйТекст, Символы.Таб, ""); + ЧтениеТекста.Закрыть(); + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку(НовыйТекст); + Если ТипФайла = ТипФайлаТабличногоДокумента.ANSITXT Тогда + ТекстовыйДокумент.Записать(ПолноеИмяФайла, КодировкаТекста.ANSI); + Иначе + ТекстовыйДокумент.Записать(ПолноеИмяФайла, КодировкаТекста.UTF8); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция ДанныеРасширенияФайла(РезультатВыгрузки, ДанныеДляРасширения, Счетчик) + + СоответствиеФорматаВыгрузкиРасширению = ДанныеДляРасширения.СоответствиеФорматаВыгрузкиРасширению; + СоответствиеФорматов = ДанныеДляРасширения.СоответствиеФорматов; + ТаблицаФорматов = ДанныеДляРасширения.ТаблицаФорматов; + ВыбранныйФормат = ДанныеДляРасширения.ВыбранныйФормат; + ИмяФайла = ДанныеДляРасширения.ИмяФайла; + + ИмяФайлаСРасширениемПредставление = ""; + РасширениеФайла = ""; + ТипФайла = ""; + + Если ТипЗнч(РезультатВыгрузки) = Тип("Структура") Тогда + + РасширениеФайла = СоответствиеФорматаВыгрузкиРасширению[ВыбранныйФормат]; + + Если ВыбранныйФормат = Перечисления.ФорматыВыгрузкиОбъектов.DBF Тогда + + ИмяФайлаСРасширениемПредставление = ИмяФайла + "." + РасширениеФайла; + + МаксимальнаяДлина = 3; + ИмяФайла = СокрЛП(СтрЗаменить(ИмяФайла, " ", "")); + Если СтрДлина(ИмяФайла) > МаксимальнаяДлина Тогда + ИмяФайла = Лев(ИмяФайла, МаксимальнаяДлина) + Счетчик; + КонецЕсли; + + КонецЕсли; + + Иначе + + Если ТипЗнч(ВыбранныйФормат) = Тип("ПеречислениеСсылка.ФорматыВыгрузкиОбъектов") Тогда + + ТипФайла = СоответствиеФорматов[ВыбранныйФормат]; + + Иначе + + ТипФайла = ТипФайлаТабличногоДокумента[ВыбранныйФормат]; + + КонецЕсли; + + Отбор = Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла); + НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Отбор)[0]; + РасширениеФайла = НастройкиФормата.Расширение; + + КонецЕсли; + + ДанныеРасширения = Новый Структура; + ДанныеРасширения.Вставить("РасширениеФайла", РасширениеФайла); + ДанныеРасширения.Вставить("ИмяФайлаСРасширениемПредставление", ИмяФайлаСРасширениемПредставление); + ДанныеРасширения.Вставить("ТипФайла", ТипФайла); + ДанныеРасширения.Вставить("ИмяФайла", ИмяФайла); + + Возврат ДанныеРасширения; + +КонецФункции + +// Параметры: +// СтруктураСДанными - Структура +// ВыбранныйФормат - ПеречислениеСсылка.ФорматыВыгрузкиОбъектов +// ПолноеИмяФайла - Строка - полное имя файла +// +Процедура СформироватьФайлВыгрузкиСтруктуры(СтруктураСДанными, ВыбранныйФормат, ПолноеИмяФайла) + + ПредставлениеВыгрузки = ""; + Если ВыбранныйФормат = Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда + ВыполнитьВыгрузкуВXML(СтруктураСДанными, ПолноеИмяФайла, ПредставлениеВыгрузки); + ИначеЕсли ВыбранныйФормат = Перечисления.ФорматыВыгрузкиОбъектов.JSON Тогда + ВыполнитьВыгрузкуВJSON(СтруктураСДанными, ПолноеИмяФайла, ПредставлениеВыгрузки); + ИначеЕсли ВыбранныйФормат = Перечисления.ФорматыВыгрузкиОбъектов.DBF Тогда + ВыполнитьВыгрузкуВDBF(СтруктураСДанными, ПолноеИмяФайла); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьДанныеОбластьXML(ЗаписьXML, СтруктураСДанными) + + Если СтруктураСДанными.ЭтоПараметр Тогда + + ЭлементСтруктуры = СтруктураСДанными; + ИмяПараметра = СокрЛП(ЭлементСтруктуры.ИмяПараметра); // Строка + ИмяПараметра = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(ИмяПараметра); + Значение = ЭлементСтруктуры.Значение; // ЛюбаяСсылка + ЗначениеВФайл = ЗначениеВXMLJSON(Значение); + + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяПараметра); + ЗаписьXML.ЗаписатьТекст(ЗначениеВФайл); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Иначе + + Если СтруктураСДанными.ЭтоСтрокаТаблицы Тогда + ИмяОбласти = СтруктураСДанными.ПредставлениеСтрокиТаблицы; + Иначе + ИмяОбласти = СтруктураСДанными.ИмяОбласти; + КонецЕсли; + ИмяОбласти = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(ИмяОбласти); + + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяОбласти); + КоличествоДанных = СтруктураСДанными.КоличествоДанных; + + Для НомерДанных = 1 По КоличествоДанных Цикл + + НомерДанныхСтрокой = Формат(НомерДанных, "ЧДЦ=0; ЧГ="); + ЭлементСтруктуры = СтруктураСДанными["Данные_" + НомерДанныхСтрокой]; + Если ЭлементСтруктуры.ЭтоПараметр Тогда + + ИмяПараметра = СокрЛП(ЭлементСтруктуры.ИмяПараметра); // Строка + ИмяПараметра = ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(ИмяПараметра); + Значение = ЭлементСтруктуры.Значение; // ЛюбаяСсылка + ЗначениеВФайл = ЗначениеВXMLJSON(Значение); + + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяПараметра); + ЗаписьXML.ЗаписатьТекст(ЗначениеВФайл); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Иначе + ОбработатьДанныеОбластьXML(ЗаписьXML, ЭлементСтруктуры); + КонецЕсли; + + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + КонецЕсли; + +КонецПроцедуры + +Функция ЗначениеВXMLJSON(Значение, ЭтоXML = Истина) + + ДанныеПоЗначению = ТипЗначенияПримитивный(Значение); + ПримитивныйТип = ДанныеПоЗначению.ПримитивныйТип; + + Если ПримитивныйТип + И ЭтоXML Тогда + + Результат = XMLСтрока(Значение); + + ИначеЕсли ПримитивныйТип Тогда + + Результат = Значение; + + Иначе + + Результат = СокрЛП(Строка(Значение)); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ОбработатьДанныеОбластьJSON(СтруктураСДанными, ДанныеВJSON) + + Если СтруктураСДанными.ЭтоПараметр Тогда + Возврат; + КонецЕсли; + + КоличествоДанных = СтруктураСДанными.КоличествоДанных; + + Для НомерДанных = 1 По КоличествоДанных Цикл + + НомерДанныхСтрокой = Формат(НомерДанных, "ЧДЦ=0; ЧГ="); + ЭлементСтруктуры = СтруктураСДанными["Данные_" + НомерДанныхСтрокой]; + + Если ЭлементСтруктуры.ЭтоПараметр Тогда + + ИмяПараметра = ЭлементСтруктуры.ИмяПараметра; // Строка + Значение = ЭлементСтруктуры.Значение; // ЛюбаяСсылка + ЗначениеВФайл = ЗначениеВXMLJSON(Значение, Ложь); + ДанныеВJSON.Вставить(ИмяПараметра, ЗначениеВФайл); + + ИначеЕсли ЭлементСтруктуры.ЭтоТаблица Тогда + + МассивСтрок = ОбработатьТаблицуJSON(ЭлементСтруктуры); + ДанныеВJSON.Вставить(ЭлементСтруктуры.ИмяОбласти, МассивСтрок); + + Иначе + + ВложенныеДанныеВJSON = Новый Структура; + ОбработатьДанныеОбластьJSON(ЭлементСтруктуры, ВложенныеДанныеВJSON); + ДанныеВJSON.Вставить(ЭлементСтруктуры.ИмяОбласти, ВложенныеДанныеВJSON); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ОбработатьТаблицуJSON(ЭлементСтруктуры) + + МассивСтрок = Новый Массив; + КоличествоДанных = ЭлементСтруктуры.КоличествоДанных; + + Для НомерДанных = 1 По КоличествоДанных Цикл + + НомерДанныхСтрокой = Формат(НомерДанных, "ЧДЦ=0; ЧГ="); + ДанныеСтроки = Новый Структура; + СтруктураДанныеСтроки = ЭлементСтруктуры["Данные_" + НомерДанныхСтрокой]; + ОбработатьДанныеОбластьJSON(СтруктураДанныеСтроки, ДанныеСтроки); + МассивСтрок.Добавить(ДанныеСтроки); + + КонецЦикла; + + Возврат МассивСтрок; + +КонецФункции + +Процедура ВыполнитьВыгрузкуВDBF(СтруктураСДанными, ПолноеИмяФайла) + + КоличествоДанных = СтруктураСДанными.КоличествоДанных; + ТипыКолонок = СтруктураСДанными.ТипыКолонок; + ИменаКолонок = СтруктураСДанными.ИменаКолонок; + ТаблицаДанных = Новый XBase; + + Для Каждого Колонка Из ИменаКолонок Цикл + + ИмяПоля = Колонка.Значение; // Строка + ТипКолонки = ТипыКолонок[Колонка.Ключ]; // ОписаниеТипов + ОписаниеКолонки = ОписаниеКолонкиДляDBF(ТипКолонки); + + ТипПоля = ОписаниеКолонки.ТипПоля; + Длина = ОписаниеКолонки.Длина; + Точность = ОписаниеКолонки.Точность; + Если ТипПоля = "Булево" Тогда + ТаблицаДанных.Поля.Добавить(ИмяПоля, "L"); + ИначеЕсли ТипПоля = "Дата" Тогда + ТаблицаДанных.Поля.Добавить(ИмяПоля, "D"); + ИначеЕсли ТипПоля = "Строка" Тогда + ТаблицаДанных.Поля.Добавить(ИмяПоля, "S", Длина); + Иначе + ТаблицаДанных.Поля.Добавить(ИмяПоля, "N", Длина, Точность); + КонецЕсли; + + КонецЦикла; + + ТаблицаДанных.СоздатьФайл(ПолноеИмяФайла); + + Для НомерСтроки = 1 По КоличествоДанных Цикл + + НомерСтрокиСтрокой = XMLСтрока(НомерСтроки); + Данные = СтруктураСДанными["Данные_" + НомерСтрокиСтрокой]; + КоличествоКолонок = Данные.КоличествоДанных; + + ТаблицаДанных.Добавить(); + + Для НомерПоля = 1 По КоличествоКолонок Цикл + + НомерПоляСтрокой = XMLСтрока(НомерПоля); + ДанныеКолонки = Данные["Данные_" + НомерПоляСтрокой]; + Значение = ДанныеКолонки.Значение; + ИмяПоля = ДанныеКолонки.ИмяПараметра; + ТаблицаДанных[ИмяПоля] = Значение; + + КонецЦикла; + + ТаблицаДанных.Записать(); + + КонецЦикла; + + ТаблицаДанных.ЗакрытьФайл(); + +КонецПроцедуры + +// Возвращает структуру с описанием колонок для файла DBF. +// +// Параметры: +// ОписаниеТипа - ОписаниеТипов +// +// Возвращаемое значение: +// Структура - описание колонки для DBF: +// * ТипПоля - Строка +// * Длина - Число +// * Точность - Число +// +Функция ОписаниеКолонкиДляDBF(ОписаниеТипа) + + Результат = Новый Структура; + Результат.Вставить("ТипПоля", ""); + Результат.Вставить("Длина", 0); + Результат.Вставить("Точность", 0); + + ТипПоляСтрока = "Строка"; + + Если ТипЗнч(ОписаниеТипа) = Тип("ОписаниеТипов") Тогда + + КвалификаторыСтроки = ОписаниеТипа.КвалификаторыСтроки; + КвалификаторыЧисла = ОписаниеТипа.КвалификаторыЧисла; + + Если ОписаниеТипа.СодержитТип(Тип("Дата")) Тогда + Результат.ТипПоля = "Дата"; + ИначеЕсли ОписаниеТипа.СодержитТип(Тип("Булево")) Тогда + Результат.ТипПоля = "Булево"; + ИначеЕсли КвалификаторыЧисла.Разрядность <> 0 Тогда + + Результат.ТипПоля = "Число"; + Результат.Длина = КвалификаторыЧисла.Разрядность; + Результат.Точность = КвалификаторыЧисла.РазрядностьДробнойЧасти; + + ИначеЕсли КвалификаторыСтроки.Длина <> 0 Тогда + + Результат.ТипПоля = ТипПоляСтрока; + Результат.Длина = КвалификаторыСтроки.Длина; + + Иначе + + Результат.ТипПоля = ТипПоляСтрока; + Результат.Длина = 150; + + КонецЕсли; + + Иначе + + Результат.ТипПоля = ТипПоляСтрока; + Результат.Длина = 150; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает описание (структуру) для переданного значения. +// +// Параметры: +// Значение - ЛюбаяСсылка - значение +// +// Возвращаемое значение: +// Структура - тип значения примитивный: +// * ТипЗначения - Тип +// * ПримитивныйТип - Булево +// +Функция ТипЗначенияПримитивный(Значение) + + ТипЗначения = ТипЗнч(Значение); + + МассивПримитивныхТипов = Новый Массив; // Массив из Тип + МассивПримитивныхТипов.Добавить(Тип("Строка")); + МассивПримитивныхТипов.Добавить(Тип("Булево")); + МассивПримитивныхТипов.Добавить(Тип("Число")); + МассивПримитивныхТипов.Добавить(Тип("Дата")); + + Результат = (МассивПримитивныхТипов.Найти(ТипЗначения) <> Неопределено); + + Структура = Новый Структура; + Структура.Вставить("ТипЗначения", ТипЗначения); + Структура.Вставить("ПримитивныйТип", Результат); + + Возврат Структура; + +КонецФункции + +Функция СоответствиеФорматовВыгрузкиТипуФайлаТабличногоДокумента() + + СоответствиеФорматов = Новый Соответствие; + СоответствиеФорматов.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.ANSITXT, ТипФайлаТабличногоДокумента.ANSITXT); + СоответствиеФорматов.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.TXT, ТипФайлаТабличногоДокумента.TXT); + СоответствиеФорматов.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.XLS, ТипФайлаТабличногоДокумента.XLS); + СоответствиеФорматов.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.XLSX, ТипФайлаТабличногоДокумента.XLSX); + СоответствиеФорматов.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.HTML5, ТипФайлаТабличногоДокумента.HTML5); + СоответствиеФорматов.Вставить(Перечисления.ФорматыВыгрузкиОбъектов.MXL, ТипФайлаТабличногоДокумента.MXL); + + Возврат СоответствиеФорматов; + +КонецФункции + +// Собирает список команд выгрузки из нескольких объектов. +Процедура ЗаполнитьКомандыВыгрузкиДляСпискаОбъектов(СписокОбъектов, КомандыВыгрузки) + + ИсточникиКомандВыгрузки = Новый Соответствие; + Для Каждого ИсточникКомандПечати Из УправлениеПечатью.ИсточникиКомандПечати() Цикл + ИсточникиКомандВыгрузки.Вставить(ИсточникКомандПечати, Истина); + КонецЦикла; + + Для Каждого ОбъектМетаданных Из СписокОбъектов Цикл + + Если ИсточникиКомандВыгрузки[ОбъектМетаданных] = Неопределено Тогда + Продолжить; + КонецЕсли; + + КомандыВыгрузкиФормы = КомандыВыгрузкиОбъекта(ОбъектМетаданных); // @skip-check query-in-loop - Малый цикл + + Для Каждого ДобавляемаяКомандаВыгрузки Из КомандыВыгрузкиФормы Цикл + + Если ДобавляемаяКомандаВыгрузки.Отключена Тогда + Продолжить; + КонецЕсли; + + Отбор = Новый Структура("УникальныйИдентификатор", ДобавляемаяКомандаВыгрузки.УникальныйИдентификатор); + НайденныеКоманды = КомандыВыгрузки.НайтиСтроки(Отбор); + + Если НайденныеКоманды.Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + Если ДобавляемаяКомандаВыгрузки.ТипыОбъектовПечати.Количество() = 0 Тогда + + ДополнительныеПараметры = ДобавляемаяКомандаВыгрузки.ДополнительныеПараметры; + Если ЗначениеЗаполнено(ДополнительныеПараметры.ТипИсточника) Тогда + + ДобавляемаяКомандаВыгрузки.ТипыОбъектовПечати.Добавить(ДополнительныеПараметры.ТипИсточника); + + Иначе + + ТипОбъекта = Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")); + ДобавляемаяКомандаВыгрузки.ТипыОбъектовПечати.Добавить(ТипОбъекта); + + КонецЕсли; + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(КомандыВыгрузки.Добавить(), ДобавляемаяКомандаВыгрузки); + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйЛокализация/ПолучениеФайловИзИнтернетаСлужебныйЛокализация.mdo b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлы/ВыгрузкаОбъектовВФайлы.mdo similarity index 51% rename from SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйЛокализация/ПолучениеФайловИзИнтернетаСлужебныйЛокализация.mdo rename to SSL/src/CommonModules/ВыгрузкаОбъектовВФайлы/ВыгрузкаОбъектовВФайлы.mdo index 2bc3631fc..7a5825434 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйЛокализация/ПолучениеФайловИзИнтернетаСлужебныйЛокализация.mdo +++ b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлы/ВыгрузкаОбъектовВФайлы.mdo @@ -1,9 +1,9 @@ - - ПолучениеФайловИзИнтернетаСлужебныйЛокализация + + ВыгрузкаОбъектовВФайлы ru - Получение файлов из интернета служебный локализация + Выгрузка объектов в файлы true true diff --git a/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлыСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..87f396d8a --- /dev/null +++ b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлыСлужебныйКлиент/Module.bsl @@ -0,0 +1,80 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +// @strict-types + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ОткрытьФормуМакетовВыгрузки(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт + + Форма = ПараметрыВыполнения.Форма; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МакетыВыгрузки", Истина); + ДополнительныеПараметры = ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры; + ПараметрыФормы.Вставить("Владелец", ДополнительныеПараметры.Владелец); + + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.МакетыПечатныхФорм", + ПараметрыФормы, + Форма); + +КонецПроцедуры + +// Запускает процедуру открытия формы выгрузки +// с предварительной установкой расширение для работы с 1С:Предприятием в веб-клиенте +// см. ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// +// Параметры: +// МассивСсылок - Массив из ЛюбаяСсылка +// ПараметрыВыполнения - см. ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды +// +Процедура ОбработчикКомандыВыполнитьВыгрузку(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт + + ПараметрыВыполнения.Вставить("ОбъектыПечати", МассивСсылок); + ПараметрыВыполнения.Вставить("ФормироватьФайлВыгрузки", Истина); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру( + ПараметрыВыполнения.ОписаниеКоманды, + ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры, + Истина); + + ДопПараметр = Новый Структура; + ДопПараметр.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); + Оповещение = Новый ОписаниеОповещения("ПриПодключенииРасширенияДляВыгрузки", ЭтотОбъект, ДопПараметр); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Открывает общую форму СохранениеПоФорматуВыгрузки +// +// Параметры: +// РасширениеПодключено - Булево +// ДополнительныеПараметры - структура : +// * ПараметрыВыполнения - см. ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды +// +Процедура ПриПодключенииРасширенияДляВыгрузки(РасширениеПодключено, ДополнительныеПараметры) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РасширениеДляРаботыСФайламиПодключено", РасширениеПодключено); + + ОбъектыПечати = ДополнительныеПараметры.ПараметрыВыполнения.ОбъектыПечати; + ОписаниеКомандыВыполнения = Новый Структура; + ОписаниеКомандыВыполнения.Вставить("ОписаниеКоманды", ДополнительныеПараметры.ПараметрыВыполнения.ОписаниеКоманды); + ОписаниеКомандыВыполнения.Вставить("ОбъектыПечати", ОбъектыПечати); + ПараметрыФормы.Вставить("ОписаниеКомандыВыполнения", ОписаниеКомандыВыполнения); + + ОткрытьФорму( + "ОбщаяФорма.СохранениеПоФорматуВыгрузки", + ПараметрыФормы, + ДополнительныеПараметры.ПараметрыВыполнения.Форма); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлыСлужебныйКлиент/ВыгрузкаОбъектовВФайлыСлужебныйКлиент.mdo b/SSL/src/CommonModules/ВыгрузкаОбъектовВФайлыСлужебныйКлиент/ВыгрузкаОбъектовВФайлыСлужебныйКлиент.mdo new file mode 100644 index 000000000..e76c48ca0 --- /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 d48e61620..7d9eefb48 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -686,8 +686,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -758,6 +757,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ДвенадцатиЧасовойФорматВремени() Экспорт @@ -771,4 +772,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 349bfa5b2..05ed8e524 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -19,11 +19,13 @@ // - ПланВидовРасчетаОбъект // - БизнесПроцессОбъект // - ЗадачаОбъект -// - ПланОбменаОбъект +// - ПланОбменаОбъект - проверяемый объект данных. // - РегистрСведенийНаборЗаписей // - РегистрНакопленияНаборЗаписей // - РегистрБухгалтерииНаборЗаписей -// - РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей. +// - РегистрРасчетаНаборЗаписей - проверяемый набор записей с необязательным +// свойством Замещение (Булево, РежимЗамещения) в структуре ДополнительныеСвойства, +// если свойство Замещение не указано, тогда оно будет вставлено со значением Истина. // - Строка - полное имя объекта метаданных, данные которого следует проверить в базе данных. // Например: "Документ.ПриходнаяНакладная". // В этом случае следует указать в параметре ИдентификаторДанных, @@ -39,6 +41,12 @@ // - ПланОбменаСсылка // - Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. // При этом значение для проверки будет получено из базы данных. +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей со свойством Замещение (Булево, РежимЗамещения) +// в структуре ДополнительныеСвойства и настроенным свойством Отбор в варианте замены записей, +// как в обработчике ПередЗаписью, для получения заменяемых записей из базы данных. // - Неопределено - если не требуется получать значение для проверки из базы данных, // а нужно проверить только данные самого объекта в ДанныеИлиПолноеИмя. // @@ -71,10 +79,12 @@ ОбъектМетаданных = ДанныеИлиПолноеИмя.Метаданные(); КонецЕсли; - ИсточникиДанных = ДатыЗапретаИзмененияСлужебный.ИсточникиДанныхДляПроверкиЗапретаИзменения(); - Если ИсточникиДанных.Получить(ОбъектМетаданных.ПолноеИмя()) = Неопределено Тогда + ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияСлужебный.ИсточникиДанныхДляПроверкиЗапретаИзменения(); + ИсточникиДанных = ИсточникиДанныхТаблиц.Получить(ОбъектМетаданных.ПолноеИмя()); + Если ИсточникиДанных = Неопределено Тогда Возврат Ложь; // Для текущего типа объекта не определены запреты по датам. КонецЕсли; + ЭтоРегистр = ИсточникиДанных.ЭтоРегистр; ПроверкаЗапретаИзменения = УзелПроверкиЗапретаЗагрузки = Неопределено; @@ -88,6 +98,13 @@ Источник.Прочитать(); ИначеЕсли Не ЗначениеЗаполнено(ИдентификаторДанных) Тогда Возврат Ложь; + ИначеЕсли ЭтоРегистр Тогда + Источник = ИдентификаторДанных; // Набор новых записей для получения существующих записей. + Замещение = ИдентификаторДанных.ДополнительныеСвойства.Замещение; + Если Замещение = Ложь + Или ОбщегоНазначения.ЭтоДобавлениеНабораЗаписей(Замещение) Тогда + Возврат Ложь; + КонецЕсли; Иначе Источник = ИдентификаторДанных.ПолучитьОбъект(); КонецЕсли; @@ -101,6 +118,11 @@ ИдентификаторДанных, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки); КонецЕсли; + Если ЭтоРегистр Тогда + Режим = Новый Структура("Замещение", Истина); + ЗаполнитьЗначенияСвойств(Режим, ДанныеИлиПолноеИмя.ДополнительныеСвойства); + КонецЕсли; + ВерсияОбъекта = ""; Если ДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуДатЗапрета(ДанныеИлиПолноеИмя, ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки, ВерсияОбъекта) Тогда @@ -115,6 +137,9 @@ ИначеЕсли ВерсияОбъекта = "НоваяВерсия" Тогда Идентификатор = Неопределено; + Если ЭтоРегистр И ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Режим.Замещение) Тогда + Возврат Ложь; + КонецЕсли; КонецЕсли; Возврат ДатыЗапретаИзмененияСлужебный.ИзменениеЗапрещено(Источник, @@ -441,8 +466,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия // Обработчик подписки на событие ПередЗаписью для проверки запрета изменения. // @@ -493,7 +517,7 @@ // Источник - РегистрСведенийНаборЗаписей // - РегистрНакопленияНаборЗаписей - набор записей, передаваемый в подписку на событие ПередЗаписью. // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// Замещение - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// Замещение - РежимЗамещения, Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписей(Источник, Отказ, Замещение) Экспорт @@ -501,6 +525,8 @@ Возврат; КонецЕсли; + Источник.ДополнительныеСвойства.Вставить("Замещение", Замещение); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, Истина, Замещение); КонецПроцедуры @@ -511,15 +537,17 @@ // Источник - РегистрБухгалтерииНаборЗаписей - набор записей, передаваемый // в подписку на событие ПередЗаписью. // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// РежимЗаписи - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// Замещение - РежимЗамещения, Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии( - Источник, Отказ, РежимЗаписи) Экспорт + Источник, Отказ, Замещение) Экспорт Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + Источник.ДополнительныеСвойства.Вставить("Замещение", Замещение); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, Истина); КонецПроцедуры @@ -530,7 +558,7 @@ // Источник - РегистрРасчетаНаборЗаписей - набор записей, передаваемый // в подписку на событие ПередЗаписью. // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// Замещение - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// Замещение - РежимЗамещения, Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // ТолькоЗапись - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // ЗаписьФактическогоПериодаДействия - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // ЗаписьПерерасчетов - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. @@ -547,6 +575,8 @@ Возврат; КонецЕсли; + Источник.ДополнительныеСвойства.Вставить("Замещение", Замещение); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ, Истина, Замещение); КонецПроцедуры @@ -579,6 +609,8 @@ КонецПроцедуры +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Не требуется вызывать, так как обновление выполняется автоматически. @@ -606,4 +638,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 9d19821a1..20c74e69c 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -73,8 +73,11 @@ // Позволяет переопределить выполнение проверки запрета изменения произвольным образом. // -// Если проверка выполняется в процессе записи документа, то в свойстве ДополнительныеСвойства документа Объект -// имеется свойство РежимЗаписи. +// Если проверка выполняется в процессе записи документа, то в свойстве ДополнительныеСвойства +// документа Объект имеется свойство РежимЗаписи (РежимЗаписиДокумента). +// Если выполняется проверка набора записей, то в свойстве ДополнительныеСвойства +// набора записей Объект имеется свойство Замещение (Булево, РежимЗамещения). Причем, в варианте +// замены записей настроено свойство Отбор для получения существующих записей из базы данных. // // Параметры: // Объект - СправочникОбъект @@ -88,15 +91,15 @@ // - РегистрСведенийНаборЗаписей // - РегистрНакопленияНаборЗаписей // - РегистрБухгалтерииНаборЗаписей -// - РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей -// (который передается из обработчиков ПередЗаписью и ПриЧтенииНаСервере). +// - РегистрРасчетаНаборЗаписей - проверяемый элемент данных или набор записей +// (как в обработчиках ПередЗаписью и ПриЧтенииНаСервере). // // ПроверкаЗапретаИзменения - Булево - установить в Ложь, чтобы пропустить проверку запрета изменения данных. // УзелПроверкиЗапретаЗагрузки - ПланОбменаСсылка // - Неопределено - установить в Неопределено, чтобы // пропустить проверку запрета загрузки данных. // ВерсияОбъекта - Строка - установить "СтараяВерсия" или "НоваяВерсия", чтобы -// выполнить проверку только старой (в базе данных) +// выполнить проверку только старой версии объекта (в базе данных) // или только новой версии объекта (в параметре Объект). // По умолчанию содержит значение "" - проверяются обе версии объекта сразу. // @@ -110,6 +113,13 @@ КонецПроцедуры // Позволяет переопределить получение данных для проверки даты запрета старой (существующей) версии данных. +// Если заполнить ДанныеДляПроверки, тогда они не будут автоматически загружаться из +// базы данных по значениям параметров ОбъектМетаданных и ИдентификаторДанных. +// +// Если выполняется проверка набора записей, то в свойстве ДополнительныеСвойства +// набора записей ИдентификаторДанных имеется свойство Замещение (Булево, РежимЗамещения) +// с возможными значениями: Замещение, Обновление, Слияние, Удаление. Причем, в варианте +// замены записей настроено свойство Отбор для получения существующих записей из базы данных. // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - объект метаданных получаемых данных. @@ -120,9 +130,12 @@ // - ПланВидовРасчетаСсылка // - БизнесПроцессСсылка // - ЗадачаСсылка -// - ПланОбменаСсылка -// - Отбор - ссылка на элемент данных или отбор набора записей, который нужно проверить. -// При этом значение для проверки будет получено из базы данных. +// - ПланОбменаСсылка - ссылка на элемент данных. +// - Отбор - отбор набора записей, когда Замещение равно Истина. +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей, когда Замещение не Булево. // // УзелПроверкиЗапретаЗагрузки - Неопределено // - ПланОбменаСсылка - если Неопределено, то проверить запрет @@ -146,6 +159,15 @@ КонецПроцедуры // Позволяет переопределить получение данных для проверки даты запрета новой (будущей) версии данных. +// Если заполнить ДанныеДляПроверки, тогда они не будут автоматически извлекаться из объекта и +// дополнительно загружаться из базы данных по значениям параметров ОбъектМетаданных и Данные. +// +// Если проверка выполняется в процессе записи документа, то в свойстве ДополнительныеСвойства +// документа Данные имеется свойство РежимЗаписи (РежимЗаписиДокумента). +// Если выполняется проверка набора записей, то в свойстве ДополнительныеСвойства +// набора записей Данные имеется свойство Замещение (Булево, РежимЗамещения) +// с возможными значениями: Добавление, Замещение, Обновление, Слияние. Причем, в варианте +// замены записей настроено свойство Отбор для получения существующих записей из базы данных. // // Параметры: // ОбъектМетаданных - ОбъектМетаданных - объект метаданных получаемых данных. diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index 6715658d2..0ee82c7b7 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -53,8 +53,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт @@ -191,10 +190,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Основные процедуры и функции. +#Область ОсновныеПроцедурыИФункции // Параметры: // ИмяПараметра - Строка @@ -383,8 +383,7 @@ // // ИсточникРегистр - Булево - Ложь - Источник является регистром, иначе объектом. // -// Замещение - Булево - если источник является регистром и выполняется добавление, -// нужно указать Ложь. +// Замещение - РежимЗамещения, Булево - режим замещения записей (только для регистров). // // Удаление - Булево - если источник является объектом и выполняется удаление объекта, // нужно указать Истина. @@ -432,11 +431,21 @@ Результат.ИзменениеЗапрещено = Истина; КонецЕсли; - ИначеЕсли ИсточникРегистр И Замещение Тогда + ИначеЕсли ИсточникРегистр + И (Замещение = Истина + Или ОбщегоНазначения.ЭтоЗамещениеНабораЗаписей(Замещение) + Или ОбщегоНазначения.ЭтоОбновлениеНабораЗаписей(Замещение) + Или ОбщегоНазначения.ЭтоСлияниеНабораЗаписей(Замещение) + Или ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение)) Тогда + + ПолноеИмя = Источник.Метаданные().ПолноеИмя(); + УточненныйИсточник = ?(ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение), + ПолноеИмя, Источник); + УточненныйИдентификаторДанных = ?(Замещение = Истина, Источник.Отбор, Источник); Если ИзменениеЗапрещено( - ?(ВерсияОбъекта <> "СтараяВерсия", Источник, Источник.Метаданные().ПолноеИмя()), - ?(ВерсияОбъекта <> "НоваяВерсия", Источник.Отбор, Неопределено), + ?(ВерсияОбъекта <> "СтараяВерсия", УточненныйИсточник, ПолноеИмя), + ?(ВерсияОбъекта <> "НоваяВерсия", УточненныйИдентификаторДанных, Неопределено), Результат.ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда @@ -455,7 +464,7 @@ Иначе // Выполняется при условии: // НЕ ИсточникРегистр И Источник.ЭтоНовый() - // ИЛИ ИсточникРегистр И НЕ Замещение + // ИЛИ ИсточникРегистр И (Замещение = Ложь Или ОбщегоНазначения.ЭтоДобавлениеНабораЗаписей(Замещение)) // ИЛИ НЕ ИсточникРегистр И Удаление. Если ВерсияОбъекта <> "СтараяВерсия" И ИзменениеЗапрещено(Источник, Неопределено, Результат.ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки) Тогда @@ -544,8 +553,12 @@ ДанныеДляПроверки = ДанныеДляПроверкиИзБазыДанных(Данные, ИдентификаторДанных, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки); - ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеДляПроверки, - ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки, ДействующиеДаты); + Если ЗначениеЗаполнено(ДанныеДляПроверки) Тогда + ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеДляПроверки, + ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки, ДействующиеДаты); + Иначе + ЗапретНайден = Ложь; + КонецЕсли; КонецЕсли; // Проверка новой версии объекта или набора записей. @@ -557,8 +570,10 @@ ДанныеДляПроверки = ДанныеДляПроверкиИзОбъекта(Данные, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки); - ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеДляПроверки, - ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки, ДействующиеДаты); + Если ЗначениеЗаполнено(ДанныеДляПроверки) Тогда + ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеДляПроверки, + ПараметрыСообщенияОЗапрете, ОписаниеОшибки, УзелПроверкиЗапретаЗагрузки, ДействующиеДаты); + КонецЕсли; КонецЕсли; Возврат ЗапретНайден; @@ -986,8 +1001,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Обработчик заполнения общей начальной даты запрета изменения до 1980 года. Процедура УстановитьНачальнуюДатуЗапретаИзменения() Экспорт @@ -1193,8 +1209,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Для функции ПроверкаДатЗапретаОтключена. Функция ЗапретИзмененияДанныхНеИспользуется(ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки) @@ -1256,7 +1273,7 @@ Запрос.Текст = ИсточникиДанных.ТекстЗапроса; КонецЕсли; Если ИсточникиДанных.ЭтоРегистр Тогда - ВставитьПараметрыИУсловиеОтбора(Запрос, ИдентификаторДанных); + ОбщегоНазначения.ОтборЗаписейНабораИзБазыДанных(ИдентификаторДанных,, Запрос); Иначе Запрос.УстановитьПараметр("Ссылка", ИдентификаторДанных); КонецЕсли; @@ -1273,31 +1290,6 @@ КонецФункции -// Для процедуры ДанныеДляПроверкиИзБазыДанных. -// Преобразует Отбор в условие на языке запросов и вставляет в запрос. -// -// Параметры: -// Запрос - Запрос -// Отбор - Отбор -// -Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, Отбор) - - Условие = ""; - Для Каждого ЭлементОтбора Из Отбор Цикл - Если ЭлементОтбора.Использование Тогда - Если НЕ ПустаяСтрока(Условие) Тогда - Условие = Условие + Символы.ПС + "И "; - КонецЕсли; - Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); - Условие = Условие - + "ТекущаяТаблица." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; - КонецЕсли; - КонецЦикла; - Условие = ?(ЗначениеЗаполнено(Условие), Условие, "Истина"); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", Условие); - -КонецПроцедуры - // Для функции ИзменениеИлиЗагрузкаЗапрещена. Функция ДанныеДляПроверкиИзОбъекта(Данные, ДействующиеДаты, УзелПроверкиЗапретаЗагрузки) @@ -1326,6 +1318,7 @@ ЗначенияПолей.Свернуть(ИсточникиДанных.ПоляРегистра); Если ЗначенияПолей.Колонки.Найти("Регистратор") <> Неопределено И Данные.Отбор.Найти("Регистратор") <> Неопределено + И Данные.Отбор.Регистратор.Использование И ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) Тогда ЗначенияПолей.ЗаполнитьЗначения(Данные.Отбор.Регистратор.Значение, "Регистратор"); КонецЕсли; @@ -1663,7 +1656,8 @@ Функция СообщениеОЗапретах(Запреты, ПараметрыСообщенияОЗапрете, СвойстваРазделов, ПоискЗапретовЗагрузки, СтруктурноеОписание) НоваяВерсия = ПараметрыСообщенияОЗапрете.НоваяВерсия; - Текст = ПредставлениеДанных(ПараметрыСообщенияОЗапрете.Данные); + ЭтоРегистр = Ложь; + Текст = ПредставлениеДанных(ПараметрыСообщенияОЗапрете.Данные, ЭтоРегистр); Если СтруктурноеОписание Тогда ОписаниеОшибки = Новый Структура; @@ -1690,7 +1684,7 @@ Иначе Если НоваяВерсия Тогда Шаблон = НСтр("ru = '%1 невозможно поместить в запрещенный период.'"); - ИначеЕсли ЭтоУдалениеНабораДанных(ПараметрыСообщенияОЗапрете.Данные) Тогда + ИначеЕсли ЭтоРегистр И ЭтоУдалениеНабораДанных(ПараметрыСообщенияОЗапрете.Данные) Тогда Шаблон = НСтр("ru = '%1 невозможно удалить в запрещенном периоде.'"); Иначе Шаблон = НСтр("ru = '%1 невозможно изменить в запрещенном периоде.'"); @@ -2034,7 +2028,7 @@ КонецФункции // Для функции СообщениеОЗапретах. -Функция ПредставлениеДанных(Данные) +Функция ПредставлениеДанных(Данные, ЭтоРегистр) Если ТипЗнч(Данные) = Тип("Строка") Тогда Возврат СокрЛП(Данные); @@ -2089,7 +2083,15 @@ Если ТипЗнч(Данные) = Тип("Структура") И ТипЗнч(Данные.Регистр) <> Тип("Строка") Тогда Возврат Данные.Регистр.Количество() = 0; // нет записей в записываемым наборе данных регистра + Иначе + Замещение = Данные.ДополнительныеСвойства.Замещение; + Если ОбщегоНазначения.ЭтоЗамещениеНабораЗаписей(Замещение) Тогда + Возврат Данные.Количество() = 0; + ИначеЕсли ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат Истина; + КонецЕсли; КонецЕсли; + Возврат Ложь; КонецФункции @@ -2103,11 +2105,11 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | Константы.ВерсияДатЗапретаИзменения КАК ВерсияДатЗапретаИзменения, - | Константы.ИспользоватьДатыЗапретаЗагрузки КАК ИспользоватьДатыЗапретаЗагрузки, - | Константы.ИспользоватьДатыЗапретаИзменения КАК ИспользоватьДатыЗапретаИзменения + | ЗначенияКонстант.ВерсияДатЗапретаИзменения КАК ВерсияДатЗапретаИзменения, + | ЗначенияКонстант.ИспользоватьДатыЗапретаЗагрузки КАК ИспользоватьДатыЗапретаЗагрузки, + | ЗначенияКонстант.ИспользоватьДатыЗапретаИзменения КАК ИспользоватьДатыЗапретаИзменения |ИЗ - | Константы КАК Константы + | Константы КАК ЗначенияКонстант |; | |//////////////////////////////////////////////////////////////////////////////// @@ -2787,3 +2789,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 6fa3cc2fc..70ac874a5 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -100,8 +100,7 @@ ПараметрыВызова = СписокПараметров(Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7); - ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, Истина); - + ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, "Функция"); Возврат ВыполнитьВФоне(ИмяФункции, ПараметрыВызова, ПараметрыВыполнения); КонецФункции @@ -195,9 +194,7 @@ ПараметрыВызова = СписокПараметров(Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7); - - ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, Ложь); - + ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, "Процедура"); Возврат ВыполнитьВФоне(ИмяПроцедуры, ПараметрыВызова, ПараметрыВыполнения); КонецФункции @@ -253,12 +250,12 @@ ПараметрыВыполнения.ОжидатьЗавершение = 0; КонецЕсли; - АдресРезультатов = Новый Соответствие; + АдресаРезультатов = Новый Соответствие; Если ТипЗнч(НаборПараметровФункции) = Тип("Соответствие") Тогда Для Каждого ПараметрФункции Из НаборПараметровФункции Цикл АдресРезультатаПотока = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор); - АдресРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока); + АдресаРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока); КонецЦикла; ПараметрыМетода = НаборПараметровФункции.Количество(); Иначе @@ -269,13 +266,12 @@ ИдентификаторПроцесса = Новый УникальныйИдентификатор; ПараметрыМногопоточнойОперации = ПараметрыМногопоточнойОперации(ИдентификаторПроцесса); ПараметрыМногопоточнойОперации.ИмяМетода = ИмяФункции; - ПараметрыМногопоточнойОперации.ДляФункции = Истина; + ПараметрыМногопоточнойОперации.ЭтоФункция = "Функция"; ПараметрыМногопоточнойОперации.ПараметрыВыполнения = ПараметрыВыполнения; ПараметрыМногопоточнойОперации.ПараметрыМетода = ПараметрыМетода; - ПараметрыМногопоточнойОперации.АдресРезультатов = АдресРезультатов; ПодготовитьМногопоточнуюОперациюКЗапуску(ИмяФункции, - АдресРезультатов, ИдентификаторПроцесса, НаборПараметровФункции); + АдресаРезультатов, ИдентификаторПроцесса, НаборПараметровФункции); РезультатЗапуска = Новый Структура("Статус, ИдентификаторЗадания, АдресРезультата", СтатусДлительнойОперации().Выполняется); @@ -341,12 +337,12 @@ ПараметрыВыполнения.ОжидатьЗавершение = 0; КонецЕсли; - АдресРезультатов = Новый Соответствие; + АдресаРезультатов = Новый Соответствие; Если ТипЗнч(НаборПараметровПроцедуры) = Тип("Соответствие") Тогда Для Каждого ПараметрФункции Из НаборПараметровПроцедуры Цикл АдресРезультатаПотока = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор); - АдресРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока); + АдресаРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока); КонецЦикла; ПараметрыМетода = НаборПараметровПроцедуры.Количество(); Иначе @@ -357,13 +353,12 @@ ИдентификаторПроцесса = Новый УникальныйИдентификатор; ПараметрыМногопоточнойОперации = ПараметрыМногопоточнойОперации(ИдентификаторПроцесса); ПараметрыМногопоточнойОперации.ИмяМетода = ИмяПроцедуры; - ПараметрыМногопоточнойОперации.ДляФункции = Ложь; + ПараметрыМногопоточнойОперации.ЭтоФункция = "Процедура"; ПараметрыМногопоточнойОперации.ПараметрыВыполнения = ПараметрыВыполнения; ПараметрыМногопоточнойОперации.ПараметрыМетода = ПараметрыМетода; - ПараметрыМногопоточнойОперации.АдресРезультатов = АдресРезультатов; ПодготовитьМногопоточнуюОперациюКЗапуску(ИмяПроцедуры, - АдресРезультатов, ИдентификаторПроцесса, НаборПараметровПроцедуры); + АдресаРезультатов, ИдентификаторПроцесса, НаборПараметровПроцедуры); РезультатЗапуска = Новый Структура("Статус, ИдентификаторЗадания, АдресРезультата", СтатусДлительнойОперации().Выполняется); @@ -437,7 +432,6 @@ Результат = ОбщиеПараметрыВыполненияВФоне(); ДобавитьПараметрыВыполненияДляВозвратаРезультата(Результат, ИдентификаторФормы); - Возврат Результат; КонецФункции @@ -583,73 +577,20 @@ Функция ВыполнитьВФоне(Знач ИмяПроцедуры, Знач ПараметрыПроцедуры, Знач ПараметрыВыполнения) Экспорт // Обратная совместимость + НовыеПараметрыВыполнения = ПараметрыВыполненияВФоне(); + ЗаполнитьЗначенияСвойств(НовыеПараметрыВыполнения, ПараметрыВыполнения); Если ПараметрыВыполнения.Свойство("ОжидатьЗавершения") И ПараметрыВыполнения.ОжидатьЗавершения <> -1 Тогда ПараметрыВыполнения.ОжидатьЗавершение = ПараметрыВыполнения.ОжидатьЗавершения; КонецЕсли; + ПараметрыВыполнения = НовыеПараметрыВыполнения; - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперации.ВыполнитьВФоне", "ПараметрыВыполнения", - ПараметрыВыполнения, Тип("Структура")); - Если ПараметрыВыполнения.ЗапуститьНеВФоне И ПараметрыВыполнения.ЗапуститьВФоне Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Параметры ""%1"" и ""%2"" - |не могут одновременно принимать значение %3 в %4.'"), - "ЗапуститьНеВФоне", "ЗапуститьВФоне", "Истина", "ДлительныеОперации.ВыполнитьВФоне"); - КонецЕсли; - Если ПараметрыВыполнения.БезРасширений И ПараметрыВыполнения.СРасширениямиБазыДанных Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Параметры ""%1"" и ""%2"" - |не могут одновременно принимать значение %3 в %4.'"), - "БезРасширений", "СРасширениямиБазыДанных", "Истина", "ДлительныеОперации.ВыполнитьВФоне"); - КонецЕсли; + ПроверитьПараметрыВыполнения(ПараметрыВыполнения); -#Если ВнешнееСоединение Тогда - ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - Если ПараметрыВыполнения.БезРасширений И ИнформационнаяБазаФайловая Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Фоновое задание не может быть запущено с параметром ""%1"" - |во внешнем соединении с файловой информационной базой в %2.'"), - "БезРасширений", "ДлительныеОперации.ВыполнитьВФоне"); - ИначеЕсли ПараметрыВыполнения.СРасширениямиБазыДанных И ИнформационнаяБазаФайловая Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Фоновое задание не может быть запущено с параметром ""%1"" - |во внешнем соединении с файловой информационной базой в %2.'"), - "СРасширениямиБазыДанных", "ДлительныеОперации.ВыполнитьВФоне"); - КонецЕсли; -#КонецЕсли - Результат = Новый Структура; Результат.Вставить("Статус", "Выполняется"); Результат.Вставить("ИдентификаторЗадания", Неопределено); - Если ПараметрыВыполнения.Свойство("АдресРезультата") - И Не ПараметрыВыполнения.Свойство("СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации") Тогда - Если ПараметрыВыполнения.АдресРезультата = Неопределено Тогда - Если Не ЗначениеЗаполнено(ПараметрыВыполнения.ИдентификаторФормы) И ОбщегоНазначения.РежимОтладки() Тогда - Попытка - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Не указан ни уникальный идентификатор формы в параметре %1, - |ни адрес временного хранилища в %2 в %3. - |Убедиться, что при обработке результата временное хранилище очищается явно методом %4.'"), - "ПараметрыВыполнения.ИдентификаторФормы", "ПараметрыВыполнения.АдресРезультата", - "ДлительныеОперации.ВыполнитьВФоне", "УдалитьИзВременногоХранилища"); - Исключение - // АПК:154-выкл Не ошибка, а предупреждение (рекомендация разработчику). - ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Диагностика'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Предупреждение, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - // АПК:154-вкл - КонецПопытки; - КонецЕсли; - ПараметрыВыполнения.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы); - ИначеЕсли Не ЭтоАдресВременногоХранилища(ПараметрыВыполнения.АдресРезультата) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Не указан адрес временного хранилища в параметре %1 - |в %2.'"), - "ПараметрыВыполнения.АдресРезультата", "ДлительныеОперации.ВыполнитьВФоне"); - КонецЕсли; - Результат.Вставить("АдресРезультата", ПараметрыВыполнения.АдресРезультата); - КонецЕсли; - Если ПараметрыВыполнения.Свойство("ДополнительныйРезультат") Тогда - Результат.Вставить("АдресДополнительногоРезультата", ""); - КонецЕсли; + Результат.Вставить("АдресРезультата", ПараметрыВыполнения.АдресРезультата); + Результат.Вставить("АдресДополнительногоРезультата", ""); Результат.Вставить("ИнформацияОбОшибке", Неопределено); Результат.Вставить("КраткоеПредставлениеОшибки", ""); Результат.Вставить("ПодробноеПредставлениеОшибки", ""); @@ -666,35 +607,22 @@ КонецЕсли; ПараметрыЭкспортнойПроцедуры = ПараметрыПроцедуры; - Если Не ПараметрыВыполнения.Свойство("ЭтоФункция") Тогда + Если ПустаяСтрока(ПараметрыВыполнения.ЭтоФункция) Тогда ПараметрыЭкспортнойПроцедуры = Новый Массив; ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыПроцедуры); ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыВыполнения.АдресРезультата); КонецЕсли; - Если ПараметрыВыполнения.Свойство("ДополнительныйРезультат") И ПараметрыВыполнения.ДополнительныйРезультат Тогда + Если ПараметрыВыполнения.ДополнительныйРезультат Тогда Результат.АдресДополнительногоРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы); ПараметрыЭкспортнойПроцедуры.Добавить(Результат.АдресДополнительногоРезультата); КонецЕсли; -#Если ВнешнееСоединение Тогда - ВыполнитьБезФоновогоЗадания = ИнформационнаяБазаФайловая - Или ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне - Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) - Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры); -#Иначе - ВыполнитьБезФоновогоЗадания = Не ПараметрыВыполнения.БезРасширений - И Не ПараметрыВыполнения.СРасширениямиБазыДанных - И (ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне - Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) - Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры)); -#КонецЕсли - - // Выполнить в основном потоке. + ВыполнитьБезФоновогоЗадания = ЭтоВыполнениеБезФоновогоЗадания(ИмяПроцедуры, ПараметрыВыполнения); Если ВыполнитьБезФоновогоЗадания Тогда СообщенияПередВызовом = ПолучитьСообщенияПользователю(Истина); Попытка - Если ПараметрыВыполнения.Свойство("ЭтоФункция") И ПараметрыВыполнения.ЭтоФункция Тогда + Если ПараметрыВыполнения.ЭтоФункция = "Функция" Тогда ВызватьФункцию(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, ПараметрыВыполнения); Иначе ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, ПараметрыВыполнения); @@ -732,10 +660,12 @@ ПараметрыВыполнения.ОжидатьЗавершение <> Неопределено); Исключение Результат.Статус = "Ошибка"; - Если Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено Тогда - УстановитьСвойстваОшибки(Результат, Задание.ИнформацияОбОшибке); - Иначе - УстановитьСвойстваОшибки(Результат, ИнформацияОбОшибке()); + ИнформацияОбОшибке = ?(Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено, + Задание.ИнформацияОбОшибке, ИнформацияОбОшибке()); + УстановитьСвойстваОшибки(Результат, ИнформацияОбОшибке); + Если Не ЭтоОшибкаЗаданиеСТакимЗначениемКлючаУжеВыполняется(Задание, Результат, ПараметрыВыполнения) Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); КонецЕсли; Возврат Результат; КонецПопытки; @@ -749,7 +679,7 @@ Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; Если ИмяПроцедуры = ИмяМетодаМногопоточногоПроцесса() - И Не ПараметрыВыполнения.Свойство("ЭтоПерезапускУправляющегоПотока") Тогда + И Не ПараметрыВыполнения.ЭтоПерезапускУправляющегоПотока Тогда ЗапланироватьЗапускПотоковДлительныхОпераций(Результат, ПараметрыЭкспортнойПроцедуры[0]); КонецЕсли; ЗаданиеВыполнено = Ложь; @@ -1367,8 +1297,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // Параметры: // ИмяПараметра - Строка @@ -1446,6 +1375,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // См. СтандартныеПодсистемыСервер.ПриОтправкеСерверногоОповещения @@ -1570,26 +1501,24 @@ // Структура: // * ИдентификаторПроцесса - УникальныйИдентификатор // * ИмяМетода - Строка -// * ДляФункции - Булево +// * ЭтоФункция - Строка // * ПараметрыВыполнения - см. ПараметрыВыполненияФункции // * ПараметрыМетода - Число, Структура -// * АдресРезультатов - Строка // Функция ПараметрыМногопоточнойОперации(ИдентификаторПроцесса, СохраненныеПараметры = Неопределено) - ПараметрыМногопоточнойОперации = Новый Структура; - ПараметрыМногопоточнойОперации.Вставить("ИдентификаторПроцесса", ИдентификаторПроцесса); - ПараметрыМногопоточнойОперации.Вставить("ИмяМетода", ""); - ПараметрыМногопоточнойОперации.Вставить("ДляФункции", Ложь); - ПараметрыМногопоточнойОперации.Вставить("ПараметрыВыполнения", ПараметрыВыполненияФункции(Неопределено)); - ПараметрыМногопоточнойОперации.Вставить("ПараметрыМетода", 0); - ПараметрыМногопоточнойОперации.Вставить("АдресРезультатов", ""); + Результат = Новый Структура; + Результат.Вставить("ИдентификаторПроцесса", ИдентификаторПроцесса); + Результат.Вставить("ИмяМетода", ""); + Результат.Вставить("ЭтоФункция", "Процедура"); + Результат.Вставить("ПараметрыВыполнения", ПараметрыВыполненияФункции(Неопределено)); + Результат.Вставить("ПараметрыМетода", 0); Если ТипЗнч(СохраненныеПараметры) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ПараметрыМногопоточнойОперации, СохраненныеПараметры); + ЗаполнитьЗначенияСвойств(Результат, СохраненныеПараметры); КонецЕсли; - Возврат ПараметрыМногопоточнойОперации; + Возврат Результат; КонецФункции @@ -1680,6 +1609,33 @@ КонецФункции +// Для функции ВыполнитьВФоне. +Функция ЭтоОшибкаЗаданиеСТакимЗначениемКлючаУжеВыполняется(Задание, Результат, ПараметрыВыполнения) + + Если Задание <> Неопределено + Или Не ЗначениеЗаполнено(ПараметрыВыполнения.КлючФоновогоЗадания) Тогда + Возврат Ложь; + КонецЕсли; + + КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(Результат.ИнформацияОбОшибке); + // АПК:1405-выкл - требуется для быстрого определения причины ошибки + СтрокаПоиска = НСтр("ru = 'Задание с таким значением ключа уже выполняется'; + |en = 'A job with the same key value is performed already'"); + // АПК:1405-вкл + Если ЗначениеЗаполнено(СтрокаПоиска) И СтрНачинаетсяС(КраткоеПредставлениеОшибки, СтрокаПоиска) Тогда + Возврат Истина; + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяМетода", ИмяПроцедурыФоновогоЗаданияДлительнойОперации()); + Отбор.Вставить("Ключ", ПараметрыВыполнения.КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + НайденныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Возврат НайденныеЗадания.Количество() > 1; + +КонецФункции + // Возвращает Истина, если текущий сеанс является сеансом фонового задания // длительной операции или имя метода фонового задания не указано // ни в одном из регламентных заданий. @@ -1786,7 +1742,7 @@ Результат = НовыйРезультатВыполненияОперации(); Попытка ПараметрыВыполнения = ВсеПараметры.ПараметрыВыполнения; - Если ПараметрыВыполнения.Свойство("ЭтоФункция") И ПараметрыВыполнения.ЭтоФункция Тогда + Если ПараметрыВыполнения.ЭтоФункция = "Функция" Тогда ВызватьФункцию(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения); Иначе ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения); @@ -1797,12 +1753,6 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); СистемнаяИнформация = Новый СистемнаяИнформация; СтекЗапуска = ВсеПараметры.СтекЗапуска; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.2009") < 0 Тогда - СтекОшибки = НСтр("ru = 'Стек ошибки фонового задания:'") + Символы.ПС - + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - СтекЗапуска = СтекОшибки + ?(ЗначениеЗаполнено(СтекЗапуска), - Символы.ПС + Символы.ПС + СтекЗапуска, ""); - КонецЕсли; СтекЗапуска = ?(ЗначениеЗаполнено(СтекЗапуска), ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтекЗапуска), Неопределено); Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, @@ -1849,8 +1799,9 @@ Возврат; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяПроцедуры, "ИмяПроцедуры"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяПроцедуры, "ИмяПроцедуры"), + КатегорияОшибки.ОшибкаКонфигурации); КонецПроцедуры @@ -1861,20 +1812,17 @@ Если ПараметрыВыполнения.ВнешнийОтчетОбработка = Неопределено Тогда Если ПараметрыВыполнения.ЗапуститьНеВФоне Тогда Возврат МенеджерОбъекта.Создать(ИмяПодключеннойОбработкиОтчета, БезопасныйРежим()); - Иначе - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для вызова процедуры внешнего отчета или внешней обработки - |требуется заполнить параметр %1'"), - "ВнешнийОтчетОбработка"); - ВызватьИсключение ТекстОшибки; КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для вызова процедуры внешнего отчета или внешней обработки + |требуется заполнить параметр %1.'"), + "ВнешнийОтчетОбработка"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; - Если ЭтоВнешнийОтчет Тогда - ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОтчетов", Метаданные); - Иначе - ВыполнитьПроверкуПравДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); - КонецЕсли; + ИмяПраваДоступа = ?(ЭтоВнешнийОтчет, "ИнтерактивноеОткрытиеВнешнихОтчетов", "ИнтерактивноеОткрытиеВнешнихОбработок"); + ВыполнитьПроверкуПравДоступа(ИмяПраваДоступа, Метаданные); БезопасныйРежим = БезопасныйРежим(); Если БезопасныйРежим <> Ложь Тогда @@ -1960,14 +1908,15 @@ Возврат; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяФункции, "ИмяФункции"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяФункции, "ИмяФункции"), + КатегорияОшибки.ОшибкаКонфигурации); КонецПроцедуры Процедура УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения) - Если Не ПараметрыВыполнения.Свойство("СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации") Тогда + Если ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации = Неопределено Тогда ПоместитьВоВременноеХранилище(Результат, ПараметрыВыполнения.АдресРезультата); Возврат; КонецЕсли; @@ -1977,9 +1926,6 @@ УстановитьРезультатПотока(ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации, Результат); - УстановитьПривилегированныйРежим(Ложь); - УстановитьОтключениеБезопасногоРежима(Ложь); - КонецПроцедуры // Параметры: @@ -2233,8 +2179,7 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Неизвестный вид оповещения длительной операции ""%1"".'"), ВидОповещения); - - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецФункции @@ -2335,9 +2280,11 @@ Сеанс = ПолучитьТекущийСеансИнформационнойБазы(); Если ПараметрыВыполнения.ОжидатьЗавершение = Неопределено И Сеанс.ИмяПриложения = "BackgroundJob" Тогда - ВызватьИсключение НСтр("ru = 'В файловой информационной базе невозможно одновременно выполнять более одного фонового задания'"); + ВызватьИсключение(НСтр("ru = 'В файловой информационной базе невозможно одновременно выполнять более одного фонового задания.'"), + КатегорияОшибки.ОшибкаКонфигурации); ИначеЕсли Сеанс.ИмяПриложения = "COMConnection" Тогда - ВызватьИсключение НСтр("ru = 'В файловой информационной базе можно запустить фоновое задание только из клиентского приложения'"); + ВызватьИсключение(НСтр("ru = 'В файловой информационной базе можно запустить фоновое задание только из клиентского приложения.'"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецЕсли; @@ -2346,7 +2293,8 @@ Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеБезРасширений(ИмяМетода, Параметры, Ключ, Наименование); ИначеЕсли ПараметрыВыполнения.СРасширениямиБазыДанных Тогда - Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(ИмяМетода, Параметры, Ключ, Наименование); + Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(ИмяМетода, Параметры, + Ключ, Наименование); Иначе Возврат ФоновыеЗадания.Выполнить(ИмяМетода, Параметры, Ключ, Наименование); КонецЕсли; @@ -2378,14 +2326,14 @@ КонецФункции -Функция ПодготовитьПараметрыВыполнения(ПереданныйПараметр, ДляФункции) +Функция ПодготовитьПараметрыВыполнения(ПереданныйПараметр, ЭтоФункция) Результат = ОбщиеПараметрыВыполненияВФоне(); Если ЗначениеЗаполнено(ПереданныйПараметр) Тогда Если ТипЗнч(ПереданныйПараметр) = Тип("Структура") Тогда Результат = ПереданныйПараметр; - ИначеЕсли ДляФункции Тогда + ИначеЕсли ЭтоФункция = "Функция" Тогда Идентификатор = Неопределено; Если ТипЗнч(ПереданныйПараметр) = Тип("ФормаКлиентскогоПриложения") Тогда Идентификатор = ПереданныйПараметр.УникальныйИдентификатор; @@ -2396,12 +2344,94 @@ КонецЕсли; КонецЕсли; - Результат.Вставить("ЭтоФункция", ДляФункции); - + Результат.ЭтоФункция = ЭтоФункция; Возврат Результат; КонецФункции +Процедура ПроверитьПараметрыВыполнения(ПараметрыВыполнения) + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперации.ВыполнитьВФоне", "ПараметрыВыполнения", + ПараметрыВыполнения, Тип("Структура")); + Если ПараметрыВыполнения.ЗапуститьНеВФоне И ПараметрыВыполнения.ЗапуститьВФоне Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Параметры ""%1"" и ""%2"" + |не могут одновременно принимать значение %3 в %4.'"), + "ЗапуститьНеВФоне", "ЗапуститьВФоне", "Истина", "ДлительныеОперации.ВыполнитьВФоне"), + КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + Если ПараметрыВыполнения.БезРасширений И ПараметрыВыполнения.СРасширениямиБазыДанных Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Параметры ""%1"" и ""%2"" + |не могут одновременно принимать значение %3 в %4.'"), + "БезРасширений", "СРасширениямиБазыДанных", "Истина", "ДлительныеОперации.ВыполнитьВФоне"), + КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + +#Если ВнешнееСоединение Тогда + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + Если ПараметрыВыполнения.БезРасширений И ИнформационнаяБазаФайловая Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Фоновое задание не может быть запущено с параметром ""%1"" + |во внешнем соединении с файловой информационной базой в %2.'"), + "БезРасширений", "ДлительныеОперации.ВыполнитьВФоне"), + КатегорияОшибки.ОшибкаКонфигурации); + ИначеЕсли ПараметрыВыполнения.СРасширениямиБазыДанных И ИнформационнаяБазаФайловая Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Фоновое задание не может быть запущено с параметром ""%1"" + |во внешнем соединении с файловой информационной базой в %2.'"), + "СРасширениямиБазыДанных", "ДлительныеОперации.ВыполнитьВФоне"), + КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; +#КонецЕсли + + Если ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации = Неопределено Тогда + Если ПараметрыВыполнения.АдресРезультата = Неопределено Тогда + Если Не ЗначениеЗаполнено(ПараметрыВыполнения.ИдентификаторФормы) И ОбщегоНазначения.РежимОтладки() Тогда + Попытка + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Не указан ни уникальный идентификатор формы в параметре %1, + |ни адрес временного хранилища в %2 в %3. + |Убедиться, что при обработке результата временное хранилище очищается явно методом %4.'"), + "ПараметрыВыполнения.ИдентификаторФормы", "ПараметрыВыполнения.АдресРезультата", + "ДлительныеОперации.ВыполнитьВФоне", "УдалитьИзВременногоХранилища"), + КатегорияОшибки.ОшибкаКонфигурации); + Исключение + // АПК:154-выкл Не ошибка, а предупреждение (рекомендация разработчику). + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Диагностика'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + // АПК:154-вкл + КонецПопытки; + КонецЕсли; + ПараметрыВыполнения.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы); + ИначеЕсли Не ЭтоАдресВременногоХранилища(ПараметрыВыполнения.АдресРезультата) Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Не указан адрес временного хранилища в параметре %1 + |в %2.'"), + "ПараметрыВыполнения.АдресРезультата", "ДлительныеОперации.ВыполнитьВФоне"), + КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоВыполнениеБезФоновогоЗадания(ИмяПроцедуры, ПараметрыВыполнения) + +#Если ВнешнееСоединение Тогда + Возврат ОбщегоНазначения.ИнформационнаяБазаФайловая() + Или ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне + Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) + Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры); +#Иначе + Возврат Не ПараметрыВыполнения.БезРасширений + И Не ПараметрыВыполнения.СРасширениямиБазыДанных + И (ОбщегоНазначения.РежимОтладки() Или ПараметрыВыполнения.ЗапуститьНеВФоне + Или (ЕстьФоновыеЗаданияВФайловойИБ() И Не ПараметрыВыполнения.ЗапуститьВФоне) + Или Не ВозможноВыполнитьВФоне(ИмяПроцедуры)); +#КонецЕсли + +КонецФункции + Функция ОбщиеПараметрыВыполненияВФоне() Результат = Новый Структура; @@ -2416,6 +2446,9 @@ Результат.Вставить("ОжидатьЗавершения", -1); // Обратная совместимость Результат.Вставить("ВнешнийОтчетОбработка", Неопределено); Результат.Вставить("УточнениеОшибки", ""); + Результат.Вставить("ЭтоФункция", ""); // служебный + Результат.Вставить("ЭтоПерезапускУправляющегоПотока", Ложь); // служебный + Результат.Вставить("СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации", Неопределено); // служебный Возврат Результат; @@ -2485,49 +2518,17 @@ Прервать; КонецЕсли; - Если Не ДинамическоеПолучениеПорций - И КоличествоОбработанныхПорций = Неопределено Тогда + Если Не ДинамическоеПолучениеПорций И КоличествоОбработанныхПорций = Неопределено Тогда КоличествоОбработанныхПорций = КоличествоПорций - Потоки.Количество(); КонецЕсли; Для Каждого Поток Из Потоки Цикл - Если Поток.Статус <> СтатусДлительнойОперации().Создано Тогда - Если ПрерватьВыполнениеЕслиОшибка Тогда - ЗавершитьДосрочно = Истина; - Прервать; - КонецЕсли; - // @skip-check query-in-loop - ветка с запросом вызывается только при первом вызове в сеансе - ОтправитьСообщенияПотока(Поток.ИдентификаторЗадания); - КонецЕсли; - - Результат = Неопределено; - Пока Результат = Неопределено Цикл - // @skip-check query-in-loop - зачитывание актуальных данных о потоках из ИБ. - ВыполнитьВФоне = ОжидатьСвободныйПоток(ИдентификаторПроцесса, ПрерватьВыполнениеЕслиОшибка); - Если ВыполнитьВФоне = Неопределено Тогда - ЗавершитьДосрочно = Истина; - Прервать; - КонецЕсли; - - // @skip-check query-in-loop - зачитывание актуальных данных о потоках из ИБ. - Результат = ВыполнитьПоток(Поток, ПараметрыОперации, ВыполнитьВФоне, ИдентификаторЗаданияПроцесса); - - КонецЦикла; - + ЗавершитьДосрочно = ПроконтролироватьВыполнениеПотока(Поток, ПараметрыОперации, ИдентификаторЗаданияПроцесса); Если ЗавершитьДосрочно Тогда Прервать; КонецЕсли; - - Если Результат.Статус = СтатусДлительнойОперации().Ошибка Тогда - - Если ПрерватьВыполнениеЕслиОшибка Тогда - ЗавершитьДосрочно = Истина; - Прервать; - КонецЕсли; - - КонецЕсли; - + Если ДинамическоеПолучениеПорций Тогда Процент = КонтекстПолученияИОбработкиПорций.Процент; Иначе @@ -2589,7 +2590,41 @@ КонецФункции -// Выполнить указанный поток +Функция ПроконтролироватьВыполнениеПотока(Поток, ПараметрыОперации, ИдентификаторЗаданияПроцесса) + + ИдентификаторПроцесса = ПараметрыОперации.ИдентификаторПроцесса; + ПрерватьВыполнениеЕслиОшибка = ПараметрыОперации.ПараметрыВыполнения.ПрерватьВыполнениеЕслиОшибка; + + Если Поток.Статус <> СтатусДлительнойОперации().Создано Тогда + Если ПрерватьВыполнениеЕслиОшибка Тогда + Возврат Истина; + КонецЕсли; + // @skip-check query-in-loop - ветка с запросом вызывается только при первом вызове в сеансе + ОтправитьСообщенияПотока(Поток.ИдентификаторЗадания); + КонецЕсли; + + Результат = Неопределено; + Пока Результат = Неопределено Цикл + // @skip-check query-in-loop - зачитывание актуальных данных о потоках из ИБ. + ВыполнитьВФоне = ОжидатьСвободныйПоток(ИдентификаторПроцесса, ПрерватьВыполнениеЕслиОшибка); + Если ВыполнитьВФоне = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + // @skip-check query-in-loop - зачитывание актуальных данных о потоках из ИБ. + Результат = ВыполнитьПоток(Поток, ПараметрыОперации, ВыполнитьВФоне, ИдентификаторЗаданияПроцесса); + + КонецЦикла; + + Если Результат.Статус = СтатусДлительнойОперации().Ошибка И ПрерватьВыполнениеЕслиОшибка Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Выполнить указанный поток. // // Параметры: // Поток - РегистрСведенийНаборЗаписей.ДлительныеОперации @@ -2610,7 +2645,7 @@ СвойстваПотока = Новый Структура; СвойстваПотока.Вставить("ИдентификаторПроцесса", Поток.ИдентификаторПроцесса); СвойстваПотока.Вставить("ИдентификаторПотока", Поток.ИдентификаторПотока); - ПараметрыВыполнения.Вставить("СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации", СвойстваПотока); + ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации = СвойстваПотока; Если ТипЗнч(Поток.ПараметрыПотока) = Тип("ХранилищеЗначения") Тогда ПараметрыМетода = Поток.ПараметрыПотока.Получить(); @@ -2618,11 +2653,9 @@ ПараметрыМетода = Новый Массив; КонецЕсли; - ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, ПараметрыОперации.ДляФункции); + ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, ПараметрыОперации.ЭтоФункция); ПараметрыВыполнения.ВнешнийОтчетОбработка = ПараметрыОперации.ПараметрыВыполнения.ВнешнийОтчетОбработка; - ПараметрыВыполнения.АдресРезультата = Поток.АдресРезультата; - РезультатЗапуска = Неопределено; МаксимумПотоков = ДопустимоеКоличествоПотоков(); @@ -2748,7 +2781,7 @@ КонецЕсли; Запись.Статус = РезультатЗапуска.Статус; Если РезультатЗапуска.Статус = СтатусДлительнойОперации().Ошибка Тогда - Запись.ПараметрыМетода = Новый ХранилищеЗначения(РезультатЗапуска.ИнформацияОбОшибке); + Запись.ПараметрыМетода = Новый ХранилищеЗначения(РезультатЗапуска.ИнформацияОбОшибке, Новый СжатиеДанных(9)); Запись.ПодробноеПредставлениеОшибки = РезультатЗапуска.ПодробноеПредставлениеОшибки; Запись.КраткоеПредставлениеОшибки = РезультатЗапуска.КраткоеПредставлениеОшибки; КонецЕсли; @@ -2788,10 +2821,9 @@ КонецЕсли; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось найти запись управляющего потока многопоточной длительной операции %1'"), + НСтр("ru = 'Управляющий поток многопоточной длительной операции %1 не существует.'"), Строка(ИдентификаторПроцесса)); - - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецФункции @@ -2822,7 +2854,7 @@ // Процедура УстановитьРезультатПотока(СвойстваПотока, Результат) - Результат = Новый ХранилищеЗначения(Результат); + Результат = Новый ХранилищеЗначения(Результат, Новый СжатиеДанных(9)); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ДлительныеОперации"); @@ -3319,7 +3351,7 @@ КонецФункции -Процедура ПодготовитьМногопоточнуюОперациюКЗапуску(Знач ИмяМетода, АдресРезультатов, +Процедура ПодготовитьМногопоточнуюОперациюКЗапуску(Знач ИмяМетода, АдресаРезультатов, Знач ИдентификаторПроцесса, Знач Порции, ОбновленныеПараметрыОперации = Неопределено) ИмяПользователя = ""; @@ -3340,14 +3372,14 @@ Запись.ИдентификаторПроцесса = ИдентификаторПроцесса; Запись.ИдентификаторПотока = Новый УникальныйИдентификатор; Запись.ИмяМетода = ИмяМетода; - Запись.КлючПотока = Новый ХранилищеЗначения(КлючЗначение.Ключ); - Запись.АдресРезультата = АдресРезультатов[КлючЗначение.Ключ]; + Запись.КлючПотока = Новый ХранилищеЗначения(КлючЗначение.Ключ, Новый СжатиеДанных(9)); + Запись.АдресРезультата = АдресаРезультатов[КлючЗначение.Ключ]; Запись.Статус = СтатусДлительнойОперации().Создано; Запись.НомерПопытки = 0; Запись.Наименование = Строка(КлючЗначение.Ключ); Запись.ДатаСоздания = ТекущаяДатаСеанса; Запись.ИмяПользователя = ИмяПользователя; - Запись.ПараметрыПотока = Новый ХранилищеЗначения(КлючЗначение.Значение); + Запись.ПараметрыПотока = Новый ХранилищеЗначения(КлючЗначение.Значение, Новый СжатиеДанных(9)); КонецЦикла; @@ -3374,13 +3406,13 @@ НаборИзОднойЗаписи.Прочитать(); Если НаборИзОднойЗаписи.Количество() <> 1 Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось найти запись управляющего потока многопоточной длительной операции %1'"), + НСтр("ru = 'Управляющий поток многопоточной длительной операции %1 не существует.'"), Строка(ИдентификаторПроцесса)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ТекущийКэш = ОбновленныеПараметрыОперации.ПараметрыМетода.Контекст.Кэш; ОбновленныеПараметрыОперации.ПараметрыМетода.Контекст.Кэш = Неопределено; - НаборИзОднойЗаписи[0].ПараметрыВыполнения = Новый ХранилищеЗначения(ОбновленныеПараметрыОперации); + НаборИзОднойЗаписи[0].ПараметрыВыполнения = Новый ХранилищеЗначения(ОбновленныеПараметрыОперации, Новый СжатиеДанных(9)); ОбновленныеПараметрыОперации.ПараметрыМетода.Контекст.Кэш = ТекущийКэш; НаборИзОднойЗаписи.Записать(); НаборЗаписей.Записать(Ложь); @@ -3398,11 +3430,13 @@ Если НаборПараметров <> Неопределено И ТипЗнч(НаборПараметров) <> Тип("Соответствие") И ТипЗнч(НаборПараметров) <> Тип("Структура") Тогда - ВызватьИсключение НСтр("ru ='Передан неверный тип набора параметров'"); + ВызватьИсключение(НСтр("ru ='Неверный тип набора параметров многопоточной длительной операции.'"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - ВызватьИсключение НСтр("ru ='Многопоточные длительные операции в неразделенном сеансе не поддерживаются.'"); + ВызватьИсключение(НСтр("ru ='Многопоточные длительные операции в неразделенном сеансе не поддерживаются.'"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецПроцедуры @@ -3482,21 +3516,21 @@ // При перезапуске фонового задания обязателен запуск нового фонового задания, // поэтому запуск всегда в фоне (очередь заданий в файловом варианте). ПараметрыВыполнения.ЗапуститьВФоне = Истина; - ПараметрыВыполнения.Вставить("ЭтоПерезапускУправляющегоПотока"); + ПараметрыВыполнения.ЭтоПерезапускУправляющегоПотока = Истина; РезультатЗапуска = ВыполнитьФункцию(ПараметрыВыполнения, ИмяМетодаМногопоточногоПроцесса(), ПараметрыОперации); Если Не ЗначениеЗаполнено(РезультатЗапуска.ИдентификаторЗадания) Тогда - ТекстОшибки = НСтр("ru = 'Получен пустой идентификатор фонового задания'"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(НСтр("ru = 'Пустой идентификатор фонового задания.'"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; НовоеЗадание = НайтиЗаданиеПоИдентификатору(РезультатЗапуска.ИдентификаторЗадания); Если НовоеЗадание = Неопределено Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено новое фоновое задание по идентификатору %1'"), + НСтр("ru = 'Фоновое задание с идентификатором %1 не существует.'"), РезультатЗапуска.ИдентификаторЗадания); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Задание = НовоеЗадание; @@ -3506,7 +3540,7 @@ Свойства.Перезапущенные = Новый ФиксированноеСоответствие(Перезапущенные); ПараметрыСеанса.ДлительныеОперации = Новый ФиксированнаяСтруктура(Свойства); - Поток.КлючПотока = Новый ХранилищеЗначения(РезультатЗапуска.ИдентификаторЗадания); + Поток.КлючПотока = Новый ХранилищеЗначения(РезультатЗапуска.ИдентификаторЗадания, Новый СжатиеДанных(9)); РезультатЗапуска.ИдентификаторЗадания = ИдентификаторЗадания; ОбновитьСведенияОбПотоке(Поток, РезультатЗапуска); Исключение @@ -3571,7 +3605,7 @@ Запись.АдресРезультата = РезультатЗапуска.АдресРезультата; Запись.ИдентификаторЗадания = РезультатЗапуска.ИдентификаторЗадания; Запись.Статус = РезультатЗапуска.Статус; - Запись.ПараметрыВыполнения = Новый ХранилищеЗначения(ПараметрыОперации); + Запись.ПараметрыВыполнения = Новый ХранилищеЗначения(ПараметрыОперации, Новый СжатиеДанных(9)); НаборЗаписей.Записать(); @@ -3583,8 +3617,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Журнал регистрации +#Область ЖурналРегистрации Процедура ЗаписатьОшибку(Знач Текст) @@ -3603,4 +3636,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index d9e71fc68..983c84fb0 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -11,17 +11,17 @@ // Открыть стандартную форму ожидания завершения длительной операции или использовать собственную форму // и подключить обработчик оповещения о завершении и прогрессе выполнения процедуры длительной операции. // -// Применяется совместно с функцией ДлительныеОперации.ВыполнитьВФоне для повышения отзывчивости +// Применяется совместно с функцией ДлительныеОперации.ВыполнитьВФоне для повышения отзывчивости // пользовательского интерфейса, заменяя длительный серверный вызов на запуск фонового задания. // // Параметры: -// ДлительнаяОперация - см. ДлительныеОперации.ВыполнитьВФоне -// ОповещениеОЗавершении - ОписаниеОповещения - оповещение, которое вызывается после завершения -// длительной операции, в том числе после закрытия окна ожидания, если открывалось. -// Параметры процедуры-обработчика оповещения: -// * Результат - см. НовыйРезультатДлительнойОперации -// - Неопределено - если задание было отменено -// * ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. +// ДлительнаяОперация - см. ДлительныеОперации.ВыполнитьВФоне +// ОповещениеОЗавершении - ОписаниеОповещения - оповещение, которое вызывается после завершения +// длительной операции, в том числе после закрытия окна ожидания, если открывалось. +// Параметры процедуры-обработчика оповещения: +// # Результат - см. НовыйРезультатДлительнойОперации +// - Неопределено - если задание было отменено +// # ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. // ПараметрыОжидания - см. ДлительныеОперацииКлиент.ПараметрыОжидания // Процедура ОжидатьЗавершение(Знач ДлительнаяОперация, Знач ОповещениеОЗавершении = Неопределено, @@ -113,8 +113,8 @@ // * ОповещениеОПрогрессеВыполнения - ОписаниеОповещения - оповещение, которое периодически вызывается при // проверке готовности фонового задания, если ВыводитьОкноОжидания = Ложь. // Параметры процедуры-обработчика оповещения: -// ** Результат - см. НовоеСостояниеДлительнойОперации -// ** ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. +// # Результат - см. НовоеСостояниеДлительнойОперации +// # ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. // // * Интервал - Число - интервал в секундах между проверками готовности длительной операции. // По умолчанию 0 - после каждой проверки интервал увеличивается с 1 до 15 секунд @@ -224,9 +224,9 @@ // "Ошибка", если задание завершено с ошибкой. // // * Прогресс - см. ДлительныеОперации.ПрочитатьПрогресс -// * Сообщения - Неопределено - нет сообщений -// - ФиксированныйМассив - массив объектов СообщениеПользователю, очередная порция -// сообщений, отправленных из процедуры длительной операции. +// * Сообщения - Неопределено - нет сообщений. +// - ФиксированныйМассив из СообщениеПользователю - порция сообщений, +// отправленных из процедуры длительной операции. // // * ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, если запускалось. // - Неопределено - если задание не запускалось (например, выполнение не в фоне). @@ -324,7 +324,7 @@ // Параметры: // Параметры - см. ОбщегоНазначенияПереопределяемый.ПередПериодическойОтправкойДанныхКлиентаНаСервер.Параметры -// ОбсужденияАктивны - Булево - для доставки сообщений используется подсистема взаимодействия. +// ОбсужденияАктивны - Булево - для доставки сообщений используется Система взаимодействия. // Интервал - Число - уточняемое значение - число секунд до следующей проверки. // Процедура ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры, ОбсужденияАктивны, Интервал) Экспорт @@ -340,7 +340,7 @@ // Параметры: // Результаты - см. ОбщегоНазначенияПереопределяемый.ПриПериодическомПолученииДанныхКлиентаНаСервере.Результаты -// ОбсужденияАктивны - Булево - для доставки сообщений используется подсистема взаимодействия. +// ОбсужденияАктивны - Булево - для доставки сообщений используется Система взаимодействия. // Интервал - Число - уточняемое значение - число секунд до следующей проверки. // Процедура ПослеПериодическогоПолученияДанныхКлиентаНаСервере(Результаты, ОбсужденияАктивны, Интервал) Экспорт @@ -399,7 +399,7 @@ КонецПроцедуры // Параметры: -// ОбсужденияАктивны - Булево - для доставки сообщений используется подсистема взаимодействия. +// ОбсужденияАктивны - Булево - для доставки сообщений используется Система взаимодействия. // Интервал - Число - уточняемое значение - число секунд до следующей проверки. // // Возвращаемое значение: @@ -584,7 +584,7 @@ // * ТекущийИнтервал - Число // * Контроль - Дата // -// * ВремяОтправкиПоследнегоПрогресса - Число - универсальная дата в миллисекундах +// * ВремяОтправкиПоследнегоПрогресса - Число - универсальная дата в миллисекундах. // * ПолученоОповещениеОЗавершении - Булево // // ДлительнаяОперация - см. ДлительныеОперации.НовыйРезультатВыполненияОперации diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 5bb7179b5..56d505431 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -462,7 +462,7 @@ ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); Блокировка.Заблокировать(); ДополнительнаяОбработкаОбъект = Ссылка.ПолучитьОбъект(); - ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(Настройки); + ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(9)); ДополнительнаяОбработкаОбъект.Записать(); ЗафиксироватьТранзакцию(); @@ -502,7 +502,8 @@ // ТаблицаЗначений - описание объектов метаданных: // * Метаданные - ОбъектМетаданных - объект метаданных, подключенный к данному виду. // * ПолноеИмя - Строка - полное имя объекта метаданных, например "Справочник.Валюты". -// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - ссылка объекта метаданных. +// * Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных, +// СправочникСсылка.ИдентификаторыОбъектовРасширений - ссылка объекта метаданных. // * Вид - Строка - вид объекта метаданных. // * Представление - Строка - представление объекта метаданных. // * ПолноеПредставление - Строка - представление имени и вида объекта метаданных. @@ -592,7 +593,7 @@ Возврат Результат; КонецФункции -// Формирует запрос для получения таблицы команд дополнительных отчетов или обработок. +// Возвращает таблицу команд дополнительных отчетов или обработок. // // Параметры: // ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - вид обработки. @@ -600,16 +601,13 @@ // - Строка - ссылка или полное имя объекта метаданных, // к которому привязаны искомые дополнительные отчеты и обработки. // Глобальные обработки размещаются в разделах, контекстные - в справочниках и документах. -// ЭтоФормаОбъекта - Булево - -// Тип форм, в которых размещены контекстные дополнительные отчеты и обработки. +// ЭтоФормаОбъекта - Булево - тип форм, в которых размещены контекстные дополнительные отчеты и обработки. // Истина - только отчеты и обработки, привязанные к формам объектов. // Ложь - только отчеты и обработки, привязанные к формам списков. // ТипыКоманд - ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок - тип получаемых команд. // - Массив из ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок -// ТолькоВключенные - Булево - -// Тип форм, в которых размещены контекстные дополнительные отчеты и обработки. -// Истина - только отчеты и обработки, привязанные к формам объектов. -// Ложь - только отчеты и обработки, привязанные к формам списков. +// ТолькоВключенные - Булево - Истина, если нужно вернуть только включенные пользователем в настройках. +// Ложь, если нужно вернуть все. // // Возвращаемое значение: // ТаблицаЗначений: @@ -621,17 +619,18 @@ // * ПоказыватьОповещение - Булево - показывать оповещение пользователю после выполнения команды. // * Модификатор - Строка - модификатор команды. // -Функция НовыйЗапросПоДоступнымКомандам(ВидОбработок, Размещение, ЭтоФормаОбъекта = Неопределено, ТипыКоманд = Неопределено, ТолькоВключенные = Истина) Экспорт +Функция ДополнительныеКоманды(Знач ВидОбработок, Знач Размещение, Знач ЭтоФормаОбъекта = Неопределено, + Знач ТипыКоманд = Неопределено, Знач ТолькоВключенные = Истина) Экспорт + Запрос = Новый Запрос; - Если ТипЗнч(Размещение) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Если ТипЗнч(Размещение) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + ИЛИ ТипЗнч(Размещение) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда СсылкаРодителяИлиРаздела = Размещение; Иначе - Если ЗначениеЗаполнено(Размещение) Тогда - СсылкаРодителяИлиРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Размещение); - Иначе - СсылкаРодителяИлиРаздела = Неопределено; - КонецЕсли; + СсылкаРодителяИлиРаздела = ?(ЗначениеЗаполнено(Размещение), + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Размещение), + Неопределено); КонецЕсли; Если СсылкаРодителяИлиРаздела <> Неопределено Тогда // Есть фильтр по родителю. @@ -810,7 +809,40 @@ | Представление"; КонецЕсли; - Возврат Запрос; + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +// Возвращает таблицу команд загрузки данных из файла. +// +// Возвращаемое значение: +// см. ДополнительныеКоманды +// +Функция ДополнительныеКомандыЗагрузкиДанныхИзФайла() Экспорт + + Возврат ДополнительныеКоманды(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка, + Неопределено, Ложь, Перечисления.СпособыВызоваДополнительныхОбработок.ЗагрузкаДанныхИзФайла); + +КонецФункции + +// Возвращает таблицу команд печати. +// +// Параметры: +// Размещение - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - Строка - ссылка или полное имя объекта метаданных, к которому привязаны +// искомые дополнительные отчеты и обработки. +// ЭтоФормаОбъекта - Булево - тип форм, в которых размещены контекстные дополнительные отчеты и обработки. +// Истина - только отчеты и обработки, привязанные к формам объектов. +// Ложь - только отчеты и обработки, привязанные к формам списков. +// +// Возвращаемое значение: +// см. ДополнительныеКоманды +// +Функция ДополнительныеКомандыПечати(Знач Размещение, Знач ЭтоФормаОбъекта = Неопределено) Экспорт + + Возврат ДополнительныеКоманды(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, Размещение, + ЭтоФормаОбъекта); + КонецФункции // Параметры: @@ -857,8 +889,7 @@ Возврат (Тип = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия // Удаление ссылок подсистем перед их удалением. Процедура ПередУдалениемИдентификатораОбъектаМетаданных(ИдентификаторОбъектаМетаданныхОбъект, Отказ) Экспорт @@ -945,8 +976,9 @@ ЗарегистрироватьОтчетыИОбработки(ОтчетыИОбработки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт @@ -1185,29 +1217,46 @@ Процедура ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт // Очищает команды дополнительных отчетов и обработок у указанного пользователя. - - Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") + Или Настройки.ИдентификаторНастройки <> "НастройкаБыстрогоДоступа" Тогда Возврат; КонецЕсли; - Если Настройки.ИдентификаторНастройки <> "НастройкаБыстрогоДоступа" Тогда - Возврат; - КонецЕсли; + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено; + + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам"); + ЭлементБлокировки.УстановитьЗначение("Пользователь", СведенияОПользователе.ПользовательСсылка); - Для Каждого ЭлементСтрока Из Настройки.ЗначениеНастройки Цикл + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); + Если ПакетныйРежим Тогда + УдаляемыеЗаписи = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьНаборЗаписей(); + Для Каждого ЗначениеНастройки Из Настройки.ЗначениеНастройки Цикл + УдаляемаяЗапись = УдаляемыеЗаписи.Добавить(); + УдаляемаяЗапись.ДополнительныйОтчетИлиОбработка = ЗначениеНастройки.Значение; + УдаляемаяЗапись.ИдентификаторКоманды = ЗначениеНастройки.Представление; + УдаляемаяЗапись.Пользователь = СведенияОПользователе.ПользовательСсылка; + КонецЦикла; + УдаляемыеЗаписи.Записать(РежимУдаления); + Иначе + Для Каждого ЗначениеНастройки Из Настройки.ЗначениеНастройки Цикл + УдаляемыеЗаписи = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьНаборЗаписей(); + УдаляемыеЗаписи.Отбор.ДополнительныйОтчетИлиОбработка.Установить(ЗначениеНастройки.Значение); + УдаляемыеЗаписи.Отбор.ИдентификаторКоманды.Установить(ЗначениеНастройки.Представление); + УдаляемыеЗаписи.Отбор.Пользователь.Установить(СведенияОПользователе.ПользовательСсылка); + УдаляемыеЗаписи.Записать(); + КонецЦикла; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки - Запись.ДополнительныйОтчетИлиОбработка = ЭлементСтрока.Значение; - Запись.ИдентификаторКоманды = ЭлементСтрока.Представление; - Запись.Пользователь = СведенияОПользователе.ПользовательСсылка; - - Запись.Прочитать(); - - Запись.Удалить(); - - КонецЦикла; - КонецПроцедуры // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. @@ -1687,8 +1736,7 @@ Возврат; КонецЕсли; - Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ИмяОбъекта); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам + ТаблицаКоманд = ДополнительныеКоманды(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ИмяОбъекта); Если ТаблицаКоманд.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -1729,9 +1777,8 @@ Возврат; КонецЕсли; - Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам - + ТаблицаКоманд = ДополнительныеКоманды(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, + ПолноеИмяОбъектаМетаданных); Для Каждого Команда Из ТаблицаКоманд Цикл Если Не ЭтоПоставляемаяОбработка(Команда.Ссылка) Тогда Продолжить; @@ -1756,9 +1803,7 @@ Возврат; КонецЕсли; - Запрос = НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам - + ТаблицаКоманд = ДополнительныеКоманды(Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма, ПолноеИмяОбъектаМетаданных); Команда = ТаблицаКоманд.Найти(Идентификатор, "Идентификатор"); Если Команда <> Неопределено Тогда ВнешняяПечатнаяФормаСсылка = Команда.Ссылка; @@ -1806,6 +1851,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -1879,8 +1926,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Регламентные задания +#Область РегламентныеЗадания // Обработчик экземпляра регламентного задания ЗапускОбработок. // Запускает обработчик глобальной обработки по регламентному заданию, @@ -1914,8 +1960,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#КонецОбласти + +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Возвращает Истина если вид относится к категории глобальных дополнительных отчетов или обработок. // @@ -1997,17 +2044,18 @@ // Строка // Функция ПредставлениеОбъектаМетаданных(Объект) Экспорт - Если ТипЗнч(Объект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + + Если ТипЗнч(Объект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") + ИЛИ ТипЗнч(Объект) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Объект, Ложь); Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда Возврат НСтр("ru = '<Не существует>'"); КонецЕсли; - ИначеЕсли ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда - ОбъектМетаданных = Объект; Иначе - ОбъектМетаданных = Метаданные.Подсистемы.Найти(Объект); + ОбъектМетаданных = ?(ТипЗнч(Объект) = Тип("ОбъектМетаданных"), Объект, Метаданные.Подсистемы.Найти(Объект)); КонецЕсли; - Возврат ОбъектМетаданных.Представление(); + Возврат ОбщегоНазначения.ПредставлениеСписка(ОбъектМетаданных); + КонецФункции // Возвращаемое значение: @@ -2154,8 +2202,9 @@ Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", ОбщегоНазначения.КодОсновногоЯзыка()); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +#КонецОбласти + +#Область ЛокальныеСлужебныеПроцедурыИФункции // Для внутреннего использования. Процедура ВыполнитьКомандуДополнительногоОтчетаИлиОбработки(ВнешнийОбъект, Знач ИдентификаторКоманды, ПараметрыКоманды) @@ -2287,8 +2336,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры используемые при обмене данными. +#КонецОбласти + +#Область ПроцедурыИспользуемыеПриОбменеДанными // Переопределяет стандартное поведение при загрузке данных. // Реквизит РегламентноеЗаданиеGUID табличной части Команды не переносится, @@ -2333,9 +2383,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сопоставление элементов справочника объектам метаданных конфигурации. +#КонецОбласти +#Область СопоставлениеЭлементовСправочникаОбъектамМетаданныхКонфигурации // Параметры: // ОтчетыИОбработки - см. ЗагрузитьДополнительныеОтчетыИОбработкиИзМетаданных.ОтчетыИОбработки @@ -2428,8 +2478,7 @@ // * ИмяФайла - Строка // Функция ОбработкиИзКонфигурации() - Перем ОбработкиИзКонфигурации; - Перем Запрос; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -2440,12 +2489,13 @@ |ИЗ | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки"; - ОбработкиИзКонфигурации = Запрос.Выполнить().Выгрузить(); - Возврат ОбработкиИзКонфигурации + Возврат Запрос.Выполнить().Выгрузить(); + КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Выгрузка отчетов и обработок конфигурации в файлы внешних отчетов и обработок. +#КонецОбласти + +#Область ВыгрузкаОтчетовИОбработокКонфигурацииВФайлыВнешнихОтчетовИОбработок // Параметры: // ОтчетыИОбработки - см. ЗагрузитьДополнительныеОтчетыИОбработкиИзМетаданных.ОтчетыИОбработки @@ -2682,8 +2732,9 @@ ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Пакетная регистрация внешних отчетов и обработок в справочнике. +#КонецОбласти + +#Область ПакетнаяРегистрацияВнешнихОтчетовИОбработокВСправочнике Процедура ЗарегистрироватьОтчетыИОбработки(ОтчетыИОбработки) @@ -2781,7 +2832,7 @@ Продолжить; КонецЕсли; - СправочникОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(СтрокаТаблицы.ДвоичныеДанные); + СправочникОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(СтрокаТаблицы.ДвоичныеДанные, Новый СжатиеДанных(9)); СправочникОбъект.ИмяОбъекта = ВнешнийОбъектМетаданные.Имя; СправочникОбъект.ИмяФайла = СтрокаТаблицы.ИмяФайла; @@ -2843,8 +2894,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Другие +#КонецОбласти + +#Область Другие // Устанавливает обработке вид публикации, использующийся для конфликтующих дополнительных отчетов и обработок. Процедура ОтключитьКонфликтующую(ОбработкаОбъект) @@ -3024,11 +3076,9 @@ СтрокаТЧ.ВидРазрешения = ТипXDTO.Имя; Параметры = Новый Структура(); - Для Каждого СвойствоXDTO Из ТипXDTO.Свойства Цикл Контейнер = Разрешение.ПолучитьXDTO(СвойствоXDTO.Имя); - Если Контейнер <> Неопределено Тогда Параметры.Вставить(СвойствоXDTO.Имя, Контейнер.Значение); Иначе @@ -3036,8 +3086,7 @@ КонецЕсли; КонецЦикла; - - СтрокаТЧ.Параметры = Новый ХранилищеЗначения(Параметры); + СтрокаТЧ.Параметры = Новый ХранилищеЗначения(Параметры, Новый СжатиеДанных(9)); КонецЦикла; @@ -3297,7 +3346,7 @@ // ** ПоказыватьОповещение - Булево // ** Скрыть - Булево // * Назначение - ТаблицаЗначений: -// ** ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных +// ** ОбъектНазначения - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений // Функция ТаблицаОтчетовИОбработок(Знач ИдентификаторыОбъектов) Запрос = Новый Запрос; @@ -3371,3 +3420,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index b0623537f..64b5883c8 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -88,8 +88,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ИнтеграцияПодсистемБСП.ПриРегистрацииМенеджеровВнешнихМодулей Процедура ПриРегистрацииМенеджеровВнешнихМодулей(Менеджеры) Экспорт @@ -112,6 +111,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ЗапросыРазрешенийДополнительныхОбработок(Знач ЗначениеФО = Неопределено) diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl index 6a7726d76..d65314100 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервиса/Module.bsl @@ -644,7 +644,7 @@ Менеджер = РегистрыСведений.ОчередьИнсталляцииПоставляемыхДополнительныхОтчетовИОбработокВОбластиДанных.СоздатьМенеджерЗаписи(); Менеджер.ПоставляемаяОбработка = ПоставляемаяОбработка; - Менеджер.ПараметрыИнсталляции = Новый ХранилищеЗначения(Контекст); + Менеджер.ПараметрыИнсталляции = Новый ХранилищеЗначения(Контекст, Новый СжатиеДанных(9)); Менеджер.Записать(); ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые дополнительные отчеты и обработки.Установка в область данных отложена'", diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl index cd20686be..d1306698d 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифест/Module.bsl @@ -351,20 +351,16 @@ Разрешение.ВидРазрешения = ТипXDTO.Имя; Параметры = Новый Структура(); - Для Каждого СвойствоXDTO Из ТипXDTO.Свойства Цикл Контейнер = Permission.ПолучитьXDTO(СвойствоXDTO.Имя); - Если Контейнер <> Неопределено Тогда Параметры.Вставить(СвойствоXDTO.Имя, Контейнер.Значение); Иначе Параметры.Вставить(СвойствоXDTO.Имя); КонецЕсли; - КонецЦикла; - - Разрешение.Параметры = Новый ХранилищеЗначения(Параметры); + Разрешение.Параметры = Новый ХранилищеЗначения(Параметры, Новый СжатиеДанных(9)); КонецЦикла; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl index e421f724f..f26a5c13f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс/Module.bsl @@ -45,26 +45,6 @@ КонецФункции -// Возвращает название программного интерфейса сообщений -// -// Возвращаемое значение: -// Строка -// -Функция ПрограммныйИнтерфейс() Экспорт - - Возврат "ApplicationExtensionsCore"; - -КонецФункции - -// Выполняет регистрацию обработчиков сообщений в качестве обработчиков каналов обмена сообщениями. -// -// Параметры: -// МассивОбработчиков - Массив - общие модули или модули менеджеров. -// -Процедура ОбработчикиКаналовСообщений(Знач МассивОбработчиков) Экспорт - -КонецПроцедуры - // Возвращает тип {http://www.1c.ru/1cFresh/ApplicationExtensions/Core/a.b.c.d}ExtensionAssignmentObject // // Параметры: diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl index e733443eb..d0aee4c04 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl @@ -6,7 +6,7 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область ПрограммныйИнтерфейс +#Область СлужебныеПроцедурыИФункции // Подключает внешнюю обработку (отчет). // Подробнее см. ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку. @@ -18,7 +18,7 @@ // Строка - имя подключенного отчета или обработки. // Неопределено - если передана некорректная ссылка. // -Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт +Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт // АПК:469 Возврат ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(Ссылка); @@ -41,20 +41,14 @@ КонецФункции -#КонецОбласти -#Область СлужебныеПроцедурыИФункции - -// Выполняет команду обработки и помещает результат во временное хранилище. -// Подробнее - см. ДополнительныеОтчетыИОбработки.ВыполнитьКоманду. -// +// См. ДополнительныеОтчетыИОбработки.ВыполнитьКоманду. Функция ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата = Неопределено) Экспорт Возврат ДополнительныеОтчетыИОбработки.ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата); КонецФункции -// Помещает двоичные данные дополнительного отчета или обработки во временное хранилище. Функция ПоместитьВХранилище(Ссылка, ИдентификаторФормы) Экспорт Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Или Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда @@ -66,11 +60,9 @@ КонецЕсли; ХранилищеОбработки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ХранилищеОбработки"); - Возврат ПоместитьВоВременноеХранилище(ХранилищеОбработки.Получить(), ИдентификаторФормы); КонецФункции -// Запускает длительную операцию. Функция ЗапуститьДлительнуюОперацию(Знач УникальныйИдентификатор, Знач ПараметрыКоманды) Экспорт ИмяМетода = "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду"; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index c6fa3ef5e..18987cf27 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -49,19 +49,20 @@ // Открывает форму дополнительного отчета с заданным вариантом. // // Параметры: -// Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка дополнительного отчета. +// ДополнительныйОтчет - СправочникСсылка.ДополнительныеОтчетыИОбработки // КлючВарианта - Строка - имя варианта дополнительного отчета. // -Процедура ОткрытьВариантДополнительногоОтчета(Ссылка, КлючВарианта) Экспорт +Процедура ОткрытьВариантДополнительногоОтчета(ДополнительныйОтчет, КлючВарианта) Экспорт - Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда + Если ТипЗнч(ДополнительныйОтчет) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; - ИмяОтчета = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(Ссылка); + ИмяОтчета = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ДополнительныйОтчет); + ИмяФормы = СтрШаблон("ВнешнийОтчет.%1.Форма", ИмяОтчета); + Уникальность = СтрШаблон("ВнешнийОтчет.%1/КлючВарианта.%2", ИмяОтчета, КлючВарианта); ПараметрыОткрытия = Новый Структура("КлючВарианта", КлючВарианта); - Уникальность = "ВнешнийОтчет." + ИмяОтчета + "/КлючВарианта." + КлючВарианта; - ОткрытьФорму("ВнешнийОтчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность); + ОткрытьФорму(ИмяФормы, ПараметрыОткрытия, Неопределено, Уникальность); КонецПроцедуры @@ -260,10 +261,10 @@ КонецПроцедуры -// Открывает список команд дополнительных отчетов и обработок. +// Открывает список команд дополнительных отчетов и обработок для указанных объектов. // // Параметры: -// МассивСсылок - Массив из ЛюбаяСсылка - ссылки выбранных объектов, для которых выполняется команда. +// Объекты - Массив из ЛюбаяСсылка - объекты, для которых выполняется команда. // ПараметрыВыполнения - Структура: // * ОписаниеКоманды - Структура: // ** Идентификатор - Строка - идентификатор команды. @@ -274,11 +275,11 @@ // * Источник - ДанныеФормыСтруктура // - ТаблицаФормы - объект или список формы с полем "Ссылка". // -Процедура ОткрытьСписокКоманд(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт +Процедура ОткрытьСписокКоманд(Знач Объекты, Знач ПараметрыВыполнения) Экспорт Контекст = Новый Структура; Контекст.Вставить("Источник", ПараметрыВыполнения.Форма); Вид = ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры.Вид; - ОткрытьФормуКомандДополнительныхОтчетовИОбработок(МассивСсылок, Контекст, Вид); + ОткрытьФормуКомандДополнительныхОтчетовИОбработок(Объекты, Контекст, Вид); КонецПроцедуры // См. ДополнительныеОтчетыИОбработки.ОбработчикКомандыЗаполнения @@ -301,22 +302,16 @@ // Если открывается форма или вызывается клиентский метод, то вывод результата выполнения выполняется обработкой. Если ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") Тогда - ИмяВнешнегоОбъекта = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.Ссылка); - Если ВыполняемаяКоманда.ЭтоОтчет Тогда - ОткрытьФорму("ВнешнийОтчет."+ ИмяВнешнегоОбъекта +".Форма", ПараметрыВызоваСервера, Форма); - Иначе - ОткрытьФорму("ВнешняяОбработка."+ ИмяВнешнегоОбъекта +".Форма", ПараметрыВызоваСервера, Форма); - КонецЕсли; + ОткрытьФормуДополнительногоОтчетаОбработки(ВыполняемаяКоманда.Ссылка, ВыполняемаяКоманда.ЭтоОтчет, + ПараметрыВызоваСервера, Форма); ИначеЕсли ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") Тогда - ИмяВнешнегоОбъекта = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.Ссылка); - Если ВыполняемаяКоманда.ЭтоОтчет Тогда - ФормаВнешнегоОбъекта = ПолучитьФорму("ВнешнийОтчет."+ ИмяВнешнегоОбъекта +".Форма", ПараметрыВызоваСервера, Форма); - Иначе - ФормаВнешнегоОбъекта = ПолучитьФорму("ВнешняяОбработка."+ ИмяВнешнегоОбъекта +".Форма", ПараметрыВызоваСервера, Форма); + ФормаВнешнегоОбъекта = ФормаДополнительногоОтчетаОбработки(ВыполняемаяКоманда.Ссылка, ВыполняемаяКоманда.ЭтоОтчет, + ПараметрыВызоваСервера, Форма); + Если ФормаВнешнегоОбъекта <> Неопределено Тогда + ФормаВнешнегоОбъекта.ВыполнитьКоманду(ПараметрыВызоваСервера.ИдентификаторКоманды, ПараметрыВызоваСервера.ОбъектыНазначения); КонецЕсли; - ФормаВнешнегоОбъекта.ВыполнитьКоманду(ПараметрыВызоваСервера.ИдентификаторКоманды, ПараметрыВызоваСервера.ОбъектыНазначения); ИначеЕсли ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода") Или ВыполняемаяКоманда.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда @@ -340,14 +335,44 @@ #Область СлужебныеПроцедурыИФункции -// Выводит оповещение перед запуском команды. +Процедура ОткрытьФормуДополнительногоОтчетаОбработки(ДополнительныйОтчетОбработка, ЭтоОтчет, ПараметрыФормы, ФормаВладелец) + + ИмяФормы = ИмяФормыДополнительногоОтчетаОбработки(ДополнительныйОтчетОбработка, ЭтоОтчет); + Если ПустаяСтрока(ИмяФормы) Тогда + Возврат; + КонецЕсли; + ОткрытьФорму(ИмяФормы, ПараметрыФормы, ФормаВладелец); + +КонецПроцедуры + +Функция ФормаДополнительногоОтчетаОбработки(ДополнительныйОтчетОбработка, ЭтоОтчет, ПараметрыФормы, ФормаВладелец) + + ИмяФормы = ИмяФормыДополнительногоОтчетаОбработки(ДополнительныйОтчетОбработка, ЭтоОтчет); + Если ПустаяСтрока(ИмяФормы) Тогда + Возврат Неопределено; + КонецЕсли; + Возврат ПолучитьФорму(ИмяФормы, ПараметрыФормы, ФормаВладелец); // АПК:65 Для обратной совместимости: вызов клиентской процедуры обработки. + +КонецФункции + +Функция ИмяФормыДополнительногоОтчетаОбработки(ДополнительныйОтчетОбработка, ЭтоОтчет) + + Если ТипЗнч(ДополнительныйОтчетОбработка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда + Возврат ""; + КонецЕсли; + + ИмяВнешнегоОбъекта = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ДополнительныйОтчетОбработка); + Возврат ?(ЭтоОтчет, СтрШаблон("ВнешнийОтчет.%1.Форма", ИмяВнешнегоОбъекта), + СтрШаблон("ВнешняяОбработка.%1.Форма", ИмяВнешнегоОбъекта)); + +КонецФункции + Процедура ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда) Если ВыполняемаяКоманда.ПоказыватьОповещение Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'Команда выполняется...'"), , ВыполняемаяКоманда.Представление); КонецЕсли; КонецПроцедуры -// Открывает форму обработки. Процедура ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, Форма, ОбъектыНазначения) Экспорт ПараметрыОбработки = Новый Структура("ИдентификаторКоманды, ДополнительнаяОбработкаСсылка, ИмяФормы, КлючСессии"); ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор; @@ -360,29 +385,24 @@ КонецЕсли; #Если ТолстыйКлиентОбычноеПриложение Тогда - ВнешняяОбработка = ДополнительныеОтчетыИОбработкиВызовСервера.ОбъектВнешнейОбработки(ВыполняемаяКоманда.Ссылка); - ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(, Форма); - Если ФормаОбработки = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для отчета или обработки ""%1"" не назначена основная форма, - |или основная форма не предназначена для запуска в обычном приложении. - |Команда ""%2"" не может быть выполнена.'"), - Строка(ВыполняемаяКоманда.Ссылка), - ВыполняемаяКоманда.Представление); - КонецЕсли; - ФормаОбработки.Открыть(); - ФормаОбработки = Неопределено; + ВнешняяОбработка = ДополнительныеОтчетыИОбработкиВызовСервера.ОбъектВнешнейОбработки(ВыполняемаяКоманда.Ссылка); + ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(, Форма); // АПК:65 Для улучшения диагностики. + Если ФормаОбработки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для отчета или обработки ""%1"" не назначена основная форма, + |или основная форма не предназначена для запуска в обычном приложении. + |Команда ""%2"" не может быть выполнена.'"), + Строка(ВыполняемаяКоманда.Ссылка), + ВыполняемаяКоманда.Представление); + КонецЕсли; + ФормаОбработки.Открыть(); + ФормаОбработки = Неопределено; #Иначе - ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.Ссылка); - Если ВыполняемаяКоманда.ЭтоОтчет Тогда - ОткрытьФорму("ВнешнийОтчет." + ИмяОбработки + ".Форма", ПараметрыОбработки, Форма); - Иначе - ОткрытьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма", ПараметрыОбработки, Форма); - КонецЕсли; + ОткрытьФормуДополнительногоОтчетаОбработки(ВыполняемаяКоманда.Ссылка, ВыполняемаяКоманда.ЭтоОтчет, ПараметрыОбработки, Форма); #КонецЕсли + КонецПроцедуры -// Выполняет клиентский метод обработки. Процедура ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, Форма, ОбъектыНазначения) Экспорт ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда); @@ -397,23 +417,18 @@ КонецЕсли; #Если ТолстыйКлиентОбычноеПриложение Тогда - ВнешняяОбработка = ДополнительныеОтчетыИОбработкиВызовСервера.ОбъектВнешнейОбработки(ВыполняемаяКоманда.Ссылка); - ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(, Форма); - Если ФормаОбработки = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для отчета или обработки ""%1"" не назначена основная форма, - |или основная форма не предназначена для запуска в обычном приложении. - |Команда ""%2"" не может быть выполнена.'"), - Строка(ВыполняемаяКоманда.Ссылка), - ВыполняемаяКоманда.Представление); - КонецЕсли; + ВнешняяОбработка = ДополнительныеОтчетыИОбработкиВызовСервера.ОбъектВнешнейОбработки(ВыполняемаяКоманда.Ссылка); + ФормаОбработки = ВнешняяОбработка.ПолучитьФорму(, Форма); // АПК:65 Для улучшения диагностики. + Если ФормаОбработки = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для отчета или обработки ""%1"" не назначена основная форма, + |или основная форма не предназначена для запуска в обычном приложении. + |Команда ""%2"" не может быть выполнена.'"), + Строка(ВыполняемаяКоманда.Ссылка), + ВыполняемаяКоманда.Представление); + КонецЕсли; #Иначе - ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяКоманда.Ссылка); - Если ВыполняемаяКоманда.ЭтоОтчет Тогда - ФормаОбработки = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОбработки, Форма); - Иначе - ФормаОбработки = ПолучитьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОбработки, Форма); - КонецЕсли; + ФормаОбработки = ФормаДополнительногоОтчетаОбработки(ВыполняемаяКоманда.Ссылка, ВыполняемаяКоманда.ЭтоОтчет, ПараметрыОбработки, Форма); #КонецЕсли Если ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка") @@ -424,11 +439,9 @@ ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов") Тогда СозданныеОбъекты = Новый Массив; - ФормаОбработки.ВыполнитьКоманду(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения, СозданныеОбъекты); ТипыСозданныхОбъектов = Новый Массив; - Для Каждого СозданныйОбъект Из СозданныеОбъекты Цикл Тип = ТипЗнч(СозданныйОбъект); Если ТипыСозданныхОбъектов.Найти(Тип) = Неопределено Тогда @@ -436,9 +449,7 @@ КонецЕсли; КонецЦикла; - Для Каждого Тип Из ТипыСозданныхОбъектов Цикл - ОповеститьОбИзменении(Тип); - КонецЦикла; + СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ТипыСозданныхОбъектов); ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма") Тогда @@ -449,7 +460,6 @@ ФормаОбработки.ВыполнитьКоманду(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения); ТипыИзмененныхОбъектов = Новый Массив; - Для Каждого ИзмененныйОбъект Из ОбъектыНазначения Цикл Тип = ТипЗнч(ИзмененныйОбъект); Если ТипыИзмененныхОбъектов.Найти(Тип) = Неопределено Тогда @@ -457,9 +467,7 @@ КонецЕсли; КонецЦикла; - Для Каждого Тип Из ТипыИзмененныхОбъектов Цикл - ОповеститьОбИзменении(Тип); - КонецЦикла; + СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ТипыИзмененныхОбъектов); ИначеЕсли ВыполняемаяКоманда.Вид = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.Отчет") Тогда diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index df0abaf95..569d5107f 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Имена видов объектов. +#Область ИменаВидовОбъектов // Печатная форма. // @@ -88,8 +87,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Имена типов команд. +#КонецОбласти + +#Область ИменаТиповКоманд // Возвращает имя типа команд с вызовом серверного метода. Для выполнения команд такого типа // в модуле объекта следует определить экспортную процедуру по следующему шаблону. @@ -373,8 +373,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Имена типов форм. Используются при настройке назначаемых объектов. +#КонецОбласти + +#Область ИменаТиповФормИспользуютсяПриНастройкеНазначаемыхОбъектов // Идентификатор формы списка. // @@ -398,8 +399,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Другие процедуры и функции. +#КонецОбласти + +#Область ДругиеПроцедурыИФункции // Фильтр для диалогов выбора или сохранения дополнительных отчетов и обработок. // @@ -425,6 +427,8 @@ КонецФункции +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы. @@ -460,4 +464,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 6a4ede3a5..30c5b06cc 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -529,6 +529,9 @@ // Параметры: // ДанныеСтрокой - Строка // +// Возвращаемое значение: +// Произвольный +// Функция ДанныеСобытия(ДанныеСтрокой) Экспорт Если Не ЗначениеЗаполнено(ДанныеСтрокой) Тогда @@ -1721,8 +1724,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции // Только для внутреннего использования. // @@ -1757,3 +1759,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index 862190718..516581270 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -17,13 +17,10 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - СтароеИмя = "Роль.ИспользованиеЗаметок"; - НовоеИмя = "Роль.ДобавлениеИзменениеЗаметок"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.11", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.11", + "Роль.ИспользованиеЗаметок", "Роль.ДобавлениеИзменениеЗаметок", "СтандартныеПодсистемы"); КонецПроцедуры diff --git a/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl b/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl index 6375f6bbc..df1ee394b 100644 --- a/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ЗаполнениеОбъектов/Module.bsl @@ -19,8 +19,7 @@ Возврат Массив; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииСоставаНастроекПодключаемыхОбъектов Процедура ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса) Экспорт @@ -102,6 +101,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -138,4 +139,4 @@ КонецЕсли; КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl index cd69ebfa5..956224b8b 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовКлиент/Module.bsl @@ -19,12 +19,10 @@ // Форма - ФормаКлиентскогоПриложения // - РасширениеУправляемойФормыДляОбъектов - форма, в которой требуется разрешить // редактирование элементов формы, заданных реквизитов, где: -// * Объект - ДанныеФормыСтруктура -// - СправочникОбъект -// - ДокументОбъект +// * Объект - ДанныеФормыСтруктура: +// ** Ссылка - СправочникСсылка, ДокументСсылка // -// ОбработкаПродолжения - Неопределено - никаких действий после выполнения процедуры. -// - ОписаниеОповещения - оповещение, которое вызывается после выполнения процедуры. +// ОбработкаПродолжения - ОписаниеОповещения - оповещение, которое вызывается после выполнения процедуры. // В обработку оповещения передается параметр типа Булево: // Истина - ссылок не обнаружено или пользователь решил разрешить редактирование, // Ложь - видимых заблокированных реквизитов нет или @@ -32,7 +30,8 @@ // // ТолькоВидимые - Булево - чтобы получить и разблокировать все реквизиты объекта, нужно указать Ложь. // -Процедура РазрешитьРедактированиеРеквизитовОбъекта(Знач Форма, ОбработкаПродолжения = Неопределено, ТолькоВидимые = Истина) Экспорт +Процедура РазрешитьРедактированиеРеквизитовОбъекта(Знач Форма, ОбработкаПродолжения = Неопределено, + ТолькоВидимые = Истина) Экспорт ЗаблокированныеРеквизиты = Реквизиты(Форма, , ТолькоВидимые); @@ -81,16 +80,15 @@ // Устанавливает доступность элементов формы, связанных с заданными реквизитами, // для которых установлено разрешение изменения. Если передать массив реквизитов, // тогда сначала будет дополнен состав реквизитов, разрешенных для изменения. -// Если разблокировка элементов формы, связанных с заданными реквизитами, +// Если разблокировка элементов формы, связанных с заданными реквизитами, // снята для всех реквизитов, тогда кнопка разрешения редактирования блокируется. // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, в которой требуется разрешить // редактирование элементов формы, заданных реквизитов. // -// Реквизиты - Массив - значения: -// * Строка - имена реквизитов, для которых нужно установить разрешенность изменения. -// Используется, когда функция РазрешитьРедактированиеРеквизитовОбъекта не используется. +// Реквизиты - Массив из Строка - имена реквизитов, для которых нужно установить разрешенность изменения. +// Указывается, когда функция РазрешитьРедактированиеРеквизитовОбъекта не используется. // - Неопределено - состав реквизитов, доступных для редактирования, не изменяется, // а для элементов формы, связанных с реквизитами, изменение которых разрешено, // устанавливается доступность. @@ -119,7 +117,7 @@ КонецПроцедуры // Устанавливает разрешенность редактирования для тех реквизитов, описание которых подготовлено в форме. -// Используется, когда доступность элементов формы изменяется самостоятельно, без +// Используется, когда доступность элементов формы изменяется самостоятельно, без // использования функции УстановитьДоступностьЭлементовФормы. // // Параметры: diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl index e3f09d0e7..f792d4201 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебный/Module.bsl @@ -81,8 +81,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции // Для процедуры ПодготовитьФорму. Процедура ЗаполнитьОписаниеБлокируемыхРеквизитов(Описание, МетаданныеОбъекта, БлокируемыеРеквизиты, @@ -250,3 +249,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl index 5217241b1..c924d23a5 100644 --- a/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗапретРедактированияРеквизитовОбъектовСлужебныйКлиент/Module.bsl @@ -45,6 +45,9 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Для ЗапретРедактированияРеквизитовОбъектовКлиент.ПроверитьСсылкиНаОбъект Процедура ПроверитьСсылкиНаОбъектПослеПодтвержденияПроверки(Ответ, Параметры) Экспорт Если Ответ <> КодВозвратаДиалога.Да Тогда @@ -83,7 +86,8 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Редактирование реквизитов разрешено'"), ПолучитьНавигационнуюСсылку(Параметры.МассивСсылок[0]), Параметры.МассивСсылок[0]); Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Разрешено редактирование реквизитов объектов (%1)'"), + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Разрешено редактирование реквизитов объектов (%1)'"), Параметры.МассивСсылок.Количество()); ПоказатьОповещениеПользователя(НСтр("ru = 'Редактирование реквизитов разрешено'"),, @@ -101,3 +105,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 0be77efc2..3c58595ce 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -161,8 +161,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. +#Область ПроцедурыИФункцииДляВстраиванияПодсистемыВФормыОбъектовКонфигурации // В форме списка добавляет колонку с картинкой, сигнализирующей об отсутствии требуемого согласия // на обработку персональных данных по субъектам в строках. Добавляет команду показа субъектов со @@ -227,20 +226,18 @@ // Вызывается из события ПриПолученииДанныхНаСервере формы списка. // // Параметры: -// Настройки - НастройкиКомпоновкиДанных - содержит копию полных настроек динамического списка. -// Строки - СтрокиДинамическогоСписка - коллекция содержит данные и оформление всех строк, -// получаемых в списке, кроме строк группировок. +// Настройки - НастройкиКомпоновкиДанных - содержит копию полных настроек динамического списка. +// Строки - СтрокиДинамическогоСписка - коллекция содержит данные и оформление всех строк, получаемых в списке, +// кроме строк группировок. // Процедура ПриПолученииДанныхНаСервере(Настройки, Строки) Экспорт Перем ТекущаяДата; - Если Не Настройки.ДополнительныеСвойства.Свойство("ТекущаяДата", ТекущаяДата) Тогда Возврат; КонецЕсли; - Субъекты = РегистрыСведений.СрокиХраненияПерсональныхДанных.СубъектыСИстекшимСрокомХранения( - Строки.ПолучитьКлючи(), ТекущаяДата); + Субъекты = СубъектыСИстекшимСрокомХранения(Строки.ПолучитьКлючи(), ТекущаяДата); Если Субъекты.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -613,6 +610,40 @@ КонецПроцедуры +// Возвращает субъекты с истекшим сроком хранения персональных данных. +// +// Параметры: +// Субъекты - см. РегистрыСведений.СрокиХраненияПерсональныхДанных.СубъектыСИстекшимСрокомХранения.Субъекты +// ДатаАктуальности - см. РегистрыСведений.СрокиХраненияПерсональныхДанных.СубъектыСИстекшимСрокомХранения.ДатаАктуальности +// +// Возвращаемое значение: +// Массив из ОпределяемыйТип.СубъектПерсональныхДанных +// +Функция СубъектыСИстекшимСрокомХранения(Субъекты, ДатаАктуальности = Неопределено) Экспорт + + Возврат РегистрыСведений.СрокиХраненияПерсональныхДанных.СубъектыСИстекшимСрокомХранения(Субъекты, ДатаАктуальности); + +КонецФункции + +// Удаляет информацию о том, что персональные данные субъекта уничтожены. +// +// Параметры: +// Субъект - ОпределяемыйТип.СубъектПерсональныхДанных +// +Процедура УдалитьИнформациюОбУничтоженииПерсональныхДанных(Субъект) Экспорт + + Если Не ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.УничтоженныеПерсональныеДанные.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Субъект.Установить(Субъект); + НаборЗаписей.Записать(); + +КонецПроцедуры + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. @@ -873,8 +904,7 @@ СписокМакетов.Добавить("Документ.СогласиеНаОбработкуПерсональныхДанных.ПФ_DOC_СогласиеНаОбработкуПерсональныхДанных_ru"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ПользователиПереопределяемый.ПриОпределенииНастроекРегистрацииСобытийДоступаКДанным Процедура ПриОпределенииНастроекРегистрацииСобытийДоступаКДанным(Настройки) Экспорт @@ -1128,6 +1158,8 @@ КонецФункции +#КонецОбласти + #Область ОбменДанными // Проверяет необходимость регистрации объекта на узлах плана обмена. @@ -2893,4 +2925,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index 836bdedb3..1a82cab2e 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -32,8 +32,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. +#Область ПроцедурыИФункцииДляВстраиванияПодсистемыВФормыОбъектовКонфигурации // Определяет, что указанное событие - это событие об уничтожении персональных данных субъектов // и обновляет объект управляемой формы. @@ -90,6 +89,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Настраивает элементы формы НастройкиПользователейИПрав обработки ПанельАдминистрированияБСП. @@ -208,4 +209,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl index 539cb42e9..bc739afe5 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСП/Module.bsl @@ -172,6 +172,14 @@ События.Вставить("ПриЗаполненииИспользованияВидаДоступа", Ложь); События.Вставить("ПриЗаполненииВидовОграниченийПравОбъектовМетаданных", Ложь); + // УчетОригиналовПервичныхДокументов + События.Вставить("ПриОпределенииНастроекУчетаОригиналов", Ложь); + События.Вставить("ПриИзмененииОбщегоСостоянияОригинала", Ложь); + События.Вставить("ПередЗаписьюСостоянийОригиналовПослеПечати", Ложь); + События.Вставить("ПриОпределенииОбъектовСКомандамиУчетаОригиналов", Ложь); + События.Вставить("ПриОпределенииМногосотрудниковыхДокументов", Ложь); + События.Вставить("ПриЗаполненииТаблицыУчетаОригиналов", Ложь); + // ЦентрМониторинга События.Вставить("ПриСбореПоказателейСтатистикиКонфигурации", Ложь); @@ -845,7 +853,10 @@ #КонецОбласти +// ИнтернетПоддержкаПользователей + #Область ОбработчикиСобытийБИП + // Обработка программных событий, возникающих в подсистемах ИПП. // Только для вызовов из библиотеки ИПП в БСП. @@ -929,8 +940,7 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") - И Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") <> Неопределено Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); МодульЭлектроннаяПодписьСлужебный.ПриДобавленииКлассификаторов(Классификаторы); КонецЕсли; @@ -947,10 +957,9 @@ ДополнительныеПараметры); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") - И Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - МодульЗагрузкаКурсовВалют = ОбщегоНазначения.ОбщийМодуль("Обработки.ЗагрузкаКурсовВалют"); - МодульЗагрузкаКурсовВалют.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда + МодульРаботаСКурсамиВалютЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалютЛокализация"); + МодульРаботаСКурсамиВалютЛокализация.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры); КонецЕсли; @@ -969,8 +978,7 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") - И Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") <> Неопределено Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); МодульЭлектроннаяПодписьСлужебный.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры); @@ -995,7 +1003,6 @@ КонецЕсли; ПараметрыОбновления = ДополнительныеПараметры[Идентификатор]; - МодульКалендарныеГрафики.ЗаполнитьДанныеЗависимыеОтПроизводственныхКалендарей(ПараметрыОбновления.ТаблицаИзменений); КонецПроцедуры @@ -1004,6 +1011,8 @@ #КонецОбласти +// Конец ИнтернетПоддержкаПользователей + #КонецОбласти #КонецОбласти @@ -1024,6 +1033,11 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриДобавленииПодсистем(МодулиПодсистем); КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииПодсистем Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииПодсистем(МодулиПодсистем); + КонецЕсли; КонецПроцедуры @@ -1041,6 +1055,11 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриУстановкеПараметровСеанса(Параметры); КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриУстановкеПараметровСеанса Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриУстановкеПараметровСеанса(Параметры); + КонецЕсли; КонецПроцедуры @@ -1121,6 +1140,11 @@ МодульМашиночитаемыеДоверенностиФНССлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииОбработчиковУстановкиПараметровСеанса Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. @@ -1195,6 +1219,11 @@ МодульИнтеграцияПодсистемБИП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииИсключенийПоискаСсылок Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриОпределенииПодчиненныхОбъектов @@ -1228,81 +1257,86 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - СтандартныеПодсистемыСервер.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + СтандартныеПодсистемыСервер.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольРаботыПользователей") Тогда МодульКонтрольРаботыПользователейСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольРаботыПользователейСлужебный"); - МодульКонтрольРаботыПользователейСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульКонтрольРаботыПользователейСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - МодульВариантыОтчетов.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульВариантыОтчетов.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - МодульДополнительныеОтчетыИОбработки.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульДополнительныеОтчетыИОбработки.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗаметкиПользователя") Тогда МодульЗаметкиПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("ЗаметкиПользователяСлужебный"); - МодульЗаметкиПользователяСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульЗаметкиПользователяСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда МодульНапоминанияПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("НапоминанияПользователяСлужебный"); - МодульНапоминанияПользователяСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульНапоминанияПользователяСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкиПрограммы") Тогда МодульПанельАдминистрированияБСП = ОбщегоНазначения.ОбщийМодуль("Обработки.ПанельАдминистрированияБСП"); - МодульПанельАдминистрированияБСП.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульПанельАдминистрированияБСП.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульОбменДаннымиСервер.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль( "РаботаСПочтовымиСообщениямиСлужебный"); - МодульРаботаСПочтовымиСообщениямиСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульРаботаСПочтовымиСообщениямиСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); - МодульРаботаСФайламиСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульРаботаСФайламиСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СтруктураПодчиненности") Тогда МодульСтруктураПодчиненностиСлужебный = ОбщегоНазначения.ОбщийМодуль("СтруктураПодчиненностиСлужебный"); - МодульСтруктураПодчиненностиСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульСтруктураПодчиненностиСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); - МодульТекущиеДелаСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульТекущиеДелаСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); - МодульЭлектроннаяПодписьСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульЭлектроннаяПодписьСлужебный.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриДобавленииПереименованийОбъектовМетаданных Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); - МодульИнтеграцияПодсистемБТС.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульИнтеграцияПодсистемБТС.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриДобавленииПереименованийОбъектовМетаданных Тогда МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); - МодульИнтеграцияПодсистемБИП.ПриДобавленииПереименованийОбъектовМетаданных(Итог); + МодульИнтеграцияПодсистемБИП.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииПереименованийОбъектовМетаданных Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииПереименованийОбъектовМетаданных(Переименования); + КонецЕсли; + КонецПроцедуры // См. РегистрСведений.ПараметрыРаботыВерсийРасширений.ЗаполнитьВсеПараметрыРаботыРасширений. @@ -1340,6 +1374,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииВсехПараметровРаботыРасширений(); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииВсехПараметровРаботыРасширений Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииВсехПараметровРаботыРасширений(); + КонецЕсли; + КонецПроцедуры // См. РегистрСведений.ПараметрыРаботыВерсийРасширений.ОчиститьВсеПараметрыРаботыРасширений. @@ -1360,6 +1399,11 @@ МодульИнтеграцияПодсистемБИП.ПриОчисткеВсехПараметровРаботыРасширений(); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОчисткеВсехПараметровРаботыРасширений Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОчисткеВсехПараметровРаботыРасширений(); + КонецЕсли; + КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхГлавному. @@ -1405,6 +1449,11 @@ МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); + КонецЕсли; Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОтправкеДанныхГлавному Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); @@ -1416,6 +1465,11 @@ МодульИнтеграцияПодсистемБИП.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОтправкеДанныхГлавному Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); + КонецЕсли; + КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному. @@ -1464,6 +1518,12 @@ МодульУправлениеДоступомСлужебный.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ПриОтправкеДанныхПодчиненному(ЭлементДанных, + ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); + КонецЕсли; Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОтправкеДанныхПодчиненному Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); @@ -1477,6 +1537,12 @@ ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОтправкеДанныхПодчиненному Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОтправкеДанныхПодчиненному(ЭлементДанных, + ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); + КонецЕсли; + КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного. @@ -1560,6 +1626,12 @@ ПолучениеЭлемента, ОтправкаНазад, Отправитель); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПолученииДанныхОтГлавного Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПолученииДанныхОтГлавного(ЭлементДанных, + ПолучениеЭлемента, ОтправкаНазад, Отправитель); + КонецЕсли; + КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного. @@ -1648,6 +1720,12 @@ ПолучениеЭлемента, ОтправкаНазад, Отправитель); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПолученииДанныхОтПодчиненного Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПолученииДанныхОтПодчиненного(ЭлементДанных, + ПолучениеЭлемента, ОтправкаНазад, Отправитель); + КонецЕсли; + КонецПроцедуры // См. СтандартныеПодсистемыСервер.ПослеПолученияДанных. @@ -1675,6 +1753,11 @@ МодульИнтеграцияПодсистемБИП.ПослеПолученияДанных(Отправитель, Отказ, ПолучениеИзГлавногоУзла); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПослеПолученияДанных Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПослеПолученияДанных(Отправитель, Отказ, ПолучениеИзГлавногоУзла); + КонецЕсли; + КонецПроцедуры // См. РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных. @@ -1700,6 +1783,11 @@ МодульИнтеграцияПодсистемБИП.ПриВключенииРазделенияПоОбластямДанных(); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриВключенииРазделенияПоОбластямДанных Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриВключенииРазделенияПоОбластямДанных(); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов. @@ -1731,6 +1819,17 @@ МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); МодульСервисКриптографииDSSСлужебный.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии); КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + МодульУправлениеДоступомСлужебныйВМоделиСервиса = + ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии); + КонецЕсли; КонецПроцедуры @@ -1871,6 +1970,14 @@ КонецЕсли; СтандартныеПодсистемыСервер.ДобавитьПоказатель(Параметры, МоментНачала, "ИнтеграцияПодсистемБИП.ПриДобавленииПараметровРаботыКлиентаПриЗапуске"); + + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииПараметровРаботыКлиентаПриЗапуске Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры); + КонецЕсли; + СтандартныеПодсистемыСервер.ДобавитьПоказатель(Параметры, МоментНачала, + "ИнтеграцияПодсистемПлюс.ПриДобавленииПараметровРаботыКлиентаПриЗапуске"); КонецПроцедуры @@ -2038,6 +2145,22 @@ СтандартныеПодсистемыСервер.ДобавитьПоказатель(Параметры, МоментНачала, "ИнтеграцияПодсистемБЭД.ПриДобавленииПараметровРаботыКлиента"); + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииПараметровРаботыКлиента Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииПараметровРаботыКлиента(Параметры); + КонецЕсли; + СтандартныеПодсистемыСервер.ДобавитьПоказатель(Параметры, МоментНачала, + "ИнтеграцияПодсистемПлюс.ПриДобавленииПараметровРаботыКлиента"); + + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда + МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов"); + МодульУчетОригиналовПервичныхДокументов.ПриДобавленииПараметровРаботыКлиента(Параметры); + КонецЕсли; + СтандартныеПодсистемыСервер.ДобавитьПоказатель(Параметры, МоментНачала, + "УчетОригиналовПервичныхДокументов.ПриДобавленииПараметровРаботыКлиента"); + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПередЗапускомПрограммы @@ -2058,6 +2181,11 @@ МодульИнтеграцияПодсистемБИП.ПередЗапускомПрограммы(); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПередЗапускомПрограммы Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПередЗапускомПрограммы(); + КонецЕсли; + КонецПроцедуры // Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек @@ -2153,6 +2281,11 @@ МодульИнтеграцияПодсистемБИП.ПриДобавленииСерверныхОповещений(Оповещения); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииСерверныхОповещений Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииСерверныхОповещений(Оповещения); + КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБЭД().ПриДобавленииСерверныхОповещений Тогда МодульИнтеграцияПодсистемБЭД = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБЭД"); МодульИнтеграцияПодсистемБЭД.ПриДобавленииСерверныхОповещений(Оповещения); @@ -2196,6 +2329,14 @@ СерверныеОповещения.ДобавитьПоказатель(Результаты, МоментНачала, "ЦентрМониторингаСлужебный.ПриПериодическомПолученииДанныхКлиентаНаСервере"); + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПериодическомПолученииДанныхКлиентаНаСервере Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПериодическомПолученииДанныхКлиентаНаСервере(Параметры, Результаты); + КонецЕсли; + СерверныеОповещения.ДобавитьПоказатель(Результаты, МоментНачала, + "ИнтеграцияПодсистемПлюс.ПриПериодическомПолученииДанныхКлиентаНаСервере"); + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); Попытка Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБЭД().ПриПериодическомПолученииДанныхКлиентаНаСервере Тогда @@ -2523,6 +2664,11 @@ МодульРаботаСФайламиСлужебный.ПриОпределенииИспользуемыхВнешнихКомпонент(Компоненты); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииИспользуемыхВнешнихКомпонент Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииИспользуемыхВнешнихКомпонент(Компоненты); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -2648,7 +2794,12 @@ МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); МодульУправлениеПечатью.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииОбъектовСРедактируемымиРеквизитами Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты); + КонецЕсли; + КонецПроцедуры // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииРедактируемыхРеквизитовОбъекта. @@ -2663,7 +2814,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриОпределенииРедактируемыхРеквизитовОбъекта(Объект, РедактируемыеРеквизиты, НередактируемыеРеквизиты); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииРедактируемыхРеквизитовОбъекта Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииРедактируемыхРеквизитовОбъекта(Объект, РедактируемыеРеквизиты, НередактируемыеРеквизиты); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -2730,6 +2886,12 @@ ПоставляемаяОбработка, РежимПодключения); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриУстановкеРежимаПодключенияДополнительногоОтчетаИлиОбработкиВОбластиДанных( + ПоставляемаяОбработка, РежимПодключения); + КонецЕсли; + КонецПроцедуры #Область ДополнительныеОтчетыИОбработки_ДляВнутреннегоИспользования @@ -3047,7 +3209,12 @@ МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); МодульСервисКриптографииDSSСлужебный.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииСправочниковДляЗагрузкиДанных Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -3083,6 +3250,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииОбъектовСЗаблокированнымиРеквизитами Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -3104,6 +3276,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузкиOData(ИсключаемыеТипы); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузкиOData Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузкиOData(ИсключаемыеТипы); + КонецЕсли; + КонецПроцедуры // См. ИнтерфейсODataПереопределяемый.ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData @@ -3114,6 +3291,18 @@ МодульКонтрольВеденияУчетаСлужебный.ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData(Таблицы); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + НовоеОписаниеПодсистемы = СтандартныеПодсистемыПовтИсп.НовоеОписаниеПодсистемы(); + МодульОбновлениеИнформационнойБазыБСД = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыБСД"); + МодульОбновлениеИнформационнойБазыБСД.ПриДобавленииПодсистемы(НовоеОписаниеПодсистемы); + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НовоеОписаниеПодсистемы.Версия, "1.0.4.226") >= 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НовоеОписаниеПодсистемы.Версия, "1.0.5.0") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(НовоеОписаниеПодсистемы.Версия, "1.0.5.58") >= 0 Тогда + МодульОбменДаннымиСобытия = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия.ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData(Таблицы); + КонецЕсли; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РаботаСФайламиВМоделиСервиса") Тогда МодульРаботаСФайламиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВМоделиСервиса"); МодульРаботаСФайламиСлужебныйВМоделиСервиса.ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData(Таблицы); @@ -3133,7 +3322,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData(Таблицы); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииЗависимыхТаблицДляВыгрузкиЗагрузкиOData(Таблицы); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -3222,6 +3416,12 @@ РеквизитыСДатами); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания(Источник, + РеквизитыСДатами); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -3278,6 +3478,11 @@ МодульИнтеграцияПодсистемБИП.ПриНастройкеПодчиненногоУзлаРИБ(); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриНастройкеПодчиненногоУзлаРИБ Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриНастройкеПодчиненногоУзлаРИБ(); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -3297,6 +3502,11 @@ МодульАнкетирование.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда + МодульРаботаСБанкамиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСБанкамиСлужебный"); + МодульРаботаСБанкамиСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); МодульБизнесПроцессыИЗадачиСервер.ПриДобавленииОбработчиковОбновления(Обработчики); @@ -3480,7 +3690,18 @@ МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); МодульЭлектроннаяПодписьСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииОбработчиковОбновления Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + МодульУправлениеДоступомСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль( + "УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ПриДобавленииОбработчиковОбновления(Обработчики); + КонецЕсли; + КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковПереходаСДругойПрограммы. @@ -3539,6 +3760,12 @@ ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПослеОбновленияИнформационнойБазы Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПослеОбновленияИнформационнойБазы(ПредыдущаяВерсия, ТекущаяВерсия, + ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим); + КонецЕсли; + КонецПроцедуры // Позволяет переопределить приоритет обновления, по умолчанию получаемый из константы СведенияОбОбновленииИБ. @@ -3569,6 +3796,11 @@ МодульИнтеграцияПодсистемБИП.ПриПолученииПриоритетаОбновления(Приоритет); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПолученииПриоритетаОбновления Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПолученииПриоритетаОбновления(Приоритет); + КонецЕсли; + КонецПроцедуры // См. ОбновлениеИнформационнойБазыПереопределяемый.ПриЗаполненииОбъектовПланируемыхКУдалению. @@ -3588,7 +3820,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриЗаполненииОбъектовПланируемыхКУдалению(Объекты); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииОбъектовПланируемыхКУдалению Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииОбъектовПланируемыхКУдалению(Объекты); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -3900,6 +4137,16 @@ МодульУчетОригиналовПервичныхДокументов.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + МодульВыгрузкаОбъектовВФайлы.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииВидовПодключаемыхКоманд Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); + КонецЕсли; + ОбновлениеИнформационнойБазыСлужебный.ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд); КонецПроцедуры @@ -3932,6 +4179,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииСоставаНастроекПодключаемыхОбъектов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииСоставаНастроекПодключаемыхОбъектов(НастройкиПрограммногоИнтерфейса); + КонецЕсли; + КонецПроцедуры // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту @@ -4027,6 +4279,18 @@ ПодключенныеОтчетыИОбработки, Команды); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + МодульВыгрузкаОбъектовВФайлы.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, + ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииКомандПодключенныхКОбъекту Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, + ПодключенныеОтчетыИОбработки, Команды); + КонецЕсли; + ОбновлениеИнформационнойБазыСлужебный.ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды); @@ -4077,6 +4341,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииОбъектовСКомандамиСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты); + КонецЕсли; + КонецПроцедуры // См. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании. @@ -4094,6 +4363,12 @@ СтандартнаяОбработка); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПередДобавлениемКомандСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, + СтандартнаяОбработка); + КонецЕсли; + КонецПроцедуры // См. СозданиеНаОснованииПереопределяемый.ПриДобавленииКомандСозданияНаОсновании. @@ -4123,6 +4398,12 @@ Параметры, СтандартнаяОбработка); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриДобавленииКомандСозданияНаОсновании Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриДобавленииКомандСозданияНаОсновании(Объект, КомандыСозданияНаОсновании, + Параметры, СтандартнаяОбработка); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -4200,6 +4481,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииНастроек(Настройки); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииНастроек Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииНастроек(Настройки); + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей. @@ -4277,6 +4563,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииНазначенияРолей(НазначениеРолей); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииНазначенияРолей Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ИзменитьДействияВФорме. @@ -4297,6 +4588,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииДействийВФорме(ПользовательИлиГруппа, ДействияВФорме); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииДействийВФорме Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииДействийВФорме(ПользовательИлиГруппа, ДействияВФорме); + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ПриПолученииПрочихНастроек. @@ -4320,6 +4616,11 @@ МодульИнтеграцияПодсистемБИП.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПолученииПрочихНастроек Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки); + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ПриСохраненииПрочихНастроек. @@ -4342,6 +4643,11 @@ МодульИнтеграцияПодсистемБИП.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриСохраненииПрочихНастроек Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки); + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ПриУдаленииПрочихНастроек. @@ -4364,6 +4670,11 @@ МодульИнтеграцияПодсистемБИП.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриУдаленииПрочихНастроек Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки); + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ПриОпределенииНастроекРегистрацииСобытийДоступаКДанным @@ -4388,7 +4699,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриОпределенииНастроекРегистрацииСобытийДоступаКДанным(Настройки); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииНастроекРегистрацииСобытийДоступаКДанным Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииНастроекРегистрацииСобытийДоступаКДанным(Настройки); + КонецЕсли; + КонецПроцедуры // См. ПользователиСлужебныйВМоделиСервиса.ПриЗавершенииОбработкиПользователяИБ @@ -4404,6 +4720,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗавершенииОбработкиПользователяИБ(Пользователь); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗавершенииОбработкиПользователяИБ Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗавершенииОбработкиПользователяИБ(Пользователь); + КонецЕсли; + КонецПроцедуры #Область Пользователи_ДляВнутреннегоИспользования @@ -4556,8 +4877,7 @@ КонецПроцедуры -// Доопределяет действия при создании администратора в подсистеме Пользователи, а также -// при входе пользователя с ролями администратора, которые могли быть назначены в конфигураторе. +// Доопределяет действия при создании администратора в подсистеме Пользователи. // // Параметры: // Администратор - СправочникСсылка.Пользователи @@ -4567,7 +4887,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриСозданииАдминистратора(Администратор, Уточнение); + МодульУправлениеДоступомСлужебный.ПриСозданииИлиАвторизацииАдминистратора(Администратор, Уточнение); КонецЕсли; КонецПроцедуры @@ -4703,6 +5023,11 @@ МодульИнтеграцияПодсистемБИП.ПриПроверкеВозможностиНастройкиПрофилейБезопасности(Отказ); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПроверкеВозможностиНастройкиПрофилейБезопасности Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПроверкеВозможностиНастройкиПрофилейБезопасности(Отказ); + КонецЕсли; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов. @@ -4721,6 +5046,12 @@ РежимЗамещения, ДобавляемыеРазрешения, УдаляемыеРазрешения, СтандартнаяОбработка, Результат); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗапросеРазрешенийНаИспользованиеВнешнихРесурсов(ПрограммныйМодуль, Владелец, + РежимЗамещения, ДобавляемыеРазрешения, УдаляемыеРазрешения, СтандартнаяОбработка, Результат); + КонецЕсли; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗапросеСозданияПрофиляБезопасности. @@ -4738,6 +5069,12 @@ Результат); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗапросеСозданияПрофиляБезопасности Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗапросеСозданияПрофиляБезопасности(ПрограммныйМодуль, СтандартнаяОбработка, + Результат); + КонецЕсли; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗапросеУдаленияПрофиляБезопасности. @@ -4755,6 +5092,12 @@ Результат); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗапросеУдаленияПрофиляБезопасности Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗапросеУдаленияПрофиляБезопасности(ПрограммныйМодуль, СтандартнаяОбработка, + Результат); + КонецЕсли; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриПодключенииВнешнегоМодуля. @@ -4770,6 +5113,11 @@ МодульИнтеграцияПодсистемБИП.ПриПодключенииВнешнегоМодуля(ВнешнийМодуль, БезопасныйРежим); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриПодключенииВнешнегоМодуля Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриПодключенииВнешнегоМодуля(ВнешнийМодуль, БезопасныйРежим); + КонецЕсли; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриВключенииИспользованияПрофилейБезопасности. @@ -4795,6 +5143,11 @@ МодульИнтеграцияПодсистемБИП.ПриВключенииИспользованияПрофилейБезопасности(); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриВключенииИспользованияПрофилейБезопасности Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриВключенииИспользованияПрофилейБезопасности(); + КонецЕсли; + КонецПроцедуры // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. @@ -4880,6 +5233,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + КонецЕсли; + КонецПроцедуры #Область ПрофилиБезопасности_ДляВнутреннегоИспользования @@ -4973,6 +5331,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Объекты); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииОбъектовИсключенияСинхронизацииФайлов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Объекты); + КонецЕсли; + КонецПроцедуры // См. РаботаСФайламиПереопределяемый.ПриСозданииФормыСпискаФайлов @@ -4988,6 +5351,11 @@ МодульИнтеграцияПодсистемБИП.ПриСозданииФормыСпискаФайлов(Форма); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриСозданииФормыСпискаФайлов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриСозданииФормыСпискаФайлов(Форма); + КонецЕсли; + КонецПроцедуры // См. РаботаСФайламиПереопределяемый.ПриСозданииФормыЭлементаФайлов @@ -5008,10 +5376,16 @@ МодульИнтеграцияПодсистемБИП.ПриСозданииФормыЭлементаФайлов(Форма); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриСозданииФормыЭлементаФайлов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриСозданииФормыЭлементаФайлов(Форма); + КонецЕсли; + КонецПроцедуры // См. РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой. Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор) Экспорт + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОтправкеФайловПочтой Тогда МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); МодульИнтеграцияПодсистемБТС.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, @@ -5023,6 +5397,13 @@ МодульИнтеграцияПодсистемБИП.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор); КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОтправкеФайловПочтой Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, + УникальныйИдентификатор); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -5136,6 +5517,11 @@ МодульИнтеграцияПодсистемБИП.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриОпределенииНастроекРегламентныхЗаданий Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); + КонецЕсли; + КонецПроцедуры // См. БлокировкаРаботыСВнешнимиРесурсамиПереопределяемый.ПриЗапретеРаботыСВнешнимиРесурсами. @@ -5155,7 +5541,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриЗапретеРаботыСВнешнимиРесурсами(); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗапретеРаботыСВнешнимиРесурсами Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗапретеРаботыСВнешнимиРесурсами(); + КонецЕсли; + КонецПроцедуры // См. БлокировкаРаботыСВнешнимиРесурсамиПереопределяемый.ПриРазрешенииРаботыСВнешнимиРесурсами. @@ -5175,7 +5566,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриРазрешенииРаботыСВнешнимиРесурсами(); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриРазрешенииРаботыСВнешнимиРесурсами Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриРазрешенииРаботыСВнешнимиРесурсами(); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -5475,6 +5871,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииВидовДоступа(ВидыДоступа); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииВидовДоступа Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииВидовДоступа(ВидыДоступа); + КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. @@ -5575,7 +5976,12 @@ МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); МодульСервисКриптографииDSSСлужебный.ПриЗаполненииСписковСОграничениемДоступа(Списки); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииСписковСОграничениемДоступа Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииСписковСОграничениемДоступа(Списки); + КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа. @@ -5598,6 +6004,12 @@ ПараметрыОбновления); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииПоставляемыхПрофилейГруппДоступа Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, + ПараметрыОбновления); + КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииЗависимостейПравДоступа. @@ -5618,6 +6030,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииЗависимостейПравДоступа(ЗависимостиПрав); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииЗависимостейПравДоступа Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииЗависимостейПравДоступа(ЗависимостиПрав); + КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов. @@ -5638,6 +6055,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииВозможныхПравДляНастройкиПравОбъектов(ВозможныеПрава); + КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииИспользованияВидаДоступа. @@ -5663,6 +6085,11 @@ МодульИнтеграцияПодсистемБИП.ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование); КонецЕсли; + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииИспользованияВидаДоступа Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование); + КонецЕсли; + КонецПроцедуры // См. УправлениеДоступомПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных. @@ -5720,7 +6147,12 @@ МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); МодульСервисКриптографииDSSСлужебный.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриЗаполненииВидовОграниченийПравОбъектовМетаданных Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание); + КонецЕсли; + КонецПроцедуры #Область УправлениеДоступом_ДляВнутреннегоИспользования @@ -5792,7 +6224,7 @@ #Область УдалениеПомеченныхОбъектов -// см. УдалениеПомеченныхОбъектовПереопределяемый.ПередУдалениемГруппыОбъектов +// См. УдалениеПомеченныхОбъектовПереопределяемый.ПередУдалениемГруппыОбъектов Процедура ПередУдалениемГруппыОбъектов(Контекст, УдаляемыеОбъекты) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда @@ -5807,7 +6239,7 @@ КонецПроцедуры -// см. УдалениеПомеченныхОбъектовПереопределяемый.ПослеУдаленияГруппыОбъектов +// См. УдалениеПомеченныхОбъектовПереопределяемый.ПослеУдаленияГруппыОбъектов Процедура ПослеУдаленияГруппыОбъектов(Контекст, Успешно) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда @@ -5822,6 +6254,100 @@ КонецПроцедуры +#КонецОбласти + +#Область УчетОригиналовПервичныхДокументов + +// См. УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииНастроек +Процедура ПриОпределенииНастроекУчетаОригиналов(Настройки) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОпределенииНастроекУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриОпределенииНастроекУчетаОригиналов(Настройки); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриОпределенииНастроекУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриОпределенииНастроекУчетаОригиналов(Настройки); + КонецЕсли; + +КонецПроцедуры + +// См. УчетОригиналовПервичныхДокументовПереопределяемый.ПриИзмененииОбщегоСостоянияОригинала +Процедура ПриИзмененииОбщегоСостоянияОригинала(Документ, СостояниеОригинала) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриИзмененииОбщегоСостоянияОригинала Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриИзмененииОбщегоСостоянияОригинала(Документ, СостояниеОригинала); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриИзмененииОбщегоСостоянияОригинала Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриИзмененииОбщегоСостоянияОригинала(Документ, СостояниеОригинала); + КонецЕсли; + +КонецПроцедуры + +// См. УчетОригиналовПервичныхДокументовПереопределяемый.ПередЗаписьюСостоянийОригиналовПослеПечати +Процедура ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, СписокПечати) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПередЗаписьюСостоянийОригиналовПослеПечати Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, СписокПечати); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПередЗаписьюСостоянийОригиналовПослеПечати Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, СписокПечати); + КонецЕсли; + +КонецПроцедуры + +// См. УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииОбъектовСКомандамиУчетаОригиналов +Процедура ПриОпределенииОбъектовСКомандамиУчетаОригиналов(СписокОбъектов) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОпределенииОбъектовСКомандамиУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриОпределенииОбъектовСКомандамиУчетаОригиналов(СписокОбъектов); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриОпределенииОбъектовСКомандамиУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриОпределенииОбъектовСКомандамиУчетаОригиналов(СписокОбъектов); + КонецЕсли; + +КонецПроцедуры + +// См. УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииМногосотрудниковыхДокументов +Процедура ПриОпределенииМногосотрудниковыхДокументов(СписокОбъектов) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриОпределенииМногосотрудниковыхДокументов Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриОпределенииМногосотрудниковыхДокументов(СписокОбъектов); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриОпределенииМногосотрудниковыхДокументов Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриОпределенииМногосотрудниковыхДокументов(СписокОбъектов); + КонецЕсли; + +КонецПроцедуры + +// См. УчетОригиналовПервичныхДокументовПереопределяемый.ЗаполнитьТаблицуУчетаОригиналов +Процедура ПриЗаполненииТаблицыУчетаОригиналов(ТаблицаУчетаОригиналов) Экспорт + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриЗаполненииТаблицыУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС"); + МодульИнтеграцияПодсистемБТС.ПриЗаполненииТаблицыУчетаОригиналов(ТаблицаУчетаОригиналов); + КонецЕсли; + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриЗаполненииТаблицыУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); + МодульИнтеграцияПодсистемБИП.ПриЗаполненииТаблицыУчетаОригиналов(ТаблицаУчетаОригиналов); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ЦентрМониторинга @@ -5861,7 +6387,12 @@ МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП"); МодульИнтеграцияПодсистемБИП.ПриСбореПоказателейСтатистикиКонфигурации(); КонецЕсли; - + + Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриСбореПоказателейСтатистикиКонфигурации Тогда + МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс(); + МодульИнтеграцияПодсистемПлюс.ПриСбореПоказателейСтатистикиКонфигурации(); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -5887,4 +6418,12 @@ #КонецОбласти +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция МодульИнтеграцияПодсистемПлюс() + Возврат ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемПлюс"); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl index 03aa95333..fb9850aaa 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиент/Module.bsl @@ -59,6 +59,63 @@ #Область СлужебныйПрограммныйИнтерфейс +// Определяет события, на которые могут подписаться другие библиотеки. +// +// Возвращаемое значение: +// Структура - ключами свойств структуры являются имена событий, на которые +// могут быть подписаны библиотеки. +// +Функция СобытияБСП() Экспорт + + События = Новый Структура; + + // БазоваяФункциональность + События.Вставить("ПередНачаломРаботыСистемы", Ложь); + События.Вставить("ПриНачалеРаботыСистемы", Ложь); + События.Вставить("ПослеНачалаРаботыСистемы", Ложь); + События.Вставить("ПриОбработкеПараметровЗапуска", Ложь); + События.Вставить("ПередЗавершениемРаботыСистемы", Ложь); + События.Вставить("ПередПериодическойОтправкойДанныхКлиентаНаСервер", Ложь); + События.Вставить("ПослеПериодическогоПолученияДанныхКлиентаНаСервере", Ложь); + События.Вставить("ПриГлобальномПоиске", Ложь); + События.Вставить("ПриВыбореРезультатаГлобальногоПоиска", Ложь); + События.Вставить("ПриВыбореДействияРезультатаГлобальногоПоиска", Ложь); + События.Вставить("ОбработкаПереходаПоНавигационнойСсылке", Ложь); + + // ВариантыОтчетов + События.Вставить("ПослеФормирования", Ложь); + События.Вставить("ПриНачалеВыбораЗначений", Ложь); + События.Вставить("ПриОбработкеРасшифровки", Ложь); + События.Вставить("ПриОбработкеДополнительнойРасшифровки", Ложь); + События.Вставить("ПриОбработкеКоманды", Ложь); + События.Вставить("ПриОбработкеВыбора", Ложь); + События.Вставить("ПриОбработкеВыбораТабличногоДокумента", Ложь); + События.Вставить("ПриОбработкеОповещения", Ложь); + События.Вставить("ПриНажатииКнопкиВыбораПериода", Ложь); + + // ЗавершениеРаботыПользователей + События.Вставить("ПриЗавершенииСеансов", Ложь); + + // Печать + События.Вставить("ПечатьДокументовПослеОткрытия", Ложь); + События.Вставить("ПечатьДокументовОбработкаНавигационнойСсылки", Ложь); + События.Вставить("ПечатьДокументовВыполнитьКоманду", Ложь); + + // ПрофилиБезопасности + События.Вставить("ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов", Ложь); + + // РезервноеКопированиеИБ + События.Вставить("ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме", Ложь); + События.Вставить("ПриПредложенииПользователюСоздатьРезервнуюКопию", Ложь); + + // УчетОригиналовПервичныхДокументов + События.Вставить("ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов", Ложь); + События.Вставить("ПриОткрытииФормыЖурналаУчетаОригиналов", Ложь); + + Возврат События; + +КонецФункции + #Область БазоваяФункциональность // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы @@ -144,12 +201,17 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПередНачаломРаботыСистемы(Параметры); КонецЕсли; + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПередНачаломРаботыСистемы Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПередНачаломРаботыСистемы(Параметры); + КонецЕсли; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); МодульОбновлениеКонфигурацииКлиент.ПередНачаломРаботыСистемы(Параметры); КонецЕсли; - + КонецПроцедуры // См. ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы @@ -212,7 +274,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПриНачалеРаботыСистемы(Параметры); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриНачалеРаботыСистемы Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриНачалеРаботыСистемы(Параметры); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы. @@ -273,7 +340,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПослеНачалаРаботыСистемы(); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПослеНачалаРаботыСистемы Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПослеНачалаРаботыСистемы(); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияКлиентПереопределяемый.ПриОбработкеПараметровЗапуска. @@ -293,7 +365,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПриОбработкеПараметровЗапуска(ПараметрыЗапуска, Отказ); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриОбработкеПараметровЗапуска Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриОбработкеПараметровЗапуска(ПараметрыЗапуска, Отказ); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы. @@ -333,7 +410,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПередЗавершениемРаботыСистемы Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПередЗавершениемРаботыСистемы(Отказ, Предупреждения); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияКлиентПереопределяемый.ПередПериодическойОтправкойДанныхКлиентаНаСервер @@ -384,6 +466,11 @@ СерверныеОповещенияКлиент.ДобавитьПоказатель(МоментНачала, "ИнтеграцияПодсистемБЭДКлиент.ПередПериодическойОтправкойДанныхКлиентаНаСервер"); + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПередПериодическойОтправкойДанныхКлиентаНаСервер Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры); + КонецЕсли; + КонецПроцедуры // См. ОбщегоНазначенияКлиентПереопределяемый.ПослеПериодическогоПолученияДанныхКлиентаНаСервере @@ -409,7 +496,12 @@ КонецПопытки; СерверныеОповещенияКлиент.ДобавитьПоказатель(МоментНачала, "ЦентрМониторингаКлиентСлужебный.ПослеПериодическогоПолученияДанныхКлиентаНаСервере"); - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПослеПериодическогоПолученияДанныхКлиентаНаСервере Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПослеПериодическогоПолученияДанныхКлиентаНаСервере(Результаты); + КонецЕсли; + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); Попытка Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБЭД().ПослеПериодическогоПолученияДанныхКлиентаНаСервере Тогда @@ -424,6 +516,49 @@ КонецПроцедуры +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриГлобальномПоиске +Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска) Экспорт + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриГлобальномПоиске Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска); + КонецЕсли; + +КонецПроцедуры + +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриВыбореРезультатаГлобальногоПоиска +Процедура ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, СтандартнаяОбработка) Экспорт + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриВыбореРезультатаГлобальногоПоиска Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриВыбореРезультатаГлобальногоПоиска( + ЭлементРезультата, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриВыбореДействияРезультатаГлобальногоПоиска +Процедура ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) Экспорт + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриВыбореДействияРезультатаГлобальногоПоиска Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриВыбореДействияРезультатаГлобальногоПоиска( + ЭлементРезультата, Действие); + КонецЕсли; + +КонецПроцедуры + +// См. ОбщегоНазначенияКлиентПереопределяемый.ОбработкаПереходаПоНавигационнойСсылке +Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка) Экспорт + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ОбработкаПереходаПоНавигационнойСсылке Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ОбработкаПереходаПоНавигационнойСсылке( + ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ВариантыОтчетов @@ -489,6 +624,12 @@ Элемент, Расшифровка, СтандартнаяОбработка); КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеДоступомСлужебныйКлиент"); + МодульУправлениеДоступомСлужебныйКлиент.ПриОбработкеДополнительнойРасшифровки(ФормаОтчета, + Элемент, Расшифровка, СтандартнаяОбработка); + КонецЕсли; + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБТС().ПриОбработкеДополнительнойРасшифровки Тогда МодульИнтеграцияПодсистемБТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБТСКлиент"); МодульИнтеграцияПодсистемБТСКлиент.ПриОбработкеДополнительнойРасшифровки(ФормаОтчета, @@ -671,7 +812,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПриЗавершенииСеансов(ФормаВладелец, НомераСеансов, СтандартнаяОбработка, ОповещениеПослеЗавершенияСеанса); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриЗавершенииСеансов Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриЗавершенииСеансов(ФормаВладелец, НомераСеансов, СтандартнаяОбработка, ОповещениеПослеЗавершенияСеанса); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -750,7 +896,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов(Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии, СтандартнаяОбработка); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов(Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии, СтандартнаяОбработка); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -778,7 +929,12 @@ МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); МодульИнтеграцияПодсистемБИПКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат); КонецЕсли; - + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме(Результат); + КонецЕсли; + КонецПроцедуры // Вызывается при предложении создать резервную копию. @@ -799,6 +955,45 @@ МодульИнтеграцияПодсистемБИПКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию(); КонецЕсли; + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиПлюс().ПриПредложенииПользователюСоздатьРезервнуюКопию Тогда + МодульИнтеграцияПодсистемПлюсКлиент = МодульИнтеграцияПодсистемПлюсКлиент(); + МодульИнтеграцияПодсистемПлюсКлиент.ПриПредложенииПользователюСоздатьРезервнуюКопию(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область УчетОригиналовПервичныхДокументов + +// См. УчетОригиналовПервичныхДокументовКлиентПереопределяемый.ПриПодключенииСканераШтрихкода. +Процедура ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов(Форма) Экспорт + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБТС().ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБТСКлиент"); + МодульИнтеграцияПодсистемБТСКлиент.ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов(Форма); + КонецЕсли; + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБИП().ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); + МодульИнтеграцияПодсистемБИПКлиент.ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов(Форма); + КонецЕсли; + +КонецПроцедуры + +// См. УчетОригиналовПервичныхДокументовКлиентПереопределяемый.ПриОткрытииФормыЖурналаУчетаОригиналов. +Процедура ПриОткрытииФормыЖурналаУчетаОригиналов() Экспорт + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБТС().ПриОткрытииФормыЖурналаУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБТСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБТСКлиент"); + МодульИнтеграцияПодсистемБТСКлиент.ПриОткрытииФормыЖурналаУчетаОригиналов(); + КонецЕсли; + + Если ИнтеграцияПодсистемБСПКлиентПовтИсп.ПодпискиБИП().ПриОткрытииФормыЖурналаУчетаОригиналов Тогда + МодульИнтеграцияПодсистемБИПКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемБИПКлиент"); + МодульИнтеграцияПодсистемБИПКлиент.ПриОткрытииФормыЖурналаУчетаОригиналов(); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -807,52 +1002,9 @@ #Область СлужебныеПроцедурыИФункции -// Определяет события, на которые могут подписаться другие библиотеки. -// -// Возвращаемое значение: -// Структура - ключами свойств структуры являются имена событий, на которые -// могут быть подписаны библиотеки. -// -Функция СобытияБСП() Экспорт +Функция МодульИнтеграцияПодсистемПлюсКлиент() - События = Новый Структура; - - // БазоваяФункциональность - События.Вставить("ПередНачаломРаботыСистемы", Ложь); - События.Вставить("ПриНачалеРаботыСистемы", Ложь); - События.Вставить("ПослеНачалаРаботыСистемы", Ложь); - События.Вставить("ПриОбработкеПараметровЗапуска", Ложь); - События.Вставить("ПередЗавершениемРаботыСистемы", Ложь); - События.Вставить("ПередПериодическойОтправкойДанныхКлиентаНаСервер", Ложь); - События.Вставить("ПослеПериодическогоПолученияДанныхКлиентаНаСервере", Ложь); - - // ВариантыОтчетов - События.Вставить("ПослеФормирования", Ложь); - События.Вставить("ПриНачалеВыбораЗначений", Ложь); - События.Вставить("ПриОбработкеРасшифровки", Ложь); - События.Вставить("ПриОбработкеДополнительнойРасшифровки", Ложь); - События.Вставить("ПриОбработкеКоманды", Ложь); - События.Вставить("ПриОбработкеВыбора", Ложь); - События.Вставить("ПриОбработкеВыбораТабличногоДокумента", Ложь); - События.Вставить("ПриОбработкеОповещения", Ложь); - События.Вставить("ПриНажатииКнопкиВыбораПериода", Ложь); - - // ЗавершениеРаботыПользователей - События.Вставить("ПриЗавершенииСеансов", Ложь); - - // Печать - События.Вставить("ПечатьДокументовПослеОткрытия", Ложь); - События.Вставить("ПечатьДокументовОбработкаНавигационнойСсылки", Ложь); - События.Вставить("ПечатьДокументовВыполнитьКоманду", Ложь); - - // ПрофилиБезопасности - События.Вставить("ПриПодтвержденииЗапросовНаИспользованиеВнешнихРесурсов", Ложь); - - // РезервноеКопированиеИБ - События.Вставить("ПриПроверкеВозможностиРезервногоКопированияВПользовательскомРежиме", Ложь); - События.Вставить("ПриПредложенииПользователюСоздатьРезервнуюКопию", Ложь); - - Возврат События; + Возврат ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемПлюсКлиент"); КонецФункции diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиентПовтИсп/Module.bsl index 678777925..188a45d73 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСПКлиентПовтИсп/Module.bsl @@ -48,4 +48,16 @@ КонецФункции +Функция ПодпискиПлюс() Экспорт + + Подписки = ИнтеграцияПодсистемБСПКлиент.СобытияБСП(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ПлюсСервис") Тогда + МодульИнтеграцияПодсистемПлюсКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияПодсистемПлюсКлиент"); + МодульИнтеграцияПодсистемПлюсКлиент.ПриОпределенииПодписокНаСобытияБСП(Подписки); + КонецЕсли; + + Возврат Подписки; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнтеграцияПодсистемБСППовтИсп/Module.bsl b/SSL/src/CommonModules/ИнтеграцияПодсистемБСППовтИсп/Module.bsl index e3283ec42..b0b3a3797 100644 --- a/SSL/src/CommonModules/ИнтеграцияПодсистемБСППовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияПодсистемБСППовтИсп/Module.bsl @@ -70,5 +70,16 @@ КонецФункции +Функция ПодпискиПлюс() Экспорт + + Подписки = ИнтеграцияПодсистемБСП.СобытияБСП(); + Если ОбщегоНазначения.ПодсистемаСуществует("ПлюсСервис") Тогда + МодульИнтеграцияПодсистемПлюс = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемПлюс"); + МодульИнтеграцияПодсистемПлюс.ПриОпределенииПодписокНаСобытияБСП(Подписки); + КонецЕсли; + + Возврат Подписки; + +КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index d06e47a6d..1cc3da01c 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -71,8 +71,7 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -108,10 +107,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы // Актуализирует данные первого показа. Процедура ОперативноеОбновлениеОбщихДанных() Экспорт @@ -120,8 +120,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции. +#КонецОбласти // Актуализирует данные первого показа. Процедура ОбновитьКэшПервогоПоказа(НосительМакетов) @@ -137,13 +136,13 @@ Запись = НаборЗаписей.Добавить(); Запись.Номер = Пакет.НомерВРегистре; - Запись.Состав = Новый ХранилищеЗначения(СоставПакета); + Запись.Состав = Новый ХранилищеЗначения(СоставПакета, Новый СжатиеДанных(9)); КонецЦикла; // Метаинформация записывается в регистр под номером 0. Запись = НаборЗаписей.Добавить(); Запись.Номер = 0; - Запись.Состав = Новый ХранилищеЗначения(ПакетыСтраниц); + Запись.Состав = Новый ХранилищеЗначения(ПакетыСтраниц, Новый СжатиеДанных(9)); ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей, Ложь, Ложь); УстановитьПривилегированныйРежим(Ложь); diff --git a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl index c40bfe954..439fed4c7 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапускеКлиент/Module.bsl @@ -25,8 +25,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы. Процедура ПослеНачалаРаботыСистемы() Экспорт @@ -39,3 +38,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index 33427b968..64f6c30ce 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -732,8 +732,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -814,8 +813,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления ИБ, используемые в других подсистемах. +#КонецОбласти + +#Область ОбработчикиОбновленияИБИспользуемыеВДругихПодсистемах // Обновляет данные, зависимые от производственных календарей. // @@ -845,6 +845,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Получает единственный производственный календарь в ИБ. @@ -996,8 +998,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы // Обновляет справочник Производственные календари из одноименного макета. // @@ -1512,3 +1513,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl index cb77d13b4..64adbda66 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебный/Module.bsl @@ -33,8 +33,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков. Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт @@ -45,6 +44,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Процедура для вызова из очереди заданий, помещается туда в ЗапланироватьОбновлениеДанныхЗависимыхОтПроизводственныхКалендарей. @@ -122,4 +123,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонструкторФормул/Module.bsl b/SSL/src/CommonModules/КонструкторФормул/Module.bsl index ba18edb5a..7d508b9eb 100644 --- a/SSL/src/CommonModules/КонструкторФормул/Module.bsl +++ b/SSL/src/CommonModules/КонструкторФормул/Module.bsl @@ -161,8 +161,9 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения // Параметр - Произвольный -// ДополнительныеПараметры - см. КонструкторФормулКлиент.ПараметрыОбработчика -// +// ДополнительныеПараметры - Структура: +// * КлючОперации - Строка - выполняемая операция. +// Процедура ОбработчикКонструктораФормул(Форма, Параметр, ДополнительныеПараметры) Экспорт КонструкторФормулСлужебный.ОбработчикКонструктораФормул(Форма, Параметр, ДополнительныеПараметры); КонецПроцедуры diff --git a/SSL/src/CommonModules/КонструкторФормулКлиент/Module.bsl b/SSL/src/CommonModules/КонструкторФормулКлиент/Module.bsl index ca6fff177..c3906e286 100644 --- a/SSL/src/CommonModules/КонструкторФормулКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонструкторФормулКлиент/Module.bsl @@ -460,20 +460,6 @@ КонецПроцедуры -// Конструктор дополнительных параметров для универсальных обработчиков конструктора формул. -// -// Возвращаемое значение: -// Структура: -// * ВыполнитьНаСервере - Булево - выполнить запуск серверного универсального обработчика. -// * КлючОперации - Строка -// -Функция ПараметрыОбработчика() Экспорт - Параметры = Новый Структура; - Параметры.Вставить("ВыполнитьНаСервере", Ложь); - Параметры.Вставить("КлючОперации"); - Возврат Параметры; -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -776,4 +762,18 @@ КонецФункции +// Конструктор дополнительных параметров для универсальных обработчиков конструктора формул. +// +// Возвращаемое значение: +// Структура: +// * ВыполнитьНаСервере - Булево - выполнить запуск серверного универсального обработчика. +// * КлючОперации - Строка +// +Функция ПараметрыОбработчика() + Параметры = Новый Структура; + Параметры.Вставить("ВыполнитьНаСервере", Ложь); + Параметры.Вставить("КлючОперации"); + Возврат Параметры; +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl index eab4385cd..2bae992cd 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчета/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции по выполнению проверок ведению учета и получению их результатов. +#Область ПроцедурыИФункцииПоВыполнениюПроверокВедениюУчетаИПолучениюИхРезультатов // Выполняет указанную проверку ведения учета с заданными параметрами. // @@ -303,8 +302,8 @@ // Функция КоличествоПроблемПоПравилуПроверки(ПравилоПроверки) Экспорт - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоПравилуПроверки", "ПравилоПроверки", - ПравилоПроверки, Тип("СправочникСсылка.ПравилаПроверкиУчета")); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.КоличествоПроблемПоПравилуПроверки", + "ПравилоПроверки", ПравилоПроверки, Тип("СправочникСсылка.ПравилаПроверкиУчета")); Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -319,12 +318,90 @@ УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда - КоличествоПроблем = Результат.Количество; - Иначе - КоличествоПроблем = 0; + Возврат Результат.Количество; КонецЕсли; - Возврат КоличествоПроблем; + Возврат 0; + +КонецФункции + +// Возвращает проблемные объекты, выявленные указанным правилом проверки. +// +// Параметры: +// ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета +// Параметры - см. ПараметрыВыборкиПроблемныхОбъектов +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ПроблемныйОбъект - ЛюбаяСсылка +// * ПравилоПроверки - СправочникСсылка.ПравилаПроверкиУчета +// * ВидПроверки - СправочникСсылка.ВидыПроверок +// * КлючУникальности - УникальныйИдентификатор +// +Функция ПроблемныеОбъекты(Знач ПравилоПроверки, Знач Параметры = Неопределено) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, + | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, + | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, + | РезультатыПроверкиУчета.КлючУникальности КАК КлючУникальности + |ИЗ + | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета + |ГДЕ + | РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки + | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему + | И РезультатыПроверкиУчета.ПроблемныйОбъект > &ПроблемныйОбъект + | И &ДополнительныеУсловия + | + |УПОРЯДОЧИТЬ ПО + | РезультатыПроверкиУчета.ПроблемныйОбъект"); + + Если Параметры = Неопределено Тогда + Параметры = ПараметрыВыборкиПроблемныхОбъектов(); + КонецЕсли; + Если Параметры.РазмерПорции <> 1000 Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "1000", Формат(Параметры.РазмерПорции, "ЧГ=0")); + КонецЕсли; + Если ПустаяСтрока(Параметры.ДополнительныеУсловия) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДополнительныеУсловия", "Истина"); + Иначе + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДополнительныеУсловия", Параметры.ДополнительныеУсловия); + Для каждого ДополнительноеУсловие Из Параметры.ДополнительныеПараметры Цикл + Запрос.УстановитьПараметр(ДополнительноеУсловие.Ключ, ДополнительноеУсловие.Значение); + КонецЦикла; + КонецЕсли; + + Если Параметры.НачальныйПроблемныйОбъект = Неопределено Тогда + Параметры.НачальныйПроблемныйОбъект = ""; + КонецЕсли; + + Запрос.УстановитьПараметр("ПравилоПроверки", ПравилоПроверки); + Запрос.УстановитьПараметр("ПроблемныйОбъект", Параметры.НачальныйПроблемныйОбъект); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +// Возвращает параметры выборки проблемных объектов для функции ПроблемныеОбъекты. +// +// Возвращаемое значение: +// Структура: +// * НачальныйПроблемныйОбъект - Неопределено +// * РазмерПорции - Число - по умолчанию 1000. +// * ДополнительныеУсловия - Строка +// * ДополнительныеПараметры - Соответствие из КлючИЗначение: +// ** Ключ - Строка - имя параметра запроса. +// ** Значение - Произвольный - значение параметра запроса. +// +Функция ПараметрыВыборкиПроблемныхОбъектов() Экспорт + + Результат = Новый Структура; + Результат.Вставить("НачальныйПроблемныйОбъект", Неопределено); + Результат.Вставить("РазмерПорции", 1000); + Результат.Вставить("ДополнительныеУсловия", ""); + Результат.Вставить("ДополнительныеПараметры", Новый Соответствие); + Возврат Результат; КонецФункции @@ -422,8 +499,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для регистрации проблем ведения учета. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРегистрацииПроблемВеденияУчета // Формирует описание проблемы для последующей регистрации // с помощью процедуры КонтрольВеденияУчета.ЗаписатьПроблему в процедуре-обработчике проверки. @@ -531,8 +609,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для встраивания подсистемы в формы объектов конфигурации. +#КонецОбласти + +#Область ПроцедурыИФункцииДляВстраиванияПодсистемыВФормыОбъектовКонфигурации // В форме списка выводит колонку с картинкой, сигнализирующей о наличии проблем с объектами в строках. // Вызывается из события ПриСозданииНаСервере формы списка. @@ -841,8 +920,9 @@ ДлительныеОперации.ВыполнитьПроцедуру(, "КонтрольВеденияУчетаСлужебный.ПроверитьОбъект", ТекущийОбъект.Ссылка, Проверки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Возвращает Истина, если есть права на просмотр проблем ведения учета. // @@ -930,6 +1010,8 @@ КонецПроцедуры +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать функцию ПодробнаяИнформацияПоВидамПроверок. @@ -1084,40 +1166,6 @@ #Область СлужебныйПрограммныйИнтерфейс -Функция ПроблемныеОбъекты(ПравилоПроверки, Смещение = Неопределено, Порция = 1000) Экспорт - - Запрос = Новый Запрос; - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 - | РезультатыПроверкиУчета.ПроблемныйОбъект КАК ПроблемныйОбъект, - | РезультатыПроверкиУчета.ПравилоПроверки КАК ПравилоПроверки, - | РезультатыПроверкиУчета.ВидПроверки КАК ВидПроверки, - | РезультатыПроверкиУчета.КлючУникальности КАК КлючУникальности - |ИЗ - | РегистрСведений.РезультатыПроверкиУчета КАК РезультатыПроверкиУчета - |ГДЕ - | РезультатыПроверкиУчета.ПравилоПроверки = &ПравилоПроверки - | И НЕ РезультатыПроверкиУчета.ИгнорироватьПроблему - | И РезультатыПроверкиУчета.ПроблемныйОбъект > &ПроблемныйОбъект - | - |УПОРЯДОЧИТЬ ПО - | РезультатыПроверкиУчета.ПроблемныйОбъект"; - - Если Порция = 1000 Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "1000", Формат(Порция, "ЧГ=0")); - КонецЕсли; - Запрос.Текст = ТекстЗапроса; - - Если Смещение = Неопределено Тогда - Смещение = ""; - КонецЕсли; - - Запрос.УстановитьПараметр("ПравилоПроверки", ПравилоПроверки); - Запрос.УстановитьПараметр("ПроблемныйОбъект", Смещение); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - Функция ПроблемныеОбъектыПоВидуПроверки(ВидПроверки, Смещение = Неопределено, Порция = 1000) Экспорт Запрос = Новый Запрос; @@ -1199,7 +1247,8 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -1265,6 +1314,4 @@ КонецФункции -#КонецОбласти - - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl index 9e780ee84..f042a42be 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебный/Module.bsl @@ -2478,7 +2478,7 @@ ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -2591,7 +2591,7 @@ ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -2690,7 +2690,7 @@ ПоляУпорядочивания, БитаяСсылка, ТипЗнч(БитаяСсылка)); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета КонецЦикла; @@ -2806,7 +2806,7 @@ ПоляУпорядочивания, БитаяСсылка, ТипЗнч(БитаяСсылка)); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета КонецЦикла; @@ -2946,7 +2946,7 @@ ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -3027,7 +3027,7 @@ ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -3116,9 +3116,9 @@ Запрос = Новый Запрос( "ВЫБРАТЬ - | ПланВидовХарактеристик.Ссылка КАК ВидСубконто + | Таблица.Ссылка КАК ВидСубконто |ИЗ - | &ПланВидовХарактеристик КАК ПланВидовХарактеристик"); + | &ПланВидовХарактеристик КАК Таблица"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПланВидовХарактеристик", ОбъектМетаданных.ПланСчетов.ВидыСубконто.ПолноеИмя()); Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидСубконто"); @@ -3430,7 +3430,7 @@ |%1, |обнаружены незаполненные данные, обязательные к заполнению: %2'"), " • " + НСтр("ru = 'Регистратор:'") + " = """ + СтрокаРезультата.РегистраторРеквизитСсылка, Символы.ПС + ОшибкиЗаполненияОбъекта()); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -3515,7 +3515,7 @@ |%1, |обнаружены незаполненные данные, обязательные к заполнению: %2'"), " • " + НСтр("ru = 'Регистратор:'") + " = """ + СтрокаРезультата.РегистраторРеквизитСсылка, Символы.ПС + ОшибкиЗаполненияОбъекта()); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -3646,7 +3646,7 @@ Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: |%1, |обнаружены незаполненные данные, обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + ОшибкиЗаполненияОбъекта()); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(ДополнительнаяИнформация, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета @@ -3784,7 +3784,7 @@ Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У записи с полями: |%1, |обнаружены незаполненные данные, обязательные к заполнению: %2'"), ПредставлениеОтбораНабораЗаписей, Символы.ПС + УточнениеПроблемы); - Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей); + Проблема.ДополнительнаяИнформация = Новый ХранилищеЗначения(СтруктураНабораЗаписей, Новый СжатиеДанных(9)); ЗаписатьПроблему(Проблема, ПараметрыПроверки); // @skip-check query-in-loop - порционная проверка ведения учета КонецЦикла; @@ -4014,7 +4014,7 @@ // * Ссылка - ЛюбаяСсылка // Функция ДочерниеЭлементыРодителя(СсылкаНаОбъект, Знач ИсключениеВыборки) - Перем Результат; + ТекстЗапроса = "ВЫБРАТЬ | ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка @@ -4032,10 +4032,8 @@ Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Родитель", СсылкаНаОбъект); Запрос.УстановитьПараметр("ИсключениеВыборки", ИсключениеВыборки); - Результат = Запрос.Выполнить(); - - Выгрузка = Результат.Выгрузить(); - Возврат Выгрузка + Возврат Запрос.Выполнить().Выгрузить(); + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl index c5a3af181..55800b26e 100644 --- a/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/КонтрольВеденияУчетаСлужебныйКлиент/Module.bsl @@ -74,8 +74,7 @@ ОткрытьФорму("Справочник.ПравилаПроверкиУчета.ФормаСписка"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы. Процедура ПослеНачалаРаботыСистемы() Экспорт @@ -174,6 +173,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Открывает форму для интерактивных действий пользователя для решения проблемы. diff --git a/SSL/src/CommonModules/КонтрольРаботыПользователейСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольРаботыПользователейСлужебный/Module.bsl index 7bbfb89cd..59bbbff48 100644 --- a/SSL/src/CommonModules/КонтрольРаботыПользователейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/КонтрольРаботыПользователейСлужебный/Module.bsl @@ -12,21 +12,17 @@ // Обработчики событий подсистем конфигурации. // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - ОбщегоНазначения.ДобавитьПереименование(Итог, - "2.1.0.1", + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.1.0.1", "Подсистема.СтандартныеПодсистемы.Подсистема.КонтрольЖурналаРегистрации", "Подсистема.СтандартныеПодсистемы.Подсистема.АнализЖурналаРегистрации", - Библиотека); + "СтандартныеПодсистемы"); - ОбщегоНазначения.ДобавитьПереименование(Итог, - "3.1.10.32", + ОбщегоНазначения.ДобавитьПереименование(Переименования, "3.1.10.32", "Подсистема.СтандартныеПодсистемы.Подсистема.АнализЖурналаРегистрации", "Подсистема.СтандартныеПодсистемы.Подсистема.КонтрольРаботыПользователей", - Библиотека); + "СтандартныеПодсистемы"); КонецПроцедуры @@ -160,7 +156,7 @@ Блокировка.Заблокировать(); ТекущиеНастройки = ХранимыеНастройкиРегистрации(); ТекущиеНастройки.Использовать = РегистрироватьДоступКДанным; - Хранилище = Новый ХранилищеЗначения(ТекущиеНастройки); + Хранилище = Новый ХранилищеЗначения(ТекущиеНастройки, Новый СжатиеДанных(9)); Константы.НастройкиРегистрацииСобытийДоступаКДанным.Установить(Хранилище); Пользователи.ОбновитьНастройкиРегистрацииСобытийДоступаКДанным(); ЗафиксироватьТранзакцию(); @@ -219,7 +215,7 @@ ТекущиеНастройки.Состав = Настройки.Состав; ТекущиеНастройки.Комментарии = Настройки.Комментарии; ТекущиеНастройки.ОбщийКомментарий = Настройки.ОбщийКомментарий; - Хранилище = Новый ХранилищеЗначения(ТекущиеНастройки); + Хранилище = Новый ХранилищеЗначения(ТекущиеНастройки, Новый СжатиеДанных(9)); Константы.НастройкиРегистрацииСобытийДоступаКДанным.Установить(Хранилище); Пользователи.ОбновитьНастройкиРегистрацииСобытийДоступаКДанным(); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНС/Module.bsl b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНС/Module.bsl index 9d9af8fbd..47f569ef6 100644 --- a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНС/Module.bsl +++ b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНС/Module.bsl @@ -722,7 +722,7 @@ НовыйДоверитель = Объект.Доверители.Добавить(); НовыйДоверитель.Доверитель = ДанныеЗаполнения.Участник; - НовыйДоверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(ДанныеЗаполнения.Реквизиты); + НовыйДоверитель.ДоверительРеквизиты = Новый ХранилищеЗначения(ДанныеЗаполнения.Реквизиты, Новый СжатиеДанных(9)); НовыйДоверитель.Идентификатор = Новый УникальныйИдентификатор; НовыйДоверитель.ЭтоФизЛицо = ДанныеЗаполнения.ЭтоФизЛицо; НовыйДоверитель.ИдентификаторРодителя = ДанныеЗаполнения.ИдентификаторРодителя; @@ -759,7 +759,7 @@ Объект = Доверенность.ПолучитьОбъект(); НовыйПредставитель = Объект.Представители.Добавить(); НовыйПредставитель.Представитель = ДанныеЗаполнения.Участник; - НовыйПредставитель.ПредставительРеквизиты = Новый ХранилищеЗначения(ДанныеЗаполнения.Реквизиты); + НовыйПредставитель.ПредставительРеквизиты = Новый ХранилищеЗначения(ДанныеЗаполнения.Реквизиты, Новый СжатиеДанных(9)); НовыйПредставитель.Идентификатор = Новый УникальныйИдентификатор; НовыйПредставитель.ИдентификаторРодителя = ДанныеЗаполнения.ИдентификаторРодителя; diff --git a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНСКлиент/Module.bsl b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНСКлиент/Module.bsl index 9ce4f80c9..09e9ce6d7 100644 --- a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНСКлиент/Module.bsl +++ b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНСКлиент/Module.bsl @@ -12,8 +12,8 @@ // // Параметры: // Отборы - см. ОтборыСпискаДоверенностей -// ОповещениеОЗакрытии - ОписаниеОповещения - оповещение о закрытии формы списка доверенностей -// Владелец - Форма - владелец открываемой формы +// ОповещениеОЗакрытии - ОписаниеОповещения - оповещение о закрытии формы списка доверенностей. +// Владелец - Форма - владелец открываемой формы. // Процедура ОткрытьСписокМЧД(Отборы = Неопределено, ОповещениеОЗакрытии = Неопределено, Владелец = Неопределено) Экспорт @@ -22,7 +22,7 @@ КонецПроцедуры -// Конструктор отборов списка доверенностей. +// Конструктор отборов списка машиночитаемых доверенностей для процедуры ОткрытьСписокМЧД. // // Возвращаемое значение: // Структура - возможные отборы списка доверенностей: @@ -31,7 +31,7 @@ // * Представитель - Строка, ОпределяемыйТип.СторонаМЧД // * ДоверенностиПоРоли - Строка // * ТолькоДействующие - Булево -// * Полномочия - Массив из Строка - коды полномочий +// * Полномочия - Массив из Строка - коды полномочий. // * СертификатДоверителя - см. МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату // * СертификатПредставителя - см. МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату // * НаДату - Дата - статусы отобразятся на переданную дату. @@ -50,7 +50,7 @@ Возврат Результат; КонецФункции -// Показывает форму создания машиночитаемой доверенности +// Показывает форму создания машиночитаемой доверенности. // // Параметры: // ПараметрыФормы - см. ПараметрыСозданияМЧД @@ -62,11 +62,11 @@ КонецПроцедуры -// Функция - Параметры создания МЧД +// Возвращает параметры предзаполнения формы новой машиночитаемой доверенности для процедуры СоздатьМЧД. // // Возвращаемое значение: // Структура: -// * Полномочия - Массив из Строка - коды полномочий +// * Полномочия - Массив из Строка - коды полномочий, которые должны быть выбраны в форме при открытии. // * Доверитель - ОпределяемыйТип.СторонаМЧД // * Представитель - ОпределяемыйТип.СторонаМЧД // diff --git a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебный/Module.bsl b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебный/Module.bsl index 7896441e1..0ab441ca0 100644 --- a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебный/Module.bsl +++ b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебный/Module.bsl @@ -14,7 +14,7 @@ КонецФункции -// Только для см. ЭлектроннаяПодпись.УстановленныеПодписи. +// Только для см. ЭлектроннаяПодпись.ПодписиОбъекта. // // Параметры: // ПодписанныйОбъект - ОпределяемыйТип.ПодписанныйОбъект @@ -368,6 +368,7 @@ Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеКлассификаторовМЧД; Зависимость.ДоступноВМоделиСервиса = Истина; Зависимость.ДоступноВАвтономномРабочемМесте = Ложь; + Зависимость.ОбращаетсяКВнешнимРесурсам = Истина; КонецПроцедуры @@ -877,6 +878,55 @@ КонецФункции +Функция ДанныеДоверенностиДляПечати(Доверенность, НаДату = Неопределено) Экспорт + + Результат = Новый Структура("ПредставлениеДоверенности, ЛоготипОрганизации"); + + РеквизитыДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Доверенность, + "НомерДоверенности, ДатаВыдачи, ДатаОкончания, Доверители"); + + Доверитель = ""; + Доверители = РеквизитыДоверенности.Доверители.Выгрузить(); + + Если Доверители.Количество() > 0 Тогда + + РеквизитыДоверителя = Доверители[0].ДоверительРеквизиты.Получить(); + ЭтоФизическоеЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо; + Доверитель = Доверители[0].Доверитель; + + Если ЗначениеЗаполнено(Доверитель) Тогда + + Если ОписаниеТиповОрганизации().СодержитТип(ТипЗнч(Доверитель)) + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда + + МодульОрганизацииСервер = ОбщегоНазначения.ОбщийМодуль("ОрганизацииСервер"); + ДополнительныеСведения = МодульОрганизацииСервер.ДополнительныеСведенияОрганизации( + Доверитель, "ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи", НаДату); + Если ДополнительныеСведения.Свойство("ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи") Тогда + Результат.ЛоготипОрганизации = ДополнительныеСведения.ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи; + КонецЕсли; + КонецЕсли; + + Иначе + Если Не ЭтоФизическоеЛицо Тогда + Доверитель = ?(ЗначениеЗаполнено(РеквизитыДоверителя.НаименованиеСокращенное), + РеквизитыДоверителя.НаименованиеСокращенное, РеквизитыДоверителя.НаименованиеПолное); + Иначе + Доверитель = СтрШаблон("%1 %2 %3", РеквизитыДоверителя.Фамилия, РеквизитыДоверителя.Имя, + РеквизитыДоверителя.Отчество); + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Результат.ПредставлениеДоверенности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 действует с %2 по %3, выдана от %4'"), РеквизитыДоверенности.НомерДоверенности, Формат( + РеквизитыДоверенности.ДатаВыдачи, "ДЛФ=D"), Формат(РеквизитыДоверенности.ДатаОкончания, "ДЛФ=D"), Доверитель); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1317,10 +1367,11 @@ ДанныеДоверенности.Колонки.Добавить("СертификатПодписиПодходит", ОбщегоНазначения.ОписаниеТипаЧисло(2)); Если ПроверятьНаличиеИДублиПодписи Тогда - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(ФайлДоверенности); - - Для Каждого Подпись Из УстановленныеПодписи Цикл - Сертификат = Новый СертификатКриптографии(Подпись.Сертификат.Получить()); + ПараметрыПолученияПодписей = ЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(ФайлДоверенности, ПараметрыПолученияПодписей); + Для Каждого ДанныеПодписи Из ПодписиОбъекта Цикл + Сертификат = Новый СертификатКриптографии(ДанныеПодписи.Сертификат); ОтборПоСертификату = МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату(Сертификат, ""); ОтборПоСертификату.Вставить("СертификатПодписиПодходит", 0); Найдено = ДанныеДоверенности.НайтиСтроки(ОтборПоСертификату); @@ -1430,14 +1481,17 @@ ДанныеДоверенности = ДанныеДоверителей(Доверенность); ДанныеДоверенности.Колонки.Добавить("СертификатПодходит", Новый ОписаниеТипов("Булево")); - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(ФайлДоверенности); + + ПараметрыПолученияПодписей = ЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(ФайлДоверенности, ПараметрыПолученияПодписей); Нотариус = ДанныеДоверенности.Найти(Перечисления.ТипыУчастниковМЧД.Нотариус, "ТипУчастника"); ДвоичныеДанные = Неопределено; АдресДанныхДоверенности = Неопределено; - Для Каждого ДанныеПодписи Из УстановленныеПодписи Цикл + Для Каждого ДанныеПодписи Из ПодписиОбъекта Цикл РезультатПроверкиПодписиДоверенности = Новый Структура; РезультатПроверкиПодписиДоверенности.Вставить("ИдентификаторПодписи", ДанныеПодписи.ИдентификаторПодписи); @@ -1450,7 +1504,7 @@ РезультатПроверкиПодписиДоверенности.Вставить("ТекстОшибкиСоответствия", ""); РезультатПроверкиПодписиДоверенности.Вставить("РезультатПроверки"); - Сертификат = ДанныеПодписи.Сертификат.Получить(); + Сертификат = ДанныеПодписи.Сертификат; Если Не ЗначениеЗаполнено(Сертификат) Тогда СвойстваПодписи = ЭлектроннаяПодпись.СвойстваПодписи(ДанныеПодписи.Подпись, Истина); Если СвойстваПодписи.Успех = Ложь Тогда @@ -1581,7 +1635,7 @@ КонецЦикла; - РезультатПроверкиПодписейДоверенности.ЕстьВсеПодписи = УстановленныеПодписи.Количество() > 0 И Ошибки.Количество() = 0; + РезультатПроверкиПодписейДоверенности.ЕстьВсеПодписи = ПодписиОбъекта.Количество() > 0 И Ошибки.Количество() = 0; Если Не РезультатПроверкиПодписейДоверенности.ЕстьВсеПодписи Тогда @@ -1782,16 +1836,23 @@ КонецПроцедуры Функция КонтактнаяИнформацияВJSON(Значение, Тип) - + Если ЗначениеЗаполнено(Значение) И ОбщегоНазначения.ПодсистемаСуществует( "СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + + Если Тип = "Телефон" Тогда + ПараметрыВидаКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); + ИначеЕсли Тип = "АдресЭлектроннойПочты" Тогда + ПараметрыВидаКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыАдресаЭлектроннойПочты(); + КонецЕсли; + Возврат МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( - Значение, Перечисления["ТипыКонтактнойИнформации"][Тип]); + Значение, ПараметрыВидаКонтактнойИнформации.Тип); КонецЕсли; Возврат Неопределено; - + КонецФункции Функция ПроверитьСведенияОбОрганизации(Назначение, Форма, ПолеСообщения = "", ШаблонСообщения = "%1:", СведенияОбОрганизации = Неопределено) Экспорт @@ -2989,6 +3050,12 @@ КонецФункции +Функция ОшибкаЗапретаДоступаКИнтернетСервисам(ЗаголовокОшибки) + ПараметрыОшибкиМЧДРР = ПараметрыОшибкиМЧДРР(ЗаголовокОшибки, + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗапрещенДоступКИнтернетСервисамТекстСообщения()); + Возврат ПолучитьИЗаписатьОшибкуМЧДРР(ПараметрыОшибкиМЧДРР); +КонецФункции + Функция ПараметрыОшибкиМЧДРР(ЗаголовокОшибки, ТекстОшибки) Экспорт Результат = Новый Структура; Результат.Вставить("ЗаголовокОшибки", ЗаголовокОшибки); @@ -3077,7 +3144,8 @@ ОшибкаПоКлассификатору = Новый Структура("Причина, Решение, СпособУстранения, Ссылка"); КонецЕсли; - ОшибкаПоКлассификатору.Причина = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ОшибкаПоКлассификатору.Причина, ПараметрыТекстаОшибки); + ОшибкаПоКлассификатору.Причина = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку( + ОшибкаПоКлассификатору.Причина, ПараметрыТекстаОшибки); ОшибкаПоКлассификатору.Вставить("ТекстОшибки", ТекстОшибки); ОшибкаПоКлассификатору.Вставить("ЗаголовокОшибки", ЗаголовокОшибки); @@ -3088,7 +3156,7 @@ ДополнительныеФайлы = Новый Массив; КонецЕсли; - ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Ошибка по классификатору'"), "xml"); + ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Сообщение классификатора'"), "xml"); ОшибкаПоКлассификатору.Вставить("ДополнительныеФайлы", ДополнительныеФайлы); Возврат ОшибкаПоКлассификатору; @@ -3127,7 +3195,9 @@ // * Таймаут - Число - определяет время ожидания осуществляемого соединения и операций, в секундах. // Функция СоединениеССерверомИнтернета(URL, ПараметрыСоединения = Неопределено) Экспорт - + + ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам(Истина); + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); Схема = ?(ЗначениеЗаполнено(СтруктураURI.Схема), СтруктураURI.Схема, "http"); Прокси = ПолучениеФайловИзИнтернета.ПолучитьПрокси(Схема); @@ -3241,9 +3311,11 @@ АдресРесурса = Запрос.АдресРесурса; Заголовки = Запрос.Заголовки; УбратьИнформациюОДоступе(АдресРесурса, Заголовки); - RestЗапрос = RestПредставлениеЗапроса(Запрос, СоединениеHTTP); - ДанныеФайла = ПолучитьДвоичныеДанныеИзСтроки(RestЗапрос); - ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Запрос http'"), "txt"); + Если СоединениеHTTP <> Неопределено Тогда + RestЗапрос = RestПредставлениеЗапроса(Запрос, СоединениеHTTP); + ДанныеФайла = ПолучитьДвоичныеДанныеИзСтроки(RestЗапрос); + ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Запрос http'"), "txt"); + КонецЕсли; КонецЕсли; Если Ответ <> Неопределено Тогда @@ -3416,7 +3488,7 @@ И Выборка.ТипТранзакции = Перечисления.ТипыТранзакцийСРеестромМЧД.Регистрация И Выборка.ТехническийСтатус = Перечисления.ТехническиеСтатусыМЧД.Регистрация Тогда ОписаниеСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru=': Ожидает регистрации в ИР «Доверенность»'"), "ПоясняющийТекст"); + НСтр("ru=': Ожидает регистрации в информационном ресурсе ""Доверенность"" ФНС России'"), "ПоясняющийТекст"); ИначеЕсли Выборка.СтатусТранзакции = Перечисления.СтатусыТранзакцииСРеестромМЧД.Успешно И Выборка.ТипТранзакции = Перечисления.ТипыТранзакцийСРеестромМЧД.Регистрация Тогда ОписаниеСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -3604,6 +3676,12 @@ Результат.Вставить("ТекстОтвета", ""); Результат.Вставить("Ошибка"); + Если Не ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам() Тогда + ЗаголовокОшибки = ?(ЦельАвторизации = "", НСтр("ru='Не удается авторизоваться на сервере Распределенного реестра ФНС России'"), ЦельАвторизации); + Результат.Ошибка = ОшибкаЗапретаДоступаКИнтернетСервисам(ЗаголовокОшибки); + Возврат Результат; + КонецЕсли; + РесурсНаСервере = СвойстваСервераМЧДРР.РесурсКорняAPI + ?(СвойстваСервераМЧДРР.ИспользоватьРасширенияAPI, "/token", "/vst-oauth2/oauth/token"); ПараметрыРесурсаНаСервере = ""; @@ -3611,7 +3689,7 @@ ТикетАутентификацииИлиДанныеПользователя = ТикетАутентификацииИлиДанныеПользователяНаПорталеПоддержки(); Если ТикетАутентификацииИлиДанныеПользователя = Неопределено Тогда - ЗаголовокОшибки = ?(ЦельАвторизации = "", НСтр("ru='Не удается авторизоваться на сайте интернет поддержки'"), ЦельАвторизации); + ЗаголовокОшибки = ?(ЦельАвторизации = "", НСтр("ru='Не удается авторизоваться на сайте интернет-поддержки'"), ЦельАвторизации); ПараметрыОшибкиМЧДРР = ПараметрыОшибкиМЧДРР(ЗаголовокОшибки, НСтр("ru='Не удается получить тикет аутентификации или данные пользователя.'")); Результат.Ошибка = ПолучитьИЗаписатьОшибкуМЧДРР(ПараметрыОшибкиМЧДРР); Возврат Результат; @@ -3734,7 +3812,7 @@ ЗаголовокОшибки = НСтр("ru='Не удалось получить номер доверенности'"); - Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда + Если Не ЗначениеЗаполнено(ТокенДоступа) Тогда РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); Если РезультатАвторизации.Ошибка <> Неопределено Тогда Результат.Ошибка = РезультатАвторизации.Ошибка; @@ -3747,7 +3825,6 @@ ТокенДоступа = РезультатАвторизации.ТокенДоступа; КонецЕсли; - РесурсНаСервере = СвойстваСервераМЧДРР.РесурсКорняAPI + ?(СвойстваСервераМЧДРР.ИспользоватьРасширенияAPI, "/number", "/poar-webapp/integration/poa/generate-number"); @@ -3855,7 +3932,7 @@ ЗаголовокОшибки = НСтр("ru='Не удалось зарегистрировать доверенность'"); - Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда + Если Не ЗначениеЗаполнено(ТокенДоступа) Тогда РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); Если РезультатАвторизации.Ошибка <> Неопределено Тогда Результат.Ошибка = РезультатАвторизации.Ошибка; @@ -4007,7 +4084,7 @@ ЗаголовокОшибки = ?(ЦельПолучения = "", НСтр("ru='Не удалось обновить статус транзакции'"), ЦельПолучения); - Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда + Если Не ЗначениеЗаполнено(ТокенДоступа) Тогда РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); Если РезультатАвторизации.Ошибка <> Неопределено Тогда Результат.Ошибка = РезультатАвторизации.Ошибка; @@ -4124,7 +4201,7 @@ ЗаголовокОшибки = ?(ЦельПолучения = "", НСтр("ru='Не удалось получить частичные данные доверенности'"), ЦельПолучения); - Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда + Если Не ЗначениеЗаполнено(ТокенДоступа) Тогда РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); Если РезультатАвторизации.Ошибка <> Неопределено Тогда Результат.Ошибка = РезультатАвторизации.Ошибка; @@ -4257,7 +4334,7 @@ ЗаголовокОшибки = ?(ЦельПолучения = "", НСтр("ru='Не удалось загрузить доверенность'"), ЦельПолучения); - Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда + Если Не ЗначениеЗаполнено(ТокенДоступа) Тогда РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); Если РезультатАвторизации.Ошибка <> Неопределено Тогда Результат.Ошибка = РезультатАвторизации.Ошибка; @@ -4406,6 +4483,11 @@ ЦепочкаДоверенностей.Вставить("ЗагруженныеФайлы", Новый Массив); ЦепочкаДоверенностей.Вставить("Ошибка"); + Если Не ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам() Тогда + ЦепочкаДоверенностей.Ошибка = ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗапрещенДоступКИнтернетСервисамТекстСообщения(); + Возврат ЦепочкаДоверенностей; + КонецЕсли; + ПолныеДанныеДоверенностиМЧДРР = ПолныеДанныеДоверенностиМЧДРР(НомерДоверенности, ИННДоверителя, ИННПредставителя, ТокенДоступа); ЦепочкаДоверенностей.Ошибка = ПолныеДанныеДоверенностиМЧДРР.Ошибка; @@ -4517,13 +4599,6 @@ ЗаголовокОшибки = НСтр("ru='Не удалось отменить доверенность'"); - ДанныеВыгрузки = ?(ТипЗнч(ДанныеИлиАдресВыгрузки) = Тип("Строка") - И ЭтоАдресВременногоХранилища(ДанныеИлиАдресВыгрузки), ПолучитьИзВременногоХранилища(ДанныеИлиАдресВыгрузки), - ДанныеИлиАдресВыгрузки); - ДанныеПодписи = ?(ТипЗнч(ДанныеИлиАдресПодписи) = Тип("Строка") - И ЭтоАдресВременногоХранилища(ДанныеИлиАдресПодписи), ПолучитьИзВременногоХранилища(ДанныеИлиАдресПодписи), - ДанныеИлиАдресПодписи); - СвойстваСервераМЧДРР = СвойстваСервераМЧДРР(); Результат = Новый Структура; @@ -4531,8 +4606,8 @@ Результат.Вставить("ИдентификаторТранзакции", ""); Результат.Вставить("ТекстОтвета", ""); Результат.Вставить("Ошибка", ""); - - Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда + + Если Не ЗначениеЗаполнено(ТокенДоступа) Тогда РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); @@ -4543,7 +4618,14 @@ ТокенДоступа = РезультатАвторизации.ТокенДоступа; КонецЕсли; - + + ДанныеВыгрузки = ?(ТипЗнч(ДанныеИлиАдресВыгрузки) = Тип("Строка") + И ЭтоАдресВременногоХранилища(ДанныеИлиАдресВыгрузки), ПолучитьИзВременногоХранилища(ДанныеИлиАдресВыгрузки), + ДанныеИлиАдресВыгрузки); + ДанныеПодписи = ?(ТипЗнч(ДанныеИлиАдресПодписи) = Тип("Строка") + И ЭтоАдресВременногоХранилища(ДанныеИлиАдресПодписи), ПолучитьИзВременногоХранилища(ДанныеИлиАдресПодписи), + ДанныеИлиАдресПодписи); + РесурсНаСервере = СвойстваСервераМЧДРР.РесурсКорняAPI + ?(СвойстваСервераМЧДРР.ИспользоватьРасширенияAPI, "/poacancel", "/poar-webapp/integration/poa/revoke"); diff --git a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебныйКлиент/Module.bsl index d6ada8df5..9b1456224 100644 --- a/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/МашиночитаемыеДоверенностиФНССлужебныйКлиент/Module.bsl @@ -217,21 +217,49 @@ Если РезультатДиалога = Неопределено Тогда Возврат; КонецЕсли; - + ДляНалоговыхОрганов = РезультатДиалога.Значение; ФайлыДоверенностей = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ФайлыДоверенностей(Доверенности, ДляНалоговыхОрганов); - Если ЗначениеЗаполнено(ФайлыДоверенностей) Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ПриСохраненииВФайлы", ЭтотОбъект); - Если ФайлыДоверенностей.Количество() = 1 Тогда - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); - ПараметрыСохранения.Диалог.Фильтр = "Все файлы (*.*)|*.*"; - ФайловаяСистемаКлиент.СохранитьФайл(ОписаниеОповещения, ФайлыДоверенностей[0].Хранение, ФайлыДоверенностей[0].Имя, ПараметрыСохранения); - Иначе - ФайловаяСистемаКлиент.СохранитьФайлы(ОписаниеОповещения, ФайлыДоверенностей); + Если Не ЗначениеЗаполнено(ФайлыДоверенностей) Тогда + Возврат; + КонецЕсли; + + ПродолжитьВыгрузкуДоверенностиВФайлПроверкаУстановкиКомпонент(ФайлыДоверенностей); + +КонецПроцедуры + +Асинх Процедура ПродолжитьВыгрузкуДоверенностиВФайлПроверкаУстановкиКомпонент(ФайлыДоверенностей, ПовторныйВызов = Ложь) + + Если Не ПовторныйВызов Тогда + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения("ПродолжитьВыгрузкуДоверенностиВФайлПовторноПослеУстановкиКомпонент", + ЭтотОбъект, ФайлыДоверенностей); + МодульЭлектроннаяПодписьСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиент"); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать МодульЭлектроннаяПодписьСлужебныйКлиент.ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; КонецЕсли; КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("ПриСохраненииВФайлы", ЭтотОбъект); + Если ФайлыДоверенностей.Количество() = 1 Тогда + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Диалог.Фильтр = "Все файлы (*.*)|*.*"; + ФайловаяСистемаКлиент.СохранитьФайл(ОписаниеОповещения, ФайлыДоверенностей[0].Хранение, ФайлыДоверенностей[0].Имя, ПараметрыСохранения); + Иначе + ФайловаяСистемаКлиент.СохранитьФайлы(ОписаниеОповещения, ФайлыДоверенностей); + КонецЕсли; + +КонецПроцедуры + +// Повторный вызов процедуры ПродолжитьВыгрузкуДоверенностиВФайлПроверкаУстановкиКомпонент после установки компонент. +Процедура ПродолжитьВыгрузкуДоверенностиВФайлПовторноПослеУстановкиКомпонент(Результат, ФайлыДоверенностей) Экспорт + + Если Результат = Истина Тогда + ПродолжитьВыгрузкуДоверенностиВФайлПроверкаУстановкиКомпонент(ФайлыДоверенностей, Истина); + КонецЕсли; + КонецПроцедуры Процедура ПриСохраненииВФайлы(ПолученныеФайлы, ДополнительныеПараметры) Экспорт @@ -274,9 +302,6 @@ ПараметрыФормы.ОписаниеОшибки = СтрШаблон("%1: %2", Контекст.ЗаголовокПредупреждения, Ошибка.ТекстОшибки); ПараметрыФормы.ПоказатьТребуетсяПомощь = Истина; ПараметрыФормы.ПоказатьИнструкцию = Истина; - ПараметрыФормы.ИнформацияДляПоддержки = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - НСтр("ru = 'Обратитесь в службу поддержки фирмы ""1С""'"), - "ТехническаяИнформация"); ПараметрыФормы.ДополнительныеДанные.Вставить("ДополнительныеДанныеПроверок", Ошибка); @@ -289,7 +314,7 @@ Функция КонтекстДляОбработкиОшибкиРР() Экспорт Контекст = Новый Структура; Контекст.Вставить("ОповещениеОЗавершении"); - Контекст.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Ошибка при работе с распределенный реестром доверенностей'")); + Контекст.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Сбой в распределенном реестре доверенностей'")); Контекст.Вставить("Форма"); Возврат Контекст; КонецФункции diff --git a/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl b/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl index c39aa5fa9..88f2a83e6 100644 --- a/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьКлиент/Module.bsl @@ -37,8 +37,12 @@ Представления = Новый Структура(); Представления.Вставить(ИмяРеквизита, Объект[ИмяРеквизита]); - Представления.Вставить(ИмяРеквизита + "Язык1", Объект[ИмяРеквизита + "Язык1"]); - Представления.Вставить(ИмяРеквизита + "Язык2", Объект[ИмяРеквизита + "Язык2"]); + + КоличествоДополнительныхЯзыков = СтандартныеПодсистемыКлиент.ПараметрКлиента("КоличествоДополнительныхЯзыков"); + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяСуффиксаЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Представления.Вставить(ИмяРеквизита + ИмяСуффиксаЯзыка, Объект[ИмяРеквизита + ИмяСуффиксаЯзыка]); + КонецЦикла; ПараметрыФормы.Вставить("ЗначенияРеквизитов", Представления); @@ -119,4 +123,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl b/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl index 85d8069a8..c7bc01f15 100644 --- a/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьКлиентСервер/Module.bsl @@ -8,6 +8,26 @@ #Область ПрограммныйИнтерфейс +// Возражает суффикс языка с порядковым номером языка. Например, "Язык1". +// +// Параметры: +// ПорядковыйНомерЯзыка - Число - порядковый номер языка в приложении. +// +// Возвращаемое значение: +// Строка - суффикс языка с порядковым номером языка. +// +Функция СуффиксЯзыка(ПорядковыйНомерЯзыка = Неопределено) Экспорт + + ИмяСуффикса = "Язык"; + + Если ПорядковыйНомерЯзыка = Неопределено Тогда + Возврат ИмяСуффикса; + КонецЕсли; + + Возврат ИмяСуффикса + Формат(ПорядковыйНомерЯзыка,"ЧГ=0"); + +КонецФункции + // Вызывается при получении представления объекта или ссылки в зависимости от языка, // используемого при работе пользователя. // @@ -65,7 +85,8 @@ Запрос.УстановитьПараметр("Язык", ТекущийЯзык().КодЯзыка); РезультатЗапроса = Запрос.Выполнить(); - Если Не РезультатЗапроса.Пустой() Тогда + Если Не РезультатЗапроса.Пустой() + И Не ПустаяСтрока(РезультатЗапроса.Выгрузить()[0].Наименование) Тогда СтандартнаяОбработка = Ложь; Представление = РезультатЗапроса.Выгрузить()[0].Наименование; КонецЕсли; @@ -100,16 +121,16 @@ Поля.Добавить(ИмяРеквизита); Поля.Добавить("Ссылка"); - Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() Тогда - Поля.Добавить(ИмяРеквизита + "Язык1"); - КонецЕсли; - - Если МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда - Поля.Добавить(ИмяРеквизита +"Язык2"); - КонецЕсли; + СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбИспользуемыхЯзыках(); + Для Каждого ДополнительныйЯзыкИспользуется Из СведенияОбЯзыках Цикл + Если ДополнительныйЯзыкИспользуется.Значение Тогда + Поля.Добавить(ИмяРеквизита + ДополнительныйЯзыкИспользуется.Ключ); + КонецЕсли; + КонецЦикла; #КонецЕсли КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + diff --git a/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl b/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl index 3ec1f274b..bf770bb8d 100644 --- a/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьПовтИсп/Module.bsl @@ -24,10 +24,11 @@ Возврат Ложь; КонецЕсли; - Если МультиязычностьСервер.ИспользуетсяПервыйДополнительныйЯзык() - Или МультиязычностьСервер.ИспользуетсяВторойДополнительныйЯзык() Тогда - Возврат Ложь; - КонецЕсли; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + Если ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; Возврат Истина; @@ -66,42 +67,92 @@ КонецФункции - -Функция СведенияОбЯзыках() Экспорт +Функция СведенияОЯзыках() Экспорт Результат = Новый Структура; + КоличествоДополнительныхЯзыков = КоличествоДополнительныхЯзыков(); + Результат.Вставить("Язык0", ОбщегоНазначения.КодОсновногоЯзыка()); - Результат.Вставить("Язык1", МультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы()); - Результат.Вставить("Язык2", МультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы()); - Результат.Вставить("КоличествоДополнительныхЯзыков", 2); + Результат.Вставить("КоличествоДополнительныхЯзыков", КоличествоДополнительныхЯзыков); Результат.Вставить("ОсновнойЯзык", ОбщегоНазначения.КодОсновногоЯзыка()); + Используется = Новый Структура; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяСуффиксаЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + КодЯзыка = МультиязычностьСервер.КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка); + Результат.Вставить(ИмяСуффиксаЯзыка, КодЯзыка); + + Используется.Вставить(ИмяСуффиксаЯзыка, + ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) И ЗначениеЗаполнено(КодЯзыка)); + КонецЦикла; + Результат.Вставить("Используется", Новый ФиксированнаяСтруктура(Используется)); + Возврат Новый ФиксированнаяСтруктура(Результат); КонецФункции -Функция СуффиксЯзыка(Язык) Экспорт +Функция СведенияОбИспользуемыхЯзыках() Экспорт - Если СтрСравнить(Язык, Константы.ДополнительныйЯзык1.Получить()) = 0 И ИспользуетсяДополнительныйЯзык("Язык1") Тогда - Возврат "Язык1"; - КонецЕсли; + Используется = Новый Структура; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + ИмяСуффиксаЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + КодЯзыка = МультиязычностьСервер.КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка); + + Используется.Вставить(ИмяСуффиксаЯзыка, + ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) И ЗначениеЗаполнено(КодЯзыка)); + КонецЦикла; - Если СтрСравнить(Язык, Константы.ДополнительныйЯзык2.Получить()) = 0 И ИспользуетсяДополнительныйЯзык("Язык2") Тогда - Возврат "Язык2"; - КонецЕсли; + Возврат Новый ФиксированнаяСтруктура(Используется); + +КонецФункции + +Функция СуффиксЯзыкаПоКодуЯзыка(Язык) Экспорт + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + + ИмяКонстанты = МультиязычностьСервер.ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + Если СтрСравнить(Язык, Константы[ИмяКонстанты].Получить()) = 0 + И ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) Тогда + Возврат МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + КонецЕсли; + + КонецЦикла; Возврат ""; КонецФункции -Функция ИспользуетсяДополнительныйЯзык(СуффиксЯзыка) Экспорт +Функция КоличествоДополнительныхЯзыков() Экспорт - ИмяКонстанты = ?(СуффиксЯзыка <> "Язык1", - СтрЗаменить("ИспользоватьДополнительныйЯзык1", "Язык1", СуффиксЯзыка), - "ИспользоватьДополнительныйЯзык1"); + ПорядковыйНомерЯзыка = 1; + КоличествоЯзыков = Неопределено; - Возврат Константы[ИмяКонстанты].Получить() = Истина; + Пока КоличествоЯзыков = Неопределено Цикл + + Если Метаданные.Константы.Найти(МультиязычностьСервер.ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка)) = Неопределено + Или ПорядковыйНомерЯзыка = 1000 Тогда + КоличествоЯзыков = ПорядковыйНомерЯзыка - 1; + Прервать; + КонецЕсли; + + ПорядковыйНомерЯзыка = ПорядковыйНомерЯзыка + 1; + + КонецЦикла; + + Возврат КоличествоЯзыков; + +КонецФункции + +Функция ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) Экспорт + + ИмяКонстантыЯзыка = МультиязычностьСервер.ИмяФункциональнойОпции(ПорядковыйНомерЯзыка); + Если Метаданные.Константы.Найти(ИмяКонстантыЯзыка) <> Неопределено + И Константы[ИмяКонстантыЯзыка].Получить() = Истина Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; КонецФункции @@ -134,10 +185,9 @@ РезультатЗапроса = Запрос.Выполнить(); Для каждого Колонка Из РезультатЗапроса.Колонки Цикл - Если (СтрЗаканчиваетсяНа(Колонка.Имя, МультиязычностьСервер.СуффиксПервогоЯзыка()) - Или СтрЗаканчиваетсяНа(Колонка.Имя, МультиязычностьСервер.СуффиксВторогоЯзыка())) - И Не СтрНачинаетсяС(Колонка.Имя, "Удалить")Тогда - Возврат Истина; + СведенияОРеквизите = МультиязычностьСервер.СведенияОРеквизите(Колонка.Имя); + Если СведенияОРеквизите.Мультиязычный И Не СведенияОРеквизите.Удаленный Тогда + Возврат Истина; КонецЕсли; КонецЦикла; @@ -169,5 +219,4 @@ КонецФункции -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl b/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl index d9fcd8859..08392f895 100644 --- a/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl +++ b/SSL/src/CommonModules/МультиязычностьСервер/Module.bsl @@ -20,7 +20,7 @@ // Пример: // // МультиязычностьСервер.ЗаполнитьМультиязычныйРеквизит(Элемент, "Наименование", "ru = 'Сообщение на русском'; en = -// 'English message'", КодыЯзыков); +// 'English message'", КодыЯзыков); // Процедура ЗаполнитьМультиязычныйРеквизит(Элемент, ИмяРеквизита, ИсходнаяСтрока, КодыЯзыков = Неопределено) Экспорт @@ -178,13 +178,12 @@ Продолжить; КонецЕсли; - Если ПустаяСтрока(ТекущийОбъект[Реквизит.Ключ + "Язык1"]) Тогда - ТекущийОбъект[Реквизит.Ключ + "Язык1"] = ЗначениеРеквизита; - КонецЕсли; - - Если ПустаяСтрока(ТекущийОбъект[Реквизит.Ключ + "Язык2"]) Тогда - ТекущийОбъект[Реквизит.Ключ + "Язык2"] = ЗначениеРеквизита; - КонецЕсли; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + ИмяСуффиксаЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Если ПустаяСтрока(ТекущийОбъект[Реквизит.Ключ + ИмяСуффиксаЯзыка]) Тогда + ТекущийОбъект[Реквизит.Ключ + ИмяСуффиксаЯзыка] = ЗначениеРеквизита; + КонецЕсли; + КонецЦикла; КонецЦикла; @@ -334,7 +333,12 @@ Представление.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); КонецЕсли; - Представление[ИмяРеквизита] = Объект[ИмяРеквизита]; + + Если ИменаЛокализуемыхРеквизитов.Получить(ИмяРеквизита) <> Неопределено Тогда + Представление[ИмяРеквизита] = Объект[ИмяРеквизита + СуффиксТекущегоЯзыка]; + Иначе + Представление[ИмяРеквизита] = Объект[ИмяРеквизита]; + КонецЕсли; Отбор = Новый Структура(); Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); @@ -378,21 +382,20 @@ Поля = Новый Массив; НаименованияЛокализуемыхРеквизитов = НаименованияЛокализуемыхРеквизитовОбъекта(ОбъектМетаданных); + СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбИспользуемыхЯзыках(); + Шаблон = "Таблица.%1%2 ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""; + Для каждого Поле Из ПоляВводаПоСтроке Цикл + Поля.Добавить(СтрШаблон(Шаблон, Поле.Имя, "")); + Если НаименованияЛокализуемыхРеквизитов.Получить(Поле.Имя) <> Неопределено Тогда - Поля.Добавить("Таблица." + Поле.Имя + " ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""); + Для Каждого ИспользуетсяДополнительныйЯзык Из СведенияОбЯзыках Цикл + Если ИспользуетсяДополнительныйЯзык.Значение Тогда + Поля.Добавить(СтрШаблон(Шаблон, Поле.Имя, ИспользуетсяДополнительныйЯзык.Ключ)); + КонецЕсли; + КонецЦикла; - Если ИспользуетсяПервыйДополнительныйЯзык() Тогда - Поля.Добавить("Таблица." + Поле.Имя + "Язык1 ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""); - КонецЕсли; - - Если ИспользуетсяВторойДополнительныйЯзык() Тогда - Поля.Добавить("Таблица." + Поле.Имя + "Язык2 ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""); - КонецЕсли; - - Иначе - Поля.Добавить("Таблица." + Поле.Имя + " ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"""); КонецЕсли; КонецЦикла; @@ -454,7 +457,6 @@ КонецФункции - // По коду языка возвращает суффикс дополнительного языка. // // Параметры: @@ -470,22 +472,22 @@ Возврат СуффиксТекущегоЯзыка(); КонецЕсли; - Возврат МультиязычностьПовтИсп.СуффиксЯзыка(КодЯзыка); + Возврат МультиязычностьПовтИсп.СуффиксЯзыкаПоКодуЯзыка(КодЯзыка); КонецФункции // Определяет используется ли в приложении переданный дополнительный язык. // // Параметры: -// СуффиксЯзыка - Строка - суффикс дополнительного языка. Например, "Язык1" +// ПорядковыйНомерЯзыка - Число - номер языка в суффиксе дополнительного языка. Например, 1 для "Язык1". // // Возвращаемое значение: // Булево - если, Истина, то дополнительный язык включен в приложении и используется. // -Функция ИспользуетсяДополнительныйЯзык(СуффиксЯзыка) Экспорт - - Возврат МультиязычностьПовтИсп.ИспользуетсяДополнительныйЯзык(СуффиксЯзыка); - +Функция ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) Экспорт + + Возврат МультиязычностьПовтИсп.ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка); + КонецФункции // Возвращает имена реквизитов с учетом переданного кода языка. @@ -513,6 +515,32 @@ КонецФункции +// Возвращает количество дополнительных языков. +// +// Возвращаемое значение: +// Число - количество дополнительных языков в конфигурации +// +Функция КоличествоДополнительныхЯзыков() Экспорт + Возврат МультиязычностьПовтИсп.КоличествоДополнительныхЯзыков(); +КонецФункции + +// Возвращает обобщенные сведения о языках. +// Структура содержит свойства вида "Язык + номер языка" (например, Язык1) с кодами языков. +// Количество таких свойств соответствует числу дополнительных языков. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * Язык0 - Строка - код основного языка. +// * КоличествоДополнительныхЯзыков - Число - количество дополнительных языков в конфигурации +// * ОсновнойЯзык - Строка - код основного языка. +// * Используется - ФиксированнаяСтруктура: +// ** Ключ - Строка - суффикса языка +// ** Значение - Булево - Истина, если язык включен в приложении. +// +Функция СведенияОЯзыках() Экспорт + Возврат МультиязычностьПовтИсп.СведенияОЯзыках(); +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -528,17 +556,21 @@ ДанныеИзмененияМультиязычныхРеквизитов = ДанныеДляИзмененияМультиязычныхРеквизитов(); Если ДанныеИзмененияМультиязычныхРеквизитов <> Неопределено Тогда - Если ДанныеИзмененияМультиязычныхРеквизитов.ОсновнойЯзыкИзменен + Если ДанныеИзмененияМультиязычныхРеквизитов.ОсновнойЯзыкИзменен Или Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда Возврат Истина; КонецЕсли; - Если (ДанныеИзмененияМультиязычныхРеквизитов.ПервыйДополнительныйЯзыкИзменен - И ТекущийЯзык().КодЯзыка = КодПервогоДополнительногоЯзыкаИнформационнойБазы()) - Или (ДанныеИзмененияМультиязычныхРеквизитов.ВторойДополнительныйЯзыкИзменен - И ТекущийЯзык().КодЯзыка = КодВторогоДополнительногоЯзыкаИнформационнойБазы()) Тогда - Возврат Истина; - КонецЕсли; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + ИмяКонстантыЯзыка = ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + СведенияОбЯзыке = ДанныеИзмененияМультиязычныхРеквизитов.Изменения[ИмяКонстантыЯзыка]; + + Если СведенияОбЯзыке.Значение + И ТекущийЯзык().КодЯзыка = КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка) Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; КонецЕсли; @@ -584,9 +616,6 @@ КонецФункции -Функция СведенияОбЯзыках() Экспорт - Возврат МультиязычностьПовтИсп.СведенияОбЯзыках(); -КонецФункции Функция ОбъектСодержитТЧПредставления(СсылкаИлиПолноеИмяМетаданных, ИмяРеквизита = "") Экспорт Возврат МультиязычностьПовтИсп.ОбъектСодержитТЧПредставления(СсылкаИлиПолноеИмяМетаданных, ИмяРеквизита); @@ -594,14 +623,35 @@ Функция ИмяРеквизитаБезСуффиксаЯзык(Знач ИмяРеквизита) Экспорт - Если ЭтоЛокализуемыйРеквизит(ИмяРеквизита) Тогда - Возврат Лев(ИмяРеквизита, СтрДлина(ИмяРеквизита) - ДлинаСуффиксаЯзыка()); + Шаблон = МультиязычностьКлиентСервер.СуффиксЯзыка() + "\d+"; + + РезультатВыражения = СтрНайтиПоРегулярномуВыражению(ИмяРеквизита, Шаблон, НаправлениеПоиска.СКонца,, Истина); + Если РезультатВыражения.НачальнаяПозиция > 0 Тогда + Возврат Лев(ИмяРеквизита, РезультатВыражения.НачальнаяПозиция - 1); КонецЕсли; Возврат ИмяРеквизита; КонецФункции +Функция СведенияОРеквизите(Знач ИмяРеквизита) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Мультиязычный", Ложь); + Результат.Вставить("ИмяРеквизитаБезСуффиксаЯзык", ИмяРеквизита); + Результат.Вставить("Удаленный", СтрНачинаетсяС(ИмяРеквизита, "Удалить")); + + Шаблон = МультиязычностьКлиентСервер.СуффиксЯзыка() + "\d+"; + РезультатВыражения = СтрНайтиПоРегулярномуВыражению(ИмяРеквизита, Шаблон, НаправлениеПоиска.СКонца,, Истина); + Если РезультатВыражения.НачальнаяПозиция > 0 Тогда + Результат.Мультиязычный = Истина; + Результат.ИмяРеквизитаБезСуффиксаЯзык = Лев(ИмяРеквизита, РезультатВыражения.НачальнаяПозиция - 1); + КонецЕсли; + + Возврат Результат; + +КонецФункции + Функция ПризнакЛокализуемогоРеквизита() Экспорт Возврат "Локализуемый"; КонецФункции @@ -670,7 +720,7 @@ КонецЕсли; Языки = СтандартныеПодсистемыСервер.ЯзыкиКонфигурации(); - СведенияОбЯзыках = СведенияОбЯзыках(); + СведенияОбЯзыках = СведенияОЯзыках(); ПоддерживаетсяИерархия = НаборДанныхДляЗаполнения.ПоддерживаетсяИерархия; Если НаборДанныхДляЗаполнения.МультиязычныеСтрокиВРеквизитах Тогда @@ -707,7 +757,7 @@ Процедура УдалитьМультиязычныеРеквизиты(ОтредактированныеРеквизиты) Экспорт - СведенияОбЯзыках = СведенияОбЯзыках(); + СведенияОбЯзыках = СведенияОЯзыках(); Позиция = ОтредактированныеРеквизиты.Количество() - 1; @@ -767,7 +817,8 @@ Для каждого ОписаниеРеквизита Из ЛокализуемыеРеквизиты Цикл - ИмяОсновногоРеквизита = Лев(ОписаниеРеквизита.Ключ, СтрДлина(ОписаниеРеквизита.Ключ) - ДлинаСуффиксаЯзыка()); + ИмяОсновногоРеквизита = ИмяРеквизитаБезСуффиксаЯзык(ОписаниеРеквизита.Ключ); + ПолноеИмя = ИсточникЗапроса.Источник.Псевдоним + "."+ ИмяОсновногоРеквизита; Для Индекс = 0 По ОператорЗапроса.ВыбираемыеПоля.Количество() - 1 Цикл @@ -820,18 +871,6 @@ КонецПроцедуры -Функция ИспользуетсяПервыйДополнительныйЯзык() Экспорт - - Возврат ИспользуетсяДополнительныйЯзык("Язык1"); - -КонецФункции - -Функция ИспользуетсяВторойДополнительныйЯзык() Экспорт - - Возврат ИспользуетсяДополнительныйЯзык("Язык2"); - -КонецФункции - // Обновление данных Процедура ОбработатьОбщиеДанныеДляПереходаНаНовуюВерсию() Экспорт @@ -965,8 +1004,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Начальное заполнение элементов данными. +#Область НачальноеЗаполнениеЭлементовДанными // Параметры: // СсылкаНаОбъект - СправочникСсылка @@ -974,8 +1012,8 @@ // НастройкиОбновления - Структура: // * ПредопределенныеДанные - ТаблицаЗначений // * ОсновнойЯзык - Строка -// * КодЯзыка2 - Строка -// * КодЯзыка1 - Строка +// * Язык2 - Строка +// * Язык1 - Строка // * ЛокализуемыеРеквизитыОбъекта - см. НастройкиОбновлениеПредопределенныхДанных // Процедура ОбновитьМультиязычныеСтрокиПредопределенногоЭлемента(СсылкаНаОбъект, НастройкиОбновления) Экспорт @@ -1012,12 +1050,12 @@ Имя = ЛокализуемыйРеквизитОбъекта.Ключ; Объект[Имя] = Элемент[ИмяЛокализуемогоРеквизита(Имя, НастройкиОбновления.ОсновнойЯзык)]; - Если ИспользуетсяПервыйДополнительныйЯзык() И ЗначениеЗаполнено(НастройкиОбновления.КодЯзыка1) Тогда - Объект[Имя + "Язык1"] = Элемент[ИмяЛокализуемогоРеквизита(Имя, НастройкиОбновления.КодЯзыка1)]; - КонецЕсли; - Если ИспользуетсяВторойДополнительныйЯзык() И ЗначениеЗаполнено(НастройкиОбновления.КодЯзыка2) Тогда - Объект[Имя + "Язык2"] = Элемент[ИмяЛокализуемогоРеквизита(Имя, НастройкиОбновления.КодЯзыка2)]; - КонецЕсли; + СведенияОбЯзыках = СведенияОЯзыках(); + Для Каждого ЯзыкИспользуется Из СведенияОбЯзыках.Используется Цикл + Если ЯзыкИспользуется.Значение Тогда + Объект[Имя + ЯзыкИспользуется.Ключ] = Элемент[ИмяЛокализуемогоРеквизита(Имя, ЯзыкИспользуется.Ключ)]; + КонецЕсли; + КонецЦикла; КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Объект); @@ -1039,8 +1077,8 @@ // * ЛокализуемыеРеквизитыОбъекта - Соответствие из КлючИЗначение: // ** Ключ - Строка // ** Значение - Булево -// * КодЯзыка1 - Строка -// * КодЯзыка2 - Строка +// * Язык1 - Строка +// * Язык2 - Строка // * ОсновнойЯзык - Строка // * ИмяОбъектМетаданных - Строка // * ПредопределенныеДанные - ТаблицаЗначений @@ -1049,12 +1087,16 @@ Результат = Новый Структура; Результат.Вставить("ЛокализуемыеРеквизитыОбъекта", Новый Соответствие); - Результат.Вставить("КодЯзыка1", КодПервогоДополнительногоЯзыкаИнформационнойБазы()); - Результат.Вставить("КодЯзыка2", КодВторогоДополнительногоЯзыкаИнформационнойБазы()); Результат.Вставить("ОсновнойЯзык", ОбщегоНазначения.КодОсновногоЯзыка()); Результат.Вставить("ИмяОбъектМетаданных", ОбъектМетаданных.ПолноеИмя()); Результат.Вставить("ПредопределенныеДанные", Неопределено); + СведенияОбЯзыках = СведенияОЯзыках(); + Для ПорядковыйНомерЯзыка = 1 По СведенияОбЯзыках.КоличествоДополнительныхЯзыков Цикл + ИмяСуффикса = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Результат.Вставить(ИмяСуффикса, СведенияОбЯзыках[ИмяСуффикса]); + КонецЦикла; + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Результат.ИмяОбъектМетаданных); Результат.ЛокализуемыеРеквизитыОбъекта = НаименованияЛокализуемыхРеквизитовОбъекта(ОбъектМетаданных); @@ -1083,7 +1125,7 @@ Функция МультиязычныеСтрокиРеквизитаИзменены(ПоставляемыеСведения, ДанныеЗапроса, ИмяРеквизита, ПараметрыРегистрации) Экспорт - СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбЯзыках(); + СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОЯзыках(); ЗначениеОсновногоЯзыка = ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках.ОсновнойЯзык)]; Если ПустаяСтрока(ЗначениеОсновногоЯзыка) И ЗначениеЗаполнено(ПоставляемыеСведения[ИмяРеквизита]) Тогда @@ -1102,31 +1144,21 @@ КонецЕсли; - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) - И СтрСравнить(ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках.Язык1)], ДанныеЗапроса[ИмяРеквизита + "Язык1"]) <> 0 Тогда + Для Каждого ЯзыкИспользуется Из СведенияОбЯзыках.Используется Цикл - Если ПустаяСтрока(ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках.Язык1)]) Тогда - Если Не ПараметрыРегистрации.ПропускатьПустые Тогда + Если ЯзыкИспользуется.Значение + И СтрСравнить(ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках[ЯзыкИспользуется.Ключ])], ДанныеЗапроса[ИмяРеквизита + ЯзыкИспользуется.Ключ]) <> 0 Тогда + + Если ПустаяСтрока(ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках[ЯзыкИспользуется.Ключ])]) Тогда + Если Не ПараметрыРегистрации.ПропускатьПустые Тогда + Возврат Истина; + КонецЕсли; + Иначе Возврат Истина; КонецЕсли; - Иначе - Возврат Истина; + КонецЕсли; - - КонецЕсли; - - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) - И СтрСравнить(ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках.Язык2)], ДанныеЗапроса[ИмяРеквизита + "Язык2"]) <> 0 Тогда - - Если ПустаяСтрока(ПоставляемыеСведения[ИмяЛокализуемогоРеквизита(ИмяРеквизита, СведенияОбЯзыках.Язык2)]) Тогда - Если Не ПараметрыРегистрации.ПропускатьПустые Тогда - Возврат Истина; - КонецЕсли; - Иначе - Возврат Истина; - КонецЕсли; - - КонецЕсли; + КонецЦикла; Возврат Ложь; @@ -1140,18 +1172,17 @@ // Процедура СформироватьИменаМультиязычныхРеквизитов(Знач ИменаРеквизитовОбъекта, Знач ЛокализуемыеРеквизитыОбъекта) Экспорт - СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбЯзыках(); + СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОЯзыках(); Для каждого РеквизитОбъекта Из ЛокализуемыеРеквизитыОбъекта Цикл ИменаРеквизитовОбъекта.Добавить(РеквизитОбъекта.Ключ); - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) Тогда - ИменаРеквизитовОбъекта.Добавить(РеквизитОбъекта.Ключ + "Язык1"); - КонецЕсли; - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда - ИменаРеквизитовОбъекта.Добавить(РеквизитОбъекта.Ключ + "Язык2"); - КонецЕсли; + Для Каждого ЯзыкИспользуется Из СведенияОбЯзыках.Используется Цикл + Если ЯзыкИспользуется.Значение Тогда + ИменаРеквизитовОбъекта.Добавить(РеквизитОбъекта.Ключ + ЯзыкИспользуется.Ключ); + КонецЕсли; + КонецЦикла; КонецЦикла; @@ -1160,14 +1191,14 @@ Процедура ПриПолученииПараметровЗаполненияПредопределенныхДанных(ПараметрыЗаполнения) Экспорт ПараметрыЗаполнения.Вставить("Языки", СтандартныеПодсистемыСервер.ЯзыкиКонфигурации()); - ПараметрыЗаполнения.Вставить("СведенияОбЯзыках", СведенияОбЯзыках()); + ПараметрыЗаполнения.Вставить("СведенияОбЯзыках", СведенияОЯзыках()); КонецПроцедуры Процедура НачальноеЗаполнениеПредопределенныхДанныхЛокализуемыеРеквизиты(ЗаполняемыйЭлемент, СтрокаТаблицы, ПоляИсключения, Контекст) Экспорт - СведенияОбЯзыках = СведенияОбЯзыках(); + СведенияОбЯзыках = СведенияОЯзыках(); ПоддерживаетсяИерархия = Контекст.ПоддерживаетсяИерархия; @@ -1190,13 +1221,12 @@ ЗаполняемыйЭлемент[ИмяЛокализуемогоРеквизита.Ключ] = ЗначениеОсновнойЯзык; КонецЕсли; - Для Позиция = 1 По СведенияОбЯзыках.КоличествоДополнительныхЯзыков Цикл + Для ПорядковыйНомерЯзыка = 1 По СведенияОбЯзыках.КоличествоДополнительныхЯзыков Цикл - СуффиксЯзыка = "Язык" + Строка(Позиция); + СуффиксЯзыка = "Язык" + Строка(ПорядковыйНомерЯзыка); ИмяРеквизита = ИмяЛокализуемогоРеквизита.Ключ + СуффиксЯзыка; - Если ПоляИсключения[ИмяРеквизита] <> Неопределено - Или (Не ИспользуетсяДополнительныйЯзык(СуффиксЯзыка) + Или (Не ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) И ЗначениеЗаполнено(ЗаполняемыйЭлемент[ИмяРеквизита])) Тогда Продолжить; КонецЕсли; @@ -1233,7 +1263,7 @@ КонецЕсли; Языки = СтандартныеПодсистемыСервер.ЯзыкиКонфигурации(); - СведенияОбЯзыках = СведенияОбЯзыках(); + СведенияОбЯзыках = СведенияОЯзыках(); Если МультиязычныеСтрокиВРеквизитах Тогда @@ -1407,7 +1437,25 @@ КонецЕсли; КонецПроцедуры + +Функция КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка) Экспорт + + Если Не ИспользуетсяДополнительныйЯзык(ПорядковыйНомерЯзыка) Тогда + Возврат ""; + КонецЕсли; + + КодЯзыка = Константы[ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка)].Получить(); + Для Каждого ЯзыкиИзМетаданных Из Метаданные.Языки Цикл + Если СтрСравнить(ЯзыкиИзМетаданных.КодЯзыка, КодЯзыка) = 0 Тогда + Возврат КодЯзыка; + КонецЕсли; + КонецЦикла; + + Возврат ""; + +КонецФункции +// Устарел Функция КодПервогоДополнительногоЯзыкаИнформационнойБазы() Экспорт Если Не ИспользуетсяПервыйДополнительныйЯзык() Тогда @@ -1425,6 +1473,7 @@ КонецФункции +// Устарел Функция КодВторогоДополнительногоЯзыкаИнформационнойБазы() Экспорт Если Не ИспользуетсяВторойДополнительныйЯзык() Тогда @@ -1442,6 +1491,14 @@ КонецФункции +Функция ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка) Экспорт + Возврат "ДополнительныйЯзык" + Формат(ПорядковыйНомерЯзыка,"ЧГ=0"); +КонецФункции + +Функция ИмяФункциональнойОпции(ПорядковыйНомерЯзыка) Экспорт + Возврат "ИспользоватьДополнительныйЯзык" + Формат(ПорядковыйНомерЯзыка,"ЧГ=0"); +КонецФункции + // Заполняет мультиязычный реквизит в обработке начального заполнения при преобразовании кода заполнения в таблицу. // Процедура ЗаполнитьМультиязычныйРеквизитНачальногоЗаполнения(Элемент, ИмяРеквизита, ЛокализуемаяСтрока, КодыЯзыков) Экспорт @@ -1496,6 +1553,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -1554,7 +1613,8 @@ Возврат Метаданные.ОсновнойЯзык.КодЯзыка; -КонецФункции +КонецФункции + // Возвращаемое значение: // Структура: @@ -1565,15 +1625,24 @@ // * ДополнительныйЯзык1НовоеЗначение - Строка // * ДополнительныйЯзык2НовоеЗначение - Строка // -Функция ОписаниеСтарыхИНовыхНастроекЯзыков() Экспорт +Функция ОписаниеСтарыхИНовыхНастроекЯзыков(КоличествоДополнительныхЯзыков) Экспорт ОписаниеКонстант = Новый Структура; - ОписаниеКонстант.Вставить("ОсновнойЯзыкСтароеЗначение", ""); - ОписаниеКонстант.Вставить("ДополнительныйЯзык1СтароеЗначение", ""); - ОписаниеКонстант.Вставить("ДополнительныйЯзык2СтароеЗначение", ""); - ОписаниеКонстант.Вставить("ОсновнойЯзыкНовоеЗначение", ""); - ОписаниеКонстант.Вставить("ДополнительныйЯзык1НовоеЗначение", ""); - ОписаниеКонстант.Вставить("ДополнительныйЯзык2НовоеЗначение", ""); + + НовоеИСтароеЗначение = Новый Структура; + НовоеИСтароеЗначение.Вставить("НовоеЗначение", ""); + НовоеИСтароеЗначение.Вставить("СтароеЗначение", ""); + + ОписаниеКонстант.Вставить("ОсновнойЯзык", НовоеИСтароеЗначение); + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + + НовоеИСтароеЗначение = Новый Структура; + НовоеИСтароеЗначение.Вставить("НовоеЗначение", ""); + НовоеИСтароеЗначение.Вставить("СтароеЗначение", ""); + + ОписаниеКонстант.Вставить(ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка), НовоеИСтароеЗначение); + КонецЦикла; Возврат ОписаниеКонстант; @@ -1648,16 +1717,14 @@ // Возвращаемое значение: // Соответствие из КлючИЗначение: -// * Ключ - Строка -// * Значение - Булево +// * Ключ - Строка +// * Значение - Булево // Функция НаименованияЛокализуемыхРеквизитовОбъекта(ОбъектМетаданных, Префикс = "") Экспорт СписокРеквизитовОбъекта = Новый Соответствие; Если МультиязычныеСтрокиВРеквизитах(ОбъектМетаданных) Тогда - ДлинаСуффиксаЯзыка = ДлинаСуффиксаЯзыка(); - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 0 @@ -1669,10 +1736,9 @@ РезультатЗапроса = Запрос.Выполнить(); Для каждого Колонка Из РезультатЗапроса.Колонки Цикл - Если (СтрЗаканчиваетсяНа(Колонка.Имя, "Язык1") - Или СтрЗаканчиваетсяНа(Колонка.Имя, "Язык2")) - И Не СтрНачинаетсяС(Колонка.Имя, "Удалить") Тогда - СписокРеквизитовОбъекта.Вставить(Префикс + Лев(Колонка.Имя, СтрДлина(Колонка.Имя) - ДлинаСуффиксаЯзыка), Ложь); + СведенияОРеквизите = СведенияОРеквизите(Колонка.Имя); + Если СведенияОРеквизите.Мультиязычный И Не СведенияОРеквизите.Удаленный Тогда + СписокРеквизитовОбъекта.Вставить(Префикс + СведенияОРеквизите.ИмяРеквизитаБезСуффиксаЯзык, Ложь); КонецЕсли; КонецЦикла; @@ -1698,8 +1764,6 @@ СписокРеквизитовОбъекта = Новый Соответствие; Если МультиязычныеСтрокиВРеквизитах(ОбъектМетаданных) Тогда - ДлинаСуффиксаЯзыка = ДлинаСуффиксаЯзыка(); - Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 0 @@ -1711,10 +1775,9 @@ РезультатЗапроса = Запрос.Выполнить(); Для каждого Колонка Из РезультатЗапроса.Колонки Цикл - Если (СтрЗаканчиваетсяНа(Колонка.Имя, "Язык1") - Или СтрЗаканчиваетсяНа(Колонка.Имя, "Язык2")) - И Не СтрНачинаетсяС(Колонка.Имя, "Удалить") Тогда - СписокРеквизитовОбъекта.Вставить(Префикс + Лев(Колонка.Имя, СтрДлина(Колонка.Имя) - ДлинаСуффиксаЯзыка), Ложь); + СведенияОРеквизите = СведенияОРеквизите(Колонка.Имя); + Если СведенияОРеквизите.Мультиязычный И Не СведенияОРеквизите.Удаленный Тогда + СписокРеквизитовОбъекта.Вставить(Префикс + СведенияОРеквизите.ИмяРеквизитаБезСуффиксаЯзык, Ложь); КонецЕсли; КонецЦикла; КонецЕсли; @@ -1723,12 +1786,6 @@ КонецФункции -Функция ДлинаСуффиксаЯзыка() - - Возврат СтрДлина("Язык1"); - -КонецФункции - Функция МассивВСоответствие(Массив) Соответствие = Новый Соответствие(); Для Каждого Элемент Из Массив Цикл @@ -1785,7 +1842,7 @@ Для каждого Элемент Из Метаданные.ФункциональныеОпции["ИспользоватьДополнительныйЯзык1"].Состав Цикл Реквизит = Элемент.Объект; - ИмяРеквизита = Лев(Реквизит.Имя, СтрДлина(Реквизит.Имя) - СтрДлина(СуффиксПервогоЯзыка())); + ИмяРеквизита = ИмяРеквизитаБезСуффиксаЯзык(Реквизит.Имя); Если Метаданные.ОбщиеРеквизиты.Содержит(Реквизит) Тогда АвтоИспользование = (Реквизит.АвтоИспользование = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита.Использовать); @@ -1833,14 +1890,16 @@ СписокМультиязычныхРеквизитов = НаименованияЛокализуемыхРеквизитовОбъектаВШапке(ОбъектМетаданные); Для Каждого Реквизит Из СписокМультиязычныхРеквизитов Цикл - Объект[Реквизит.Ключ + "Язык1"] = ""; - Объект[Реквизит.Ключ + "Язык2"] = ""; + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Объект[Реквизит.Ключ + СуффиксЯзыка] = ""; + КонецЦикла; + КонецЦикла; ИначеЕсли Объект.Свойство("Представления") Тогда - Объект.Представления.Очистить(); - КонецЕсли; КонецПроцедуры @@ -1884,13 +1943,16 @@ Продолжить; КонецЕсли; - Если ПустаяСтрока(ТекущийОбъект[Реквизит.Ключ + "Язык1"]) Тогда - ТекущийОбъект[Реквизит.Ключ + "Язык1"] = ЗначениеРеквизита; - КонецЕсли; + Для ПорядковыйНомерЯзыка =1 По КоличествоДополнительныхЯзыков() Цикл + + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Если ПустаяСтрока(ТекущийОбъект[Реквизит.Ключ + СуффиксЯзыка]) Тогда + ТекущийОбъект[Реквизит.Ключ + СуффиксЯзыка] = ЗначениеРеквизита; + КонецЕсли; + + + КонецЦикла; - Если ПустаяСтрока(ТекущийОбъект[Реквизит.Ключ + "Язык2"]) Тогда - ТекущийОбъект[Реквизит.Ключ + "Язык2"] = ЗначениеРеквизита; - КонецЕсли; КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ТекущийОбъект); @@ -1978,15 +2040,6 @@ КонецПроцедуры - -// Параметры: -// Реквизит - ОбъектМетаданныхРеквизит -// - ОписаниеСтандартногоРеквизита -// -Функция ЭтоЛокализуемыйРеквизит(ИмяРеквизита) - Возврат СтрЗаканчиваетсяНа(ИмяРеквизита, "Язык1") Или СтрЗаканчиваетсяНа(ИмяРеквизита, "Язык2"); -КонецФункции - // Параметры: // ВариантДанных - Строка - Варианты: Общие, Разделенные, Все // @@ -2107,22 +2160,30 @@ Если СтрСравнить(ОбщегоНазначения.КодОсновногоЯзыка(), КодЯзыка) = 0 Тогда Объект[ИмяРеквизита] = ДанныеЗаполнения; - ИначеЕсли СтрСравнить(КодПервогоДополнительногоЯзыкаИнформационнойБазы(), КодЯзыка) = 0 Тогда - Объект[ИмяРеквизита + СуффиксПервогоЯзыка()] = ДанныеЗаполнения; - ИначеЕсли СтрСравнить(КодВторогоДополнительногоЯзыкаИнформационнойБазы(), КодЯзыка) = 0 Тогда - Объект[ИмяРеквизита + СуффиксВторогоЯзыка()] = ДанныеЗаполнения; - КонецЕсли; + КонецЕсли; + + Для ПорядковыйНомерЯзыка =1 По КоличествоДополнительныхЯзыков() Цикл + Если СтрСравнить(КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка), КодЯзыка) = 0 Тогда + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Объект[ИмяРеквизита + СуффиксЯзыка] = ДанныеЗаполнения; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; Иначе - Если СтрСравнить(КодПервогоДополнительногоЯзыкаИнформационнойБазы(), КодЯзыка) = 0 - И ПустаяСтрока(Объект[ИмяРеквизита + СуффиксПервогоЯзыка()]) Тогда - Объект[ИмяРеквизита + СуффиксПервогоЯзыка()] = СтрокаТаблицы[ИмяРеквизита]; - ИначеЕсли СтрСравнить(КодВторогоДополнительногоЯзыкаИнформационнойБазы(), КодЯзыка) = 0 - И ПустаяСтрока(Объект[ИмяРеквизита + СуффиксВторогоЯзыка()])Тогда - Объект[ИмяРеквизита + СуффиксВторогоЯзыка()] = СтрокаТаблицы[ИмяРеквизита]; - КонецЕсли; + Для ПорядковыйНомерЯзыка =1 По КоличествоДополнительныхЯзыков() Цикл + + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Если СтрСравнить(КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка), КодЯзыка) = 0 + И ПустаяСтрока(Объект[ИмяРеквизита + СуффиксЯзыка]) Тогда + Объект[ИмяРеквизита + СуффиксЯзыка] = СтрокаТаблицы[ИмяРеквизита]; + Прервать; + КонецЕсли; + + КонецЦикла; КонецЕсли; @@ -2168,13 +2229,37 @@ КонецФункции +Функция ИспользуетсяПервыйДополнительныйЯзык() + + Возврат ИспользуетсяДополнительныйЯзык(1); + +КонецФункции + +Функция ИспользуетсяВторойДополнительныйЯзык() + + Возврат ИспользуетсяДополнительныйЯзык(2); + +КонецФункции + Функция СписокОбъектовКОбработкеДляПереходаНаНовуюВерсию(ВариантДанных) ОбъектыКОбработке = Новый Массив(); РазделительЗапросов = Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС; - СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОбЯзыках(); - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) Или ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда + СведенияОбЯзыках = МультиязычностьПовтИсп.СведенияОЯзыках(); + + ДополнительныеЯзыкиИспользуются = Ложь; + + Для ПорядковыйНомерЯзыка =1 По КоличествоДополнительныхЯзыков() Цикл + + Если ЗначениеЗаполнено(КодДополнительногоЯзыкаИнформационнойБазы(ПорядковыйНомерЯзыка)) Тогда + ДополнительныеЯзыкиИспользуются = Истина; + Прервать; + КонецЕсли; + + КонецЦикла; + + Если ДополнительныеЯзыкиИспользуются Тогда ОбъектыСПредопределеннымиЭлементами = ОбъектыСНачальнымЗаполнением(ВариантДанных); @@ -2306,22 +2391,17 @@ ТекстЗапроса = СтрСоединить(НаборЗапросов, РазделительЗапросов); Запрос = Новый Запрос; - Если ИспользуетсяПервыйДополнительныйЯзык() Тогда - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "#СуффиксЯзыка", СуффиксПервогоЯзыка()); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&КодЯзыка", КодПервогоДополнительногоЯзыкаИнформационнойБазы()); - КонецЕсли; - Если ИспользуетсяВторойДополнительныйЯзык() Тогда - - Если ЗначениеЗаполнено(Запрос.Текст) Тогда - Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов(); + НаборЗапросов = Новый Массив; + Для Каждого ЯзыкИспользуется Из СведенияОбЯзыках.Используется Цикл + Если ЯзыкИспользуется.Значение Тогда + ТекстЗапроса2 = СтрЗаменить(ТекстЗапроса, "#СуффиксЯзыка", ЯзыкИспользуется.Ключ); + ТекстЗапроса2 = СтрЗаменить(ТекстЗапроса2, "&КодЯзыка", СведенияОбЯзыках[ЯзыкИспользуется.Ключ]); + НаборЗапросов.Добавить(ТекстЗапроса2); КонецЕсли; - - ЗапросТекст = СтрЗаменить(ТекстЗапроса, "#СуффиксЯзыка", СуффиксВторогоЯзыка()); - Запрос.Текст = Запрос.Текст + СтрЗаменить(ЗапросТекст, "&КодЯзыка", - КодВторогоДополнительногоЯзыкаИнформационнойБазы()); - - КонецЕсли; + КонецЦикла; + + Запрос.Текст = СтрСоединить(НаборЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); Если ЗначениеЗаполнено(Запрос.Текст) Тогда РезультатыЗапроса = Запрос.ВыполнитьПакет(); @@ -2347,13 +2427,14 @@ // Структура: // * НастройкиИзмененияЯзыков - см. МультиязычностьСервер.ОписаниеСтарыхИНовыхНастроекЯзыков // * ОсновнойЯзыкИзменен - Булево -// * ПервыйДополнительныйЯзыкИзменен - Булево -// * ВторойДополнительныйЯзыкИзменен - Булево // * Объекты - Соответствие из КлючИЗначение: -// ** Ключ - Строка -// ** Значение - Структура: -// *** СсылкаНаПоследнийОбработанныйОбъекты - Произвольный -// *** ЯзыковыеПоля - Массив +// ** Ключ - Строка +// ** Значение - Структура: +// *** СсылкаНаПоследнийОбработанныйОбъекты - Произвольный +// *** ЯзыковыеПоля - Массив +// * Изменения - Структура: +// ** ДополнительныйЯзык1 - Булево +// ** ДополнительныйЯзык2 - Булево // Функция ДанныеДляИзмененияМультиязычныхРеквизитов() Экспорт @@ -2370,12 +2451,16 @@ НастройкиИзмененияЯзыков = ДанныеДляИзмененияМультиязычныхРеквизитов.НастройкиИзмененияЯзыков; ДанныеДляИзмененияМультиязычныхРеквизитов.Вставить("ОсновнойЯзыкИзменен", - СтрСравнить(НастройкиИзмененияЯзыков.ОсновнойЯзыкНовоеЗначение, НастройкиИзмененияЯзыков.ОсновнойЯзыкСтароеЗначение) <> 0); - ДанныеДляИзмененияМультиязычныхРеквизитов.Вставить("ПервыйДополнительныйЯзыкИзменен", - СтрСравнить(НастройкиИзмененияЯзыков.ДополнительныйЯзык1НовоеЗначение, НастройкиИзмененияЯзыков.ДополнительныйЯзык1СтароеЗначение) <> 0); - ДанныеДляИзмененияМультиязычныхРеквизитов.Вставить("ВторойДополнительныйЯзыкИзменен", - СтрСравнить(НастройкиИзмененияЯзыков.ДополнительныйЯзык2НовоеЗначение, НастройкиИзмененияЯзыков.ДополнительныйЯзык2СтароеЗначение) <> 0); + СтрСравнить(НастройкиИзмененияЯзыков.ОсновнойЯзык.НовоеЗначение, НастройкиИзмененияЯзыков.ОсновнойЯзык.СтароеЗначение) <> 0); + Изменения = Новый Структура; + Для ПорядковыйНомер = 1 По КоличествоДополнительныхЯзыков() Цикл + ИмяКонстанты = ИмяКонстантыЯзыка(ПорядковыйНомер); + Изменения.Вставить(ИмяКонстанты, + СтрСравнить(НастройкиИзмененияЯзыков[ИмяКонстанты].НовоеЗначение, НастройкиИзмененияЯзыков[ИмяКонстанты].СтароеЗначение) <> 0); + КонецЦикла; + ДанныеДляИзмененияМультиязычныхРеквизитов.Вставить("Изменения", Изменения); + Возврат ДанныеДляИзмененияМультиязычныхРеквизитов; КонецФункции @@ -2405,7 +2490,7 @@ КонецЕсли; Процент = Окр(ОбработаноОбъектов * 100 / ОбъектыСНачальнымЗаполнением.Количество()) + 1; - ДлительныеОперации.СообщитьПрогресс(?(Процент >99, 98, Процент), МетаданныеОбъекта.Представление()); + ДлительныеОперации.СообщитьПрогресс(?(Процент > 99, 98, Процент), МетаданныеОбъекта.Представление()); Если СтрНачинаетсяС(ПолноеИмя, "Справочник") Или СтрНачинаетсяС(ПолноеИмя, "ПланВидовХарактеристик") @@ -2471,6 +2556,7 @@ МультиязычныеРеквизиты = ДанныеОбъекта.ЯзыковыеПоля; ЕстьПорцияДанных = Истина; + КоличествоДополнительныхЯзыков = КоличествоДополнительныхЯзыков(); ОбъектСодержитТЧПредставления = Ложь; Если ПараметрыЗаполнения.Количество() > 0 Тогда @@ -2482,16 +2568,18 @@ ПоляЗапроса = Новый Массив; Для Каждого МультиязычныйРеквизит Из МультиязычныеРеквизиты Цикл - + ПоляЗапроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонПолейЗапроса, МультиязычныйРеквизит, "")); - ПоляЗапроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонПолейЗапроса, МультиязычныйРеквизит, СуффиксПервогоЯзыка())); - ПоляЗапроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонПолейЗапроса, МультиязычныйРеквизит, СуффиксВторогоЯзыка())); - + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + ПоляЗапроса.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПолейЗапроса, МультиязычныйРеквизит, СуффиксЯзыка)); + КонецЦикла; + КонецЦикла; - + Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1000 @@ -2552,43 +2640,50 @@ // Сохраняем старые значения ЗначенияРеквизита = Новый Соответствие; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение] = ИзменяемыйОбъект[МультиязычныйРеквизит]; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1СтароеЗначение] = ИзменяемыйОбъект[МультиязычныйРеквизит - + СуффиксПервогоЯзыка()]; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2СтароеЗначение] = ИзменяемыйОбъект[МультиязычныйРеквизит - + СуффиксВторогоЯзыка()]; - + ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение] = ИзменяемыйОбъект[МультиязычныйРеквизит]; + + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + ИмяКонстантыЯзыка = ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + + ЗначенияРеквизита[ЗначенияЯзыковыхКонстант[ИмяКонстантыЯзыка].СтароеЗначение] = ИзменяемыйОбъект[МультиязычныйРеквизит + + СуффиксЯзыка]; + КонецЦикла; + Если ОтредактированныеРеквизиты <> Неопределено Тогда Замены = Новый Соответствие; Если ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит) <> Неопределено Тогда Позиция = ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит); - Замены.Вставить(Позиция, МультиязычныйРеквизит + СуффиксЯзыка(ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение)); - КонецЕсли; - Если ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит + СуффиксПервогоЯзыка()) <> Неопределено Тогда - Позиция = ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит + СуффиксПервогоЯзыка()); - Замены.Вставить(Позиция, МультиязычныйРеквизит + СуффиксЯзыка(ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1СтароеЗначение)); - КонецЕсли; - Если ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит + СуффиксВторогоЯзыка()) <> Неопределено Тогда - Позиция = ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит + СуффиксВторогоЯзыка()); - Замены.Вставить(Позиция, МультиязычныйРеквизит + СуффиксЯзыка(ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2СтароеЗначение)); + Замены.Вставить(Позиция, МультиязычныйРеквизит + СуффиксЯзыка(ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение)); КонецЕсли; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков Цикл + + СуффиксЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Если ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит + СуффиксЯзыка) <> Неопределено Тогда + Позиция = ОтредактированныеРеквизиты.Найти(МультиязычныйРеквизит + СуффиксЯзыка); + ИмяКонстантыЯзыка = ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + Замены.Вставить(Позиция, МультиязычныйРеквизит + СуффиксЯзыка(ЗначенияЯзыковыхКонстант[ИмяКонстантыЯзыка].СтароеЗначение)); + КонецЕсли; + + КонецЦикла; + Для Каждого Замена Из Замены Цикл ОтредактированныеРеквизиты[Замена.Ключ] = Замена.Значение; КонецЦикла; КонецЕсли; - + ЗначениеПоУмолчанию = ИзменяемыйОбъект[МультиязычныйРеквизит]; Если ДанныеДляИзмененияМультиязычныхРеквизитов.ОсновнойЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкНовоеЗначение]; + НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.НовоеЗначение]; ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемыйОбъект, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ОсновнойЯзыкНовоеЗначение); + ЗначенияЯзыковыхКонстант.ОсновнойЯзык.НовоеЗначение); Если ОбъектСодержитТЧПредставления Тогда - Отбор = Новый Структура("КодЯзыка", ЗначенияЯзыковыхКонстант.ОсновнойЯзыкНовоеЗначение); + Отбор = Новый Структура("КодЯзыка", ЗначенияЯзыковыхКонстант.ОсновнойЯзык.НовоеЗначение); НайденныеСтроки = ИзменяемыйОбъект.Представления.НайтиСтроки(Отбор); Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл ИзменяемыйОбъект.Представления.Удалить(НайденнаяСтрока); @@ -2596,7 +2691,7 @@ РеквизитПрисутствуетВТабличнойЧасти = ПараметрыЗаполнения.ЛокализуемыеРеквизитыОбъекта[МультиязычныйРеквизит]; - Если ЗначениеЗаполнено(ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение) + Если ЗначениеЗаполнено(ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение) И РеквизитПрисутствуетВТабличнойЧасти Тогда Если ПараметрыЗаполнения.ПоддерживаетсяИерархия @@ -2605,36 +2700,36 @@ Продолжить; КонецЕсли; - Отбор = Новый Структура("КодЯзыка", ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение); + Отбор = Новый Структура("КодЯзыка", ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение); НайденныеСтроки = ИзменяемыйОбъект.Представления.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() > 0 Тогда СтрокаДанных = НайденныеСтроки[0]; Иначе СтрокаДанных= ИзменяемыйОбъект.Представления.Добавить(); - СтрокаДанных.КодЯзыка= ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение; + СтрокаДанных.КодЯзыка= ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение; КонецЕсли; - СтрокаДанных[МультиязычныйРеквизит] = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение]; + СтрокаДанных[МультиязычныйРеквизит] = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение]; КонецЕсли; КонецЕсли; КонецЕсли; - Если ДанныеДляИзмененияМультиязычныхРеквизитов.ПервыйДополнительныйЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1НовоеЗначение]; - ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемыйОбъект, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1НовоеЗначение); + Для каждого ДополнительныйЯзыкИзменен Из ДанныеДляИзмененияМультиязычныхРеквизитов.Изменения Цикл + + Если ДополнительныйЯзыкИзменен.Значение Тогда + ЗначенияЯзыка = ДанныеДляИзмененияМультиязычныхРеквизитов.НастройкиИзмененияЯзыков[ДополнительныйЯзыкИзменен.Ключ]; - КонецЕсли; + НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыка.НовоеЗначение]; + ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемыйОбъект, НовоеЗначение, ЗначениеПоУмолчанию, + ЗначенияЯзыковыхКонстант[ДополнительныйЯзыкИзменен.Ключ].НовоеЗначение); + + КонецЕсли; - Если ДанныеДляИзмененияМультиязычныхРеквизитов.ВторойДополнительныйЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2НовоеЗначение]; - ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемыйОбъект, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2НовоеЗначение); - КонецЕсли; + КонецЦикла; Если НоваяСтрокаТЧПредставления <> Неопределено Тогда - НоваяСтрокаТЧПредставления[МультиязычныйРеквизит] = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение]; + НоваяСтрокаТЧПредставления[МультиязычныйРеквизит] = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение]; КонецЕсли; КонецЦикла; @@ -2676,7 +2771,7 @@ Возврат; КонецЕсли; - + КонецЦикла; КонецПроцедуры @@ -2784,7 +2879,7 @@ Если ДанныеДляИзмененияМультиязычныхРеквизитов.Объекты.Количество() = 0 Тогда УпакованноеЗначение = Неопределено; Иначе - УпакованноеЗначение = Новый ХранилищеЗначения(ДанныеДляИзмененияМультиязычныхРеквизитов); + УпакованноеЗначение = Новый ХранилищеЗначения(ДанныеДляИзмененияМультиязычныхРеквизитов, Новый СжатиеДанных(9)); КонецЕсли; Константы.ДанныеДляИзмененияМультиязычныхРеквизитов.Установить(УпакованноеЗначение); @@ -2795,6 +2890,7 @@ ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + СведенияОЯзыках = СведенияОЯзыках(); МультиязычныеРеквизиты = ДанныеОбъекта.ЯзыковыеПоля; ЗначенияЯзыковыхКонстант = ДанныеДляИзмененияМультиязычныхРеквизитов.НастройкиИзмененияЯзыков; @@ -2852,9 +2948,12 @@ // Сохраняем старые значения ЗначенияРеквизита = Новый Соответствие; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит]; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит + СуффиксПервогоЯзыка()]; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит + СуффиксВторогоЯзыка()]; + ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит]; + Для ПорядковыйНомерЯзыка = 1 По КоличествоДополнительныхЯзыков() Цикл + ИмяКонстантыЯзыка = ИмяКонстантыЯзыка(ПорядковыйНомерЯзыка); + ИмяСуффиксаЯзыка = МультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + ЗначенияРеквизита[ЗначенияЯзыковыхКонстант[ИмяКонстантыЯзыка].СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит + ИмяСуффиксаЯзыка]; + КонецЦикла; ЗначениеПоУмолчанию = Строка(ИзменяемаяЗапись[МультиязычныйРеквизит]); Если ДанныеДляИзмененияМультиязычныхРеквизитов.ОсновнойЯзыкИзменен Тогда @@ -2863,17 +2962,14 @@ ЗначенияЯзыковыхКонстант.ОсновнойЯзыкНовоеЗначение); КонецЕсли; - Если ДанныеДляИзмененияМультиязычныхРеквизитов.ПервыйДополнительныйЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1НовоеЗначение]; - ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1НовоеЗначение); - КонецЕсли; - - Если ДанныеДляИзмененияМультиязычныхРеквизитов.ВторойДополнительныйЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2НовоеЗначение]; - ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2НовоеЗначение); - КонецЕсли; + Для Каждого ДополнительныйЯзыкИзменен Из ДанныеДляИзмененияМультиязычныхРеквизитов.Изменения Цикл + Если ДополнительныйЯзыкИзменен.Значение Тогда + + НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант[ДополнительныйЯзыкИзменен.Ключ].НовоеЗначение]; + ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, + ЗначенияЯзыковыхКонстант[ДополнительныйЯзыкИзменен.Ключ].НовоеЗначение); + КонецЕсли; + КонецЦикла; КонецЦикла; @@ -3055,30 +3151,24 @@ Для Каждого МультиязычныйРеквизит Из МультиязычныеРеквизиты Цикл - // Сохраняем старые значения ЗначенияРеквизита = Новый Соответствие; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкСтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит]; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит + СуффиксПервогоЯзыка()]; - ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит + СуффиксВторогоЯзыка()]; - + ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.СтароеЗначение] = ИзменяемаяЗапись[МультиязычныйРеквизит]; + ЗначениеПоУмолчанию = ИзменяемаяЗапись[МультиязычныйРеквизит]; Если ДанныеДляИзмененияМультиязычныхРеквизитов.ОсновнойЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзыкНовоеЗначение]; + НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ОсновнойЯзык.НовоеЗначение]; ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ОсновнойЯзыкНовоеЗначение); + ЗначенияЯзыковыхКонстант.ОсновнойЯзык.НовоеЗначение); КонецЕсли; - Если ДанныеДляИзмененияМультиязычныхРеквизитов.ПервыйДополнительныйЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1НовоеЗначение]; - ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ДополнительныйЯзык1НовоеЗначение); - КонецЕсли; - - Если ДанныеДляИзмененияМультиязычныхРеквизитов.ВторойДополнительныйЯзыкИзменен Тогда - НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2НовоеЗначение]; - ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, - ЗначенияЯзыковыхКонстант.ДополнительныйЯзык2НовоеЗначение); - КонецЕсли; + Для Каждого ДополнительныйЯзыкИзменен Из ДанныеДляИзмененияМультиязычныхРеквизитов.Изменения Цикл + Если ДополнительныйЯзыкИзменен.Значение Тогда + + НовоеЗначение = ЗначенияРеквизита[ЗначенияЯзыковыхКонстант[ДополнительныйЯзыкИзменен.Ключ].НовоеЗначение]; + ЗаполнитьРеквизитИТЧПредставления(ПараметрыЗаполнения, МультиязычныйРеквизит, ИзменяемаяЗапись, НовоеЗначение, ЗначениеПоУмолчанию, + ЗначенияЯзыковыхКонстант[ДополнительныйЯзыкИзменен.Ключ].НовоеЗначение); + КонецЕсли; + КонецЦикла; КонецЦикла; @@ -3140,14 +3230,6 @@ КонецПроцедуры -Функция СуффиксПервогоЯзыка() Экспорт - Возврат "Язык1"; -КонецФункции - -Функция СуффиксВторогоЯзыка() Экспорт - Возврат "Язык2"; -КонецФункции - Функция ОбъектыСНачальнымЗаполнением(ВариантДанных) ОбъектыСПредопределеннымиЭлементами = ОбновлениеИнформационнойБазыСлужебный.ОбъектыСНачальнымЗаполнением(); diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index a39a534b3..725a86a78 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -130,7 +130,13 @@ // Параметры: // Форма - ФормаКлиентскогоПриложения - форма, в которой размещены элементы настройки напоминания. // ИмяСобытия - Строка -// Параметр - см. НапоминанияПользователяКлиентСервер.ОписаниеНапоминания +// Параметр - Структура: +// * ИмяРеквизитаИсточника - Строка - имя реквизита предмета, относительно которого устанавливается срок напоминания. +// * ИнтервалВремениНапоминания - Число - интервал времени в секундах, за который необходимо напомнить +// относительно даты в реквизите предмета. +// * Предмет - ЛюбаяСсылка - предмет напоминания. +// * СпособУстановкиВремениНапоминания - ПеречислениеСсылка.СпособыУстановкиВремениНапоминания. +// * СрокНапоминания - Дата. // Источник - ФормаКлиентскогоПриложения // - Произвольный - источник события. // diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index ca553f8ef..c6359a55b 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -59,13 +59,10 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - СтароеИмя = "Роль.ИспользованиеНапоминаний"; - НовоеИмя = "Роль.ДобавлениеИзменениеНапоминаний"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.11", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.11", + "Роль.ИспользованиеНапоминаний", "Роль.ДобавлениеИзменениеНапоминаний", "СтандартныеПодсистемы"); КонецПроцедуры @@ -126,16 +123,28 @@ Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("Источник", Предмет); - РезультатЗапроса = Запрос.Выполнить(); - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ВыборкаДетальныеЗаписи); - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.Описание = НовыйТекст; - МенеджерЗаписи.Записать(); - КонецЦикла; + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НапоминанияПользователя"); + ЭлементБлокировки.УстановитьЗначение("Источник", Предмет); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ВыборкаДетальныеЗаписи); + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Описание = НовыйТекст; + МенеджерЗаписи.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/НастройкиПрограммы/Module.bsl b/SSL/src/CommonModules/НастройкиПрограммы/Module.bsl index 6b77ad3a1..03b514dd0 100644 --- a/SSL/src/CommonModules/НастройкиПрограммы/Module.bsl +++ b/SSL/src/CommonModules/НастройкиПрограммы/Module.bsl @@ -21,32 +21,30 @@ Процедура ИнтернетПоддержкаИСервисыПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт Элементы = Форма.Элементы; + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); Если Не Форма.РазделениеВключено И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - Если Не МодульАдресныйКлассификаторСлужебный.ЕстьПравоДобавлениеИзменениеАдресныхСведений() Тогда - Элементы.АдресныйКлассификаторНастройки.Видимость = Ложь; - КонецЕсли; - - ЗначениеРеквизитаФормы = Новый Структура("ИспользоватьВебСервисАдресов", Неопределено); - ЗаполнитьЗначенияСвойств(ЗначениеРеквизитаФормы, Форма); - - Если ЗначениеРеквизитаФормы["ИспользоватьВебСервисАдресов"] <> Неопределено Тогда - Форма["ИспользоватьВебСервисАдресов"] = МодульАдресныйКлассификаторСлужебный.ИспользоватьВебСервис(); - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, - "ИспользоватьВебСервисАдресов", - "Видимость", - Истина); + ВидимостьНастройкиИспользоватьВебСервисАдресов(Форма, РазрешенДоступКИнтернетСервисам); Иначе Элементы.АдресныйКлассификаторНастройки.Видимость = Ложь; КонецЕсли; + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + + ЗначениеРеквизитаФормы = Новый Структура("РазрешитьДоступКИнтернетСервисам", Неопределено); + ЗаполнитьЗначенияСвойств(ЗначениеРеквизитаФормы, Форма); + Если ЗначениеРеквизитаФормы["РазрешитьДоступКИнтернетСервисам"] <> Неопределено Тогда + Элементы.РазрешитьДоступКИнтернетСервисам.Видимость = Не Форма.РазделениеВключено; + Форма["РазрешитьДоступКИнтернетСервисам"] = РазрешенДоступКИнтернетСервисам; + КонецЕсли; + + Иначе + Элементы.РазрешитьДоступКИнтернетСервисам.Видимость = Ложь; + КонецЕсли; + Если Не Форма.РазделениеВключено И Не Форма.ЭтоАвтономноеРабочееМесто И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда @@ -63,66 +61,15 @@ И Пользователи.ЭтоПолноправныйПользователь(); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда - Элементы.ГруппаСклонения.Видимость = - Не Форма.РазделениеВключено - И Не Форма.ЭтоАвтономноеРабочееМесто - И Форма.ЭтоАдминистраторСистемы; - Если Элементы.ГруппаСклонения.Видимость Тогда - МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); - Форма.ИспользоватьСервисСклоненияMorpher = - МодульСклонениеПредставленийОбъектов.ИспользоватьСервисСклоненияMorpher(); - КонецЕсли; + + ВидимостьСклоненияПредставленийОбъектов(Форма, РазрешенДоступКИнтернетСервисам); + Иначе Элементы.ГруппаСклонения.Видимость = Ложь; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда - Элементы.ГруппаЦентрМониторинга.Видимость = Форма.ЭтоАдминистраторСистемы; - Если Форма.ЭтоАдминистраторСистемы Тогда - ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); - Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = ПолучитьПереключательОтправкиДанных( - ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга, - ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме); - - ПараметрыСервиса = Новый Структура("Сервер, АдресРесурса, Порт"); - Если Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда - ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.СерверПоУмолчанию; - ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурсаПоУмолчанию; - ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.ПортПоУмолчанию; - ИначеЕсли Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда - ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.Сервер; - ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурса; - ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.Порт; - ИначеЕсли Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда - ПараметрыСервиса = Неопределено; - КонецЕсли; - - Если ПараметрыСервиса <> Неопределено Тогда - Если ПараметрыСервиса.Порт = 80 Тогда - Схема = "http://"; - Порт = ""; - ИначеЕсли ПараметрыСервиса.Порт = 443 Тогда - Схема = "https://"; - Порт = ""; - Иначе - Схема = "http://"; - Порт = ":" + Формат(ПараметрыСервиса.Порт, "ЧН=0; ЧГ="); - КонецЕсли; - - Форма.ЦентрМониторингаАдресСервиса = Схема - + ПараметрыСервиса.Сервер - + Порт - + "/" - + ПараметрыСервиса.АдресРесурса; - Иначе - Форма.ЦентрМониторингаАдресСервиса = ""; - КонецЕсли; - - Элементы.ЦентрМониторингаАдресСервиса.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 1); - Элементы.ЦентрМониторингаНастройки.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные <> 2); - Элементы.ГруппаОтправитьКонтактнуюИнформацию.Видимость = - (ПараметрыЦентраМониторинга.ЗапросКонтактнойИнформации <> 2); - КонецЕсли; + ВидимостьНастройкиЦентрМониторинга(Форма, РазрешенДоступКИнтернетСервисам); Иначе Элементы.ГруппаЦентрМониторинга.Видимость = Ложь; КонецЕсли; @@ -149,13 +96,29 @@ // Процедура ИнтернетПоддержкаИСервисыПриИзмененииКонстанты(Форма, ИмяКонстанты, НовоеЗначение) Экспорт - СохранитьЗначениеКонстанты(ИмяКонстанты, НовоеЗначение); + Если ИмяКонстанты = "РазрешитьДоступКИнтернетСервисам" Тогда + ОбщегоНазначения.НастроитьРаботуСИнтернетСервисами(НовоеЗначение); + Иначе + СохранитьЗначениеКонстанты(ИмяКонстанты, НовоеЗначение); + КонецЕсли; Если ИмяКонстанты = "ИспользоватьСервисСклоненияMorpher" И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); МодульСклонениеПредставленийОбъектов.УстановитьДоступностьСервисаСклонения(Истина); + ИначеЕсли ИмяКонстанты = "РазрешитьДоступКИнтернетСервисам" Тогда + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + ВидимостьНастройкиИспользоватьВебСервисАдресов(Форма, РазрешенДоступКИнтернетСервисам); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + ВидимостьНастройкиЦентрМониторинга(Форма, РазрешенДоступКИнтернетСервисам); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + ВидимостьСклоненияПредставленийОбъектов(Форма, РазрешенДоступКИнтернетСервисам); + КонецЕсли; КонецЕсли; @@ -196,8 +159,10 @@ Элементы = Форма.Элементы; - Элементы.ЦентрМониторингаАдресСервиса.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 1); - Элементы.ЦентрМониторингаНастройки.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные <> 2); + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); + + Элементы.ЦентрМониторингаАдресСервиса.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 1) И РазрешенДоступКИнтернетСервисам; + Элементы.ЦентрМониторингаНастройки.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные <> 2) И РазрешенДоступКИнтернетСервисам; Если Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Ложь, Ложь); @@ -218,11 +183,12 @@ ЦентрОбработкиИнформацииОПрограмме = ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме; Результат = ПолучитьПереключательОтправкиДанных(ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме); - Если Результат = 0 Или Результат = 1 Тогда + + Если РазрешенДоступКИнтернетСервисам И (Результат = 0 Или Результат = 1) Тогда РезультатЗапуска = МодульЦентрМониторингаСлужебный.ЗапускОтправкиОзнакомительногоПакета(); РегЗадание = МодульЦентрМониторингаСлужебный.ПолучитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики", Истина); МодульЦентрМониторингаСлужебный.УстановитьРасписаниеПоУмолчаниюВнешнийВызов(РегЗадание); - ИначеЕсли Результат = 2 Тогда + ИначеЕсли Результат = 2 Или Не РазрешенДоступКИнтернетСервисам Тогда МодульЦентрМониторингаСлужебный.УдалитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики"); МодульЦентрМониторингаСлужебный.ОтключитьРегистрациюСобытий(); КонецЕсли; @@ -281,8 +247,125 @@ #Область СлужебныеПроцедурыИФункции +#Область АдресныйКлассификатор + +Процедура ВидимостьНастройкиИспользоватьВебСервисАдресов(Форма, РазрешенДоступКИнтернетСервисам) + + Элементы = Форма.Элементы; + + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + Если Не МодульАдресныйКлассификаторСлужебный.ЕстьПравоДобавлениеИзменениеАдресныхСведений() Тогда + Элементы.АдресныйКлассификаторНастройки.Видимость = Ложь; + КонецЕсли; + + ЗначениеРеквизитаФормы = Новый Структура("ИспользоватьВебСервисАдресов", Неопределено); + ЗаполнитьЗначенияСвойств(ЗначениеРеквизитаФормы, Форма); + + Если ЗначениеРеквизитаФормы["ИспользоватьВебСервисАдресов"] <> Неопределено Тогда + Форма["ИспользоватьВебСервисАдресов"] = МодульАдресныйКлассификаторСлужебный.ИспользоватьВебСервис(); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ИспользоватьВебСервисАдресов", "Видимость", Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ИспользоватьВебСервисАдресов", "Доступность", РазрешенДоступКИнтернетСервисам); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ГруппаКомментарийРазрешенДоступКИнтернетСервисамАдресногоКлассификатора", "Видимость", + Не РазрешенДоступКИнтернетСервисам); + +КонецПроцедуры + +#КонецОбласти + +#Область СклонениеПредставленийОбъектов + +Процедура ВидимостьСклоненияПредставленийОбъектов(Форма, РазрешенДоступКИнтернетСервисам) + + Элементы = Форма.Элементы; + Элементы.ГруппаСклонения.Видимость = Не Форма.РазделениеВключено И Не Форма.ЭтоАвтономноеРабочееМесто + И Форма.ЭтоАдминистраторСистемы; + + Если Элементы.ГруппаСклонения.Видимость Тогда + + МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); + Форма.ИспользоватьСервисСклоненияMorpher = МодульСклонениеПредставленийОбъектов.ИспользоватьСервисСклоненияMorpher() + И РазрешенДоступКИнтернетСервисам; + Элементы.ИспользоватьСервисСклоненияMorpher.Доступность = РазрешенДоступКИнтернетСервисам; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ГруппаКомментарийРазрешенДоступКИнтернетСервисамСклонения", "Видимость", + Не РазрешенДоступКИнтернетСервисам); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область ЦентрМониторинга +Процедура ВидимостьНастройкиЦентрМониторинга(Форма, РазрешенДоступКИнтернетСервисам) + + Элементы = Форма.Элементы; + + Элементы.ГруппаЦентрМониторинга.Видимость = Форма.ЭтоАдминистраторСистемы; + + Если Форма.ЭтоАдминистраторСистемы Тогда + ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); + + Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = ПолучитьПереключательОтправкиДанных( + ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга, + ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме); + + ПараметрыСервиса = Новый Структура("Сервер, АдресРесурса, Порт"); + Если Не РазрешенДоступКИнтернетСервисам Или Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда + ПараметрыСервиса = Неопределено; + ИначеЕсли Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда + ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.СерверПоУмолчанию; + ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурсаПоУмолчанию; + ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.ПортПоУмолчанию; + ИначеЕсли Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда + ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.Сервер; + ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурса; + ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.Порт; + КонецЕсли; + + Если ПараметрыСервиса <> Неопределено Тогда + Если ПараметрыСервиса.Порт = 80 Тогда + Схема = "http://"; + Порт = ""; + ИначеЕсли ПараметрыСервиса.Порт = 443 Тогда + Схема = "https://"; + Порт = ""; + Иначе + Схема = "http://"; + Порт = ":" + Формат(ПараметрыСервиса.Порт, "ЧН=0; ЧГ="); + КонецЕсли; + + Форма.ЦентрМониторингаАдресСервиса = Схема + ПараметрыСервиса.Сервер + Порт + "/" + + ПараметрыСервиса.АдресРесурса; + Иначе + Форма.ЦентрМониторингаАдресСервиса = ""; + КонецЕсли; + + Элементы.ГруппаРазрешитьОтправлятьДанные.Доступность = РазрешенДоступКИнтернетСервисам; + Элементы.ГруппаСтороннему.Доступность = РазрешенДоступКИнтернетСервисам; + Элементы.ГруппаОтправкиДанныхНастройкаРесурсаОбщая.Доступность = РазрешенДоступКИнтернетСервисам; + Элементы.ГруппаЗапретитьОтправлятьДанные.Доступность = Истина; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ГруппаКомментарийРазрешенДоступКИнтернетСервисамЦентраМониторинга", "Видимость", + Не РазрешенДоступКИнтернетСервисам); + + Элементы.ЦентрМониторингаАдресСервиса.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные = 1) + И РазрешенДоступКИнтернетСервисам; + Элементы.ЦентрМониторингаНастройки.Доступность = (Форма.ЦентрМониторингаРазрешитьОтправлятьДанные <> 2); + Элементы.ГруппаОтправитьКонтактнуюИнформацию.Видимость = (ПараметрыЦентраМониторинга.ЗапросКонтактнойИнформации + <> 2) И РазрешенДоступКИнтернетСервисам; + + КонецЕсли; + +КонецПроцедуры + Функция ПолучитьПереключательОтправкиДанных(ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме) Состояние = ?(ВключитьЦентрМониторинга, "1", "0") + ?(ЦентрОбработкиИнформацииОПрограмме, "1", "0"); @@ -305,7 +388,9 @@ ПараметрыСервиса = Новый Структура("Сервер, АдресРесурса, Порт"); - Если ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + ПараметрыСервиса = Неопределено; + ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда ПараметрыСервиса.Сервер = ПараметрыЦентраМониторинга.СерверПоУмолчанию; ПараметрыСервиса.АдресРесурса = ПараметрыЦентраМониторинга.АдресРесурсаПоУмолчанию; ПараметрыСервиса.Порт = ПараметрыЦентраМониторинга.ПортПоУмолчанию; diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index 266720fcb..33b75d0bb 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -344,7 +344,7 @@ // - Строка // - Структура - информация об ошибке. // Число - код ошибки, см. ОбменДаннымиПовтИсп.СообщенияОбОшибках(). -// Строка - описание ошибки. +// Строка - описание ошибки: // Структура - структура с кратким и подробным описанием ошибки: // * КраткоеПредставлениеОшибки - описание ошибки для протокола (для пользователя). // * ПодробноеПредставлениеОшибки - описание ошибки для журнала регистрации. @@ -3007,7 +3007,7 @@ // Получает правила регистрации объектов для плана обмена. // // Параметры: -// УзелПланаОбмена - ПланОбменаСсылка - Ссылка на узел плана обмена +// УзелПланаОбмена - ПланОбменаСсылка - ссылка на узел плана обмена // // Возвращаемое значение: // ТаблицаЗначений @@ -3026,7 +3026,7 @@ // Получает свойства узла плана обмена. // // Параметры: -// Узел - ПланОбменаСсылка - Ссылка на узел плана обмена +// Узел - ПланОбменаСсылка - ссылка на узел плана обмена // // Возвращаемое значение: // Структура - ключ соответствует имени свойства, а значение - значению свойства. @@ -3189,12 +3189,15 @@ #Область ПроцедурыИФункцииВерсионированияФорматаОбмена // Возвращает менеджер обмена данными, соответствующий указанной версии формата обмена. -// +// // Параметры: -// ВерсияФормата - Строка. +// ВерсияФормата - Строка // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить менеджер обмена. -// Если обмен через формат осуществляется без использования плана обмена, -// УзелИнформационнойБазы не передается. +// Если обмен через формат осуществляется без использования плана обмена, +// УзелИнформационнойБазы не передается. +// +// Возвращаемое значение: +// ОбщийМодуль - менеджер обмена версии формата // Функция МенеджерОбменаВерсииФормата(Знач ВерсияФормата, Знач УзелИнформационнойБазы = Неопределено) Экспорт @@ -3211,13 +3214,16 @@ КонецФункции // Возвращает строку с форматом обмена. -// Формат обмена включает: -// Базовый формат, предусмотренный для плана обмена. -// Версию базового формата. -// +// Формат обмена включает: +// Базовый формат, предусмотренный для плана обмена. +// Версию базового формата. +// // Параметры: -// ИмяПланаОбмена - Строка. -// ВерсияФормата - Строка. +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// ВерсияФормата - Строка +// +// Возвращаемое значение: +// Строка // Функция ФорматОбмена(Знач ИмяПланаОбмена, Знач ВерсияФормата) Экспорт @@ -3232,9 +3238,12 @@ КонецФункции // Возвращает строку с номером версии формата обмена, поддерживаемой получателем данных. -// +// // Параметры: -// Получатель - ссылка на узел плана обмена, в который производится выгрузка данных. +// Получатель - ПланОбменаСсылка - ссылка на узел плана обмена, в который производится выгрузка данных. +// +// Возвращаемое значение: +// Строка // Функция ВерсияФорматаОбменаПриВыгрузке(Знач Получатель) Экспорт @@ -3250,7 +3259,13 @@ КонецФункции // Возвращает признак поддерживается ли для узла версия формата, для которой предусмотрена кодировка узлов -// с использованием уникальных идентификаторов. +// с использованием уникальных идентификаторов. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел плана обмена +// +// Возвращаемое значение: +// Булево // Функция ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(Знач УзелИнформационнойБазы) Экспорт @@ -3308,12 +3323,12 @@ // Функция возвращает массив узлов, в которые объект ранее выгружался. // // Параметры: -// Ссылка - ссылка на объект ИБ, для которого необходимо получить массив узлов. +// Ссылка - ЛюбаяСсылка - ссылка на объект ИБ, для которого необходимо получить массив узлов. // ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, по которому определяются узлы. // ИмяРеквизитаФлага - Строка - имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов. // Возвращаемое значение: -// МассивУзлов - массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости», изначально -// пуст. +// Массив из ПланОбменаСсылка - массив узлов плана обмена, для которых установлен признак «Выгружать при +// необходимости», изначально пуст. // Функция МассивУзловДляРегистрацииВыгружатьПриНеобходимости(Ссылка, ИмяПланаОбмена, ИмяРеквизитаФлага) Экспорт @@ -3343,7 +3358,7 @@ Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Объект", Ссылка); - Запрос.УстановитьПараметр("ПометкаУдаления", Ссылка.ПометкаУдаления); + Запрос.УстановитьПараметр("ПометкаУдаления", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ПометкаУдаления")); МассивУзлов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); @@ -3520,6 +3535,88 @@ Возврат ПравилаОбработкиДанных; КонецФункции +Функция СообщениеОбменаВНастройкиПодключения(ТекстXML) Экспорт + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстXML); + + ЧтениеXML.Прочитать(); // Message + ЧтениеXML.Прочитать(); // Header + + ЗаголовокСообщенияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, + ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", ЧтениеXML.ЛокальноеИмя)); + + СтруктураНастроекXDTO = СтруктураНастроекXDTO(); + + ИмяПланаОбмена = ЗаголовокСообщенияXDTO.Confirmation.ExchangePlan; + УзелОбмена = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(); + ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроекXDTO, ЗаголовокСообщенияXDTO, , УзелОбмена); + + // Проверка UID отправителя на соответствие формату. + УИД = ЗаголовокСообщенияXDTO.Confirmation.From; + Попытка + УИД = Новый УникальныйИдентификатор(УИД); + Исключение + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор отправителя <%1> в файле с настройками EnterpriseData не соответствует ожидаемому формату GUID.'"), + УИД); + КонецПопытки; + + СтруктураНастроекXDTO.Вставить("ИдентификаторОтправителя", ЗаголовокСообщенияXDTO.Confirmation.From); + + ЧтениеXML.Закрыть(); + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.СтруктураНастроекПодключения(); + НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбмена; + + НастройкиПодключения.КодНовогоУзлаВторойБазы = СтруктураНастроекXDTO.ИдентификаторОтправителя; + НастройкиПодключения.ВерсияФорматаОбмена = + МаксимальнаяОбщаяВерсияФормата(ИмяПланаОбмена, СтруктураНастроекXDTO.ПоддерживаемыеВерсии); + НастройкиПодключения.ПоддерживаемыеОбъектыФорматаКорреспондента = Новый ХранилищеЗначения(СтруктураНастроекXDTO.ПоддерживаемыеОбъекты, Новый СжатиеДанных(9)); + НастройкиПодключения.ФорматОбмена = СтруктураНастроекXDTO.Формат; + НастройкиПодключения.ИдентификаторТранспорта = "ПассивныйРежим"; + + Возврат НастройкиПодключения; + +КонецФункции + +Функция НастройкиПодключенияВСообщениеОбмена(НастройкиПодключения) Экспорт + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + УзелКорреспондента = НастройкиПодключения.УзелИнформационнойБазы; + + ПараметрыЗаголовка = ПараметрыЗаголовкаСообщенияОбмена(); + + ПараметрыЗаголовка.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + ПараметрыЗаголовка.ЭтоОбменЧерезПланОбмена = Истина; + + ПараметрыЗаголовка.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбмена; + ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(УзелКорреспондента); + + ПараметрыЗаголовка.ИдентификаторПолучателя = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(УзелКорреспондента); + ПараметрыЗаголовка.ИдентификаторОтправителя = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(УзелКорреспондента); + + ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(НастройкиПодключения.ИмяПланаОбмена, "ВерсииФорматаОбмена"); + Для Каждого ВерсияФормата Из ВерсииФормата Цикл + ПараметрыЗаголовка.ПоддерживаемыеВерсии.Добавить(ВерсияФормата.Ключ); + КонецЦикла; + + ПараметрыЗаголовка.ПоддерживаемыеОбъекты = ПоддерживаемыеОбъектыФормата( + НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", УзелКорреспондента); + + ПараметрыЗаголовка.Префикс = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); + + ПараметрыЗаголовка.УзелКорреспондента = УзелКорреспондента; + + ЗаписатьЗаголовокСообщенияОбмена(ЗаписьXML, ПараметрыЗаголовка); + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + #КонецОбласти #КонецОбласти @@ -4190,6 +4287,7 @@ | #ТаблицаИзменений КАК ТаблицаИзменений |ГДЕ | ТаблицаИзменений.Узел = &Узел + | И ТаблицаИзменений.НомерСообщения = &НомерСообщения |; | |//////////////////////////////////////////////////////////////////////////////// @@ -4212,6 +4310,7 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ТаблицаИзменений", ТипОбъекта.ПолноеИмя() + ".Изменения"); //@Query-part-2 Запрос.УстановитьПараметр("Узел", УзелДляОбмена); + Запрос.УстановитьПараметр("НомерСообщения", НомерСообщения); РезультатЗапроса = Запрос.ВыполнитьПакет(); @@ -4223,7 +4322,7 @@ КомпонентыОбмена.СчетчикВыгруженныхОбъектов = КомпонентыОбмена.СчетчикВыгруженныхОбъектов + 1; ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(КомпонентыОбмена.СчетчикВыгруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКВыгрузке); - + КонецЦикла; МассивДанных = РезультатЗапроса[2].Выгрузить().ВыгрузитьКолонку("Ссылка"); @@ -4290,9 +4389,9 @@ КонецЦикла; КонецЕсли; - - КонецЦикла; + КонецЦикла; + КонецПроцедуры Процедура ВыполнитьВыгрузкуЗарегистрированныхДанныхБезПакетнойРегистрации( @@ -4363,7 +4462,7 @@ Если Не КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда Возврат; КонецЕсли; - + Для Каждого ЗначениеСсылки Из СсылкиИзОбъекта Цикл Если КомпонентыОбмена.ВыгруженныеОбъекты.Найти(ЗначениеСсылки) = Неопределено @@ -4389,7 +4488,7 @@ РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ДобавитьОбъектВФильтрРазрешенныхОбъектов( ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента); - КомпонентыОбмена.КешДанныхОбъектовДляРегистрацииВОбменах.Вставить(ЗначениеСсылки); + КомпонентыОбмена.КешДанныхОбъектовДляРегистрацииВОбменах.Вставить(ЗначениеСсылки, Истина); КонецЕсли; @@ -4632,7 +4731,7 @@ Функция КонвертироватьСсылкуВXDTO(КомпонентыОбмена, ЗначениеСсылки, ТипСсылкиXDTO) Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - + УИДОбъектаXDTO = КомпонентыОбмена.КешПубличныхИдентификаторов.Получить(ЗначениеСсылки); Если УИДОбъектаXDTO = Неопределено Тогда @@ -4906,7 +5005,7 @@ // ФайлОбмена - ЗаписьXML - объект для записи заголовка. // ПараметрыЗаголовка - см. ОбменДаннымиXDTOСервер.ПараметрыЗаголовкаСообщенияОбмена // -Процедура ЗаписатьЗаголовокСообщенияОбмена(ФайлОбмена, ПараметрыЗаголовка) Экспорт +Процедура ЗаписатьЗаголовокСообщенияОбмена(ФайлОбмена, ПараметрыЗаголовка) // Записываем элемент ФайлОбмена.ЗаписатьНачалоЭлемента("Message"); @@ -7268,8 +7367,8 @@ // УзелОбмена - ПланОбменаСсылка // - Неопределено - узел плана обмена. // -Процедура ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, - Header, ФорматСодержитВерсию = Истина, УзелОбмена = Неопределено) Экспорт +Процедура ЗаполнитьСтруктуруНастроекXDTOКорреспондента( + СтруктураНастроек, Header, ФорматСодержитВерсию = Истина, УзелОбмена = Неопределено) Если ФорматСодержитВерсию Тогда ФорматОбмена = РазложитьФорматОбмена(Header.Format); @@ -7988,25 +8087,25 @@ ЗначениеСвойства = Неопределено; - Если КоллекцияСвойств.Свойство("Наименование", ЗначениеСвойства) // @Non-NLS - И ЗначениеЗаполнено(ЗначениеСвойства) Тогда + Если КоллекцияСвойств.Свойство("Наименование", ЗначениеСвойства) + И ЗначениеЗаполнено(ЗначениеСвойства) Тогда // @Non-NLS ЭлементыПредставления.Добавить(СокрЛП(ЗначениеСвойства)); КонецЕсли; - Если КоллекцияСвойств.Свойство("Код", ЗначениеСвойства) // @Non-NLS - И ЗначениеЗаполнено(ЗначениеСвойства) Тогда + Если КоллекцияСвойств.Свойство("Код", ЗначениеСвойства) + И ЗначениеЗаполнено(ЗначениеСвойства) Тогда // @Non-NLS ЭлементыПредставления.Добавить("(" + СокрЛП(ЗначениеСвойства) + ")"); - ИначеЕсли КоллекцияСвойств.Свойство("КодВПрограмме", ЗначениеСвойства) // @Non-NLS - И ЗначениеЗаполнено(ЗначениеСвойства) Тогда + ИначеЕсли КоллекцияСвойств.Свойство("КодВПрограмме", ЗначениеСвойства) + И ЗначениеЗаполнено(ЗначениеСвойства) Тогда // @Non-NLS ЭлементыПредставления.Добавить("(" + СокрЛП(ЗначениеСвойства) + ")"); КонецЕсли; - Если КоллекцияСвойств.Свойство("Номер", ЗначениеСвойства) // @Non-NLS - И ЗначениеЗаполнено(ЗначениеСвойства) Тогда + Если КоллекцияСвойств.Свойство("Номер", ЗначениеСвойства) + И ЗначениеЗаполнено(ЗначениеСвойства) Тогда // @Non-NLS ЗначениеСвойстваДата = Неопределено; - Если КоллекцияСвойств.Свойство("Дата", ЗначениеСвойстваДата) // @Non-NLS - И ЗначениеЗаполнено(ЗначениеСвойстваДата) Тогда + Если КоллекцияСвойств.Свойство("Дата", ЗначениеСвойстваДата) + И ЗначениеЗаполнено(ЗначениеСвойстваДата) Тогда // @Non-NLS ЭлементыПредставления.Добавить( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№%1 от %2'"), ЗначениеСвойства, Формат(ЗначениеСвойстваДата, "ДЛФ=D"))); Иначе @@ -8014,8 +8113,8 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№%1'"), ЗначениеСвойства)); КонецЕсли; - ИначеЕсли КоллекцияСвойств.Свойство("Дата", ЗначениеСвойства) // @Non-NLS - И ЗначениеЗаполнено(ЗначениеСвойства) Тогда + ИначеЕсли КоллекцияСвойств.Свойство("Дата", ЗначениеСвойства) + И ЗначениеЗаполнено(ЗначениеСвойства) Тогда // @Non-NLS ЭлементыПредставления.Добавить( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'от %1'"), ЗначениеСвойства)); @@ -8274,7 +8373,7 @@ // Параметры: // УзелИнформационнойБазы - ссылка на узел-корреспондент. // -Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы) Экспорт +Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы) Возврат СортироватьВерсииФормата(ВерсииФорматаОбмена(УзелИнформационнойБазы)); @@ -8347,7 +8446,7 @@ #Область Прочее -Функция СтруктураНастроекXDTO() Экспорт +Функция СтруктураНастроекXDTO() Результат = Новый Структура; @@ -8365,14 +8464,14 @@ // Разбирает строку на две части: до подстроки разделителя и после. // // Параметры: -// Стр - разбираемая строка; -// Разделитель - подстрока-разделитель: -// Режим - 0 - разделитель в возвращаемые подстроки не включается; -// 1 - разделитель включается в левую подстроку; -// 2 - разделитель включается в правую подстроку. +// Стр - Строка - разбираемая строка; +// Разделитель - Строка - подстрока-разделитель: +// Режим - Число - 0 - разделитель в возвращаемые подстроки не включается; +// 1 - разделитель включается в левую подстроку; +// 2 - разделитель включается в правую подстроку. // // Возвращаемое значение: -// Правая часть строки - до символа-разделителя. +// Строка - правая часть строки - до символа-разделителя. // Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl index 88bfdae2a..8e4aa18e9 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -214,13 +214,16 @@ Метаданные.Справочники.СценарииОбменовДанными, МодульВыгрузкаЗагрузкаДанных.ДействиеСоСсылкамиНеВыгружатьОбъект()); МодульВыгрузкаЗагрузкаДанных.ДополнитьТипомИсключаемымИзВыгрузкиЗагрузки(Типы, - Метаданные.Справочники.СеансыОбменовДанными, МодульВыгрузкаЗагрузкаДанных.ДействиеСоСсылкамиНеВыгружатьОбъект()); + Метаданные.Справочники.СеансыОбменовДанными, МодульВыгрузкаЗагрузкаДанных.ДействиеСоСсылкамиНеВыгружатьОбъект()); + + МодульВыгрузкаЗагрузкаДанных.ДополнитьТипомИсключаемымИзВыгрузкиЗагрузки(Типы, + Метаданные.Справочники.НастройкиТранспортаСообщенийОбмена, МодульВыгрузкаЗагрузкаДанных.ДействиеСоСсылкамиНеВыгружатьОбъект()); МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); ВерсияБТС = МодульТехнологияСервиса.ВерсияБиблиотеки(); Типы.Добавить(Метаданные.РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз); - Типы.Добавить(Метаданные.РегистрыСведений.НастройкиТранспортаОбменаДанными); + Типы.Добавить(Метаданные.РегистрыСведений.УдалитьНастройкиТранспортаОбменаДанными); Типы.Добавить(Метаданные.РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных); Типы.Добавить(Метаданные.РегистрыСведений.СообщенияОбменаДаннымиОбластейДанных); Типы.Добавить(Метаданные.РегистрыСведений.УдалитьРезультатыОбменаДанными); @@ -454,8 +457,9 @@ // 4. Не входит в список исключений. // // Параметры: -// Объект - Произвольный - Объект-источник данных +// Объект - Произвольный - объект-источник данных // Отказ - Булево - флаг отказа +// Процедура ПередЗаписьюОбщихДанных(Объект, Отказ) Экспорт Если Объект.ОбменДанными.Загрузка Тогда @@ -577,7 +581,7 @@ МодульОбменСообщениями.ОтправитьСообщение("ОбменДанными\УправляющееПриложение\ПризнакИзмененияДанных", Новый Структура("КодУзла", ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ОбластьДанных)), МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса()); - + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -656,7 +660,7 @@ Обработчик.ОбщиеДанные = Истина; Обработчик.МонопольныйРежим = Ложь; Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.ЗаблокироватьКонечныеТочки"; - + КонецПроцедуры // Заполняет обработчик разделенных данных, зависимый от изменения неразделенных данных. @@ -672,11 +676,19 @@ Процедура ЗаполнитьОбработчикиРазделенныхДанных(Параметры = Неопределено) Экспорт Если Параметры <> Неопределено Тогда + Обработчики = Параметры.РазделенныеОбработчики; Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьКодыПредопределенныхУзлов"; + + Обработчики = Параметры.РазделенныеОбработчики; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "Справочники.НастройкиТранспортаСообщенийОбмена.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + КонецЕсли; КонецПроцедуры @@ -908,6 +920,9 @@ // // Формирует имя приложения в сервисе +// +// Возвращаемое значение: +// Строка - имя приложения. // Функция СформироватьНаименованиеПредопределенногоУзла() Экспорт @@ -1062,12 +1077,160 @@ КонецПроцедуры +// Отправляет сообщение +// +// Параметры: +// Сообщение - ОбъектXDTO - сообщение. +// +// Возвращаемое значение: +// УникальныйИдентификатор - идентификатор новой сессии +// +Функция ОтправитьСообщение(Знач Сообщение) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда + ВызватьИсключение НСтр("ru = 'Отсутствует менеджер сервиса.'"); + КонецЕсли; + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса"); + МодульРаботаВМоделиСервисаБТСПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТСПовтИсп"); + + Сообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + Сообщение.Body.SessionId = РегистрыСведений.СессииОбменаСообщениямиСистемы.НоваяСессия(); + + МодульСообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, + МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса(), + Истина); + + Возврат Сообщение.Body.SessionId; + +КонецФункции + +Процедура ОбновитьНастройкиТранспортаОбластиДанных(Параметры) Экспорт + + Корреспондент = Параметры.Корреспондент; + КодЭтогоУзла = Параметры.КодЭтогоУзла; + КодКорреспондента = Параметры.КодКорреспондента; + КонечнаяТочкаКорреспондента = Параметры.КонечнаяТочкаКорреспондента; + ЭтоКорреспондент = Параметры.ЭтоКорреспондент; + РежимСовместимостиСБСП_2_0_0 = Параметры.РежимСовместимостиСБСП_2_0_0; + ПсевдонимЭтогоУзла = Параметры.ПсевдонимЭтогоУзла; + + Если ЭтоКорреспондент Тогда + Если Не ПустаяСтрока(ПсевдонимЭтогоУзла) Тогда + ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(КодКорреспондента, ПсевдонимЭтогоУзла); + Иначе + ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(КодКорреспондента, КодЭтогоУзла); + КонецЕсли; + Иначе + Если Не ПустаяСтрока(ПсевдонимЭтогоУзла) Тогда + ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(ПсевдонимЭтогоУзла, КодКорреспондента); + Иначе + ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(КодЭтогоУзла, КодКорреспондента); + КонецЕсли; + КонецЕсли; + + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаОбластейДанных.НастройкиТранспорта(КонечнаяТочкаКорреспондента); + + Если НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + + // Обмен через сетевой каталог + + FILEОбщийКаталогОбменаИнформацией = СокрЛП(НастройкиТранспорта.FILEКаталогОбменаИнформацией); + + Если ПустаяСтрока(FILEОбщийКаталогОбменаИнформацией) Тогда + + СтрокаСообщения = НСтр("ru = 'Не задан каталог обмена информацией для конечной точки ""%1"".'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(КонечнаяТочкаКорреспондента)); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + ОбщийКаталог = Новый Файл(FILEОбщийКаталогОбменаИнформацией); + + Если Не ОбщийКаталог.Существует() Тогда + + СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией ""%1"" не существует.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, FILEОбщийКаталогОбменаИнформацией); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + Если Не РежимСовместимостиСБСП_2_0_0 Тогда + + FILEАбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + FILEОбщийКаталогОбменаИнформацией, + ОтносительныйКаталогОбменаИнформацией); + + // Создаем каталог обмена сообщениями + АбсолютныйКаталог = Новый Файл(FILEАбсолютныйКаталогОбменаИнформацией); + Если Не АбсолютныйКаталог.Существует() Тогда + СоздатьКаталог(АбсолютныйКаталог.ПолноеИмя); + КонецЕсли; + + // Сохраняем настройки транспорта сообщений обмена для текущей области данных + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Корреспондент", Корреспондент); + СтруктураЗаписи.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); + СтруктураЗаписи.Вставить("КаталогОбменаИнформацией", ОтносительныйКаталогОбменаИнформацией); + + РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных.ОбновитьЗапись(СтруктураЗаписи); + КонецЕсли; + + ИначеЕсли НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + + // Обмен через FTP-сервер + + НастройкиFTP = ТранспортСообщенийОбмена.FTPНастройкиСоединения(); + НастройкиFTP.Сервер = НастройкиТранспорта.FTPСервер; + НастройкиFTP.Порт = НастройкиТранспорта.FTPСоединениеПорт; + НастройкиFTP.ИмяПользователя = НастройкиТранспорта.FTPСоединениеПользователь; + НастройкиFTP.ПарольПользователя = НастройкиТранспорта.FTPСоединениеПароль; + НастройкиFTP.ПассивноеСоединение = НастройкиТранспорта.FTPСоединениеПассивноеСоединение; + НастройкиFTP.ЗащищенноеСоединение = ОбменДаннымиСервер.ЗащищенноеСоединение(НастройкиТранспорта.FTPСоединениеПуть); + + FTPСоединение = ТранспортСообщенийОбмена.FTPСоединение(НастройкиFTP); + + АбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + НастройкиТранспорта.FTPПуть, + ОтносительныйКаталогОбменаИнформацией); + + Если Не ТранспортСообщенийОбмена.FTPКаталогСуществует(АбсолютныйКаталогОбменаИнформацией, ОтносительныйКаталогОбменаИнформацией, FTPСоединение) Тогда + FTPСоединение.СоздатьКаталог(АбсолютныйКаталогОбменаИнформацией); + КонецЕсли; + + // Сохраняем настройки транспорта сообщений обмена для текущей области данных + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Корреспондент", Корреспондент); + СтруктураЗаписи.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); + СтруктураЗаписи.Вставить("КаталогОбменаИнформацией", ОтносительныйКаталогОбменаИнформацией); + + РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных.ОбновитьЗапись(СтруктураЗаписи); + + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вид транспорта сообщений обмена ""%1"" для конечной точки %2 не поддерживается.'"), + Строка(НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию), + Строка(КонечнаяТочкаКорреспондента)); + КонецЕсли; + +КонецПроцедуры + +// Событие для журнала регистрации настройки синхронизации данных +// +// Возвращаемое значение: +// Строка - событие журнала регистрации строкой +// +Функция СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных() Экспорт + + Возврат НСтр("ru = 'Обмен данными в модели сервиса.Настройка синхронизации данных'", + ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Выполняет выгрузку данных в обмене между областями данных. // @@ -1080,9 +1243,10 @@ ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + ПараметрыОбмена.ИдентификаторТранспорта = "SM"; - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Корреспондент, - ПараметрыОбмена, Отказ); + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Корреспондент, ПараметрыОбмена, Отказ); КонецПроцедуры @@ -1097,14 +1261,11 @@ ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ИдентификаторТранспорта = "SM"; + ПараметрыОбмена.СообщениеДляСопоставленияДанных = СообщениеДляСопоставленияДанных; - ДополнительныеПараметры = Новый Структура; - Если СообщениеДляСопоставленияДанных Тогда - ДополнительныеПараметры.Вставить("СообщениеДляСопоставленияДанных"); - КонецЕсли; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Корреспондент, - ПараметрыОбмена, Отказ, ДополнительныеПараметры); + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + Корреспондент, ПараметрыОбмена, Отказ); КонецПроцедуры @@ -1385,7 +1546,7 @@ Попытка - НастройкиFTP = ОбменДаннымиСервер.FTPНастройкиСоединения(); + НастройкиFTP = ТранспортСообщенийОбмена.FTPНастройкиСоединения(); НастройкиFTP.Сервер = НастройкиТранспорта.FTPСервер; НастройкиFTP.Порт = НастройкиТранспорта.FTPСоединениеПорт; НастройкиFTP.ИмяПользователя = НастройкиТранспорта.FTPСоединениеПользователь; @@ -1393,10 +1554,15 @@ НастройкиFTP.ПассивноеСоединение = НастройкиТранспорта.FTPСоединениеПассивноеСоединение; НастройкиFTP.ЗащищенноеСоединение = ОбменДаннымиСервер.ЗащищенноеСоединение(НастройкиТранспорта.FTPСоединениеПуть); - FTPСоединение = ОбменДаннымиСервер.FTPСоединение(НастройкиFTP); + FTPСоединение = ТранспортСообщенийОбмена.FTPСоединение(НастройкиFTP); - Если ОбменДаннымиСервер.FTPКаталогСуществует(НастройкиТранспорта.FTPПуть, НастройкиТранспорта.ОтносительныйКаталогОбменаИнформацией, FTPСоединение) Тогда + Если ТранспортСообщенийОбмена.FTPКаталогСуществует( + НастройкиТранспорта.FTPПуть, + НастройкиТранспорта.ОтносительныйКаталогОбменаИнформацией, + FTPСоединение) Тогда + FTPСоединение.Удалить(НастройкиТранспорта.FTPПуть); + КонецЕсли; Исключение @@ -1663,31 +1829,6 @@ КонецФункции -// Отправляет сообщение -// -// Параметры: -// Сообщение - ОбъектXDTO - сообщение. -// -Функция ОтправитьСообщение(Знач Сообщение) Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда - ВызватьИсключение НСтр("ru = 'Отсутствует менеджер сервиса.'"); - КонецЕсли; - - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса"); - МодульРаботаВМоделиСервисаБТСПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаБТСПовтИсп"); - - Сообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); - Сообщение.Body.SessionId = РегистрыСведений.СессииОбменаСообщениямиСистемы.НоваяСессия(); - - МодульСообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, - МодульРаботаВМоделиСервисаБТСПовтИсп.КонечнаяТочкаМенеджераСервиса(), - Истина); - - Возврат Сообщение.Body.SessionId; -КонецФункции - Функция ОписаниеWSПроксиКорреспондента(Корреспондент) Описание = Новый Структура; @@ -2011,6 +2152,14 @@ Параметры.Вставить("ПсевдонимЭтогоУзла", ПсевдонимЭтогоУзла); ОбновитьНастройкиТранспортаОбластиДанных(Параметры); + + НастройкиТранспорта = Новый Структура; + НастройкиТранспорта.Вставить("КонечнаяТочкаКорреспондента", НастройкиПодключения.КонечнаяТочкаКорреспондента); + НастройкиТранспорта.Вставить("НаименованиеКорреспондента", НастройкиПодключения.НаименованиеКорреспондента); + НастройкиТранспорта.Вставить("ОбластьДанныхКорреспондента", НастройкиПодключения.ОбластьДанныхКорреспондента); + НастройкиТранспорта.Вставить("ВнутренняяПубликация", Ложь); + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта(Корреспондент, "SM", НастройкиТранспорта, Истина); НастройкиПодключения.Корреспондент = Корреспондент; @@ -2022,113 +2171,6 @@ КонецПроцедуры -Процедура ОбновитьНастройкиТранспортаОбластиДанных(Параметры) - - Корреспондент = Параметры.Корреспондент; - КодЭтогоУзла = Параметры.КодЭтогоУзла; - КодКорреспондента = Параметры.КодКорреспондента; - КонечнаяТочкаКорреспондента = Параметры.КонечнаяТочкаКорреспондента; - ЭтоКорреспондент = Параметры.ЭтоКорреспондент; - РежимСовместимостиСБСП_2_0_0 = Параметры.РежимСовместимостиСБСП_2_0_0; - ПсевдонимЭтогоУзла = Параметры.ПсевдонимЭтогоУзла; - - Если ЭтоКорреспондент Тогда - Если Не ПустаяСтрока(ПсевдонимЭтогоУзла) Тогда - ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(КодКорреспондента, ПсевдонимЭтогоУзла); - Иначе - ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(КодКорреспондента, КодЭтогоУзла); - КонецЕсли; - Иначе - Если Не ПустаяСтрока(ПсевдонимЭтогоУзла) Тогда - ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(ПсевдонимЭтогоУзла, КодКорреспондента); - Иначе - ОтносительныйКаталогОбменаИнформацией = ИмяКаталогаСообщенийОбмена(КодЭтогоУзла, КодКорреспондента); - КонецЕсли; - КонецЕсли; - - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаОбластейДанных.НастройкиТранспорта(КонечнаяТочкаКорреспондента); - - Если НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - - // Обмен через сетевой каталог - - FILEОбщийКаталогОбменаИнформацией = СокрЛП(НастройкиТранспорта.FILEКаталогОбменаИнформацией); - - Если ПустаяСтрока(FILEОбщийКаталогОбменаИнформацией) Тогда - - СтрокаСообщения = НСтр("ru = 'Не задан каталог обмена информацией для конечной точки ""%1"".'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(КонечнаяТочкаКорреспондента)); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - ОбщийКаталог = Новый Файл(FILEОбщийКаталогОбменаИнформацией); - - Если Не ОбщийКаталог.Существует() Тогда - - СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией ""%1"" не существует.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, FILEОбщийКаталогОбменаИнформацией); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - Если Не РежимСовместимостиСБСП_2_0_0 Тогда - - FILEАбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - FILEОбщийКаталогОбменаИнформацией, - ОтносительныйКаталогОбменаИнформацией); - - // Создаем каталог обмена сообщениями - АбсолютныйКаталог = Новый Файл(FILEАбсолютныйКаталогОбменаИнформацией); - Если Не АбсолютныйКаталог.Существует() Тогда - СоздатьКаталог(АбсолютныйКаталог.ПолноеИмя); - КонецЕсли; - - // Сохраняем настройки транспорта сообщений обмена для текущей области данных - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", Корреспондент); - СтруктураЗаписи.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); - СтруктураЗаписи.Вставить("КаталогОбменаИнформацией", ОтносительныйКаталогОбменаИнформацией); - - РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных.ОбновитьЗапись(СтруктураЗаписи); - КонецЕсли; - - ИначеЕсли НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - // Обмен через FTP-сервер - - НастройкиFTP = ОбменДаннымиСервер.FTPНастройкиСоединения(); - НастройкиFTP.Сервер = НастройкиТранспорта.FTPСервер; - НастройкиFTP.Порт = НастройкиТранспорта.FTPСоединениеПорт; - НастройкиFTP.ИмяПользователя = НастройкиТранспорта.FTPСоединениеПользователь; - НастройкиFTP.ПарольПользователя = НастройкиТранспорта.FTPСоединениеПароль; - НастройкиFTP.ПассивноеСоединение = НастройкиТранспорта.FTPСоединениеПассивноеСоединение; - НастройкиFTP.ЗащищенноеСоединение = ОбменДаннымиСервер.ЗащищенноеСоединение(НастройкиТранспорта.FTPСоединениеПуть); - - FTPСоединение = ОбменДаннымиСервер.FTPСоединение(НастройкиFTP); - - АбсолютныйКаталогОбменаИнформацией = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - НастройкиТранспорта.FTPПуть, - ОтносительныйКаталогОбменаИнформацией); - Если Не ОбменДаннымиСервер.FTPКаталогСуществует(АбсолютныйКаталогОбменаИнформацией, ОтносительныйКаталогОбменаИнформацией, FTPСоединение) Тогда - FTPСоединение.СоздатьКаталог(АбсолютныйКаталогОбменаИнформацией); - КонецЕсли; - - // Сохраняем настройки транспорта сообщений обмена для текущей области данных - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", Корреспондент); - СтруктураЗаписи.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); - СтруктураЗаписи.Вставить("КаталогОбменаИнформацией", ОтносительныйКаталогОбменаИнформацией); - - РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных.ОбновитьЗапись(СтруктураЗаписи); - - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид транспорта сообщений обмена ""%1"" для конечной точки %2 не поддерживается.'"), - Строка(НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию), - Строка(КонечнаяТочкаКорреспондента)); - КонецЕсли; - -КонецПроцедуры - // Обновляет настройки и устанавливает значения по умолчанию на узле // Процедура ОбновитьНастройкуОбмена( @@ -2216,6 +2258,9 @@ КонецПроцедуры // Возвращает минимально необходимую версию платформы +// +// Возвращаемое значение: +// Строка // Функция ТребуемаяВерсияПлатформы() Экспорт @@ -2234,16 +2279,10 @@ КонецФункции -// Событие для журнала регистрации настройки синхронизации данных -// -Функция СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных() Экспорт - - Возврат НСтр("ru = 'Обмен данными в модели сервиса.Настройка синхронизации данных'", - ОбщегоНазначения.КодОсновногоЯзыка()); - -КонецФункции - // Событие для журнала регистрации монитора синхронизации данных +// +// Возвращаемое значение: +// Строка - событие журнала регистрации строкой // Функция СобытиеЖурналаРегистрацииМониторСинхронизацииДанных() Экспорт @@ -2253,6 +2292,9 @@ КонецФункции // Событие для журнала регистрации синхронизации данных +// +// Возвращаемое значение: +// Строка - событие журнала регистрации строкой // Функция СобытиеЖурналаРегистрацииСинхронизацииДанных() Экспорт @@ -2269,11 +2311,20 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции монитора обмена данными +#КонецОбласти + +#Область ПроцедурыИФункцииМонитораОбменаДанными // Для внутреннего использования // +// Параметры: +// ПланыОбменаМетода - Массив из Строка - массив имен планов обмена, как в конфигурации +// ДополнительныеСвойстваПланаОбмена - Строка - дополнительные свойства плана обмена +// ТолькоНеуспешные - Булево +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица монитора обмена данными +// Функция ТаблицаМонитораОбменаДанными(Знач ПланыОбменаМетода, Знач ДополнительныеСвойстваПланаОбмена = "", Знач ТолькоНеуспешные = Ложь) Экспорт ТекстЗапроса = "ВЫБРАТЬ @@ -2542,8 +2593,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции +#КонецОбласти + +#Область ЛокальныеСлужебныеПроцедурыИФункции Функция НайтиУзелИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла) @@ -2674,8 +2726,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Получение ссылок на общие страницы информации сервиса +#КонецОбласти + +#Область ПолучениеСсылокНаОбщиеСтраницыИнформацииСервиса // Возвращает адрес ссылки по идентификатору // Для внутреннего использования. @@ -2706,6 +2759,9 @@ // Возвращает адрес ссылки на статью по настройке тонкого клиента // Для внутреннего использования. +// +// Возвращаемое значение: +// Строка // Функция АдресИнструкцииПоНастройкеТонкогоКлиента() Экспорт @@ -2725,4 +2781,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl index d6aaedb99..8e03792b3 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl @@ -41,8 +41,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики служебных событий подсистем БСП +#Область ОбработчикиСлужебныхСобытийПодсистемБСП // Доопределяет список предупреждений пользователю перед завершением работы системы. // @@ -83,3 +82,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl index 8435d8741..3c81a5262 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -9,6 +9,9 @@ #Область СлужебныйПрограммныйИнтерфейс // Возвращает Истину, если синхронизация данных в модели сервиса поддерживается +// +// Возвращаемое значение: +// Булево // Функция СинхронизацияДанныхПоддерживается() Экспорт @@ -17,12 +20,14 @@ КонецФункции // Возвращает коллекцию планов обмена, используемых для синхронизации. -// // План обмена для организации синхронизации данных в модели сервиса должен: // - быть подключенным к подсистеме обмена данными БСП, // - быть разделенным, // - быть планом обмена Не РИБ, // - использоваться для обмена в модели сервиса (ПланОбменаИспользуетсяВМоделиСервиса = Истина). +// +// Возвращаемое значение: +// Массив из Строка - Массив из имен планов обмена, используемых для синхронизации // Функция ПланыОбменаСинхронизацииДанных() Экспорт @@ -120,6 +125,14 @@ КонецФункции // Возвращает ссылку на объект WSПрокси версии 2.1.6.1 корреспондента, идентифицируемого узлом плана обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка +// СтрокаСообщенияОбОшибке - Строка - значение по умолчанию = "". +// +// Возвращаемое значение: +// - Неопределено - если не удалось создать WSПрокси +// - WSПрокси // Функция ПолучитьWSПроксиКорреспондента_2_1_6_1(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт @@ -132,6 +145,14 @@ КонецФункции // Возвращает ссылку на объект WSПрокси версии 2.4.5.1 корреспондента, идентифицируемого узлом плана обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка +// СтрокаСообщенияОбОшибке - Строка - значение по умолчанию = "". +// +// Возвращаемое значение: +// - Неопределено - если не удалось создать WSПрокси +// - WSПрокси // Функция ПолучитьWSПроксиКорреспондента_2_4_5_1(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт @@ -144,6 +165,12 @@ КонецФункции // Возвращает Истину, если этот план обмена используется для синхронизации данных в модели сервиса. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как задано в конфигураторе +// +// Возвращаемое значение: +// Булево // Функция ЭтоПланОбменаСинхронизацииДанных(Знач ИмяПланаОбмена) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиВебСервис/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВебСервис/Module.bsl index dbb997c16..194a80a03 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВебСервис/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВебСервис/Module.bsl @@ -8,530 +8,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Получает сообщение обмена из информационной базы корреспондента через веб-сервис во временный каталог пользователя -// ОС. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. -// ДлительнаяОперация - Булево - признак использования длительное операции. -// ИдентификаторОперации - УникальныйИдентификатор - уникальный идентификатор длительной операции. -// ПараметрыАутентификации - Структура - содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). -// -// Возвращаемое значение: -// Структура со следующими ключи: -// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена. -// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена. -// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена. -// -Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации, - ПараметрыАутентификации = Неопределено) Экспорт - - ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); - - ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); - - УстановитьПривилегированныйРежим(Истина); - - // Возвращаемое значение функции. - Результат = Новый Структура; - Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); - Результат.Вставить("ИмяФайлаСообщенияОбмена", ""); - Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); - - // Параметры, которые будут определены в функции. - ИмяКаталогаСообщенияОбмена = ""; - ИмяФайлаСообщенияОбмена = ""; - ДатаФайлаСообщенияОбмена = Дата('00010101'); - - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, "ПолучениеСообщенияОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); - - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = - ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - СтруктураНастроекОбмена.ДействиеПриОбмене = Неопределено; - - ПараметрыПрокси = Новый Структура; - ПараметрыПрокси.Вставить("ПараметрыАутентификации", ПараметрыАутентификации); - - Прокси = Неопределено; - СостояниеНастройки = Неопределено; - СообщениеОбОшибке = ""; - ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, - СтруктураНастроекОбмена, ПараметрыПрокси, Отказ, СостояниеНастройки, СообщениеОбОшибке); - - Если Отказ Тогда - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(СообщениеОбОшибке, СтруктураНастроекОбмена, Истина); - Возврат Результат; - КонецЕсли; - - ПараметрыОбмена = Новый Структура; - ПараметрыОбмена.Вставить("ИдентификаторФайла", ИдентификаторФайла); - ПараметрыОбмена.Вставить("ДлительнаяОперация", ДлительнаяОперация); - ПараметрыОбмена.Вставить("ИдентификаторОперации", ИдентификаторОперации); - ПараметрыОбмена.Вставить("ДлительнаяОперацияРазрешена", Истина); - - Попытка - - ВыполнитьВыгрузкуДанных(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена, ПараметрыОбмена); - - ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; - ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; - - Исключение - - Отказ = Истина; - Сообщение = НСтр("ru = 'При выгрузке данных возникли ошибки во второй информационной базе: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); - - Возврат Результат; - КонецПопытки; - - Если ПараметрыОбмена.ДлительнаяОперация Тогда - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'", - ОбщегоНазначения.КодОсновногоЯзыка()), СтруктураНастроекОбмена); - Возврат Результат; - КонецЕсли; - - Попытка - ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе( - Новый УникальныйИдентификатор(ПараметрыОбмена.ИдентификаторФайла), - СтруктураНастроекОбмена.УзелИнформационнойБазы,, ПараметрыАутентификации); - Исключение - - Отказ = Истина; - Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); - - Возврат Результат; - КонецПопытки; - - Попытка - ИмяКаталогаСообщенияОбмена = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(); - Исключение - Отказ = Истина; - Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); - - Возврат Результат; - КонецПопытки; - - ШаблонИмениФайлаСообщения = ОбменДаннымиСервер.ШаблонИмениФайлаСообщения(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, - СтруктураНастроекОбмена.УзелИнформационнойБазы, Ложь); - - ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); - - ПереместитьФайл(ИмяФайлаИзСервисаПередачиФайлов, ИмяФайлаСообщенияОбмена); - - ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); - Если ФайлСообщенияОбмена.Существует() Тогда - ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения(); - КонецЕсли; - - Результат.ИмяВременногоКаталогаСообщенийОбмена = ИмяКаталогаСообщенияОбмена; - Результат.ИмяФайлаСообщенияОбмена = ИмяФайлаСообщенияОбмена; - Результат.ИдентификаторФайлаПакетаДанных = ДатаФайлаСообщенияОбмена; - - Возврат Результат; -КонецФункции - -// Получает сообщение обмена из базы-корреспондента через веб-сервис. -// Сохраняет полученное сообщение обмена во временный каталог. -// Используется в том случае, если получение сообщения обмена выполнялось в контексте фонового задания в -// базе-корреспонденте. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. -// ПараметрыАутентификации - Структура - содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). -// -// Возвращаемое значение: -// Структура со следующими ключи: -// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена. -// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена. -// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена. -// -Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - Знач ПараметрыАутентификации = Неопределено) Экспорт - - // Возвращаемое значение функции. - Результат = Новый Структура; - Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); - Результат.Вставить("ИмяФайлаСообщенияОбмена", ""); - Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); - - // Параметры, которые будут определены в функции. - ИмяКаталогаСообщенияОбмена = ""; - ИмяФайлаСообщенияОбмена = ""; - ДатаФайлаСообщенияОбмена = Дата('00010101'); - - Попытка - - ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, ПараметрыАутентификации); - - Исключение - - Отказ = Истина; - Сообщение = НСтр("ru = 'Возникли ошибки при получении сообщения обмена из сервиса передачи файлов: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = - ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); - - Возврат Результат; - - КонецПопытки; - - Попытка - ИмяКаталогаСообщенияОбмена = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(); - Исключение - Отказ = Истина; - Сообщение = НСтр("ru = 'При получении сообщения обмена возникли ошибки: %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = - ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); - - Возврат Результат; - КонецПопытки; - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); - - ШаблонИмениФайлаСообщения = ОбменДаннымиСервер.ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); - - ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); - ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); - Если НЕ ФайлСообщенияОбмена.Существует() Тогда - // Возможно, файл удастся получить если применить виртуальный код узла. - ШаблонИмениФайлаСообщенияСтарый = ШаблонИмениФайлаСообщения; - ШаблонИмениФайлаСообщения = ОбменДаннымиСервер.ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь,, Истина); - Если ШаблонИмениФайлаСообщения <> ШаблонИмениФайлаСообщенияСтарый Тогда - ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); - ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); - КонецЕсли; - КонецЕсли; - - ПереместитьФайл(ИмяФайлаИзСервисаПередачиФайлов, ИмяФайлаСообщенияОбмена); - - Если ФайлСообщенияОбмена.Существует() Тогда - ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения(); - КонецЕсли; - - Результат.ИмяВременногоКаталогаСообщенийОбмена = ИмяКаталогаСообщенияОбмена; - Результат.ИмяФайлаСообщенияОбмена = ИмяФайлаСообщенияОбмена; - Результат.ИдентификаторФайлаПакетаДанных = ДатаФайлаСообщенияОбмена; - - Возврат Результат; -КонецФункции - -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, - УзелИнформационнойБазы, ДействиеПриОбмене, ПараметрыОбмена) Экспорт - - ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; - - УстановитьПривилегированныйРежим(Истина); - - // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, ДействиеПриОбмене, Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); - ОбменДаннымиСервер.ЗафиксироватьНачалоОбменаВРегистреСведений(СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.Отказ Тогда - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецЕсли; - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - - // {Обработчик: ПередЧтениемСообщенияОбмена} Начало - ФайлСообщенияОбмена = ""; - СтандартнаяОбработка = Истина; - - ОбменДаннымиСервер.ПередЧтениемСообщенияОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы, ФайлСообщенияОбмена, СтандартнаяОбработка); - // {Обработчик: ПередЧтениемСообщенияОбмена} Окончание - - Если СтандартнаяОбработка Тогда - - Прокси = Неопределено; - - ПараметрыПрокси = Новый Структура; - ПараметрыПрокси.Вставить("ПараметрыАутентификации", ПараметрыОбмена.ПараметрыАутентификации); - - СостояниеНастройки = Неопределено; - СообщениеОбОшибке = ""; - ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, - СтруктураНастроекОбмена, ПараметрыПрокси, Отказ, СостояниеНастройки, СообщениеОбОшибке); - - Если Отказ Тогда - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(СообщениеОбОшибке, СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Возврат; - КонецЕсли; - - ФайлСообщенияОбмена = ""; - - Попытка - - ВыполнитьВыгрузкуДанных(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена, ПараметрыОбмена); - - Если ПараметрыОбмена.ДлительнаяОперация Тогда - - ОжиданиеЗавершенияОперации(СтруктураНастроекОбмена, ПараметрыОбмена, Прокси, ПараметрыПрокси, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - - КонецЕсли; - - УИДФайлаСообщения = Новый УникальныйИдентификатор(ПараметрыОбмена.ИдентификаторФайла); - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(УИДФайлаСообщения, УзелИнформационнойБазы, 1024, ПараметрыОбмена.ПараметрыАутентификации); - - Исключение - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными( - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; - Отказ = Истина; - - КонецПопытки; - - КонецЕсли; - - Если Не Отказ Тогда - - ОбменДаннымиСервер.ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена,, ТолькоПараметры); - - КонецЕсли; - - // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало - СтандартнаяОбработка = Истина; - - ОбменДаннымиСервер.ПослеЧтенияСообщенияОбмена( - СтруктураНастроекОбмена.УзелИнформационнойБазы, - ФайлСообщенияОбмена, - ОбменДаннымиСервер.РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), - СтандартнаяОбработка, - Не ТолькоПараметры); - // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание - - Если СтандартнаяОбработка Тогда - - Попытка - Если Не ПустаяСтрока(ФайлСообщенияОбмена) - И ТипЗнч(ОбменДаннымиСервер.СообщениеОбменаДаннымиИзГлавногоУзла()) <> Тип("Структура") Тогда - УдалитьФайлы(ФайлСообщенияОбмена); - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - КонецЕсли; - - ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда - - Прокси = Неопределено; - - ПараметрыПрокси = Новый Структура; - ПараметрыПрокси.Вставить("ПараметрыАутентификации", ПараметрыОбмена.ПараметрыАутентификации); - Если ПараметрыОбмена.СообщениеДляСопоставленияДанных Тогда - ПараметрыПрокси.Вставить("МинимальнаяВерсия", "3.0.1.1"); - КонецЕсли; - - СостояниеНастройки = Неопределено; - СообщениеОбОшибке = ""; - ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, - СтруктураНастроекОбмена, ПараметрыПрокси, Отказ, СостояниеНастройки, СообщениеОбОшибке); - - Если Отказ Тогда - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(СообщениеОбОшибке, СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Возврат; - КонецЕсли; - - ВременныйКаталог = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ВременныйКаталог); - - ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - ВременныйКаталог, ОбменДаннымиСервер.УникальноеИмяФайлаСообщенияОбмена()); - - Попытка - ОбменДаннымиСервер.ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена); - Исключение - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными( - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; - Отказ = Истина; - КонецПопытки; - - // Отправка сообщения обмена только в случае успешной выгрузки данных. - Если ОбменДаннымиСервер.РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) И Не Отказ Тогда - - Попытка - - ИдентификаторФайлаУИД = ПоместитьФайлВХранилищеВСервисе(Прокси, ПараметрыПрокси.ТекущаяВерсия, - СтруктураНастроекОбмена, ФайлСообщенияОбмена, УзелИнформационнойБазы, 1024); - - ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайлаУИД); - - Попытка - УдалитьФайлы(ВременныйКаталог); - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Если ПараметрыОбмена.СообщениеДляСопоставленияДанных - И (СостояниеНастройки.ПоддерживаетсяСопоставлениеДанных - Или Не СостояниеНастройки.НастройкаСинхронизацииДанныхЗавершена) Тогда - - ПоместитьСообщениеДляСопоставленияДанных(Прокси, ПараметрыПрокси.ТекущаяВерсия, - СтруктураНастроекОбмена, ИдентификаторФайлаСтрокой); - - Иначе - - ВыполнитьЗагрузкуДанных(Прокси, ПараметрыПрокси.ТекущаяВерсия, - СтруктураНастроекОбмена, ПараметрыОбмена, ИдентификаторФайлаСтрокой); - - Если ПараметрыОбмена.ДлительнаяОперация Тогда - - ОжиданиеЗавершенияОперации(СтруктураНастроекОбмена, ПараметрыОбмена, Прокси, ПараметрыПрокси, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - - КонецЕсли; - - КонецЕсли; - - Исключение - - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными( - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; - Отказ = Истина; - - КонецПопытки; - - КонецЕсли; - - Попытка - УдалитьФайлы(ВременныйКаталог); - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - КонецЕсли; - - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - - Если Не ОбменДаннымиСервер.РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - Отказ = Истина; - КонецЕсли; - -КонецПроцедуры - -// Выполняет получение файла сообщения обмена из базы-корреспондента через веб-сервис. -// Выполняет загрузку полученного файла сообщения обмена в эту базу. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения обмена. -// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. -// ДатаНачалаОперации - Дата - дата начала загрузки. -// ПараметрыАутентификации - Структура - содержит параметры аутентификации на веб-сервисе (Пользователь, Пароль). -// -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - Отказ, - Знач УзелИнформационнойБазы, - Знач ИдентификаторФайла, - Знач ДатаНачалаОперации, - Знач ПараметрыАутентификации = Неопределено, - ВыдаватьОшибку = Ложь) Экспорт - - ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); - - ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); - - УстановитьПривилегированныйРежим(Истина); - - Попытка - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), - УзелИнформационнойБазы,, ПараметрыАутентификации); - Исключение - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ДатаНачалаОперации, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Если ВыдаватьОшибку Тогда - ВызватьИсключение; - Иначе - Отказ = Истина; - КонецЕсли; - Возврат; - КонецПопытки; - - // Загрузка файла сообщения обмена в эту базу. - ПараметрыОбменаДанными = ОбменДаннымиСервер.ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); - - ПараметрыОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; - ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ФайлСообщенияОбмена; - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - ПараметрыОбменаДанными.ДатаНачалаОперации = ДатаНачалаОперации; - - Попытка - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); - Исключение - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ДатаНачалаОперации, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Если ВыдаватьОшибку Тогда - ВызватьИсключение; - Иначе - Отказ = Истина; - КонецЕсли; - КонецПопытки; - - Попытка - УдалитьФайлы(ФайлСообщенияОбмена); - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - // Функция по переданному идентификатору скачивает файл из сервиса передачи файлов. // // Параметры: @@ -544,30 +20,16 @@ // Возвращаемое значение: // Строка - путь к полученному файлу. // -Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, - Знач РазмерЧасти = 1024, Знач ПараметрыАутентификации = Неопределено) Экспорт +Функция ПолучитьФайлИзХранилищаВСервисе(Прокси, Знач ИдентификаторФайла, Знач УзелИнформационнойБазы = Неопределено, + Знач РазмерЧасти = 1024, Знач ОбластьДанных = 0) Экспорт // Возвращаемое значение функции. ИмяФайлаРезультата = ""; - ДополнительныеПараметры = Новый Структура("ПараметрыАутентификации", ПараметрыАутентификации); - - СообщениеОбОшибке = ""; - Прокси = WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СообщениеОбОшибке, ДополнительныеПараметры); - - Если Прокси = Неопределено Тогда - ВызватьИсключение СообщениеОбОшибке; - КонецЕсли; - ИдентификаторСессии = Неопределено; КоличествоЧастей = Неопределено; - ПараметрыПрокси = Новый Структура("ТекущаяВерсия", ДополнительныеПараметры.ТекущаяВерсия); - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ВыгрузкаДанных, Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); - - ПодготовитьФайлДляПолучения(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена, - ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей); + ПодготовитьФайлДляПолучения(Прокси, ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей, ОбластьДанных); ИменаФайлов = Новый Массив; @@ -577,18 +39,28 @@ ШаблонИмениФайла = "data.zip.[n]"; // Протоколирование событий обмена. - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = - ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), - Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации( + УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"), + Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); + + ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + + КонецЕсли; Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = Неопределено; // ДвоичныеДанные + Попытка - ПолучитьЧастьФайла(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена, ИдентификаторСессии, НомерЧасти, ДанныеЧасти); + ПолучитьЧастьФайла(Прокси, ИдентификаторСессии, НомерЧасти, ДанныеЧасти, ОбластьДанных); Исключение Прокси.ReleaseFile(ИдентификаторСессии); ВызватьИсключение; @@ -599,7 +71,9 @@ ДанныеЧасти.Записать(ИмяФайлаЧасти); ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + ДанныеЧасти = Неопределено; Прокси.ReleaseFile(ИдентификаторСессии); @@ -607,9 +81,7 @@ ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); - - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(УзелИнформационнойБазы, ИмяАрхива); - + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); Если Разархиватор.Элементы.Количество() = 0 Тогда Попытка @@ -624,10 +96,15 @@ // Протоколирование событий обмена. ФайлАрхива = Новый Файл(ИмяАрхива); - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), - Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); - ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"), + Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); + + ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена); + + КонецЕсли; ЭлементАрхива = Разархиватор.Элементы.Получить(0); ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ЭлементАрхива.Имя); @@ -652,13 +129,13 @@ КонецПопытки; Возврат ИмяФайлаРезультата; + КонецФункции // Функция передает указанный файл в сервис передачи файлов. // // Параметры: -// Прокси - -// ВерсияПрокси - Строка - версия используемого веб-сервиса +// Прокси // СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. // ИмяФайла - Строка - путь к передаваемому файлу. // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить файл. @@ -669,8 +146,8 @@ // Возвращаемое значение: // УникальныйИдентификатор - идентификатор файла в сервисе передачи файлов. // -Функция ПоместитьФайлВХранилищеВСервисе(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, Знач ИмяФайла, - Знач УзелИнформационнойБазы, Знач РазмерЧастиКБ = 1024, ИдентификаторФайла = Неопределено) Экспорт +Функция ПоместитьФайлВХранилищеВСервисе(Прокси, Знач ИмяФайла, + Знач РазмерЧастиКБ = 1024, ИдентификаторФайла = Неопределено, ОбластьДанных = 0) Экспорт Если Прокси = Неопределено Тогда @@ -699,7 +176,7 @@ ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); - ПоместитьЧастьФайла(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ИдентификаторСессии, НомерЧасти, ДанныеФайла); + ПоместитьЧастьФайла(Прокси, ИдентификаторСессии, НомерЧасти, ДанныеФайла, ОбластьДанных); КонецЦикла; @@ -710,203 +187,12 @@ УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; - СобратьФайлИзЧастей(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); + СобратьФайлИзЧастей(Прокси, ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла, ОбластьДанных); Возврат ИдентификаторФайла; КонецФункции -// Инициализирует WS-прокси для выполнения управляющих команд обмена данными, -// предварительно проверяет наличие узла обмена. -// -// Параметры: -// Прокси - WSПрокси - WS-прокси для передачи управляющих команд. -// СтруктураНастроек - Структура - структура параметров для подключения к корреспонденту и идентификации настройки обмена: -// * ИмяПланаОбмена - Строка - имя плана обмена, используемого при синхронизации. -// * УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, соответствующий корреспонденту. -// * КлючСообщенияЖурналаРегистрации - Строка - имя события для записи ошибок в журнал регистрации. -// * ТекущийУзелПланаОбмена - ПланОбменаСсылка - ссылка на ЭтотУзел плана обмена. -// * ТекущийУзелПланаОбменаКод - Строка - идентификатор текущего узла плана обмена. -// * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - указывает на направление обмена. -// ПараметрыПрокси - Структура: -// * ПараметрыАутентификации - Строка -// - Структура - содержит пароль для аутентификации на веб-сервере. -// * СтруктураНастроекАутентификации - Структура - содержит структуру настроек для аутентификации на веб-сервере. -// * МинимальнаяВерсия - Строка - номер минимальной версии интерфейса "ОбменДанными", требуемый для выполнения действий. -// * ТекущаяВерсия - Строка - исходящий, фактическая версия интерфейса инициализированного WS-прокси. -// Отказ - Булево - признак неуспешной инициализации WS-прокси. -// СостояниеНастройки - Структура - исходящий, возвращает состояние настройки синхронизации, описанной в СтруктураНастроек: -// * НастройкаСуществует - Булево - Истина, если настройка с указанными планом обмена и идентификатором узла существует. -// * НастройкаСинхронизацииДанныхЗавершена - Булево - Истина, если настройка синхронизации завершена. -// * ПоддерживаетсяСопоставлениеДанных - Булево - Истина, если корреспондент поддерживает функцию сопоставления данных. -// * ПолученоСообщениеДляСопоставленияДанных - Булево - Истина, в корреспондент загружено сообщение для сопоставления. -// СтрокаСообщенияОбОшибке - Строка - описание ошибки инициализации WS-прокси. -// -Процедура ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, - СтруктураНастроек, ПараметрыПрокси, Отказ, СостояниеНастройки, СтрокаСообщенияОбОшибке = "") Экспорт - - МинимальнаяВерсия = "0.0.0.0"; - Если ПараметрыПрокси.Свойство("МинимальнаяВерсия") Тогда - МинимальнаяВерсия = ПараметрыПрокси.МинимальнаяВерсия; - КонецЕсли; - - ПараметрыАутентификации = Неопределено; - ПараметрыПрокси.Свойство("ПараметрыАутентификации", ПараметрыАутентификации); - - СтруктураНастроекАутентификации = Неопределено; - ПараметрыПрокси.Свойство("СтруктураНастроекАутентификации", СтруктураНастроекАутентификации); - - ПараметрыПрокси.Вставить("ТекущаяВерсия", Неопределено); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ПараметрыАутентификации", ПараметрыАутентификации); - ДополнительныеПараметры.Вставить("МинимальнаяВерсия", МинимальнаяВерсия); - ДополнительныеПараметры.Вставить("СтруктураНастроекАутентификации", СтруктураНастроекАутентификации); - - Прокси = WSПроксиДляУзлаИнформационнойБазы( - СтруктураНастроек.УзелИнформационнойБазы, - СтрокаСообщенияОбОшибке, - ДополнительныеПараметры); - - Если Прокси = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - ПараметрыПрокси.ТекущаяВерсия = ДополнительныеПараметры.ТекущаяВерсия; - - Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(СтруктураНастроек.ИмяПланаОбмена) Тогда - - ПсевдонимУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(СтруктураНастроек.УзелИнформационнойБазы); - Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда - // Проверка настройки со старым идентификатором (префиксом). - СтруктураНастроекПредопределенного = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураНастроек, Ложь); // Структура - СтруктураНастроекПредопределенного.Вставить("ТекущийУзелПланаОбменаКод", ПсевдонимУзла); - СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, ПараметрыПрокси, СтруктураНастроекПредопределенного); - - Если Не СостояниеНастройки.НастройкаСуществует Тогда - Если ВКорреспондентеУстаревшийВариантНастроекОбмена( - Прокси, ПараметрыПрокси, СостояниеНастройки, СтруктураНастроек, ПсевдонимУзла, Отказ, СтрокаСообщенияОбОшибке) - Или Отказ Тогда - Возврат; - КонецЕсли; - Иначе - СтруктураНастроек.ТекущийУзелПланаОбменаКод = ПсевдонимУзла; - Возврат; - КонецЕсли; - КонецЕсли; - - СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, ПараметрыПрокси, СтруктураНастроек); - - Если Не СостояниеНастройки.НастройкаСуществует Тогда - Если ВКорреспондентеУстаревшийВариантНастроекОбмена( - Прокси, ПараметрыПрокси, СостояниеНастройки, СтруктураНастроек, СтруктураНастроек.ТекущийУзелПланаОбменаКод, Отказ, СтрокаСообщенияОбОшибке) - Или Отказ Тогда - Возврат; - КонецЕсли; - КонецЕсли; - - Иначе - - СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, ПараметрыПрокси, СтруктураНастроек); - - КонецЕсли; - - Если Не СостояниеНастройки.НастройкаСуществует Тогда - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдена настройка синхронизации данных ""%1"" с идентификатором ""%2"".'"), - СтруктураНастроек.ИмяПланаОбмена, - СтруктураНастроек.ТекущийУзелПланаОбменаКод); - Отказ = Истина; - КонецЕсли; - -КонецПроцедуры - -Функция WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "", ДополнительныеПараметры = Неопределено) Экспорт - - Если ДополнительныеПараметры = Неопределено Тогда - ДополнительныеПараметры = Новый Структура; - КонецЕсли; - - ПараметрыАутентификации = Неопределено; - ДополнительныеПараметры.Свойство("ПараметрыАутентификации", ПараметрыАутентификации); - - СтруктураНастроекАутентификации = Неопределено; - ДополнительныеПараметры.Свойство("СтруктураНастроекАутентификации", СтруктураНастроекАутентификации); - - МинимальнаяВерсия = Неопределено; - Если Не ДополнительныеПараметры.Свойство("МинимальнаяВерсия", МинимальнаяВерсия) Тогда - МинимальнаяВерсия = "0.0.0.0"; - КонецЕсли; - - ДополнительныеПараметры.Вставить("ТекущаяВерсия"); - - Если СтруктураНастроекАутентификации = Неопределено Тогда - Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(УзелИнформационнойБазы) Тогда - МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); - СтруктураНастроекАутентификации = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS( - УзелИнформационнойБазы, ПараметрыАутентификации); - Иначе - СтруктураНастроекАутентификации = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( - УзелИнформационнойБазы, ПараметрыАутентификации); - КонецЕсли; - КонецЕсли; - - Попытка - ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроекАутентификации); - Исключение - СтрокаСообщенияОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), - УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); - Возврат Неопределено; - КонецПопытки; - - ДоступныеВерсии = Новый Соответствие; - Для Каждого Версия Из СтрРазделить("3.0.2.2;3.0.2.1;3.0.1.1;2.1.1.7;2.0.1.6", ";", Ложь) Цикл - ДоступныеВерсии.Вставить(Версия, ВерсииКорреспондента.Найти(Версия) <> Неопределено - И (ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, МинимальнаяВерсия) >= 0)); - КонецЦикла; - - ДоступныеВерсии.Вставить("0.0.0.0", ОбщегоНазначенияКлиентСервер.СравнитьВерсии("0.0.0.0", МинимальнаяВерсия) >= 0); - - Если ДоступныеВерсии.Получить("3.0.2.2") = Истина Тогда - ТекущаяВерсия = "3.0.2.2"; - ИначеЕсли ДоступныеВерсии.Получить("3.0.2.1") = Истина Тогда - ТекущаяВерсия = "3.0.2.1"; - ИначеЕсли ДоступныеВерсии.Получить("3.0.1.1") = Истина Тогда - ТекущаяВерсия = "3.0.1.1"; - ИначеЕсли ДоступныеВерсии.Получить("2.1.1.7") = Истина Тогда - ТекущаяВерсия = "2.0.1.6"; - ИначеЕсли ДоступныеВерсии.Получить("2.0.1.6") = Истина Тогда - ТекущаяВерсия = "2.0.1.6"; - ИначеЕсли ДоступныеВерсии.Получить("0.0.0.0") = Истина Тогда - ТекущаяВерсия = "0.0.0.0"; - Иначе - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Корреспондент не поддерживает требуемую версию ""%1"" интерфейса ""ОбменДанными"".'"), - МинимальнаяВерсия); - Возврат Неопределено; - КонецЕсли; - - ДополнительныеПараметры.ТекущаяВерсия = ТекущаяВерсия; - - Если ТекущаяВерсия = "0.0.0.0" Тогда - ВерсияДляАдреса = ""; - Иначе - ВерсияДляАдреса = "_" + СтрЗаменить(ТекущаяВерсия, ".", "_"); - КонецЕсли; - - // - ОбменДаннымиСервер.УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроекАутентификации); - - СтруктураНастроекАутентификации.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange" + ВерсияДляАдреса); - СтруктураНастроекАутентификации.Вставить("WSИмяСервиса", "Exchange" + ВерсияДляАдреса); - СтруктураНастроекАутентификации.Вставить("WSТаймаут", 600); - - Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке, СтрокаСообщенияОбОшибке, Истина); - -КонецФункции - Функция ПолучитьWSПроксиПоПараметрамПодключения( СтруктураНастроек, СтрокаСообщенияОбОшибке = "", @@ -956,40 +242,130 @@ Возврат WSПрокси; КонецФункции -Функция ЕстьПодключениеККорреспонденту(Знач Корреспондент, - Знач СтруктураНастроек, - СообщениеПользователю = "", - НастройкаСинхронизацииДанныхЗавершена = Истина, - ПолученоСообщениеДляСопоставленияДанных = Ложь) Экспорт - - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - Корреспондент, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); - - СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации", - НСтр("ru = 'Обмен данными.Проверка подключения'", ОбщегоНазначения.КодОсновногоЯзыка())); +Функция WSПрокси(ПараметрыПодключения, СообщениеОбОшибке = "", СообщениеПользователю = "") Экспорт + + Попытка + ПроверитьКорректностьФорматаАдресаWSПрокси(ПараметрыПодключения.АдресВебСервиса); + Исключение + СообщениеПользователю = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке); + Возврат Неопределено; + КонецПопытки; - ПараметрыПрокси = Новый Структура; - ПараметрыПрокси.Вставить("ПараметрыАутентификации", Неопределено); - ПараметрыПрокси.Вставить("СтруктураНастроекАутентификации", СтруктураНастроек); + Попытка + ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(ПараметрыПодключения.ИмяПользователя); + Исключение + СообщениеПользователю = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке); + Возврат Неопределено; + КонецПопытки; + + Попытка + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("WSURLВебСервиса", ПараметрыПодключения.АдресВебСервиса); + СтруктураНастроек.Вставить("WSИмяПользователя", ПараметрыПодключения.ИмяПользователя); + СтруктураНастроек.Вставить("WSПароль", ПараметрыПодключения.Пароль); + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); + Исключение + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Неопределено; + КонецПопытки; + + ВерсияИнтерфейса = МаксимальнаяОбщаяВерсияИнтерфейсаОбмена(ВерсииКорреспондента); - Прокси = Неопределено; - СостояниеНастройки = Неопределено; - Отказ = Ложь; - ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, - СтруктураНастроекОбмена, ПараметрыПрокси, Отказ, СостояниеНастройки, СообщениеПользователю); - - Если Отказ Тогда - СброситьПарольСинхронизацииДанных(Корреспондент); - НастройкаСинхронизацииДанныхЗавершена = Ложь; - Возврат Ложь; + Если ВерсияИнтерфейса = "0.0.0.0" Тогда + ВерсияДляАдреса = ""; + Иначе + ВерсияДляАдреса = "_" + СтрЗаменить(ВерсияИнтерфейса, ".", "_"); КонецЕсли; - УстановитьПарольСинхронизацииДанных(Корреспондент, СтруктураНастроек.WSПароль); + ОбменДаннымиСервер.УдалитьНезначащиеСимволыВНастройкахПодключения(ПараметрыПодключения); - НастройкаСинхронизацииДанныхЗавершена = СостояниеНастройки.НастройкаСинхронизацииДанныхЗавершена; - ПолученоСообщениеДляСопоставленияДанных = СостояниеНастройки.ПолученоСообщениеДляСопоставленияДанных; + ПараметрыПодключения.Вставить("URIПространстваИмен", "http://www.1c.ru/SSL/Exchange" + ВерсияДляАдреса); + ПараметрыПодключения.Вставить("ИмяСервиса", "Exchange" + ВерсияДляАдреса); - Возврат СостояниеНастройки.НастройкаСуществует; + Если Не ПараметрыПодключения.Свойство("Таймаут") Тогда + ПараметрыПодключения.Вставить("Таймаут", 600); + КонецЕсли; + + Если Не ПараметрыПодключения.Свойство("ДелатьКонтрольныйВызов") Тогда + ПараметрыПодключения.Вставить("ДелатьКонтрольныйВызов", Истина); + КонецЕсли; + + МестоположениеWSDL = "[URLВебСервиса]/ws/[ИмяСервиса]?wsdl"; + МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[URLВебСервиса]", ПараметрыПодключения.АдресВебСервиса); + МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[ИмяСервиса]", ПараметрыПодключения.ИмяСервиса); + + ПараметрыПодключения.Вставить("АдресWSDL", МестоположениеWSDL); + + ПараметрыПодключения.Вставить("ИмяТочкиПодключения"); + ПараметрыПодключения.Вставить("ИспользоватьАутентификациюОС", Ложь); + ПараметрыПодключения.Вставить("Местоположение"); + ПараметрыПодключения.Вставить("ЗащищенноеСоединение"); + + Попытка + WSПрокси = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); + Исключение + СообщениеПользователю = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке); + Возврат Неопределено; + КонецПопытки; + + Возврат WSПрокси; + +КонецФункции + +Функция СостояниеНастройки(Прокси, СтруктураНастроек, ОбластьДанных = 0, Отказ = Ложь, СтрокаСообщенияОбОшибке = "") Экспорт + + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(СтруктураНастроек.ИмяПланаОбмена) Тогда + + ПсевдонимУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(СтруктураНастроек.УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда + // Проверка настройки со старым идентификатором (префиксом). + СтруктураНастроекПредопределенного = ОбщегоНазначения.СкопироватьРекурсивно(СтруктураНастроек, Ложь); // Структура + СтруктураНастроекПредопределенного.Вставить("ТекущийУзелПланаОбменаКод", ПсевдонимУзла); + СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, СтруктураНастроекПредопределенного); + + Если Не СостояниеНастройки.НастройкаСуществует Тогда + Если ВКорреспондентеУстаревшийВариантНастроекОбмена( + Прокси, СостояниеНастройки, СтруктураНастроек, ПсевдонимУзла, Отказ, СтрокаСообщенияОбОшибке) + Или Отказ Тогда + Возврат СостояниеНастройки; + КонецЕсли; + Иначе + СтруктураНастроек.ТекущийУзелПланаОбменаКод = ПсевдонимУзла; + Возврат СостояниеНастройки; + КонецЕсли; + КонецЕсли; + + СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, СтруктураНастроек, ОбластьДанных); + + Если Не СостояниеНастройки.НастройкаСуществует Тогда + Если ВКорреспондентеУстаревшийВариантНастроекОбмена( + Прокси, СостояниеНастройки, СтруктураНастроек, СтруктураНастроек.ТекущийУзелПланаОбменаКод, Отказ, СтрокаСообщенияОбОшибке) + Или Отказ Тогда + Возврат СостояниеНастройки; + КонецЕсли; + КонецЕсли; + + Иначе + + СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, СтруктураНастроек, ОбластьДанных); + + КонецЕсли; + + Если Не СостояниеНастройки.НастройкаСуществует Тогда + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена настройка синхронизации данных ""%1"" с идентификатором ""%2"".'"), + СтруктураНастроек.ИмяПланаОбмена, + СтруктураНастроек.ТекущийУзелПланаОбменаКод); + Отказ = Истина; + КонецЕсли; + + Возврат СостояниеНастройки; КонецФункции @@ -1062,7 +438,9 @@ КонецПроцедуры // Соответствует операции UploadData -Процедура ВыполнитьВыгрузкуДанных(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ПараметрыОбмена) Экспорт +Процедура ВыполнитьВыгрузкуДанных(Прокси, СтруктураНастроекОбмена, ПараметрыОбмена, ОбластьДанных = 0) Экспорт + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда @@ -1073,7 +451,7 @@ ПараметрыОбмена.ДлительнаяОперация, ПараметрыОбмена.ИдентификаторОперации, ПараметрыОбмена.ДлительнаяОперацияРазрешена, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); Иначе @@ -1090,7 +468,9 @@ КонецПроцедуры // Соответствует операции DownloadData. -Процедура ВыполнитьЗагрузкуДанных(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ПараметрыОбмена, ИдентификаторФайлаСтрокой) Экспорт +Процедура ВыполнитьЗагрузкуДанных(Прокси, СтруктураНастроекОбмена, ПараметрыОбмена, ИдентификаторФайлаСтрокой, ОбластьДанных = 0) Экспорт + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда @@ -1101,7 +481,7 @@ ПараметрыОбмена.ДлительнаяОперация, ПараметрыОбмена.ИдентификаторОперации, ПараметрыОбмена.ДлительнаяОперацияРазрешена, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); Иначе @@ -1118,8 +498,10 @@ КонецПроцедуры // Соответствует операции GetIBParameters. -Функция ПолучитьПараметрыИБ(Прокси, ВерсияПрокси, ИмяПланаОбмена, КодУзла, СообщениеОбОшибке, - ОбластьДанных, ДополнительныеПараметры = Неопределено) Экспорт + +Функция ПолучитьПараметрыИБ(Прокси, ИмяПланаОбмена, КодУзла, СообщениеОбОшибке, ОбластьДанных = 0, ДополнительныеПараметры = Неопределено) Экспорт + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_2(ВерсияПрокси) Тогда @@ -1143,33 +525,17 @@ КонецФункции -// Соответствует операции GetContinuousOperationStatus -Функция ПолучитьСтатусДлительнойОперации(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ПараметрыОбмена, СтрокаСообщенияОбОшибке) Экспорт - - Если Версия3_0_2_1(ВерсияПрокси) Тогда - - Возврат Прокси.GetContinuousOperationStatus(ПараметрыОбмена.ИдентификаторОперации, - СтрокаСообщенияОбОшибке, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); - - Иначе - - Возврат Прокси.GetContinuousOperationStatus(ПараметрыОбмена.ИдентификаторОперации, СтрокаСообщенияОбОшибке); - - КонецЕсли; - -КонецФункции - // Соответствует операции PutMessageForDataMatching -Процедура ПоместитьСообщениеДляСопоставленияДанных(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ИдентификаторФайлаСтрокой) Экспорт +Процедура ПоместитьСообщениеДляСопоставленияДанных(Прокси, СтруктураНастроекОбмена, ИдентификаторФайлаСтрокой, ОбластьДанных = 0) Экспорт + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда Прокси.PutMessageForDataMatching(СтруктураНастроекОбмена.ИмяПланаОбменаКорреспондента, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, ИдентификаторФайлаСтрокой, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); - + ОбластьДанных); Иначе @@ -1182,14 +548,16 @@ КонецПроцедуры // Соответствует операции RemoveExchangeNode -Процедура УдалитьУзелОбмена(Прокси, ВерсияПрокси, СтруктураНастроекОбмена) Экспорт +Процедура УдалитьУзелОбмена(Прокси, СтруктураНастроекОбмена, ОбластьДанных = 0) Экспорт + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда Прокси.RemoveExchangeNode(СтруктураНастроекОбмена.ИмяПланаОбменаКорреспондента, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); - + ОбластьДанных); + Иначе Прокси.RemoveExchangeNode(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод); @@ -1199,7 +567,9 @@ КонецПроцедуры // Соответствует операции CreateExchangeNode -Процедура СоздатьУзелОбмена(Прокси, ВерсияПрокси, ПараметрыПодключения, ОбластьДанных) Экспорт +Процедура СоздатьУзелОбмена(Прокси, ПараметрыПодключения, ОбластьДанных = 0) Экспорт + + ВерсияПрокси = ВерсияПрокси(Прокси); Сериализатор = Новый СериализаторXDTO(Прокси.ФабрикаXDTO); @@ -1215,15 +585,6 @@ КонецПроцедуры -// Возвращаемое значение: -// Строка -// -Функция СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() Экспорт - - Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначения.КодОсновногоЯзыка()); - -КонецФункции - // Возвращаемое значение: // Строка // @@ -1246,7 +607,16 @@ #Область СлужебныеПроцедурыИФункции -Процедура ОжиданиеЗавершенияОперации(СтруктураНастроекОбмена, ПараметрыОбмена, Прокси, ПараметрыПрокси, ДействиеПриОбменеВЭтойИБ = Неопределено) +// Возвращаемое значение: +// Строка +// +Функция СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() + + Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначения.КодОсновногоЯзыка()); + +КонецФункции + +Процедура ОжиданиеЗавершенияОперации(СтруктураНастроекОбмена, ПараметрыОбмена, Прокси, ДействиеПриОбменеВЭтойИБ = Неопределено) Экспорт Если ПараметрыОбмена.ИнтервалОжиданияНаСервере = 0 Тогда @@ -1278,10 +648,9 @@ СтрокаСообщенияОбОшибке = ""; - СостояниеОперации = ПолучитьСтатусДлительнойОперации(Прокси, ПараметрыПрокси.ТекущаяВерсия, - СтруктураНастроекОбмена, ПараметрыОбмена, СтрокаСообщенияОбОшибке); + СостояниеОперации = ПолучитьСтатусДлительнойОперации(Прокси, ПараметрыОбмена, СтрокаСообщенияОбОшибке); - Если СостояниеОперации = "Active" Тогда + Если СостояниеОперации = "Active" Тогда ПараметрыОбмена.ИнтервалОжиданияНаСервере = Мин(ПараметрыОбмена.ИнтервалОжиданияНаСервере + 30, 180); @@ -1313,10 +682,40 @@ КонецФункции +Функция ВерсияПрокси(Прокси) + + Имя = Прокси.ТочкаПодключения.Имя; + Версия = СтрЗаменить(Имя, "Exchange_", ""); + Версия = СтрЗаменить(Версия, "Soap", ""); + Версия = СтрЗаменить(Версия, "_", "."); + + Возврат Версия; + +КонецФункции + +// Соответствует операции GetContinuousOperationStatus +Функция ПолучитьСтатусДлительнойОперации(Прокси, ПараметрыОбмена, СтрокаСообщенияОбОшибке, ОбластьДанных = 0) + + ВерсияПрокси = ВерсияПрокси(Прокси); + + Если Версия3_0_2_1(ВерсияПрокси) Тогда + + Возврат Прокси.GetContinuousOperationStatus(ПараметрыОбмена.ИдентификаторОперации, + СтрокаСообщенияОбОшибке, + ОбластьДанных); + + Иначе + + Возврат Прокси.GetContinuousOperationStatus(ПараметрыОбмена.ИдентификаторОперации, СтрокаСообщенияОбОшибке); + + КонецЕсли; + +КонецФункции // Соответствует операции PrepareGetFile -Функция ПодготовитьФайлДляПолучения(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, - ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей) +Функция ПодготовитьФайлДляПолучения(Прокси, ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей, ОбластьДанных = 0) + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда @@ -1324,7 +723,7 @@ РазмерЧасти, ИдентификаторСессии, КоличествоЧастей, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); Иначе @@ -1335,13 +734,15 @@ КонецФункции // Соответствует операции GetFilePart -Процедура ПолучитьЧастьФайла(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ИдентификаторСессии, НомерЧасти, ДанныеЧасти) +Процедура ПолучитьЧастьФайла(Прокси, ИдентификаторСессии, НомерЧасти, ДанныеЧасти, ОбластьДанных = 0) + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда Прокси.GetFilePart(ИдентификаторСессии, НомерЧасти, ДанныеЧасти, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); Иначе @@ -1352,12 +753,14 @@ КонецПроцедуры // Соответствует операции PutFilePart -Процедура ПоместитьЧастьФайла(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ИдентификаторСессии, НомерЧасти, ДанныеФайла) +Процедура ПоместитьЧастьФайла(Прокси, ИдентификаторСессии, НомерЧасти, ДанныеФайла, ОбластьДанных = 0) + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда Прокси.PutFilePart(ИдентификаторСессии, НомерЧасти, ДанныеФайла, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); Иначе @@ -1368,12 +771,14 @@ КонецПроцедуры // Соответствует операции SaveFileFromParts -Процедура СобратьФайлИзЧастей(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла) +Процедура СобратьФайлИзЧастей(Прокси, ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла, ОбластьДанных = 0) + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда - Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла, ОбластьДанных); + Иначе Прокси.SaveFileFromParts(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); @@ -1383,7 +788,9 @@ КонецПроцедуры // Соответствует операции TestConnection -Функция ТестСоединения(Прокси, ВерсияПрокси, СтруктураНастроекОбмена, СообщениеОбОшибке) +Функция ТестСоединения(Прокси, СтруктураНастроекОбмена, СообщениеОбОшибке, ОбластьДанных = 0) + + ВерсияПрокси = ВерсияПрокси(Прокси); Если Версия3_0_2_1(ВерсияПрокси) Тогда @@ -1391,7 +798,7 @@ СтруктураНастроекОбмена.ИмяПланаОбменаКорреспондента, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, СообщениеОбОшибке, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); Иначе @@ -1478,7 +885,7 @@ КонецФункции -Функция СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, ПараметрыПрокси, СтруктураНастроек) +Функция СостояниеНастройкиСинхронизацииВКорреспонденте(Прокси, СтруктураНастроек, ОбластьДанных = 0) Результат = Новый Структура; Результат.Вставить("НастройкаСуществует", Ложь); @@ -1488,18 +895,20 @@ Результат.Вставить("ПоддерживаетсяСопоставлениеДанных", Истина); СтрокаСообщенияОбОшибке = ""; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ПараметрыПрокси.ТекущаяВерсия, "2.0.1.6") >= 0 Тогда + ВерсияПрокси = ВерсияПрокси(Прокси); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПрокси, "2.0.1.6") >= 0 Тогда - НастройкаСуществует = ТестСоединения(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроек, СтрокаСообщенияОбОшибке); + НастройкаСуществует = ТестСоединения(Прокси, СтруктураНастроек, СтрокаСообщенияОбОшибке, ОбластьДанных); Если НастройкаСуществует - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ПараметрыПрокси.ТекущаяВерсия, "3.0.1.1") >= 0 Тогда + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПрокси, "3.0.1.1") >= 0 Тогда - ПараметрыПриемникаПрокси = ПолучитьПараметрыИБ(Прокси, ПараметрыПрокси.ТекущаяВерсия, + ПараметрыПриемникаПрокси = ПолучитьПараметрыИБ(Прокси, СтруктураНастроек.ИмяПланаОбменаКорреспондента, СтруктураНастроек.ТекущийУзелПланаОбменаКод, СтрокаСообщенияОбОшибке, - СтруктураНастроек.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(ПараметрыПриемникаПрокси); @@ -1509,11 +918,11 @@ Результат.НастройкаСуществует = НастройкаСуществует; Иначе - ПараметрыПриемникаПрокси = ПолучитьПараметрыИБ(Прокси, ПараметрыПрокси.ТекущаяВерсия, + ПараметрыПриемникаПрокси = ПолучитьПараметрыИБ(Прокси, СтруктураНастроек.ИмяПланаОбмена, СтруктураНастроек.ТекущийУзелПланаОбменаКод, СтрокаСообщенияОбОшибке, - СтруктураНастроек.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + ОбластьДанных); ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ПараметрыПриемникаПрокси); @@ -1528,7 +937,7 @@ КонецФункции -Функция ВКорреспондентеУстаревшийВариантНастроекОбмена(Прокси, ПараметрыПрокси, СостояниеНастройки, СтруктураНастроек, КодУзла, Отказ, СтрокаСообщенияОбОшибке = "") +Функция ВКорреспондентеУстаревшийВариантНастроекОбмена(Прокси, СостояниеНастройки, СтруктураНастроек, КодУзла, Отказ, СтрокаСообщенияОбОшибке = "") СостояниеНастройкиВарианта = Новый Структура(); СостояниеНастройкиВарианта.Вставить("НастройкиТранспорта", СтруктураНастроек.НастройкиТранспорта); @@ -1540,7 +949,7 @@ СостояниеНастройкиВарианта.Вставить("ТекущийУзелПланаОбменаКод", КодУзла); СостояниеНастройки = СостояниеНастройкиСинхронизацииВКорреспонденте( - Прокси, ПараметрыПрокси, СостояниеНастройкиВарианта); + Прокси, СостояниеНастройкиВарианта); Если СостояниеНастройки.НастройкаСуществует Тогда Если СтруктураНастроек.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда @@ -1602,34 +1011,34 @@ КонецФункции -// Устанавливает пароль синхронизации данных для заданного узла. -// Пароль сохраняется в параметре сеанса. -// -Процедура УстановитьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы, Знач Пароль) +Функция МаксимальнаяОбщаяВерсияИнтерфейсаОбмена(ВесрииИнтерфейсаОбменаКорреспондента) Экспорт - УстановитьПривилегированныйРежим(Истина); + СтруктураПоддерживаемыхВерсий = Новый Структура; + ОбменДаннымиСервер.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); + ВерсииИнтерфейсаОбмена = СтруктураПоддерживаемыхВерсий.ОбменДанными; - ПаролиСинхронизацииДанных = Новый Соответствие; + МаксимальнаяВерсия = "0.0.0.0"; - Для Каждого Элемент Из ПараметрыСеанса.ПаролиСинхронизацииДанных Цикл + Для Каждого Версия Из ВесрииИнтерфейсаОбменаКорреспондента Цикл - ПаролиСинхронизацииДанных.Вставить(Элемент.Ключ, Элемент.Значение); + Если ВерсииИнтерфейсаОбмена.Найти(Версия) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, МаксимальнаяВерсия) > 0 Тогда + МаксимальнаяВерсия = Версия; + КонецЕсли; КонецЦикла; - ПаролиСинхронизацииДанных.Вставить(УзелИнформационнойБазы, Пароль); + // Исключение + Если МаксимальнаяВерсия = "2.1.1.7" Тогда + МаксимальнаяВерсия = "2.0.1.6"; + КонецЕсли; - ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(ПаролиСинхронизацииДанных); + Возврат МаксимальнаяВерсия; -КонецПроцедуры - -// Сбрасывает пароль синхронизации данных для заданного узла. -// -Процедура СброситьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) - - УстановитьПарольСинхронизацииДанных(УзелИнформационнойБазы, Неопределено); - -КонецПроцедуры +КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index 9caa32e4f..6278d0b34 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -42,7 +42,7 @@ // ПолноеИмяТаблицы - Строка - имя таблицы, соответствующей объекту метаданных. // // Возвращаемое значение: -// СтруктураНастроек - Структура - свойства объекта метаданных: +// Структура - свойства объекта метаданных: // * Синоним - Строка - синоним. // * Иерархический - Строка - признак Иерархический. // @@ -56,14 +56,20 @@ #Область СлужебныйПрограммныйИнтерфейс +// АПК:299-выкл метод для поддержки обратной совместимости при синхронизации через COM-соединение + // Выполняет выгрузку данных для узла информационной базы во временный файл. -// (Только для внутреннего использования). +// Процедура используется в синхронизации через COM-соединение с дополнительными параметрами. +// Вызывается только из корреспондента (через внешнее соединение), поэтому в текущей ИБ нет использования. // -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазы(Отказ, - ИмяПланаОбмена, - КодУзлаИнформационнойБазы, - ПолноеИмяФайлаСообщенияОбмена, - СтрокаСообщенияОбОшибке = "") Экспорт +// Параметры: +// Отказ - Булево - признак возникновения ошибки в процессе подготовки сообщения. +// ИмяПланаОбмена - Строка - имя плана обмена универсального формата. +// КодУзлаИнформационнойБазы - Строка - строка, по которой будет идентифицирован узел плана обмена с настройками. +// ПолноеИмяФайлаСообщенияОбмена - Строка - путь к файлу, в который будет сохранен результат конвертации (выгрузки). +// СтрокаСообщенияОбОшибке - Строка - расшифровка ошибки, если таковая возникла. +// +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазы(Отказ, ИмяПланаОбмена, КодУзлаИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке = "") Экспорт ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); @@ -98,6 +104,8 @@ КонецПроцедуры +// АПК:299-вкл + // Помещает в журнал регистрации запись о начале обмена данными. // (Только для внутреннего использования). // @@ -120,9 +128,14 @@ // Получает зачитанные правила конвертации объектов по имени плана обмена. // (Только для внутреннего использования). -// -// Возвращаемое значение: -// Зачитанные правила конвертации объектов. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// ПолучатьПравилаКорреспондента - Булево - значение по умолчанию = Ложь. +// +// Возвращаемое значение: +// - Неопределено +// - ХранилищеЗначения - хранилище значений с правилами конвертации // Функция ПолучитьПравилаКонвертацииОбъектов(ИмяПланаОбмена, ПолучатьПравилаКорреспондента = Ложь) Экспорт @@ -132,7 +145,20 @@ // Получает структуру настроек обмена. // (Только для внутреннего использования). -// +// +// Параметры: +// Структура - Структура: +// *ИмяПланаОбмена - Строка +// *ИмяПланаОбменаКорреспондента - Строка +// *ТекущийУзелПланаОбменаКод - Строка +// *КоличествоЭлементовВТранзакции - Число +// *ДействиеПриОбменеСтрокой - Строка - имя значения перечисления ДействияПриОбмене +// *РежимОтладки - Булево +// *ИмяФайлаПротоколаОбмена - Строка +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.СтруктураНастроекОбменаЧерезВнешнееСоединение +// Функция СтруктураНастроекОбмена(Структура) Экспорт Возврат ОбменДаннымиСервер.СтруктураНастроекОбменаЧерезВнешнееСоединение(ОбменДаннымиСобытия.СкопироватьСтруктуру(Структура)); @@ -141,6 +167,12 @@ // Проверяет существование плана обмена с заданным именем. // (Только для внутреннего использования). +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// +// Возвращаемое значение: +// Булево - план обмена существует // Функция ПланОбменаСуществует(ИмяПланаОбмена) Экспорт @@ -151,6 +183,10 @@ // Получает префикс информационной базы по умолчанию через внешнее соединение. // Обертка одноименной функции в переопределяемом модуле. // (Только для внутреннего использования). +// +// Возвращаемое значение: +// - Неопределено +// - Строка // Функция ПрефиксИнформационнойБазыПоУмолчанию() Экспорт @@ -162,6 +198,12 @@ КонецФункции // Проверяет необходимость проверки расхождения версий в правилах конвертации. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена // Функция ПредупреждатьОНесоответствииВерсийПравилОбмена(ИмяПланаОбмена) Экспорт @@ -172,6 +214,9 @@ // Возвращает признак доступности роли ПолныеПрава. // (Только для внутреннего использования). +// +// Возвращаемое значение: +// см. Пользователи.ЭтоПолноправныйПользователь // Функция РольДоступнаПолныеПрава() Экспорт @@ -181,6 +226,12 @@ // Возвращает название предопределенного узла плана обмена. // (Только для внутреннего использования). +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена // Функция НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт @@ -190,6 +241,12 @@ // Возвращает код предопределенного узла плана обмена. // (Только для внутреннего использования). +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена // Функция КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт @@ -198,6 +255,12 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// +// Возвращаемое значение: +// Строка - системное представление структуры с таблицами заданного плана обмена. // Функция ПолучитьОбщиеДанныеУзлов(Знач ИмяПланаОбмена) Экспорт @@ -208,6 +271,12 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// +// Возвращаемое значение: +// Строка - системное представление структуры с таблицами заданного плана обмена. // Функция ПолучитьОбщиеДанныеУзлов_2_0_1_6(Знач ИмяПланаОбмена) Экспорт @@ -218,6 +287,14 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// КодУзла - Строка +// СообщениеОбОшибке - Строка +// +// Возвращаемое значение: +// Строка - системное представление структуры, содержащей параметры информационной базы // Функция ПолучитьПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт @@ -226,6 +303,14 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// КодУзла - Строка +// СообщениеОбОшибке - Строка +// +// Возвращаемое значение: +// Строка - сериализованное представление структуры ,содержащей параметры информационной базы, в XML. // Функция ПолучитьПараметрыИнформационнойБазы_2_0_1_6(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт @@ -234,6 +319,15 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// КодУзла - Строка +// СообщениеОбОшибке - Строка +// ДополнительныеПараметры - Структура - структура дополнительных параметров +// +// Возвращаемое значение: +// Строка - сериализованное представление структуры ,содержащей параметры информационной базы, в XML. // Функция ПолучитьПараметрыИнформационнойБазы_3_0_2_2(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке, ДополнительныеПараметры = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиВнутренняяПубликация/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнутренняяПубликация/Module.bsl index 0abcc31d3..a8c70ac1f 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнутренняяПубликация/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнутренняяПубликация/Module.bsl @@ -48,24 +48,30 @@ КонецЕсли; // Должны быть выполнены задачи из сценария из последнего запуска - Если Не ОчередьЗадачВыполнена(Сценарий) Тогда + ПерваяЗадача = Неопределено; + Если Не ОчередьЗадачВыполнена(Сценарий, , , ПерваяЗадача) Тогда - ТекстСообщения = НСтр("ru = 'Не запустилось выполнение синхронизации по сценарию, - |не завершилась предыдущая сессия выполнения синхронизации.'", + ТекстСообщения = НСтр("ru = 'Обнаружены задачи синхронизации по сценарию предыдущей сессии.'", ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Информация,,,ТекстСообщения); - Возврат; + Если ЗначениеЗаполнено(ПерваяЗадача) Тогда + + ВыполнитьОчередьЗадач(ПерваяЗадача); + + КонецЕсли; + + Иначе + + ПерваяЗадача = Неопределено; + ЗаполнитьЗадачиПоСценарию(Сценарий, ПерваяЗадача); + + ВыполнитьОчередьЗадач(ПерваяЗадача); КонецЕсли; - - ПерваяЗадача = Неопределено; - ЗаполнитьЗадачиПоСценарию(Сценарий, ПерваяЗадача); - ВыполнитьОчередьЗадач(ПерваяЗадача); - КонецПроцедуры Процедура ВыполнитьОбменДаннымиВручную(Узел, ПараметрыОбмена, ДополнениеВыгрузки = Неопределено) Экспорт @@ -89,7 +95,7 @@ Ключ = ПерваяЗадача.ИдентификаторЗадачи; ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Ключ", Лев(Ключ, 120)); + ПараметрыЗадания.Вставить("Ключ", Лев(Ключ, 120)); ПараметрыЗадания.Вставить("ИмяМетода" , "ОбменДаннымиВнутренняяПубликация.ВыполнитьОчередьЗадач"); ПараметрыЗадания.Вставить("ОбластьДанных", ПараметрыСеанса.ОбластьДанныхЗначение); ПараметрыЗадания.Вставить("Использование", Истина); @@ -97,11 +103,15 @@ ПараметрыЗадания.Вставить("Параметры", ПараметрыПроцедуры); ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 900); - + + УстановитьПривилегированныйРежим(Истина); // В разделенной ИБ, внут. публикация, не полные права + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); -КонецПроцедуры + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры Процедура ВыполнитьОчередьЗадач(Задача, ЗадачаПред = "") Экспорт @@ -278,8 +288,8 @@ КонецФункции -Процедура ОтменитьОчередьЗадач(Узел, Сценарий, ИдентификаторОбмена) Экспорт - +Процедура ОтменитьОчередьЗадач(Узел, Сценарий, ИдентификаторОбмена, ОбластьДанных) Экспорт + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -347,7 +357,7 @@ Отбор = Новый Структура("Ключ", ИдентификаторЗадачи); Задания = МодульОчередьЗаданий.ПолучитьЗадания(Отбор); - + Для Каждого Задание Из Задания Цикл ПараметрыЗадания = Новый Структура; @@ -364,25 +374,23 @@ КонецЦикла; КонецЦикла; - - УстановитьПривилегированныйРежим(Ложь); - + Если ЗадачиПриемника.Количество() > 0 Тогда Прокси = Неопределено; - ПараметрыПрокси = Новый Структура; СтруктураНастроекОбмена = Неопределено; Отказ = Ложь; Ошибка = ""; СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(Узел, "ОтменаОперацииПользователем", Отказ); - ИнициализацияПрокси(Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка); + ИнициализацияПрокси(Прокси, СтруктураНастроекОбмена, Отказ, Ошибка); - Прокси.StopTasks(СериализаторXDTO.ЗаписатьXDTO(ЗадачиПриемника), - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + Прокси.StopTasks(СериализаторXDTO.ЗаписатьXDTO(ЗадачиПриемника), ОбластьДанных); КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры Процедура ОтметитьВыполнениеЗадачи(Задача, Ошибка) Экспорт @@ -426,13 +434,8 @@ Процедура ФормаУзлаПриСозданииНаСервере(Форма, Отказ) Экспорт - МодульНастройкиТранспортаОбменаДанными = РегистрыСведений["НастройкиТранспортаОбменаДанными"]; - НастройкиТранспорта = МодульНастройкиТранспортаОбменаДанными.НастройкиТранспорта(Форма.Объект.Ссылка); - - Если НастройкиТранспорта <> Неопределено Тогда - УстановитьФункциональныеОпцииДляУзла(Форма, НастройкиТранспорта); - НастроитьЭлементыФормыПоПереходуНаВебСервис(Форма, НастройкиТранспорта); - КонецЕсли; + УстановитьФункциональныеОпцииДляУзла(Форма); + НастроитьЭлементыФормыПоПереходуНаВебСервис(Форма); КонецПроцедуры @@ -487,7 +490,7 @@ КонецПроцедуры Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторЗадачи, ИдентификаторФайла) Экспорт - + УстановитьПривилегированныйРежим(Истина); ИмяФайлаСообщения = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ИдентификаторФайла); @@ -565,8 +568,7 @@ КонецЕсли; - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - Узел, ДействиеПриОбмене, Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы(Узел, ДействиеПриОбмене, "SM"); Если СтруктураНастроекОбмена.Отказ Тогда // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". @@ -581,6 +583,70 @@ КонецФункции +Процедура УдалитьЗадачиПоСценариюСОшибкой(Сценарий) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Задачи.ИдентификаторОбмена КАК ИдентификаторОбмена + |ПОМЕСТИТЬ ВТ_Задачи + |ИЗ + | РегистрСведений.ЗадачиОбменаДаннымиВнутренняяПубликация КАК Задачи + |ГДЕ + | Задачи.Сценарий = &Сценарий + | И Задачи.ЗавершенаСОшибкой + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЗадачиОбменаДаннымиВнутренняяПубликация.ДатаСоздания КАК ДатаСоздания, + | ЗадачиОбменаДаннымиВнутренняяПубликация.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | ЗадачиОбменаДаннымиВнутренняяПубликация.НомерЗадачи КАК НомерЗадачи, + | ЗадачиОбменаДаннымиВнутренняяПубликация.ИдентификаторОбмена КАК ИдентификаторОбмена, + | ЗадачиОбменаДаннымиВнутренняяПубликация.ИдентификаторЗадачи КАК ИдентификаторЗадачи + |ИЗ + | ВТ_Задачи КАК ВТ_Задачи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиОбменаДаннымиВнутренняяПубликация КАК ЗадачиОбменаДаннымиВнутренняяПубликация + | ПО ВТ_Задачи.ИдентификаторОбмена = ЗадачиОбменаДаннымиВнутренняяПубликация.ИдентификаторОбмена"; + + Запрос.УстановитьПараметр("Сценарий", Сценарий); + + Выборка = Запрос.Выполнить().Выбрать(); + + НачатьТранзакцию(); + + Попытка + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", Сценарий); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Пока Выборка.Следующий() Цикл + + Запись = РегистрыСведений.ЗадачиОбменаДаннымиВнутренняяПубликация.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + Запись.Прочитать(); + Запись.Удалить(); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОтключениеСценария(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -714,8 +780,7 @@ "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 3 | Задачи.ДатаСоздания КАК ДатаСоздания, | Задачи.Сценарий КАК Сценарий, - | Задачи.ИдентификаторОбмена КАК ИдентификаторОбмена, - | Задачи.УзелИнформационнойБазы КАК УзелИнформационнойБазы + | Задачи.ИдентификаторОбмена КАК ИдентификаторОбмена |ПОМЕСТИТЬ втДаты |ИЗ | РегистрСведений.ЗадачиОбменаДаннымиВнутренняяПубликация КАК Задачи @@ -728,9 +793,7 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | Задачи.ДатаСоздания КАК ДатаСоздания, - | Задачи.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | Задачи.Ошибка КАК Ошибка + | Задачи.ДатаСоздания КАК ДатаСоздания |ИЗ | втДаты КАК втДаты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиОбменаДаннымиВнутренняяПубликация КАК Задачи @@ -781,71 +844,7 @@ КонецФункции -Процедура УдалитьЗадачиПоСценариюСОшибкой(Сценарий) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Задачи.ИдентификаторОбмена КАК ИдентификаторОбмена - |ПОМЕСТИТЬ ВТ_Задачи - |ИЗ - | РегистрСведений.ЗадачиОбменаДаннымиВнутренняяПубликация КАК Задачи - |ГДЕ - | Задачи.Сценарий = &Сценарий - | И Задачи.ЗавершенаСОшибкой - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЗадачиОбменаДаннымиВнутренняяПубликация.ДатаСоздания КАК ДатаСоздания, - | ЗадачиОбменаДаннымиВнутренняяПубликация.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | ЗадачиОбменаДаннымиВнутренняяПубликация.НомерЗадачи КАК НомерЗадачи, - | ЗадачиОбменаДаннымиВнутренняяПубликация.ИдентификаторОбмена КАК ИдентификаторОбмена, - | ЗадачиОбменаДаннымиВнутренняяПубликация.ИдентификаторЗадачи КАК ИдентификаторЗадачи - |ИЗ - | ВТ_Задачи КАК ВТ_Задачи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиОбменаДаннымиВнутренняяПубликация КАК ЗадачиОбменаДаннымиВнутренняяПубликация - | ПО ВТ_Задачи.ИдентификаторОбмена = ЗадачиОбменаДаннымиВнутренняяПубликация.ИдентификаторОбмена"; - - Запрос.УстановитьПараметр("Сценарий", Сценарий); - - Выборка = Запрос.Выполнить().Выбрать(); - - НачатьТранзакцию(); - - Попытка - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.СценарииОбменовДанными"); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Сценарий); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - Блокировка.Заблокировать(); - - Пока Выборка.Следующий() Цикл - - Запись = РегистрыСведений.ЗадачиОбменаДаннымиВнутренняяПубликация.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(Запись, Выборка); - Запись.Прочитать(); - Запись.Удалить(); - - КонецЦикла; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - - СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОтключениеСценария(), - УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); - - КонецПопытки; - -КонецПроцедуры - -Функция ОчередьЗадачВыполнена(Сценарий = Неопределено, ИдентификаторОбмена = "", Ошибка = "") +Функция ОчередьЗадачВыполнена(Сценарий = Неопределено, ИдентификаторОбмена = "", Ошибка = "", НайденнаяЗадачаСинхронизации = Неопределено) // Считаем, что сценарий (или ручной обмен) завершен, если для всех задач ЗавершеноУспешно = Истина, или есть ошибка Если ЗначениеЗаполнено(Сценарий) И Не ЗначениеЗаполнено(ИдентификаторОбмена) Тогда @@ -968,9 +967,10 @@ Или Выборка.Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ВыгрузкаДанных Или Выборка.Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ДополнительнаяРегистрация) Тогда + НайденнаяЗадачаСинхронизации = Выборка.ИдентификаторЗадачи; Возврат Ложь; - КонецЕсли; + КонецЕсли; // Проверка очереди задач в корреспонденте @@ -979,14 +979,13 @@ Если Выборка.ПоследняяПроверка >= 1 Тогда Прокси = Неопределено; - ПараметрыПрокси = Новый Структура; Отказ = Ложь; СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы( Выборка.УзелИнформационнойБазы, "ПроверкаСостоянияЗадания", Отказ); Попытка - ИнициализацияПрокси(Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка); + ИнициализацияПрокси(Прокси, СтруктураНастроекОбмена, Отказ, Ошибка); Состояние = Прокси.TaskStatus(Выборка.ИдентификаторЗадачи); Исключение // Возможно проблемы с доступом к корреспонденту @@ -1091,10 +1090,9 @@ Запись.Вставить("УзелИнформационнойБазы", Выборка.УзелИнформационнойБазы); - НастройкиТранспорта = - РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Выборка.УзелИнформационнойБазы); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(Выборка.УзелИнформационнойБазы, "SM"); - Запись.ОбластьДанныхКорреспондента = НастройкиТранспорта.WSОбластьДанныхКорреспондента; + Запись.ОбластьДанныхКорреспондента = НастройкиТранспорта.ОбластьДанныхКорреспондента; Запись.Режим = НСтр("ru = 'Автоматический'", ОбщегоНазначения.КодОсновногоЯзыка()); Если Выборка.ВыполняемоеДействие = Перечисления.ДействияПриОбмене.ЗагрузкаДанных Тогда @@ -1166,9 +1164,9 @@ Запись.ЗавершенаСОшибкой = Ложь; Запись.ИдентификаторОбмена = ИдентификаторОбмена; - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелИнформационнойБазы); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(УзелИнформационнойБазы, "SM"); - Запись.ОбластьДанныхКорреспондента = НастройкиТранспорта.WSОбластьДанныхКорреспондента; + Запись.ОбластьДанныхКорреспондента = НастройкиТранспорта.ОбластьДанныхКорреспондента; Запись.Режим = НСтр("ru = 'Ручной'", ОбщегоНазначения.КодОсновногоЯзыка()); Набор = РегистрыСведений.ЗадачиОбменаДаннымиВнутренняяПубликация.СоздатьНаборЗаписей(); @@ -1232,10 +1230,18 @@ Процедура ОтветныйВызов(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторЗадачи, Ошибка = "") Узел = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзлаИнформационнойБазы); - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Узел); - СтрокаСообщенияОбОшибке = ""; - Прокси = ОбменДаннымиВебСервис.WSПроксиДляУзлаИнформационнойБазы(Узел, СтрокаСообщенияОбОшибке); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(Узел, "SM"); + + МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); + НастройкиТранспортаWS = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(НастройкиТранспорта.КонечнаяТочкаКорреспондента); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("АдресВебСервиса", НастройкиТранспортаWS.WSURLВебСервиса); + ПараметрыПодключения.Вставить("ИмяПользователя", НастройкиТранспортаWS.WSИмяПользователя); + ПараметрыПодключения.Вставить("Пароль", НастройкиТранспортаWS.WSПароль); + + Прокси = ОбменДаннымиВебСервис.WSПрокси(ПараметрыПодключения, Ошибка); Если Прокси = Неопределено Тогда ТекстИсключения = НСтр("ru = 'Не удалось создать подключение к базе корреспонденту'", @@ -1244,7 +1250,7 @@ КонецЕсли; Попытка - Прокси.Callback(ИдентификаторЗадачи, Ошибка, НастройкиТранспорта.WSОбластьДанныхКорреспондента); + Прокси.Callback(ИдентификаторЗадачи, Ошибка, НастройкиТранспорта.ОбластьДанныхКорреспондента); Исключение ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение ПредставлениеОшибки; @@ -1262,13 +1268,23 @@ УстановитьПривилегированныйРежим(Истина); + ПроверитьБлокировкуЗадачи(Задача, Отказ); + Если Отказ = Истина Тогда + + Возврат; + + КонецЕсли; + Прокси = Неопределено; - ПараметрыПрокси = Новый Структура; СтруктураНастроекОбмена = Неопределено; Ошибка = ""; Узел = Задача.УзелИнформационнойБазы; Действие = Задача.Действие; + ОбластьДанныхКорреспондента = Задача.ОбластьДанныхКорреспондента; + + СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(Узел, Действие, Отказ); + ИнициализацияПрокси(Прокси, СтруктураНастроекОбмена, Отказ, Ошибка); Шаблон = НСтр("ru = 'Выполнение шага сценария синхронизации. |ПорядковыйНомер: %1, Приложение: %2, Действие: %3, Режим: %4.'"); @@ -1277,33 +1293,26 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииСинхронизацииДанных(), УровеньЖурналаРегистрации.Информация, , , Комментарий); - + Если Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ВыгрузкаДанныхКорреспондент Тогда - СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(Узел, Действие, Отказ); - ИнициализацияПрокси(Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка); - ВыполнитьЗадачуВыгрузкаДанныхКорреспондент(Задача, Прокси, СтруктураНастроекОбмена, Отказ, Ошибка); + ВыполнитьЗадачуВыгрузкаДанныхКорреспондент(Задача, Прокси, СтруктураНастроекОбмена, ОбластьДанныхКорреспондента, Отказ, Ошибка); ИначеЕсли Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ЗагрузкаДанных Тогда - СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(Узел, Действие, Отказ); - ВыполнитьЗадачуЗагрузкаДанных(Задача, ПараметрыОбмена, СтруктураНастроекОбмена, Отказ, Ошибка); + ВыполнитьЗадачуЗагрузкаДанных(Задача, Прокси, ПараметрыОбмена, СтруктураНастроекОбмена, ОбластьДанныхКорреспондента, Отказ, Ошибка); ОтметитьВыполнениеЗадачи(Задача, Ошибка); ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); ИначеЕсли Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ВыгрузкаДанных Тогда - СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(Узел, Действие, Отказ); - ИнициализацияПрокси(Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка); - ВыполнитьЗадачуВыгрузкаДанных(Задача, Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка); + ВыполнитьЗадачуВыгрузкаДанных(Задача, Прокси, СтруктураНастроекОбмена, ОбластьДанныхКорреспондента, Отказ, Ошибка); ОтметитьВыполнениеЗадачи(Задача, Ошибка); ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); ИначеЕсли Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ЗагрузкаДанныхКорреспондент Тогда - СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы(Узел, Действие, Отказ); - ИнициализацияПрокси(Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка); - ВыполнитьЗадачуЗагрузкаДанныхКорреспондент(Задача, Прокси, ПараметрыОбмена, СтруктураНастроекОбмена, Отказ, Ошибка) + ВыполнитьЗадачуЗагрузкаДанныхКорреспондент(Задача, Прокси, ПараметрыОбмена, СтруктураНастроекОбмена, ОбластьДанныхКорреспондента, Отказ, Ошибка) ИначеЕсли Действие = Перечисления.ДействияПриОбменеВнутренняяПубликация.ДополнительнаяРегистрация Тогда @@ -1314,16 +1323,19 @@ КонецПроцедуры -Процедура ВыполнитьЗадачуВыгрузкаДанныхКорреспондент(Задача, Прокси, СтруктураНастроекОбмена, Отказ, Ошибка) +Процедура ВыполнитьЗадачуВыгрузкаДанныхКорреспондент(Задача, Прокси, СтруктураНастроекОбмена, ОбластьДанных, Отказ, Ошибка) Если Отказ Тогда Возврат; КонецЕсли; Попытка - - Прокси.UploadDataInt(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - Задача.ИдентификаторЗадачи, СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + + Прокси.UploadDataInt( + СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + Задача.ИдентификаторЗадачи, + ОбластьДанных); Исключение @@ -1339,17 +1351,18 @@ КонецПроцедуры -Процедура ВыполнитьЗадачуЗагрузкаДанных(Задача, ПараметрыОбмена, СтруктураНастроекОбмена, Отказ, Ошибка) +Процедура ВыполнитьЗадачуЗагрузкаДанных(Задача, Прокси, ПараметрыОбмена, СтруктураНастроекОбмена, ОбластьДанных, Отказ, Ошибка) Если Отказ Тогда Возврат; КонецЕсли; - + Попытка - + УИДФайлаСообщения = Новый УникальныйИдентификатор(ПараметрыОбмена.ИдентификаторЗадачиПред); - ФайлСообщенияОбмена = ОбменДаннымиВебСервис.ПолучитьФайлИзХранилищаВСервисе(УИДФайлаСообщения, - СтруктураНастроекОбмена.УзелИнформационнойБазы, 1024, ПараметрыОбмена.ПараметрыАутентификации); + ФайлСообщенияОбмена = ОбменДаннымиВебСервис.ПолучитьФайлИзХранилищаВСервисе( + Прокси, УИДФайлаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазы, + 1024, ОбластьДанных); Исключение @@ -1400,7 +1413,7 @@ КонецПроцедуры -Процедура ВыполнитьЗадачуВыгрузкаДанных(Задача, Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка) +Процедура ВыполнитьЗадачуВыгрузкаДанных(Задача, Прокси, СтруктураНастроекОбмена, ОбластьДанных, Отказ, Ошибка) Если Отказ Тогда Возврат; @@ -1430,8 +1443,8 @@ ИдентификаторФайла = Задача.ИдентификаторЗадачи; - ОбменДаннымиВебСервис.ПоместитьФайлВХранилищеВСервисе(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена, - ФайлСообщенияОбмена, СтруктураНастроекОбмена.УзелИнформационнойБазы, 1024, ИдентификаторФайла); + ОбменДаннымиВебСервис.ПоместитьФайлВХранилищеВСервисе(Прокси, ФайлСообщенияОбмена, 1024, + ИдентификаторФайла, ОбластьДанных); Если РезультатВыполненияОбменаВыполненоСОшибкой(СтруктураНастроекОбмена, Отказ, Ошибка) Тогда Возврат; @@ -1458,9 +1471,9 @@ УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; -КонецПроцедуры +КонецПроцедуры -Процедура ВыполнитьЗадачуЗагрузкаДанныхКорреспондент(Задача, Прокси, ПараметрыОбмена, СтруктураНастроекОбмена, Отказ, Ошибка) +Процедура ВыполнитьЗадачуЗагрузкаДанныхКорреспондент(Задача, Прокси, ПараметрыОбмена, СтруктураНастроекОбмена, ОбластьДанных, Отказ, Ошибка) Если Отказ Тогда Возврат; @@ -1468,9 +1481,12 @@ Попытка - Прокси.DownloadDataInt(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - Задача.ИдентификаторЗадачи, ПараметрыОбмена.ИдентификаторЗадачиПред, - СтруктураНастроекОбмена.НастройкиТранспорта.WSОбластьДанныхКорреспондента); + Прокси.DownloadDataInt( + СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + Задача.ИдентификаторЗадачи, + ПараметрыОбмена.ИдентификаторЗадачиПред, + ОбластьДанных); Исключение @@ -1531,24 +1547,66 @@ КонецПроцедуры +Процедура ПроверитьБлокировкуЗадачи(Задача, Отказ) + Перем ИдентификаторЗадачи, ДатаСоздания, УзелИнформационнойБазы, НомерЗадачи, ИдентификаторОбмена, Сценарий; + + Если ТипЗнч(Задача) <> Тип("Структура") Тогда + + Возврат; + + КонецЕсли; + + Попытка + + КлючРегистра = РегистрыСведений.ЗадачиОбменаДаннымиВнутренняяПубликация.СоздатьКлючЗаписи(Задача); + ЗаблокироватьДанныеДляРедактирования(КлючРегистра); + + Исключение + + Отказ = Истина; + ШаблонТекста = НСтр("ru = 'Задача с идентификатором [%1] заблокирована. + |Вероятно она находится в состоянии выполнения. + | Дата создания: %2 + | Узел ИБ: %3 + | Номер: %4 + | Идентификатор Обмена: %5 + | Сценарий: %6'", ОбщегоНазначения.КодОсновногоЯзыка()); + + Задача.Свойство("ИдентификаторЗадачи", ИдентификаторЗадачи); + Задача.Свойство("ДатаСоздания", ДатаСоздания); + Задача.Свойство("УзелИнформационнойБазы", УзелИнформационнойБазы); + Задача.Свойство("НомерЗадачи", НомерЗадачи); + Задача.Свойство("ИдентификаторОбмена", ИдентификаторОбмена); + Задача.Свойство("Сценарий", Сценарий); + + Комментарий = СтрШаблон(ШаблонТекста, ИдентификаторЗадачи, ДатаСоздания, + УзелИнформационнойБазы, НомерЗадачи, ИдентификаторОбмена, Сценарий); + + ИмяСобытия = ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииСинхронизацииДанных(); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , , Комментарий); + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #Область НастройкаФормыУзла -Процедура УстановитьФункциональныеОпцииДляУзла(Форма, НастройкиТранспорта) - +Процедура УстановитьФункциональныеОпцииДляУзла(Форма) + УстановитьПривилегированныйРежим(Истина); Узел = Форма.Объект.Ссылка; - ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - ИспользоватьСценарии = - ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И ЗначениеЗаполнено(НастройкиТранспорта.WSКонечнаяТочкаКорреспондента); - + ИдентификаторТранспорта = Неопределено; + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию(Узел, ИдентификаторТранспорта); + + ИспользоватьСценарии = ИдентификаторТранспорта = "SM" И НастройкиТранспорта.ВнутренняяПубликация; ИспользоватьНастройкиПодключения = - ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим; + ИдентификаторТранспорта = "SM" И НастройкиТранспорта.ВнутренняяПубликация + Или ИдентификаторТранспорта = "WS" + Или ИдентификаторТранспорта = "ПассивныйРежим"; ЗаписьНастроек = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СоздатьМенеджерЗаписи(); ЗаписьНастроек.УзелИнформационнойБазы = Узел; @@ -1568,24 +1626,25 @@ КонецПроцедуры -Процедура НастроитьЭлементыФормыПоПереходуНаВебСервис(Форма, НастройкиТранспорта) +Процедура НастроитьЭлементыФормыПоПереходуНаВебСервис(Форма) + + УстановитьПривилегированныйРежим(Истина); Элементы = Форма.Элементы; - УзелСсылка = Форма.Объект.Ссылка; + Узел = Форма.Объект.Ссылка; - ЭтоОбменЧерезВебСервис = - НастройкиТранспорта <> Неопределено - И (НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); - - ДоступенExchangeAdministrationManage_3_0_1_1 = ДляУзлаДоступенExchangeAdministrationManage_3_0_1_1(УзелСсылка) = Истина; + ИдентификаторТранспорта = Неопределено; + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию(Узел, ИдентификаторТранспорта); + + ЭтоОбменЧерезВнутреннююПубликацию = ИдентификаторТранспорта = "SM" И НастройкиТранспорта.ВнутренняяПубликация; + ДоступенExchangeAdministrationManage_3_0_1_1 = ДляУзлаДоступенExchangeAdministrationManage_3_0_1_1(Узел) = Истина; Если Не Пользователи.ЭтоПолноправныйПользователь() - Или УзелСсылка.Пустая() - Или ЭтоОбменЧерезВебСервис + Или Узел.Пустая() + Или ЭтоОбменЧерезВнутреннююПубликацию Или Не ДоступенExchangeAdministrationManage_3_0_1_1 - Или Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(УзелСсылка) - Или Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(УзелСсылка) Тогда + Или Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Узел) + Или Не ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(Узел) Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Форма.Элементы, @@ -1615,12 +1674,12 @@ |ГДЕ | Настройки.УзелИнформационнойБазы = &Узел"; - Запрос.УстановитьПараметр("Узел", УзелСсылка); + Запрос.УстановитьПараметр("Узел", Узел); Выборка = Запрос.Выполнить().Выбрать(); НеЗаконченПереходНаВебСервис = Выборка.Следующий() И Выборка.ПереходНаWS_Этап > 0; - НеПредлагатьПерейтиНаВебСервис = ОбменДаннымиВнутренняяПубликацияВызовСервера.ФлагНастройкиНеПредлагатьПерейтиНаВебСервис(УзелСсылка); + НеПредлагатьПерейтиНаВебСервис = ОбменДаннымиВнутренняяПубликацияВызовСервера.ФлагНастройкиНеПредлагатьПерейтиНаВебСервис(Узел); ТекстПанели = ""; Если НеЗаконченПереходНаВебСервис Тогда @@ -1687,15 +1746,27 @@ КонецФункции -Процедура ИнициализацияПрокси(Прокси, ПараметрыПрокси, СтруктураНастроекОбмена, Отказ, Ошибка) +Процедура ИнициализацияПрокси(Прокси, СтруктураНастроекОбмена, Отказ, Ошибка) Если Отказ Тогда Возврат; КонецЕсли; + + ПараметрыТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "SM"); - СостояниеНастройки = Неопределено; - ОбменДаннымиВебСервис.ИнициализироватьWSПроксиДляУправленияОбменомДанными(Прокси, СтруктураНастроекОбмена, - ПараметрыПрокси, Отказ, СостояниеНастройки, Ошибка); + МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); + НастройкиТранспортаWS = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(ПараметрыТранспорта.КонечнаяТочкаКорреспондента); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("АдресВебСервиса", НастройкиТранспортаWS.WSURLВебСервиса); + ПараметрыПодключения.Вставить("ИмяПользователя", НастройкиТранспортаWS.WSИмяПользователя); + ПараметрыПодключения.Вставить("Пароль", НастройкиТранспортаWS.WSПароль); + + Прокси = ОбменДаннымиВебСервис.WSПрокси(ПараметрыПодключения, Ошибка); + + Если Прокси = Неопределено Тогда + Отказ = Истина; + КонецЕсли; Если Отказ Тогда ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Ошибка, СтруктураНастроекОбмена, Истина); @@ -1717,10 +1788,7 @@ Или СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения Тогда Отказ = Истина; - - Если ЗначениеЗаполнено(СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке) Тогда - Ошибка = СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке; - КонецЕсли; + Ошибка = СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке; Возврат Истина; diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 4c04545f3..5bed69450 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -124,7 +124,14 @@ СтрокаСообщенияОбОшибке); КонецПроцедуры -// Возвращает признак того, что набора записей регистра не содержит данных. +// Возвращает признак того, что набор записей регистра по переданным значениям не содержит данных. +// +// Параметры: +// СтруктураЗаписи - Структура - структура со значениями измерений переданного регистра. +// ИмяРегистра - Строка - имя регистра сведений как объекта метаданных. +// +// Возвращаемое значение: +// Булево // Функция НаборЗаписейРегистраПустой(СтруктураЗаписи, ИмяРегистра) Экспорт @@ -145,6 +152,13 @@ КонецФункции // Возвращает ключ сообщения журнала регистрации по строке действия. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка +// ДействиеПриОбменеСтрокой - Строка - строковое представление перечисления ДействияПриОбмене +// +// Возвращаемое значение: +// Строка // Функция КлючСообщенияЖурналаРегистрацииПоСтрокеДействия(УзелИнформационнойБазы, ДействиеПриОбменеСтрокой) Экспорт @@ -155,6 +169,17 @@ КонецФункции // Возвращает структуру с данными отбора для журнала регистрации. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене +// - Строка - строковое представление перечисления ДействияПриОбмене +// +// Возвращаемое значение: +// Структура: +// * СобытиеЖурналаРегистрации - Строка +// * ДатаНачала - Дата +// * ДатаОкончания - Дата // Функция ДанныеОтбораЖурналаРегистрации(УзелИнформационнойБазы, Знач ДействиеПриОбмене) Экспорт @@ -178,6 +203,9 @@ КонецФункции // Возвращает массив всех ссылочных типов, определенных в конфигурации. +// +// Возвращаемое значение: +// см. ОбменДаннымиПовтИсп.ВсеСсылочныеТипыКонфигурации // Функция ВсеСсылочныеТипыКонфигурации() Экспорт @@ -192,8 +220,7 @@ Возврат ОбменДаннымиСервер.ВариантОбменаДанными(Корреспондент); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обмен данными под полными правами. +#Область ОбменДаннымиПодПолнымиПравами // Получает список метаданных объектов узла, для которых не разрешена выгрузка. // Выгрузка не разрешена, если в правилах регистрации объектов плана обмена таблица отмечена как НеВыгружать. @@ -234,6 +261,12 @@ КонецФункции // Создает запрос на очистку разрешений для узла (при удалении). +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел плана обмена +// +// Возвращаемое значение: +// - Массив из УникальныйИдентификатор // Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Знач УзелИнформационнойБазы) Экспорт @@ -263,17 +296,17 @@ // Обновление правил регистрации объектов выполняем до загрузки данных. ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; - ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; ПараметрыОбмена.ДлительнаяОперацияРазрешена = Ложь; ПараметрыОбмена.ТолькоПараметры = Истина; - + Отказ = Ложь; - Попытка + Попытка ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); @@ -291,8 +324,17 @@ КонецПроцедуры +// Проверить необходимость отложенной записи узла. +// // Параметры: -// УзелОбъект - ПланОбменаОбъект +// УзелОбъект - ПланОбменаОбъект +// +// Возвращаемое значение: +// Структура: +// * НеобходимаДлительнаяОперация - Булево +// * ЕстьАктивноеФоновоеЗадание - Булево +// * АдресСтруктурыУзла - Неопределено +// - Строка - адрес во временном хранилище // Функция ПроверитьНеобходимостьОтложеннойЗаписиУзла(Знач УзелОбъект) Экспорт @@ -366,23 +408,21 @@ КонецФункции -Функция ПроверитьИЗарегистрироватьCOMСоединитель(Знач СтруктураНастроек) Экспорт - - Если ТипЗнч(СтруктураНастроек) <> Тип("Структура") Тогда - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта( - СтруктураНастроек, Перечисления.ВидыТранспортаСообщенийОбмена.COM) - КонецЕсли; - - Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(СтруктураНастроек); - - Если Результат.Соединение = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - Результат = Неопределено; - - Возврат Истина; +// Определяет, входит ли узел обмена в определяемый тип ПланыОбменаБСД. +// +// Параметры: +// Узел - ПланОбменаСсылка +// +// Возвращаемое значение: +// Булево - узел входит в планы обмена БСД +// +Функция УзелВходитВПланыОбменаБСД(Узел) Экспорт + ТипУзла = ТипЗнч(Узел); + Возврат Метаданные.ОпределяемыеТипы.ПланыОбменаБСД.Тип.СодержитТип(ТипУзла); + КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index 827e5235c..3b34d1a58 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -84,26 +84,6 @@ КонецПроцедуры -// Открывает форму помощника настройки обмена данными для заданного плана обмена. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, -// для которого необходимо открыть помощник. -// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена данными. -// -Процедура ОткрытьПомощникНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач ИдентификаторНастройки) Экспорт - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - ПараметрыФормы.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - - КлючФормы = ИмяПланаОбмена + "_" + ИдентификаторНастройки; - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаПодключения", ПараметрыФормы, , - КлючФормы, , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - -КонецПроцедуры - // Обработчик начала выбора элемента для формы задания настроек узла базы-корреспондента при настройке обмена через // внешнее соединение. // @@ -310,7 +290,7 @@ ИначеЕсли РезультатПроверки.НеобходимаДлительнаяОперация Тогда - Объект = Форма.Объект; //ПланОбменаОбъект + Объект = Форма.Объект; // ДанныеФормыСтруктура ПараметрыОбработки = Новый Структура; ПараметрыОбработки.Вставить("Узел", Объект.Ссылка); @@ -394,6 +374,58 @@ КонецПроцедуры +// Открывает форму изменения префикса ИБ. +// +// Параметры: +// ПрефиксИБ - Строка - текущий префикс ИБ. +// +Процедура ОткрытьФормуИзмененияПрефиксаИБ(Знач ПрефиксИБ) Экспорт + + ПараметрыФормы = Новый Структура("Префикс", ПрефиксИБ); + + ИмяФормыИзмененияПрефикса = "Обработка.ПомощникСозданияОбменаДанными.Форма.ИзменениеПрефиксаУзлаИБ"; + ОткрытьФорму(ИмяФормыИзмененияПрефикса, ПараметрыФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +// Открывает форму очистки предупреждений синхронизации. +// +// Параметры: +// ПараметрыОткрытия - Структура - структура с отборами предупреждений, где: +// * МассивУзловПланаОбмена - Массив из ПланОбменаСсылка - массив с узлами плана обмена, которые можно использовать. +// * ОтборПоДатеВозникновения - Дата - дата, по которую выбираем предупреждения синхронизации. +// * ОтборУзловПланаОбмена - Массив из ПланОбменаСсылка - массив узлов планов обменов, +// по которым выполняется удаление предупреждений. +// * ОтборТипыПредупреждений - Массив из ПеречислениеСсылка.ТипыПроблемОбменаДанными +// ПеречислениеСсылка.ТипыВерсийОбъекта - типы удаляемых предупреждений. +// * ТолькоСкрытыеЗаписи - Булево - отбирать к удалению только скрытые записи предупреждений. +// ОписаниеОповещения - ОписаниеОповещения +// +Процедура ОткрытьФормуУдаленияПредупрежденийСинхронизации(ПараметрыОткрытия, ОписаниеОповещения = Неопределено) Экспорт + + ИмяФормыУдаленияПредупреждений = "РегистрСведений.РезультатыОбменаДанными.Форма.УдалениеУстаревшихПредупреждений"; + ОткрытьФорму(ИмяФормыУдаленияПредупреждений, ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения); + +КонецПроцедуры + + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Открывает форму помощника настройки обмена данными для заданного плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как объекта метаданных, +// для которого необходимо открыть помощник. +// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена данными. +// +Процедура ОткрытьПомощникНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач ИдентификаторНастройки) Экспорт + + // Процедура не используется, так как для настроки синхронизации больше не используется форма НастройкаПодключения + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -401,6 +433,11 @@ // Открывает модально журнал регистрации с отбором по событиям выгрузки или загрузки данных для заданного узла плана // обмена. // +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка +// Владелец - ОбъектМетаданных +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене +// Процедура ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелИнформационнойБазы, Владелец, ДействиеПриОбмене) Экспорт // вызов сервера @@ -423,6 +460,9 @@ // Обновляет конфигурацию базы данных. // +// Параметры: +// ЗавершениеРаботыСистемы - Булево +// Процедура УстановитьОбновлениеКонфигурации(ЗавершениеРаботыСистемы = Ложь) Экспорт Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда @@ -437,6 +477,9 @@ // Открывает форму монитора зарегистрированных к отправке данных. // +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка +// Процедура ОткрытьСоставОтправляемыхДанных(Знач УзелИнформационнойБазы) Экспорт ПараметрыФормы = Новый Структура; @@ -455,8 +498,8 @@ ОткрытьФорму("Обработка.РегистрацияИзмененийДляОбменаДанными.Форма", ПараметрыФормы,, УзелИнформационнойБазы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы. Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт @@ -676,176 +719,6 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные функции-свойства. - -// Возвращает максимально допустимое количество полей, -// которые отображаются в помощнике сопоставления объектов ИБ. -// -// Возвращаемое значение: -// Число - максимальное количество полей для сопоставления. -// -Функция МаксимальноеКоличествоПолейСопоставленияОбъектов() Экспорт - - Возврат 5; - -КонецФункции - -// Возвращает структуру статусов выполнения загрузки данных. -// -Функция СтраницыСтатусаЗагрузкиДанных() Экспорт - - Структура = Новый Структура; - Структура.Вставить("Неопределено", "СтатусЗагрузкиНеопределено"); - Структура.Вставить("Ошибка", "СтатусЗагрузкиОшибка"); - Структура.Вставить("Успех", "СтатусЗагрузкиУспех"); - Структура.Вставить("Выполнение", "СтатусЗагрузкиВыполнение"); - - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусЗагрузкиПредупреждение"); - Структура.Вставить("ВыполненоСПредупреждениями", "СтатусЗагрузкиПредупреждение"); - Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусЗагрузкиОшибка"); - - Возврат Структура; -КонецФункции - -// Возвращает структуру статусов выполнения выгрузки данных. -// -Функция СтраницыСтатусаВыгрузкиДанных() Экспорт - - Структура = Новый Структура; - Структура.Вставить("Неопределено", "СтатусВыгрузкиНеопределено"); - Структура.Вставить("Ошибка", "СтатусВыгрузкиОшибка"); - Структура.Вставить("Успех", "СтатусВыгрузкиУспех"); - Структура.Вставить("Выполнение", "СтатусВыгрузкиВыполнение"); - - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусВыгрузкиПредупреждение"); - Структура.Вставить("ВыполненоСПредупреждениями", "СтатусВыгрузкиПредупреждение"); - Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусВыгрузкиОшибка"); - - Возврат Структура; -КонецФункции - -// Возвращает структуру с наименованием гиперссылки поля загрузки данных. -// -Функция ЗаголовкиГиперссылокЗагрузкиДанных() Экспорт - - Структура = Новый Структура; - Структура.Вставить("Неопределено", НСтр("ru = 'Получение данных не выполнялось'")); - Структура.Вставить("Ошибка", НСтр("ru = 'Не удалось получить данные'")); - Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Данные получены с предупреждениями'")); - Структура.Вставить("Успех", НСтр("ru = 'Данные успешно получены'")); - Структура.Вставить("Выполнение", НСтр("ru = 'Выполняется получение данных...'")); - - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Нет новых данных для получения'")); - Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Не удалось получить данные'")); - - Возврат Структура; -КонецФункции - -// Возвращает структуру с наименованием гиперссылки поля выгрузки данных. -// -Функция ЗаголовкиГиперссылокВыгрузкиДанных() Экспорт - - Структура = Новый Структура; - Структура.Вставить("Неопределено", НСтр("ru = 'Отправка данных не выполнялась'")); - Структура.Вставить("Ошибка", НСтр("ru = 'Не удалось отправить данные'")); - Структура.Вставить("Успех", НСтр("ru = 'Данные успешно отправлены'")); - Структура.Вставить("Выполнение", НСтр("ru = 'Выполняется отправка данных...'")); - - Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Данные отправлены с предупреждениями'")); - Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Данные отправлены с предупреждениями'")); - Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Не удалось отправить данные'")); - - Возврат Структура; -КонецФункции - -// Открывает форму или гиперссылку с подробным описанием синхронизации данных. -// -Процедура ОткрытьПодробноеОписаниеСинхронизации(СсылкаНаПодробноеОписание) Экспорт - - Если ВРег(Лев(СсылкаНаПодробноеОписание, 4)) = "HTTP" Тогда - - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СсылкаНаПодробноеОписание); - - Иначе - - ОткрытьФорму(СсылкаНаПодробноеОписание); - - КонецЕсли; - -КонецПроцедуры - -// Открывает форму для ввода параметров прокси сервера. -// -Процедура ОткрытьФормуПараметровПроксиСервера() Экспорт - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиент"); - - ПараметрыФормы = Неопределено; - Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - ПараметрыФормы = Новый Структура("НастройкаПроксиНаКлиенте", Истина); - КонецЕсли; - - МодульПолучениеФайловИзИнтернетаКлиент.ОткрытьФормуПараметровПроксиСервера(ПараметрыФормы); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. - -// Только для внутреннего использования. -// -Процедура ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(Параметры, Контекст) Экспорт - - Форма = ОткрытьФорму( - "РегистрСведений.НастройкиТранспортаОбменаДанными.Форма.ПовторнаяСинхронизацияДанныхПередЗапуском", , , , , , - Новый ОписаниеОповещения( - "ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском", ЭтотОбъект, Параметры)); - - Если Форма = Неопределено Тогда - ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском("Продолжить", Параметры); - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. Продолжение процедуры. -// ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском. -// -Процедура ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском(Результат, Параметры) Экспорт - - Если Результат <> "Продолжить" Тогда - Параметры.Отказ = Истина; - Иначе - Параметры.ПолученныеПараметрыКлиента.Вставить( - "ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском"); - КонецЕсли; - - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); - -КонецПроцедуры - -// Только для внутреннего использования. Продолжение процедуры. -// ФормаНастройкиПередЗакрытием. -// -Процедура ФормаНастройкиПередЗакрытиемЗавершение(Ответ, Форма) Экспорт - - Если Ответ <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - Форма.Модифицированность = Ложь; - Форма.Закрыть(); - - // Очищаем кэш повторного использования для сброса возможных COM соединений. - ОбновитьПовторноИспользуемыеЗначения(); -КонецПроцедуры - // Открывает файл в ассоциированном приложении операционной системы. // // Параметры: @@ -916,6 +789,201 @@ КонецПроцедуры +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ЭкспортныеСлужебныеФункцииСвойства + +// Возвращает максимально допустимое количество полей, +// которые отображаются в помощнике сопоставления объектов ИБ. +// +// Возвращаемое значение: +// Число - максимальное количество полей для сопоставления. +// +Функция МаксимальноеКоличествоПолейСопоставленияОбъектов() Экспорт + + Возврат 5; + +КонецФункции + +// Возвращает структуру статусов выполнения загрузки данных. +// +// Возвращаемое значение: +// Структура: +// * Неопределено - Строка +// * Ошибка - Строка +// * Успех - Строка +// * Выполнение - Строка +// * Предупреждение_СообщениеОбменаБылоРанееПринято - Строка +// * ВыполненоСПредупреждениями - Строка +// * Ошибка_ТранспортСообщения - Строка +// +Функция СтраницыСтатусаЗагрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", "СтатусЗагрузкиНеопределено"); + Структура.Вставить("Ошибка", "СтатусЗагрузкиОшибка"); + Структура.Вставить("Успех", "СтатусЗагрузкиУспех"); + Структура.Вставить("Выполнение", "СтатусЗагрузкиВыполнение"); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусЗагрузкиПредупреждение"); + Структура.Вставить("ВыполненоСПредупреждениями", "СтатусЗагрузкиПредупреждение"); + Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусЗагрузкиОшибка"); + + Возврат Структура; +КонецФункции + +// Возвращает структуру статусов выполнения выгрузки данных. +// +// Возвращаемое значение: +// Структура: +// * Неопределено - Строка +// * Ошибка - Строка +// * Успех - Строка +// * Выполнение - Строка +// * Предупреждение_СообщениеОбменаБылоРанееПринято - Строка +// * ВыполненоСПредупреждениями - Строка +// * Ошибка_ТранспортСообщения - Строка +// +Функция СтраницыСтатусаВыгрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", "СтатусВыгрузкиНеопределено"); + Структура.Вставить("Ошибка", "СтатусВыгрузкиОшибка"); + Структура.Вставить("Успех", "СтатусВыгрузкиУспех"); + Структура.Вставить("Выполнение", "СтатусВыгрузкиВыполнение"); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", "СтатусВыгрузкиПредупреждение"); + Структура.Вставить("ВыполненоСПредупреждениями", "СтатусВыгрузкиПредупреждение"); + Структура.Вставить("Ошибка_ТранспортСообщения", "СтатусВыгрузкиОшибка"); + + Возврат Структура; +КонецФункции + +// Возвращает структуру с наименованием гиперссылки поля загрузки данных. +// +// Возвращаемое значение: +// Структура: +// * Неопределено - Строка +// * Ошибка - Строка +// * ВыполненоСПредупреждениями - Строка +// * Успех - Строка +// * Выполнение - Строка +// * Предупреждение_СообщениеОбменаБылоРанееПринято - Строка +// * Ошибка_ТранспортСообщения - Строка +// +Функция ЗаголовкиГиперссылокЗагрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", НСтр("ru = 'Получение данных не выполнялось'")); + Структура.Вставить("Ошибка", НСтр("ru = 'Не удалось получить данные'")); + Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Данные получены с предупреждениями'")); + Структура.Вставить("Успех", НСтр("ru = 'Данные успешно получены'")); + Структура.Вставить("Выполнение", НСтр("ru = 'Выполняется получение данных...'")); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Нет новых данных для получения'")); + Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Не удалось получить данные'")); + + Возврат Структура; +КонецФункции + +// Возвращает структуру с наименованием гиперссылки поля выгрузки данных. +// +// Возвращаемое значение: +// Структура: +// * Неопределено - Строка +// * Ошибка - Строка +// * ВыполненоСПредупреждениями - Строка +// * Успех - Строка +// * Выполнение - Строка +// * Предупреждение_СообщениеОбменаБылоРанееПринято - Строка +// * Ошибка_ТранспортСообщения - Строка +// +Функция ЗаголовкиГиперссылокВыгрузкиДанных() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Неопределено", НСтр("ru = 'Отправка данных не выполнялась'")); + Структура.Вставить("Ошибка", НСтр("ru = 'Не удалось отправить данные'")); + Структура.Вставить("Успех", НСтр("ru = 'Данные успешно отправлены'")); + Структура.Вставить("Выполнение", НСтр("ru = 'Выполняется отправка данных...'")); + + Структура.Вставить("Предупреждение_СообщениеОбменаБылоРанееПринято", НСтр("ru = 'Данные отправлены с предупреждениями'")); + Структура.Вставить("ВыполненоСПредупреждениями", НСтр("ru = 'Данные отправлены с предупреждениями'")); + Структура.Вставить("Ошибка_ТранспортСообщения", НСтр("ru = 'Не удалось отправить данные'")); + + Возврат Структура; +КонецФункции + +// Открывает форму или гиперссылку с подробным описанием синхронизации данных. +// +Процедура ОткрытьПодробноеОписаниеСинхронизации(СсылкаНаПодробноеОписание) Экспорт + + Если ВРег(Лев(СсылкаНаПодробноеОписание, 4)) = "HTTP" Тогда + + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СсылкаНаПодробноеОписание); + + Иначе + + ОткрытьФорму(СсылкаНаПодробноеОписание); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ЭкспортныеСлужебныеПроцедурыИФункции + +// Только для внутреннего использования. +// +Процедура ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском(Параметры, Контекст) Экспорт + + Форма = ОткрытьФорму( + "Обработка.ПомощникСозданияОбменаДанными.Форма.ПовторнаяСинхронизацияДанныхПередЗапуском", , , , , , + Новый ОписаниеОповещения( + "ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском", ЭтотОбъект, Параметры)); + + Если Форма = Неопределено Тогда + ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском("Продолжить", Параметры); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры. +// ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском. +// +Процедура ПослеЗакрытияФормыПовторнаяСинхронизацияДанныхПередЗапуском(Результат, Параметры) Экспорт + + Если Результат <> "Продолжить" Тогда + Параметры.Отказ = Истина; + Иначе + Параметры.ПолученныеПараметрыКлиента.Вставить( + "ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском"); + КонецЕсли; + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + +// Только для внутреннего использования. Продолжение процедуры. +// ФормаНастройкиПередЗакрытием. +// +Процедура ФормаНастройкиПередЗакрытиемЗавершение(Ответ, Форма) Экспорт + + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Форма.Модифицированность = Ложь; + Форма.Закрыть(); + + // Очищаем кэш повторного использования для сброса возможных COM соединений. + ОбновитьПовторноИспользуемыеЗначения(); +КонецПроцедуры + // Открывает диалог для выбора файла, запрашивая установку расширения для работы с файлами. // // Параметры: @@ -1197,25 +1265,9 @@ КонецПроцедуры -// Открывает инструкцию по восстановлению/изменению пароля синхронизации данных -// с автономным рабочим местом. -// -Процедура ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(Знач АдресДляВосстановленияПароляУчетнойЗаписи) Экспорт - - Если ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи) Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Адрес инструкции для восстановления пароля учетной записи не задан.'")); - - Иначе - - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресДляВосстановленияПароляУчетнойЗаписи); - - КонецЕсли; - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +#Область ЛокальныеСлужебныеПроцедурыИФункции Процедура ПриЗакрытииФормыНастройкиУзлаПланаОбмена(Форма, ИмяРеквизитаФормы) @@ -1254,9 +1306,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС ИНТЕРАКТИВНОГО ДОПОЛНЕНИЯ ВЫГРУЗКИ -// +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейсИнтерактивногоДополненияВыгрузки // Обработка диалогов интерактивного дополнения. // @@ -1266,7 +1318,7 @@ // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: -// Открытая форма +// ФормаКлиентскогоПриложения - открытая форма с переданными параметрами // Функция ОткрытьФормуДополненияВыгрузкиСценарийУзла(Знач ДополнениеВыгрузки, Знач Владелец=Неопределено, Знач Уникальность=Неопределено, Знач Окно=Неопределено) Экспорт @@ -1287,7 +1339,7 @@ // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: -// Открытая форма +// ФормаКлиентскогоПриложения - открытая форма с переданными параметрами // Функция ОткрытьФормуДополненияВыгрузкиВсеДокументы(Знач ДополнениеВыгрузки, Знач Владелец=Неопределено, Знач Уникальность=Неопределено, Знач Окно=Неопределено) Экспорт ПараметрыФормы = Новый Структура; @@ -1314,7 +1366,7 @@ // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: -// Открытая форма +// ФормаКлиентскогоПриложения - открытая форма обработки ИнтерактивноеИзменениеВыгрузки с переданными параметрами // Функция ОткрытьФормуДополненияВыгрузкиДетальныйОтбор(Знач ДополнениеВыгрузки, Знач Владелец=Неопределено, Знач Уникальность=Неопределено, Знач Окно=Неопределено) Экспорт ПараметрыФормы = Новый Структура; @@ -1335,7 +1387,7 @@ // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: -// Открытая форма +// ФормаКлиентскогоПриложения - открытая форма обработки ИнтерактивноеИзменениеВыгрузки с переданными параметрами // Функция ОткрытьФормуДополненияВыгрузкиСоставДанных(Знач ДополнениеВыгрузки, Знач Владелец=Неопределено, Знач Уникальность=Неопределено, Знач Окно=Неопределено) Экспорт ПараметрыФормы = Новый Структура; @@ -1357,7 +1409,7 @@ // Владелец, Уникальность, Окно - параметры открытия окна формы. // // Возвращаемое значение: -// Открытая форма +// ФормаКлиентскогоПриложения - открытая форма обработки ИнтерактивноеИзменениеВыгрузки с переданными параметрами // Функция ОткрытьФормуДополненияВыгрузкиСохранениеНастроек(Знач ДополнениеВыгрузки, Знач Владелец=Неопределено, Знач Уникальность=Неопределено, Знач Окно=Неопределено) Экспорт ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, ДействиеВыбора", Истина, 3); @@ -1505,9 +1557,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ИНТЕРАКТИВНОГО ДОПОЛНЕНИЯ ВЫГРУЗКИ -// +#КонецОбласти + +#Область СлужебныеПроцедурыИФункцииИнтерактивногоДополненияВыгрузки Функция ДополнениеВыгрузкиОбработкаВыбораТиповогоВарианта(Знач ВыбранноеЗначение, ДополнениеВыгрузки) @@ -1558,16 +1610,6 @@ Возврат Истина; КонецФункции -Функция ПроверитьИЗарегистрироватьCOMСоединитель(Знач СтруктураНастроек, Оповещение = Неопределено) Экспорт - - Если НЕ ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - Возврат Истина; - КонецЕсли; - - Если НЕ ОбменДаннымиВызовСервера.ПроверитьИЗарегистрироватьCOMСоединитель(СтруктураНастроек) Тогда - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь, Оповещение); - КонецЕсли; - -КонецФункции +#КонецОбласти #КонецОбласти \ 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..9e08d9c38 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиОперацииВебСервисов/Module.bsl @@ -0,0 +1,1025 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +#Область ОбработчикиОпераций + +Функция ВыполнитьВыгрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + СообщениеОбмена = ""; + + ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, СообщениеОбмена); + + ХранилищеСообщенияОбмена = Новый ХранилищеЗначения(СообщениеОбмена, Новый СжатиеДанных(9)); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ВыполнитьВыгрузкуДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайлаСтрокой, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена, + ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор; + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайла); + + ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ВыполнитьВыгрузкуДанныхВнутренняяПубликация(ИмяПланаОбмена, КодУзлаИнформационнойБазы, + ИдентификаторЗадачи, ОбластьДанных) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ВыполнитьВыгрузкуДанныхВКлиентСерверномРежимеВнутренняяПубликация( + ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторЗадачи, ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ВыполнитьЗагрузку(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку( + ИмяПланаОбмена, КодУзлаИнформационнойБазы, ХранилищеСообщенияОбмена.Получить()); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ВыполнитьЗагрузкуДанных(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайлаСтрокой, ДлительнаяОперация, + ИдентификаторОперации, ДлительнаяОперацияРазрешена, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторФайлаСтрокой); + + ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ВыполнитьЗагрузкуДанныхВнутренняяПубликация(ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторЗадачи, + ИдентификаторФайлаСтрокой, ОбластьДанных = 0) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ИдентификаторФайла = Новый УникальныйИдентификатор(ИдентификаторФайлаСтрокой); + + ВыполнитьЗагрузкуДанныхВКлиентСерверномРежимеВнутренняяПубликация( + ИмяПланаОбмена, КодУзлаИнформационнойБазы, ИдентификаторЗадачи, ИдентификаторФайла, ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке, + ОбластьДанных = 0, ДополнительныеПараметрыXDTO = Неопределено) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + Если ДополнительныеПараметрыXDTO <> Неопределено Тогда + + ДополнительныеПараметры = СериализаторXDTO.ПрочитатьXDTO(ДополнительныеПараметрыXDTO); + + КонецЕсли; + + Результат = ОбменДаннымиСервер.ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке, ДополнительныеПараметры); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат СериализаторXDTO.ЗаписатьXDTO(Результат); + +КонецФункции + +Функция СоздатьУзелОбменаДанными(ПараметрыXDTO, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(Истина); + + Параметры = СериализаторXDTO.ПрочитатьXDTO(ПараметрыXDTO); + + НастройкиПодключения = Параметры.НастройкиПодключения; + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + + Попытка + + Если НастройкиПодключения.Свойство("WSКонечнаяТочкаКорреспондента") + И ЗначениеЗаполнено(НастройкиПодключения.WSКонечнаяТочкаКорреспондента) Тогда + + НастройкиПодключенияИзXML = + ТранспортСообщенийОбмена.НастройкиПодключенияИзXML(Параметры.СтрокаПараметровXML, "SM"); + + // АПК:1416-выкл 4.2. Исключением можно считать структуры, формат которых не фиксирован (из корреспондента) + + // Подключение через внутреннюю публикацию из предыдущих версий не передаем идентификатор + Если НЕ НастройкиПодключения.Свойство("ИдентификаторТранспорта") Тогда + + НастройкиПодключения.Вставить("ИдентификаторТранспорта", "SM"); + + КонецЕсли; + + // При подключение через внутреннюю публикацию для новых видов транспорта + Если НЕ НастройкиПодключения.Свойство("НастройкиТранспорта") + ИЛИ ТипЗнч(НастройкиПодключения.НастройкиТранспорта) <> Тип("Структура") Тогда + + // Для работы в сервисе п/с ТехнологияСервиса.ОбменСообщениями обязательна, + // поэтому проверка вызова не требуется. + КонечнаяТочкаКорреспондента = ПланыОбмена["ОбменСообщениями"].НайтиПоКоду(НастройкиПодключения["WSКонечнаяТочкаКорреспондента"]); // @Non-NLS-2 + + НастройкиТранспорта = Новый Структура; + НастройкиТранспорта.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); + НастройкиТранспорта.Вставить("ОбластьДанныхКорреспондента", НастройкиПодключения["WSОбластьДанныхКорреспондента"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("НаименованиеКорреспондента", ""); + НастройкиТранспорта.Вставить("ВнутренняяПубликация", Истина); + + НастройкиПодключения.Вставить("НастройкиТранспорта", НастройкиТранспорта); + + КонецЕсли; + + // АПК:1416-вкл + + Иначе + + НастройкиПодключенияИзXML = + ТранспортСообщенийОбмена.НастройкиПодключенияИзXML(Параметры.СтрокаПараметровXML, "WS"); + + НастройкиПодключения.Вставить("ИдентификаторТранспорта", "ПассивныйРежим"); + НастройкиПодключения.Вставить("НастройкиТранспорта", Новый Структура); + + КонецЕсли; + + ТранспортСообщенийОбмена.ПроверитьИЗаполнитьНастройкиПодключенияXML(НастройкиПодключения, НастройкиПодключенияИзXML, Истина); + + МодульПомощникНастройки.ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения); + + Исключение + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + ВызватьИсключение СообщениеОбОшибке; + КонецПопытки; + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция УдалитьУзелОбменаДанными(ИмяПланаОбмена, ИдентификаторУзла, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + + УзелОбмена = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, ИдентификаторУзла); + + Если УзелОбмена = Неопределено Тогда + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найден узел плана обмена ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ИмяПланаОбмена, ИдентификаторУзла); + КонецЕсли; + + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УзелОбмена); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ПолучитьСостояниеДлительнойОперации(ИдентификаторОперации, СтрокаСообщенияОбОшибке, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + + СостоянияФоновогоЗадания = Новый Соответствие; + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Активно, "Active"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Завершено, "Completed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.ЗавершеноАварийно, "Failed"); + СостоянияФоновогоЗадания.Вставить(СостояниеФоновогоЗадания.Отменено, "Canceled"); + + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторОперации)); + + Если ФоновоеЗадание = Неопределено Тогда + + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдено длительной операции с идентификатором %1.'"), + ИдентификаторОперации); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат СостоянияФоновогоЗадания.Получить(СостояниеФоновогоЗадания.Отменено); + + КонецЕсли; + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + + СтрокаСообщенияОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + + КонецЕсли; + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние); + +КонецФункции + +Функция ПодготовитьФайлДляПолучения(ИдентификаторФайла, РазмерБлока, ИдентификаторПередачи, КоличествоЧастей, Область = 0) Экспорт + + ВойтиВОбластьДанных(Область); + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторПередачи = Новый УникальныйИдентификатор; + + ТранспортСообщенийОбменаПереопределяемый.ПередПолучениемФайлаИзХранилища(ИдентификаторФайла); + + ИмяИсходногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ИдентификаторФайла); + + ВременныйКаталог = ВременныйКаталогВыгрузки(ИдентификаторПередачи); + + ИмяИсходногоФайлаВоВременномКаталоге = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + СоздатьКаталог(ВременныйКаталог); + + ПереместитьФайл(ИмяИсходногоФайла, ИмяИсходногоФайлаВоВременномКаталоге); + + Если РазмерБлока <> 0 Тогда + // Разделение файла на части + ИменаФайлов = РазделитьФайл(ИмяИсходногоФайлаВоВременномКаталоге, РазмерБлока * 1024); + КоличествоЧастей = ИменаФайлов.Количество(); + + УдалитьФайлы(ИмяИсходногоФайлаВоВременномКаталоге); + Иначе + КоличествоЧастей = 1; + ПереместитьФайл(ИмяИсходногоФайлаВоВременномКаталоге, ИмяИсходногоФайлаВоВременномКаталоге + ".1"); + КонецЕсли; + + ВыйтиИзОбластиДанных(Область); + + Возврат ""; + +КонецФункции + +Функция ПолучитьЧастьФайла(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти, Область = 0) Экспорт + + ВойтиВОбластьДанных(Область); + + ИменаФайлов = НайтиФайлЧасти(ВременныйКаталогВыгрузки(ИдентификаторПередачи), НомерЧасти); + + Если ИменаФайлов.Количество() = 0 Тогда + + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, Строка(НомерЧасти), Строка(ИдентификаторПередачи)); + ВызватьИсключение(ТекстСообщения); + + ИначеЕсли ИменаФайлов.Количество() > 1 Тогда + + ШаблонСообщения = НСтр("ru = 'Найдено несколько фрагментов %1 сессии передачи с идентификатором %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, Строка(НомерЧасти), Строка(ИдентификаторПередачи)); + ВызватьИсключение(ТекстСообщения); + + КонецЕсли; + + ИмяФайлаЧасти = ИменаФайлов[0].ПолноеИмя; + ДанныеЧасти = Новый ДвоичныеДанные(ИмяФайлаЧасти); + + ВыйтиИзОбластиДанных(Область); + + Возврат ""; + +КонецФункции + +Функция УдалитьСообщениеОбмена(ИдентификаторПередачи) Экспорт + + Попытка + УдалитьФайлы(ВременныйКаталогВыгрузки(ИдентификаторПередачи)); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат ""; + +КонецФункции + +Функция ПоместитьЧастьФайла(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти, Область = 0) Экспорт + + ВойтиВОбластьДанных(Область); + + ВременныйКаталог = ВременныйКаталогВыгрузки(ИдентификаторПередачи); + + Если НомерЧасти = 1 Тогда + + СоздатьКаталог(ВременныйКаталог); + + КонецЕсли; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(НомерЧасти)); + + ДанныеЧасти.Записать(ИмяФайла); + + ВыйтиИзОбластиДанных(Область); + + Возврат ""; + +КонецФункции + +Функция СобратьФайлИзЧастей(ИдентификаторПередачи, КоличествоЧастей, ИдентификаторФайла, Область = 0) Экспорт + + ВойтиВОбластьДанных(Область); + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = ВременныйКаталогВыгрузки(ИдентификаторПередачи); + + ФайлыЧастейДляОбъединения = Новый Массив; + + Для НомерЧасти = 1 По КоличествоЧастей Цикл + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, ПолучитьИмяФайлаЧасти(НомерЧасти)); + + Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда + ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. + |Необходимо убедиться, что в настройках программы заданы параметры + |""Каталог временных файлов для Linux"" и ""Каталог временных файлов для Windows"".'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, Строка(НомерЧасти), Строка(ИдентификаторПередачи)); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ФайлыЧастейДляОбъединения.Добавить(ИмяФайла); + + КонецЦикла; + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, "data.zip"); + + ОбъединитьФайлы(ФайлыЧастейДляОбъединения, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + + Если Разархиватор.Элементы.Количество() = 0 Тогда + + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ВыйтиИзОбластиДанных(Область); + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + + КонецЕсли; + + КаталогВыгрузки = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(); + + ЭлементАрхива = Разархиватор.Элементы.Получить(0); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВыгрузки, ЭлементАрхива.Имя); + + Разархиватор.Извлечь(ЭлементАрхива, КаталогВыгрузки); + Разархиватор.Закрыть(); + + ИдентификаторФайла = ОбменДаннымиСервер.ПоместитьФайлВХранилище(ИмяФайла, ИдентификаторФайла); + + ТранспортСообщенийОбменаПереопределяемый.ПриПомещенииФайлаВХранилище(ИмяФайла, ИдентификаторФайла); + + Попытка + УдалитьФайлы(ВременныйКаталог); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ВыйтиИзОбластиДанных(Область); + + Возврат ""; + +КонецФункции + +Функция ПоместитьСообщениеДляСопоставленияДанных(ИмяПланаОбмена, ИдентификаторУзла, ИдентификаторФайла, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + + УзелОбмена = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, ИдентификаторУзла); + + Если УзелОбмена = Неопределено Тогда + + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найден узел плана обмена ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ИмяПланаОбмена, ИдентификаторУзла); + + КонецЕсли; + + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); + + ОбменДаннымиСлужебный.ПоместитьСообщениеДляСопоставленияДанных(УзелОбмена, ИдентификаторФайла); + + // У веб-клиента и тонкого клиент разные временные каталоги. + // Если продолжить настройку синхронизации из тонкого клиента, то будет ошибка из-за отсутствия файла во временном + // каталоге тонкого клиента. Что бы этого не было, перемещаем файл сопоставления в каталог, к которому гарантированно + // будет доступ у двух сеансов. + ПереместитьФайлСообщенияДляФайловойИБ(ИдентификаторФайла); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат ""; + +КонецФункции + +Функция ТестовоеПодключение(ИмяПланаОбмена, КодУзла, Результат, ОбластьДанных = 0) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + + // Проверяем наличие прав для выполнения обмена. + Попытка + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(Истина); + Исключение + Результат = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + // Проверяем блокировку информационной базы для обновления. + Попытка + ПроверитьБлокировкуИнформационнойБазыДляОбновления(); + Исключение + Результат = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + // Проверяем наличие узла плана обмена (возможно узел уже удален). + УзелСсылка = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); + Если УзелСсылка = Неопределено + Или ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелСсылка, "ПометкаУдаления") Тогда + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ПредставлениеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Представление(); + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найдена настройка синхронизации данных ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, ПредставлениеПланаОбмена, КодУзла); + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат Ложь; + КонецЕсли; + + ВыйтиИзОбластиДанных(ОбластьДанных); + + Возврат Истина; + +КонецФункции + +Функция ИзменитьТранспортНаВебСервисВнутренняяПубликация(ПараметрыXDTO, ОбластьДанных) Экспорт + + ВойтиВОбластьДанных(ОбластьДанных); + + УстановитьПривилегированныйРежим(Истина); + + Параметры = СериализаторXDTO.ПрочитатьXDTO(ПараметрыXDTO); + + УзелОбмена = ОбменДаннымиСервер.УзелПланаОбменаПоКоду(Параметры.ИмяПланаОбмена, Параметры.КодУзлаКорреспондента); + + Если УзелОбмена = Неопределено Тогда + + ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В ""%1"" не найден узел плана обмена ""%2"" с идентификатором ""%3"".'"), + ПредставлениеПрограммы, Параметры.ИмяПланаОбмена, Параметры.КодУзлаКорреспондента); + + КонецЕсли; + + КонечнаяТочка = ПланыОбмена["ОбменСообщениями"].НайтиПоКоду(Параметры.КонечнаяТочкаКорреспондента); + + НастройкиТранспорта = Новый Структура; + НастройкиТранспорта.Вставить("ВнутренняяПубликация", Истина); + НастройкиТранспорта.Вставить("КонечнаяТочка", ""); + НастройкиТранспорта.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочка); + НастройкиТранспорта.Вставить("НаименованиеКорреспондента", ""); + НастройкиТранспорта.Вставить("ОбластьДанныхКорреспондента", Параметры.ОбластьДанныхКорреспондента); + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта(УзелОбмена, "SM", НастройкиТранспорта, Истина); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменение транспорта узла ""%1"" плана обмена ""%2"" в области данных %3 на ""Интернет"".'"), + Параметры.КодУзлаКорреспондента, Параметры.ИмяПланаОбмена, ОбластьДанных); + + ЗаписьЖурналаРегистрации(ОбменДаннымиВебСервис.СобытиеЖурналаРегистрацииИзменениеТранспортаНаWS(), + УровеньЖурналаРегистрации.Информация, , , ТекстСообщения); + + СтруктураЗаписи = Новый Структура("Корреспондент", УзелОбмена); + ОбменДаннымиСлужебный.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "НастройкиТранспортаОбменаОбластиДанных"); + + ВыйтиИзОбластиДанных(ОбластьДанных); + +КонецФункции + +Функция ОтветныйВызов(ИдентификаторЗадачи, Ошибка, Область) Экспорт + + ВойтиВОбластьДанных(Область); + + УстановитьПривилегированныйРежим(Истина); + + МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация"); + МодульОбменДаннымиВнутренняяПубликация.ОтметитьВыполнениеЗадачи(ИдентификаторЗадачи, Ошибка); + + Если Ошибка = "" Тогда + + Задача = МодульОбменДаннымиВнутренняяПубликация.СледующаяЗадача(ИдентификаторЗадачи); + ЗадачаПред = ИдентификаторЗадачи; + + Если Задача = Неопределено Тогда + Возврат ""; + КонецЕсли; + + ПараметрыПроцедуры = Новый Массив; + ПараметрыПроцедуры.Добавить(Задача); + ПараметрыПроцедуры.Добавить(ЗадачаПред); + + Ключ = Задача.ИдентификаторЗадачи; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Ключ", Лев(Ключ, 120)); + ПараметрыЗадания.Вставить("ИмяМетода" , "ОбменДаннымиВнутренняяПубликация.ВыполнитьОчередьЗадач"); + ПараметрыЗадания.Вставить("ОбластьДанных", Область); + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ТекущаяДатаСеанса()); + ПараметрыЗадания.Вставить("Параметры", ПараметрыПроцедуры); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 900); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + + Иначе + + Задача = МодульОбменДаннымиВнутренняяПубликация.ЗадачаПоИдентификатору(ИдентификаторЗадачи); + + Отказ = Ложь; + СтруктураНастроекОбмена = + МодульОбменДаннымиВнутренняяПубликация.НастройкиОбменаДляУзлаИнформационнойБазы(Задача.УзелИнформационнойБазы, Задача.Действие, Отказ); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + + ОбменДаннымиСервер.ЗаписьЖурналаРегистрацииОбменаДанными(Ошибка, СтруктураНастроекОбмена, Истина); + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + ВыйтиИзОбластиДанных(Область); + +КонецФункции + +Функция СтатусЗадачи(ИдентификаторЗадачи) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыЗадания = Новый Структура("Ключ", ИдентификаторЗадачи); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + Задания = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + + Если Задания.Количество() > 0 Тогда + + Состояние = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Задания[0].Идентификатор, "СостояниеЗадания"); + Возврат ОбщегоНазначения.ИмяЗначенияПеречисления(Состояние); + + Иначе + + Возврат ""; + + КонецЕсли; + + +КонецФункции + +Функция ОстановитьЗадачи(ИдентификаторыЗадач, Область) Экспорт + + ВойтиВОбластьДанных(Область); + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторыЗадачМассив = СериализаторXDTO.ПрочитатьXDTO(ИдентификаторыЗадач); + + Для Каждого ИдентификаторЗадачи Из ИдентификаторыЗадачМассив Цикл + + Отбор = Новый Структура("Ключ", ИдентификаторЗадачи); + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + Задания = МодульОчередьЗаданий.ПолучитьЗадания(Отбор); + + Для Каждого Задание Из Задания Цикл + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 0); + + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + МодульОчередьЗаданий.УдалитьЗадание(Задание.Идентификатор); + + УникальныйИдентификаторФЗ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( + Задание.Идентификатор, "ИсполняющееФоновоеЗадание"); + + ДлительныеОперации.ОтменитьВыполнениеЗадания(УникальныйИдентификаторФЗ); + + КонецЦикла; + + КонецЦикла; + + ВыйтиИзОбластиДанных(Область); + + Возврат ""; + +КонецФункции + +#КонецОбласти + +Процедура ПроверитьБлокировкуИнформационнойБазыДляОбновления() + + Если ЗначениеЗаполнено(ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления()) Тогда + + ВызватьИсключение НСтр("ru = 'Синхронизация данных временно недоступна в связи с обновлением приложения в Интернете.'"); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена) + + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Выгрузка'")); + + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); + ПараметрыПроцедуры.Вставить("ИспользоватьСжатие", Истина); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Выгрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиВебСервис.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе + Сообщение = НСтр("ru = 'Ошибка при выгрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииВыгрузкаДанныхВСервисПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + + ВызватьИсключение Сообщение; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуДанныхВКлиентСерверномРежимеВнутренняяПубликация(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, ИдентификаторЗадачи, ОбластьДанных) + + ПараметрыПроцедуры = Новый Массив; + ПараметрыПроцедуры.Добавить(ИмяПланаОбмена); + ПараметрыПроцедуры.Добавить(КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Добавить(ИдентификаторЗадачи); + + Ключ = ИдентификаторЗадачи; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Ключ", Лев(Ключ, 120)); + ПараметрыЗадания.Вставить("ИмяМетода" , "ОбменДаннымиВнутренняяПубликация.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов"); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ТекущаяДатаСеанса()); + ПараметрыЗадания.Вставить("Параметры", ПараметрыПроцедуры); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 900); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДанныхВКлиентСерверномРежиме(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена) + + + КлючФоновогоЗадания = КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, + НСтр("ru = 'Загрузка'")); + + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + ПараметрыПроцедуры.Вставить("КодУзлаИнформационнойБазы", КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Вставить("ИдентификаторФайла", ИдентификаторФайла); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Загрузка данных через веб-сервис.'"); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Не ДлительнаяОперацияРазрешена; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "ОбменДаннымиВебСервис.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + Если ФоновоеЗадание.Статус = "Выполняется" Тогда + ИдентификаторОперации = Строка(ФоновоеЗадание.ИдентификаторЗадания); + ДлительнаяОперация = Истина; + Возврат; + ИначеЕсли ФоновоеЗадание.Статус = "Выполнено" Тогда + ДлительнаяОперация = Ложь; + Возврат; + Иначе + + Сообщение = НСтр("ru = 'Ошибка при загрузке данных через веб-сервис.'"); + Если ЗначениеЗаполнено(ФоновоеЗадание.ПодробноеПредставлениеОшибки) Тогда + Сообщение = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаДанныхИзСервисаПередачиФайлов(), + УровеньЖурналаРегистрации.Ошибка, , , Сообщение); + + ВызватьИсключение Сообщение; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДанныхВКлиентСерверномРежимеВнутренняяПубликация(ИмяПланаОбмена, + КодУзлаИнформационнойБазы, ИдентификаторЗадачи, ИдентификаторФайла, ОбластьДанных) + + ПараметрыПроцедуры = Новый Массив; + ПараметрыПроцедуры.Добавить(ИмяПланаОбмена); + ПараметрыПроцедуры.Добавить(КодУзлаИнформационнойБазы); + ПараметрыПроцедуры.Добавить(ИдентификаторЗадачи); + ПараметрыПроцедуры.Добавить(ИдентификаторФайла); + + Ключ = ИдентификаторЗадачи; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Ключ", Лев(Ключ, 120)); + ПараметрыЗадания.Вставить("ИмяМетода" , "ОбменДаннымиВнутренняяПубликация.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов"); + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ТекущаяДатаСеанса()); + ПараметрыЗадания.Вставить("Параметры", ПараметрыПроцедуры); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 900); + + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + +КонецПроцедуры + +Функция КлючФоновогоЗаданияВыгрузкиЗагрузкиДанных(ПланОбмена, КодУзла, Действие) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'ПланОбмена:%1 КодУзла:%2 Действие:%3'"), + ПланОбмена, + КодУзла, + Действие); + +КонецФункции + +Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) + + УстановитьПривилегированныйРежим(Истина); + + ВременныйКаталог = "{ИдентификаторСессии}"; + ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + + Возврат Результат; + +КонецФункции + +Функция НайтиФайлЧасти(Знач Каталог, Знач НомерФайла) + + Для КоличествоРазрядов = КоличествоРазрядовЧисла(НомерФайла) По 5 Цикл + + ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧЦ=%1; ЧВН=; ЧГ=0", Строка(КоличествоРазрядов)); + + ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("data.zip.%1", Формат(НомерФайла, ФорматнаяСтрока)); + + ИменаФайлов = НайтиФайлы(Каталог, ИмяФайла); + + Если ИменаФайлов.Количество() > 0 Тогда + + Возврат ИменаФайлов; + + КонецЕсли; + + КонецЦикла; + + Возврат Новый Массив; + +КонецФункции + +Функция ПолучитьИмяФайлаЧасти(PartNumber) + + Результат = "data.zip.[n]"; + + Возврат СтрЗаменить(Результат, "[n]", Формат(PartNumber, "ЧГ=0")); + +КонецФункции + +Функция КоличествоРазрядовЧисла(Знач Число) + + Возврат СтрДлина(Формат(Число, "ЧДЦ=0; ЧГ=0")); + +КонецФункции + +Процедура ПереместитьФайлСообщенияДляФайловойИБ(ИдентификаторФайла) + + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла + |ИЗ + | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными + |ГДЕ + | СообщенияОбменаДанными.ИдентификаторСообщения = &ИдентификаторСообщения"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторСообщения", Строка(ИдентификаторФайла)); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + ИмяФайла = Выборка.ИмяФайла; + ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(), ИмяФайла); + + ИмяКаталога = ОбменДаннымиСервер.ИмяКаталогаДляСопоставленияФайловаяИБ(); + + Каталог = Новый Файл(ИмяКаталога); + Если Не Каталог.Существует() Тогда + СоздатьКаталог(ИмяКаталога); + КонецЕсли; + + ИмяНовогоФайлаСообщения = ОбменДаннымиСервер.ПолноеИмяФайлаДляСопоставленияФайловаяИБ(ИмяФайла); + + ПереместитьФайл(ИмяФайлаСообщения, ИмяНовогоФайлаСообщения); + +КонецПроцедуры + +Процедура ВойтиВОбластьДанных(ОбластьДанных) + + Если ОбластьДанных = 0 + Или Не ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + + МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); + ВерсияБТС = МодульТехнологияСервиса.ВерсияБиблиотеки(); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБТС, "2.0.7.46") >= 0 Тогда + МодульРаботаВМоделиСервиса.ВойтиВОбластьДанных(ОбластьДанных); //АПК: 287 + Иначе + МодульРаботаВМоделиСервиса.УстановитьРазделениеСеанса(Истина, ОбластьДанных); //АПК: 222 + КонецЕсли; + +КонецПроцедуры + +Процедура ВыйтиИзОбластиДанных(ОбластьДанных) + + Если ОбластьДанных = 0 + Или Не ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + + МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса"); + ВерсияБТС = МодульТехнологияСервиса.ВерсияБиблиотеки(); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБТС, "2.0.7.46") >= 0 Тогда + МодульРаботаВМоделиСервиса.ВыйтиИзОбластиДанных(); //АПК: 287 + Иначе + МодульРаботаВМоделиСервиса.УстановитьРазделениеСеанса(Ложь); //АПК: 222 + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/ОбменДаннымиОперацииВебСервисов/ОбменДаннымиОперацииВебСервисов.mdo b/SSL/src/CommonModules/ОбменДаннымиОперацииВебСервисов/ОбменДаннымиОперацииВебСервисов.mdo new file mode 100644 index 000000000..f5bdcb8fa --- /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 36af76e10..875504492 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -283,7 +283,7 @@ // ИмяПланаОбмена - Строка - имя плана обмена корреспондирующей базы, // для которого подбираем соответствие из метаданных конфигурации. // ИдентификаторНастройки- Строка - идентификатор варианта настройки (ВариантНастройки), корреспондирующей базы. -// НайденноеИмяПланаОбмена - Строка - Если информационная база уже содержит план обмена с именем ИмяПланаОбмена, +// НайденноеИмяПланаОбмена - Строка - если информационная база уже содержит план обмена с именем ИмяПланаОбмена, // то параметр будет равен ИмяПланаОбмена. // Иначе параметр будет содержать имя Глобального плана обмена. // Параметр может быть переопределен @@ -299,16 +299,16 @@ // Позволяет переопределить стандартную обработку РеквизитыСсылочногоТипаУзлаПланаОбмена. // // Параметры: -// УзелПланаОбменаОбъект - ПланОбменаОбъект - Ссылка на план обмена. +// УзелПланаОбменаОбъект - ПланОбменаОбъект - ссылка на план обмена. // Результат - ТаблицаЗначений - данные заполненные в процедуре ОбменДаннымиСобытия.РеквизитыСсылочногоТипаУзлаПланаОбмена: // * Порядок - Число. -// * ИмяОбъекта - Строка - Полное имя объекта метаданных. +// * ИмяОбъекта - Строка - полное имя объекта метаданных. // * ТипОбъектаСтрокой - Строка. // * ИмяПланаОбмена - Строка. -// * ИмяТабличнойЧасти - Строка - Имя табличной части плана обмена. -// * РеквизитыРегистрации - Строка - Ключ объектов регистрации. +// * ИмяТабличнойЧасти - Строка - имя табличной части плана обмена. +// * РеквизитыРегистрации - Строка - ключ объектов регистрации. // * СтруктураРеквизитовРегистрации - Структура: -// * Ключ - Строка - Имя реквизита или имя колонки плана обмена. +// * Ключ - Строка - имя реквизита или имя колонки плана обмена. // * Значение - ЛюбаяСсылка - ссылка на регистрируемый объект // Процедура ПриПереопределенииРеквизитовСсылочногоТипаУзлаПланаОбмена(УзелПланаОбменаОбъект, Результат) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index ff59fc41b..d45646c03 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -10,7 +10,11 @@ #Область УстаревшиеПроцедурыИФункции -// Устарела. Следует использовать новую (см. ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто). +// Устарела. Следует использовать новую +// См. ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто. +// +// Возвращаемое значение: +// Булево // Функция ЭтоАвтономноеРабочееМесто() Экспорт @@ -18,7 +22,15 @@ КонецФункции -// Устарела. Следует использовать новую (см. ОбменДаннымиСервер.УзелПланаОбменаПоКоду). +// Устарела. Следует использовать новую +// См. ОбменДаннымиСервер.УзелПланаОбменаПоКоду. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена +// КодУзла - Строка - код узла +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.УзелПланаОбменаПоКоду // Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт @@ -126,6 +138,20 @@ КонецФункции +// Возвращает признак принадлежности узла к плану обмена РИБ. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Булево - Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// +Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт + + Возврат УзелИнформационнойБазы.Метаданные().РаспределеннаяИнформационнаяБаза; + +КонецФункции + // См. ОбменДаннымиСервер.НастройкиПланаОбмена Функция НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента = "", ИмяКорреспондента = "", КорреспондентВМоделиСервиса = Неопределено) Экспорт Возврат ОбменДаннымиСервер.НастройкиПланаОбмена(ИмяПланаОбмена, ВерсияКорреспондента, ИмяКорреспондента, КорреспондентВМоделиСервиса); @@ -137,11 +163,14 @@ Возврат ОбменДаннымиСервер.ОписаниеВариантаНастройки(ИмяПланаОбмена, ИдентификаторНастройки, ВерсияКорреспондента, ИмяКорреспондента); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Механизм регистрации объектов на узлах планов обмена (МРО). + +#Область МеханизмРегистрацииОбъектовНаУзлахПлановОбменаМРО // Получает имя этой информационной базы из константы или из синонима конфигурации. // (Только для внутреннего использования). +// +// Возвращаемое значение: +// Строка // Функция ИмяЭтойИнформационнойБазы() Экспорт @@ -159,7 +188,7 @@ КонецФункции // Получает код предопределенного узла плана обмена. -// +// // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. // @@ -428,7 +457,7 @@ // УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена. // // Возвращаемое значение: -// Имя - Строка - имя плана обмена как объекта метаданного. +// Строка - имя плана обмена как объекта метаданного. // Функция ПолучитьИмяПланаОбмена(УзелПланаОбмена) Экспорт @@ -497,10 +526,14 @@ КонецФункции // Определяет используется ли версионирование. -// +// // Параметры: // Отправитель - ПланОбменаСсылка - если параметр передается, то определяет необходимо -// ли использовать создание версий объектов для переданного узла. +// ли использовать создание версий объектов для переданного узла. +// ПроверятьПраваДоступа - Булево +// +// Возвращаемое значение: +// Булево // Функция ИспользуетсяВерсионирование(Отправитель = Неопределено, ПроверятьПраваДоступа = Ложь) Экспорт @@ -587,14 +620,102 @@ КонецФункции +// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. +// +// Параметры: +// Корреспондент - Структура +// - ПланОбменаСсылка - узел плана обмена, который соответствует информационной +// базе-корреспонденту. +// +// Возвращаемое значение: +// Массив из Строка - массив номеров версий, поддерживаемых интерфейсом корреспондента. +// +Функция ВерсииКорреспондента(Знач Корреспондент) Экспорт + + Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда + СтруктураНастроек = Корреспондент; + Иначе + Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(Корреспондент) Тогда + МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); + СтруктураНастроек = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(Корреспондент); + КонецЕсли; + КонецЕсли; + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); + ПараметрыПодключения.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); + ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменДанными"); + +КонецФункции +// Получает предопределенный узел плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. +// +// Возвращаемое значение: +// ПланОбменаСсылка - предопределенный узел плана обмена. +// +Функция ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена) Экспорт + + Возврат ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(); + +КонецФункции + +// Возвращает признак принадлежности узла к плану обмена стандартного обмена (без правил конвертации). +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Булево - Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. +// +Функция ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) Экспорт + + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена"); + +КонецФункции + +// Возвращает массив всех узлов для заданного плана обмена кроме предопределенного узла. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. +// +// Возвращаемое значение: +// Массив из ПланОбменаСсылка - массив всех узлов для заданного плана обмена кроме предопределенного узла. +// +Функция УзлыПланаОбмена(ИмяПланаОбмена) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | #ИмяТаблицыПланаОбмена КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ЭтотУзел"); + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ИмяТаблицыПланаОбмена", "ПланОбмена." + ИмяПланаОбмена); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +#КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Механизм регистрации объектов на узлах планов обмена (МРО). +#Область МеханизмРегистрацииОбъектовНаУзлахПлановОбменаМРО // Получает таблицу правил регистрации объектов для плана обмена. // @@ -686,6 +807,9 @@ КонецФункции // Возвращает список планов обмена, которые содержат хотя бы один узел обмена (не учитывая ЭтотУзел). +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.ПолучитьИспользуемыеПланыОбмена // Функция ИспользуемыеПланыОбмена() Экспорт @@ -759,7 +883,7 @@ // Возвращает режим выгрузки объекта на основании пользовательского состава плана обмена (настроек пользователя). // // Параметры: -// ИмяОбъекта - полное имя объекта метаданных, для которого требуется получить режим выгрузки; +// ИмяОбъекта - Строка - полное имя объекта метаданных, для которого требуется получить режим выгрузки; // Получатель - ПланОбменаСсылка - ссылка на узел плана обмена, пользовательский состав которого будет использоваться. // // Возвращаемое значение: @@ -800,53 +924,6 @@ Возврат Результат; КонецФункции -// Получает предопределенный узел плана обмена. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. -// -// Возвращаемое значение: -// ЭтотУзел - ПланОбменаСсылка - предопределенный узел плана обмена. -// -Функция ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена) Экспорт - - Возврат ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(); - -КонецФункции - -// Возвращает признак принадлежности узла к плану обмена РИБ. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// -// Возвращаемое значение: -// Булево - Истина - узел принадлежит плану обмена РИБ, иначе Ложь. -// -Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт - - Возврат УзелИнформационнойБазы.Метаданные().РаспределеннаяИнформационнаяБаза; - -КонецФункции - -// Возвращает признак принадлежности узла к плану обмена стандартного обмена (без правил конвертации). -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, для которого требуется получить значение функции. -// -// Возвращаемое значение: -// Булево - Истина - узел принадлежит плану обмена стандартного обмена, иначе Ложь. -// -Функция ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) Экспорт - - Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) - И Не ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена"); - -КонецФункции - // Возвращает признак принадлежности узла к плану обмена универсального обмена (по правилам конвертации). // // Параметры: @@ -921,7 +998,7 @@ // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. // // Возвращаемое значение: -// СписокПравил - СписокЗначений - список макетов типовых правил обмена. +// см. ПравилаДляПланаОбменаИзКонфигурации. // Функция ПравилаКонвертацииДляПланаОбменаИзКонфигурации(ИмяПланаОбмена) Экспорт @@ -936,7 +1013,7 @@ // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. // // Возвращаемое значение: -// СписокПравил - СписокЗначений - список макетов типовых правил регистрации. +// см. ПравилаДляПланаОбменаИзКонфигурации // Функция ПравилаРегистрацииДляПланаОбменаИзКонфигурации(ИмяПланаОбмена) Экспорт @@ -946,12 +1023,9 @@ // Получает список планов обмена конфигурации, которые используют функционал БСП. // Список заполняется именами и синонимами планов обмена. -// -// Параметры: -// Нет. // // Возвращаемое значение: -// СписокПлановОбмена - СписокЗначений - список планов обмена конфигурации. +// СписокЗначений из Строка - список планов обмена конфигурации. // Функция СписокПлановОбменаБСП() Экспорт @@ -973,6 +1047,13 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, +// для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Строка // Функция ОбщиеДанныеУзлов(Знач УзелИнформационнойБазы) Экспорт @@ -982,6 +1063,17 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// ВерсияКорреспондента - Строка +// ИдентификаторНастройки - Строка +// +// Возвращаемое значение: +// Структура - табличные части плана обмена: +// * ТаблицыОбщие - Массив из Строка +// * ТаблицыЭтойБазы - Массив из Строка +// * ВсеТаблицыЭтойБазы - Массив из Строка // Функция ТабличныеЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента = "", Знач ИдентификаторНастройки = "") Экспорт @@ -1069,6 +1161,15 @@ КонецФункции // Функция-обертка одноименной функции. +// +// Параметры: +// Отбор - Структура - содержит значения элементов отбора. +// Если параметр задан, то будет получено дерево метаданных в соответствии с заданным отбором: +// Ключ - Строка - имя свойства элемента метаданных; +// Значение - Массив - множество значений для отбора. +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.ДеревоМетаданныхКонфигурации // Функция МетаданныеКонфигурации(Отбор) Экспорт @@ -1083,14 +1184,21 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, +// для которого требуется получить значение функции. +// ИмяФайлаСообщенияОбмена - Строка +// +// Возвращаемое значение: +// см. ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы // Функция СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена) Экспорт СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - Неопределено, - Ложь); + Неопределено); СтруктураНастроекОбмена.ОбработкаОбменаДанными.ИмяФайлаОбмена = ИмяФайлаСообщенияОбмена; @@ -1099,134 +1207,29 @@ КонецФункции // Функция-обертка одноименной функции модуля ОбменДаннымиСобытия. +// +// Параметры: +// ЗначенияСвойств - Структура - структура, содержащая значения свойств объекта из правил +// ТекстЗапроса - Строка - текст запроса из правил +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// ИмяРеквизитаФлага - Строка +// Выгрузка - Булево +// +// Возвращаемое значение: +// см. ОбменДаннымиСобытия.МассивУзловПоЗначениямСвойств // Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - Возврат ОбменДаннымиСобытия.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Выгрузка); - -КонецФункции - -// Возвращает коллекцию транспортов сообщений обмена, которые могут быть использованы для заданного узла плана обмена. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. -// ВариантНастройки - Строка - идентификатор варианта настройки синхронизации данных. -// -// Возвращаемое значение: -// Массив - используемые транспорты сообщений обмена для узла. -// -Функция ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы, Знач ВариантНастройки = "") Экспорт - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - - Если Не УзелИнформационнойБазы.Пустая() Тогда - ВариантНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы); - КонецЕсли; - - ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, - ВариантНастройки, "", ""); - - Результат = ОписаниеВариантаНастройки.ИспользуемыеТранспортыСообщенийОбмена; - - Если Результат.Количество() = 0 Тогда - Результат = ОбменДаннымиСервер.ВсеТранспортыСообщенийОбменаКонфигурации(); - КонецЕсли; - - // Обмен через COM-соединение не поддерживается: - // - для базовых версий конфигураций; - // - для РИБ; - // - для стандартного обмена (без использования правил конвертации); - // - если сервер 1С запущен на ОС Linux. - // - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() - Или ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) - Или ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) - Или ОбщегоНазначения.ЭтоLinuxСервер() Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, - Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - КонецЕсли; - - // Обмен через WS-соединение не поддерживается: - // - для РИБ, не являющихся АРМ. - // - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) - И Не ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(УзелИнформационнойБазы) Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, - Перечисления.ВидыТранспортаСообщенийОбмена.WS); - - КонецЕсли; - - // Обмен через WS-соединение в пассивном режиме не поддерживается: - // - для обменов, не являющихся обменом через XDTO; - // - для файловых информационных баз. - // - Если Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) - Или ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, - Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); - - КонецЕсли; - - // Обмен через электронную почту не поддерживается: - // - когда недоступна подсистема работы с почтовыми сообщениями; - // - когда в конфигурации недоступно получение писем. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); - Если Не МодульРаботаСПочтовымиСообщениямиСлужебный.ДоступноПолучениеПисем() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, - Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - КонецЕсли; + Если ТипЗнч(ЗначенияСвойств) = Тип("Строка") Тогда + ЗначенияСвойствСтруктура = ОбщегоНазначения.ЗначениеИзСтрокиXML(ЗначенияСвойств); Иначе - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, - Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + ЗначенияСвойствСтруктура = ЗначенияСвойств; КонецЕсли; - Возврат Результат; - -КонецФункции - -// Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить -// внешнее соединение. -// СтрокаСообщенияОбОшибке - Строка - если в процессе установки внешнего соединения возникает ошибка, -// то подробное описание ошибки помещается в этот параметр. -// -// Возвращаемое значение: -// COM-объект - в случае успешной установки внешнего соединения, в случае ошибки возвращается Неопределено. -// -Функция ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт - - Результат = ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы); - - СтрокаСообщенияОбОшибке = Результат.ПодробноеОписаниеОшибки; - Возврат Результат.Соединение; - -КонецФункции - -// Устанавливает внешнее соединение с информационной базой и возвращает указатель на это соединение. -// -// Параметры: -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить -// внешнее соединение. -// СтрокаСообщенияОбОшибке (необязательный) - Строка - если в процессе установки внешнего соединения возникает ошибка, -// то подробное описание ошибки помещается в этот параметр. -// -// Возвращаемое значение: -// COM-объект - в случае успешной установки внешнего соединения, в случае ошибки возвращается Неопределено. -// -Функция ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы) Экспорт - - Возврат ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой( - РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта( - УзелИнформационнойБазы, Перечисления.ВидыТранспортаСообщенийОбмена.COM)); + Возврат ОбменДаннымиСобытия.МассивУзловПоЗначениямСвойств( + ЗначенияСвойствСтруктура, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Выгрузка); КонецФункции @@ -1273,39 +1276,10 @@ Возврат Ложь; КонецФункции -// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. -// -// Параметры: -// Корреспондент - Структура -// - ПланОбменаСсылка - узел плана обмена, который соответствует информационной -// базе-корреспонденту. -// -// Возвращаемое значение: -// Массив номеров версий, поддерживаемых интерфейсом корреспондента. -// -Функция ВерсииКорреспондента(Знач Корреспондент) Экспорт - - Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда - СтруктураНастроек = Корреспондент; - Иначе - Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(Корреспондент) Тогда - МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); - СтруктураНастроек = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(Корреспондент); - Иначе - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Корреспондент); - КонецЕсли; - КонецЕсли; - - ПараметрыПодключения = Новый Структура; - ПараметрыПодключения.Вставить("URL", СтруктураНастроек.WSURLВебСервиса); - ПараметрыПодключения.Вставить("UserName", СтруктураНастроек.WSИмяПользователя); - ПараметрыПодключения.Вставить("Password", СтруктураНастроек.WSПароль); - - Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "ОбменДанными"); - -КонецФункции - // Возвращает массив всех ссылочных типов, определенных в конфигурации. +// +// Возвращаемое значение: +// Массив из Тип - все ссылочные типы конфигурации // Функция ВсеСсылочныеТипыКонфигурации() Экспорт @@ -1380,17 +1354,16 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Инициализация структуры настроек обмена данными. - -// Получает структуру настроек транспорта для выполнения обмена данными. -// -Функция НастройкиТранспортаУзлаПланаОбмена(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) Экспорт +Функция WSПрокси(ПараметрыПодключения, СообщениеОбОшибке = "", СообщениеПользователю = "") Экспорт - Возврат ОбменДаннымиСервер.НастройкиТранспортаОбмена(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена); + Возврат ОбменДаннымиВебСервис.WSПрокси(ПараметрыПодключения, СообщениеОбОшибке, СообщениеПользователю); КонецФункции +#КонецОбласти + +#Область ИнициализацияСтруктурыНастроекОбменаДанными + // Получает список макетов типовых правил для обмена данными из конфигурации для заданного плана обмена; // список заполняется именами и синонимами макетов правил. // @@ -1398,7 +1371,7 @@ // ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. // // Возвращаемое значение: -// СписокПравил - СписокЗначений - список макетов типовых правил для обмена данными. +// СписокЗначений из Строка - список макетов типовых правил для обмена данными. // Функция ПравилаДляПланаОбменаИзКонфигурации(ИмяПланаОбмена, ЛитералИмениМакета) @@ -1684,4 +1657,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиРегистрацияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиРегистрацияПовтИсп/Module.bsl index 7e3e19e40..d2b268593 100644 --- a/SSL/src/CommonModules/ОбменДаннымиРегистрацияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиРегистрацияПовтИсп/Module.bsl @@ -14,12 +14,13 @@ // которая храниться в регистре сведений ПравилаДляОбменаДанными. // // Параметры: -// ИмяПланаОбмена - строка - имя плана обмена. +// ИмяПланаОбмена - Строка - имя плана обмена. // // Возвращаемое значение: // ПараметрыВыборочнойРегистрации - Структура // - Неопределено - параметры выборочной регистрации объектов. -// В случае, если выборочная регистрация не используется для указанного плана обмена возвращаем Неопределено. +// В случае, если выборочная регистрация не используется для указанного плана +// обмена возвращаем Неопределено. // Функция ПараметрыВыборочнойРегистрацииПоИмениПланаОбмена(ИмяПланаОбмена) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index 74af3a58e..6150bc5b6 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -314,121 +314,6 @@ КонецФункции -// Возвращает массив всех видов транспорта сообщений обмена, определенных в конфигурации. -// -// Возвращаемое значение: -// Массив из ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - все виды транспорта сообщений обмена. -// -Функция ВсеТранспортыСообщенийОбменаКонфигурации() Экспорт - - Результат = Новый Массив; - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); - - Возврат Результат; -КонецФункции - -// Выполняет отправку или получение данных для узла информационной базы используя любой из -// доступных для плана обмена канал связи, кроме COM-соединения и web-сервиса. -// -// Параметры: -// Отказ - Булево - флаг отказа, устанавливается в Истина в случае -// не успешного выполнения процедуры. -// УзелИнформационнойБазы - УзелОбменаСсылка - ПланОбменаСсылка - узел плана обмена, -// для которого выполняется действие обмена данными. -// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. -// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.Перечисления.ВидыТранспортаСообщенийОбмена - вид транспорта, -// который будет использоваться в процессе обмена данными. Если не указан, -// определяется из параметров транспорта, заданных для узла плана обмена при -// настройке обмена. Необязательный, значение по умолчанию Неопределено. -// ТолькоПараметры - Булево - содержит признак выборочной загрузки данных при обмене РИБ. -// ДополнительныеПараметры - Структура - зарезервировано для служебного использования. -// -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - ДействиеПриОбмене, - ВидТранспортаСообщенийОбмена = Неопределено, - Знач ТолькоПараметры = Ложь, - ДополнительныеПараметры = Неопределено) Экспорт - - Если ДополнительныеПараметры = Неопределено Тогда - ДополнительныеПараметры = Новый Структура; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена); - ЗафиксироватьНачалоОбменаВРегистреСведений(СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.Отказ Тогда - - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - - Отказ = Истина; - - Возврат; - КонецЕсли; - - Для Каждого Параметр Из ДополнительныеПараметры Цикл - СтруктураНастроекОбмена.ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); - КонецЦикла; - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - - // ОБМЕН ДАННЫМИ - ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, ТолькоПараметры); - - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - - Для Каждого Параметр Из СтруктураНастроекОбмена.ДополнительныеПараметры Цикл - ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); - КонецЦикла; - - Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - - Отказ = Истина; - - КонецЕсли; - -КонецПроцедуры - -// Определяет, существует ли каталог на FTP-сервере. -// -// Параметры: -// Путь - Строка - путь к каталогу. -// ИмяКаталога - Строка - имя каталога. -// FTPСоединение - FTPСоединение - FTPСоединение, используемое для подключения к FTP-серверу. -// -// Возвращаемое значение: -// Булево - если Истина, то каталог существует; Ложь - нет. -// -Функция FTPКаталогСуществует(Знач Путь, Знач ИмяКаталога, Знач FTPСоединение) Экспорт - - Для Каждого FTPФайл Из FTPСоединение.НайтиФайлы(Путь) Цикл - - Если FTPФайл.ЭтоКаталог() И FTPФайл.Имя = ИмяКаталога Тогда - - Возврат Истина; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; -КонецФункции - // Возвращает данные таблиц для реквизитов узла обмена. // // Параметры: @@ -876,11 +761,7 @@ // * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. // Функция ВнешнееСоединениеСБазой(Параметры) Экспорт - - // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. - НастройкиТранспорта = НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры); - Возврат УстановитьВнешнееСоединениеСБазой(НастройкиТранспорта); - + Возврат ТранспортСообщенийОбмена.УстановитьВнешнееСоединениеСБазой(Параметры); КонецФункции // Точка входа для выполнения итерации обмена данными (загрузки и выгрузки) с внешней системой по узлу плана обмена. @@ -913,21 +794,7 @@ ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; ФлагОшибка = Ложь; - - Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, - ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); - - КонецЕсли; - - Если ПараметрыОбмена.ВыполнятьОтправкуНастроек Тогда - - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(ФлагОшибка, Корреспондент, - ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); - - КонецЕсли; - ПослеВыполненияОбменов(Корреспондент, Отказ); КонецПроцедуры @@ -977,12 +844,12 @@ // * Алгоритмы - Структура - перечень экспортных процедур и функций, которые // объявлены в модуле менеджера плана обмена // и используются подсистемой обмена данными. -// *ПравилаРегистрацииВМенеджере - Булево - Признак использования правил регистрации, +// *ПравилаРегистрацииВМенеджере - Булево - признак использования правил регистрации, // расположенных в общем модуле (менеджере регистрации) // *ИмяМенеджераРегистрации - Строка - имя модуля с правилами регистрации // *ИспользоватьКешПубличныхИдентификаторов - Булево - признак того, что при загрузке данных будет // использован кеш для поиска ссылок -// *Глобальный - Булево - Если установлено Истина, то план обмена может быть +// *Глобальный - Булево - если установлено Истина, то план обмена может быть // использован для обмена с планами обмена с другими наименованиями. // Только для обмена через EnterpriseData // @@ -1201,239 +1068,6 @@ // Процедура ПриСохраненииНастроекПодключенияВнешнейСистемы(Контекст, ПараметрыПодключения, Результат) Экспорт - Корреспондент = Неопределено; - Контекст.Свойство("Корреспондент", Корреспондент); - - НастройкиXDTO = Неопределено; - ПараметрыПодключения.Свойство("НастройкиXDTO", НастройкиXDTO); - - ВерсияФорматаОбмена = ""; - Если Не НастройкиXDTO = Неопределено Тогда - Если НастройкиXDTO.ПоддерживаемыеВерсии <> Неопределено - И НастройкиXDTO.ПоддерживаемыеВерсии.Количество() > 0 Тогда - ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата( - Контекст.ИмяПланаОбмена, НастройкиXDTO.ПоддерживаемыеВерсии); - КонецЕсли; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - Если Контекст.Режим = "НовоеПодключение" Тогда - - ИдентификаторКорреспондента = Неопределено; - ПараметрыПодключения.Свойство("ИдентификаторКорреспондента", ИдентификаторКорреспондента); - Если Не ЗначениеЗаполнено(ИдентификаторКорреспондента) Тогда - ИдентификаторКорреспондента = XMLСтрока(Новый УникальныйИдентификатор); - КонецЕсли; - - Корреспондент = НовыйУзелОбменаДаннымиXDTO( - Контекст.ИмяПланаОбмена, - Контекст.ИдентификаторНастройки, - ИдентификаторКорреспондента, - ПараметрыПодключения.НаименованиеКорреспондента, - ВерсияФорматаОбмена); - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - ВыполнитьОбновлениеПравилДляОбменаДанными(); - КонецЕсли; - - ТаблицаОбъектыБазы = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( - Контекст.ИмяПланаОбмена, "ОтправкаПолучение", Корреспондент); - - МодульНастройкиОбменаДаннымиXDTO = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиОбменаДаннымиXDTO"); - МодульНастройкиОбменаДаннымиXDTO.ОбновитьНастройки( - Корреспондент, "ПоддерживаемыеОбъекты", ТаблицаОбъектыБазы); - - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Корреспондент); - СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", Контекст.ИмяПланаОбмена); - - ОбменДаннымиСлужебный.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO"); - ИначеЕсли Контекст.Режим = "РедактированиеПараметровПодключения" Тогда - ДанныеКорреспондента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Корреспондент, "Код, Наименование, ВерсияФорматаОбмена"); - - ЗначенияДляОбновления = Новый Структура; - - Если ПараметрыПодключения.Свойство("ИдентификаторКорреспондента") - И ЗначениеЗаполнено(ПараметрыПодключения.ИдентификаторКорреспондента) - И СокрЛП(ПараметрыПодключения.ИдентификаторКорреспондента) <> СокрЛП(ДанныеКорреспондента.Код) Тогда - ЗначенияДляОбновления.Вставить("Код", СокрЛП(ПараметрыПодключения.ИдентификаторКорреспондента)); - КонецЕсли; - - Если ПараметрыПодключения.Свойство("НаименованиеКорреспондента") - И ЗначениеЗаполнено(ПараметрыПодключения.НаименованиеКорреспондента) - И СокрЛП(ПараметрыПодключения.НаименованиеКорреспондента) <> СокрЛП(ДанныеКорреспондента.Наименование) Тогда - ЗначенияДляОбновления.Вставить("Наименование", СокрЛП(ПараметрыПодключения.НаименованиеКорреспондента)); - КонецЕсли; - - Если ЗначениеЗаполнено(ВерсияФорматаОбмена) - И Не ВерсияФорматаОбмена = ДанныеКорреспондента.ВерсияФорматаОбмена Тогда - ЗначенияДляОбновления.Вставить("ВерсияФорматаОбмена", ВерсияФорматаОбмена); - КонецЕсли; - - Если ЗначенияДляОбновления.Количество() > 0 Тогда - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(Корреспондент)); - ЭлементБлокировки.УстановитьЗначение("Ссылка", Корреспондент); - Блокировка.Заблокировать(); - - ЗаблокироватьДанныеДляРедактирования(Корреспондент); - КорреспондентОбъект = Корреспондент.ПолучитьОбъект(); - - Для Каждого ЗначениеДляОбновления Из ЗначенияДляОбновления Цикл - КорреспондентОбъект[ЗначениеДляОбновления.Ключ] = ЗначениеДляОбновления.Значение; - КонецЦикла; - - КорреспондентОбъект.ОбменДанными.Загрузка = Истина; - КорреспондентОбъект.Записать(); - КонецЕсли; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не подходящий режим вызова функции: %1'"), Контекст.Режим); - КонецЕсли; - - Если Не НастройкиXDTO = Неопределено Тогда - Если Не НастройкиXDTO.ПоддерживаемыеОбъекты = Неопределено Тогда - МодульНастройкиОбменаДаннымиXDTO = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиОбменаДаннымиXDTO"); - МодульНастройкиОбменаДаннымиXDTO.ОбновитьНастройкиКорреспондента( - Корреспондент, "ПоддерживаемыеОбъекты", НастройкиXDTO.ПоддерживаемыеОбъекты); - КонецЕсли; - КонецЕсли; - - МодульНастройкиТранспортаОбменаДанными = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаДанными"); - МодульНастройкиТранспортаОбменаДанными.СохранитьНастройкиТранспортаВнешнейСистемы( - Корреспондент, ПараметрыПодключения.НастройкиТранспорта); - - Если ПараметрыПодключения.Свойство("РасписаниеСинхронизации") - И ПараметрыПодключения.РасписаниеСинхронизации <> Неопределено Тогда - - ИспользоватьРегламентноеЗадание = ?(ПараметрыПодключения.Свойство("ИспользоватьРегламентноеЗадание"), - ПараметрыПодключения.ИспользоватьРегламентноеЗадание, Истина); - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОчередьЗаданий") - И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда - - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); - - КлючЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обмен данными с внешней системой (%1)'"), - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код")); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ОбластьДанных", МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); - ПараметрыЗадания.Вставить("Использование", ИспользоватьРегламентноеЗадание); - ПараметрыЗадания.Вставить("ИмяМетода", "ОбменДаннымиСервер.ВыполнитьОбменДаннымиСВнешнейСистемой"); - - ПараметрыЗадания.Вставить("Параметры", Новый Массив); - ПараметрыЗадания.Параметры.Добавить(Корреспондент); - ПараметрыЗадания.Параметры.Добавить(Новый Структура("ВыполнятьЗагрузку, ВыполнятьОтправкуНастроек", Истина, Истина)); - ПараметрыЗадания.Параметры.Добавить(Ложь); - - ПараметрыЗадания.Вставить("Ключ", КлючЗадания); - ПараметрыЗадания.Вставить("Расписание", ПараметрыПодключения.РасписаниеСинхронизации); - - Если Контекст.Режим = "НовоеПодключение" Тогда - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - ИначеЕсли Контекст.Режим = "РедактированиеПараметровПодключения" Тогда - Отбор = Новый Структура("ОбластьДанных, ИмяМетода, Ключ"); - ЗаполнитьЗначенияСвойств(Отбор, ПараметрыЗадания); - - ТаблицаЗадания = МодульОчередьЗаданий.ПолучитьЗадания(Отбор); - Если ТаблицаЗадания.Количество() > 0 Тогда - МодульОчередьЗаданий.ИзменитьЗадание(ТаблицаЗадания[0].Идентификатор, ПараметрыЗадания); - Иначе - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - КонецЕсли; - КонецЕсли; - - КонецЕсли; - Иначе - Если Контекст.Режим = "НовоеПодключение" Тогда - Справочники.СценарииОбменовДанными.СоздатьСценарий( - Корреспондент, ПараметрыПодключения.РасписаниеСинхронизации, ИспользоватьРегламентноеЗадание); - ИначеЕсли Контекст.Режим = "РедактированиеПараметровПодключения" Тогда - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | СценарииОбменовДанными.Ссылка КАК Сценарий, - | СценарииОбменовДанными.Ссылка.ИспользоватьРегламентноеЗадание КАК ИспользоватьРегламентноеЗадание - |ИЗ - | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СценарииОбменовДанными.НастройкиОбмена КАК СценарииОбменовДаннымиНастройкиОбмена - | ПО (СценарииОбменовДаннымиНастройкиОбмена.Ссылка = СценарииОбменовДанными.Ссылка) - |ГДЕ - | СценарииОбменовДаннымиНастройкиОбмена.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И НЕ СценарииОбменовДанными.ПометкаУдаления"); - Запрос.УстановитьПараметр("УзелИнформационнойБазы", Корреспондент); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - СценарийОбъект = Выборка.Сценарий.ПолучитьОбъект(); // СправочникОбъект.СценарииОбменовДанными - - Отказ = Ложь; - Справочники.СценарииОбменовДанными.ОбновитьДанныеРегламентногоЗадания( - Отказ, ПараметрыПодключения.РасписаниеСинхронизации, СценарийОбъект); - - Если Не Отказ Тогда - СценарийОбъект.ИспользоватьРегламентноеЗадание = ИспользоватьРегламентноеЗадание; - СценарийОбъект.Записать(); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - Если Контекст.Режим = "НовоеПодключение" Тогда - // Отправка формализованных настроек XDTO. - ПараметрыОбмена = Новый Структура; - ПараметрыОбмена.Вставить("ВыполнятьЗагрузку", Ложь); - ПараметрыОбмена.Вставить("ВыполнятьОтправкуНастроек", Истина); - - Отказ = Ложь; - СообщениеОбОшибке = ""; - Попытка - ВыполнитьОбменДаннымиСВнешнейСистемой(Корреспондент, ПараметрыОбмена, Отказ); - Исключение - Отказ = Истина; - СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); - КонецПопытки; - - Если Отказ Тогда - НастройкиУдаления = Новый Структура; - НастройкиУдаления.Вставить("УзелОбмена", Корреспондент); - НастройкиУдаления.Вставить("УдалитьНастройкуВКорреспонденте", Истина); - - ПараметрыПроцедуры = Новый Структура; - ПараметрыПроцедуры.Вставить("НастройкиУдаления", НастройкиУдаления); - - АдресРезультата = ""; - Попытка - МодульПомощникСозданияОбменаДанными().УдалитьНастройкуСинхронизации(ПараметрыПроцедуры, АдресРезультата); - Исключение - ВызватьИсключение; - КонецПопытки; - - ВызватьИсключение СообщениеОбОшибке; - КонецЕсли; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("УзелОбмена", Корреспондент); - Результат.Вставить("ИдентификаторКорреспондента", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код")); - КонецПроцедуры // Заполняет структуру сохраненных параметров подключения к внешней системе. @@ -1454,23 +1088,6 @@ // Процедура ПриПолученииНастроекПодключенияВнешнейСистемы(Контекст, ПараметрыПодключения) Экспорт - УстановитьПривилегированныйРежим(Истина); - - ДанныеУзлаОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контекст.Корреспондент, "Код, Наименование"); - - ПараметрыПодключения = Новый Структура; - ПараметрыПодключения.Вставить("ИдентификаторКорреспондента", ДанныеУзлаОбмена.Код); - ПараметрыПодключения.Вставить("НаименованиеКорреспондента", ДанныеУзлаОбмена.Наименование); - ПараметрыПодключения.Вставить("НастройкиТранспорта", - РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаВнешнейСистемы(Контекст.Корреспондент)); - ПараметрыПодключения.Вставить("РасписаниеСинхронизации"); - ПараметрыПодключения.Вставить("НастройкиXDTO", Новый Структура); - - ПараметрыПодключения.НастройкиXDTO.Вставить("ПоддерживаемыеВерсии", - РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройкиКорреспондента(Контекст.Корреспондент, "ПоддерживаемыеВерсии")); - ПараметрыПодключения.НастройкиXDTO.Вставить("ПоддерживаемыеОбъекты", - РегистрыСведений.НастройкиОбменаДаннымиXDTO.ЗначениеНастройкиКорреспондента(Контекст.Корреспондент, "ПоддерживаемыеОбъекты")); - КонецПроцедуры // Таблица настроек транспорта обмена для всех настроенных обменов данными с внешними системами. @@ -1482,61 +1099,6 @@ // Функция ВсеНастройкиТранспортаОбменаСВнешнимиСистемами() Экспорт - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Корреспондент"); - Результат.Колонки.Добавить("НастройкиТранспорта"); - - ОбщийТекстЗапроса = ""; - ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); - - Для Каждого ПланОбмена Из ПланыОбменаБСП Цикл - - Если Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена) Тогда - Продолжить; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ - | Т.Ссылка КАК Корреспондент, - | НастройкиТранспортаОбменаДанными.ПараметрыПодключенияВнешнейСистемы КАК ПараметрыПодключенияВнешнейСистемы - |ИЗ - | #ТаблицаПланаОбмена КАК Т - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспортаОбменаДанными - | ПО (НастройкиТранспортаОбменаДанными.Корреспондент = Т.Ссылка) - |ГДЕ - | НЕ Т.ЭтотУзел - | И НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема)"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПланаОбмена", "ПланОбмена." + ПланОбмена); - - Если Не ПустаяСтрока(ОбщийТекстЗапроса) Тогда - ОбщийТекстЗапроса = ОбщийТекстЗапроса + " - | - |ОБЪЕДИНИТЬ ВСЕ - | - |"; - КонецЕсли; - - ОбщийТекстЗапроса = ОбщийТекстЗапроса + ТекстЗапроса; - - КонецЦикла; - - Если ПустаяСтрока(ОбщийТекстЗапроса) Тогда - Возврат Результат; - КонецЕсли; - - Запрос = Новый Запрос(ОбщийТекстЗапроса); - - УстановитьПривилегированныйРежим(Истина); - ТаблицаНастройки = Запрос.Выполнить().Выгрузить(); - - Для Каждого СтрокаНастройки Из ТаблицаНастройки Цикл - СтрокаРезультат = Результат.Добавить(); - СтрокаРезультат.Корреспондент = СтрокаНастройки.Корреспондент; - СтрокаРезультат.НастройкиТранспорта = СтрокаНастройки.ПараметрыПодключенияВнешнейСистемы.Получить(); - КонецЦикла; - - Возврат Результат; - КонецФункции #КонецОбласти @@ -1992,8 +1554,165 @@ КонецФункции +// Устарела.Выполняет отправку или получение данных для узла информационной базы используя любой из +// доступных для плана обмена канал связи, кроме COM-соединения и web-сервиса. +// +// Параметры: +// Отказ - Булево - флаг отказа, устанавливается в Истина в случае +// не успешного выполнения процедуры. +// УзелИнформационнойБазы - УзелОбменаСсылка - ПланОбменаСсылка - узел плана обмена, +// для которого выполняется действие обмена данными. +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. +// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.Перечисления.ВидыТранспортаСообщенийОбмена - вид транспорта, +// который будет использоваться в процессе обмена данными. Если не указан, +// определяется из параметров транспорта, заданных для узла плана обмена при +// настройке обмена. Необязательный, значение по умолчанию Неопределено. +// ТолькоПараметры - Булево - содержит признак выборочной загрузки данных при обмене РИБ. +// ДополнительныеПараметры - Структура - зарезервировано для служебного использования. +// +Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + ДействиеПриОбмене, + ВидТранспортаСообщенийОбмена = Неопределено, + Знач ТолькоПараметры = Ложь, + ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + Если ТолькоПараметры Тогда + ДополнительныеПараметры.Вставить("ТолькоПараметры", ТолькоПараметры); + КонецЕсли; + + Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + ИдентификаторТранспорта = "COM"; + ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + ИдентификаторТранспорта = "EMAIL"; + ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + ИдентификаторТранспорта = "FILE"; + ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + ИдентификаторТранспорта = "FTP"; + ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + ИдентификаторТранспорта = "WS"; + Иначе + + Сообщение = НСтр("ru = 'Не определен идентификатор транспорта'", ОбщегоНазначения.КодОсновногоЯзыка()); + + ВызватьИсключение Сообщение; + + КонецЕсли; + + ВыполнитьДействиеОбмена(Отказ, УзелИнформационнойБазы, + ДействиеПриОбмене, ИдентификаторТранспорта, ДополнительныеПараметры); + +КонецПроцедуры + +// Устарела. Определяет, существует ли каталог на FTP-сервере. +// +// Параметры: +// Путь - Строка - путь к каталогу. +// ИмяКаталога - Строка - имя каталога. +// FTPСоединение - FTPСоединение - FTPСоединение, используемое для подключения к FTP-серверу. +// +// Возвращаемое значение: +// Булево - если Истина, то каталог существует; Ложь - нет. +// +Функция FTPКаталогСуществует(Знач Путь, Знач ИмяКаталога, Знач FTPСоединение) Экспорт + + Возврат ТранспортСообщенийОбмена.FTPКаталогСуществует(Путь, ИмяКаталога, FTPСоединение); + +КонецФункции + +// Устарела. Возвращает массив всех видов транспорта сообщений обмена, определенных в конфигурации. +// +// Возвращаемое значение: +// Массив из ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - все виды транспорта сообщений обмена. +// +Функция ВсеТранспортыСообщенийОбменаКонфигурации() Экспорт + + Результат = Новый Массив; + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); + Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); + + Возврат Результат; +КонецФункции + #КонецОбласти +// Выполняет отправку или получение данных для узла информационной базы используя любой из +// доступных для плана обмена канал связи, кроме COM-соединения и web-сервиса. +// +// Параметры: +// Отказ - Булево - флаг отказа, устанавливается в Истина в случае +// не успешного выполнения процедуры. +// УзелИнформационнойБазы - УзелОбменаСсылка - ПланОбменаСсылка - узел плана обмена, +// для которого выполняется действие обмена данными. +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. +// ИдентификаторТранспорта - Строка, Неопределено - тип транспорта, который будет использоваться в процессе обмена +// данными. +// ДополнительныеПараметры - Структура - зарезервировано для служебного использования. +// +Процедура ВыполнитьДействиеОбмена( + Отказ, + УзелИнформационнойБазы, + ДействиеПриОбмене, + ИдентификаторТранспорта = Неопределено, + ДополнительныеПараметры = Неопределено) Экспорт + + Если ИдентификаторТранспорта = Неопределено Тогда + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); + КонецЕсли; + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ + СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, ДействиеПриОбмене, ИдентификаторТранспорта, ДополнительныеПараметры); + + ЗафиксироватьНачалоОбменаВРегистреСведений(СтруктураНастроекОбмена); + + Если СтруктураНастроекОбмена.Отказ Тогда + // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецЕсли; + + Для Каждого Параметр Из ДополнительныеПараметры Цикл + СтруктураНастроекОбмена.ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; + + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначения.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); + + // ОБМЕН ДАННЫМИ + ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена); + + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + + Для Каждого Параметр Из СтруктураНастроекОбмена.ДополнительныеПараметры Цикл + ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + + Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -2051,8 +1770,7 @@ Если УзелИнформационнойБазы <> Неопределено Тогда - РегистрыСведений.НастройкиТранспортаОбменаДанными.ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(УзелИнформационнойБазы); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); ИмяПараметра = "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); @@ -2069,7 +1787,7 @@ // Загрузка только параметров работы программы. ПараметрыОбмена = ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; ПараметрыОбмена.ТолькоПараметры = Истина; @@ -2477,6 +2195,9 @@ // Возвращает Истина, если настройка подчиненного узла РИБ не завершена и // требуется обновления параметров работы программы, которые не участвуют в РИБ. +// +// Возвращаемое значение: +// Булево // Функция НастройкаПодчиненногоУзлаРИБ() Экспорт @@ -2510,7 +2231,7 @@ КонецПроцедуры -// См. ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов() +// См. ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов Функция КаталогВременногоХранилищаФайлов() Экспорт БезопасныйРежим = БезопасныйРежим(); @@ -2518,64 +2239,6 @@ КонецФункции -// Выполняет проверку подключения обработки транспорта по заданным настройкам. -// -Процедура ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, - СтруктураНастроек, ВидТранспорта, СообщениеОбОшибке = "", НовыеПароли = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Создаем экземпляр объекта обработки. - ОбработкаОбъект = Обработки[ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта)].Создать(); - - // Инициализация свойств обработки переданными параметрами настроек. - ЗаполнитьЗначенияСвойств(ОбработкаОбъект, СтруктураНастроек); - - Корреспондент = Неопределено; - ЕстьКорреспондент = СтруктураНастроек.Свойство("Корреспондент", Корреспондент) - Или СтруктураНастроек.Свойство("КонечнаяТочкаКорреспондента", Корреспондент); - - // Привилегированный режим установлен выше. - Если ЕстьКорреспондент Тогда - - СтрокаПараметров = "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена, - |FTPСоединениеПарольОбластейДанных, ПарольАрхиваСообщенияОбменаОбластейДанных"; - - Если НовыеПароли = Неопределено Тогда - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, СтрокаПараметров, Истина); - Иначе - Пароли = Новый Структура(СтрокаПараметров); - ЗаполнитьЗначенияСвойств(Пароли, НовыеПароли); - КонецЕсли; - - ЗаполнитьЗначенияСвойств(ОбработкаОбъект, Пароли); - - Если ОбщегоНазначения.РазделениеВключено() - И ТипЗнч(ОбработкаОбъект) = Тип("ОбработкаОбъект.ТранспортСообщенийОбменаFTP") Тогда - ОбработкаОбъект.FTPСоединениеПароль = Пароли.FTPСоединениеПарольОбластейДанных; - ОбработкаОбъект.ПарольАрхиваСообщенияОбмена = Пароли.ПарольАрхиваСообщенияОбменаОбластейДанных; - КонецЕсли; - - КонецЕсли; - - // Инициализация транспорта обмена. - ОбработкаОбъект.Инициализация(); - - // Выполняем проверку подключения. - Если Не ОбработкаОбъект.ПодключениеУстановлено() Тогда - - Отказ = Истина; - - СообщениеОбОшибке = ОбработкаОбъект.СтрокаСообщенияОбОшибке - + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОбъект.СтрокаСообщенияОбОшибкеЖР); - - КонецЕсли; - -КонецПроцедуры - Процедура ПроверитьВозможностьАдминистрированияОбменов() Экспорт Если Не ЕстьПраваНаАдминистрированиеОбменов() Тогда @@ -2630,6 +2293,9 @@ // Пользователь, для которого необходимо вычислить признак разрешения использования синхронизации данных. // Если параметр не задан, то функция вычисляется для текущего пользователя информационной базы. // +// Возвращаемое значение: +// Булево +// Функция СинхронизацияДанныхРазрешена(Знач Пользователь = Неопределено) Экспорт Если Пользователь = Неопределено Тогда @@ -2727,6 +2393,13 @@ КонецФункции // Получает параметр защищенного соединения. +// +// Параметры: +// Путь - Строка - путь FTP-соединения +// +// Возвращаемое значение: +// - ЗащищенноеСоединениеOpenSSL +// - Неопределено - если в строке пути не найдено расширение "ftps" // Функция ЗащищенноеСоединение(Путь) Экспорт @@ -3019,7 +2692,7 @@ УстановитьПривилегированныйРежим(Истина); Результат.ПланОбменаСуществует = (Метаданные.ПланыОбмена.Найти(ИмяПланаОбмена) <> Неопределено); - + Если Не Результат.ПланОбменаСуществует И ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.Свойство("ЭтоПланОбменаXDTO") Тогда @@ -3095,9 +2768,11 @@ // Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. // В главном узле всегда - Ложь. -// // Копия функции ОбщегоНазначения.ТребуетсяОбновлениеКонфигурацииПодчиненногоУзлаРИБ. // +// Возвращаемое значение: +// Булево +// Функция ТребуетсяУстановкаОбновления() Экспорт Возврат ЭтоПодчиненныйУзелРИБ() @@ -3151,78 +2826,6 @@ КонецФункции -// Получение файла по его идентификатору. -// -// Параметры: -// ИдентификаторФайла - УникальныйИдентификатор - идентификатор получаемого файла. -// WSПассивныйРежимФайловаяИБ - Булево - признак того, что получение файла происходит в файловой ИБ при настройке WS -// соединения в пассивном режиме -// -// Возвращаемое значение: -// ИмяФайла - Строка - имя файла. -// -Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, WSПассивныйРежимФайловаяИБ = Ложь) Экспорт - - ИмяФайла = ""; - - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - МодульОбменДаннымиВМоделиСервиса.ПриПолученииФайлаИзХранилища(ИдентификаторФайла, ИмяФайла); - - Иначе - - ПриПолученииФайлаИзХранилища(ИдентификаторФайла, ИмяФайла); - - КонецЕсли; - - Если WSПассивныйРежимФайловаяИБ Тогда - ПолноеИмяФайла = ПолноеИмяФайлаДляСопоставленияФайловаяИБ(ИмяФайла); - Иначе - ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяФайла); - КонецЕсли; - - Возврат ПолноеИмяФайла; - -КонецФункции - -// Сохранение файла. -// -// Параметры: -// ИмяФайла - Строка - наименование файла. -// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. Если задан, то при сохранении файла -// будет использоваться это значение, иначе - сгенерируется новое. -// -// Возвращаемое значение: -// УникальныйИдентификатор - идентификатор файла. -// -Функция ПоместитьФайлВХранилище(Знач ИмяФайла, Знач ИдентификаторФайла = Неопределено) Экспорт - - ИдентификаторФайла = ?(ИдентификаторФайла = Неопределено, Новый УникальныйИдентификатор, ИдентификаторФайла); - - Файл = Новый Файл(ИмяФайла); - - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); - СтруктураЗаписи.Вставить("ИмяФайлаСообщения", Файл.Имя); - СтруктураЗаписи.Вставить("ДатаЗакладкиСообщения", ТекущаяУниверсальнаяДата()); - - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - МодульОбменДаннымиВМоделиСервиса.ПриПомещенииФайлаВХранилище(СтруктураЗаписи); - Иначе - - ПриПомещенииФайлаВХранилище(СтруктураЗаписи); - - КонецЕсли; - - Возврат ИдентификаторФайла; - -КонецФункции - // Структура описания стандартных вариантов дополнения выгрузки. // // Возвращаемое значение: @@ -3287,6 +2890,106 @@ КонецФункции +Функция ПараметрыИнформационнойБазы_20(Знач ИмяПланаОбмена, + Знач КодУзла, + СообщениеОбОшибке, + ДополнительныеПараметры = Неопределено) Экспорт + + Результат = ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке, ДополнительныеПараметры); + + Результат_20 = Новый Структура; + + Результат_20.Вставить("ExchangePlanExists", Результат.ПланОбменаСуществует); + Результат_20.Вставить("InfobasePrefix", Результат.ПрефиксИнформационнойБазы); + Результат_20.Вставить("DefaultInfobasePrefix", Результат.ПрефиксИнформационнойБазыПоУмолчанию); + Результат_20.Вставить("InfobaseDescription", Результат.НаименованиеИнформационнойБазы); + Результат_20.Вставить("DefaultInfobaseDescription", Результат.НаименованиеИнформационнойБазыПоУмолчанию); + Результат_20.Вставить("AccountingParametersSettingsAreSpecified", Результат.НастройкиПараметровУчетаЗаданы); + Результат_20.Вставить("ThisNodeCode", Результат.КодЭтогоУзла); + Результат_20.Вставить("ConfigurationVersion", Результат.ВерсияКонфигурации); + Результат_20.Вставить("NodeExists", Результат.УзелСуществует); + Результат_20.Вставить("DataExchangeSettingsFormatVersion", "2.0"); + Результат_20.Вставить("UsePrefixesForExchangeSettings", Результат.ИспользоватьПрефиксыДляНастройкиОбмена); + Результат_20.Вставить("ExchangeFormat", Результат.ФорматОбмена); + Результат_20.Вставить("ExchangePlanName", Результат.ИмяПланаОбмена); + Результат_20.Вставить("ExchangeFormatVersions", Результат.ВерсииФорматаОбмена); + Результат_20.Вставить("DataSynchronizationSetupCompleted", Результат.НастройкаСинхронизацииДанныхЗавершена); + Результат_20.Вставить("MessageReceivedForDataMapping", Результат.ПолученоСообщениеДляСопоставленияДанных); + Результат_20.Вставить("DataMappingSupported", Результат.ПоддерживаетсяСопоставлениеДанных); + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(Результат.ИмяПланаОбмена) Тогда + + Массив = ТранспортСообщенийОбмена.МассивИзТаблицы_ПоддерживаемыеОбъектыФормата( + Результат.ПоддерживаемыеОбъектыФормата, + Результат.ВерсииФорматаОбмена); + + Результат_20.Вставить("SupportedObjectsInFormat", Массив); + + КонецЕсли; + + Возврат Результат_20; + +КонецФункции + +// Код предопределенного узла плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// +// Возвращаемое значение: +// Строка +// +Функция КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЭтотУзел = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); + + Возврат СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")); + +КонецФункции + +Процедура АктуализироватьРегламентныеЗадания() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Сценарии.Ссылка КАК Ссылка, + | Сценарии.ИспользоватьРегламентноеЗадание КАК ИспользоватьРегламентноеЗадание, + | Сценарии.РегламентноеЗаданиеGUID КАК РегламентноеЗаданиеGUID + |ИЗ + | Справочник.СценарииОбменовДанными КАК Сценарии + |ГДЕ + | НЕ Сценарии.ПометкаУдаления"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если Не ЗначениеЗаполнено(Выборка.РегламентноеЗаданиеGUID) Тогда + Продолжить; + КонецЕсли; + + ЗаданиеОбъект = РегламентныеЗаданияСервер.Задание(Выборка.РегламентноеЗаданиеGUID); + + Если ЗаданиеОбъект = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ЗаданиеОбъект.Использование <> Выборка.ИспользоватьРегламентноеЗадание Тогда + + Отказ = Ложь; + Сценарий = Выборка.Ссылка.ПолучитьОбъект(); + Расписание = Справочники.СценарииОбменовДанными.ПолучитьРасписаниеВыполненияОбменаДанными(Выборка.Ссылка); + + Справочники.СценарииОбменовДанными.ОбновитьДанныеРегламентногоЗадания(Отказ, Расписание, Сценарий); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область ОберткиДляРаботыСПрограммнымИнтерфейсомМенеджераПланаОбмена @@ -3341,6 +3044,25 @@ КонецФункции +Функция ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания, АктивныеФоновыеЗадания = Неопределено) Экспорт + + Отбор = Новый Структура; + Отбор.Вставить("Ключ", КлючФоновогоЗадания); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + + Возврат (АктивныеФоновыеЗадания.Количество() > 0); + +КонецФункции + +Функция КлючФоновогоЗадания(ИмяПланаОбмена, Действие) Экспорт + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'План обмена: %1, действие: %2'"), ИмяПланаОбмена, Действие); + +КонецФункции + #КонецОбласти #Область ПрогрессБар @@ -3640,106 +3362,6 @@ #КонецОбласти -#Область РаботаСОбъектомFTPСоединение - -Функция FTPСоединение(Знач Настройки) Экспорт - - Возврат Новый FTPСоединение( - Настройки.Сервер, - Настройки.Порт, - Настройки.ИмяПользователя, - Настройки.ПарольПользователя, - НастройкиПроксиСервера(Настройки.ЗащищенноеСоединение), - Настройки.ПассивноеСоединение, - Настройки.Таймаут, - Настройки.ЗащищенноеСоединение); - -КонецФункции - -Функция FTPНастройкиСоединения(Знач Таймаут = 180) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Сервер", ""); - Результат.Вставить("Порт", 21); - Результат.Вставить("ИмяПользователя", ""); - Результат.Вставить("ПарольПользователя", ""); - Результат.Вставить("ПассивноеСоединение", Ложь); - Результат.Вставить("Таймаут", Таймаут); - Результат.Вставить("ЗащищенноеСоединение", Неопределено); - - Возврат Результат; -КонецФункции - -// Возвращает имя сервера и путь на сервере FTP, полученные из строки подключения к FTP-ресурсу. -// -// Параметры: -// СтрокаПодключения - Строка - строка подключения к FTP-ресурсу. -// -// Возвращаемое значение: -// Структура - настройки подключения к FTP-ресурсу. Поля структуры: -// Сервер - Строка - имя сервера. -// Путь - Строка - путь на сервере. -// -// Пример (1): -// Результат = FTPИмяСервераИПуть("ftp://server"); -// Результат.Сервер = "server"; -// Результат.Путь = "/"; -// -// Пример (2): -// Результат = FTPИмяСервераИПуть("ftp://server/saas/obmen"); -// Результат.Сервер = "server"; -// Результат.Путь = "/saas/obmen/"; -// -Функция FTPИмяСервераИПуть(Знач СтрокаПодключения) Экспорт - - Результат = Новый Структура("Сервер, Путь"); - СтрокаПодключения = СокрЛП(СтрокаПодключения); - - Если (ВРег(Лев(СтрокаПодключения, 6)) <> "FTP://" - И ВРег(Лев(СтрокаПодключения, 7)) <> "FTPS://") - ИЛИ СтрНайти(СтрокаПодключения, "@") <> 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Строка подключения к FTP-ресурсу не соответствует формату: ""%1""'"), СтрокаПодключения); - КонецЕсли; - - ПараметрыПодключения = СтрРазделить(СтрокаПодключения, "/"); - - Если ПараметрыПодключения.Количество() < 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В строке подключения к FTP-ресурсу не указано имя сервера: ""%1""'"), СтрокаПодключения); - КонецЕсли; - - Результат.Сервер = ПараметрыПодключения[2]; - - ПараметрыПодключения.Удалить(0); - ПараметрыПодключения.Удалить(0); - ПараметрыПодключения.Удалить(0); - - ПараметрыПодключения.Вставить(0, "@"); - - Если Не ПустаяСтрока(ПараметрыПодключения.Получить(ПараметрыПодключения.ВГраница())) Тогда - - ПараметрыПодключения.Добавить("@"); - - КонецЕсли; - - Результат.Путь = СтрСоединить(ПараметрыПодключения, "/"); - Результат.Путь = СтрЗаменить(Результат.Путь, "@", ""); - - Возврат Результат; -КонецФункции - -Функция ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла() Экспорт - - Возврат Не ОбщегоНазначения.РазделениеВключено() - И Не ЭтоАвтономноеРабочееМесто() - И ЭтоПодчиненныйУзелРИБ() - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); - -КонецФункции - -#КонецОбласти - #Область ПрофилиБезопасности Функция ЗапросНаИспользованиеВнешнихРесурсовПриВключенииОбмена() Экспорт @@ -3851,7 +3473,15 @@ // Формирует выборку измененных данных для передачи их в тот или иной узел плана обмена. // Если обращение к методу выполняется в активной транзакции, то вызывает исключение. -// См. описание метода ПланыОбменаМенеджер.ВыбратьИзменения() в синтакс-помощнике. +// См. описаниеметода ПланыОбменаМенеджер.ВыбратьИзменения() в синтакс-помощнике. +// +// Параметры: +// Узел - ПланОбменаСсылка +// НомерСообщения - Число +// ФильтрВыборки - Неопределено +// +// Возвращаемое значение: +// ВыборкаДанных // Функция ВыбратьИзменения(Знач Узел, Знач НомерСообщения, Знач ФильтрВыборки = Неопределено) Экспорт @@ -3896,7 +3526,7 @@ | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента, """") КАК ПрефиксКорреспондента, | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена, ЛОЖЬ) КАК НастройкаЗавершена, | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПереходНаWS_Этап, 0) КАК ПереходНаWS_Этап, - | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ВидТранспорта, """") КАК ВидТранспорта, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ИдентификаторТранспорта, """") КАК ИдентификаторТранспорта, | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.СинхронизацияНедоступна, ЛОЖЬ) КАК СинхронизацияНедоступна, | ВЫБОР | КОГДА ЕСТЬNULL(СостоянияОбменовДаннымиВыгрузка.РезультатВыполненияОбмена, 0) = 0 @@ -3984,8 +3614,8 @@ Если ОбщегоНазначения.РазделениеВключено() И НастройкаСинхронизации.НастройкаЗавершена = Истина И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкаСинхронизации.УзелИнформационнойБазы) = Истина - И НастройкаСинхронизации.ВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS - И НастройкаСинхронизации.ВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + И НастройкаСинхронизации.ИдентификаторТранспорта <> "WS" + И НастройкаСинхронизации.ИдентификаторТранспорта <> "ПассивныйРежим" Тогда НастройкаСинхронизации.ДоступенПереходНаWS = Истина; @@ -4089,33 +3719,47 @@ СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ВидТранспортаСообщенийОбмена", Неопределено); + СтруктураПараметров.Вставить("ИдентификаторТранспорта", Неопределено); + СтруктураПараметров.Вставить("НастройкиТранспорта", Неопределено); + СтруктураПараметров.Вставить("ДанныеАутентификации", Неопределено); СтруктураПараметров.Вставить("ВыполнятьЗагрузку", Истина); СтруктураПараметров.Вставить("ВыполнятьВыгрузку", Истина); - - СтруктураПараметров.Вставить("ТолькоПараметры", Ложь); - + СтруктураПараметров.Вставить("ТолькоПараметры", Ложь); СтруктураПараметров.Вставить("ДлительнаяОперацияРазрешена", Ложь); СтруктураПараметров.Вставить("ДлительнаяОперация", Ложь); СтруктураПараметров.Вставить("ИдентификаторОперации", ""); СтруктураПараметров.Вставить("ИдентификаторФайла", ""); - СтруктураПараметров.Вставить("ПараметрыАутентификации", Неопределено); - СтруктураПараметров.Вставить("СообщениеДляСопоставленияДанных", Ложь); - СтруктураПараметров.Вставить("ИнтервалОжиданияНаСервере", 0); Возврат СтруктураПараметров; КонецФункции -// Устарело. Использовать ОбменДаннымиВебСервис.ПолучитьWSПроксиПоПараметрамПодключения +// Устарело. Использовать ОбменДаннымиВебСервис.WSПрокси +// +// Параметры: +// СтруктураНастроек - Структура: +// * WSURLВебСервиса - Строка +// * WSИмяСервиса - Строка +// * WSURLПространстваИменСервиса - Строка +// * WSИмяПользователя - Строка +// * WSПароль - Строка +// * WSТаймаут - Число +// СтрокаСообщенияОбОшибке - Строка +// СообщениеПользователю - Строка +// ДелатьКонтрольныйВызов - Булево +// +// Возвращаемое значение: +// - Неопределено +// - WSПрокси +// Функция ПолучитьWSПроксиПоПараметрамПодключения( СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "", ДелатьКонтрольныйВызов = Ложь) Экспорт - + WSПрокси = ОбменДаннымиВебСервис.ПолучитьWSПроксиПоПараметрамПодключения( СтруктураНастроек, СтрокаСообщенияОбОшибке, @@ -4157,6 +3801,7 @@ НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ОбщегоНазначения.ИмяТаблицыПоСсылке(УзелИнформационнойБазы)); ЭлементБлокировки.УстановитьЗначение("Ссылка", УзелИнформационнойБазы); @@ -4356,6 +4001,32 @@ КонецФункции +Функция СоздатьВременныйКаталогСообщенийОбмена(ИдентификаторКаталога = Неопределено) Экспорт + + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяВременногоКаталогаСообщенийОбмена()); + + СоздатьКаталог(Результат); + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторКаталога = ПоместитьФайлВХранилище(Результат); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла() Экспорт + + Возврат Не ОбщегоНазначения.РазделениеВключено() + И Не ЭтоАвтономноеРабочееМесто() + И ЭтоПодчиненныйУзелРИБ() + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); + +КонецФункции + #КонецОбласти #Область ОбработчикиСобытийПодсистемКонфигурации @@ -4385,6 +4056,11 @@ Обработчик.Процедура = "ОбменДаннымиСервер.НастроитьАрхивированиеСообщенийАРМ"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "Справочники.НастройкиТранспортаСообщенийОбмена.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.4.1.1"; Обработчик.Процедура = "ОбменДаннымиСервер.УдалитьРольНастройкаСинхронизацииДанных"; @@ -4773,34 +4449,57 @@ КонецФункции +// Настройки обмена для узла информационной базы. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка, Ссылка на узел информационной базы +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - действие при обмене +// ИдентификаторТранспорта - Строка, Неопределено - идентификатор транспорта +// ДополнительныеПараметры - Структура, Неопределено - дополнительные параметры: +// * ТолькоПараметры - Булево +// * СообщениеДляСопоставленияДанных - Булево +// * ДанныеАутентификации - Неопределено +// +// Возвращаемое значение: +// см. СтруктураНастроекОбменаБазовая +// Функция НастройкиОбменаДляУзлаИнформационнойБазы( УзелИнформационнойБазы, ДействиеПриОбмене, - ВидТранспортаСообщенийОбмена, - ИспользоватьНастройкиТранспорта = Истина) Экспорт + ИдентификаторТранспорта = "", + ДополнительныеПараметры = Неопределено) Экспорт // Возвращаемое значение функции. СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + Для Каждого Параметр Из ДополнительныеПараметры Цикл + СтруктураНастроекОбмена.ДополнительныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; - СтруктураНастроекОбмена.ВидТранспортаОбмена = ВидТранспортаСообщенийОбмена; - СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + СтруктураНастроекОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; - ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); + СтруктураНастроекОбмена.ЭтоОбменВРИБ = ЗначениеЗаполнено(УзелИнформационнойБазы) + И ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + + ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена); УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. - ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); + ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); // Если настройки содержат ошибки, то выходим. Если СтруктураНастроекОбмена.Отказ Тогда Возврат СтруктураНастроекОбмена; КонецЕсли; - Если ИспользоватьНастройкиТранспорта Тогда - + Если ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда // Инициализируем обработку транспорта сообщений обмена. ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); @@ -4818,12 +4517,248 @@ КонецЕсли; Возврат СтруктураНастроекОбмена; + КонецФункции +// Структура настроек обмена базовая. +// +// Возвращаемое значение: +// Структура: +// * ДатаНачала - Дата +// * ДатаОкончания - Дата +// * НомерСтроки - Число. +// * НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника, +// по значениям реквизитов которого будет выполнен обмен данными. +// * НастройкаВыполненияОбменаНаименование - Строка - наименование настройки выполнения обмена. +// * УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется действие обмена данными. +// * УзелИнформационнойБазыКод - Строка. +// * УзелИнформационнойБазыНаименование - Строка. +// * ВидТранспортаОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, +// который будет использоваться в процессе обмена данными. +// * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. +// * КоличествоЭлементовВТранзакции - Число. +// * ПроизводитьЗагрузкуДанных - Булево. +// * ПроизводитьВыгрузкуДанных - Булево. +// * ИспользоватьПередачуБольшогоОбъемаДанных - Булево. +// * Отказ - Булево. +// * ЭтоОбменВРИБ - Булево. +// * ОбработкаОбменаДанными - ОбработкаОбъект.КонвертацияОбъектовXDTO. +// - ОбработкаОбъект.КонвертацияОбъектовИнформационныхБаз. +// - ОбработкаОбъект.КонвертацияОбъектовРаспределенныхИнформационныхБаз. +// * ОбработкаТранспортаСообщенийОбмена - ОбработкаОбъект.ТранспортСообщенийОбменаCOM, +// ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, +// ОбработкаОбъект.ТранспортСообщенийОбменаESB1C, +// ОбработкаОбъект.ТранспортСообщенийОбменаFILE, +// ОбработкаОбъект.ТранспортСообщенийОбменаFTP, +// ОбработкаОбъект.ТранспортСообщенийОбменаGoogleDrive, +// ОбработкаОбъект.ТранспортСообщенийОбменаHTTP, +// ОбработкаОбъект.ТранспортСообщенийОбменаSM, +// ОбработкаОбъект.ТранспортСообщенийОбменаWS, +// ОбработкаОбъект.ТранспортСообщенийОбменаПассивныйРежим, +// ОбработкаОбъект.ТранспортСообщенийОбменаЯндексДиск +// * ИмяПланаОбмена - Строка. +// * ТекущийУзелПланаОбмена - ПланОбменаСсылка. +// * ТекущийУзелПланаОбменаКод - ПланОбменаСсылка. +// * ОбменПоПравиламКонвертацииОбъектов - Булево. +// * НаличиеПравилКонвертацииОбязательно - Булево. +// * ИмяОбработкиТранспортаСообщенийОбмена - Строка. +// * КлючСообщенияЖурналаРегистрации - Строка. +// * НастройкиТранспорта - Произвольный - сохраненные настройки транспорта сообщений обмена внешней системы. +// * ПравилаКонвертацииОбъектов - ХранилищеЗначения - зачитанные правила конвертации объектов. +// - Неопределено - если правила конвертации не были загружены в базу для +// * ПравилаЗагружены - Булево. +// * ОтладкаОбработчиковВыгрузки - Булево. +// * ОтладкаОбработчиковЗагрузки - Булево. +// * ИмяФайлаВнешнейОбработкиОтладкиВыгрузки - Строка. +// * ИмяФайлаВнешнейОбработкиОтладкиЗагрузки - Строка. +// * РежимПротоколированияОбменаДанными - Булево. +// * ИмяФайлаПротоколаОбмена - Строка. +// * ПродолжитьПриОшибке - Булево. +// * ДополнительныеПараметры - Структура. +// * РезультатВыполненияОбмена - ПеречислениеСсылка.РезультатыВыполненияОбмена. +// * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. +// * КоличествоОбъектовОбработано - Число. +// * СообщениеПриОбмене - Строка. +// * СтрокаСообщенияОбОшибке - Строка. +// +Функция СтруктураНастроекОбменаБазовая() Экспорт + + СтруктураНастроекОбмена = Новый Структура; + + // Структура настроек по полям запроса. + + СтруктураНастроекОбмена.Вставить("ДатаНачала", ТекущаяДатаСеанса()); + СтруктураНастроекОбмена.Вставить("ДатаОкончания"); + + СтруктураНастроекОбмена.Вставить("НомерСтроки"); + СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбмена"); + СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбменаНаименование"); + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы"); + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыКод", ""); + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыНаименование", ""); + СтруктураНастроекОбмена.Вставить("ИдентификаторТранспорта"); + + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); + СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции", 1); // На каждый элемент отдельная транзакция. + СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных", Ложь); + СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных", Ложь); + СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Истина); + + // Структура настроек дополнительная. + СтруктураНастроекОбмена.Вставить("Отказ", Ложь); + СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", Ложь); + + СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными"); + СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена"); + + СтруктураНастроекОбмена.Вставить("ИмяПланаОбмена"); + СтруктураНастроекОбмена.Вставить("ИмяПланаОбменаКорреспондента"); + СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбмена"); + СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбменаКод"); + + СтруктураНастроекОбмена.Вставить("ОбменПоПравиламКонвертацииОбъектов", Ложь); + СтруктураНастроекОбмена.Вставить("НаличиеПравилКонвертацииОбязательно", Истина); + + СтруктураНастроекОбмена.Вставить("ИмяОбработкиТранспортаСообщенийОбмена"); + + СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации"); + + СтруктураНастроекОбмена.Вставить("НастройкиТранспорта"); + + СтруктураНастроекОбмена.Вставить("ПравилаКонвертацииОбъектов"); + СтруктураНастроекОбмена.Вставить("ПравилаЗагружены", Ложь); + + СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковВыгрузки ", Ложь); + СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковЗагрузки", Ложь); + СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки", ""); + СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиЗагрузки", ""); + СтруктураНастроекОбмена.Вставить("РежимПротоколированияОбменаДанными", Ложь); + СтруктураНастроекОбмена.Вставить("ИмяФайлаПротоколаОбмена", ""); + СтруктураНастроекОбмена.Вставить("ПродолжитьПриОшибке", Ложь); + + // Структура для передачи произвольных дополнительных параметров. + СтруктураНастроекОбмена.Вставить("ДополнительныеПараметры", Новый Структура); + + // Структура для регистрации событий в ЖР. + СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена"); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); + СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); + СтруктураНастроекОбмена.Вставить("СообщениеПриОбмене", ""); + СтруктураНастроекОбмена.Вставить("СтрокаСообщенияОбОшибке", ""); + + Возврат СтруктураНастроекОбмена; + +КонецФункции + +Функция ПолучитьПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт + + Возврат ЗначениеВСтрокуВнутр(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); + +КонецФункции + +Функция СвойстваОбъектаМетаданных(Знач ПолноеИмяТаблицы) Экспорт + + Результат = Новый Структура("Синоним, Иерархический"); + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); + + ЗаполнитьЗначенияСвойств(Результат, ОбъектМетаданных); + + Возврат Результат; + +КонецФункции + +Функция ПолучитьОбъектыТаблицы(Знач ПолноеИмяТаблицы) Экспорт + УстановитьПривилегированныйРежим(Истина); + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); + + Если ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда + + Если ОбъектМетаданных.Иерархический Тогда + Если ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + Возврат ЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы); + КонецЕсли; + + Возврат ЭлементыИерархическогоСправочникаИерархияЭлементов(ПолноеИмяТаблицы); + КонецЕсли; + + Возврат ЭлементыНеиерархическогоСправочника(ПолноеИмяТаблицы); + + ИначеЕсли ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектМетаданных) Тогда + + Если ОбъектМетаданных.Иерархический Тогда + Возврат ЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы); + КонецЕсли; + + Возврат ЭлементыНеиерархическогоСправочника(ПолноеИмяТаблицы); + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция ДанныеКорреспондента(Знач ПолноеИмяТаблицы) Экспорт + + Результат = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); + + Результат.СвойстваОбъектаМетаданных = СвойстваОбъектаМетаданных(ПолноеИмяТаблицы); + Результат.ТаблицаБазыКорреспондента = ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы); + + Возврат Результат; +КонецФункции + +Процедура УдалитьНезначащиеСимволыВНастройкахПодключения(Настройки) Экспорт + + Для Каждого Настройка Из Настройки Цикл + + Если ТипЗнч(Настройка.Значение) = Тип("Строка") Тогда + + Настройки.Вставить(Настройка.Ключ, СокрЛП(Настройка.Значение)); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область ДляРаботыЧерезВнешнееСоединение +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт + + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Адрес) Экспорт + + ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла("xml"); + + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + + Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайлаСообщенияОбмена)); + + УдалитьФайлы(ПолноеИмяФайлаСообщенияОбмена); + +КонецПроцедуры + Функция ПараметрыОбменаДаннымиЧерезФайлИлиСтроку() Экспорт СтруктураПараметров = Новый Структура; @@ -4876,8 +4811,6 @@ КонецЕсли; - ВыполнитьОбновлениеНастроекОбмена(ПараметрыОбмена.УзелИнформационнойБазы); - Если Не НастройкаСинхронизацииЗавершена(ПараметрыОбмена.УзелИнформационнойБазы) Тогда ПредставлениеПрограммы = ?(ОбщегоНазначения.РазделениеВключено(), @@ -4895,10 +4828,12 @@ // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ СтруктураНастроекОбмена = НастройкиОбменаДляУзлаИнформационнойБазы( - ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ДействиеПриОбмене, Неопределено, Ложь); + ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ДействиеПриОбмене, Неопределено); + Если ЗначениеЗаполнено(ПараметрыОбмена.ДатаНачалаОперации) Тогда СтруктураНастроекОбмена.ДатаНачала = ПараметрыОбмена.ДатаНачалаОперации; КонецЕсли; + ЗафиксироватьНачалоОбменаВРегистреСведений(СтруктураНастроекОбмена); Если СтруктураНастроекОбмена.Отказ Тогда @@ -4926,6 +4861,9 @@ СозданВременныйФайл = Истина; КонецЕсли; + РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив( + ПараметрыОбмена.УзелИнформационнойБазы, ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена); + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ПараметрыОбмена.ПолноеИмяФайлаСообщенияОбмена, ПараметрыОбмена.СообщениеОбмена); // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало @@ -5118,7 +5056,7 @@ // СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. // Процедура ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, - Знач ИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "", Знач ТолькоПараметры = Ложь) Экспорт + Знач ИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "") Экспорт Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда // Обмен в РИБ @@ -5130,6 +5068,9 @@ // Устанавливаем имя файла сообщения обмена, который необходимо прочитать. ОбработкаОбменаДанными.УстановитьИмяФайлаСообщенияОбмена(ИмяФайлаСообщенияОбмена); + ТолькоПараметры = СтруктураНастроекОбмена.ДополнительныеПараметры.Свойство("ТолькоПараметры") + И СтруктураНастроекОбмена.ДополнительныеПараметры.ТолькоПараметры; + СообщениеОбОшибке = ""; ОбработкаОбменаДанными.ВыполнитьЗагрузкуДанных(Отказ, ТолькоПараметры, СообщениеОбОшибке); @@ -5193,8 +5134,8 @@ // загрузка данных Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.ИмяПланаОбмена) Тогда ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("ОбменДаннымиСВнешнейСистемой", - СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + + ПараметрыЗагрузки.Вставить("ОбменДаннымиСВнешнейСистемой", Ложь); ОбработкаОбменаДаннымиXML.ВыполнитьЗагрузкуДанных(ПараметрыЗагрузки); @@ -5238,6 +5179,267 @@ КонецПроцедуры +Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт + + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + ПараметрыОбменаДанными.СообщениеОбмена = СообщениеОбмена; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + + СообщениеОбмена = ПараметрыОбменаДанными.СообщениеОбмена; + +КонецПроцедуры + +Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт + + ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); + + ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; + ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; + ПараметрыОбменаДанными.СообщениеОбмена = СообщениеОбмена; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); + + СообщениеОбмена = ПараметрыОбменаДанными.СообщениеОбмена; + +КонецПроцедуры + +Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); + + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); + ВызватьИсключение Сообщение; + КонецЕсли; + + ПомощникСозданияОбменаДанными = МодульПомощникСозданияОбменаДанными().Создать(); + ПомощникСозданияОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; + ПомощникСозданияОбменаДанными.ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле)); + +КонецПроцедуры + +Функция ИмяКаталогаДляСопоставленияФайловаяИБ() Экспорт + + Возврат СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()).File + + ПолучитьРазделительПути() + "TempMessageForDataMatching"; + +КонецФункции + +Функция ПолноеИмяФайлаДляСопоставленияФайловаяИБ(ИмяФайла) Экспорт + + Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаДляСопоставленияФайловаяИБ(), ИмяФайла); + +КонецФункции + +// Считывает настройки отладки из ИБ и устанавливает их для структуры обмена. +// +Процедура УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена, ЭтоВнешнееСоединение = Ложь) Экспорт + + ТекстЗапроса = "ВЫБРАТЬ + | ВЫБОР + | КОГДА &ПроизводитьВыгрузку + | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиВыгрузки + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ОтладкаОбработчиковВыгрузки, + | ВЫБОР + | КОГДА &ПроизводитьВыгрузку + | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки + | ИНАЧЕ """" + | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиВыгрузки, + | ВЫБОР + | КОГДА &ПроизводитьЗагрузку + | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиЗагрузки + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ОтладкаОбработчиковЗагрузки, + | ВЫБОР + | КОГДА &ПроизводитьЗагрузку + | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки + | ИНАЧЕ """" + | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиЗагрузки, + | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными КАК РежимПротоколированияОбменаДанными, + | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена КАК ИмяФайлаПротоколаОбмена, + | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке КАК ПродолжитьПриОшибке + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.РежимОтладки"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + ПроизводитьВыгрузкуДанных = Ложь; + Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьВыгрузкуДанных", ПроизводитьВыгрузкуДанных) Тогда + ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + КонецЕсли; + + ПроизводитьЗагрузкуДанных = Ложь; + Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьЗагрузкуДанных", ПроизводитьЗагрузкуДанных) Тогда + ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + КонецЕсли; + + Запрос.УстановитьПараметр("ИмяПланаОбмена", СтруктураНастроекОбмена.ИмяПланаОбмена); + Запрос.УстановитьПараметр("ПроизводитьВыгрузку", ПроизводитьВыгрузкуДанных); + Запрос.УстановитьПараметр("ПроизводитьЗагрузку", ПроизводитьЗагрузкуДанных); + + ИмяФайлаПротокола = ""; + Если ЭтоВнешнееСоединение И СтруктураНастроекОбмена.Свойство("ИмяФайлаПротоколаОбмена", ИмяФайлаПротокола) + И Не ПустаяСтрока(ИмяФайлаПротокола) Тогда + + СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = ДобавитьЛитералКИмениФайла(ИмяФайлаПротокола, "ВнешнееСоединение") + + КонецЕсли; + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + ТаблицаНастроек = Результат.Выгрузить(); + СтрокаТаблицы = ТаблицаНастроек[0]; + + ЗаполнитьЗначенияСвойств(СтруктураНастроекОбмена, СтрокаТаблицы); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена, ОбменСБСП20 = Ложь) Экспорт + + ОбработкаОбменаДанными.ДописыватьДанныеВПротоколОбмена = Ложь; + ОбработкаОбменаДанными.ВыгружатьТолькоРазрешенные = Ложь; + + ОбработкаОбменаДанными.ИспользоватьТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции <> 1; + ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; + + ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; + + Если Не ОбменСБСП20 Тогда + + УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта = Истина) Экспорт + + УзелИнформационнойБазы = СтруктураНастроекОбмена.УзелИнформационнойБазы; // ПланОбменаСсылка + + Если НЕ ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда + + // Узел информационной базы не должен быть пустым. + СтрокаСообщенияОбОшибке = НСтр( + "ru = 'Не задан узел информационной базы, с которой нужно производить обмен информацией. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ПометкаУдаления") Тогда + + // Узел информационной базы не должен быть помечен на удаление. + СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел информационной базы помечен на удаление. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли УзелИнформационнойБазы = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена Тогда + + // Сами с собой не обмениваемся. + СтрокаСообщенияОбОшибке = НСтр( + "ru = 'Нельзя организовать обмен данными с текущим узлом информационной базы. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли ПустаяСтрока(СтруктураНастроекОбмена.УзелИнформационнойБазыКод) + ИЛИ ПустаяСтрока(СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод) Тогда + + // У узлов участвующих в обмене должен быть не пустой код. + СтрокаСообщенияОбОшибке = НСтр("ru = 'Один из узлов обмена имеет пустой код. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки Тогда + + ФайлОбработкиВыгрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); + + Если Не ФайлОбработкиВыгрузки.Существует() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки выгрузки не существует. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки Тогда + + ФайлОбработкиЗагрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); + + Если Не ФайлОбработкиЗагрузки.Существует() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки загрузки не существует. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена) Экспорт + + Перем ОбработкаОбменаДанными; + + // Если настройки содержат ошибки, то не производим инициализацию. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат; + КонецЕсли; + + Если СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + + ОбработкаОбменаДанными = ОбработкаОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда + + ОбработкаОбменаДанными = ОбработкаОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена); + + КонецЕсли; + + СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными", ОбработкаОбменаДанными); + +КонецПроцедуры + #КонецОбласти #Область ИнтерактивноеИзменениеВыгрузки @@ -5281,6 +5483,9 @@ КонецПроцедуры // Имя для сохранения и восстановления настроек при интерактивном дополнении выгрузки. +// +// Возвращаемое значение: +// Строка // Функция ДополнениеВыгрузкиИмяАвтоСохраненияНастроек() Экспорт Возврат НСтр("ru = 'Последняя отправка (сохраняется автоматически)'"); @@ -5407,6 +5612,12 @@ КонецПроцедуры // Возвращает признак успешного выполнения обмена данными. +// +// Параметры: +// РезультатВыполненияОбмена - ПеречислениеСсылка.РезультатыВыполненияОбмена +// +// Возвращаемое значение: +// Булево // Функция РезультатВыполненияОбменаВыполнено(РезультатВыполненияОбмена) Экспорт @@ -5455,13 +5666,28 @@ КонецФункции -#КонецОбласти - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -#Область ОбщиеМетодыМеханизмовКонвертацииДанных +// Останавливает выполнение кода на заданное время. +// Метод продублирован из БТС, т.к. п/с может использоваться без указанной библиотеки. +// +// Параметры: +// Секунд - Число - время ожидания в секундах. +// +Процедура Пауза(Секунд) Экспорт + + ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы(); + ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание(); + + Если ФоновоеЗадание = Неопределено Тогда + + Параметры = Новый Массив; + Параметры.Добавить(Секунд); + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.Пауза", Параметры); + + КонецЕсли; + + ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Секунд); + +КонецПроцедуры Функция МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете() Экспорт @@ -5495,6 +5721,121 @@ КонецФункции +// Получение файла по его идентификатору. +// +// Параметры: +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор получаемого файла. +// WSПассивныйРежимФайловаяИБ - Булево - признак того, что получение файла происходит в файловой ИБ при настройке WS +// соединения в пассивном режиме +// +// Возвращаемое значение: +// Строка - имя файла. +// +Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, ПассивныйРежимФайловаяИБ = Ложь, УдалитьФайлИзХранилища = Истина) Экспорт + + ИмяФайла = ""; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриПолученииФайлаИзХранилища(ИдентификаторФайла, ИмяФайла); + + Иначе + + ПриПолученииФайлаИзХранилища(ИдентификаторФайла, ИмяФайла, УдалитьФайлИзХранилища); + + КонецЕсли; + + Если ПассивныйРежимФайловаяИБ Тогда + ПолноеИмяФайла = ПолноеИмяФайлаДляСопоставленияФайловаяИБ(ИмяФайла); + Иначе + ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяФайла); + КонецЕсли; + + Возврат ПолноеИмяФайла; + +КонецФункции + +// Сохранение файла. +// +// Параметры: +// ИмяФайла - Строка - наименование файла. +// ИдентификаторФайла - УникальныйИдентификатор - идентификатор файла. Если задан, то при сохранении файла +// будет использоваться это значение, иначе - сгенерируется новое. +// +// Возвращаемое значение: +// УникальныйИдентификатор - идентификатор файла. +// +Функция ПоместитьФайлВХранилище(Знач ИмяФайла, Знач ИдентификаторФайла = Неопределено) Экспорт + + ИдентификаторФайла = ?(ИдентификаторФайла = Неопределено, Новый УникальныйИдентификатор, ИдентификаторФайла); + + Файл = Новый Файл(ИмяФайла); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); + СтруктураЗаписи.Вставить("ИмяФайлаСообщения", Файл.Имя); + СтруктураЗаписи.Вставить("ДатаЗакладкиСообщения", ТекущаяУниверсальнаяДата()); + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + МодульОбменДаннымиВМоделиСервиса.ПриПомещенииФайлаВХранилище(СтруктураЗаписи); + Иначе + + ПриПомещенииФайлаВХранилище(СтруктураЗаписи); + + КонецЕсли; + + Возврат ИдентификаторФайла; + +КонецФункции + +// Возвращает ключ сообщения журнала регистрации. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел информационной базы +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене +// +// Возвращаемое значение: +// Строка +// +Функция КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене) Экспорт + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + КлючСообщения = НСтр("ru = 'Обмен данными.[ИмяПланаОбмена].[ДействиеПриОбмене]'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КлючСообщения = СтрЗаменить(КлючСообщения, "[ИмяПланаОбмена]", ИмяПланаОбмена); + КлючСообщения = СтрЗаменить(КлючСообщения, "[ДействиеПриОбмене]", ДействиеПриОбмене); + + Возврат КлючСообщения; + +КонецФункции + +Функция КоличествоЭлементовВТранзакцииВыполняемогоДействия(Действие) Экспорт + + Если Действие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда + КоличествоЭлементов = КоличествоЭлементовВТранзакцииВыгрузкиДанных(); + Иначе + КоличествоЭлементов = КоличествоЭлементовВТранзакцииЗагрузкиДанных(); + КонецЕсли; + + Возврат КоличествоЭлементов; + +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОбщиеМетодыМеханизмовКонвертацииДанных + Функция ПредопределенныеУзлыПлановОбменаБСП() Результат = Новый Массив; @@ -5518,54 +5859,6 @@ КонецФункции -Функция НовыйУзелОбменаДаннымиXDTO( - ИмяПланаОбмена, - ИдентификаторНастройки, - ИдентификаторКорреспондента, - НаименованиеКорреспондента, - ВерсияФорматаОбмена) - - МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; - - НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); - НовыйУзел.Код = ИдентификаторКорреспондента; - НовыйУзел.Наименование = НаименованиеКорреспондента; - - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("ВариантНастройки", Метаданные.ПланыОбмена[ИмяПланаОбмена]) Тогда - НовыйУзел.ВариантНастройки = ИдентификаторНастройки; - КонецЕсли; - - НовыйУзел.ВерсияФорматаОбмена = ВерсияФорматаОбмена; - - НовыйУзел.Заполнить(Неопределено); - - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() - И ЭтоРазделенныйПланОбменаБСП(ИмяПланаОбмена) Тогда - - НовыйУзел.РегистрироватьИзменения = Истина; - - КонецЕсли; - - НовыйУзел.ОбменДанными.Загрузка = Истина; - НовыйУзел.Записать(); - - Возврат НовыйУзел.Ссылка; - -КонецФункции - -Функция КоличествоЭлементовВТранзакцииВыполняемогоДействия(Действие) - - Если Действие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда - КоличествоЭлементов = КоличествоЭлементовВТранзакцииВыгрузкиДанных(); - Иначе - КоличествоЭлементов = КоличествоЭлементовВТранзакцииЗагрузкиДанных(); - КонецЕсли; - - Возврат КоличествоЭлементов; - -КонецФункции - Процедура ОтключитьПроверкуДатЗапрета(Отключить = Истина) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда @@ -5575,46 +5868,6 @@ КонецПроцедуры -Процедура ВыполнитьОбновлениеНастроекОбмена(УзелИнформационнойБазы) - - Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(УзелИнформационнойБазы) Тогда - Возврат; - КонецЕсли; - - НаборУдалитьНастройкиТранспортаОбмена = РегистрыСведений.УдалитьНастройкиТранспортаОбмена.СоздатьНаборЗаписей(); - НаборУдалитьНастройкиТранспортаОбмена.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); - НаборУдалитьНастройкиТранспортаОбмена.Прочитать(); - - СостояниеОбработки = ОбновлениеИнформационнойБазы.ОбъектОбработан(НаборУдалитьНастройкиТранспортаОбмена); - Если Не СостояниеОбработки.Обработан Тогда - РегистрыСведений.НастройкиТранспортаОбменаДанными.ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(УзелИнформационнойБазы); - КонецЕсли; - - НаборОбщиеНастройкиУзловИнформационныхБаз = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СоздатьНаборЗаписей(); - НаборОбщиеНастройкиУзловИнформационныхБаз.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); - НаборОбщиеНастройкиУзловИнформационныхБаз.Прочитать(); - - Если НаборОбщиеНастройкиУзловИнформационныхБаз.Количество() = 0 Тогда - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьОбщиеНастройкиКорреспондента(УзелИнформационнойБазы); - Иначе - СостояниеОбработки = ОбновлениеИнформационнойБазы.ОбъектОбработан(НаборОбщиеНастройкиУзловИнформационныхБаз); - Если Не СостояниеОбработки.Обработан Тогда - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьОбщиеНастройкиКорреспондента(УзелИнформационнойБазы); - КонецЕсли; - КонецЕсли; - - Если ЭтоПланОбменаXDTO(УзелИнформационнойБазы) Тогда - НаборНастройкиОбменаДаннымиXDTO = РегистрыСведений.НастройкиОбменаДаннымиXDTO.СоздатьНаборЗаписей(); - НаборНастройкиОбменаДаннымиXDTO.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); - НаборНастройкиОбменаДаннымиXDTO.Прочитать(); - - Если НаборНастройкиОбменаДаннымиXDTO.Количество() = 0 Тогда - РегистрыСведений.НастройкиОбменаДаннымиXDTO.ОбновитьНастройкиОбменаДаннымиXDTOКорреспондента(УзелИнформационнойБазы); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - Процедура ВыполнитьОтложенноеПроведениеДокументов( ДокументыДляОтложенногоПроведения, УзелКорреспондента, @@ -6081,185 +6334,6 @@ #Область СообщенияОбменов -// Получает сообщение обмена во временный каталог пользователя ОС. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения -// обмена. -// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта для получения -// сообщения обмена. -// ВыводитьСообщения - Булево - если Истина, то выводятся сообщения пользователю. -// -// Возвращаемое значение: -// Структура со следующими ключи: -// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена. -// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена. -// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена. -// -Функция ПолучитьСообщениеОбменаВоВременныйКаталог(Отказ, УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена, ВыводитьСообщения = Истина) Экспорт - - // Возвращаемое значение функции. - Результат = Новый Структура; - Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); - Результат.Вставить("ИмяФайлаСообщенияОбмена", ""); - Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); - - СтруктураНастроекОбмена = НастройкиТранспортаОбмена(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена); - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - - // Если настройка содержит ошибки, то получение сообщения обмена не производим; статус "Отменено". - Если СтруктураНастроекОбмена.Отказ Тогда - - Если ВыводитьСообщения Тогда - НСтрока = НСтр("ru = 'При инициализации обработки транспорта сообщений обмена возникли ошибки.'"); - ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); - КонецЕсли; - - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Возврат Результат; - КонецЕсли; - - // создаем временный каталог - ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда - - // Получаем сообщение во временный каталог. - ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена); - - КонецЕсли; - - Если СтруктураНастроекОбмена.РезультатВыполненияОбмена <> Неопределено Тогда - - Если ВыводитьСообщения Тогда - НСтрока = НСтр("ru = 'При получении сообщений обмена возникли ошибки.'"); - ОбщегоНазначения.СообщитьПользователю(НСтрока,,,, Отказ); - КонецЕсли; - - // Удаляем временный каталог и все его содержимое. - ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); - - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Возврат Результат; - КонецЕсли; - - Результат.ИмяВременногоКаталогаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ИмяКаталогаСообщенияОбмена(); - Результат.ИмяФайлаСообщенияОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ИмяФайлаСообщенияОбмена(); - Результат.ИдентификаторФайлаПакетаДанных = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ДатаФайлаСообщенияОбмена(); - - Возврат Результат; -КонецФункции - -// Получает сообщение обмена из информационной базы корреспондента во временный каталог пользователя ОС. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки. -// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется получение сообщения -// обмена. -// ВыводитьСообщения - Булево - если Истина, то выводятся сообщения пользователю. -// -// Возвращаемое значение: -// Структура со следующими ключи: -// * ИмяВременногоКаталогаСообщенийОбмена - полное имя каталога обмена, в которое было загружено сообщение обмена. -// * ИмяФайлаСообщенияОбмена - полное имя файла сообщения обмена. -// * ИдентификаторФайлаПакетаДанных - дата изменения файла сообщения обмена. -// -Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, УзелИнформационнойБазы, ВыводитьСообщения = Истина) Экспорт - - // Возвращаемое значение функции. - Результат = Новый Структура; - Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); - Результат.Вставить("ИмяФайлаСообщенияОбмена", ""); - Результат.Вставить("ИдентификаторФайлаПакетаДанных", Неопределено); - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - ИмяПланаОбменаКорреспондента = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(УзелИнформационнойБазы); - - ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); - КодТекущегоУзлаПланаОбмена = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); - - ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, Ложь); - - // Параметры, которые будут определены в функции. - ДатаФайлаСообщенияОбмена = Дата('00010101'); - ИмяКаталогаСообщенияОбмена = ""; - СтрокаСообщенияОбОшибке = ""; - - Попытка - ИмяКаталогаСообщенияОбмена = СоздатьВременныйКаталогСообщенийОбмена(); - Исключение - Если ВыводитьСообщения Тогда - Сообщение = НСтр("ru = 'Не удалось произвести обмен: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначения.СообщитьПользователю(Сообщение,,,, Отказ); - КонецЕсли; - Возврат Результат; - КонецПопытки; - - // Получаем внешнее соединение для узла информационной базы. - ДанныеСоединения = ОбменДаннымиПовтИсп.ВнешнееСоединениеДляУзлаИнформационнойБазы(УзелИнформационнойБазы); - ВнешнееСоединение = ДанныеСоединения.Соединение; - - Если ВнешнееСоединение = Неопределено Тогда - - Сообщение = НСтр("ru = 'Не удалось произвести обмен: %1'"); - Если ВыводитьСообщения Тогда - СообщениеДляПользователя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ДанныеСоединения.КраткоеОписаниеОшибки); - ОбщегоНазначения.СообщитьПользователю(СообщениеДляПользователя,,,, Отказ); - КонецЕсли; - - // Добавляем две записи в ЖР: одну для загрузки данных, другую для выгрузки данных. - СтруктураНастроекОбмена = Новый Структура("КлючСообщенияЖурналаРегистрации"); - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ДанныеСоединения.ПодробноеОписаниеОшибки); - ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Истина); - - Возврат Результат; - КонецЕсли; - - ИмяФайлаСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена, ШаблонИмениФайлаСообщения + ".xml"); - - ПсевдонимУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); - Если ЗначениеЗаполнено(ПсевдонимУзла) Тогда - // Надо проверить код узла в корреспонденте - он может быть уже перекодирован. - // Тогда псевдоним больше не нужен. - ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[ИмяПланаОбменаКорреспондента]; - Если ПланОбменаМенеджер.НайтиПоКоду(ПсевдонимУзла) <> ПланОбменаМенеджер.ПустаяСсылка() Тогда - КодТекущегоУзлаПланаОбмена = ПсевдонимУзла; - КонецЕсли; - КонецЕсли; - - ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДляУзлаИнформационнойБазы(Отказ, - ИмяПланаОбменаКорреспондента, КодТекущегоУзлаПланаОбмена, ИмяФайлаСообщенияОбмена, СтрокаСообщенияОбОшибке); - - Если Отказ Тогда - - Если ВыводитьСообщения Тогда - // Выводим сообщение об ошибке. - Сообщение = НСтр("ru = 'Не удалось выгрузить данные: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ДанныеСоединения.КраткоеОписаниеОшибки); - ОбщегоНазначения.СообщитьПользователю(Сообщение,,,, Отказ); - КонецЕсли; - - Возврат Результат; - КонецЕсли; - - ФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщенияОбмена); - Если ФайлСообщенияОбмена.Существует() Тогда - ДатаФайлаСообщенияОбмена = ФайлСообщенияОбмена.ПолучитьВремяИзменения(); - КонецЕсли; - - Результат.ИмяВременногоКаталогаСообщенийОбмена = ИмяКаталогаСообщенияОбмена; - Результат.ИмяФайлаСообщенияОбмена = ИмяФайлаСообщенияОбмена; - Результат.ИдентификаторФайлаПакетаДанных = ДатаФайлаСообщенияОбмена; - - Возврат Результат; -КонецФункции - // Выполняет удаление файлов сообщений обмена, которые не были удалены из-за сбоев в работе системы. // Удалению подлежат файлы обмена с датой размещения более суток от текущей универсальной даты, // и файлы для сопоставления с датой размещения более 7 суток от текущей универсальной даты. @@ -6380,13 +6454,12 @@ Если УзелИнформационнойБазы <> Неопределено Тогда ВыполнитьВыгрузку = Истина; + + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(УзелИнформационнойБазы, ИдентификаторТранспорта); - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелИнформационнойБазы); - - ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда + Если ИдентификаторТранспорта = "WS" + И Не НастройкиТранспорта.ЗапомнитьПароль Тогда ВыполнитьВыгрузку = Ложь; @@ -6400,7 +6473,7 @@ Отказ = Ложь; ПараметрыОбмена = ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; ПараметрыОбмена.ВыполнятьВыгрузку = Истина; @@ -6925,25 +6998,6 @@ КонецФункции -// Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя. -// -Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя, ЭтоИсходящееСообщение) - - ШаблонИмени = "[Префикс]_[УзелОтправитель]_[УзелПолучатель]"; - Если СтрДлина(КодУзлаОтправителя) = 36 И ЭтоИсходящееСообщение Тогда - ПрефиксИБИсточника = Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить(); - Если ЗначениеЗаполнено(ПрефиксИБИсточника) Тогда - ШаблонИмени = "[Префикс]_[ПрефиксИБИсточника]_[УзелОтправитель]_[УзелПолучатель]"; - КонецЕсли; - КонецЕсли; - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[Префикс]", "Message"); - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[ПрефиксИБИсточника]",ПрефиксИБИсточника); - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелОтправитель]", КодУзлаОтправителя); - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелПолучатель]", КодУзлаПолучателя); - - Возврат ШаблонИмени; -КонецФункции - // Возвращает имя временного каталога для сообщений обмена данными. // Имя каталога соответствует шаблону: // "Exchange82 {GUID}", @@ -6961,30 +7015,6 @@ КонецФункции -// Возвращает имя обработки транспорта сообщений обмена. -// -// Параметры: -// ВидТранспорта - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, для которого необходимо получить -// имя обработки. -// -// Возвращаемое значение: -// Строка - имя обработки транспорта сообщений обмена. -// -Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта) - - ВидыТранспортаИОбработки = Новый Соответствие(); - ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL, Метаданные.Обработки.ТранспортСообщенийОбменаEMAIL.Имя); - ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE, Метаданные.Обработки.ТранспортСообщенийОбменаFILE.Имя); - ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP, Метаданные.Обработки.ТранспортСообщенийОбменаFTP.Имя); - - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда - ВидыТранспортаИОбработки.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема, "ТранспортСообщенийОбменаВнешняяСистема"); - КонецЕсли; - - Возврат ВидыТранспортаИОбработки.Получить(ВидТранспорта); - -КонецФункции - // Дубль процедуры на сервере ОбменДаннымиКлиент.МаксимальноеКоличествоПолейСопоставленияОбъектов(). // // Возвращаемое значение: @@ -7048,130 +7078,6 @@ #КонецОбласти -#Область ТранспортСообщенийОбмена - -Процедура ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена) - - // Получаем инициализированную обработку транспорта сообщений. - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; // ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, ОбработкаОбъект.ТранспортСообщенийОбменаFILE, ОбработкаОбъект.ТранспортСообщенийОбменаFTP - - // Получаем новое имя временного файла. - Если Не ОбработкаТранспортаСообщенийОбмена.ВыполнитьДействияПередОбработкойСообщения() Тогда - - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаТранспортаСообщенийОбмена.СтрокаСообщенияОбОшибкеЖР, СтруктураНастроекОбмена, Истина); - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; - - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьТранспортСообщенияОбменаОтправка(СтруктураНастроекОбмена) - - // Получаем инициализированную обработку транспорта сообщений. - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; // ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, ОбработкаОбъект.ТранспортСообщенийОбменаFILE, ОбработкаОбъект.ТранспортСообщенийОбменаFTP - - // Отправляем сообщение обмена из временного каталога. - Если Не ОбработкаТранспортаСообщенийОбмена.ПодключениеУстановлено() - Или Не ОбработкаТранспортаСообщенийОбмена.ОтправитьСообщение() Тогда - - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаТранспортаСообщенийОбмена.СтрокаСообщенияОбОшибкеЖР, СтруктураНастроекОбмена, Истина); - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; - - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена, ИспользоватьПсевдоним = Истина, СтекОшибок = Неопределено) - - Если СтекОшибок = Неопределено Тогда - СтекОшибок = Новый Массив; - КонецЕсли; - - // Получаем инициализированную обработку транспорта сообщений. - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; // ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, ОбработкаОбъект.ТранспортСообщенийОбменаFILE, ОбработкаОбъект.ТранспортСообщенийОбменаFTP - ОбработкаТранспортаСообщенийОбмена.УзелИнформационнойБазы = СтруктураНастроекОбмена.УзелИнформационнойБазы; - - // Получаем сообщение обмена во временный каталог. - Если Не ОбработкаТранспортаСообщенийОбмена.ПодключениеУстановлено() - Или Не ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение() Тогда - - СтекОшибок.Добавить(ОбработкаТранспортаСообщенийОбмена.СтрокаСообщенияОбОшибкеЖР); - - Если Не ИспользоватьПсевдоним Тогда - // Больше попыток поиска файла не будет, поэтому регистрируем все накопленные ошибки. - Для Каждого ТекущаяОшибка Из СтекОшибок Цикл - ЗаписьЖурналаРегистрацииОбменаДанными(ТекущаяОшибка, СтруктураНастроекОбмена, Истина); - КонецЦикла; - КонецЕсли; - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; - - КонецЕсли; - - Если ИспользоватьПсевдоним - И СтруктураНастроекОбмена.РезультатВыполненияОбмена <> Неопределено Тогда - // Возможно, сообщение удастся получить если применить виртуальный код узла (псевдоним). - - Транслитерация = Неопределено; - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FILEТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); - ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("EMAILТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); - ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FTPТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); - КонецЕсли; - Транслитерация = ?(Транслитерация = Неопределено, Ложь, Транслитерация); - - ШаблонИмениФайлаСтарый = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения; - СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения( - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, - СтруктураНастроекОбмена.УзелИнформационнойБазы, - Ложь, - Транслитерация, - Истина); - Если ШаблонИмениФайлаСтарый <> СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения Тогда - // Попытка повторного выполнения транспорта с новым шаблоном. - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена, Ложь, СтекОшибок); - Иначе - // Больше попыток поиска файла не будет, поэтому регистрируем все накопленные ошибки. - Для Каждого ТекущаяОшибка Из СтекОшибок Цикл - ЗаписьЖурналаРегистрацииОбменаДанными(ТекущаяОшибка, СтруктураНастроекОбмена, Истина); - КонецЦикла; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена) - - // Получаем инициализированную обработку транспорта сообщений. - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; // ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, ОбработкаОбъект.ТранспортСообщенийОбменаFILE, ОбработкаОбъект.ТранспортСообщенийОбменаFTP - - // Выполняем действия после отправки сообщения. - ОбработкаТранспортаСообщенийОбмена.ВыполнитьДействияПослеОбработкиСообщения(); - -КонецПроцедуры - -// Получает настройки прокси сервера. -// -Функция НастройкиПроксиСервера(ЗащищенноеСоединение) - - Прокси = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); - Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(Протокол); - КонецЕсли; - - Возврат Прокси; - -КонецФункции -#КонецОбласти - #Область СервисПередачиФайлов // Получение имени файла по его идентификатору из хранилища. @@ -7182,15 +7088,15 @@ // ИдентификаторФайла - УникальныйИдентификатор - идентификатор получаемого файла. // ИмяФайла - Строка - имя файла, из хранилища. // -Процедура ПриПолученииФайлаИзХранилища(Знач ИдентификаторФайла, ИмяФайла) +Процедура ПриПолученииФайлаИзХранилища(Знач ИдентификаторФайла, ИмяФайла, УдалитьФайлИзХранилища = Истина) ТекстЗапроса = - "ВЫБРАТЬ - | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла - |ИЗ - | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными - |ГДЕ - | СообщенияОбменаДанными.ИдентификаторСообщения = &ИдентификаторСообщения"; + "ВЫБРАТЬ + | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла + |ИЗ + | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными + |ГДЕ + | СообщенияОбменаДанными.ИдентификаторСообщения = &ИдентификаторСообщения"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИдентификаторСообщения", Строка(ИдентификаторФайла)); @@ -7208,9 +7114,11 @@ ИмяФайла = Выборка.ИмяФайла; // Удаляем информацию о файле сообщения обмена из хранилища. - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); - РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); + Если УдалитьФайлИзХранилища Тогда + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); + РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); + КонецЕсли; КонецПроцедуры @@ -7643,17 +7551,6 @@ КонецФункции -Процедура ПриПодключенииККорреспонденту(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт - Если НЕ ЕстьАлгоритмМенеджераПланаОбмена("ПриПодключенииККорреспонденту", ИмяПланаОбмена) Тогда - Возврат; - ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ПланыОбмена[ИмяПланаОбмена].ПриПодключенииККорреспонденту(ВерсияКорреспондента); - -КонецПроцедуры - // Заполняет настройки для плана обмена, которые далее используются подсистемой обмена данными. // Параметры: // ИмяПланаОбмена - Строка - имя плана обмена. @@ -7710,31 +7607,6 @@ #КонецОбласти -#Область РаботаСПаролямиСинхронизацииДанных - -// Возвращает значения пароля синхронизации данных для заданного узла. -// Если пароля нет, то возвращается Неопределено. -// -// Возвращаемое значение: -// Строка, Неопределено - значения пароля синхронизации данных. -// -Функция ПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(УзелИнформационнойБазы); -КонецФункции - -// Возвращает признак того, что пароль синхронизации данных был задан пользователем. -// -Функция ПарольСинхронизацииДанныхЗадан(Знач УзелИнформационнойБазы) Экспорт - - Возврат ПарольСинхронизацииДанных(УзелИнформационнойБазы) <> Неопределено; - -КонецФункции - -#КонецОбласти - #Область КонтрольНеразделенныхДанных // Вызывается при проверке доступности неразделенных данных для записи. @@ -7782,7 +7654,7 @@ // Нет. // // Возвращаемое значение: -// СостоянияОбменовДанными - Структура - структура с данными последнего обмена для заданного узла информационной базы. +// Структура - структура с данными последнего обмена для заданного узла информационной базы. // Функция СостоянияОбменовДаннымиДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт @@ -7886,7 +7758,7 @@ // Нет. // // Возвращаемое значение: -// СостоянияОбменовДанными - Структура - структура с данными последнего обмена для заданного узла информационной базы. +// Структура - структура с данными последнего обмена для заданного узла информационной базы. // Функция СостоянияОбменовДанными(Знач УзелИнформационнойБазы, ДействиеПриОбмене) Экспорт @@ -7936,12 +7808,9 @@ // Получает массив всех планов обмена по которым выполняется обмен данными. // Наличие обмена с каким либо планом обмена определяется по наличию у этого плана обмена узлов кроме предопределенного. -// -// Параметры: -// Нет. // // Возвращаемое значение: -// МассивПлановОбмена - Массив - массив строк (имен) всех планов обмена по которым выполняется обмен данными. +// Массив из Строка - массив строк (имен) всех планов обмена по которым выполняется обмен данными. // Функция ПолучитьИспользуемыеПланыОбмена() Экспорт @@ -7963,12 +7832,9 @@ КонецФункции // Получает таблицу правил регистрации объектов из информационной базы. -// -// Параметры: -// Нет. // // Возвращаемое значение: -// ПравилаРегистрацииОбъектов - ТаблицаЗначений - таблица общих правил регистрации объектов для МРО. +// ТаблицаЗначений - таблица общих правил регистрации объектов для МРО. // Функция ПолучитьПравилаРегистрацииОбъектов() Экспорт @@ -8587,7 +8453,7 @@ // Структура - информация о расположении файла сообщения обмена (текущий формат). // - ДвоичныеДанные - сообщение обмена в информационной базе (устаревший формат). // -Функция СообщениеОбменаДаннымиИзГлавногоУзла() Экспорт +Функция СообщениеОбменаДаннымиИзГлавногоУзла() Возврат Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Получить().Получить(); @@ -8650,7 +8516,7 @@ Константы.КаталогСообщенийОбменаДаннымиДляWindows.СоздатьМенеджерЗначения().ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - РегистрыСведений.НастройкиТранспортаОбменаДанными.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); + Справочники.НастройкиТранспортаСообщенийОбмена.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); КонецЕсли; РегистрыСведений.ПравилаДляОбменаДанными.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); @@ -8702,7 +8568,7 @@ // ВнешнийМодуль- ЛюбаяСсылка - ссылка на внешний модуль // // Возвращаемое значение: -// Картинка. - Пиктограмма внешнего модуля +// Картинка. - пиктограмма внешнего модуля // Функция ПиктограммаВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт @@ -8733,394 +8599,37 @@ #Область ВыполнениеДействий -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, - ДействиеПриОбмене, - КоличествоЭлементовВТранзакции, - СообщениеДляСопоставленияДанных = Ложь) +// Выполнить обмен данными через файловый ресурс. +// +// Параметры: +// СтруктураНастроекОбмена - см. СтруктураНастроекОбменаБазовая +// +Процедура ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена) - УстановитьПривилегированныйРежим(Истина); - - // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = НастройкиОбменаДляВнешнегоСоединения( - УзелИнформационнойБазы, - ДействиеПриОбмене, - КоличествоЭлементовВТранзакции); - - ЗаписьЖурналаРегистрацииНачалаОбменаДанными(СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.Отказ Тогда - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецЕсли; - - СтрокаСообщенияОбОшибке = ""; - - // Получаем внешнее соединение для узла информационной базы. - ВнешнееСоединение = ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, - СтрокаСообщенияОбОшибке); - - Если ВнешнееСоединение = Неопределено Тогда - - // добавляем запись в ЖР - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецЕсли; - - // Получаем версию удаленной базы. - ВерсияБСППоВнешнемуСоединению = ВнешнееСоединение.СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); - ОбменСБСП20 = ОбщегоНазначенияКлиентСервер.СравнитьВерсии("2.1.1.10", ВерсияБСППоВнешнемуСоединению) > 0; - - // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ (ВНЕШНЕЕ СОЕДИНЕНИЕ) - Структура = Новый Структура("ИмяПланаОбмена, ИмяПланаОбменаКорреспондента, - |ТекущийУзелПланаОбменаКод, КоличествоЭлементовВТранзакции"); - - ЗаполнитьЗначенияСвойств(Структура, СтруктураНастроекОбмена); - - // Выполняем реверс значений перечисления. - ДействиеПриОбменеСтрокой = ?(ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных, - ОбщегоНазначения.ИмяЗначенияПеречисления(Перечисления.ДействияПриОбмене.ЗагрузкаДанных), - ОбщегоНазначения.ИмяЗначенияПеречисления(Перечисления.ДействияПриОбмене.ВыгрузкаДанных)); - // - - Структура.Вставить("ДействиеПриОбменеСтрокой", ДействиеПриОбменеСтрокой); - Структура.Вставить("РежимОтладки", Ложь); - Структура.Вставить("ИмяФайлаПротоколаОбмена", ""); - - ЭтоПланОбменаXDTO = ЭтоПланОбменаXDTO(УзелИнформационнойБазы); - Если ЭтоПланОбменаXDTO Тогда - // Проверка псевдонима предопределенного узла - ПсевдонимПредопределенногоУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); - ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[Структура.ИмяПланаОбменаКорреспондента]; - ПроверятьНаличиеУзлаВКорреспонденте = Истина; - Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда - // Надо проверить код узла в корреспонденте - он может быть уже перекодирован. - // Тогда псевдоним больше не нужен. - Если ПланОбменаМенеджер.НайтиПоКоду(ПсевдонимПредопределенногоУзла) <> ПланОбменаМенеджер.ПустаяСсылка() Тогда - Структура.ТекущийУзелПланаОбменаКод = ПсевдонимПредопределенногоУзла; - ПроверятьНаличиеУзлаВКорреспонденте = Ложь; - КонецЕсли; - КонецЕсли; - Если ПроверятьНаличиеУзлаВКорреспонденте Тогда - ПланОбменаСсылка = ПланОбменаМенеджер.НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); - Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда - // При необходимости запуск перехода на синхронизацию данных через универсальный формат. - ТекстСообщения = НСтр("ru = 'Необходим переход на синхронизацию данных через универсальный формат в базе-корреспонденте.'"); - ЗаписьЖурналаРегистрацииОбменаДанными(ТекстСообщения, СтруктураНастроекОбмена, Ложь); - - СтруктураПараметров = Новый Структура(); - СтруктураПараметров.Вставить("Код", Структура.ТекущийУзелПланаОбменаКод); - СтруктураПараметров.Вставить("ВариантНастройки", - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ВариантНастройки")); - СтруктураПараметров.Вставить("Ошибка", Ложь); - СтруктураПараметров.Вставить("СообщениеОбОшибке", ""); - - ЕстьОшибки = Ложь; - СтрокаСообщенияОбОшибке = ""; - РезультатПерехода = - ПланОбменаМенеджер.ПереходНаСинхронизациюЧерезУниверсальныйФорматВнешнееСоединение(СтруктураПараметров); - Если СтруктураПараметров.Ошибка Тогда - ЕстьОшибки = Истина; - НСтрока = НСтр("ru = 'Ошибка при переходе на синхронизацию данных через универсальный формат: %1. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, - СтруктураПараметров.СообщениеОбОшибке); - ИначеЕсли РезультатПерехода = Неопределено Тогда - ЕстьОшибки = Истина; - СтрокаСообщенияОбОшибке = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат не выполнен'"); - КонецЕсли; - Если ЕстьОшибки Тогда - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - Иначе - Сообщение = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат завершен успешно.'"); - ЗаписьЖурналаРегистрацииОбменаДанными(Сообщение, СтруктураНастроекОбмена, Ложь); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - СтруктураКорреспондента = ОбщегоНазначения.СкопироватьРекурсивно(Структура, Ложь); - СтруктураКорреспондента.ИмяПланаОбмена = Структура.ИмяПланаОбменаКорреспондента; - СтруктураКорреспондента.ИмяПланаОбменаКорреспондента = Структура.ИмяПланаОбмена; - - Попытка - СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(СтруктураКорреспондента); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - СтруктураНастроекОбмена, Истина); - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецПопытки; - - Если СтруктураНастроекОбменаВнешнееСоединение.Свойство("НастройкаСинхронизацииДанныхЗавершена") Тогда - Если Не СообщениеДляСопоставленияДанных - И СтруктураНастроекОбменаВнешнееСоединение.НастройкаСинхронизацииДанныхЗавершена = Ложь Тогда - - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и завершите в ней настройку синхронизации. - |Выполнение обмена данными отменено.'"), - СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазыНаименование); - ЗаписьЖурналаРегистрацииОбменаДанными(СообщениеОбОшибке, СтруктураНастроекОбмена, Истина); - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - - КонецЕсли; - КонецЕсли; - - Если СтруктураНастроекОбменаВнешнееСоединение.Свойство("ПолученоСообщениеДляСопоставленияДанных") Тогда - Если Не СообщениеДляСопоставленияДанных - И СтруктураНастроекОбменаВнешнееСоединение.ПолученоСообщениеДляСопоставленияДанных = Истина Тогда - - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и выполните загрузку сообщения для сопоставления данных. - |Выполнение обмена данными отменено.'"), - СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазыНаименование); - ЗаписьЖурналаРегистрацииОбменаДанными(СообщениеОбОшибке, СтруктураНастроекОбмена, Истина); - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - - КонецЕсли; - КонецЕсли; - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - СтруктураНастроекОбменаВнешнееСоединение.Вставить("ДатаНачала", ВнешнееСоединение.ТекущаяДатаСеанса()); - - ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ЗаписьЖурналаРегистрацииНачалаОбменаДанными(СтруктураНастроекОбменаВнешнееСоединение); - // ОБМЕН ДАННЫМИ - Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - Если НЕ ЭтоПланОбменаXDTO Тогда - // Получаем правила обмена из второй ИБ. - ПравилаКонвертацииОбъектов = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПравилаКонвертацииОбъектов(СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); - - Если ПравилаКонвертацииОбъектов = Неопределено Тогда - - // Правила обмена должны быть указаны. - НСтрока = НСтр("ru = 'Не заданы правила конвертации во второй информационной базе для плана обмена %1. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбменаВнешнееСоединение.ИмяПланаОбмена); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - Возврат; - КонецЕсли; - КонецЕсли; - - // Обработка для загрузки данных. - ОбработкаДляЗагрузкиДанных = СтруктураНастроекОбмена.ОбработкаОбменаДанными; - ОбработкаДляЗагрузкиДанных.ИмяФайлаОбмена = ""; - ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; - ОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции = (ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию <> 1); - ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; - - // Получаем инициализированную обработку для выгрузки данных. - Если ЭтоПланОбменаXDTO Тогда - ОбработкаОбменаДаннымиВнешнееСоединение = ВнешнееСоединение.Обработки.КонвертацияОбъектовXDTO.Создать(); - ОбработкаОбменаДаннымиВнешнееСоединение.РежимОбмена = "Выгрузка"; - Иначе - ОбработкаОбменаДаннымиВнешнееСоединение = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - ОбработкаОбменаДаннымиВнешнееСоединение.СохраненныеНастройки = ПравилаКонвертацииОбъектов; - ОбработкаОбменаДаннымиВнешнееСоединение.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Ложь; - ОбработкаОбменаДаннымиВнешнееСоединение.РежимОбмена = "Выгрузка"; - Попытка - ОбработкаОбменаДаннымиВнешнееСоединение.ВосстановитьПравилаИзВнутреннегоФормата(); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Возникла ошибка во второй информационной базе: %1'"), - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())), СтруктураНастроекОбмена, Истина); - - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецПопытки; - // Задаем узлы обмена. - ОбработкаОбменаДаннымиВнешнееСоединение.УзелДляФоновогоОбмена = Неопределено; - ОбработкаОбменаДаннымиВнешнееСоединение.НеВыгружатьОбъектыПоСсылкам = Истина; - ОбработкаОбменаДаннымиВнешнееСоединение.ИмяФайлаПравилОбмена = "1"; - ОбработкаОбменаДаннымиВнешнееСоединение.ВнешнееСоединение = Неопределено; - КонецЕсли; - - ОбработкаОбменаДаннымиВнешнееСоединение.УзелДляОбмена = СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы; - Если ОбработкаОбменаДаннымиВнешнееСоединение.Метаданные().Реквизиты.Найти("УстановитьБлокировкуУзлаПланаОбмена") <> Неопределено Тогда - - ОбработкаОбменаДаннымиВнешнееСоединение.УстановитьБлокировкуУзлаПланаОбмена = Истина; - - КонецЕсли; - - УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДаннымиВнешнееСоединение, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); - - Если НЕ ЭтоПланОбменаXDTO Тогда - ВерсияКонфигурацииПриемника = ""; - ВерсияИсточникаИзПравил = ""; - ТекстСообщения = ""; - ПараметрыВнешнегоСоединения = Новый Структура; - ПараметрыВнешнегоСоединения.Вставить("ВнешнееСоединение", ВнешнееСоединение); - ПараметрыВнешнегоСоединения.Вставить("ВерсияБСППоВнешнемуСоединению", ВерсияБСППоВнешнемуСоединению); - ПараметрыВнешнегоСоединения.Вставить("КлючСообщенияЖурналаРегистрации", СтруктураНастроекОбменаВнешнееСоединение.КлючСообщенияЖурналаРегистрации); - ПараметрыВнешнегоСоединения.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы); - - ПравилаКонвертацииОбъектов.Получить().Конвертация.Свойство("ВерсияКонфигурацииИсточника", ВерсияКонфигурацииПриемника); - ОбработкаДляЗагрузкиДанных.СохраненныеНастройки.Получить().Конвертация.Свойство("ВерсияКонфигурацииИсточника", ВерсияИсточникаИзПравил); - - Если РазличаютсяВерсииКорреспондента(СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, - ВерсияИсточникаИзПравил, ВерсияКонфигурацииПриемника, ТекстСообщения, ПараметрыВнешнегоСоединения) Тогда - - ОбработкаОбменаДаннымиВнешнееСоединение = Неопределено; - Возврат; - - КонецЕсли; - КонецЕсли; - // ВЫГРУЗКА (КОРРЕСПОНДЕНТ) - ЗАГРУЗКА (ЭТА БАЗА) - ОбработкаОбменаДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных); - - // Фиксируем состояние выполнения обмена данными. - СтруктураНастроекОбмена.РезультатВыполненияОбмена = ОбработкаДляЗагрузкиДанных.РезультатВыполненияОбмена(); - СтруктураНастроекОбмена.КоличествоОбъектовОбработано = ОбработкаДляЗагрузкиДанных.СчетчикЗагруженныхОбъектов(); - СтруктураНастроекОбменаВнешнееСоединение.РезультатВыполненияОбменаСтрокой = ОбработкаОбменаДаннымиВнешнееСоединение.РезультатВыполненияОбменаСтрокой(); - СтруктураНастроекОбменаВнешнееСоединение.КоличествоОбъектовОбработано = ОбработкаОбменаДаннымиВнешнееСоединение.СчетчикВыгруженныхОбъектов(); - СтруктураНастроекОбмена.СообщениеПриОбмене = ОбработкаДляЗагрузкиДанных.КомментарийПриЗагрузкеДанных; - СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = ОбработкаДляЗагрузкиДанных.СтрокаСообщенияОбОшибке(); - СтруктураНастроекОбменаВнешнееСоединение.СообщениеПриОбмене = ОбработкаОбменаДаннымиВнешнееСоединение.КомментарийПриВыгрузкеДанных; - СтруктураНастроекОбменаВнешнееСоединение.СтрокаСообщенияОбОшибке = ОбработкаОбменаДаннымиВнешнееСоединение.СтрокаСообщенияОбОшибке(); - - ОбработкаОбменаДаннымиВнешнееСоединение = Неопределено; - - ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда - - // Обработка для загрузки данных. - Если ЭтоПланОбменаXDTO Тогда - ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовXDTO.Создать(); - Иначе - ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; - КонецЕсли; - ОбработкаДляЗагрузкиДанных.РежимОбмена = "Загрузка"; - ОбработкаДляЗагрузкиДанных.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы; - - УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаДляЗагрузкиДанных, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); - - ЕстьПоддержкаСопоставления = Истина; - НастройкаСинхронизацииДанныхЗавершена = Истина; - ВерсииИнтерфейса = ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение); - - Если ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено - Или ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено Тогда - - СообщениеОбОшибке = ""; - ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6( - СтруктураНастроекОбмена.ИмяПланаОбмена, СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, СообщениеОбОшибке); - ПараметрыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыИнформационнойБазы); - Если ПараметрыКорреспондента.Свойство("ПоддерживаетсяСопоставлениеДанных") Тогда - ЕстьПоддержкаСопоставления = ПараметрыКорреспондента.ПоддерживаетсяСопоставлениеДанных; - КонецЕсли; - Если ПараметрыКорреспондента.Свойство("НастройкаСинхронизацииДанныхЗавершена") Тогда - НастройкаСинхронизацииДанныхЗавершена = ПараметрыКорреспондента.НастройкаСинхронизацииДанныхЗавершена; - КонецЕсли; - - КонецЕсли; - - Если СообщениеДляСопоставленияДанных - И (ЕстьПоддержкаСопоставления Или Не НастройкаСинхронизацииДанныхЗавершена) Тогда - ОбработкаДляЗагрузкиДанных.РежимЗагрузкиДанных = "ЗагрузкаСообщенияДляСопоставленияДанных"; - КонецЕсли; - - ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; - ОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции = (ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию <> 1); - - // Получаем инициализированную обработку для выгрузки данных. - ОбработкаОбменаДаннымиXML = СтруктураНастроекОбмена.ОбработкаОбменаДанными; //ОбработкаОбъект.КонвертацияОбъектовXDTO - ОбработкаОбменаДаннымиXML.ИмяФайлаОбмена = ""; - - Если Не ЭтоПланОбменаXDTO Тогда - - ОбработкаОбменаДаннымиXML.ВнешнееСоединение = ВнешнееСоединение; - ОбработкаОбменаДаннымиXML.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Истина; - - КонецЕсли; - - // ВЫГРУЗКА (ЭТА БАЗА) - ЗАГРУЗКА (КОРРЕСПОНДЕНТ) - ОбработкаОбменаДаннымиXML.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных); - - // Фиксируем состояние выполнения обмена данными. - СтруктураНастроекОбмена.РезультатВыполненияОбмена = ОбработкаОбменаДаннымиXML.РезультатВыполненияОбмена(); - СтруктураНастроекОбмена.КоличествоОбъектовОбработано = ОбработкаОбменаДаннымиXML.СчетчикВыгруженныхОбъектов(); - СтруктураНастроекОбменаВнешнееСоединение.РезультатВыполненияОбменаСтрокой = ОбработкаДляЗагрузкиДанных.РезультатВыполненияОбменаСтрокой(); - СтруктураНастроекОбменаВнешнееСоединение.КоличествоОбъектовОбработано = ОбработкаДляЗагрузкиДанных.СчетчикЗагруженныхОбъектов(); - СтруктураНастроекОбмена.СообщениеПриОбмене = ОбработкаОбменаДаннымиXML.КомментарийПриВыгрузкеДанных; - СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = ОбработкаОбменаДаннымиXML.СтрокаСообщенияОбОшибке(); - СтруктураНастроекОбменаВнешнееСоединение.СообщениеПриОбмене = ОбработкаДляЗагрузкиДанных.КомментарийПриЗагрузкеДанных; - СтруктураНастроекОбменаВнешнееСоединение.СтрокаСообщенияОбОшибке = ОбработкаДляЗагрузкиДанных.СтрокаСообщенияОбОшибке(); - ОбработкаДляЗагрузкиДанных = Неопределено; - - КонецЕсли; - - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - - ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбменаВнешнееСоединение); - - Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - - Отказ = Истина; - - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, Знач ТолькоПараметры = Ложь) + Транспорт = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда - ВыполнитьОбменДаннымиСВнешнейСистемойЗагрузкаДанных(СтруктураНастроекОбмена); - Возврат; - КонецЕсли; - - // {Обработчик: ПередЧтениемСообщенияОбмена} Начало + СообщениеОбмена = ""; СтандартнаяОбработка = Истина; ПередЧтениемСообщенияОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы, СообщениеОбмена, СтандартнаяОбработка); - // {Обработчик: ПередЧтениемСообщенияОбмена} Окончание Если СтандартнаяОбработка Тогда - - ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда + + Если Транспорт.ПолучитьДанные() Тогда - ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена); + СообщениеОбмена = Транспорт.СообщениеОбмена; - Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда - - СообщениеОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ИмяФайлаСообщенияОбмена(); - - КонецЕсли; + РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив( + СтруктураНастроекОбмена.УзелИнформационнойБазы, СообщениеОбмена); + Иначе + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; КонецЕсли; КонецЕсли; - + // Загрузка данных только при успешном получении сообщения обмена. Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда @@ -9130,6 +8639,7 @@ СохраненныйВариантНастройкиУзлаПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы)); Если СтруктураНастроекОбмена.ДополнительныеПараметры.Свойство("СообщениеДляСопоставленияДанных") + И СтруктураНастроекОбмена.ДополнительныеПараметры.СообщениеДляСопоставленияДанных И (ЕстьПоддержкаСопоставления Или Не НастройкаСинхронизацииЗавершена(СтруктураНастроекОбмена.УзелИнформационнойБазы)) Тогда @@ -9147,19 +8657,8 @@ СтандартнаяОбработка = Истина; Иначе - ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена, , ТолькоПараметры); - - // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало - СтандартнаяОбработка = Истина; - - ПослеЧтенияСообщенияОбмена( - СтруктураНастроекОбмена.УзелИнформационнойБазы, - СообщениеОбмена, - РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), - СтандартнаяОбработка, - Не ТолькоПараметры); - // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание - + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена); + КонецЕсли; КонецЕсли; @@ -9167,44 +8666,45 @@ // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало СтандартнаяОбработка = Истина; + ТолькоПараметры = СтруктураНастроекОбмена.ДополнительныеПараметры.Свойство("ТолькоПараметры") + И СтруктураНастроекОбмена.ДополнительныеПараметры.ТолькоПараметры; + ПослеЧтенияСообщенияОбмена( - СтруктураНастроекОбмена.УзелИнформационнойБазы, - СообщениеОбмена, - РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), - СтандартнаяОбработка, - Не ТолькоПараметры); - // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание + СтруктураНастроекОбмена.УзелИнформационнойБазы, + СообщениеОбмена, + РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), + СтандартнаяОбработка, + Не ТолькоПараметры); Если СтандартнаяОбработка Тогда - - ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); - + ТранспортСообщенийОбмена.Деинициализация(Транспорт); КонецЕсли; ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда - ВыполнитьОбменДаннымиСВнешнейСистемойВыгрузкаНастроекXDTO(СтруктураНастроекОбмена); - Возврат; + СообщениеДляСопоставленияДанных = СтруктураНастроекОбмена.ДополнительныеПараметры.Свойство("СообщениеДляСопоставленияДанных") + И СтруктураНастроекОбмена.ДополнительныеПараметры.СообщениеДляСопоставленияДанных; + + Если Не Транспорт.ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных) Тогда + + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; + КонецЕсли; - - ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); - - // выгрузка данных + Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда - ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ИмяФайлаСообщенияОбмена()); + СообщениеОбмена = Транспорт.СообщениеОбмена; + ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена); КонецЕсли; - // Отправка сообщения обмена только в случае успешной выгрузки данных. - Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - - ВыполнитьТранспортСообщенияОбменаОтправка(СтруктураНастроекОбмена); - + Если НЕ (РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) + И Транспорт.ОтправитьДанные(СообщениеДляСопоставленияДанных)) Тогда + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; + СтруктураНастроекОбмена.СтрокаСообщенияОбОшибке = Транспорт.СообщениеОбОшибке; КонецЕсли; - ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); + ТранспортСообщенийОбмена.Деинициализация(Транспорт); КонецЕсли; @@ -9241,23 +8741,8 @@ | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, | НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки КАК НомерСтроки, | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ВыполняемоеДействие, - | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, - | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | - | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.COM) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОбменЧерезВнешнееСоединение, - | - | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОбменЧерезВебСервис, - | - | ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОбменСВнешнейСистемой + | НастройкиВыполненияОбменаНастройкиОбмена.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы |ИЗ | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена |ГДЕ @@ -9284,8 +8769,7 @@ КонецЕсли; - Если Не НастройкаСинхронизацииЗавершена(Выборка.УзелИнформационнойБазы) - И Не Выборка.ОбменСВнешнейСистемой Тогда + Если Не НастройкаСинхронизацииЗавершена(Выборка.УзелИнформационнойБазы) Тогда Продолжить; @@ -9300,56 +8784,34 @@ Продолжить; КонецЕсли; + + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ + СтруктураНастроекОбмена = НастройкиОбменаДанными(Выборка.НастройкаВыполненияОбмена, Выборка.НомерСтроки); - Если Выборка.ОбменЧерезВнешнееСоединение Тогда + // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". + Если СтруктураНастроекОбмена.Отказ Тогда - ПроверитьВозможностьВнешнегоСоединения(); - - КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(Выборка.ВыполняемоеДействие); - - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(ОтказПоСтрокеСценария, - Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, КоличествоЭлементовВТранзакции); - - ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда - - ПараметрыОбмена = ПараметрыОбмена(); - ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; - ПараметрыОбмена.ИнтервалОжиданияНаСервере = 30; - - ОбменДаннымиВебСервис.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(ОтказПоСтрокеСценария, - Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, ПараметрыОбмена); + ОтказПоСтрокеСценария = Истина; Иначе - // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = НастройкиОбменаДанными(Выборка.НастройкаВыполненияОбмена, Выборка.НомерСтроки); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - Если СтруктураНастроекОбмена.Отказ Тогда - - ОтказПоСтрокеСценария = Истина; - - Иначе - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - - // Добавляем в ЖР информацию о процессе обмена данными. - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными по настройке %1'", ОбщегоНазначения.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - - // ОБМЕН ДАННЫМИ - ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена); - - ОтказПоСтрокеСценария = (РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) <> Истина); - - КонецЕсли; + // Добавляем в ЖР информацию о процессе обмена данными. + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными по настройке %1'", ОбщегоНазначения.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - // Фиксируем в ЖР лог по обмену данными. - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + // ОБМЕН ДАННЫМИ + ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена); + + ОтказПоСтрокеСценария = (РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) <> Истина); КонецЕсли; + // Фиксируем в ЖР лог по обмену данными. + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + ПослеВыполненияОбменов(Выборка.УзелИнформационнойБазы, ОтказПоСтрокеСценария); Если ОтказПоСтрокеСценария Тогда @@ -9377,19 +8839,21 @@ ВызватьИсключение НСтр("ru = 'Не задан сценарий обмена данными.'"); КонецЕсли; + + АктуализироватьРегламентныеЗадания(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Код", КодСценарияОбмена); Запрос.Текст = - "ВЫБРАТЬ - | СценарииОбменовДанными.Ссылка КАК Ссылка - |ИЗ - | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными - |ГДЕ - | СценарииОбменовДанными.Код = &Код - | И НЕ СценарииОбменовДанными.ПометкаУдаления - |"; + "ВЫБРАТЬ + | СценарииОбменовДанными.Ссылка КАК Ссылка + |ИЗ + | Справочник.СценарииОбменовДанными КАК СценарииОбменовДанными + |ГДЕ + | СценарииОбменовДанными.Код = &Код + | И НЕ СценарииОбменовДанными.ПометкаУдаления + |"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда @@ -9442,62 +8906,30 @@ ПередВыполнениемОбменов(УзелИнформационнойБазы, Отказ); Если Отказ = Истина Тогда - Возврат; - КонецЕсли; ДействиеЗагрузка = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; ДействиеВыгрузка = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; Если ДополнительныеПараметры = Неопределено Тогда - ДополнительныеПараметры = Новый Структура; - КонецЕсли; - // Обмен через внешнее соединение. - Если ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - ПроверитьВозможностьВнешнегоСоединения(); - - Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, - УзелИнформационнойБазы, ДействиеЗагрузка, Неопределено); - КонецЕсли; - - Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, - УзелИнформационнойБазы, ДействиеВыгрузка, Неопределено, ПараметрыОбмена.СообщениеДляСопоставленияДанных); - КонецЕсли; - - ИначеЕсли ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда // Обмен через Web-сервис - - Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ОбменДаннымиВебСервис.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, - УзелИнформационнойБазы, ДействиеЗагрузка, ПараметрыОбмена); - КонецЕсли; - - Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда - ОбменДаннымиВебСервис.ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(Отказ, - УзелИнформационнойБазы, ДействиеВыгрузка, ПараметрыОбмена); - КонецЕсли; - - Иначе // Обмен через обычные каналы связи. - - ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; - ВидТранспортаСообщенийОбмена = ПараметрыОбмена.ВидТранспортаСообщенийОбмена; - - Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, - ДействиеЗагрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); - КонецЕсли; - - Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда - ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, - ДействиеВыгрузка, ВидТранспортаСообщенийОбмена, ТолькоПараметры, ДополнительныеПараметры); - КонецЕсли; - + ДополнительныеПараметры.Вставить("ТолькоПараметры", ПараметрыОбмена.ТолькоПараметры); + ДополнительныеПараметры.Вставить("СообщениеДляСопоставленияДанных", ПараметрыОбмена.СообщениеДляСопоставленияДанных); + ДополнительныеПараметры.Вставить("ДанныеАутентификации", ПараметрыОбмена.ДанныеАутентификации); + + ИдентификаторТранспорта = ПараметрыОбмена.ИдентификаторТранспорта; + + Если ПараметрыОбмена.ВыполнятьЗагрузку Тогда + ВыполнитьДействиеОбмена(Отказ, УзелИнформационнойБазы, + ДействиеЗагрузка, ИдентификаторТранспорта, ДополнительныеПараметры); + КонецЕсли; + + Если ПараметрыОбмена.ВыполнятьВыгрузку Тогда + ВыполнитьДействиеОбмена(Отказ, УзелИнформационнойБазы, + ДействиеВыгрузка, ИдентификаторТранспорта, ДополнительныеПараметры); КонецЕсли; ПослеВыполненияОбменов(УзелИнформационнойБазы, Отказ); @@ -9508,70 +8940,6 @@ #Область ДляРаботыЧерезВнешнееСоединение_СлужебныеПроцедурыИФункции -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Адрес) Экспорт - - ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла("xml"); - - ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); - - ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; - ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); - - Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайлаСообщенияОбмена)); - - УдалитьФайлы(ПолноеИмяФайлаСообщенияОбмена); - -КонецПроцедуры - -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(Знач ИмяПланаОбмена, - Знач КодУзлаИнформационнойБазы, - Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт - - ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); - - ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; - ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); - -КонецПроцедуры - -Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт - - ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); - - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; - ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; - ПараметрыОбменаДанными.СообщениеОбмена = СообщениеОбмена; - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); - - СообщениеОбмена = ПараметрыОбменаДанными.СообщениеОбмена; - -КонецПроцедуры - -Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт - - ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); - - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - ПараметрыОбменаДанными.ИмяПланаОбмена = ИмяПланаОбмена; - ПараметрыОбменаДанными.КодУзлаИнформационнойБазы = КодУзлаИнформационнойБазы; - ПараметрыОбменаДанными.СообщениеОбмена = СообщениеОбмена; - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); - - СообщениеОбмена = ПараметрыОбменаДанными.СообщениеОбмена; - -КонецПроцедуры - Процедура ЗафиксироватьЗавершениеОбменаЧерезВнешнееСоединение(СтруктураНастроекОбмена) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -9580,6 +8948,46 @@ КонецПроцедуры +// Структура настроек обмена через внешнее соединение. +// +// Параметры: +// Структура - Структура: +// *ИмяПланаОбмена - Строка +// *ИмяПланаОбменаКорреспондента - Строка +// *ТекущийУзелПланаОбменаКод - Строка +// *КоличествоЭлементовВТранзакции - Число +// *ДействиеПриОбменеСтрокой - Строка - имя значения перечисления ДействияПриОбмене +// *РежимОтладки - Булево +// *ИмяФайлаПротоколаОбмена - Строка +// +// Возвращаемое значение: +// Структура: +// * ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +// * РежимОтладки - Булево +// * УзелИнформационнойБазы - ПланОбменаСсылка +// * УзелИнформационнойБазыНаименование - Строка +// * КлючСообщенияЖурналаРегистрации - Строка +// * РезультатВыполненияОбмена - Неопределено +// * РезультатВыполненияОбменаСтрокой - Строка +// * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене +// * ОтладкаОбработчиковВыгрузки - Булево +// * ОтладкаОбработчиковЗагрузки - Булево +// * ИмяФайлаВнешнейОбработкиОтладкиВыгрузки - Строка +// * ИмяФайлаВнешнейОбработкиОтладкиЗагрузки - Строка +// * РежимПротоколированияОбменаДанными - Булево +// * ИмяФайлаПротоколаОбмена - Строка +// * ПродолжитьПриОшибке - Булево +// * КоличествоОбъектовОбработано - Число +// * ДатаНачала - Неопределено +// * ДатаОкончания - Неопределено +// * СообщениеПриОбмене - Строка +// * СтрокаСообщенияОбОшибке - Строка +// * КоличествоЭлементовВТранзакции - Число +// * ЭтоОбменВРИБ - Булево +// * НастройкаСинхронизацииДанныхЗавершена - Булево +// * ПолученоСообщениеДляСопоставленияДанных - Булево +// * ПоддерживаетсяСопоставлениеДанных - Булево +// Функция СтруктураНастроекОбменаЧерезВнешнееСоединение(Структура) Экспорт ПроверитьИспользованиеОбменаДанными(); @@ -9648,114 +9056,7 @@ КонецФункции -Процедура ВыполнитьОбменДаннымиСВнешнейСистемойЗагрузкаДанных(СтруктураНастроекОбмена) - - ИмяВременногоКаталога = СоздатьВременныйКаталогСообщенийОбмена(); - - ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - ИмяВременногоКаталога, УникальноеИмяФайлаСообщенияОбмена()); - - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; // ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, ОбработкаОбъект.ТранспортСообщенийОбменаFILE, ОбработкаОбъект.ТранспортСообщенийОбменаFTP, ОбработкаОбъект.ТранспортСообщенийОбменаВнешняяСистема - - СообщениеПолучено = Ложь; - Попытка - СообщениеПолучено = ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение(ИмяФайлаСообщения); - Исключение - Информация = ИнформацияОбОшибке(); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена, Истина); - КонецПопытки; - - СообщениеОбработано = Ложь; - ВыполнитьОбработчикПослеЗагрузки = Ложь; - - Если СообщениеПолучено - И СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда - - ВыполнитьОбработчикПослеЗагрузки = Истина; - - ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ИмяФайлаСообщения); - - СообщениеОбработано = РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена); - - КонецЕсли; - - Попытка - УдалитьФайлы(ИмяВременногоКаталога); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена); - КонецПопытки; - - НастройкаЗавершена = НастройкаСинхронизацииЗавершена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - Если ВыполнитьОбработчикПослеЗагрузки Тогда - ЕстьСледующееСообщение = Ложь; - Попытка - ОбработкаТранспортаСообщенийОбмена.ПослеОбработкиПолученногоСообщения(СообщениеОбработано, ЕстьСледующееСообщение); - Исключение - Информация = ИнформацияОбОшибке(); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена, Истина); - ЕстьСледующееСообщение = Ложь; - КонецПопытки; - - Если СообщениеОбработано - И Не НастройкаЗавершена Тогда - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - Если ЕстьАлгоритмМенеджераПланаОбмена("ПередНастройкойСинхронизацииДанных", ИмяПланаОбмена) Тогда - - Контекст = Новый Структура; - Контекст.Вставить("Корреспондент", СтруктураНастроекОбмена.УзелИнформационнойБазы); - Контекст.Вставить("ИдентификаторНастройки", СохраненныйВариантНастройкиУзлаПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы)); - Контекст.Вставить("НачальнаяНастройка", Не НастройкаЗавершена); - - ИмяФормыПомощника = ""; - - ПланыОбмена[ИмяПланаОбмена].ПередНастройкойСинхронизацииДанных(Контекст, НастройкаЗавершена, ИмяФормыПомощника); - - Если НастройкаЗавершена Тогда - ЗавершитьНастройкуСинхронизацииДанных(СтруктураНастроекОбмена.УзелИнформационнойБазы); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Если ЕстьСледующееСообщение И НастройкаЗавершена Тогда - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - ВыполнитьОбменДаннымиСВнешнейСистемойЗагрузкаДанных(СтруктураНастроекОбмена); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьОбменДаннымиСВнешнейСистемойВыгрузкаНастроекXDTO(СтруктураНастроекОбмена) - - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; // ОбработкаОбъект.ТранспортСообщенийОбменаВнешняяСистема - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - НастройкиXDTO = Новый Структура; - НастройкиXDTO.Вставить("ФорматОбмена", - ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена")); - НастройкиXDTO.Вставить("ПоддерживаемыеВерсии", - ОбменДаннымиXDTOСервер.ВерсииФорматаОбменаМассив(СтруктураНастроекОбмена.УзелИнформационнойБазы)); - НастройкиXDTO.Вставить("ПоддерживаемыеОбъекты", - ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, , СтруктураНастроекОбмена.УзелИнформационнойБазы)); - - Попытка - ОбработкаТранспортаСообщенийОбмена.ОтправитьНастройкиXDTO(НастройкиXDTO); - Исключение - Информация = ИнформацияОбОшибке(); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения; - ЗаписьЖурналаРегистрацииОбменаДанными(ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация), СтруктураНастроекОбмена, Истина); - КонецПопытки; - -КонецПроцедуры - -Процедура ПередЧтениемСообщенияОбмена(Знач Получатель, СообщениеОбмена, СтандартнаяОбработка) Экспорт +Процедура ПередЧтениемСообщенияОбмена(Знач Получатель, СообщениеОбмена, СтандартнаяОбработка) Если ЭтоПодчиненныйУзелРИБ() И ТипЗнч(ГлавныйУзел()) = ТипЗнч(Получатель) Тогда @@ -9792,7 +9093,7 @@ КонецПроцедуры Процедура ПослеЧтенияСообщенияОбмена(Знач Получатель, Знач СообщениеОбмена, Знач СообщениеПрочитано, - СтандартнаяОбработка, Знач УдалитьСообщение = Истина) Экспорт + СтандартнаяОбработка, Знач УдалитьСообщение = Истина) Если ОбменДаннымиСлужебный.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРасширений") Тогда Возврат; @@ -9843,7 +9144,7 @@ КонецЕсли; - Если ОбновитьСообщениеВКэше Тогда + Если ОбновитьСообщениеВКэше И ЗначениеЗаполнено(СообщениеОбмена) Тогда СтароеСообщение = СообщениеОбменаДаннымиИзГлавногоУзла(); @@ -9889,72 +9190,9 @@ // Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. // -// Параметры: -// // Возвращаемое значение: // Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. // -Функция НастройкиОбменаДляВнешнегоСоединения(УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции) - - // Возвращаемое значение функции. - СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); - - СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; - СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; - СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); - - СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); - - СтруктураНастроекОбмена.УзелИнформационнойБазыКод = ИдентификаторУзлаКорреспондентаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; - - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - Если КоличествоЭлементовВТранзакции = Неопределено Тогда - КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); - КонецЕсли; - - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакции; - - // ВЫЧИСЛЯЕМЫЕ ЗНАЧЕНИЯ - СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - - СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - СтруктураНастроекОбмена.ИмяПланаОбменаКорреспондента = - ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ИдентификаторЭтогоУзлаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - // Получаем ключ сообщения для ЖР. - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); - - СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; - - УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); - - // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. - ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); - - // Если настройки содержат ошибки, то выходим. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат СтруктураНастроекОбмена; - КонецЕсли; - - // Инициализируем обработку обмена данными. - ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); - - Возврат СтруктураНастроекОбмена; -КонецФункции - -// Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. -// -// Параметры: -// -// Возвращаемое значение: -// СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. -// Функция НастройкиОбменаДанными(НастройкаВыполненияОбмена, НомерСтроки) // Возвращаемое значение функции. @@ -9994,6 +9232,13 @@ КонецФункции // Получает структуру настроек транспорта для выполнения обмена данными. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел плана обмена +// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена +// +// Возвращаемое значение: +// см. СтруктураНастроекОбменаБазовая // Функция НастройкиТранспортаОбмена(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) Экспорт @@ -10004,7 +9249,7 @@ СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; СтруктураНастроекОбмена.ВидТранспортаОбмена = ВидТранспортаСообщенийОбмена; - ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, Истина); + ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена); // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); @@ -10038,27 +9283,27 @@ Процедура ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки) ТекстЗапроса = " - |ВЫБРАТЬ - | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы.Код КАК УзелИнформационнойБазыКод, - | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, - | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ДействиеПриОбмене, - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка.Наименование КАК НастройкаВыполненияОбменаНаименование, - | ВЫБОР - | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ПроизводитьЗагрузкуДанных, - | ВЫБОР - | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ПроизводитьВыгрузкуДанных - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена - |ГДЕ - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &НастройкаВыполненияОбмена - | И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки - |"; + |ВЫБРАТЬ + | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы.Код КАК УзелИнформационнойБазыКод, + | НастройкиВыполненияОбменаНастройкиОбмена.ИдентификаторТранспорта КАК ИдентификаторТранспорта, + | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ДействиеПриОбмене, + | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, + | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка.Наименование КАК НастройкаВыполненияОбменаНаименование, + | ВЫБОР + | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПроизводитьЗагрузкуДанных, + | ВЫБОР + | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПроизводитьВыгрузкуДанных + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена + |ГДЕ + | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &НастройкаВыполненияОбмена + | И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки + |"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -10086,29 +9331,25 @@ СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов = ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(СтруктураНастроекОбмена.УзелИнформационнойБазы); - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, "Код"); + ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); - СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ТекущийУзелПланаОбмена; + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийУзелПланаОбмена, "Код"); // Получаем ключ сообщения для ЖР. СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = КлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаСообщениями(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); - СтруктураНастроекОбмена.НастройкиТранспорта = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(СтруктураНастроекОбмена.УзелИнформационнойБазы); - Иначе - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); + СтруктураНастроекОбмена.НастройкиТранспорта = + МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(СтруктураНастроекОбмена.УзелИнформационнойБазы); КонецЕсли; СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); КонецПроцедуры -Процедура ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы( - СтруктураНастроекОбмена, - ИспользоватьНастройкиТранспорта) +Процедура ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена) СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); @@ -10120,38 +9361,8 @@ МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); СтруктураНастроекОбмена.НастройкиТранспорта = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS( СтруктураНастроекОбмена.УзелИнформационнойБазы); - Иначе - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); КонецЕсли; - - Если СтруктураНастроекОбмена.НастройкиТранспорта <> Неопределено Тогда - - Если ИспользоватьНастройкиТранспорта Тогда - // Если не указан вид транспорта, то используем значение по умолчанию. - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Неопределено Тогда - СтруктураНастроекОбмена.ВидТранспортаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонецЕсли; - - // Если вид транспорта не задан, то используем транспорт FILE. - Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда - - СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - - КонецЕсли; - - СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); - - КонецЕсли; - - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); - - Если СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("WSИспользоватьПередачуБольшогоОбъемаДанных") Тогда - СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных = СтруктураНастроекОбмена.НастройкиТранспорта.WSИспользоватьПередачуБольшогоОбъемаДанных; - КонецЕсли; - - КонецЕсли; - // ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ СтруктураНастроекОбмена.НастройкаВыполненияОбмена = Неопределено; СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование = ""; @@ -10175,124 +9386,6 @@ КонецПроцедуры -// Структура настроек обмена базовая. -// -// Возвращаемое значение: -// Структура: -// * ДатаНачала - Дата -// * ДатаОкончания - Дата -// * НомерСтроки - Число. -// * НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника, -// по значениям реквизитов которого будет выполнен обмен данными. -// * НастройкаВыполненияОбменаНаименование - Строка - наименование настройки выполнения обмена. -// * УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого выполняется действие обмена данными. -// * УзелИнформационнойБазыКод - Строка. -// * УзелИнформационнойБазыНаименование - Строка. -// * ВидТранспортаОбмена - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - вид транспорта, -// который будет использоваться в процессе обмена данными. -// * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. -// * КоличествоЭлементовВТранзакции - Число. -// * ПроизводитьЗагрузкуДанных - Булево. -// * ПроизводитьВыгрузкуДанных - Булево. -// * ИспользоватьПередачуБольшогоОбъемаДанных - Булево. -// * Отказ - Булево. -// * ЭтоОбменВРИБ - Булево. -// * ОбработкаОбменаДанными - ОбработкаОбъект.КонвертацияОбъектовXDTO. -// - ОбработкаОбъект.КонвертацияОбъектовИнформационныхБаз. -// - ОбработкаОбъект.КонвертацияОбъектовРаспределенныхИнформационныхБаз. -// * ОбработкаТранспортаСообщенийОбмена - ОбработкаМенеджер. -// * ИмяПланаОбмена - Строка. -// * ТекущийУзелПланаОбмена - ПланОбменаСсылка. -// * ТекущийУзелПланаОбменаКод - ПланОбменаСсылка. -// * ОбменПоПравиламКонвертацииОбъектов - Булево. -// * НаличиеПравилКонвертацииОбязательно - Булево. -// * ИмяОбработкиТранспортаСообщенийОбмена - Строка. -// * КлючСообщенияЖурналаРегистрации - Строка. -// * НастройкиТранспорта - Произвольный - сохраненные настройки транспорта сообщений обмена внешней системы. -// * ПравилаКонвертацииОбъектов - ХранилищеЗначения - зачитанные правила конвертации объектов. -// - Неопределено - если правила конвертации не были загружены в базу для -// * ПравилаЗагружены - Булево. -// * ОтладкаОбработчиковВыгрузки - Булево. -// * ОтладкаОбработчиковЗагрузки - Булево. -// * ИмяФайлаВнешнейОбработкиОтладкиВыгрузки - Строка. -// * ИмяФайлаВнешнейОбработкиОтладкиЗагрузки - Строка. -// * РежимПротоколированияОбменаДанными - Булево. -// * ИмяФайлаПротоколаОбмена - Строка. -// * ПродолжитьПриОшибке - Булево. -// * ДополнительныеПараметры - Структура. -// * РезультатВыполненияОбмена - ПеречислениеСсылка.РезультатыВыполненияОбмена. -// * ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. -// * КоличествоОбъектовОбработано - Число. -// * СообщениеПриОбмене - Строка. -// * СтрокаСообщенияОбОшибке - Строка. -// -Функция СтруктураНастроекОбменаБазовая() - - СтруктураНастроекОбмена = Новый Структура; - - // Структура настроек по полям запроса. - - СтруктураНастроекОбмена.Вставить("ДатаНачала", ТекущаяДатаСеанса()); - СтруктураНастроекОбмена.Вставить("ДатаОкончания"); - - СтруктураНастроекОбмена.Вставить("НомерСтроки"); - СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбмена"); - СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбменаНаименование"); - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы"); - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыКод", ""); - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыНаименование", ""); - СтруктураНастроекОбмена.Вставить("ВидТранспортаОбмена"); - СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); - СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции", 1); // На каждый элемент отдельная транзакция. - СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных", Ложь); - СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных", Ложь); - СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Истина); - - // Структура настроек дополнительная. - СтруктураНастроекОбмена.Вставить("Отказ", Ложь); - СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", Ложь); - - СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными"); - СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена"); - - СтруктураНастроекОбмена.Вставить("ИмяПланаОбмена"); - СтруктураНастроекОбмена.Вставить("ИмяПланаОбменаКорреспондента"); - СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбмена"); - СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбменаКод"); - - СтруктураНастроекОбмена.Вставить("ОбменПоПравиламКонвертацииОбъектов", Ложь); - СтруктураНастроекОбмена.Вставить("НаличиеПравилКонвертацииОбязательно", Истина); - - СтруктураНастроекОбмена.Вставить("ИмяОбработкиТранспортаСообщенийОбмена"); - - СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации"); - - СтруктураНастроекОбмена.Вставить("НастройкиТранспорта"); - - СтруктураНастроекОбмена.Вставить("ПравилаКонвертацииОбъектов"); - СтруктураНастроекОбмена.Вставить("ПравилаЗагружены", Ложь); - - СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковВыгрузки ", Ложь); - СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковЗагрузки", Ложь); - СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки", ""); - СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиЗагрузки", ""); - СтруктураНастроекОбмена.Вставить("РежимПротоколированияОбменаДанными", Ложь); - СтруктураНастроекОбмена.Вставить("ИмяФайлаПротоколаОбмена", ""); - СтруктураНастроекОбмена.Вставить("ПродолжитьПриОшибке", Ложь); - - // Структура для передачи произвольных дополнительных параметров. - СтруктураНастроекОбмена.Вставить("ДополнительныеПараметры", Новый Структура); - - // Структура для регистрации событий в ЖР. - СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена"); - СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); - СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); - СтруктураНастроекОбмена.Вставить("СообщениеПриОбмене", ""); - СтруктураНастроекОбмена.Вставить("СтрокаСообщенияОбОшибке", ""); - - Возврат СтруктураНастроекОбмена; -КонецФункции - Процедура ВыполнитьПроверкуОсновныхПолейСтруктурыНастроекОбмена(СтруктураНастроекОбмена) Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда @@ -10304,7 +9397,7 @@ ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда + ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ИдентификаторТранспорта) Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", ОбщегоНазначения.КодОсновногоЯзыка()); @@ -10324,94 +9417,6 @@ КонецПроцедуры -Процедура ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта = Истина) - - Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда - - // Узел информационной базы не должен быть пустым. - СтрокаСообщенияОбОшибке = НСтр( - "ru = 'Не задан узел информационной базы, с которой нужно производить обмен информацией. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли ИспользоватьНастройкиТранспорта И НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "ПометкаУдаления") Тогда - - // Узел информационной базы не должен быть помечен на удаление. - СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел информационной базы помечен на удаление. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.УзелИнформационнойБазы = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена Тогда - - // Сами с собой не обмениваемся. - СтрокаСообщенияОбОшибке = НСтр( - "ru = 'Нельзя организовать обмен данными с текущим узлом информационной базы. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли ПустаяСтрока(СтруктураНастроекОбмена.УзелИнформационнойБазыКод) - ИЛИ ПустаяСтрока(СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод) Тогда - - // У узлов участвующих в обмене должен быть не пустой код. - СтрокаСообщенияОбОшибке = НСтр("ru = 'Один из узлов обмена имеет пустой код. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки Тогда - - ФайлОбработкиВыгрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); - - Если Не ФайлОбработкиВыгрузки.Существует() Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки выгрузки не существует. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - КонецЕсли; - - ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки Тогда - - ФайлОбработкиЗагрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); - - Если Не ФайлОбработкиЗагрузки.Существует() Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки загрузки не существует. Обмен отменен.'", - ОбщегоНазначения.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - Процедура ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена) // Если настройки содержат ошибки, то не производим инициализацию. @@ -10431,68 +9436,25 @@ КонецПроцедуры -Процедура ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена) - - Перем ОбработкаОбменаДанными; - - // Если настройки содержат ошибки, то не производим инициализацию. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат; - КонецЕсли; - - Если СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда - - ОбработкаОбменаДанными = ОбработкаОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - - ОбработкаОбменаДанными = ОбработкаОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена); - - КонецЕсли; - - СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными", ОбработкаОбменаДанными); - -КонецПроцедуры - Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена) - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда - ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбменаСВнешнейСистемой(СтруктураНастроекОбмена); - Возврат; - КонецЕсли; + ДанныеАутентификации = Неопределено; + СтруктураНастроекОбмена.ДополнительныеПараметры.Свойство("ДанныеАутентификации", ДанныеАутентификации); - // Создаем обработку транспорта. - ОбработкаТранспортаСообщенийОбмена = Обработки[СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена].Создать(); + Параметры = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + Параметры.Корреспондент = СтруктураНастроекОбмена.УзелИнформационнойБазы; + Параметры.ИдентификаторТранспорта = СтруктураНастроекОбмена.ИдентификаторТранспорта; + Параметры.ДанныеАутентификации = ДанныеАутентификации; - ЭтоИсходящееСообщение = СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных; + Транспорт = ТранспортСообщенийОбмена.Инициализация(Параметры); + + СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена", Транспорт); - Транслитерация = Неопределено; - СловарьНастроек = Новый Соответствие; - СловарьНастроек.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE, "FILEТранслитерироватьИменаФайловСообщенийОбмена"); - СловарьНастроек.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL, "EMAILТранслитерироватьИменаФайловСообщенийОбмена"); - СловарьНастроек.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP, "FTPТранслитерироватьИменаФайловСообщенийОбмена"); - - ИмяСвойстваТранслитерация = СловарьНастроек.Получить(СтруктураНастроекОбмена.ВидТранспортаОбмена); - Если ЗначениеЗаполнено(ИмяСвойстваТранслитерация) Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство(ИмяСвойстваТранслитерация, Транслитерация); - КонецЕсли; - - Транслитерация = ?(Транслитерация = Неопределено, Ложь, Транслитерация); - - // Заполняем общие реквизиты, одинаковые для всех обработок транспорта. - ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ШаблонИмениФайлаСообщения( - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта( СтруктураНастроекОбмена.УзелИнформационнойБазы, - ЭтоИсходящееСообщение, - Транслитерация); + СтруктураНастроекОбмена.ИдентификаторТранспорта); - // Заполняем настойки транспорта, различные для каждой обработки транспорта. - ЗаполнитьЗначенияСвойств(ОбработкаТранспортаСообщенийОбмена, СтруктураНастроекОбмена.НастройкиТранспорта); - - // Инициализируем транспорт - ОбработкаТранспортаСообщенийОбмена.Инициализация(); - - СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена", ОбработкаТранспортаСообщенийОбмена); + СтруктураНастроекОбмена.Вставить("НастройкиТранспорта", НастройкиТранспорта); КонецПроцедуры @@ -10547,24 +9509,6 @@ КонецФункции -Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена, ОбменСБСП20 = Ложь) - - ОбработкаОбменаДанными.ДописыватьДанныеВПротоколОбмена = Ложь; - ОбработкаОбменаДанными.ВыгружатьТолькоРазрешенные = Ложь; - - ОбработкаОбменаДанными.ИспользоватьТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции <> 1; - ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; - - ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; - - Если Не ОбменСБСП20 Тогда - - УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - - КонецЕсли; - -КонецПроцедуры - Процедура УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) ПравилаКонвертацииОбъектов = РегистрыСведений.ПравилаДляОбменаДанными.ЗачитанныеПравилаКонвертацииОбъектов(СтруктураНастроекОбмена.ИмяПланаОбмена); @@ -10627,83 +9571,6 @@ КонецПроцедуры -// Считывает настройки отладки из ИБ и устанавливает их для структуры обмена. -// -Процедура УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена, ЭтоВнешнееСоединение = Ложь) - - ТекстЗапроса = "ВЫБРАТЬ - | ВЫБОР - | КОГДА &ПроизводитьВыгрузку - | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиВыгрузки - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОтладкаОбработчиковВыгрузки, - | ВЫБОР - | КОГДА &ПроизводитьВыгрузку - | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки - | ИНАЧЕ """" - | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиВыгрузки, - | ВЫБОР - | КОГДА &ПроизводитьЗагрузку - | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиЗагрузки - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОтладкаОбработчиковЗагрузки, - | ВЫБОР - | КОГДА &ПроизводитьЗагрузку - | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки - | ИНАЧЕ """" - | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиЗагрузки, - | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными КАК РежимПротоколированияОбменаДанными, - | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена КАК ИмяФайлаПротоколаОбмена, - | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке КАК ПродолжитьПриОшибке - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.РежимОтладки"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - ПроизводитьВыгрузкуДанных = Ложь; - Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьВыгрузкуДанных", ПроизводитьВыгрузкуДанных) Тогда - ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - КонецЕсли; - - ПроизводитьЗагрузкуДанных = Ложь; - Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьЗагрузкуДанных", ПроизводитьЗагрузкуДанных) Тогда - ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - КонецЕсли; - - Запрос.УстановитьПараметр("ИмяПланаОбмена", СтруктураНастроекОбмена.ИмяПланаОбмена); - Запрос.УстановитьПараметр("ПроизводитьВыгрузку", ПроизводитьВыгрузкуДанных); - Запрос.УстановитьПараметр("ПроизводитьЗагрузку", ПроизводитьЗагрузкуДанных); - - ИмяФайлаПротокола = ""; - Если ЭтоВнешнееСоединение И СтруктураНастроекОбмена.Свойство("ИмяФайлаПротоколаОбмена", ИмяФайлаПротокола) - И Не ПустаяСтрока(ИмяФайлаПротокола) Тогда - - СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = ДобавитьЛитералКИмениФайла(ИмяФайлаПротокола, "ВнешнееСоединение") - - КонецЕсли; - - Если Не ОбщегоНазначения.РазделениеВключено() Тогда - - Результат = Запрос.Выполнить(); - - Если Не Результат.Пустой() Тогда - - ТаблицаНастроек = Результат.Выгрузить(); - СтрокаТаблицы = ТаблицаНастроек[0]; - - ЗаполнитьЗначенияСвойств(СтруктураНастроекОбмена, СтрокаТаблицы); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - // Считывает настройки отладки из ИБ и устанавливает их для структуры настроек обмена. // Процедура УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена) @@ -10781,58 +9648,6 @@ КонецПроцедуры -Функция ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение, Транслитерация = Ложь, ИспользоватьВиртуальныйКодУзлаПриПолучении = Ложь) Экспорт - - Если ЭтоИсходящееСообщение Тогда - КодОтправителя = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); - КодПолучателя = ИдентификаторУзлаКорреспондентаДляОбмена(УзелИнформационнойБазы); - Иначе - КодОтправителя = ИдентификаторУзлаКорреспондентаДляОбмена(УзелИнформационнойБазы); - КодПолучателя = ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); - КонецЕсли; - - Если ЭтоИсходящееСообщение Или ИспользоватьВиртуальныйКодУзлаПриПолучении Тогда - // Обмен с корреспондентом, который не знаком с новым кодом предопределенного узла - - // при формировании имени файла сообщения обмена вместо кода предопределенного узла используется код из регистра. - ПсевдонимПредопределенногоУзла = ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); - Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда - Если ЭтоИсходящееСообщение Тогда - КодОтправителя = ПсевдонимПредопределенногоУзла; - Иначе - КодПолучателя = ПсевдонимПредопределенногоУзла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - ИмяФайлаСообщения = ИмяФайлаСообщенияОбмена(КодОтправителя, КодПолучателя, ЭтоИсходящееСообщение); - - // Учитываем настройку транслитерации для узла плана обмена. - Если Транслитерация Тогда - ИмяФайлаСообщения = СтроковыеФункции.СтрокаЛатиницей(ИмяФайлаСообщения); - КонецЕсли; - - Возврат ИмяФайлаСообщения; - -КонецФункции - -Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбменаСВнешнейСистемой(СтруктураНастроекОбмена) - - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда - - ОбработкаТранспортаСообщенийОбмена = Обработки[СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена].Создать(); - - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаВнешнейСистемы( - СтруктураНастроекОбмена.УзелИнформационнойБазы); - - // Инициализируем транспорт. - ОбработкаТранспортаСообщенийОбмена.Инициализация(ПараметрыПодключения); - - СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена", ОбработкаТранспортаСообщенийОбмена); - - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область ОбщегоНазначения_СлужебныеПроцедурыИФункции @@ -10844,32 +9659,33 @@ Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстЗапросаРезультат = - "ВЫБРАТЬ - | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента, """") КАК ВерсияКорреспондента, - | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента, """") КАК ПрефиксКорреспондента, - | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена, ЛОЖЬ) КАК НастройкаЗавершена, - | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПереходНаWS_Этап, 0) КАК ПереходНаWS_Этап, - | ЕСТЬNULL(НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию, """") КАК ВидТранспорта, - | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.СинхронизацияНедоступна, ЛОЖЬ) КАК СинхронизацияНедоступна - |ПОМЕСТИТЬ ОбщиеНастройкиУзловИнформационныхБаз - |ИЗ - | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспортаОбменаДанными - | ПО ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = НастройкиТранспортаОбменаДанными.Корреспондент"; + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ВерсияКорреспондента, """") КАК ВерсияКорреспондента, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПрефиксКорреспондента, """") КАК ПрефиксКорреспондента, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.НастройкаЗавершена, ЛОЖЬ) КАК НастройкаЗавершена, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.ПереходНаWS_Этап, 0) КАК ПереходНаWS_Этап, + | ЕСТЬNULL(НастройкиТранспортаСообщенийОбмена.ИдентификаторТранспорта, """") КАК ИдентификаторТранспорта, + | ЕСТЬNULL(ОбщиеНастройкиУзловИнформационныхБаз.СинхронизацияНедоступна, ЛОЖЬ) КАК СинхронизацияНедоступна + |ПОМЕСТИТЬ ОбщиеНастройкиУзловИнформационныхБаз + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НастройкиТранспортаСообщенийОбмена КАК НастройкиТранспортаСообщенийОбмена + | ПО ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = НастройкиТранспортаСообщенийОбмена.Корреспондент + | И (НастройкиТранспортаСообщенийОбмена.НастройкаПоУмолчанию)"; Иначе ТекстЗапросаРезультат = - "ВЫБРАТЬ - | NULL КАК УзелИнформационнойБазы, - | """" КАК ВерсияКорреспондента, - | """" КАК ПрефиксКорреспондента, - | ЛОЖЬ КАК НастройкаЗавершена, - | 0 КАК ПереходНаWS_Этап, - | """" КАК ВидТранспорта, - | ЛОЖЬ КАК СинхронизацияНедоступна - |ПОМЕСТИТЬ ОбщиеНастройкиУзловИнформационныхБаз"; + "ВЫБРАТЬ + | NULL КАК УзелИнформационнойБазы, + | """" КАК ВерсияКорреспондента, + | """" КАК ПрефиксКорреспондента, + | ЛОЖЬ КАК НастройкаЗавершена, + | 0 КАК ПереходНаWS_Этап, + | """" КАК ИдентификаторТранспорта, + | ЛОЖЬ КАК СинхронизацияНедоступна + |ПОМЕСТИТЬ ОбщиеНастройкиУзловИнформационныхБаз"; КонецЕсли; @@ -11575,47 +10391,6 @@ КонецФункции -Процедура ПроверитьВозможностьВнешнегоСоединения() - - Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда - - ВызватьИсключение НСтр("ru = 'Синхронизация данных через прямое подключение на сервере под управлением ОС Linux недоступно. - |Для синхронизации данных через прямое подключение используйте ОС Windows.'"); - - КонецЕсли; - -КонецПроцедуры - -// Заполняет список значений доступными видами транспорта для узла плана обмена. -// -Процедура ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(УзелИнформационнойБазы, ЭлементФормы, Отбор = Неопределено) Экспорт - - ОтборЗадан = (Отбор <> Неопределено); - - ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы); - - ЭлементФормы.СписокВыбора.Очистить(); - - Для Каждого Элемент Из ИспользуемыеТранспорты Цикл - - Если ОтборЗадан Тогда - - Если Отбор.Найти(Элемент) <> Неопределено Тогда - - ЭлементФормы.СписокВыбора.Добавить(Элемент, Строка(Элемент)); - - КонецЕсли; - - Иначе - - ЭлементФормы.СписокВыбора.Добавить(Элемент, Строка(Элемент)); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - // Фиксирует состояние обмена данными в регистре сведений СостоянияОбменовДанными. // // Параметры: @@ -11732,7 +10507,7 @@ // ПарольАрхива - Строка - пароль для распаковки архива. По умолчанию пустая строка. // // Возвращаемое значение: -// Результат - Булево - Истина, если успешно, Ложь, если нет. +// Булево - Истина, если успешно, Ложь, если нет. // Функция РаспаковатьZipФайл(Знач ПолноеИмяФайлаАрхива, Знач ПутьРаспаковкиФайлов, Знач ПарольАрхива = "") Экспорт @@ -11775,7 +10550,7 @@ // ПарольАрхива - Строка - пароль для архива. По умолчанию пустая строка. // // Возвращаемое значение: -// Результат - Булево - Истина, если успешно, Ложь, если нет. +// Булево - Истина, если успешно, Ложь, если нет. // Функция ЗапаковатьВZipФайл(Знач ПолноеИмяФайлаАрхива, Знач МаскаУпаковкиФайлов, Знач ПарольАрхива = "") Экспорт @@ -11877,22 +10652,6 @@ КонецФункции -// Возвращает ключ сообщения журнала регистрации. -// -Функция КлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене) Экспорт - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - - КлючСообщения = НСтр("ru = 'Обмен данными.[ИмяПланаОбмена].[ДействиеПриОбмене]'", - ОбщегоНазначения.КодОсновногоЯзыка()); - - КлючСообщения = СтрЗаменить(КлючСообщения, "[ИмяПланаОбмена]", ИмяПланаОбмена); - КлючСообщения = СтрЗаменить(КлючСообщения, "[ДействиеПриОбмене]", ДействиеПриОбмене); - - Возврат КлючСообщения; - -КонецФункции - // Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. // // Параметры: @@ -11920,6 +10679,14 @@ // Формирует и возвращает ключ таблицы данных. // Ключ таблицы используется для выборочной загрузки данных из сообщения обмена по заданному ключу. +// +// Параметры: +// ТипИсточника - Строка +// ТипПриемника - Строка +// ЭтоУдалениеОбъекта - Булево +// +// Возвращаемое значение: +// Строка // Функция КлючТаблицыДанных(Знач ТипИсточника, Знач ТипПриемника, Знач ЭтоУдалениеОбъекта) Экспорт @@ -11939,21 +10706,6 @@ КонецФункции -Функция ЗаполнитьПараметрыПодключенияВнешнегоСоединения(НастройкиТранспорта) - - ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); - - ПараметрыПодключения.ВариантРаботыИнформационнойБазы = НастройкиТранспорта.COMВариантРаботыИнформационнойБазы; - ПараметрыПодключения.КаталогИнформационнойБазы = НастройкиТранспорта.COMКаталогИнформационнойБазы; - ПараметрыПодключения.ИмяСервера1СПредприятия = НастройкиТранспорта.COMИмяСервера1СПредприятия; - ПараметрыПодключения.ИмяИнформационнойБазыНаСервере1СПредприятия = НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия; - ПараметрыПодключения.АутентификацияОперационнойСистемы = НастройкиТранспорта.COMАутентификацияОперационнойСистемы; - ПараметрыПодключения.ИмяПользователя = НастройкиТранспорта.COMИмяПользователя; - ПараметрыПодключения.ПарольПользователя = НастройкиТранспорта.COMПарольПользователя; - - Возврат ПараметрыПодключения; -КонецФункции - Функция ДобавитьЛитералКИмениФайла(Знач ПолноеИмяФайла, Знач Литерал) Если ПустаяСтрока(ПолноеИмяФайла) Тогда @@ -11973,6 +10725,14 @@ Возврат Результат; КонецФункции +// Наименование предопределенного узла плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// +// Возвращаемое значение: +// Строка +// Функция НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -12090,24 +10850,6 @@ КонецПроцедуры -Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - УзелИнформационнойБазы = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); - - Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - Сообщение = НСтр("ru = 'Не найден узел плана обмена; имя плана обмена %1; код узла %2'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, ИмяПланаОбмена, КодУзла); - ВызватьИсключение Сообщение; - КонецЕсли; - - ПомощникСозданияОбменаДанными = МодульПомощникСозданияОбменаДанными().Создать(); - ПомощникСозданияОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; - ПомощникСозданияОбменаДанными.ВнешнееСоединениеОбновитьНастройкиОбменаДанными(ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле)); - -КонецПроцедуры - Функция ИмяТаблицыИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; @@ -12182,12 +10924,6 @@ Возврат Не Отказ; КонецФункции -Функция ПолучитьПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт - - Возврат ЗначениеВСтрокуВнутр(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); - -КонецФункции - Функция ПолучитьПараметрыИнформационнойБазы_2_0_1_6(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); @@ -12203,47 +10939,6 @@ КонецФункции -Функция СвойстваОбъектаМетаданных(Знач ПолноеИмяТаблицы) Экспорт - - Результат = Новый Структура("Синоним, Иерархический"); - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); - - ЗаполнитьЗначенияСвойств(Результат, ОбъектМетаданных); - - Возврат Результат; -КонецФункции - -Функция ПолучитьОбъектыТаблицы(Знач ПолноеИмяТаблицы) Экспорт - УстановитьПривилегированныйРежим(Истина); - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТаблицы); - - Если ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.Иерархический Тогда - Если ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда - Возврат ЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы); - КонецЕсли; - - Возврат ЭлементыИерархическогоСправочникаИерархияЭлементов(ПолноеИмяТаблицы); - КонецЕсли; - - Возврат ЭлементыНеиерархическогоСправочника(ПолноеИмяТаблицы); - - ИначеЕсли ОбщегоНазначения.ЭтоПланВидовХарактеристик(ОбъектМетаданных) Тогда - - Если ОбъектМетаданных.Иерархический Тогда - Возврат ЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(ПолноеИмяТаблицы); - КонецЕсли; - - Возврат ЭлементыНеиерархическогоСправочника(ПолноеИмяТаблицы); - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - Функция ЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(Знач ПолноеИмяТаблицы) ШаблонТекстаЗапроса = @@ -12367,16 +11062,6 @@ КонецПроцедуры -Функция ДанныеКорреспондента(Знач ПолноеИмяТаблицы) Экспорт - - Результат = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); - - Результат.СвойстваОбъектаМетаданных = СвойстваОбъектаМетаданных(ПолноеИмяТаблицы); - Результат.ТаблицаБазыКорреспондента = ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы); - - Возврат Результат; -КонецФункции - Функция ИнформацияСтатистики(ИнформацияСтатистики, Знач ВключатьУдалениеОбъектов = Ложь) Экспорт ОтборМассив = ИнформацияСтатистики.ВыгрузитьКолонку("ИмяТаблицыПриемника"); @@ -12608,128 +11293,6 @@ КонецПроцедуры -// Основная функция для использования внешнего соединения при обмене. -// -// Параметры: -// СтруктураНастроек - структура настроек транспорта COM обмена. -// -// Возвращаемое значение: -// Структура: -// * Соединение - COMОбъект -// - Неопределено - указатель на COM-объект соединения или Неопределено в -// случае ошибки; -// * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; -// * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; -// * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. -// -Функция УстановитьВнешнееСоединениеСБазой(СтруктураНастроек) Экспорт - - Результат = ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой( - ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек)); - - ВнешнееСоединение = Результат.Соединение; - Если ВнешнееСоединение = Неопределено Тогда - // Ошибка установки соединения. - Возврат Результат; - КонецЕсли; - - // Для конфигураций с разными вариантами встроенного языка COM соединение не работает - - ВариантВстроенногоЯзыкаКорреспондента = ""; - ВариантыВстроенногоЯзыкаОтличаются = Ложь; - Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский - И ВнешнееСоединение.Метаданные.ВариантВстроенногоЯзыка <> ВнешнееСоединение.Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда - ВариантВстроенногоЯзыкаКорреспондента = НСтр("ru = 'Английский'"); - ВариантыВстроенногоЯзыкаОтличаются = Истина; - КонецЕсли; - - Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский - И ВнешнееСоединение.Метаданные.ВариантВстроенногоЯзыка <> ВнешнееСоединение.Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский Тогда - ВариантВстроенногоЯзыкаКорреспондента = НСтр("ru = 'Русский'"); - ВариантыВстроенногоЯзыкаОтличаются = Истина; - КонецЕсли; - - Если ВариантыВстроенногоЯзыкаОтличаются Тогда - - ПодробноеОписаниеОшибки = НСтр("ru = 'В подключаемой программе отличается вариант встроенного языка (%1). Подключение невозможно.'"); - ПодробноеОписаниеОшибки = СтрШаблон(ПодробноеОписаниеОшибки, ВариантВстроенногоЯзыкаКорреспондента); - - Результат.ПодробноеОписаниеОшибки = ПодробноеОписаниеОшибки; - Результат.КраткоеОписаниеОшибки = ПодробноеОписаниеОшибки; - Результат.Соединение = Неопределено; - - Возврат Результат; - - КонецЕсли; - - // Дополнительно проверяем возможность работы с внешней базой. - - Попытка - НетПолныхПрав = Не ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.РольДоступнаПолныеПрава(); - Исключение - НетПолныхПрав = Истина; - КонецПопытки; - - Если НетПолныхПрав Тогда - Результат.ПодробноеОписаниеОшибки = НСтр("ru = 'Пользователю, указанному для подключения к другой программе, должны быть назначены роли ""Администратор системы"" и ""Полные права""'"); - Результат.КраткоеОписаниеОшибки = Результат.ПодробноеОписаниеОшибки; - Результат.Соединение = Неопределено; - Иначе - Попытка - СостояниеНеДопустимо = ВнешнееСоединение.ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); - Исключение - СостояниеНеДопустимо = Ложь - КонецПопытки; - - Если СостояниеНеДопустимо Тогда - Результат.ПодробноеОписаниеОшибки = НСтр("ru = 'Другая программа находится в состоянии обновления.'"); - Результат.КраткоеОписаниеОшибки = Результат.ПодробноеОписаниеОшибки; - Результат.Соединение = Неопределено; - КонецЕсли; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры) - - // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. - НастройкиТранспорта = Новый Структура; - - НастройкиТранспорта.Вставить("COMПарольПользователя", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПарольПользователя")); - НастройкиТранспорта.Вставить("COMИмяПользователя", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяПользователя")); - НастройкиТранспорта.Вставить("COMАутентификацияОперационнойСистемы", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "АутентификацияОперационнойСистемы")); - НастройкиТранспорта.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяИнформационнойБазыНаСервере1СПредприятия")); - НастройкиТранспорта.Вставить("COMИмяСервера1СПредприятия", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяСервера1СПредприятия")); - НастройкиТранспорта.Вставить("COMКаталогИнформационнойБазы", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КаталогИнформационнойБазы")); - НастройкиТранспорта.Вставить("COMВариантРаботыИнформационнойБазы", - ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВариантРаботыИнформационнойБазы")); - - Возврат НастройкиТранспорта; - -КонецФункции - -Процедура УдалитьНезначащиеСимволыВНастройкахПодключения(Настройки) Экспорт - - Для Каждого Настройка Из Настройки Цикл - - Если ТипЗнч(Настройка.Значение) = Тип("Строка") Тогда - - Настройки.Вставить(Настройка.Ключ, СокрЛП(Настройка.Значение)); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - // Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина". // // Параметры: @@ -12945,6 +11508,13 @@ КонецПроцедуры // Получает индекс картинки для вывода в таблице статистики сопоставления объектов. +// +// Параметры: +// КоличествоОбъектовНесопоставленных -Число - количество несопоставленных объектов +// ДанныеУспешноЗагружены - Булево +// +// Возвращаемое значение: +// Число - возможные значения: 0, 1, 2 // Функция ИндексКартинкиТаблицыИнформацииСтатистики(Знач КоличествоОбъектовНесопоставленных, Знач ДанныеУспешноЗагружены) Экспорт @@ -12953,9 +11523,13 @@ КонецФункции // Выполняет проверку того, что размер файла сообщения обмена превышает допустимый размер. -// -// Возвращаемое значение: -// Истина - если размер файла больше допустимого, иначе Ложь. +// +// Параметры: +// ИмяФайла - Строка - полное имя файла +// МаксимальныйДопустимыйРазмерСообщения - Число +// +// Возвращаемое значение: +// Булево - если размер файла больше допустимого, иначе Ложь. // Функция РазмерСообщенияОбменаПревышаетДопустимый(Знач ИмяФайла, Знач МаксимальныйДопустимыйРазмерСообщения) Экспорт @@ -13018,12 +11592,12 @@ // Обновление правил регистрации объектов выполняем до загрузки данных. ВыполнитьОбновлениеПравилДляОбменаДанными(); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); Отказ = Ложь; ПараметрыОбмена = ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); @@ -13145,40 +11719,6 @@ КонецФункции -// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. -// -// Параметры: -// ВнешнееСоединение - объект COM-соединение, которое используется для работы с корреспондентом. -// -// Возвращаемое значение: -// Массив номеров версий, поддерживаемых интерфейсом корреспондента. -// -Функция ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение) Экспорт - - Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, "ОбменДанными"); - -КонецФункции - -// Создает временный каталог сообщений обмена. -// Фиксирует имя каталога в регистре для последующего его удаления. -// -Функция СоздатьВременныйКаталогСообщенийОбмена(ИдентификаторКаталога = Неопределено) Экспорт - - Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), ИмяВременногоКаталогаСообщенийОбмена()); - - СоздатьКаталог(Результат); - - Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - - УстановитьПривилегированныйРежим(Истина); - - ИдентификаторКаталога = ПоместитьФайлВХранилище(Результат); - - КонецЕсли; - - Возврат Результат; -КонецФункции - Функция ВариантОбменаДанными(Знач Корреспондент) Экспорт Результат = "Синхронизация"; @@ -13322,6 +11862,17 @@ КонецФункции // Проверка на различие версии корреспондента в правилах текущей и другой программы. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// КлючСообщенияЖурналаРегистрации - Строка - ключ сообщения для записи в журнал регистрации +// ВерсияВЭтойПрограмме - Строка - версия этого приложения +// ВерсияВДругойПрограмме - Строка - версия приложения-корреспондента +// ТекстСообщения - Строка +// ПараметрыВнешнегоСоединения - Неопределено - параметры внешнего соединения +// +// Возвращаемое значение: +// Булево // Функция РазличаютсяВерсииКорреспондента(ИмяПланаОбмена, КлючСообщенияЖурналаРегистрации, ВерсияВЭтойПрограмме, ВерсияВДругойПрограмме, ТекстСообщения, ПараметрыВнешнегоСоединения = Неопределено) Экспорт @@ -13430,7 +11981,14 @@ КонецФункции -// Возвращает расширенное представление объекта. +// Возвращает расширенное представление объекта метаданных. +// +// Параметры: +// ПараметрОбъект - ОбъектМетаданных +// - Строка - полное имя объекта метаданных, как задано в конфигураторе +// +// Возвращаемое значение: +// Строка // Функция ПредставлениеОбъекта(ПараметрОбъект) Экспорт @@ -13451,7 +12009,14 @@ Возврат МетаданныеОбъекта.Представление(); КонецФункции -// Возвращает расширенное представление списка объектов. +// Возвращает расширенное представление списка объектов метаданных. +// +// Параметры: +// ПараметрОбъект - ОбъектМетаданных +// - Строка - полное имя объекта метаданных, как задано в конфигураторе +// +// Возвращаемое значение: +// Строка // Функция ПредставлениеСпискаОбъектов(ПараметрОбъект) Экспорт @@ -13784,7 +12349,7 @@ // Массив = Новый Массив; // Массив.Добавить("Константа.ИспользоватьСинхронизациюДанных"); // Массив.Добавить("Справочник.Валюты"); -// Массив.Добавить("Справочник.Организации"); +// // Отбор = Новый Структура; // Отбор.Вставить("ПолноеИмя", Массив); // @@ -13888,76 +12453,6 @@ КонецПроцедуры -Функция КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЭтотУзел = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); - - Возврат СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотУзел, "Код")); - -КонецФункции - -// Возвращает массив всех узлов для заданного плана обмена кроме предопределенного узла. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе. -// -// Возвращаемое значение: -// МассивУзлов - Массив - массив всех узлов для заданного плана обмена кроме предопределенного узла. -// -Функция УзлыПланаОбмена(ИмяПланаОбмена) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПланОбмена.Ссылка КАК Ссылка - |ИЗ - | #ИмяТаблицыПланаОбмена КАК ПланОбмена - |ГДЕ - | НЕ ПланОбмена.ЭтотУзел"); - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ИмяТаблицыПланаОбмена", "ПланОбмена." + ИмяПланаОбмена); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - -Функция ИмяКаталогаДляСопоставленияФайловаяИБ() Экспорт - - Возврат СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()).File - + ПолучитьРазделительПути() + "TempMessageForDataMatching"; - -КонецФункции - -Функция ПолноеИмяФайлаДляСопоставленияФайловаяИБ(ИмяФайла) Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаДляСопоставленияФайловаяИБ(), ИмяФайла); - -КонецФункции - -// Останавливает выполнение кода на заданное время. -// Метод продублирован из БТС, т.к. п/с может использоваться без указанной библиотеки. -// -// Параметры: -// Секунд - Число - время ожидания в секундах. -// -Процедура Пауза(Секунд) Экспорт - - ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы(); - ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание(); - - Если ФоновоеЗадание = Неопределено Тогда - - Параметры = Новый Массив; - Параметры.Добавить(Секунд); - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.Пауза", Параметры); - - КонецЕсли; - - ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Секунд); - -КонецПроцедуры - #КонецОбласти #Область ИнтерактивноеИзменениеВыгрузки_СлужебныеПроцедурыИФункции @@ -14025,7 +12520,7 @@ // Возвращаемое значение: // ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла: // * ПолноеИмяМетаданных - Строка - полное имя метаданных регистрируемого объекта, отбор которого описывает строка. -// Например "Документ.ПоступлениеТоваров". Можно +// Например "Справочник.Валюты". Можно // использовать специальные значения "ВсеДокументы" и // "ВсеСправочники" для отбора соответственно всех // документов и всех справочников, регистрирующихся на узле "Получатель". @@ -14183,8 +12678,8 @@ // Определяет описание общего отбора. При пустом отборе возвращает пустую строку. // // Параметры: -// ДополнениеВыгрузки - Структура -// - РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура: +// - РеквизитФормы - описание параметров выгрузки. // // Возвращаемое значение: // Строка - описание отбора. @@ -14204,8 +12699,8 @@ // Определяет описание детального отбора. При пустом отборе возвращает пустую строку. // // Параметры: -// ДополнениеВыгрузки - Структура -// - РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура: +// - РеквизитФормы - описание параметров выгрузки. // // Возвращаемое значение: // Строка - описание отбора. @@ -14217,11 +12712,11 @@ // Анализирует историю настроек-отборов, сохраненную пользователем для узла. // // Параметры: -// ДополнениеВыгрузки - Структура -// - РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура: +// - РеквизитФормы - описание параметров выгрузки. // // Возвращаемое значение: -// Список значений, где представление - имя настройки, значение - данные настройки. +// СписокЗначений из Строка - где представление - имя настройки, значение - данные настройки. // Функция ИнтерактивноеИзменениеВыгрузкиИсторияНастроек(Знач ДополнениеВыгрузки) Экспорт ОбработкаДополнения = Обработки.ИнтерактивноеИзменениеВыгрузки.Создать(); @@ -14234,8 +12729,8 @@ // Восстанавливает настройки в реквизитах ДополнениеВыгрузки по названию сохраненной настройки. // // Параметры: -// ДополнениеВыгрузки - Структура -// - РеквизитФормыКоллекция - описание параметров выгрузки. +// ДополнениеВыгрузки - Структура: +// - РеквизитФормы - описание параметров выгрузки. // ПредставлениеНастройки - Строка - название восстанавливаемой настройки. // // Возвращаемое значение: @@ -14393,9 +12888,11 @@ // Возвращает описание периода и отбора строкой. // // Параметры: -// Период: период для описания отбора. -// Отбор: отбор компоновки данных для описания. -// ОписаниеПустогоОтбора: значение, возвращаемое в случае пустого отбора. +// Период - Дата - период для описания отбора, +// - Неопределено +// Отбор - КомпоновщикНастроекКомпоновкиДанных +// - ОтборКомпоновкиДанных - отбор компоновки данных для описания. +// ОписаниеПустогоОтбора - Строка, Неопределено - значение, возвращаемое в случае пустого отбора. // // Возвращаемое значение: // Строка - описание периода и отбора. @@ -14423,11 +12920,13 @@ КонецФункции // Возвращает описание детального отбора по реквизиту "ДополнительнаяРегистрация". -// -// Параметры: -// ДополнительнаяРегистрация - ТаблицаЗначений -// - Массив - строки или структуры, описывающие отбор. -// ОписаниеПустогоОтбора - Строка - значение, возвращаемое в случае пустого отбора. +// +// Параметры: +// ДополнительнаяРегистрация - ТаблицаЗначений +// ОписаниеПустогоОтбора - Строка - значение, возвращаемое в случае пустого отбора. +// +// Возвращаемое значение: +// Строка, Неопределено - представление детального дополнения выгрузки // Функция ПредставлениеДетальногоДополненияВыгрузки(Знач ДополнительнаяРегистрация, Знач ОписаниеПустогоОтбора=Неопределено) Экспорт @@ -14448,6 +12947,9 @@ КонецФункции // Идентификатор служебной группы объектов метаданных "Все документы". +// +// Возвращаемое значение: +// Строка // Функция ДополнениеВыгрузкиИдентификаторВсехДокументов() Экспорт // Не должно пересекаться с полным именем метаданных. @@ -14455,6 +12957,9 @@ КонецФункции // Идентификатор служебной группы объектов метаданных "Все справочники". +// +// Возвращаемое значение: +// Строка // Функция ДополнениеВыгрузкиИдентификаторВсехСправочников() Экспорт // Не должно пересекаться с полным именем метаданных. @@ -14586,7 +13091,7 @@ |Объекты незарегистрированные при зацикливании.'"); ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, "ФормаЗацикливаниеСинхронизации", "ФормаОбъектыНезарегистрированныеПриЗацикливании" ); - + ФДок = Новый ФорматированныйДокумент; ФДок.УстановитьHTML("" + ТекстПредупреждения + "", Новый Структура); diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index 7fb15f870..a080ab3db 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -10,12 +10,15 @@ // Возвращает признак ошибки при запуске: // 1) Ошибка загрузки сообщения обмена: -// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, -// - ошибка проверки идентификаторов объектов метаданных, -// - ошибка загрузки сообщения обмена перед обновлением ИБ, -// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; +// - ошибка загрузки идентификаторов объектов метаданных при загрузке сообщения обмена, +// - ошибка проверки идентификаторов объектов метаданных, +// - ошибка загрузки сообщения обмена перед обновлением ИБ, +// - ошибка загрузки сообщения обмена перед обновлением ИБ в режиме когда версия не изменилась; // 2) Ошибка обновления ИБ после успешной загрузки сообщения обмена. -// +// +// Возвращаемое значение: +// Булево - значение константы ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском +// Функция ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -47,8 +50,8 @@ // Выполнении ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов. УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - - ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); ПараметрыСеанса.ПриоритетныеДанныеОбмена = Новый ФиксированныйМассив(Новый Массив); @@ -66,8 +69,8 @@ УстановленныеПараметры.Добавить("ОшибкаРасхожденияВерсийПриПолученииДанных"); Иначе - - ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(Новый Соответствие); + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); УстановленныеПараметры.Добавить("ПаролиСинхронизацииДанных"); ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(Новый Соответствие); @@ -194,6 +197,12 @@ // Возвращает признак режима загрузки параметров работы программы из сообщения обмена в информационную базу. // Актуально для обмена в РИБ при загрузке данных в подчиненном узле РИБ. +// +// Параметры: +// Свойство - Строка - свойство параметра сеанса РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском +// +// Возвращаемое значение: +// Булево // Функция РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском(Свойство) Экспорт @@ -272,12 +281,15 @@ КонецФункции // Только для внутреннего использования. -// +// // Параметры: -// ИдентификаторФайла - УникальныйИдентификатор - уникальный идентификатор сессии передачи данных. -// НомерЗагружаемойЧастиФайла - Число - номер части файла. -// ЗагружаемаяЧастьФайла - ДвоичныеДанные - данные части файла. -// СообщениеОбОшибке - Строка - описание ошибки при выполнении операции. +// ИдентификаторФайла - УникальныйИдентификатор - уникальный идентификатор сессии передачи данных. +// НомерЗагружаемойЧастиФайла - Число - номер части файла. +// ЗагружаемаяЧастьФайла - ДвоичныеДанные - данные части файла. +// СообщениеОбОшибке - Строка - описание ошибки при выполнении операции. +// +// Возвращаемое значение: +// Строка - всегда пустая строка // Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) Экспорт @@ -785,44 +797,6 @@ КонецПроцедуры -// Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте для узла информационной -// базы. -// -Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач ИдентификаторОперации, Знач УзелИнформационнойБазы, - Знач ПараметрыАутентификации = Неопределено, СтрокаСообщенияОбОшибке = "") Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( - УзелИнформационнойБазы, ПараметрыАутентификации); - - ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); - - СообщениеОбОшибке = ""; - ДополнительныеПараметры = Неопределено; - Прокси = ОбменДаннымиВебСервис.WSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СообщениеОбОшибке, ДополнительныеПараметры); - - Если Прокси = Неопределено Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - ПараметрыПрокси = Новый Структура("ТекущаяВерсия", ДополнительныеПараметры.ТекущаяВерсия); - ПараметрыОбмена = Новый Структура("ИдентификаторОперации", ИдентификаторОперации); - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы(УзелИнформационнойБазы, - "ПроверкаСостоянияДлительнойОперации", Перечисления.ВидыТранспортаСообщенийОбмена.WS, Ложь); - - Результат = ОбменДаннымиВебСервис.ПолучитьСтатусДлительнойОперации(Прокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена, ПараметрыОбмена, СтрокаСообщенияОбОшибке); - - Если Результат = "Failed" Тогда - СтрокаСообщения = НСтр("ru = 'Ошибка в базе-корреспонденте: %1'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - СтрокаСообщенияОбОшибке); - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Устанавливает признак необходимости загрузки расширений Процедура ВключитьЗагрузкуРасширенийИзменяющиеСтруктуруДанных() Экспорт @@ -844,6 +818,10 @@ КонецПроцедуры // Возвращает признак необходимости загрузки расширений +// +// Возвращаемое значение: +// Булево - значение константы ЗагрузитьРасширенияИзменяющиеСтруктуруДанных +// Функция ЗагрузитьРасширенияИзменяющиеСтруктуруДанных() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -935,7 +913,7 @@ КонецФункции // Параметры: -// Данные - СправочникОбъект, +// Данные - СправочникОбъект // - ДокументОбъект // - ПланСчетовОбъект // - ПланВидовРасчетаОбъект @@ -1362,8 +1340,8 @@ КонецЕсли; СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - КомпонентыОбмена.УзелКорреспондента, ДействиеОбменаДанными, Неопределено, Ложь); - + КомпонентыОбмена.УзелКорреспондента, ДействиеОбменаДанными); + Если СтруктураНастроекОбмена.Отказ Тогда СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при инициализации процесса обмена данными.'"); ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index ca56c956d..1f47bb3b1 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -145,8 +145,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для использования в обработчиках событий правил регистрации. +#Область ПроцедурыИФункцииДляИспользованияВОбработчикахСобытийПравилРегистрации // Процедура дополняет список узлов-получателей объекта переданными значениями. // @@ -243,9 +242,7 @@ // Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена); + Возврат ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена); КонецФункции @@ -332,8 +329,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для вызова из других библиотек. +#КонецОбласти + +#Область ПроцедурыИФункцииДляВызоваИзДругихБиблиотек // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковЗагрузкиДанных. Процедура ПриРегистрацииОбработчиковЗагрузкиДанных(ТаблицаОбработчиков) Экспорт @@ -352,11 +350,11 @@ // Выполняет обработчики после загрузки объекта. // // Параметры: -// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер +// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер // контейнера, используемый в процессе выгрузи данных. Подробнее см. комментарий // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. -// Объект - Произвольный - объект загружаемых данных. -// Артефакты - Массив из ОбъектXDTO - массив артефактов (объектов XDTO). +// Объект - Произвольный - объект загружаемых данных. +// Артефакты - Массив из ОбъектXDTO - массив артефактов (объектов XDTO). // Процедура ПослеЗагрузкиОбъекта(Контейнер, Объект, Артефакты) Экспорт @@ -376,6 +374,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Процедура предназначена для определения вида отправки выгружаемого элемента данных. @@ -594,15 +594,16 @@ // Создает и записывает версию объекта в информационную базу. // // Параметры: -// Объект - записываемый объект ИБ. -// СсылкаСуществует - Булево - признак наличия объекта по ссылке в информационной базе. +// Объект - СправочникОбъект, ДокументОбъект - записываемый объект ИБ. // СведенияОВерсииОбъекта - Структура: -// * АвторВерсии - Пользователь, УзелПланаОбмена - источник версии. +// * АвторВерсии - СправочникСсылка.Пользователи, ПланОбменаСсылка - источник версии. // Необязательный, значение по умолчанию Неопределено. // * ТипВерсииОбъекта - Строка - тип создаваемой версии. // Необязательный, значение по умолчанию "ИзмененоПользователем". // * ПредупреждениеСинхронизации - Строка - предупреждение синхронизации к создаваемой версии. // Необязательный, значение по умолчанию "". +// СсылкаСуществует - Булево - признак наличия объекта по ссылке в информационной базе. +// Отправитель - ПланОбменаОбъект - план обмена БСД. // Процедура ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель) Экспорт @@ -762,6 +763,8 @@ // Кэш открытых сеансов для МРО стал неактуальным. ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; КонецПроцедуры @@ -781,8 +784,10 @@ // Кэш открытых сеансов для МРО стал неактуальным. ОбменДаннымиСлужебный.СброситьКэшМеханизмаРегистрацииОбъектов(); + ОбновитьПовторноИспользуемыеЗначения(); + КонецЕсли; - + КонецПроцедуры Процедура ПроверитьВозможностьИзмененияНастроекОбменаДанными(Источник, Отказ) Экспорт @@ -1092,6 +1097,8 @@ Справочники.СценарииОбменовДанными.ОчиститьСсылкиНаУзелИнформационнойБазы(Источник.Ссылка); + ТранспортСообщенийОбмена.УдалитьВсеНастройкиТранспорта(Источник.Ссылка); + Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -1119,15 +1126,16 @@ МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация"); - СценарииОбменовДанными = ""; + СценарииОбменовДанными = ""; ИдентификаторОбмена = ""; + ОбластьДанных = ПараметрыСеанса["ОбластьДанныхЗначение"]; ПоУзлуЗапланированОбмен = МодульОбменДаннымиВнутренняяПубликация.ПоУзлуЗапланированОбмен( Источник.Ссылка, СценарииОбменовДанными,ИдентификаторОбмена); Если ПоУзлуЗапланированОбмен Тогда МодульОбменДаннымиВнутренняяПубликация.ОтменитьОчередьЗадач( - Источник.Ссылка, СценарииОбменовДанными, ИдентификаторОбмена); + Источник.Ссылка, СценарииОбменовДанными, ИдентификаторОбмена, ОбластьДанных); КонецЕсли; КонецЕсли; @@ -1199,6 +1207,12 @@ Если ДополнительныеПараметры <> Неопределено Тогда ЗаполнитьЗначенияСвойств(НеобязательныеПараметры, ДополнительныеПараметры); + + // В версиях платформы 8.3.25 - 8.3.27 режим замещения может быть указан + // как системное перечисление "РежимЗамещения" со значениями: + // Добавление, Замещение, Обновление, Слияние, Удаление. + // Из них режим "Добавление" соответствует значению замещение ЛОЖЬ, остальные ИСТИНА. + АдаптироватьЗначениеЗамещенияНеобязательныхПараметровРегистрации(НеобязательныеПараметры); КонецЕсли; ЭтоРегистр = НеобязательныеПараметры.ЭтоРегистр; @@ -1322,7 +1336,7 @@ // Если объект не модифицирован и он регистрируется автоматически, // то удаляем все узлы по авторегистрации для текущего плана обмена. - СократитьПолучателей(Объект, ВсеУзлыПланаОбмена(ИмяПланаОбмена)); + СократитьПолучателей(Объект, ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена)); КонецЕсли; @@ -1400,6 +1414,46 @@ КонецПроцедуры +// Метод выполняет проверку значения режима замещения в необязательных параметрах. +// Если таковой указан как системное перечисление "РежимЗамещения", то выполняет его приведение к типу Булево. +// +Процедура АдаптироватьЗначениеЗамещенияНеобязательныхПараметровРегистрации(НеобязательныеПараметры) + + ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + + ЭтаВерсияНижеБСП_3_1_11 = (ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБСП, "3.1.11.0") <= 0); + Если ЭтаВерсияНижеБСП_3_1_11 + ИЛИ НеобязательныеПараметры.Замещение = Неопределено + ИЛИ ТипЗнч(НеобязательныеПараметры.Замещение) = Тип("Булево") + Тогда + + Возврат; + + КонецЕсли; + + МодульОбщегоНазначения = ОбщегоНазначения.ОбщийМодуль("ОбщегоНазначения"); + Если МодульОбщегоНазначения = Неопределено Тогда + + Возврат; + + КонецЕсли; + + ЭтоРасширенныйРежимЗамещения = МодульОбщегоНазначения.ЭтоЗамещениеНабораЗаписей(НеобязательныеПараметры.Замещение) + ИЛИ МодульОбщегоНазначения.ЭтоОбновлениеНабораЗаписей(НеобязательныеПараметры.Замещение) + ИЛИ МодульОбщегоНазначения.ЭтоСлияниеНабораЗаписей(НеобязательныеПараметры.Замещение) + ИЛИ МодульОбщегоНазначения.ЭтоУдалениеНабораЗаписей(НеобязательныеПараметры.Замещение); + + Если ЭтоРасширенныйРежимЗамещения = Истина Тогда + + НеобязательныеПараметры.Замещение = Истина; + Возврат; + + КонецЕсли; + + НеобязательныеПараметры.Замещение = Ложь; + +КонецПроцедуры + #КонецОбласти #Область ПравилаРегистрацииОбъектов @@ -1505,7 +1559,7 @@ // Если для объекта не созданы ПРО и отключена авторегистрация, // то регистрируем объект на всех узлах плана обмена кроме предопределенного. - Получатели = ВсеУзлыПланаОбмена(ИмяПланаОбмена); + Получатели = ОбменДаннымиПовтИсп.УзлыПланаОбмена(ИмяПланаОбмена); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); @@ -2022,7 +2076,9 @@ Если ИспользоватьКэш Тогда - Возврат ОбменДаннымиПовтИсп.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага, Выгрузка); + ЗначенияСвойствСтрока = ОбщегоНазначения.ЗначениеВСтрокуXML(ЗначенияСвойств); + Возврат ОбменДаннымиПовтИсп.МассивУзловПоЗначениямСвойств( + ЗначенияСвойствСтрока, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага, Выгрузка); Иначе @@ -2050,7 +2106,9 @@ Если ИспользоватьКэш Тогда - Возврат ОбменДаннымиПовтИсп.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + ЗначенияСвойствСтрока = ОбщегоНазначения.ЗначениеВСтрокуXML(ЗначенияСвойств); + Возврат ОбменДаннымиПовтИсп.МассивУзловПоЗначениямСвойств( + ЗначенияСвойствСтрока, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); Иначе @@ -2062,7 +2120,16 @@ КонецФункции // Возвращает массив узлов плана обмена по заданным параметрам запроса и тексту запроса к таблице плана обмена. -// +// +// Параметры: +// ЗначенияСвойств - Структура - значения свойств объекта +// ТекстЗапроса - Строка +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// ИмяРеквизитаФлага - Строка +// Выгрузка - Булево +// +// Возвращаемое значение: +// Массив из ПланОбменаСсылка - массив узлов по значениям свойств // Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, Знач ТекстЗапроса, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт @@ -2224,13 +2291,13 @@ КонецФункции // Создает набор записей для регистра. -// -// Параметры: -// ОбъектМетаданных регистра - для получения набора записей. -// +// +// Параметры: +// ОбъектМетаданных - ОбъектМетаданных - объект метаданных, предусматривающий набор записей +// // Возвращаемое значение: -// НаборЗаписей - в случае если для объекта метаданных не предусмотрено набора записей -// вызывается исключение. +// РегистрСведенийНаборЗаписей, РегистрРасчетаНаборЗаписей, РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей, ПоследовательностьНаборЗаписей - набор записей. // Функция НаборЗаписейПоТипу(ОбъектМетаданных) @@ -3513,12 +3580,12 @@ КонецПроцедуры // Получает текущее значение набора записей в информационной базе. -// +// // Параметры: -// Данные - набор записей регистров. -// +// Данные - Произвольный - произвольные данные +// // Возвращаемое значение: -// НаборЗаписей - содержащий текущее значение в информационной базе. +// см. НаборЗаписейПоТипу // Функция НаборЗаписей(Знач Данные) diff --git a/SSL/src/CommonModules/ОбменДаннымиТрансляцияФорматаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиТрансляцияФорматаПовтИсп/Module.bsl index 154e4f339..6062d99fa 100644 --- a/SSL/src/CommonModules/ОбменДаннымиТрансляцияФорматаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиТрансляцияФорматаПовтИсп/Module.bsl @@ -14,6 +14,7 @@ // // Возвращаемое значение: // Строка +// Функция ТранслироватьИмя(Имя, НаправлениеПеревода) Экспорт Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index d49a983fa..643e59183 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -8,9 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для использования в обработчиках обновления. -// +#Область ПроцедурыИФункцииДляИспользованияВОбработчикахОбновления // Записывает изменения в переданном объекте. // Для использования в обработчиках обновления. @@ -34,6 +32,8 @@ Данные.Записать(); + ОбновлениеИнформационнойБазыПереопределяемый.ПослеЗаписиДанных(Данные); + Если ОбъектРегистрируетсяНаПланеОбмена(Данные) Тогда ОтметитьВыполнениеОбработки(Данные); КонецЕсли; @@ -112,6 +112,8 @@ НаборЗаписей.Записать(Замещать); + ОбновлениеИнформационнойБазыПереопределяемый.ПослеЗаписиДанных(НаборЗаписей); + Если ОбъектРегистрируетсяНаПланеОбмена(НаборЗаписей) Тогда ОтметитьВыполнениеОбработки(НаборЗаписей); КонецЕсли; @@ -152,9 +154,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для проверки доступности объекта при выполнении отложенного обновления. -// +#КонецОбласти + +#Область ПроцедурыИФункцииДляПроверкиДоступностиОбъектаПриВыполненииОтложенногоОбновления // Вызывает исключение или блокирует форму от редактирования, если // имеются незавершенные отложенные обработчики обновления, @@ -709,6 +711,8 @@ // г) запись наборов в процессе обновления должна проходить с тем же отбором, // что и регистрация необходимости обработки; // д) в ДополнительныеПараметры нужно передать соответствующий признак и полное имя регистра. +// - РезультатЗапроса - для ссылочных объектов (требуется колонка Ссылка) и независимых регистров +// сведений (см. ограничения выше) // ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. // Процедура ОтметитьКОбработке(ОсновныеПараметры, Данные, ДополнительныеПараметры = Неопределено) Экспорт @@ -717,9 +721,9 @@ ДополнительныеПараметры = ДополнительныеПараметрыОтметкиОбработки(); КонецЕсли; - Если (ТипЗнч(Данные) = Тип("Массив") - Или ТипЗнч(Данные) = Тип("ТаблицаЗначений")) - И Данные.Количество() = 0 Тогда + Если ТипЗнч(Данные) = Тип("Массив") И Данные.Количество() = 0 + Или ТипЗнч(Данные) = Тип("ТаблицаЗначений") И Данные.Количество() = 0 + Или ТипЗнч(Данные) = Тип("РезультатЗапроса") И Данные.Пустой() Тогда Возврат; КонецЕсли; @@ -821,7 +825,8 @@ ДополнительныеПараметры.ПолноеИмяРегистра); Иначе - Если ТипЗнч(Данные) = Тип("Массив") Или ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда + Если ТипЗнч(Данные) = Тип("Массив") Или ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) + ИЛИ (ТипЗнч(Данные) = Тип("РезультатЗапроса") И Данные.Колонки.Найти("Ссылка") <> Неопределено) Тогда ЗарегистрироватьИзмененияОбъекта(ОсновныеПараметры, Узел, Данные, "Ссылка"); Иначе Если ТипЗнч(Данные) = Тип("ОбъектМетаданных") Тогда @@ -961,6 +966,7 @@ ДополнительныеПараметры.Вставить("ПерваяЗапись"); ДополнительныеПараметры.Вставить("ПоследняяЗапись"); ДополнительныеПараметры.Вставить("ОптимизироватьВыборкуПоСтраницам", Истина); + ДополнительныеПараметры.Вставить("АвтоматическаяВыборкаПорции", Ложь); Возврат ДополнительныеПараметры; @@ -1263,6 +1269,8 @@ // Функция ВыбратьРегистраторыРегистраДляОбработки(Очередь, ПолноеИмяДокумента, ПолноеИмяРегистра, ДополнительныеПараметры = Неопределено) Экспорт + ПроверитьПараметрыМногопоточности(ДополнительныеПараметры, ПолноеИмяРегистра); // АПК:1036 Орфография не нарушена + Если ДополнительныеПараметры = Неопределено Тогда ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); КонецЕсли; @@ -1425,6 +1433,9 @@ // ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра. // Функция ВыбратьСсылкиДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт + + ПроверитьПараметрыМногопоточности(ДополнительныеПараметры, ПолноеИмяОбъекта); // АПК:1036 Орфография не нарушена + Если ДополнительныеПараметры = Неопределено Тогда ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); КонецЕсли; @@ -1680,6 +1691,9 @@ // ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра. // Функция ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт + + ПроверитьПараметрыМногопоточности(ДополнительныеПараметры, ПолноеИмяОбъекта); // АПК:1036 Орфография не нарушена + Если ДополнительныеПараметры = Неопределено Тогда ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); КонецЕсли; @@ -1714,7 +1728,8 @@ |"; КонецЕсли; - ФильтрАктуальныхДанных = ОбновлениеИнформационнойБазыСлужебный.ФильтрАктуальныхДанных(ПараметрыОбработчикаОбновления, "ТаблицаИзменений"); + ФильтрАктуальныхДанных = ОбновлениеИнформационнойБазыСлужебный.ФильтрАктуальныхДанных(ПараметрыОбработчикаОбновления, + "ТаблицаИзменений"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеАктуальныеДанные", ФильтрАктуальныхДанных.Условие); Если ФильтрАктуальныхДанных.ЕстьФильтр Тогда ТекстЗапросаПроверки = @@ -1769,10 +1784,7 @@ СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); ДобавитьПроверкуБлокировкиДополнительныхИсточниковДляНезависимогоРегистра(Очередь, - ТекстЗапроса, - ПолноеИмяОбъекта, - МенеджерВременныхТаблиц, - ДополнительныеПараметры); + ТекстЗапроса, ПолноеИмяОбъекта, МенеджерВременныхТаблиц, ДополнительныеПараметры); Запрос.Текст = ТекстЗапроса; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; @@ -1797,7 +1809,8 @@ // // Параметры: // Очередь - Число - очередь обработки, в которой выполняется текущий обработчик. -// ПолноеИмяОбъекта - Строка - полное имя объекта, для которого выполняется проверка, например Справочник.Номенклатура. +// ПолноеИмяОбъекта - Строка - полное имя объекта, для которого выполняется проверка, +// например Справочник.Номенклатура. // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица. // ДополнительныеПараметры - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. // @@ -1810,7 +1823,8 @@ // * ЕстьДанныеДляОбработки - Булево - в очереди есть данные для обработки, т.е. еще не все обработано. // * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. // -Функция СоздатьВременнуюТаблицуИзмеренийНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт +Функция СоздатьВременнуюТаблицуИзмеренийНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, + МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); @@ -1883,10 +1897,7 @@ СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); ДобавитьПроверкуБлокировкиДополнительныхИсточниковДляНезависимогоРегистра(Очередь, - ТекстЗапроса, - ПолноеИмяОбъекта, - МенеджерВременныхТаблиц, - ДополнительныеПараметры); + ТекстЗапроса, ПолноеИмяОбъекта, МенеджерВременныхТаблиц, ДополнительныеПараметры); ТекущаяОчередь = ОчередьСсылкой(Очередь); @@ -1912,15 +1923,16 @@ // Проверяет, есть ли еще необработанные данные. // // Параметры: -// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, -// которые он будет обрабатывать. -// - Неопределено - проверяется, завершена ли обработка в целом; -// - Массив - проверяется, есть данные для обработки в списке очередей. +// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, +// которые он будет обрабатывать. +// - Неопределено - проверить, завершена ли обработка в целом. +// - Массив из Число - проверить, есть данные для обработки в списке очередей. // ПолноеИмяМетаданныеОбъекта - Строка -// - ОбъектМетаданных - полное имя обрабатываемого объекта или -// его метаданные. Например, "Документ.ПриходныйОрдерНаТовары" -// - Массив - массив полных имен объектов или объектов метаданных, -// в массиве не должно быть независимых регистров сведений. +// - ОбъектМетаданных - полное имя обрабатываемого объекта или его метаданные. +// Например, "Документ.ПриходныйОрдерНаТовары" +// - Массив из Строка +// - Массив из ОбъектМетаданных - полные имена объектов или объекты метаданных. +// В массиве не должно быть независимых регистров сведений. // Отбор - ЛюбаяСсылка // - Структура // - Неопределено @@ -1949,8 +1961,9 @@ ПолныеИменаОбрабатываемыхОбъектов = Новый Массив; ПолныеИменаОбрабатываемыхОбъектов.Добавить(ПолноеИмяМетаданныеОбъекта.ПолноеИмя()); Иначе - ТекстИсключения = НСтр("ru = 'Передан неправильный тип параметра ""%1"" в функцию %2'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ПолноеИмяМетаданныеОбъекта", "ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки"); + ТекстИсключения = НСтр("ru = 'Неправильный тип параметра ""%1"" при вызове функции %2.'"); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, + "ПолноеИмяМетаданныеОбъекта", "ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки"); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1976,7 +1989,6 @@ УсловиеОтбораДанных = "ИСТИНА"; УсловиеПроверкиРегистратора = "ИСТИНА"; - Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) Тогда ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 @@ -2182,15 +2194,19 @@ // Проверяет, что все данные обработаны. // // Параметры: -// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, -// которые он будет обрабатывать. -// - Неопределено - проверяется, завершена ли обработка в целом; -// - Массив - проверяется, есть ли данные для обработки в списке очередей. +// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, +// которые он будет обрабатывать. +// - Неопределено - проверяется, завершена ли обработка в целом. +// - Массив из Число - проверяется, есть ли данные для обработки в списке очередей. // ПолноеИмяМетаданныеОбъекта - Строка -// - ОбъектМетаданных - полное имя обрабатываемого объекта или -// его метаданные. Например, "Документ.ПриходныйОрдерНаТовары" -// - Массив - массив полных имен объектов или объектов метаданных, -// в массиве не должно быть независимых регистров сведений. +// - ОбъектМетаданных - для обработчиков, которые изменяют данные нескольких объектов метаданных, +// полное имя или метаданные обрабатываемого объекта. +// Например, "Документ.ПриходныйОрдерНаТовары". +// Если не указано, то используется значение свойства обработчика +// ИзменяемыеОбъекты. +// - Массив из Строка +// - Массив из ОбъектМетаданных - полные имена объектов или объекты метаданных. +// В массиве не должно быть независимых регистров сведений. // Отбор - ЛюбаяСсылка // - Структура // - Неопределено @@ -2205,7 +2221,24 @@ // Возвращаемое значение: // Булево - Истина, если все данные обработаны. // -Функция ОбработкаДанныхЗавершена(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор = Неопределено) Экспорт +Функция ОбработкаДанныхЗавершена(Очередь, ПолноеИмяМетаданныеОбъекта = "", Отбор = Неопределено) Экспорт + + Если ПолноеИмяМетаданныеОбъекта = "" Тогда + МассивИменМетаданных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ПараметрыСеанса.ПараметрыОбработчикаОбновления.ИзменяемыеОбъекты, ",", , Истина); + Если МассивИменМетаданных.Количество() = 1 Тогда + ПолноеИмяМетаданныеОбъекта = ПараметрыСеанса.ПараметрыОбработчикаОбновления.ИзменяемыеОбъекты; + ИначеЕсли МассивИменМетаданных.Количество() > 1 Тогда + ТекстСообщения = НСтр("ru = 'Необходимо указать параметр %1 при вызове функции %2.'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, + "ПолноеИмяМетаданныеОбъекта", "ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена"); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); + Иначе + ТекстСообщения = НСтр("ru = 'Необходимо указать свойство %1 обработчика обновления.'"); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "ИзменяемыеОбъекты"); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + КонецЕсли; Возврат Не ЕстьДанныеДляОбработки(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор); @@ -2218,10 +2251,11 @@ // - Неопределено - очередь, к которой отнесен обработчик и в которой // зарегистрированы данные, которые он будет обрабатывать. // ПолноеИмяМетаданныеОбъекта - Строка -// - ОбъектМетаданных - полное имя обрабатываемого объекта или -// его метаданные. Например, "Документ.ПриходныйОрдерНаТовары" -// - Массив - массив полных имен объектов или объектов метаданных, -// в массиве не должно быть независимых регистров сведений. +// - ОбъектМетаданных - полное имя обрабатываемого объекта или его метаданные. +// Например, "Документ.ПриходныйОрдерНаТовары" +// - Массив из Строка +// - Массив из ОбъектМетаданных - полные имена или объекты метаданных. +// В массиве не должно быть независимых регистров сведений. // // Возвращаемое значение: // Булево - Истина, если данный объект заблокирован для обработки меньшими очередями. @@ -2814,8 +2848,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Проверить необходимость обновления информационной базы при смене версии конфигурации. // @@ -3898,6 +3933,8 @@ КонецПроцедуры +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы @@ -3916,40 +3953,54 @@ КонецФункции +// Возвращает Истина, если доступен просмотр изменений в новой версии приложения. +// +// Возвращаемое значение: +// Булево +// +Функция ДоступенПросмотрОписанияИзмененийПрограммы() Экспорт + + Возврат ПравоДоступа("Просмотр", Метаданные.ОбщиеФормы.ОписаниеИзмененийПрограммы); + +КонецФункции + // Конец ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Начальное заполнение элементов. - #Область ЗаполнениеПредопределенныхЭлементов //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. -// Зарегистрировать предопределенные элементы для обновления в обработчике обновления. +// Зарегистрировать предопределенные элементы для отложенного обработчика обновления, в котором +// заполняются или обновляются предопределенные элементы справочника или плана видов характеристик. +// Используется совместно с процедурами ЗаполнитьЭлементыНачальнымиДанными или ОбновитьПредопределенныеЭлементы. // // Параметры: // Параметры - Структура - служебные параметры обработчика обновления. // ОбъектМетаданных - ОбъектМетаданных -// - Неопределено - обновляемые объекты +// - Неопределено - обновляемые объекты. // ДополнительныеПараметры - Структура: // * РежимОбновления - Строка - определяет вариант регистрация предопределенных элементов для обновления. Варианты: -// Все - будут зарегистрированы все предопределенные элементы; -// НовыеИИзмененные - обновляет только новые и измененные; -// МультиязычныеСтроки - только, если были изменения в мультиязычных реквизитах. +// "Все" - нужно зарегистрировать все предопределенные элементы; +// "НовыеИИзмененные" - обновить только новые и измененные; +// "МультиязычныеСтроки" - обновить, если были изменения в мультиязычных реквизитах. // * ПропускатьПустые - Булево - если Истина, то пустые строки в поставляемых данных исключаются из проверки на изменение. // Например, объект не будет зарегистрирован, когда в ИБ реквизит заполнен, а в коде пустая строка. // * СравниватьТабличныеЧасти - Булево - если Ложь, то табличные части игнорируются и не будут сравниваться на различие. // -Процедура ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры, ОбъектМетаданных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт +Процедура ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры, ОбъектМетаданных = Неопределено, + ДополнительныеПараметры = Неопределено) Экспорт - ОбновлениеИнформационнойБазыСлужебный.ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры, ОбъектМетаданных, ДополнительныеПараметры); + ОбновлениеИнформационнойБазыСлужебный.ЗарегистрироватьПредопределенныеЭлементыДляОбновления(Параметры, ОбъектМетаданных, + ДополнительныеПараметры); КонецПроцедуры -// Заполняет предопределенные элементы объекта в обработчике обновления поставляемыми данными. +// Заполняет предопределенные элементы объекта в соответствие с начальным заполнением в обработчике +// ПриНачальномЗаполненииЭлементов модуля менеджера объекта. +// Для вызова из отложенного обработчика обновления. // // Параметры: // Параметры - Структура- служебные параметры обработчика обновления. @@ -3971,11 +4022,12 @@ КонецПроцедуры -// Заполнить объект предопределенными данными из кода начального заполнения +// Заполнить объект в соответствие с начальным заполнением в обработчике ПриНачальномЗаполненииЭлементов модуля +// менеджера объекта. // // Параметры: // ЗаполняемыйОбъект - СправочникОбъект -// - ПланВидовХарактеристикОбъект - заполняемый объект +// - ПланВидовХарактеристикОбъект - заполняемый объект. // НастройкиЗаполнения - см. НастройкиЗаполнения // Процедура ЗаполнитьОбъектНачальнымиДанными(ЗаполняемыйОбъект, НастройкиЗаполнения) Экспорт @@ -3984,12 +4036,13 @@ КонецПроцедуры -// Обновляет предопределенные элементы данными из кода начального заполнения +// Обновляет предопределенные элементы данными в соответствие с начальным заполнением в обработчике +// ПриНачальномЗаполненииЭлементов модуля менеджера объекта ОбъектМетаданных. // // Параметры: -// ОбъектМетаданных - ОбъектМетаданных - обновляемый объект с предопределенными элементами. +// ОбъектМетаданных - ОбъектМетаданных - обновляемый справочник или план видов характеристик. // ПараметрыОбновления - см. ПараметрыОбновленияПредопределенныхЭлементов -// - Неопределено - будут обновлены все предопределенные элементы +// - Неопределено - необходимо обновить все предопределенные элементы. // Процедура ОбновитьПредопределенныеЭлементы(ОбъектМетаданных, ПараметрыОбновления = Неопределено) Экспорт @@ -4466,7 +4519,7 @@ Если ПолноеИмяОбъекта = Неопределено Тогда ТекстИсключения = НСтр("ru = 'Ошибка вызова функции %ИмяФункции%: не передано имя документа, но переданы дополнительные источники данных.'"); ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяФункции%", "ОбновлениеИнформационнойБазы.ДобавитьПроверкуБлокировкиДополнительныхИсточников"); - ВызватьИсключение ТекстИсключения; + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; МетаданныеДокумента = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ПолноеИмяОбъекта); @@ -4687,7 +4740,8 @@ ЕстьОтборПоИзмерению = Ложь; - Если ТипЗнч(УстанавливаемыеОтборы) = Тип("ТаблицаЗначений") Тогда + Если ТипЗнч(УстанавливаемыеОтборы) = Тип("ТаблицаЗначений") + ИЛИ ТипЗнч(УстанавливаемыеОтборы) = Тип("РезультатЗапроса") Тогда ЕстьОтборПоИзмерению = УстанавливаемыеОтборы.Колонки.Найти(Измерение.Имя) <> Неопределено; Иначе //Отбор ЕстьОтборПоИзмерению = УстанавливаемыеОтборы[Измерение.Имя].Использование; @@ -4701,7 +4755,8 @@ Если МетаданныеНабора.ОсновнойОтборПоПериоду Тогда - Если ТипЗнч(УстанавливаемыеОтборы) = Тип("ТаблицаЗначений") Тогда + Если ТипЗнч(УстанавливаемыеОтборы) = Тип("ТаблицаЗначений") + ИЛИ ТипЗнч(УстанавливаемыеОтборы) = Тип("ВыборкаИзРезультатаЗапроса") Тогда ЕстьОтборПоИзмерению = УстанавливаемыеОтборы.Колонки.Найти("Период") <> Неопределено; Иначе //Отбор ЕстьОтборПоИзмерению = УстанавливаемыеОтборы.Период.Использование; @@ -4750,13 +4805,28 @@ ПараметрыРегистрации = НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта); - Для Каждого Ссылка Из МассивЭлементов(Ссылки) Цикл - Если Ссылка.Пустая() Тогда - Продолжить; - КонецЕсли; + Если ТипЗнч(Ссылки) = Тип("РезультатЗапроса") Тогда - ЗарегистрироватьИзмененияЭлементаДанных(Ссылка, ПараметрыРегистрации); - КонецЦикла; + Выборка = Ссылки.Выбрать(); + Пока Выборка.Следующий() Цикл + Если Выборка.Ссылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + ЗарегистрироватьИзмененияЭлементаДанных(Выборка.Ссылка, ПараметрыРегистрации); + КонецЦикла; + + Иначе + + Для Каждого Ссылка Из МассивЭлементов(Ссылки) Цикл + Если Ссылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + ЗарегистрироватьИзмененияЭлементаДанных(Ссылка, ПараметрыРегистрации); + КонецЦикла; + + КонецЕсли; ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации); @@ -4787,13 +4857,13 @@ КонецПроцедуры -// Зарегистрировать изменения независимого регистра по таблице значений, +// Зарегистрировать изменения независимого регистра по таблице значений или результату запроса // где колонки - это измерения, а строки - это регистрируемые записи. // // Параметры: // Параметры - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. // Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы. -// Записи - ТаблицаЗначений. +// Записи - ТаблицаЗначений или РезультатЗапроса. // ВидДанных - Строка. // ПолноеИмяОбъекта - Строка. // @@ -4802,22 +4872,57 @@ ПараметрыРегистрации = НовыеПараметрыРегистрации(Параметры, Узел, ВидДанных, ПолноеИмяОбъекта); МетаданныеРегистра = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ПолноеИмяОбъекта); - Для Каждого Запись Из Записи Цикл - Набор = ПолучитьПереиспользуемыйНабор(ПараметрыРегистрации.ПереиспользуемыеНаборы); - УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеРегистра, Записи); + Если ТипЗнч(Записи) = Тип("ТаблицаЗначений") Тогда - Для Каждого Колонка Из Записи.Колонки Цикл - Набор.Отбор[Колонка.Имя].Значение = Запись[Колонка.Имя]; - Набор.Отбор[Колонка.Имя].Использование = Истина; + Для Каждого Запись Из Записи Цикл + ЗарегистрироватьИзмененияНабораНезависимогоРегистраСведений(ПараметрыРегистрации, + Узел, + МетаданныеРегистра, + Запись, + Записи); КонецЦикла; - ЗарегистрироватьИзмененияЭлементаДанных(Набор, ПараметрыРегистрации); - КонецЦикла; + ИначеЕсли ТипЗнч(Записи) = Тип("РезультатЗапроса") Тогда + + ВыборкаЗаписи = Записи.Выбрать(); + Пока ВыборкаЗаписи.Следующий() Цикл + ЗарегистрироватьИзмененияНабораНезависимогоРегистраСведений(ПараметрыРегистрации, + Узел, + МетаданныеРегистра, + ВыборкаЗаписи, + Записи); + КонецЦикла; + + КонецЕсли; ЗавершитьРегистрациюПорцииДанных(ПараметрыРегистрации); КонецПроцедуры +// Зарегистрировать изменения набор независимого регистра по таблице значений или результату запроса +// где колонки - это измерения, а строки - это регистрируемые записи. +// +// Параметры: +// Параметры - см. НовыеПараметрыРегистрации. +// Узел - ПланОбменаСсылка.ОбновлениеИнформационнойБазы. +// МетаданныеРегистра - ОбъектМетаданных независимого регистра. +// Запись - СтрокаТаблицыЗначений или ВыборкаИзРезультатаЗапроса. +// Записи - ТаблицаЗначений или РезультатЗапроса. +// +Процедура ЗарегистрироватьИзмененияНабораНезависимогоРегистраСведений(Параметры, Узел, МетаданныеРегистра, Запись, Записи) + + Набор = ПолучитьПереиспользуемыйНабор(Параметры.ПереиспользуемыеНаборы); + УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеРегистра, Записи); + + Для Каждого Колонка Из Записи.Колонки Цикл + Набор.Отбор[Колонка.Имя].Значение = Запись[Колонка.Имя]; + Набор.Отбор[Колонка.Имя].Использование = Истина; + КонецЦикла; + + ЗарегистрироватьИзмененияЭлементаДанных(Набор, Параметры); + +КонецПроцедуры + // Зарегистрировать элемент данных в таблице регистрации изменений, // увеличить счетчик зарегистрированных данных // и записать данные для обновления в файл рИБ (необходимо в случае РИБ с фильтрами). @@ -6888,7 +6993,7 @@ |ГДЕ | ТаблицаИзменения.Узел = &Узел | И ТаблицаИзменения.Ссылка = &Ссылка"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяТаблицыИзменений", ПолноеИмя + ".Изменения"); // @query-part + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяТаблицыИзменений", ПолноеИмя + ".Изменения"); // @query-part-2 Если Не Запрос.Выполнить().Пустой() Тогда ОбъектовОбработано = 1; КонецЕсли; @@ -6951,4 +7056,22 @@ КонецПроцедуры +Процедура ПроверитьПараметрыМногопоточности(ДополнительныеПараметры, ИмяОбъекта) // АПК:1036 Орфография не нарушена + + Если ПараметрыСеанса.ПараметрыОбработчикаОбновления.Многопоточный + И (ДополнительныеПараметры = Неопределено + ИЛИ Не (ДополнительныеПараметры.Свойство("АвтоматическаяВыборкаПорции") + И ДополнительныеПараметры.АвтоматическаяВыборкаПорции)) Тогда + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для многопоточного обработчика %1 необходимо вызывать метод %2 модуля %3.'"), + ИмяОбъекта, + "ДанныеДляОбновленияВМногопоточномОбработчике", + "ОбновлениеИнформационнойБазы"); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСД/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСД/Module.bsl index 7a9348dac..9fd99ccc7 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСД/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСД/Module.bsl @@ -10,8 +10,7 @@ #Область ДляВызоваИзДругихПодсистем -//////////////////////////////////////////////////////////////////////////////// -// Сведения о библиотеке (или конфигурации). +#Область СведенияОБиблиотекеИлиКонфигурации // Заполняет основные сведения о библиотеке или основной конфигурации. // Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация. @@ -39,15 +38,16 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "БиблиотекаСинхронизацииДанных"; - Описание.Версия = "1.0.3.534"; + Описание.Версия = "1.0.4.183"; Описание.ИдентификаторИнтернетПоддержки = "DSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "1.0.1.1"; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления информационной базы. +#КонецОбласти + +#Область ОбработчикиОбновленияИнформационнойБазы // Добавляет в список процедуры-обработчики обновления данных ИБ // для всех поддерживаемых версий библиотеки или конфигурации. @@ -258,3 +258,5 @@ #КонецОбласти #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 9708d8a89..21cf29961 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -12,8 +12,7 @@ // СтандартныеПодсистемы.ОбновлениеВерсииИБ -//////////////////////////////////////////////////////////////////////////////// -// Сведения о библиотеке (или конфигурации). +#Область СведенияОБиблиотекеИлиКонфигурации // Заполняет основные сведения о библиотеке или основной конфигурации. // Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация. @@ -45,7 +44,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "3.1.10.492"; + Описание.Версия = "3.1.11.142"; Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; @@ -53,8 +52,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления информационной базы. +#КонецОбласти + +#Область ОбработчикиОбновленияИнформационнойБазы // Добавляет в список процедуры-обработчики обновления данных ИБ // для всех поддерживаемых версий библиотеки или конфигурации. @@ -263,3 +263,5 @@ #КонецОбласти #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index 3945271f8..b361ed8f8 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -31,8 +31,7 @@ ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.РезультатыОбновленияПрограммы"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы. Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт @@ -255,6 +254,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура РазблокироватьОбъектДляРедактирования(МассивОбъектов, ДополнительныеПараметры) Экспорт @@ -500,4 +501,4 @@ КонецЕсли; КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index 33d7463da..2673065b3 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -295,6 +295,17 @@ +КонецПроцедуры + +// Вызывается после записи данных обработчиком обновления, но до отметки обработки. +// +// Параметры: +// Данные - Произвольный - объект, набор записей или менеджер константы. +// +Процедура ПослеЗаписиДанных(Данные) Экспорт + + + КонецПроцедуры #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index a31e75152..997545c11 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -655,20 +655,13 @@ Возврат Ложь; КонецЕсли; - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + МодульЛегальностьПолученияОбновлений = ОбщегоНазначения.ОбщийМодуль("Обработки.ЛегальностьПолученияОбновлений"); + Результат = МодульЛегальностьПолученияОбновлений.ТребуетсяПроверитьЛегальностьПолученияОбновления(); + Если Не Результат Тогда Возврат Ложь; КонецЕсли; ЛегальнаяВерсия = ""; - Если РежимОбновленияДанныхВЛокальномРежимеРаботы() = "НачальноеЗаполнение" Тогда ЛегальнаяВерсия = Метаданные.Версия; Иначе @@ -916,7 +909,7 @@ КонецЕсли; МенеджерКонстанты = Константы.СведенияОбОбновленииИБ.СоздатьМенеджерЗначения(); - МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение, Новый СжатиеДанных(9)); ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); КонецПроцедуры @@ -1124,7 +1117,7 @@ УстановитьСвойствоОбработчика(Идентификатор, "СтатистикаВыполнения", - Новый ХранилищеЗначения(СтатистикаВыполнения)); + Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9))); КонецПроцедуры // Возвращает количество потоков обновления информационной базы. @@ -1610,8 +1603,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт @@ -2554,6 +2546,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ДоступнаРучнаяПроверкаНаличияИсправления() Экспорт @@ -3853,8 +3847,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Протоколирование хода обновления. +#Область ПротоколированиеХодаОбновления // Возвращает строковую константу для формирования сообщений журнала регистрации. // @@ -3879,8 +3872,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Описание обновлений +#КонецОбласти + +#Область ОписаниеОбновлений // Формирует табличный документ с описанием изменений в версиях, // которые соответствуют переданному списку версий Разделы. @@ -3949,8 +3943,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Механизм отложенного обновления. +#КонецОбласти + +#Область МеханизмОтложенногоОбновления // Планирует выполнение отложенного обновления в клиент-серверной базе. // @@ -4912,8 +4907,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Механизм многопоточного обновления. +#КонецОбласти + +#Область МеханизмМногопоточногоОбновления // Имя группы потоков регистрации данных для отложенного обновления. // @@ -5191,7 +5187,7 @@ Попытка УстановитьСвойствоОбработчика(ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(Описание)); + Новый ХранилищеЗначения(Описание, Новый СжатиеДанных(9))); СохранитьПотокОбновления(Поток); ЗафиксироватьТранзакцию(); Исключение @@ -5371,7 +5367,7 @@ УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "СтатистикаВыполнения", - Новый ХранилищеЗначения(СтатистикаВыполнения)); + Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9))); КонецПроцедуры @@ -5596,8 +5592,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Механизм работы с потоками. +#КонецОбласти + +#Область МеханизмРаботыСПотоками Процедура СохранитьПотокОбновления(Поток) @@ -5617,8 +5614,8 @@ ЗаполнитьЗначенияСвойств(Запись, Поток, , "ИдентификаторПотока,ПараметрыПроцедуры,ПараметрыПроцедурыЗавершения"); Запись.ИдентификаторПотока = Идентификатор; - Запись.ПараметрыПроцедуры = Новый ХранилищеЗначения(Поток.ПараметрыПроцедуры); - Запись.ПараметрыПроцедурыЗавершения = Новый ХранилищеЗначения(Поток.ПараметрыПроцедурыЗавершения); + Запись.ПараметрыПроцедуры = Новый ХранилищеЗначения(Поток.ПараметрыПроцедуры, Новый СжатиеДанных(9)); + Запись.ПараметрыПроцедурыЗавершения = Новый ХранилищеЗначения(Поток.ПараметрыПроцедурыЗавершения, Новый СжатиеДанных(9)); НаборЗаписей.Записать(); @@ -5944,8 +5941,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Механизм многопоточного выполнения обработчика обновления. +#КонецОбласти + +#Область МеханизмМногопоточногоВыполненияОбработчикаОбновления // Найти порцию данных для потока обработчика обновления. // @@ -5956,11 +5954,26 @@ Процедура НайтиПорциюДляОбновления(ПараметрыПоиска, АдресРезультата) Экспорт ПараметрыВыборки = ПараметрыПоиска.ПараметрыВыборки; - ПроверитьПараметрыВыборки(ПараметрыВыборки); + ПроверитьПараметрыВыборки(ПараметрыВыборки, ПараметрыПоиска.КонтекстОбработчика.ИмяОбработчика); ПараметрыВыборки.МаксимумВыборки = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); ПоляУпорядочивания = ПоляУпорядочиванияПриПоискеПорций(ПараметрыПоиска); ПараметрыВыборки.ПоляУпорядочивания = ПоляУпорядочивания; - ПараметрыВыборки.ОптимизироватьВыборкуПоСтраницам = Не ЕстьУпорядочиваниеПоВнешнимТаблицам(ПоляУпорядочивания); + УпорядочиваниеПоВнешнимТаблицам = ЕстьУпорядочиваниеПоВнешнимТаблицам(ПоляУпорядочивания); + + Если УпорядочиваниеПоВнешнимТаблицам Тогда + Если ОбщегоНазначения.РежимОтладки() Тогда + ТекстСообщения = НСтр( + "ru = 'Поля упорядочивания обработчиков обновлений не могут содержать обращения через точку.'"); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); + Иначе + ТекстСообщения = НСтр( + "ru = 'Не рекомендуется использовать обращение через точку в полях упорядочивания обработчиков обновлений.'"); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); + КонецЕсли; + КонецЕсли; + + ПараметрыВыборки.ОптимизироватьВыборкуПоСтраницам = Не УпорядочиваниеПоВнешнимТаблицам; Максимум = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); ПараметрыОбхода = ПараметрыОбходаДанныхДляОбновления(ПараметрыПоиска); @@ -6030,7 +6043,7 @@ // Параметры: // ПараметрыВыборки - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляМногопоточнойОбработки // -Процедура ПроверитьПараметрыВыборки(ПараметрыВыборки) +Процедура ПроверитьПараметрыВыборки(ПараметрыВыборки, ПроцедураЗаполненияДанныхОбновления) СпособВыборки = ПараметрыВыборки.СпособВыборки; ИзвестныйСпособ = (СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений()) @@ -6038,10 +6051,9 @@ Или (СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки()); Если Не ИзвестныйСпособ Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Укажите способ выборки в процедуре регистрации данных к обновлению. - |Указывается в ""%1"". - |Сейчас указан неизвестный способ выборки ""%2"".'"), - СпособВыборки, "Параметры.ПараметрыВыборки.СпособВыборки"); + "ru = 'Укажите способ выборки %1 в процедуре регистрации данных к обновлению %2. + |Указан неизвестный способ выборки ""%3"".'"), + "Параметры.ПараметрыВыборки.СпособВыборки", ПроцедураЗаполненияДанныхОбновления, СпособВыборки); ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; @@ -6049,10 +6061,10 @@ Или Не ПустаяСтрока(ПараметрыВыборки.ПолныеИменаРегистров); Если Не ТаблицыУказаны Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Укажите обрабатываемые таблицы в процедуре регистрации данных к обновлению. - |Указывается в ""%1"" и/или - |""%2"".'"), - "Параметры.ПараметрыВыборки.ПолныеИменаОбъектов", "Параметры.ПараметрыВыборки.ПолныеИменаРегистров"); + "ru = 'Укажите обрабатываемые таблицы в процедуре регистрации данных к обновлению %1. + |Указывается в ""%2"" и/или ""%3"".'"), + ПроцедураЗаполненияДанныхОбновления, "Параметры.ПараметрыВыборки.ПолныеИменаОбъектов", + "Параметры.ПараметрыВыборки.ПолныеИменаРегистров"); ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; @@ -6118,6 +6130,7 @@ Функция ВыбратьДанныеПорции(ПараметрыВыборки, Очередь, СсылочныйОбъект, ТабличныйОбъект) СпособВыборки = ПараметрыВыборки.СпособВыборки; + ПараметрыВыборки.Вставить("АвтоматическаяВыборкаПорции", Истина); Если СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений() Тогда Данные = ОбновлениеИнформационнойБазы.ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки( @@ -6426,7 +6439,7 @@ ОписаниеПроцедурыЗаполнения.ВыполняетсяПоискПорции = Ложь; УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения, Новый СжатиеДанных(9))); КонецПроцедуры @@ -6444,7 +6457,7 @@ Описание.ВыполняетсяПоискПорции = Ложь; УстановитьСвойствоОбработчика(Поток.ПараметрыПроцедуры.ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(Описание)); + Новый ХранилищеЗначения(Описание, Новый СжатиеДанных(9))); КонецПроцедуры @@ -6461,7 +6474,7 @@ Описание.ВыполняетсяПоискПорции = Ложь; УстановитьСвойствоОбработчика(Поток.ПараметрыПроцедуры.ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(Описание)); + Новый ХранилищеЗначения(Описание, Новый СжатиеДанных(9))); КонецПроцедуры @@ -6494,7 +6507,7 @@ УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения, Новый СжатиеДанных(9))); КонецПроцедуры @@ -6531,7 +6544,7 @@ УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения, Новый СжатиеДанных(9))); КонецПроцедуры @@ -6578,7 +6591,7 @@ Если ОписаниеПроцедурыЗаполнения.Свойство("ИмяОбработчика") Тогда УстановитьСвойствоОбработчика(ОписаниеПроцедурыЗаполнения.ИмяОбработчика, "ОбрабатываемыеДанные", - Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения, Новый СжатиеДанных(9))); КонецЕсли; КонецПроцедуры @@ -7041,8 +7054,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// НАЧАЛЬНОЕ ЗАПОЛНЕНИЕ ИНФОРМАЦИОННОЙ БАЗЫ +#КонецОбласти + +#Область НачальноеЗаполнениеИнформационнойБазы // Зарегистрировать предопределенные элементы для обновления в обработчике обновления. // @@ -7653,8 +7667,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ +#КонецОбласти + +#Область ОбработчикиОбновленияИнформационнойБазы // Устанавливает ключ регламентного задания ОтложенноеОбновлениеИБ. // @@ -9460,11 +9475,11 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Общего назначения +#Область ВспомогательныеПроцедурыИФункции + +#Область ОбщегоНазначения Процедура УстановитьПорядокОтложенногоОбновления() Экспорт @@ -10446,8 +10461,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Протоколирование хода обновления. +#КонецОбласти + +#Область ПротоколированиеХодаОбновления Процедура ЗаписатьИнформацию(Знач Текст) Экспорт @@ -10490,8 +10506,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Описание обновлений +#КонецОбласти + +#Область ОписаниеОбновлений // Вывести описания изменений в указанной версии. // @@ -10675,8 +10692,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции отложенного обновления. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункцииОтложенногоОбновления Процедура ОбработчикПроверкиВеденияУчета(Проверка, ПараметрыПроверки) Экспорт @@ -10751,7 +10769,7 @@ ОбрабатываемыеДанные.ПоследняяВыбраннаяЗапись = Неопределено; ОбрабатываемыеДанные.ПоискЗавершен = Ложь; ПараметрыВыборки = ОбрабатываемыеДанные.ПараметрыВыборки; - ПроверитьПараметрыВыборки(ПараметрыВыборки); + ПроверитьПараметрыВыборки(ПараметрыВыборки, ОбработчикОбновления.ПроцедураЗаполненияДанныхОбновления); ПараметрыВыборки.МаксимумВыборки = ОбновлениеИнформационнойБазы.МаксимальноеКоличествоЗаписейВВыборке(); ПараметрыПоиска = НовыеПараметрыПоискаПорции(); ПараметрыПоиска.ПараметрыВыборки = ПараметрыВыборки; @@ -10876,7 +10894,7 @@ ЗапускиСПриоритетом = СтатистикаВыполнения["ЗапускиСПриоритетом"]; ЗапускиСПриоритетом = ?(ЗапускиСПриоритетом = Неопределено, 1, ?(ЗапускиСПриоритетом = 4, 0, ЗапускиСПриоритетом + 1)); СтатистикаВыполнения.Вставить("ЗапускиСПриоритетом", ЗапускиСПриоритетом); - УстанавливаемыеСвойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения)); + УстанавливаемыеСвойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9))); КонецЕсли; Если ЗапускиСПриоритетом = Неопределено Или ЗапускиСПриоритетом = 0 Тогда @@ -11154,12 +11172,12 @@ Свойства = Новый Структура; Свойства.Вставить("Статус", Перечисления.СтатусыОбработчиковОбновления.Выполняется); Свойства.Вставить("ОбработкаПорцииЗавершена", Ложь); - Свойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения)); + Свойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9))); УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, Свойства); ОбрабатываемыеДанные = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); Если ОбработчикОбновления.Многопоточный Тогда - ПроверитьПараметрыВыборки(ОбрабатываемыеДанные.ПараметрыВыборки); + ПроверитьПараметрыВыборки(ОбрабатываемыеДанные.ПараметрыВыборки, ОбработчикОбновления.ПроцедураЗаполненияДанныхОбновления); КонецЕсли; КонтекстОбработчика.НачалоОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); @@ -11268,7 +11286,7 @@ ОписаниеПроцедурыЗаполнения.ОбработанныеТаблицыРегистраторов = Новый Массив; КонецЕсли; ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОписаниеПроцедурыЗаполнения.ОбработанныеТаблицыРегистраторов, ОбработанныеТаблицыРегистраторов, Истина); - УстанавливаемыеСвойства.Вставить("ОбрабатываемыеДанные", Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения)); + УстанавливаемыеСвойства.Вставить("ОбрабатываемыеДанные", Новый ХранилищеЗначения(ОписаниеПроцедурыЗаполнения, Новый СжатиеДанных(9))); Если ОбщегоНазначения.КоллекцииИдентичны(ОписаниеПроцедурыЗаполнения.ОбработанныеТаблицыРегистраторов, ОписаниеПроцедурыЗаполнения.ЗарегистрированныеТаблицыРегистраторов) Тогда УстанавливаемыеСвойства.Вставить("ОбработаныАктуальныеДанные", Истина); @@ -11333,7 +11351,7 @@ СтатистикаВыполнения.Вставить("ДлительностьВыполнения", ДлительностьВыполнения); СтатистикаВыполнения.Вставить("КоличествоЗапусков", КоличествоЗапусковПроцедурыОбновления); - УстанавливаемыеСвойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения)); + УстанавливаемыеСвойства.Вставить("СтатистикаВыполнения", Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9))); УстанавливаемыеСвойства.Вставить("ДлительностьОбработки", ДлительностьВыполнения); УстановитьСвойстваОбработчика(ОбработчикОбновления.ИмяОбработчика, УстанавливаемыеСвойства); Исключение @@ -11362,7 +11380,7 @@ СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); УстановитьСвойствоОбработчика(ОбработчикОбновления.ИмяОбработчика, "СтатистикаВыполнения", - Новый ХранилищеЗначения(СтатистикаВыполнения)); + Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9))); Если КонтекстОбработчика.ЕстьНеЗакрытыеТранзакции Тогда // В случае нахождения вложенной транзакции обработчик обновления повторно не вызывается. @@ -11444,7 +11462,7 @@ КонецЕсли; МенеджерКонстанты = Константы.СведенияОБлокируемыхОбъектах.СоздатьМенеджерЗначения(); - МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение, Новый СжатиеДанных(9)); ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); КонецПроцедуры @@ -11795,6 +11813,7 @@ ПараметрыОбработчикаОбновления.ЕстьОбработанныеОбъекты = Ложь; ПараметрыОбработчикаОбновления.ИмяОбработчика = ИмяОбработчика; ПараметрыОбработчикаОбновления.ИзменяемыеОбъекты = УникальныеЗначенияЧерезЗапятую(ПолучениеСвойств.ИзменяемыеОбъекты); + ПараметрыОбработчикаОбновления.Многопоточный = ОбработчикОбновления.Многопоточный; Если Параллельно Тогда ОбрабатываемыеДанные = ОбработчикОбновления.ОбрабатываемыеДанные.Получить(); Если ТипЗнч(ОбрабатываемыеДанные) = Тип("Структура") @@ -11826,6 +11845,7 @@ ПараметрыОбработчикаОбновления.Вставить("ОбработанныеТаблицыРегистраторов", Неопределено); ПараметрыОбработчикаОбновления.Вставить("ДатаПоследнейЗаписиПрогресса", Неопределено); ПараметрыОбработчикаОбновления.Вставить("ОбработаноОбъектов", 0); + ПараметрыОбработчикаОбновления.Вставить("Многопоточный", Ложь); Возврат ПараметрыОбработчикаОбновления; КонецФункции @@ -12223,7 +12243,7 @@ СтатистикаВыполнения = МенеджерЗаписи.СтатистикаВыполнения; СтатистикаВыполнения = СтатистикаВыполнения.Получить(); СтатистикаВыполнения.Вставить("ЕстьОшибки", Истина); - МенеджерЗаписи.СтатистикаВыполнения = Новый ХранилищеЗначения(СтатистикаВыполнения); + МенеджерЗаписи.СтатистикаВыполнения = Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(); ЗафиксироватьТранзакцию(); @@ -12553,4 +12573,8 @@ КонецФункции +#КонецОбласти + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 18bc742e5..6861a5a55 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -85,7 +85,7 @@ КонецЦикла; КонецЕсли; - МенеджерЗаписи.ПланОбновления = Новый ХранилищеЗначения(ОписаниеПлана); + МенеджерЗаписи.ПланОбновления = Новый ХранилищеЗначения(ОписаниеПлана, Новый СжатиеДанных(9)); МенеджерЗаписи.Записать(); ЗафиксироватьТранзакцию(); @@ -401,6 +401,10 @@ Процедура ЗаполнитьПризнакЭтоОсновнаяКонфигурация(ПредыдущееИмяКонфигурации) Экспорт + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); + ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", ПредыдущееИмяКонфигурации); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИмяПодсистемы", ПредыдущееИмяКонфигурации); Запрос.Текст = @@ -412,19 +416,28 @@ |ГДЕ | ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы | И ВерсииПодсистемОбластейДанных.ЭтоОсновнаяКонфигурация = ЛОЖЬ"; - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - // У предыдущей конфигурации не стоит признак ЭтоОсновнаяКонфигурация. - МенеджерЗаписи = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ИмяПодсистемы = Выборка.ИмяПодсистемы; - МенеджерЗаписи.ОбластьДанныхВспомогательныеДанные = Выборка.ОбластьДанныхВспомогательныеДанные; - МенеджерЗаписи.Прочитать(); - - МенеджерЗаписи.ЭтоОсновнаяКонфигурация = Истина; - МенеджерЗаписи.Записать(); - КонецЦикла; + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + // У предыдущей конфигурации не стоит признак ЭтоОсновнаяКонфигурация. + МенеджерЗаписи = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ИмяПодсистемы = Выборка.ИмяПодсистемы; + МенеджерЗаписи.ОбластьДанныхВспомогательныеДанные = Выборка.ОбластьДанныхВспомогательныеДанные; + МенеджерЗаписи.Прочитать(); + + МенеджерЗаписи.ЭтоОсновнаяКонфигурация = Истина; + МенеджерЗаписи.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры Функция ОсновнаяКонфигурацияВОбластиДанных() Экспорт @@ -650,27 +663,39 @@ // Только для внутреннего использования. Процедура ПриОтметкеРегистрацииОтложенныхОбработчиковОбновления(ИмяПодсистемы, Значение, СтандартнаяОбработка) Экспорт - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - СтандартнаяОбработка = Ложь; + Если Не (ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()) Тогда + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); + Если ИмяПодсистемы <> Неопределено Тогда + ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", ИмяПодсистемы); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьНаборЗаписей(); Если ИмяПодсистемы <> Неопределено Тогда НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИмяПодсистемы); КонецЕсли; НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() = 0 Тогда - Возврат; - КонецЕсли; - Для Каждого ЗаписьРегистра Из НаборЗаписей Цикл ЗаписьРегистра.ВыполненаРегистрацияОтложенныхОбработчиков = Значение; КонецЦикла; НаборЗаписей.Записать(); - - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -1015,6 +1040,17 @@ ОшибкаУстановкиБлокировки = Ложь; + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); + ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", Метаданные.Имя); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + НачатьТранзакцию(); Попытка Попытка @@ -1024,23 +1060,10 @@ ВызватьИсключение; КонецПопытки; - Блокировка = Новый БлокировкаДанных; - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); - ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); - ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", Метаданные.Имя); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - Блокировка.Заблокировать(); СтатусОбласти = МодульРаботаВМоделиСервиса.СтатусОбластиДанных(Выборка.ОбластьДанных); - ВерсияОбласти = ВерсииОбластей[Выборка.ОбластьДанных]; - Если СтатусОбласти = Неопределено ИЛИ СтатусОбласти <> Перечисления["СтатусыОбластейДанных"].Используется ИЛИ (ВерсияОбласти <> Неопределено И ВерсияОбласти = ВерсияМетаданных) Тогда @@ -1090,16 +1113,12 @@ МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); Если ОшибкаУстановкиБлокировки Тогда Продолжить; - Иначе - ВызватьИсключение; КонецЕсли; - + ВызватьИсключение; КонецПопытки; КонецЦикла; @@ -1107,8 +1126,7 @@ КонецПроцедуры // Выполняет обновление версии информационной базы в текущей области данных -// и снимает блокировку сеансов в области, в случае если она была установлена -// ранее. +// и снимает блокировку сеансов в области, в случае если она была установлена ранее. // Процедура ВыполнитьОбновлениеТекущейОбластиДанных(АктивированныеРасширения = Неопределено) Экспорт @@ -1128,7 +1146,8 @@ Для Каждого Идентификатор Из АктивированныеРасширения Цикл - Расширения = РасширенияКонфигурации.Получить(Новый Структура("УникальныйИдентификатор", Идентификатор), ИсточникРасширенийКонфигурации.СеансАктивные); + Расширения = РасширенияКонфигурации.Получить(Новый Структура("УникальныйИдентификатор", Идентификатор), + ИсточникРасширенийКонфигурации.СеансАктивные); Если Расширения.Количество() = 0 Тогда Продолжить; КонецЕсли; @@ -1171,9 +1190,9 @@ ТекстИсключения = НСтр("ru = 'Вызов функции %1 |недоступен из сеансов с установленным значением разделителей модели сервиса.'"); ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, - "ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияОбластейДанных()"); + "ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияОбластейДанных"); - ВызватьИсключение ТекстИсключения; + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Запрос = Новый Запрос; @@ -1299,7 +1318,7 @@ + НСтр("ru = 'Обновление области данных'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); + ВызватьИсключение(НСтр("ru = 'Обновление области данных не выполнено. Запись версий области данных заблокирована.'")); КонецПопытки; Возврат "Успешно"; diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index b75f14945..23f40fcbd 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -327,8 +327,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с исправлениями (патчами). +#Область РаботаСИсправлениямиПатчами // Возвращает информацию об установленных патчах в конфигурации. // @@ -619,6 +618,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс Функция ДляТекущейВерсииНеобходимоУспешноеЗавершениеОбработчиков() Экспорт @@ -722,11 +723,11 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") И Не ПустаяСтрока(ЭлектроннаяПочта) Тогда + + УведомлениеОтправлено = Ложь; Попытка ОтправитьУведомлениеОбОбновлении(ИмяАдминистратораОбновления, ЭлектроннаяПочта, РезультатОбновления); - ТекстСообщения = НСтр("ru = 'Уведомление об обновлении успешно отправлено на адрес электронной почты:'") - + " " + ЭлектроннаяПочта; - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,,ТекстСообщения); + УведомлениеОтправлено = Истина; Исключение ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось отправить письмо на адрес ""%1"" по причине: @@ -734,6 +735,12 @@ ЭлектроннаяПочта, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения); КонецПопытки; + + Если УведомлениеОтправлено Тогда + ТекстСообщения = НСтр("ru = 'Уведомление об обновлении успешно отправлено на адрес электронной почты:'") + + " " + ЭлектроннаяПочта; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,,ТекстСообщения); + КонецЕсли; КонецЕсли; Если РезультатОбновления Тогда @@ -925,8 +932,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПослеОбновленияИнформационнойБазы. Процедура ПослеОбновленияИнформационнойБазы() Экспорт @@ -977,6 +983,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Получить глобальные настройки обновления на сеанс 1С:Предприятия. @@ -1062,15 +1070,15 @@ Процедура ОтправитьУведомлениеОбОбновлении(Знач ИмяПользователя, Знач АдресНазначения, Знач УспешноеОбновление) - Тема = ? (УспешноеОбновление, НСтр("ru = 'Успешное обновление конфигурации ""%1"", версия %2'"), - НСтр("ru = 'Ошибка обновления конфигурации ""%1"", версия %2'")); + Тема = ? (УспешноеОбновление, НСтр("ru = 'Успешное обновление ""%1"", версия %2'"), + НСтр("ru = 'Ошибка обновления ""%1"", версия %2'")); Тема = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Тема, Метаданные.КраткаяИнформация, Метаданные.Версия); - Подробности = ?(УспешноеОбновление, НСтр("ru = 'Обновление конфигурации завершено успешно.'"), - НСтр("ru = 'При обновлении конфигурации произошли ошибки. Подробности записаны в журнал регистрации.'")); + Подробности = ?(УспешноеОбновление, НСтр("ru = 'Обновление приложения завершено успешно.'"), + НСтр("ru = 'Не удалось обновить приложение, подробности см. в журнале регистрации.'")); Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 | - |Конфигурация: %2 + |%2 |Версия: %3 |Строка соединения: %4'"), Подробности, Метаданные.КраткаяИнформация, Метаданные.Версия, СтрокаСоединенияИнформационнойБазы()); @@ -1311,7 +1319,7 @@ Процедура УстановитьСтатусОбновленияКонфигурации(Знач Статус) - Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус)); + Константы.СтатусОбновленияКонфигурации.Установить(Новый ХранилищеЗначения(Статус, Новый СжатиеДанных(9))); КонецПроцедуры @@ -1345,7 +1353,8 @@ МанифестыИсправлений.Вставить(ИмяИсправления, МанифестИсправления); КонецЦикла; - Константы.СвойстваИсправленийПередОбновлениемИБ.Установить(Новый ХранилищеЗначения(МанифестыИсправлений)); + Константы.СвойстваИсправленийПередОбновлениемИБ.Установить( + Новый ХранилищеЗначения(МанифестыИсправлений, Новый СжатиеДанных(9))); КонецПроцедуры @@ -1435,4 +1444,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 4042d37cf..9387ac276 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -237,7 +237,7 @@ Если ПустаяСтрока(КаталогСкрипта) Тогда ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Предупреждение", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Журнал обновления см. в папке временных файлов %1.(цифры).'"), "%temp%\1Cv8Update"),, Истина); + НСтр("ru = 'Журнал обновления см. в каталоге временных файлов %1.(цифры).'"), "%temp%\1Cv8Update"),, Истина); РезультатОбновления = Истина; // считаем обновление успешным. Иначе ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), @@ -321,8 +321,7 @@ Возврат СтрНачинаетсяС(ИмяИсправления, "EF_"); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт @@ -366,6 +365,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ВерсииТребующиеУспешногоОбновления(ПереданныеФайлыОбновления) diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйЛокализация/Module.bsl b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуГлобальный/Module.bsl similarity index 73% rename from SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйЛокализация/Module.bsl rename to SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуГлобальный/Module.bsl index 6d099653a..c3624ce40 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебныйЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуГлобальный/Module.bsl @@ -8,10 +8,10 @@ #Область СлужебныеПроцедурыИФункции -Функция АдресСервераКонтрольнойПроверки() Экспорт +Процедура ПродолжитьСохранениеСнимкаЭкрана() Экспорт - Возврат "ya.ru"; + ОбращенияВТехническуюПоддержкуСлужебныйКлиент.СохранитьСнимокЭкрана(); -КонецФункции +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуГлобальный/ОбращенияВТехническуюПоддержкуГлобальный.mdo b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуГлобальный/ОбращенияВТехническуюПоддержкуГлобальный.mdo new file mode 100644 index 000000000..6d4fe03cd --- /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..a1aaa8897 --- /dev/null +++ b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуЛокализация/Module.bsl @@ -0,0 +1,28 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Процедура ПриОпределенииОписанияОбращенияВПоддержку(ОписаниеОбращенияВПоддержку, ВопросВПоддержкуДоступен) Экспорт + + // Локализация + Если ВопросВПоддержкуДоступен Тогда + ОписаниеОбращенияВПоддержку = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'При возникновении затруднений обратитесь в службу поддержки фирмы ""1С"". В случае необходимости предоставьте техническую информацию о возникшей проблеме.'"), + "ВопросВПоддержку", + "ИнформацияДляОтправкиВПоддержку"); + Иначе + ОписаниеОбращенияВПоддержку = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'При возникновении затруднений обратитесь в службу поддержки фирмы ""1С"". В случае необходимости предоставьте техническую информацию о возникшей проблеме.'"), + "ИнформацияДляОтправкиВПоддержку"); + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуЛокализация/ОбращенияВТехническуюПоддержкуЛокализация.mdo b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуЛокализация/ОбращенияВТехническуюПоддержкуЛокализация.mdo new file mode 100644 index 000000000..8a29d73a1 --- /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..ebe9c926e --- /dev/null +++ b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебный/Module.bsl @@ -0,0 +1,153 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Подготавливает форму для работы с обращениями в техническую поддержку. +// Вызывается из обработчика формы "ПриСозданииНаСервере" со свойствами. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - форма со свойствами: +// * Элементы - ВсеЭлементыФормы - элементы формы со свойствами: +// * ГруппаТребуетсяПомощь - ГруппаФормы - раздел, в котором размещены элементы для взаимодействия с поддержкой. +// Используется всегда. Недоступно отображение раздела для сеанса +// внешнего пользователя. +// +// * ОписаниеОбращенияВПоддержку - ДекорацияФормы - описание обращения в поддержку. +// Используется всегда. +// 1. Как описание при взаимодействии через кнопки +// "ВопросВПоддержку" и "ИнформацияДляОтправкиВПоддержку". +// 2. Как форматированная строка с навигационными ссылками +// "ВопросВПоддержку" и "ИнформацияДляОтправкиВПоддержку". +// +// * ВопросВПоддержку - КнопкаФормы - кнопка отправки вопроса в поддержку. +// Используется опционально. +// +// * ИнформацияДляОтправкиВПоддержку - КнопкаФормы - кнопка скачивания информации для отправки в поддержку. +// Используется опционально. +// +Процедура ПриСозданииНаСервере(Форма) Экспорт + + ЭлементыФормы = Форма.Элементы; + + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + СкрытьРазделТребуетсяПомощь(ЭлементыФормы); + Возврат; + КонецЕсли; + + ОпределитьДоступностьЭлементовФормы(ЭлементыФормы); + ЗаполнитьОписаниеОбращенияВПоддержку(ЭлементыФормы); + +КонецПроцедуры + +// Отключает видимость для раздела "Требуется помощь". +// +// Параметры: +// ЭлементыФормы - ВсеЭлементыФормы - элементы формы. +// +Процедура СкрытьРазделТребуетсяПомощь(ЭлементыФормы) Экспорт + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + ЭлементыФормы, "ГруппаТребуетсяПомощь", "Видимость", Ложь); + +КонецПроцедуры + +// Включается видимость для раздела "Требуется помощь". +// Недоступно отображение раздела для сеанса внешнего пользователя. +// +// Параметры: +// ЭлементыФормы - ВсеЭлементыФормы - элементы формы. +// +Процедура ПоказатьРазделТребуетсяПомощь(ЭлементыФормы) Экспорт + + Если Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + ЭлементыФормы, "ГруппаТребуетсяПомощь", "Видимость", Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ОпределитьДоступностьЭлементовФормы(ЭлементыФормы) + + ВопросВПоддержкуДоступен = ВопросВПоддержкуДоступен(); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + ЭлементыФормы, + "ВопросВПоддержку", + "Видимость", + ВопросВПоддержкуДоступен); + +КонецПроцедуры + +Процедура ЗаполнитьОписаниеОбращенияВПоддержку(ЭлементыФормы) + + ОписаниеОбращенияВПоддержку = ОписаниеОбращенияВПоддержку(); + + Если Не ИспользуетсяВзаимодействиеЧерезНавигационнуюСсылку(ЭлементыФормы) Тогда + ОписаниеОбращенияВПоддержку = Строка(ОписаниеОбращенияВПоддержку); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + ЭлементыФормы, + "ОписаниеОбращенияВПоддержку", + "Заголовок", + ОписаниеОбращенияВПоддержку); + +КонецПроцедуры + +Функция ИспользуетсяВзаимодействиеЧерезНавигационнуюСсылку(ЭлементыФормы) + + Результат = ЭлементыФормы.Найти("ВопросВПоддержку") = Неопределено + И ЭлементыФормы.Найти("ИнформацияДляОтправкиВПоддержку") = Неопределено; + + Возврат Результат; + +КонецФункции + +Функция ОписаниеОбращенияВПоддержку() + + ВопросВПоддержкуДоступен = ВопросВПоддержкуДоступен(); + + Если ВопросВПоддержкуДоступен Тогда + ОписаниеОбращенияВПоддержку = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'При возникновении затруднений обратитесь в службу поддержки. В случае необходимости предоставьте техническую информацию о возникшей проблеме.'"), + "ВопросВПоддержку", + "ИнформацияДляОтправкиВПоддержку"); + Иначе + ОписаниеОбращенияВПоддержку = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'При возникновении затруднений обратитесь в службу поддержки. В случае необходимости предоставьте техническую информацию о возникшей проблеме.'"), + "ИнформацияДляОтправкиВПоддержку"); + КонецЕсли; + + ОбращенияВТехническуюПоддержкуЛокализация.ПриОпределенииОписанияОбращенияВПоддержку( + ОписаниеОбращенияВПоддержку, + ВопросВПоддержкуДоступен); + + Возврат ОписаниеОбращенияВПоддержку; + +КонецФункции + +Функция ВопросВПоддержкуДоступен() + + СообщенияВСлужбуТехническойПоддержкиДоступны = ОбщегоНазначения.ПодсистемаСуществует( + "ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки"); + + РаботаСПочтовымиСообщениямиДоступна = ОбщегоНазначения.ПодсистемаСуществует( + "СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"); + + Возврат СообщенияВСлужбуТехническойПоддержкиДоступны Или РаботаСПочтовымиСообщениямиДоступна; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебный/ОбращенияВТехническуюПоддержкуСлужебный.mdo b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебный/ОбращенияВТехническуюПоддержкуСлужебный.mdo new file mode 100644 index 000000000..74a9baf47 --- /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..7da8f5790 --- /dev/null +++ b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,117 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция РаботаСВнешнимиРесурсамиДоступна() Экспорт + + Возврат Не РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована(); + +КонецФункции + +Функция АдресАрхиваТехническойИнформации(Знач ПараметрыОбращения) Экспорт + + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог(); + АдресаФайлов = АдресаФайловТехническойИнформации(ПараметрыОбращения); + + ДобавитьФайлТехническойИнформацииВоВременныйКаталог( + АдресаФайлов.ТехнологическаяИнформация, + НСтр("ru = 'Технологическая информация.txt'"), + ВременныйКаталог); + + ДобавитьФайлТехническойИнформацииВоВременныйКаталог( + АдресаФайлов.ЖурналРегистрации, + НСтр("ru = 'Журнал регистрации.xml'"), + ВременныйКаталог); + + Для Каждого ДополнительныйФайл Из ПараметрыОбращения.ДополнительныеФайлы Цикл + ДобавитьФайлТехническойИнформацииВоВременныйКаталог( + ДополнительныйФайл.АдресФайла, + ДополнительныйФайл.ПолноеИмяФайла, + ВременныйКаталог); + КонецЦикла; + + АрхивТехническойИнформации = Новый ЗаписьZipФайла(); + АрхивТехническойИнформации.Добавить(ВременныйКаталог); + + ДанныеАрхива = АрхивТехническойИнформации.ПолучитьДвоичныеДанные(); + Результат = ПоместитьВоВременноеХранилище(ДанныеАрхива, Новый УникальныйИдентификатор); + + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); + + Возврат Результат; + +КонецФункции + +Функция АдресаФайловТехническойИнформации(Знач ПараметрыОбращения) Экспорт + + Результат = Новый Структура("ТехнологическаяИнформация, ЖурналРегистрации"); + Результат.ТехнологическаяИнформация = АдресТехнологическаяИнформация(ПараметрыОбращения.ТехнологическаяИнформация); + Результат.ЖурналРегистрации = АдресЖурналаРегистрации(ПараметрыОбращения.ОтборЖурналаРегистрации); + + Возврат Результат; + +КонецФункции + +Функция АдресТехнологическаяИнформация(ТехнологическаяИнформация) + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); + + ТекстИнформацииДляПоддержки = Новый ТекстовыйДокумент; + ТекстИнформацииДляПоддержки.УстановитьТекст(ТехнологическаяИнформация); + ТекстИнформацииДляПоддержки.Записать(ИмяВременногоФайла); + + Результат = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), Новый УникальныйИдентификатор); + + УдалитьФайлы(ИмяВременногоФайла); + + Возврат Результат; + +КонецФункции + +Функция АдресЖурналаРегистрации(ОтборЖурналаРегистрации) + + СекундДоНачалаСобытий = 600; + + Если ОтборЖурналаРегистрации.Свойство("ДатаНачала") Тогда // АПК:1415 Динамический состав свойств. + ДатаНачала = ОтборЖурналаРегистрации.ДатаНачала - СекундДоНачалаСобытий; + Иначе + ДатаНачала = ТекущаяДатаСеанса() - СекундДоНачалаСобытий; + КонецЕсли; + + ОтборЖурналаРегистрации.Вставить("ДатаНачала", ДатаНачала); + ОтборЖурналаРегистрации.Вставить("Пользователь", ПользователиИнформационнойБазы.ТекущийПользователь()); + + КоличествоСобытий = 100; + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + Результат = ЖурналРегистрации.ЖурналДляТехподдержки(ОтборЖурналаРегистрации, КоличествоСобытий); + УстановитьПривилегированныйРежим(Ложь); + УстановитьОтключениеБезопасногоРежима(Ложь); + + Возврат Результат; + +КонецФункции + +Функция АдресСнимкаЭкрана(Знач СнимокЭкрана) Экспорт + + Возврат ПоместитьВоВременноеХранилище(СнимокЭкрана.ПолучитьДвоичныеДанные(), Новый УникальныйИдентификатор); + +КонецФункции + +Процедура ДобавитьФайлТехническойИнформацииВоВременныйКаталог(АдресФайла, ИмяФайла, ВременныйКаталог) + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла); + ДвоичныеДанные.Записать(ВременныйКаталог + ИмяФайла); + + УдалитьИзВременногоХранилища(АдресФайла); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера/ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера/ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..1502d6471 --- /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..ef51b9121 --- /dev/null +++ b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебныйКлиент/Module.bsl @@ -0,0 +1,552 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +// Отправляет вопрос в поддержку. +// Вложения обращения: +// - "Технологическая информация.txt"; +// - "Журнал регистрации.xml"; +// - "Снимок экрана.png" (опционально); +// - Дополнительные файлы (опционально). +// +// Способы и порядок отправки в зависимости от наличия подсистем: +// 1. Через службу поддержки. Требуется подсистема: "ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки". +// 2. Через отправку письма. Требуется подсистема: "СтандартныеПодсистемы.РаботаСПочтовымиСообщениями". +// 3. Через сохранение файла. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - владелец. +// ПараметрыОбращения - см. ОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения +// +Процедура ОтправитьВопросВПоддержку(Форма, ПараметрыОбращения) Экспорт + + Если Не ПриложениеДляСнимкаЭкранаДоступно() Тогда + ПродолжитьОтправкуВопросаВПоддержку(Неопределено, ПараметрыОбращения); + Возврат; + КонецЕсли; + + // Служба технической поддержки не поддерживает вложения формата "png" или "jpg". + Если СообщенияВСлужбуТехническойПоддержкиДоступны() Тогда + ПродолжитьОтправкуВопросаВПоддержку(Неопределено, ПараметрыОбращения); + Возврат; + КонецЕсли; + + Если Форма.Элементы.Найти("ГруппаТребуетсяПомощь") <> Неопределено Тогда + Форма.Элементы.ГруппаТребуетсяПомощь.Скрыть(); + КонецЕсли; + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьОтправкуВопросаВПоддержку", + ЭтотОбъект, + ПараметрыОбращения); + + ЗапроситьСозданиеСнимкаЭкрана(ОбработчикЗавершения); + +КонецПроцедуры + +// Скачивает файл с технической информацией для отправки в поддержку. +// Содержание zip-файла: +// - "Технологическая информация.txt"; +// - "Журнал регистрации.xml"; +// - "Снимок экрана.png" (опционально); +// - Дополнительные файлы (опционально). +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - владелец. +// ПараметрыОбращения - см. ОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения +// +Процедура СкачатьИнформациюДляОтправкиВПоддержку(Форма, ПараметрыОбращения) Экспорт + + Если Не ПриложениеДляСнимкаЭкранаДоступно() Тогда + ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку(Неопределено, ПараметрыОбращения); + Возврат; + КонецЕсли; + + Если Форма.Элементы.Найти("ГруппаТребуетсяПомощь") <> Неопределено Тогда + Форма.Элементы.ГруппаТребуетсяПомощь.Скрыть(); + КонецЕсли; + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку", + ЭтотОбъект, + ПараметрыОбращения); + + ЗапроситьСозданиеСнимкаЭкрана(ОбработчикЗавершения); + +КонецПроцедуры + +// Конструктор параметров обращения. +// +// Возвращаемое значение: +// Структура: +// * ТехнологическаяИнформация - Строка - основная причина обращения. Содержимое будущего файла "Технологическая информация.txt". +// * ОтборЖурналаРегистрации - Структура - отбор журнала регистрации, соответствует отбору, который используется в +// методе "ВыгрузитьЖурналРегистрации". +// * Получатель - см. ПолучательОбращенияВПоддержку. Используется только при отправке вопроса в поддержку. +// * АдресПолучателя - см. АдресПолучателяОбращенияВПоддержку. Используется только при отправке вопроса в поддержку. +// * Тема - Строка - тема обращения. Используется только при отправке вопроса в поддержку. +// * Сообщение - см. ТекстСообщенияВПоддержку. Используется только при отправке вопроса в поддержку. +// * ДополнительныеФайлы - Массив из см. ОбращенияВТехническуюПоддержкуСлужебныйКлиент.ДанныеДополнительногоФайла. +// +Функция ПараметрыОбращения() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ТехнологическаяИнформация", СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки()); + Результат.Вставить("ОтборЖурналаРегистрации", Новый Структура); + Результат.Вставить("Получатель", ПолучательОбращенияВПоддержку()); + Результат.Вставить("АдресПолучателя", АдресПолучателяОбращенияВПоддержку()); + Результат.Вставить("Тема", ""); + Результат.Вставить("Сообщение", ТекстСообщенияВПоддержку()); + Результат.Вставить("ДополнительныеФайлы", Новый Массив); + + Возврат Результат; + +КонецФункции + +// Конструктор данных дополнительного файла. +// +// Параметры: +// АдресФайла - Строка - адрес файла во временном хранилище со значением типа "ДвоичныеДанные". +// ПолноеИмяФайла - Строка - полное имя файла, включая формат. Например, "Технологическая информация.txt". +// +// Возвращаемое значение: +// Структура: +// * АдресФайла - Строка +// * ПолноеИмяФайла - Строка +// +Функция ДанныеДополнительногоФайла(АдресФайла, ПолноеИмяФайла) Экспорт + + Результат = Новый Структура; + Результат.Вставить("АдресФайла", АдресФайла); + Результат.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); + + Возврат Результат; + +КонецФункции + +#Область ДляВызоваИзДругихПодсистем + +// СтандартныеПодсистемы.ЭлектроннаяПодпись + +// Проверяет доступность подсистемы "Сообщения в службу технической поддержки". +// Подсистема доступна, если разблокирована работа с внешними ресурсами. +// +// Возвращаемое значение: +// Булево - Истина, если доступна отправка сообщения в службу технической поддержки. +// +Функция СообщенияВСлужбуТехническойПоддержкиДоступны() Экспорт + + ПодсистемаСуществует = ОбщегоНазначенияКлиент.ПодсистемаСуществует( + "ИнтернетПоддержкаПользователей.СообщенияВСлужбуТехническойПоддержки"); + + РаботаСВнешнимиРесурсамиДоступна = + ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера.РаботаСВнешнимиРесурсамиДоступна(); + + Возврат ПодсистемаСуществует И РаботаСВнешнимиРесурсамиДоступна; + +КонецФункции + +// Проверяет доступность приложения для снятия снимка экрана. +// +// Возвращаемое значение: +// Булево - Истина, если приложение доступно, иначе Ложь. +// +Функция ПриложениеДляСнимкаЭкранаДоступно() Экспорт + + Возврат ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() И СредстваБуфераОбмена.ИспользованиеДоступно(); + +КонецФункции + +// Запрашивает у пользователя подтверждение на снятие снимка экрана. // Если подтверждение получено, то запускает приложение для снимка экрана. +// После запуска приложения получает снимок экрана и передает его в указанный обработчик завершения. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - обработчик завершения, который вызывается после сохранения +// снимка экрана. В Результате возвращается Структура, см. ОбращенияВТехническуюПоддержкуСлужебныйКлиент.ДанныеДополнительногоФайла. +// +Процедура ЗапроситьСозданиеСнимкаЭкрана(ОбработчикЗавершения = Неопределено) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + + Оповещение = Новый ОписаниеОповещения("ПослеЗапросаСоздатьСнимокЭкрана", ЭтотОбъект, ДополнительныеПараметры); + + ТекстВопроса = НСтр("ru = 'Рекомендуется создать снимок экрана. Необходимо выделить весь экран или область с текстом возникшей проблемы.'"); + + Кнопки = Новый СписокЗначений(); + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Создать снимок экрана'")); + Кнопки.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Пропустить'")); + + ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю(); + ПараметрыВопроса.Заголовок = НСтр("ru = 'Формирование технической информации'"); + ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь; + ПараметрыВопроса.КнопкаПоУмолчанию = КодВозвратаДиалога.Да; + + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ТекстВопроса, Кнопки, ПараметрыВопроса); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ЭлектроннаяПодпись + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область СнимокЭкрана + +Процедура ПослеЗапросаСоздатьСнимокЭкрана(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Значение = КодВозвратаДиалога.Да Тогда + ЗапуститьПриложениеДляСнимкаЭкрана(ДополнительныеПараметры.ОбработчикЗавершения); + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.ОбработчикЗавершения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикЗавершения, Неопределено); + КонецЕсли + +КонецПроцедуры + +Процедура ЗапуститьПриложениеДляСнимкаЭкрана(ОбработчикЗавершения = Неопределено) + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + + ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.Оповещение = Новый ОписаниеОповещения( + "ПослеЗапускаПриложенияДляСнимкаЭкрана", + ЭтотОбъект, + ДополнительныеПараметры); + + ФайловаяСистемаКлиент.ЗапуститьПрограмму("explorer.exe ms-screenclip:", ПараметрыЗапускаПрограммы); + +КонецПроцедуры + +Процедура ПослеЗапускаПриложенияДляСнимкаЭкрана(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Не Результат.ПриложениеЗапущено Тогда + ПоказатьПредупреждение(, Результат.ОписаниеОшибки); + Возврат; + КонецЕсли; + + ОчиститьБуферОбмена(); + + ПараметрыОбработкиБуфераОбмена = Новый Структура; + ПараметрыОбработкиБуфераОбмена.Вставить("ТекущаяПопытка", 0); + ПараметрыОбработкиБуфераОбмена.Вставить("МаксимальнаяПопытка", 3); + + СохраняемыеПараметры = Новый Структура; + СохраняемыеПараметры.Вставить("ПараметрыОбработкиБуфераОбмена", ПараметрыОбработкиБуфераОбмена); + СохраняемыеПараметры.Вставить("ОбработчикЗавершения", ДополнительныеПараметры.ОбработчикЗавершения); + + ИмяПараметра = "СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку"; + ПараметрыПриложения.Вставить(ИмяПараметра, СохраняемыеПараметры); + + ПодключитьОбработчикОжидания("ПродолжитьСохранениеСнимкаЭкрана", 1, Истина); + +КонецПроцедуры + +Процедура ОчиститьБуферОбмена() + + ПомещаемыеДанные = Новый ЭлементБуфераОбмена(СтандартныйФорматДанныхБуфераОбмена.Текст, ""); + СредстваБуфераОбмена.ПоместитьДанныеАсинх(ПомещаемыеДанные); + +КонецПроцедуры + +Асинх Процедура СохранитьСнимокЭкрана() Экспорт + + ФорматДанных = СтандартныйФорматДанныхБуфераОбмена.Картинка; + СнимокЭкрана = Неопределено; + + Если СредстваБуфераОбмена.ИспользованиеДоступно() Тогда + Если Ждать СредстваБуфераОбмена.СодержитДанныеАсинх(ФорматДанных) Тогда + СнимокЭкрана = Ждать СредстваБуфераОбмена.ПолучитьДанныеАсинх(ФорматДанных); + КонецЕсли; + КонецЕсли; + + ИмяПараметра = "СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку"; + СохраненныеПараметры = ПараметрыПриложения[ИмяПараметра]; + + ПараметрыОбработкиБуфераОбмена = СохраненныеПараметры.ПараметрыОбработкиБуфераОбмена; + + Если СнимокЭкрана = Неопределено Тогда + + Если ПараметрыОбработкиБуфераОбмена.ТекущаяПопытка < ПараметрыОбработкиБуфераОбмена.МаксимальнаяПопытка Тогда + // Повторная попытка получить снимок экрана из буфера обмена. + ПодключитьОбработчикОжидания("ПродолжитьСохранениеСнимкаЭкрана", 1, Истина); + ПараметрыОбработкиБуфераОбмена.ТекущаяПопытка = ПараметрыОбработкиБуфераОбмена.ТекущаяПопытка + 1; + Иначе + // Продолжить без снимка экрана. + Если СохраненныеПараметры.ОбработчикЗавершения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(СохраненныеПараметры.ОбработчикЗавершения); + КонецЕсли; + ТекстСообщения = НСтр("ru = 'Не удалось сохранить снимок экрана.'"); + ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); + КонецЕсли; + + Возврат; + + КонецЕсли; + + АдресФайла = ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера.АдресСнимкаЭкрана(СнимокЭкрана); + ДанныеСнимка = ДанныеДополнительногоФайла(АдресФайла, НСтр("ru = 'Снимок экрана.png'")); + + Если СохраненныеПараметры.ОбработчикЗавершения <> Неопределено Тогда + ВыполнитьОбработкуОповещения(СохраненныеПараметры.ОбработчикЗавершения, ДанныеСнимка); + КонецЕсли + +КонецПроцедуры + +#КонецОбласти + +#Область СкачиваниеИнформации + +Процедура ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + ДополнительныеПараметры.ДополнительныеФайлы.Добавить(Результат); + КонецЕсли; + + АдресАрхива = ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера.АдресАрхиваТехническойИнформации( + ДополнительныеПараметры); + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПослеСкачиванияИнформацииДляОтправкиВПоддержку", + ЭтотОбъект, + Новый Структура("АдресАрхива", АдресАрхива)); + + ФайловаяСистемаКлиент.СохранитьФайл(ОбработчикЗавершения, АдресАрхива, "service_info.zip"); + +КонецПроцедуры + +Процедура ПослеСкачиванияИнформацииДляОтправкиВПоддержку(СохраненныеФайлы, ДополнительныеПараметры) Экспорт + + Если ЗначениеЗаполнено(СохраненныеФайлы) Тогда + ФайловаяСистемаКлиент.ОткрытьПроводник(СохраненныеФайлы[0].ПолноеИмя); + КонецЕсли; + + УдалитьИзВременногоХранилища(ДополнительныеПараметры.АдресАрхива); + +КонецПроцедуры + +#КонецОбласти + +#Область ОтправкаВопроса + +Процедура ПродолжитьОтправкуВопросаВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + ДополнительныеПараметры.ДополнительныеФайлы.Добавить(Результат); + КонецЕсли; + + Если СообщенияВСлужбуТехническойПоддержкиДоступны() Тогда + + МодульСообщенияВСлужбуТехническойПоддержкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "СообщенияВСлужбуТехническойПоддержкиКлиент"); + + МодульСообщенияВСлужбуТехническойПоддержкиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль( + "СообщенияВСлужбуТехническойПоддержкиКлиентСервер"); + + ДанныеСообщения = МодульСообщенияВСлужбуТехническойПоддержкиКлиентСервер.ДанныеСообщения(); + ДанныеСообщения.Получатель = ДополнительныеПараметры.Получатель; + ДанныеСообщения.Тема = ДополнительныеПараметры.Тема; + ДанныеСообщения.Сообщение = ДополнительныеПараметры.Сообщение; + + ВложенныеФайлыДляСлужбыПоддержки = ВложенныеФайлыВПоддержку(ДополнительныеПараметры, "Данные"); + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПослеОтправкиВопросаВПоддержку", + ЭтотОбъект, + ДополнительныеПараметры); + + МодульСообщенияВСлужбуТехническойПоддержкиКлиент.ОтправитьСообщение( + ДанныеСообщения, + ВложенныеФайлыДляСлужбыПоддержки, + , + ОбработчикЗавершения); + + Возврат; + + КонецЕсли; + + // Попытка отправить при помощи письма. + ПослеОтправкиВопросаВПоддержку(Неопределено, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ПослеОтправкиВопросаВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И ЗначениеЗаполнено(Результат.КодОшибки) Тогда + + ИмяСобытия = НСтр("ru = 'Работа с почтовыми сообщениями.Отправка вопроса в поддержку'"); + + КомментарийСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 %2'"), + Результат.КодОшибки, + Результат.СообщениеОбОшибке); + + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( + ИмяСобытия, + "Ошибка", + КомментарийСобытия, + , + Истина); + + ИначеЕсли Результат <> Неопределено Тогда + Возврат; + КонецЕсли; + + Если РаботаСПочтовымиСообщениямиДоступна() Тогда + + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "РаботаСПочтовымиСообщениямиКлиент"); + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПослеПроверкиУчетнойЗаписиПочты", + ЭтотОбъект, + ДополнительныеПараметры); + + МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОбработчикЗавершения); + Возврат; + + КонецЕсли; + + // Попытка сохранить файл. + ПослеПроверкиУчетнойЗаписиПочты(Неопределено, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ПослеПроверкиУчетнойЗаписиПочты(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Истина Тогда + + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "РаботаСПочтовымиСообщениямиКлиент"); + + ПараметрыОтправкиПисьма = МодульРаботаСПочтовымиСообщениямиКлиент.ПараметрыОтправкиПисьма(); + ПараметрыОтправкиПисьма.Получатель = ДополнительныеПараметры.АдресПолучателя; + ПараметрыОтправкиПисьма.Тема = ДополнительныеПараметры.Тема; + ПараметрыОтправкиПисьма.Текст = ШаблонТекстаСообщенияВПоддержку(ДополнительныеПараметры.Сообщение); + + Вложения = ВложенныеФайлыВПоддержку(ДополнительныеПараметры, "АдресВоВременномХранилище"); + ПараметрыОтправкиПисьма.Вложения = Вложения; + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПослеОтправкиПисьмаВПоддержку", + ЭтотОбъект, + ПараметрыОтправкиПисьма); + + МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправкиПисьма, ОбработчикЗавершения); + Возврат; + + КонецЕсли; + + // Попытка сохранить файл. + ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку(Неопределено, ДополнительныеПараметры); + +КонецПроцедуры + +Процедура ПослеОтправкиПисьмаВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + Для Каждого Вложение Из ДополнительныеПараметры.Вложения Цикл + УдалитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище); + КонецЦикла; + +КонецПроцедуры + +Функция ПолучательОбращенияВПоддержку() + + Возврат "v8"; + +КонецФункции + +Функция АдресПолучателяОбращенияВПоддержку() + + Возврат "v8@1c.ru"; + +КонецФункции + +Функция ТекстСообщенияВПоддержку() + + Возврат НСтр("ru = '<Опишите возникшую проблему и приложите скриншоты ошибки.>'"); + +КонецФункции + +Функция ШаблонТекстаСообщенияВПоддержку(ТекстОбращения) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Здравствуйте. + | + |%1 + | + |<Укажите ФИО>.'"), + ТекстОбращения); + +КонецФункции + +#КонецОбласти + +#Область Прочее + +// Проверяет доступность подсистемы "Работа с почтовыми сообщениями". +// +// Возвращаемое значение: +// Булево - Истина, если доступна работа с почтовыми сообщениями. +// +Функция РаботаСПочтовымиСообщениямиДоступна() + + Возврат ОбщегоНазначенияКлиент.ПодсистемаСуществует( + "СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"); + +КонецФункции + +Функция ВложенныеФайлыВПоддержку(ПараметрыОбращения, КлючАдресаФайлов) + + АдресаФайлов = ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера.АдресаФайловТехническойИнформации( + ПараметрыОбращения); + + Результат = Новый Массив; + + ДанныеФайла = Новый Структура; + ДанныеФайла.Вставить(КлючАдресаФайлов, АдресаФайлов.ТехнологическаяИнформация); + ДанныеФайла.Вставить("Представление", НСтр("ru = 'Технологическая информация.txt'")); + ДанныеФайла.Вставить("ВидДанных", "Адрес"); + Результат.Добавить(ДанныеФайла); + + ДанныеФайла = Новый Структура; + ДанныеФайла.Вставить(КлючАдресаФайлов, АдресаФайлов.ЖурналРегистрации); + ДанныеФайла.Вставить("Представление", НСтр("ru = 'Журнал регистрации.xml'")); + ДанныеФайла.Вставить("ВидДанных", "Адрес"); + Результат.Добавить(ДанныеФайла); + + Для Каждого ДополнительныйФайл Из ПараметрыОбращения.ДополнительныеФайлы Цикл + ДанныеФайла = Новый Структура; + ДанныеФайла.Вставить(КлючАдресаФайлов, ДополнительныйФайл.АдресФайла); + ДанныеФайла.Вставить("Представление", ДополнительныйФайл.ПолноеИмяФайла); + ДанныеФайла.Вставить("ВидДанных", "Адрес"); + Результат.Добавить(ДанныеФайла); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебныйКлиент/ОбращенияВТехническуюПоддержкуСлужебныйКлиент.mdo b/SSL/src/CommonModules/ОбращенияВТехническуюПоддержкуСлужебныйКлиент/ОбращенияВТехническуюПоддержкуСлужебныйКлиент.mdo new file mode 100644 index 000000000..4ab4d10ba --- /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..825470e1a --- /dev/null +++ b/SSL/src/CommonModules/ОбсужденияЛокализация/Module.bsl @@ -0,0 +1,78 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Позволяет переопределить список доступных интеграций в зависимости от национальной специфики. +// +// Параметры: +// ТипыВнешнихСистем - Массив из Строка - "Telegram", "WebChat", "Webhook", "Webhook" и другие. +// +Процедура ПриОпределенииДоступныхИнтеграций(ТипыВнешнихСистем) Экспорт + + // Локализация + ТипыВнешнихСистем.Добавить("VK"); + ТипыВнешнихСистем.Добавить("WhatsApp Devino"); + // Конец Локализация + +КонецПроцедуры + +// Позволяет указать пользовательские инструкции для подключения интеграции с той или иной внешней системой +// в конкретной стране или регионе. +// +// Параметры: +// Инструкция - ФорматированнаяСтрока +// ТипВнешнейСистемы - Строка - "Telegram", "WebChat", "Webhook" или "Webhook". +// +Процедура ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Инструкция, Знач ТипВнешнейСистемы) Экспорт + + // Локализация + Если ТипВнешнейСистемы = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Telegram Тогда + АдресСсылки = "https://tlgrm.ru/docs/bots#edit-settings"; + ТекстСсылки = НСтр("ru='Инструкция'"); + ДополнитьФорматированнуюСтроку(Инструкция, " " + ТекстСсылки, АдресСсылки); + ИначеЕсли ТипВнешнейСистемы = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().WhatsApp Тогда + АдресСсылки = "https://v8.1c.ru/static/instruktsiya-po-podklyucheniyu-k-whatsapp-business-api"; + ТекстСсылки = НСтр("ru='Инструкция по подключению к провайдеру'"); + ДополнитьФорматированнуюСтроку(Инструкция, Символы.ПС + ТекстСсылки, АдресСсылки); + ИначеЕсли ТипВнешнейСистемы = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат Тогда + АдресСсылки = "https://its.1c.ru/db/v83doc#bookmark:dev:TI000002677"; + ТекстСсылки = НСтр("ru='Информация для технического специалиста'"); + ДополнитьФорматированнуюСтроку(Инструкция, Символы.ПС + ТекстСсылки, АдресСсылки); + ИначеЕсли ТипВнешнейСистемы = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Webhook Тогда + АдресСсылки = "https://its.1c.ru/db/v8325doc#bookmark:dev:TI000002496"; + ТекстСсылки = НСтр("ru='Информация для технического специалиста'"); + ДополнитьФорматированнуюСтроку(Инструкция, Символы.ПС + ТекстСсылки, АдресСсылки); + Иначе + Возврат; + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти + +// Локализация + +#Область СлужебныеПроцедурыИФункции + +Процедура ДополнитьФорматированнуюСтроку(ФорматированнаяСтрока, ТекстСсылки, АдресСсылки) + + ФорматированныйДокумент = Новый ФорматированныйДокумент; + ФорматированныйДокумент.УстановитьФорматированнуюСтроку(ФорматированнаяСтрока); + + НовыйЭлемент = ФорматированныйДокумент.Добавить(ТекстСсылки); + НовыйЭлемент.НавигационнаяСсылка = АдресСсылки; + + ФорматированнаяСтрока = ФорматированныйДокумент.ПолучитьФорматированнуюСтроку(); + +КонецПроцедуры + +#КонецОбласти + +// Конец Локализация diff --git a/SSL/src/CommonModules/ОбсужденияЛокализация/ОбсужденияЛокализация.mdo b/SSL/src/CommonModules/ОбсужденияЛокализация/ОбсужденияЛокализация.mdo new file mode 100644 index 000000000..354482804 --- /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 ae6389bb9..2234f0c1d 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебный/Module.bsl @@ -86,7 +86,7 @@ КонецЕсли; ПредлагатьОбсуждения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПредлагатьОбсуждения", Истина); - Форма.ПредлагатьОбсуждения = Не Отказ И Не ЗначениеЗаполнено(Объект.Ссылка) И ПредлагатьОбсуждения + Форма.ПредлагатьОбсуждения = Не Отказ И Не ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) И ПредлагатьОбсуждения И Не ОбсужденияСлужебныйВызовСервера.Подключены(); Если Не Форма.ПредлагатьОбсуждения Тогда Возврат; @@ -267,6 +267,18 @@ #Область СлужебныеПроцедурыИФункции +Функция ДоступныеИнтеграции() Экспорт + + Результат = Новый Массив; + Результат.Добавить("Telegram"); + Результат.Добавить("WebChat"); + Результат.Добавить("Webhook"); + + ОбсужденияЛокализация.ПриОпределенииДоступныхИнтеграций(Результат); + Возврат Результат; + +КонецФункции + // Возвращаемое значение: // Структура: // * Идентификатор - Неопределено @@ -286,6 +298,7 @@ ПараметрыИнтеграции.Вставить("Участники", Новый Массив); ПараметрыИнтеграции.Вставить("token", ""); ПараметрыИнтеграции.Вставить("groupId", ""); + ПараметрыИнтеграции.Вставить("channel", ""); Возврат ПараметрыИнтеграции; КонецФункции @@ -295,7 +308,7 @@ + ?(ПустаяСтрока(ДетализацияСобытия), "", "."+ДетализацияСобытия); КонецФункции -Процедура СоздатьИзменитьИнтеграцию(Параметры) Экспорт +Функция СоздатьИзменитьИнтеграцию(Параметры) Экспорт Идентификатор = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Идентификатор"); Если Идентификатор <> Неопределено Тогда @@ -334,7 +347,10 @@ КонецЦикла; НоваяИнтеграция.Записать(); -КонецПроцедуры + + Возврат НоваяИнтеграция; + +КонецФункции Процедура ОтключитьИнтеграцию(Идентификатор) Экспорт diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl index 636d39cdd..8360cbd5f 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиент/Module.bsl @@ -40,7 +40,8 @@ Процедура ПослеЗаписиПользователя(Форма, ОписаниеЗавершения) Экспорт - Если Не Форма.ПредлагатьОбсуждения Тогда + Если Не Форма.ПредлагатьОбсуждения + Или Не ЗначениеЗаполнено(Форма.Объект.ИдентификаторПользователяИБ) Тогда ВыполнитьОбработкуОповещения(ОписаниеЗавершения); Возврат; КонецЕсли; @@ -73,7 +74,7 @@ КонецПроцедуры Процедура ПоказатьНастройкуИнтеграцииСВнешнимиСистемами() Экспорт - ОткрытьФорму("Обработка.ПодключениеОбсуждений.Форма.НастройкиСообщенийИзДругихПрограмм",,ЭтотОбъект); + ОткрытьФорму("Обработка.ПодключениеОбсуждений.Форма.НастройкиСообщенийИзДругихПриложений",,ЭтотОбъект); КонецПроцедуры Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт @@ -106,10 +107,16 @@ ТипыИнтеграции = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем(); ИмяФормы = "Обработка.ПодключениеОбсуждений.Форма"; - Если ОписаниеИнтеграции.Тип = ТипыИнтеграции.Телеграм Тогда - ИмяФормы = ИмяФормы + ".СозданиеБотаТелеграм"; + Если ОписаниеИнтеграции.Тип = ТипыИнтеграции.Telegram Тогда + ИмяФормы = ИмяФормы + ".СозданиеБотаTelegram"; ИначеЕсли ОписаниеИнтеграции.Тип = ТипыИнтеграции.ВКонтакте Тогда ИмяФормы = ИмяФормы + ".СозданиеБотаВКонтакте"; + ИначеЕсли ОписаниеИнтеграции.Тип = ТипыИнтеграции.WhatsApp Тогда + ИмяФормы = ИмяФормы + ".СозданиеБотаWhatsApp"; + ИначеЕсли ОписаниеИнтеграции.Тип = ТипыИнтеграции.ВебЧат Тогда + ИмяФормы = ИмяФормы + ".СозданиеБотаВебЧат"; + ИначеЕсли ОписаниеИнтеграции.Тип = ТипыИнтеграции.Webhook Тогда + ИмяФормы = ИмяФормы + ".СозданиеБотаWebhook"; КонецЕсли; ОткрытьФорму(ИмяФормы, ОписаниеИнтеграции, Форма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -175,7 +182,7 @@ КонецЕсли; Если Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПредлагатьОбсуждения", Ложь); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПредлагатьОбсуждения", Ложь); КонецЕсли; Если Результат.Значение = КодВозвратаДиалога.Да Тогда diff --git a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl index 984728eec..438c3d555 100644 --- a/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбсужденияСлужебныйКлиентСервер/Module.bsl @@ -11,8 +11,12 @@ Функция ТипыВнешнихСистем() Экспорт ТипыИнтеграций = Новый Структура; - ТипыИнтеграций.Вставить("Телеграм", "Telegram"); + ТипыИнтеграций.Вставить("Telegram", "Telegram"); ТипыИнтеграций.Вставить("ВКонтакте", "VK"); + ТипыИнтеграций.Вставить("WhatsApp", "WhatsApp Devino"); + ТипыИнтеграций.Вставить("ВебЧат", "WebChat"); + ТипыИнтеграций.Вставить("Webhook", "Webhook"); + Возврат ТипыИнтеграций; КонецФункции diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 97976fb2d..deb064d0d 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -776,26 +776,26 @@ КонецФункции -// Возвращает ссылку предопределенного элемента по его полному имени. -// Предопределенные элементы могут содержаться только в следующих объектах: +// Возвращает ссылку предопределенного элемента по его полному имени в следующих объектах: // - справочники; // - планы видов характеристик; // - планы счетов; // - планы видов расчета. -// После изменения состава предопределенных следует выполнить метод -// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. +// См. также функцию ОбщегоНазначенияКлиент.ПредопределенныйЭлемент. // +// Для корректной работы этой функции после изменения состава предопределенных следует вызывать +// метод ОбновитьПовторноИспользуемыеЗначения. +// // Параметры: -// ПолноеИмяПредопределенного - Строка - полный путь к предопределенному элементу, включая его имя. -// Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). -// Например: +// ПолноеИмяПредопределенного - Строка - полное имя предопределенного элемента. +// Формат аналогичен функции глобального контекста ПредопределенноеЗначение, например: // "Справочник.ВидыКонтактнойИнформации.EmailПользователя" // "ПланСчетов.Хозрасчетный.Материалы" // "ПланВидовРасчета.Начисления.ОплатаПоОкладу". // // Возвращаемое значение: // ЛюбаяСсылка - ссылка на предопределенный элемент. -// Неопределено - если предопределенный элемент есть в метаданных, но не создан в ИБ. +// Неопределено - если предопределенного элемента нет в метаданных или не создан в информационной базе. // Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт @@ -1304,11 +1304,14 @@ ПараметрыВыполнения.Вставить("УспешныеЗамены", Новый Соответствие); ОтключитьОбновлениеКлючейДоступа(Истина); - Попытка + ТекстПрогресса = НСтр("ru = 'Замена дублей...'"); + ДополнительныеПараметрыПрогресса = Новый Структура; + ДополнительныеПараметрыПрогресса.Вставить("КоличествоОбработанных", 0); + КоличествоДублей = Дубли.Количество(); - Номер = 1; + Для Каждого Дубль Из Дубли Цикл БылиОшибки = Результат.ЕстьОшибки; @@ -1322,21 +1325,26 @@ КонецЕсли; Результат.ЕстьОшибки = Результат.ЕстьОшибки ИЛИ БылиОшибки; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("НомерСеанса", НомерСеансаИнформационнойБазы()); - ДополнительныеПараметры.Вставить("КоличествоОбработанных", Номер); - ДлительныеОперации.СообщитьПрогресс(Номер, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Замена дублей... обработано (%1 из %2)'"), - Номер, КоличествоДублей), ДополнительныеПараметры); - Номер = Номер + 1; + ДополнительныеПараметрыПрогресса.КоличествоОбработанных = + ДополнительныеПараметрыПрогресса.КоличествоОбработанных + 1; + ДобавитьВСтатистикуЗаменыСсылок(Статистика, Дубль, Результат.ЕстьОшибки); + Если ДополнительныеПараметрыПрогресса.КоличествоОбработанных >9 Тогда + ДлительныеОперации.СообщитьПрогресс(ДополнительныеПараметрыПрогресса.КоличествоОбработанных, + ТекстПрогресса, ДополнительныеПараметрыПрогресса); + ДополнительныеПараметрыПрогресса.КоличествоОбработанных = 0; + КонецЕсли; + КонецЦикла; - ОбщегоНазначенияПереопределяемый.ПослеЗаменыСсылок(Результат, ПараметрыВыполнения, ТаблицаПоиска); - - ОтключитьОбновлениеКлючейДоступа(Ложь); + Если ДополнительныеПараметрыПрогресса.КоличествоОбработанных > 0 Тогда + ДлительныеОперации.СообщитьПрогресс(ДополнительныеПараметрыПрогресса.КоличествоОбработанных, + ТекстПрогресса, ДополнительныеПараметрыПрогресса); + КонецЕсли; + ОбщегоНазначенияПереопределяемый.ПослеЗаменыСсылок(Результат, ПараметрыВыполнения, ТаблицаПоиска); + ОтключитьОбновлениеКлючейДоступа(Ложь); Исключение ОтключитьОбновлениеКлючейДоступа(Ложь); ВызватьИсключение; @@ -1347,7 +1355,9 @@ МодульУдалениеПомеченныхОбъектов = ОбщийМодуль("УдалениеПомеченныхОбъектов"); - ДлительныеОперации.СообщитьПрогресс(0, НСтр("ru = 'Удаление дублей...'")); + ДополнительныеПараметрыПрогресса = Новый Структура; + ДлительныеОперации.СообщитьПрогресс(0, НСтр("ru = 'Удаление дублей...'"), ДополнительныеПараметрыПрогресса); + РезультатУдаления = МодульУдалениеПомеченныхОбъектов.УдалитьПомеченныеОбъекты(Результат.ОчередьКНепосредственномуУдалению); ЗарегистрироватьОшибкиУдаления(Результат, РезультатУдаления.ПрепятствующиеУдалению); @@ -1858,9 +1868,8 @@ СистемнаяИнформация = Новый СистемнаяИнформация; Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 - Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.1923") >= 0 - И (СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_ARM64"] - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_E2K"]); + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_ARM64"] + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_E2K"]; КонецФункции @@ -2306,9 +2315,7 @@ Результат.МинимальнаяВерсияПлатформы = НомерСборкиПоТекущейВерсииПлатформы(Результат.МинимальнаяВерсияПлатформы); Результат.РекомендуемаяВерсияПлатформы = НомерСборкиПоТекущейВерсииПлатформы(Результат.РекомендуемаяВерсияПлатформы); - // Локализация УточнитьМинимальнуюВерсиюПлатформыИзСервиса(Результат); - // Конец Локализация СистемнаяИнформация = Новый СистемнаяИнформация; Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, Результат.МинимальнаяВерсияПлатформы) < 0 @@ -2411,8 +2418,7 @@ #Область Даты -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с датами с учетом часового пояса сеанса +#Область ФункцииДляРаботыСДатамиСУчетомЧасовогоПоясаСеанса // Преобразует локальную дату к формату "YYYY-MM-DDThh:mm:ssTZD" согласно ISO 8601. // @@ -2434,17 +2440,18 @@ // // Параметры: // ВремяНачала - Дата - начальная точка интервала. -// ВремяОкончания - Дата - конечная точка интервала, если не задана - берется текущая дата сеанса. +// ВремяОкончания - Дата - конечная точка интервала. Если не задана, берется текущая дата сеанса. // // Возвращаемое значение: -// Строка - представление интервала времени. +// Строка - представление интервала времени. Пустая строка, если ВремяНачала больше ВремяОкончания. // -Функция ИнтервалВремениСтрокой(ВремяНачала, ВремяОкончания = Неопределено) Экспорт +Функция ИнтервалВремениСтрокой(Знач ВремяНачала, Знач ВремяОкончания = Неопределено) Экспорт Если ВремяОкончания = Неопределено Тогда ВремяОкончания = ТекущаяДатаСеанса(); - ИначеЕсли ВремяНачала > ВремяОкончания Тогда - ВызватьИсключение НСтр("ru = 'Дата окончания интервала не может быть меньше даты начала.'"); + КонецЕсли; + Если ВремяНачала > ВремяОкончания Тогда + Возврат ""; КонецЕсли; ВеличинаИнтервала = ВремяОкончания - ВремяНачала; @@ -2456,8 +2463,8 @@ ОписаниеИнтервала = НСтр("ru = 'более месяца'"); ИначеЕсли ВеличинаИнтервалаВДнях >= 1 Тогда ОписаниеИнтервала = Формат(ВеличинаИнтервалаВДнях, "ЧДЦ=0") + " " - + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(ВеличинаИнтервалаВДнях, - "", НСтр("ru = 'день,дня,дней,,,,,,0'")); + + ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(ВеличинаИнтервалаВДнях, "", + НСтр("ru = 'день,дня,дней,,,,,,0'")); Иначе ОписаниеИнтервала = НСтр("ru = 'менее одного дня'"); КонецЕсли; @@ -2466,8 +2473,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для работы с настройкой рабочей даты. +#КонецОбласти + +#Область ФункцииДляРаботыСНастройкойРабочейДаты // Сохраняет настройку рабочей даты пользователя. // @@ -2531,6 +2539,8 @@ #КонецОбласти +#КонецОбласти + #Область Данные //////////////////////////////////////////////////////////////////////////////// @@ -3456,8 +3466,7 @@ #Область Метаданные -//////////////////////////////////////////////////////////////////////////////// -// Функции определения типов объектов метаданных. +#Область ФункцииОпределенияТиповОбъектовМетаданных // Ссылочные типы данных @@ -3756,8 +3765,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с типами, объектами метаданных и их строковыми представлениями. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСТипамиОбъектамиМетаданныхИИхСтроковымиПредставлениями // Возвращает имена реквизитов объекта заданного типа. // @@ -3913,6 +3923,9 @@ ИначеЕсли Метаданные.WSСсылки.Содержит(ОбъектМетаданных) Тогда Возврат "WSСсылки"; + ИначеЕсли Метаданные.СервисыИнтеграции.Содержит(ОбъектМетаданных) Тогда + Возврат "СервисыИнтеграции"; + ИначеЕсли Метаданные.Стили.Содержит(ОбъектМетаданных) Тогда Возврат "Стили"; @@ -4512,12 +4525,11 @@ Возврат СтандартныеПодсистемыПовтИсп.ДоступностьОбъектовПоОпциям().Получить(ПолноеИмя) <> Ложь; КонецФункции -// Добавляет описание переименования объекта метаданных при переходе на указанную версию конфигурации. -// Добавление выполняется в структуру Итог, которая передается в -// процедуру ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. +// Позволяет отразить переименование объекта метаданных при переходе на новую версию конфигурации. +// Для вызова в процедуре ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. // // Параметры: -// Итог - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных.Итог +// Переименования - см. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных.Переименования // ВерсияИБ - Строка - версия конечной конфигурации, при переходе на которую нужно // выполнить переименование, например, "2.1.2.14". // СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать, @@ -4529,13 +4541,14 @@ // Например, "СтандартныеПодсистемы" - как указано // в ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы. // Пример: -// ОбщегоНазначения.ДобавитьПереименование(Итог, "2.1.2.14", +// ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.1.2.14", // "Подсистема.СлужебныеПодсистемы", // "Подсистема.СервисныеПодсистемы"); // -Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт +Процедура ДобавитьПереименование(Переименования, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, + ИдентификаторБиблиотеки = "") Экспорт - Справочники.ИдентификаторыОбъектовМетаданных.ДобавитьПереименование(Итог, + Справочники.ИдентификаторыОбъектовМетаданных.ДобавитьПереименование(Переименования, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки); КонецПроцедуры @@ -4833,6 +4846,317 @@ КонецФункции +// Возвращает условие отбора и параметры запроса для выбора записей из базы данных +// по указанному набору записей с учетом режима замещения. +// +// Если Замещение равно Истина или РежимЗамещения.Замещение, тогда +// записи будут извлекаться из базы данных по настройке свойства Отбор, +// в противном случае по ключам строк записей в наборе записей. +// +// Параметры: +// НаборЗаписей - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей, который используется +// для подготовки условия и параметров для запроса. +// - Отбор - отбор набора записей (в этом случае Замещение считается Истина). +// +// Замещение - РежимЗамещения, Булево - как передается в подписку на событие ПередЗаписью. +// - Неопределено - получить и установить в этот параметр значение из свойства +// Замещение структуры ДополнительныеСвойства указанного набора записей +// (если свойства нет, тогда устанавливается Истина). +// +// Запрос - Запрос - установить параметры в указанный запрос и заменить на возвращаемое +// УсловиеЗапроса строку "&УсловиеОтбора" в тексте запроса, если есть. +// - Неопределено +// +// ДополнительныеПараметры - см. НовыеПараметрыОтбораЗаписейНабораИзБазыДанных +// +// Возвращаемое значение: +// Структура: +// * УсловиеЗапроса - Строка - условие для подстановки в текст запроса. +// * ПараметрыЗапроса - Структура из КлючИЗначение: +// ** Ключ - Строка - имя поля отбора или ЗначенияПолейОтбораСтрок с указанным префиксом. +// ** Значение - Произвольный - значение поля отбора или таблица значений. +// +// Пример: +// Запрос = Новый Запрос; +// Запрос.Текст = +// "ВЫБРАТЬ РАЗЛИЧНЫЕ +// | ТекущаяТаблица.Пользователь КАК Пользователь, +// | ТекущаяТаблица.ПотребоватьСменуПароляПриВходе КАК ПотребоватьСменуПароляПриВходе, +// | ТекущаяТаблица.СрокДействияНеОграничен КАК СрокДействияНеОграничен, +// | ТекущаяТаблица.СрокДействия КАК СрокДействия, +// | ТекущаяТаблица.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода КАК ПросрочкаРаботыВПрограммеДоЗапрещенияВхода +// |ИЗ +// | РегистрСведений.СведенияОПользователях КАК ТекущаяТаблица +// |ГДЕ +// | &УсловиеОтбора"; +// ОбщегоНазначения.ОтборЗаписейНабораИзБазыДанных(НаборЗаписей, Замещение, Запрос); +// СуществующиеЗаписи = Запрос.Выполнить().Выгрузить(); +// +Функция ОтборЗаписейНабораИзБазыДанных(НаборЗаписей, Замещение = Неопределено, Запрос = Неопределено, + ДополнительныеПараметры = Неопределено) Экспорт + + Параметры = ?(ДополнительныеПараметры <> Неопределено, ДополнительныеПараметры, + НовыеПараметрыОтбораЗаписейНабораИзБазыДанных()); + + Режим = Новый Структура("Замещение", Истина); + Если ТипЗнч(НаборЗаписей) = Тип("Отбор") Или ТипЗнч(НаборЗаписей) = Тип("Массив") Тогда + Отбор = НаборЗаписей; + Иначе + Отбор = НаборЗаписей.Отбор; + Если Замещение = Неопределено Тогда + ЗаполнитьЗначенияСвойств(Режим, НаборЗаписей.ДополнительныеСвойства); + ИмяПараметра = "НаборЗаписей.ДополнительныеСвойства.Замещение"; + Иначе + Режим.Замещение = Замещение; + ИмяПараметра = "Замещение"; + КонецЕсли; + Если ТипЗнч(Режим.Замещение) <> Тип("Булево") + И Не ЭтоДобавлениеНабораЗаписей(Режим.Замещение) + И Не ЭтоЗамещениеНабораЗаписей(Режим.Замещение) + И Не ЭтоОбновлениеНабораЗаписей(Режим.Замещение) + И Не ЭтоСлияниеНабораЗаписей(Режим.Замещение) + И Не ЭтоУдалениеНабораЗаписей(Режим.Замещение) Тогда + + ОжидаемыеТипы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Тип("Булево")); + Если СтандартныеПодсистемыПовтИсп.РежимДобавленияНабораЗаписей() <> Неопределено Тогда + // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) + ОжидаемыеТипы.Добавить(Вычислить("Тип(""РежимЗамещения"")")); + // АПК:488-вкл + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ОбщегоНазначения.ОтборЗаписейНабораИзБазыДанных", + ИмяПараметра, Режим.Замещение, ОжидаемыеТипы); + КонецЕсли; + КонецЕсли; + Если Замещение = Неопределено Тогда + Замещение = Режим.Замещение; + КонецЕсли; + + ПараметрыЗапроса = Новый Структура; + Условие = "ЛОЖЬ"; + Псевдоним = Параметры.ПсевдонимТаблицы; + + Если ЭтоОбновлениеНабораЗаписей(Режим.Замещение) + Или ЭтоСлияниеНабораЗаписей(Режим.Замещение) + Или ЭтоУдалениеНабораЗаписей(Режим.Замещение) Тогда + + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи( + НаборЗаписей.Метаданные().ПолноеИмя()); + + СписокПолей = ОписаниеКлючаЗаписи.СписокПолейОбновления; + Если ЗначениеЗаполнено(СписокПолей) Тогда + ИмяПараметраТаблицы = Параметры.ИмяПараметраТаблицыКлючевыхПолей; + Выгрузка = НаборЗаписей.Выгрузить(, СписокПолей); + ПараметрыЗапроса.Вставить(ИмяПараметраТаблицы, Выгрузка); + Если Запрос <> Неопределено Тогда + Запрос.УстановитьПараметр(ИмяПараметраТаблицы, Выгрузка); + КонецЕсли; + Условие = СтрШаблон("(%1) В (&" + ИмяПараметраТаблицы + ")", + Псевдоним + СтрЗаменить(СписокПолей, ",", ", " + Псевдоним)); // @query-part-1 + Иначе + Условие = "ИСТИНА"; + КонецЕсли; + + ИначеЕсли Режим.Замещение = Истина + Или ЭтоЗамещениеНабораЗаписей(Режим.Замещение) Тогда + + ЧастиУсловия = Новый Массив; + Префикс = Параметры.ПрефиксИменПолейВПараметрах; + Шаблон = Псевдоним + "%1 = &" + Префикс + "%1"; // @query-part-1 + Для Каждого ЭлементОтбора Из Отбор Цикл + Если Не ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + ЧастиУсловия.Добавить(СтрШаблон(Шаблон, ЭлементОтбора.Имя)); + ПараметрыЗапроса.Вставить(Префикс + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + Если Запрос <> Неопределено Тогда + Запрос.УстановитьПараметр(Префикс + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЕсли; + КонецЦикла; + Условие = ?(Не ЗначениеЗаполнено(ЧастиУсловия), "ИСТИНА", + СтрСоединить(ЧастиУсловия, Символы.ПС + " И ")); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("УсловиеЗапроса", Условие); + Результат.Вставить("ПараметрыЗапроса", ПараметрыЗапроса); + + Если Запрос <> Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", Условие); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Дополнительные параметры для функции ОтборЗаписейНабораИзБазыДанных. +// +// Возвращаемое значение: +// Структура: +// * ПсевдонимТаблицы - Строка - префикс, добавляемый к именам полей +// (начальное значение "ТекущаяТаблица."). +// +// * ПрефиксИменПолейВПараметрах - Строка - префикс, добавляемый к именам +// полей отбора в условии и параметрах запроса (начальное значение без префикса). +// +// * ИмяПараметраТаблицыКлючевыхПолей - Строка - начальное значение ЗначенияПолейОтбораСтрок. +// +Функция НовыеПараметрыОтбораЗаписейНабораИзБазыДанных() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ПсевдонимТаблицы", "ТекущаяТаблица."); + Результат.Вставить("ПрефиксИменПолейВПараметрах", ""); + Результат.Вставить("ИмяПараметраТаблицыКлючевыхПолей", "ЗначенияПолейОтбораСтрок"); + + Возврат Результат; + +КонецФункции + +// Возвращает указанные поля строк регистра из базы данных, которые будут +// записаны при записи указанного набора записей с учетом режима замещения. +// +// Параметры: +// НаборЗаписей - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей, +// который используется вычисления изменений. +// +// Замещение - РежимЗамещения, Булево - как передается в подписку на событие ПередЗаписью. +// - Неопределено - получить и установить в этот параметр значение из свойства +// Замещение структуры ДополнительныеСвойства указанного набора записей +// (если свойства нет, тогда устанавливается Истина). +// +// СписокПолей - Строка - список полей набора записей через запятую. +// Если не указан, значит все поля набора записей. +// +// Возвращаемое значение: +// ТаблицаЗначений - поля из параметра СписокПолей, +// строки без повторений для указанного списка полей. +// +Функция ЗаписиНабораИзБазыДанных(НаборЗаписей, Замещение = Неопределено, СписокПолей = "") Экспорт + + ПолноеИмяРегистра = НаборЗаписей.Метаданные().ПолноеИмя(); + СвернутьРезультат = Ложь; + + Если ЗначениеЗаполнено(СписокПолей) Тогда + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмяРегистра); + Поля = СтрРазделить(ВРег(СписокПолей), ","); + Для Каждого Поле Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + Если Поля.Найти(ВРег(Поле.Имя)) = Неопределено Тогда + СвернутьРезультат = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + Таблица = НаборЗаписей.Выгрузить(Новый Массив); + Поля = Новый Массив; + Для Каждого Колонка Из Таблица.Колонки Цикл + Поля.Добавить(Колонка.Имя); + КонецЦикла; + СписокПолей = СтрСоединить(Поля, ","); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | &ВыбираемыеПоля + |ИЗ + | &Таблица КАК ТекущаяТаблица + |ГДЕ + | &УсловиеОтбора"; + + ОтборЗаписейНабораИзБазыДанных(НаборЗаписей, Замещение, Запрос); + + Если Замещение = Ложь Или ЭтоДобавлениеНабораЗаписей(Замещение) Тогда + Возврат НаборЗаписей.Выгрузить(Новый Массив, + ?(ЗначениеЗаполнено(СписокПолей), СписокПолей, Неопределено)); + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", ПолноеИмяРегистра); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВыбираемыеПоля", СписокПолей); + + Результат = Запрос.Выполнить().Выгрузить(); + + Если СвернутьРезультат Тогда + Результат.Свернуть(СписокПолей); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает удаленные и добавленные строки регистра +// для указанного набора записей с учетом режима замещения. +// +// Параметры: +// ЗаписиИзБазыДанных - см. ЗаписиНабораИзБазыДанных +// +// НаборЗаписей - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей, +// который используется вычисления изменений. +// +// Замещение - РежимЗамещения, Булево - как передается в подписку на событие ПередЗаписью. +// +// ТолькоИзменения - Булево - если установить Истина, тогда в результате +// не будет строк без изменений (ВидИзмененияСтроки = 0). +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ВидИзмененияСтроки - Число - если 1, то строка добавлена, +// если -1, то удалена, если 0, то не изменилась. +// Далее поля из таблицы ЗаписиИзБазыДанных. +// +Функция ИзменениеЗаписейНабора(ЗаписиИзБазыДанных, НаборЗаписей, Замещение, ТолькоИзменения = Ложь) Экспорт + + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи( + НаборЗаписей.Метаданные().ПолноеИмя()); + + СписокПолейКлючаЗаписи = ВРег("," + ОписаниеКлючаЗаписи.СписокПолей + ","); + + ПоляКлючаЗаписи = Новый Массив; + Поля = Новый Массив; + Для Каждого Колонка Из ЗаписиИзБазыДанных.Колонки Цикл + Поля.Добавить(Колонка.Имя); + Если СтрНайти(СписокПолейКлючаЗаписи, "," + ВРег(Колонка.Имя) + ",") > 0 Тогда + ПоляКлючаЗаписи.Добавить(Колонка.Имя); + КонецЕсли; + КонецЦикла; + СписокПолей = СтрСоединить(Поля, ","); + + НовыеСтроки = ?(ЭтоУдалениеНабораЗаписей(Замещение), Новый Массив, Неопределено); + Таблица = НаборЗаписей.Выгрузить(НовыеСтроки, СписокПолей); + Если ОписаниеКлючаЗаписи.ОписаниеПолей.Количество() <> ПоляКлючаЗаписи.Количество() Тогда + Таблица.Свернуть(СписокПолей); + КонецЕсли; + Таблица.Колонки.Добавить("ВидИзмененияСтроки", Новый ОписаниеТипов("Число")); + Таблица.ЗаполнитьЗначения(1, "ВидИзмененияСтроки"); + + Для Каждого СтараяЗапись Из ЗаписиИзБазыДанных Цикл + НоваяСтрока = Таблица.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтараяЗапись); + НоваяСтрока.ВидИзмененияСтроки = -1; + КонецЦикла; + + Таблица.Свернуть(СписокПолей, "ВидИзмененияСтроки"); + + Если ТолькоИзменения Тогда + СтрокиБезИзменений = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", 0)); + Для Каждого СтрокаТаблицы Из СтрокиБезИзменений Цикл + Таблица.Удалить(СтрокаТаблицы); + КонецЦикла; + КонецЕсли; + + Возврат Таблица; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область ХранилищеНастроек @@ -5277,7 +5601,72 @@ #КонецОбласти -#Область ВебСервисы +#Область РаботаСИнтернетом + +// Проверяет, что разрешена работа с Интернет-сервисами из приложения. +// Параметры: +// ПоказатьОшибку - Булево - вызвать исключение. +// +// Возвращаемое значение: +// Булево +// +Функция РазрешенДоступКИнтернетСервисам(ПоказатьОшибку = Ложь) Экспорт + + Если РазделениеВключено() Тогда + Возврат Истина; + КонецЕсли; + + ДоступРазрешен = ПолучитьФункциональнуюОпцию("РазрешитьДоступКИнтернетСервисам"); + + Если Не ДоступРазрешен Тогда + ВерсияМетаданных = Метаданные.Версия; + Если Не ПустаяСтрока(ВерсияМетаданных) И ВерсияМетаданных <> ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ( + Метаданные.Имя) Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Если Не ДоступРазрешен И ПоказатьОшибку Тогда + ВызватьИсключение ЗапрещенДоступКИнтернетСервисамТекстСообщения(); + КонецЕсли; + + Возврат ДоступРазрешен; + +КонецФункции + +// Текст ошибки при отключенном доступе к сервисам интернета. +// +// Возвращаемое значение: +// Строка +// +Функция ЗапрещенДоступКИнтернетСервисамТекстСообщения() Экспорт + + Возврат НСтр("ru = 'Доступ к Интернет-сервисам в приложении запрещен администратором (""Интернет-поддержка и сервисы"" - ""Доступ к Интернет-сервисам"").'"); + +КонецФункции + +// Устанавливает признак разрешения работа с Интернет-сервисами из приложения. После вызова на клиенте рекомендуется +// вызвать оповещение о записи константы. +// +// Параметры: +// Разрешить - Булево +// +Процедура НастроитьРаботуСИнтернетСервисами(Разрешить) Экспорт + + Если Не Разрешить И РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Константы.РазрешитьДоступКИнтернетСервисам.Установить(Разрешить); + + Если Разрешить И ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + + МодульБлокировкаРаботыСВнешнимиРесурсами = ОбщийМодуль("БлокировкаРаботыСВнешнимиРесурсами"); + МодульБлокировкаРаботыСВнешнимиРесурсами.ПриВключенииДоступаКИнтернетСервисам(); + + КонецЕсли; + +КонецПроцедуры // Возвращает структуру параметров для функции СоздатьWSПрокси. // @@ -5298,6 +5687,7 @@ Результат.Вставить("ДелатьКонтрольныйВызов", Ложь); Результат.Вставить("ЗащищенноеСоединение", Неопределено); Результат.Вставить("ПроверятьДоставкуПакетовПриОшибке", Истина); + Результат.Вставить("ПроверятьДоступКИнтернетСервисам", Истина); Возврат Результат; КонецФункции @@ -5327,6 +5717,8 @@ // * ЗащищенноеСоединение - ЗащищенноеСоединениеOpenSSL // - Неопределено - необязательные параметры защищенного соединения. // * ПроверятьДоставкуПакетовПриОшибке - см. ПолучениеФайловИзИнтернета.ДиагностикаСоединения.ПроверятьДоставкуПакетов. +// * ПроверятьДоступКИнтернетСервисам - Булево - необязательный параметр, по умолчанию Истина - выполняется проверка +// разрешения доступа к Интернет-сервисам из приложения. // // Возвращаемое значение: // WSПрокси @@ -5347,6 +5739,10 @@ ПараметрыПодключения = ПараметрыПодключенияWSПрокси(); ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ПараметрыПодключенияWSПрокси); + Если ПараметрыПодключения.ПроверятьДоступКИнтернетСервисам Тогда + РазрешенДоступКИнтернетСервисам(Истина); + КонецЕсли; + ДелатьКонтрольныйВызов = ПараметрыПодключения.ДелатьКонтрольныйВызов; Таймаут = ПараметрыПодключения.Таймаут; @@ -5386,8 +5782,7 @@ КонецФункции -///////////////////////////////////////////////////////////////////////////////// -// Версионирование программных интерфейсов. +#Область ВерсионированиеПрограммныхИнтерфейсов // Возвращает номера версий программных интерфейсов удаленной системы, доступной через веб-сервис. // Позволяет обеспечивать полную обратную совместимость при изменениях в программных интерфейсах @@ -5532,6 +5927,26 @@ КонецПроцедуры +// Список версий программных интерфейсов, доступных через web-сервис InterfaceVersions. +// +// Возвращаемое значение: +// Структура: +// * Ключ - Строка - имя программного интерфейса +// * Значение - Массив из Строка - поддерживаемые версии интерфейса. +// +Функция ВерсииИнтерфейсов() Экспорт + + Результат = Новый Структура; + + ИнтеграцияПодсистемБСП.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(Результат); + ОбщегоНазначенияПереопределяемый.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(Результат); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область БезопасноеХранилище @@ -5601,69 +6016,67 @@ "Владелец", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", Владелец, ТипЗнч(Владелец))); Если ЗначениеЗаполнено(Ключ) Тогда - ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(Ключ) = Тип("Строка"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимое значение параметра %1 в %2. |параметр должен содержать строку; передано значение: %3 (тип %4).'"), "Ключ", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", Ключ, ТипЗнч(Ключ))); - Иначе - ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(Данные) = Тип("Структура"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недопустимое значение параметра %1 в %2. |Если Ключ = Неопределено, то параметр должен содержать структуру; передано значение: %3 (тип %4).'"), "Данные", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", Данные, ТипЗнч(Данные))); - КонецЕсли; + Блокировка = Новый БлокировкаДанных(); ЭтоОбластьДанных = РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных(); Если ЭтоОбластьДанных Тогда БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных.СоздатьМенеджерЗаписи(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.БезопасноеХранилищеДанныхОбластейДанных"); Иначе БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанных.СоздатьМенеджерЗаписи(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.БезопасноеХранилищеДанных"); КонецЕсли; БезопасноеХранилищеДанных.Владелец = Владелец; - БезопасноеХранилищеДанных.Прочитать(); - - Если Данные <> Неопределено Тогда - - Если БезопасноеХранилищеДанных.Выбран() Тогда + ЭлементБлокировки.УстановитьЗначение("Владелец", Владелец); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); - - Если ТипЗнч(ДанныеДляСохранения) <> Тип("Структура") Тогда - ДанныеДляСохранения = Новый Структура(); - КонецЕсли; - - Если ЗначениеЗаполнено(Ключ) Тогда - ДанныеДляСохранения.Вставить(Ключ, Данные); + Если Данные <> Неопределено Тогда + БезопасноеХранилищеДанных.Прочитать(); + Если БезопасноеХранилищеДанных.Выбран() Тогда + + ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); + Если ТипЗнч(ДанныеДляСохранения) <> Тип("Структура") Тогда + ДанныеДляСохранения = Новый Структура(); + КонецЕсли; + + Если ЗначениеЗаполнено(Ключ) Тогда + ДанныеДляСохранения.Вставить(Ключ, Данные); + Иначе + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ДанныеДляСохранения, Данные, Истина); + КонецЕсли; Иначе - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ДанныеДляСохранения, Данные, Истина); + ДанныеДляСохранения = ?(ЗначениеЗаполнено(Ключ), Новый Структура(Ключ, Данные), Данные); + БезопасноеХранилищеДанных.Владелец = Владелец; КонецЕсли; - - ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); + ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(9)); БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; БезопасноеХранилищеДанных.Записать(); - Иначе - - ДанныеДляСохранения = ?(ЗначениеЗаполнено(Ключ), Новый Структура(Ключ, Данные), Данные); - ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); - - БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; - БезопасноеХранилищеДанных.Владелец = Владелец; - БезопасноеХранилищеДанных.Записать(); - + БезопасноеХранилищеДанных.Удалить(); КонецЕсли; - Иначе - БезопасноеХранилищеДанных.Удалить(); - - КонецЕсли; - + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры // Возвращает данные из безопасного хранилища. @@ -5681,6 +6094,12 @@ // Ключи - Строка - содержит имя ключа данных или список имен ключей, указанных через запятую. // - Неопределено - будут возвращены все сохраненные данные переданных владельцев. // ОбщиеДанные - Булево - Истина, если требуется в модели сервиса получить данные из общих данных в разделенном режиме. +// ОбластьДанных - Число - содержит номер области данных для которой необходимо выполнить получение данных из +// безопасного хранилища области данных. Параметр следует передавать только в случае получения +// данных из неразделенного сеанса для области данных. Во всех остальных случаях параметр +// игнорируется. +// Неопределено - режим получения данных из безопасного хранилища определяется автоматический +// по доступности использования разделенных данных. // // Возвращаемое значение: // Соответствие из КлючИЗначение: @@ -5709,7 +6128,11 @@ // // КонецПроцедуры // -Функция ПрочитатьДанныеВладельцевИзБезопасногоХранилища(Владельцы, Ключи = "Пароль", ОбщиеДанные = Неопределено) Экспорт +Функция ПрочитатьДанныеВладельцевИзБезопасногоХранилища( + Владельцы, + Ключи = "Пароль", + ОбщиеДанные = Неопределено, + ОбластьДанных = Неопределено) Экспорт ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(Владельцы) = Тип("Массив"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -5717,9 +6140,17 @@ |параметр должен содержать массив; передано значение: %3 (тип %4).'"), "Владельцы", "ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища", Владельцы, ТипЗнч(Владельцы))); - Результат = ДанныеИзБезопасногоХранилища(Владельцы, Ключи, ОбщиеДанные); + Если ЗначениеЗаполнено(ОбластьДанных) Тогда + ОбщегоНазначенияКлиентСервер.Проверить(ТипЗнч(ОбластьДанных) = Тип("Число"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |параметр должен содержать строку; передано значение: %3 (тип %4).'"), + "ОбластьДанных", "ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище", + ОбластьДанных, + ТипЗнч(ОбластьДанных))); + КонецЕсли; - Возврат Результат; + Возврат ДанныеИзБезопасногоХранилища(Владельцы, Ключи, ОбщиеДанные, ОбластьДанных); КонецФункции @@ -5738,6 +6169,12 @@ // Ключи - Строка - содержит список имен сохраненных данных, указанных через запятую. // - Неопределено - будут возвращены все сохраненные данные владельца. // ОбщиеДанные - Булево - Истина, если требуется в модели сервиса получить данные из общих данных в разделенном режиме. +// ОбластьДанных - Число - содержит номер области данных для которой необходимо выполнить получение данных из +// безопасного хранилища области данных. Параметр следует передавать только в случае получения +// данных из неразделенного сеанса для области данных. Во всех остальных случаях параметр +// игнорируется. +// Неопределено - режим получения данных из безопасного хранилища определяется автоматический +// по доступности использования разделенных данных. // // Возвращаемое значение: // Произвольный, Структура, Неопределено - данные из безопасного хранилища. Если указан один ключ, @@ -5757,14 +6194,15 @@ // УстановитьПривилегированныйРежим(Истина); // ЛогинИПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка, Неопределено); // -Функция ПрочитатьДанныеИзБезопасногоХранилища(Владелец, Ключи = "Пароль", ОбщиеДанные = Неопределено) Экспорт +Функция ПрочитатьДанныеИзБезопасногоХранилища( + Владелец, + Ключи = "Пароль", + ОбщиеДанные = Неопределено, + ОбластьДанных = Неопределено) Экспорт Владельцы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Владелец); - ДанныеВладельца = ПрочитатьДанныеВладельцевИзБезопасногоХранилища(Владельцы, Ключи, ОбщиеДанные); - - Результат = ДанныеВладельца[Владелец]; - - Возврат Результат; + ДанныеВладельца = ПрочитатьДанныеВладельцевИзБезопасногоХранилища(Владельцы, Ключи, ОбщиеДанные, ОбластьДанных); + Возврат ДанныеВладельца[Владелец]; КонецФункции @@ -5796,7 +6234,7 @@ // // КонецПроцедуры // -Процедура УдалитьДанныеИзБезопасногоХранилища(Владелец, Ключи = Неопределено) Экспорт +Процедура УдалитьДанныеИзБезопасногоХранилища(Знач Владелец, Знач Ключи = Неопределено) Экспорт ОбщегоНазначенияКлиентСервер.Проверить(ЗначениеЗаполнено(Владелец), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -5804,39 +6242,53 @@ |параметр должен содержать ссылку; передано значение: %3 (тип %4).'"), "Владелец", "ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища", Владелец, ТипЗнч(Владелец))); + Блокировка = Новый БлокировкаДанных(); + Владельцы = ?(ТипЗнч(Владелец) = Тип("Массив"), Владелец, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Владелец)); Если РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных() Тогда БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных.СоздатьМенеджерЗаписи(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.БезопасноеХранилищеДанныхОбластейДанных"); Иначе БезопасноеХранилищеДанных = РегистрыСведений.БезопасноеХранилищеДанных.СоздатьМенеджерЗаписи(); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.БезопасноеХранилищеДанных"); КонецЕсли; - Владельцы = ?(ТипЗнч(Владелец) = Тип("Массив"), Владелец, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Владелец)); + Для каждого ВладелецДанных Из Владельцы Цикл + ЭлементБлокировки.УстановитьЗначение("Владелец", ВладелецДанных); + КонецЦикла; - Для Каждого ВладелецДанных Из Владельцы Цикл + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); - БезопасноеХранилищеДанных.Владелец = ВладелецДанных; - БезопасноеХранилищеДанных.Прочитать(); - Если ТипЗнч(БезопасноеХранилищеДанных.Данные) = Тип("ХранилищеЗначения") Тогда - ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); - Если Ключи <> Неопределено И ТипЗнч(ДанныеДляСохранения) = Тип("Структура") Тогда - СписокКлючей = СтрРазделить(Ключи, ",", Ложь); - Если БезопасноеХранилищеДанных.Выбран() И СписокКлючей.Количество() > 0 Тогда - Для каждого КлючДляУдаления Из СписокКлючей Цикл - Если ДанныеДляСохранения.Свойство(КлючДляУдаления) Тогда - ДанныеДляСохранения.Удалить(КлючДляУдаления); - КонецЕсли; - КонецЦикла; - ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); - БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; - БезопасноеХранилищеДанных.Записать(); - Возврат; + Для Каждого ВладелецДанных Из Владельцы Цикл + + БезопасноеХранилищеДанных.Владелец = ВладелецДанных; + БезопасноеХранилищеДанных.Прочитать(); + Если ТипЗнч(БезопасноеХранилищеДанных.Данные) = Тип("ХранилищеЗначения") Тогда + ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); + Если Ключи <> Неопределено И ТипЗнч(ДанныеДляСохранения) = Тип("Структура") Тогда + СписокКлючей = СтрРазделить(Ключи, ",", Ложь); + Если БезопасноеХранилищеДанных.Выбран() И СписокКлючей.Количество() > 0 Тогда + Для каждого КлючДляУдаления Из СписокКлючей Цикл + Если ДанныеДляСохранения.Свойство(КлючДляУдаления) Тогда + ДанныеДляСохранения.Удалить(КлючДляУдаления); + КонецЕсли; + КонецЦикла; + БезопасноеХранилищеДанных.Данные = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(9)); + БезопасноеХранилищеДанных.Записать(); + Продолжить; + КонецЕсли; КонецЕсли; КонецЕсли; - КонецЕсли; - - БезопасноеХранилищеДанных.Удалить(); - - КонецЦикла; + + БезопасноеХранилищеДанных.Удалить(); + + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -6082,9 +6534,9 @@ // Выполняет произвольный алгоритм на встроенном языке 1С:Предприятия, предварительно устанавливая // безопасный режим выполнения кода и безопасный режим разделения данных для всех разделителей, // присутствующих в составе конфигурации. -// +// // Для выполняемого кода так же применяются дополнительные ограничения, запрещается: -// +// // 1) Вызов методов: // - Выполнить // - Вычислить @@ -6108,17 +6560,31 @@ // В тексте алгоритма обращение к контексту должно происходить по имени "Параметры". // Например, выражение "Параметры.Значение1 = Параметры.Значение2" обращается к значениям // "Значение1" и "Значение2", переданным в Параметры, как свойства. +// ПараметрыПроверкиАлгоритма - см. ОбщегоНазначения.ПараметрыПроверкиАлгоритма +// Позволяет указать список методов, модулей и свойств глобального контекста, использование +// которых не допускается при выполнении алгоритма. Дополняет базовую проверку. // // Пример: // +// // Пример 1 // Параметры = Новый Структура; // Параметры.Вставить("Значение1", 1); // Параметры.Вставить("Значение2", 10); // ОбщегоНазначения.ВыполнитьВБезопасномРежиме("Параметры.Значение1 = Параметры.Значение2", Параметры); // -Процедура ВыполнитьВБезопасномРежиме(Знач Алгоритм, Знач Параметры = Неопределено) Экспорт +// // Пример 2 +// Параметры = Новый Структура; +// Параметры.Вставить("Источник", Источник); +// Параметры.Вставить("Результат", Неопределено); +// ПараметрыПроверкиАлгоритма = ОбщегоНазначения.ПараметрыПроверкиАлгоритма(); +// ПараметрыПроверкиАлгоритма.НедопустимыеМетоды.Добавить("Записать"); +// ПараметрыПроверкиАлгоритма.НедопустимыеМетоды.Добавить("Base64Значение"); +// ОбщегоНазначения.ВыполнитьВБезопасномРежиме(ВычисляемоеВыражение, Параметры, ПараметрыПроверкиАлгоритма); +// +Процедура ВыполнитьВБезопасномРежиме(Знач Алгоритм, Знач Параметры = Неопределено, + Знач ПараметрыПроверкиАлгоритма = Неопределено) Экспорт - ПроверитьАлгоритм(Алгоритм); + ПроверитьАлгоритм(Алгоритм, ПараметрыПроверкиАлгоритма); УстановитьБезопасныйРежим(Истина); @@ -6130,16 +6596,14 @@ КонецЕсли; Для Каждого ИмяРазделителя Из МассивРазделителей Цикл - УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); - КонецЦикла; Попытка Если ТранзакцияАктивна() Тогда Выполнить Алгоритм; Иначе - НачатьТранзакцию(); + НачатьТранзакцию(); // АПК:326 принудительная отмена транзакции Попытка Выполнить Алгоритм; ОтменитьТранзакцию(); @@ -6153,7 +6617,7 @@ Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке); ВызватьИсключение(Уточнение.Текст, КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных ,,, ИнформацияОбОшибке); КонецПопытки; - + КонецПроцедуры // Вычисляет переданное выражение, предварительно устанавливая безопасный режим выполнения кода @@ -6184,6 +6648,9 @@ // В тексте выражения обращение к контексту должно происходить по имени "Параметры". // Например, выражение "Параметры.Значение1 = Параметры.Значение2" обращается к значениям // "Значение1" и "Значение2" переданные в Параметры, как свойства. +// ПараметрыПроверкиАлгоритма - см. ОбщегоНазначения.ПараметрыПроверкиАлгоритма +// Позволяет указать список методов, модулей и свойств глобального контекста, использование +// которых не допускается при выполнении алгоритма. Дополняет базовую проверку. // // Возвращаемое значение: // Произвольный - результат вычисления выражения. @@ -6199,9 +6666,10 @@ // // Пример 2 // Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме("СтандартныеПодсистемыСервер.ВерсияБиблиотеки()"); // -Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено) Экспорт +Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено, + Знач ПараметрыПроверкиАлгоритма = Неопределено) Экспорт - ПроверитьАлгоритм(Выражение); + ПроверитьАлгоритм(Выражение, ПараметрыПроверкиАлгоритма); УстановитьБезопасныйРежим(Истина); @@ -6213,16 +6681,14 @@ КонецЕсли; Для Каждого ИмяРазделителя Из МассивРазделителей Цикл - УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); - КонецЦикла; Попытка Если ТранзакцияАктивна() Тогда Результат = Вычислить(Выражение); Иначе - НачатьТранзакцию(); + НачатьТранзакцию(); // АПК:326 принудительная отмена транзакции Попытка Результат = Вычислить(Выражение); ОтменитьТранзакцию(); @@ -6255,6 +6721,29 @@ КонецФункции +// Конструктор структуры для параметра ПараметрыПроверкиАлгоритма функций +// ОбщегоНазначения.ВыполнитьВБезопасномРежиме и ОбщегоНазначения.ВычислитьВБезопасномРежиме. +// +// Возвращаемое значение: +// Структура: +// * НедопустимыеМетоды - Массив из Строка - список методов, вызов которых не допускается при +// выполнении алгоритма. +// * ЗапрещенныеСвойстваГлобальногоКонтекста - Массив из Строка - список свойств глобального контекста, +// обращение к которым не допускается при выполнении алгоритма. +// * ЗапрещенныеМодули - Массив из Строка - список модулей, использование которых не допускается при +// выполнении алгоритма. +// +Функция ПараметрыПроверкиАлгоритма() Экспорт + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("НедопустимыеМетоды", Новый Массив); + ПараметрыПроверки.Вставить("ЗапрещенныеСвойстваГлобальногоКонтекста", Новый Массив); + ПараметрыПроверки.Вставить("ЗапрещенныеМодули", Новый Массив); + + Возврат ПараметрыПроверки; + +КонецФункции + #КонецОбласти #Область Запросы @@ -6382,6 +6871,7 @@ РегламентныеЗаданияСервер.ОтменитьВыполнениеЗадания(РегламентноеЗадание, Текст); ВызватьИсключение Текст; КонецЕсли; + КонецЕсли; Если СтандартныеПодсистемыСервер.ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() Тогда @@ -6458,17 +6948,17 @@ // Сохраняет персональные настройки пользователя, относящиеся к подсистеме БазоваяФункциональность. // Для получения настроек предусмотрены следующие функции: -// - ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами(), -// - СтандартныеПодсистемыСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы(), -// - СтандартныеПодсистемыСервер.ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы(). +// - СтандартныеПодсистемыСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы, +// - СтандартныеПодсистемыСервер.ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы, +// - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия. // // Параметры: // Настройки - Структура: -// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - признак необходимости -// напоминания об установке расширения. +// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - если Истина, то напоминать об установке +// расширения для работы с 1С:Предприятием в веб-клиенте. // * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - запрашивать подтверждение по завершении работы. // * ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы - Булево - показывать оповещение при -// динамическом обновлении программы. +// динамическом обновлении приложения. // Процедура СохранитьПерсональныеНастройки(Настройки) Экспорт @@ -6583,14 +7073,10 @@ // // ПодключаемыйМодуль = Неопределено; // -Функция ПодключитьКомпонентуИзМакета(Знач Идентификатор, Знач ПолноеИмяМакета, Знач Изолированно = Null) Экспорт +Функция ПодключитьКомпонентуИзМакета(Знач Идентификатор, Знач ПолноеИмяМакета, Знач Изолированно = Неопределено) Экспорт РезультатПроверкиВнешнейКомпоненты = Неопределено; - Если Изолированно = Null Тогда - Изолированно = ТипПодключенияКомпонентыПоУмолчанию(); - КонецЕсли; - Если ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда МодульВнешниеКомпонентыСлужебный = ОбщийМодуль("ВнешниеКомпонентыСлужебный"); РезультатПроверкиВнешнейКомпоненты = МодульВнешниеКомпонентыСлужебный.ПроверитьПодключениеКомпоненты(Идентификатор); @@ -6610,6 +7096,121 @@ #КонецОбласти +#Область ПереходныеПроцедурыИФункции + +// Проверяет, что указанный режим соответствует добавлению набора записей. +// +// Параметры: +// Режим - Булево, РежимЗамещения +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоДобавлениеНабораЗаписей(Режим) Экспорт + + Значение = СтандартныеПодсистемыПовтИсп.РежимДобавленияНабораЗаписей(); + Возврат Значение <> Неопределено И Режим = Значение; + +КонецФункции + +// Проверяет, что указанный режим соответствует замещению набора записей. +// +// Параметры: +// Режим - Булево, РежимЗамещения +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоЗамещениеНабораЗаписей(Режим) Экспорт + + Значение = СтандартныеПодсистемыПовтИсп.РежимЗамещенияНабораЗаписей(); + Возврат Значение <> Неопределено И Режим = Значение; + +КонецФункции + +// Проверяет, что указанный режим соответствует обновлению набора записей. +// +// Параметры: +// Режим - Булево, РежимЗамещения +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоОбновлениеНабораЗаписей(Режим) Экспорт + + Значение = СтандартныеПодсистемыПовтИсп.РежимОбновленияНабораЗаписей(); + Возврат Значение <> Неопределено И Режим = Значение; + +КонецФункции + +// Проверяет, что указанный режим соответствует слиянию набора записей. +// +// Параметры: +// Режим - Булево, РежимЗамещения +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоСлияниеНабораЗаписей(Режим) Экспорт + + Значение = СтандартныеПодсистемыПовтИсп.РежимСлиянияНабораЗаписей(); + Возврат Значение <> Неопределено И Режим = Значение; + +КонецФункции + +// Проверяет, что указанный режим соответствует удалению набора записей. +// +// Параметры: +// Режим - Булево, РежимЗамещения +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоУдалениеНабораЗаписей(Режим) Экспорт + + Значение = СтандартныеПодсистемыПовтИсп.РежимУдаленияНабораЗаписей(); + Возврат Значение <> Неопределено И Режим = Значение; + +КонецФункции + +// Возвращает РежимЗамещения.Обновление или Неопределено, +// если не поддерживается в текущей версии 1С:Предприятия. +// +// Возвращаемое значение: +// Неопределено, РежимЗамещения +// +Функция РежимОбновленияНабораЗаписей() Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.РежимОбновленияНабораЗаписей(); + +КонецФункции + +// Возвращает РежимЗамещения.Слияние или Неопределено, +// если не поддерживается в текущей версии 1С:Предприятия. +// +// Возвращаемое значение: +// Неопределено, РежимЗамещения +// +Функция РежимСлиянияНабораЗаписей() Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.РежимСлиянияНабораЗаписей(); + +КонецФункции + +// Возвращает РежимЗамещения.Удаление или Неопределено, +// если не поддерживается в текущей версии 1С:Предприятия. +// +// Возвращаемое значение: +// Неопределено, РежимЗамещения +// +Функция РежимУдаленияНабораЗаписей() Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.РежимУдаленияНабораЗаписей(); + +КонецФункции + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать @@ -6762,7 +7363,7 @@ Возврат ЗначениеВСтрокуXML(Структура); КонецФункции -Функция ПодключитьКомпонентуПоИдентификатору(Знач Идентификатор, Знач Местоположение, Знач Изолированно = Null) Экспорт +Функция ПодключитьКомпонентуПоИдентификатору(Знач Идентификатор, Знач Местоположение, Знач Изолированно = Неопределено) Экспорт ПроверитьМестоположениеКомпоненты(Идентификатор, Местоположение); @@ -6776,9 +7377,6 @@ #Если МобильноеПриложениеСервер Тогда РезультатПодключения = ПодключитьВнешнююКомпоненту(Местоположение, Идентификатор + "SymbolicName"); #Иначе - Если Изолированно = Null Тогда - Изолированно = ТипПодключенияКомпонентыПоУмолчанию(); - КонецЕсли; РезультатПодключения = ПодключитьВнешнююКомпоненту(Местоположение, Идентификатор + "SymbolicName",, ОбщегоНазначенияСлужебныйКлиентСервер.ТипПодключенияКомпоненты(Изолированно)); #КонецЕсли @@ -6868,28 +7466,6 @@ КонецФункции -Функция ТипПодключенияКомпонентыПоУмолчанию() Экспорт - -#Если Не ВебКлиент И Не МобильныйКлиент И Не МобильноеПриложениеСервер Тогда - - СистемнаяИнформация = Новый СистемнаяИнформация; - ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; - Если СтрНачинаетсяС(ВерсияПриложения, "8.3.24") И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПриложения, "8.3.24.1267") >= 0 - Или СтрНачинаетсяС(ВерсияПриложения, "8.3.23") И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПриложения, "8.3.23.1947") >= 0 - Или СтрНачинаетсяС(ВерсияПриложения, "8.3.22") И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПриложения, "8.3.22.2322") >= 0 - Или СтрНачинаетсяС(ВерсияПриложения, "8.3.21") И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПриложения, "8.3.21.1930") >= 0 Тогда - Возврат Неопределено; - Иначе - Возврат Ложь; - КонецЕсли; -#Иначе - - Возврат Неопределено; - -#КонецЕсли - -КонецФункции - Функция СтрокаВВидеНСтр(Знач ПроверяемаяСтрока) Экспорт ПроверяемаяСтрока = СтрЗаменить(ПроверяемаяСтрока, " ", ""); @@ -7490,7 +8066,7 @@ ЗаполнитьЗначенияСвойств(Фильтр, МестоИспользования); ОбрабатываемыеСтроки = МестоИспользования.Владелец().НайтиСтроки(Фильтр); // см. МестаИспользования - ОписаниеНабора = ОписаниеКлючаЗаписи(МетаданныеРегистра); + ОписаниеНабора = ОписаниеНабораЗаписей(МетаданныеРегистра); НаборЗаписей = ОписаниеНабора.НаборЗаписей; // РегистрСведенийНаборЗаписей ПарыЗамен = Новый Соответствие; @@ -8345,7 +8921,7 @@ КонецФункции -Функция ОписаниеКлючаЗаписи(Знач МетаданныеТаблицы) +Функция ОписаниеНабораЗаписей(Знач МетаданныеТаблицы) ИмяТаблицы = МетаданныеТаблицы.ПолноеИмя(); @@ -9743,10 +10319,14 @@ #Область БезопасноеХранилище -Функция ДанныеИзБезопасногоХранилища(Владельцы, Ключи, ОбщиеДанные) +Функция ДанныеИзБезопасногоХранилища(Владельцы, Ключи, ОбщиеДанные, ОбластьДанных) ИмяБезопасногоХранилищаДанных = "РегистрСведений.БезопасноеХранилищеДанных"; - Если РазделениеВключено() И ДоступноИспользованиеРазделенныхДанных() И ОбщиеДанные <> Истина Тогда + ЗапросОбласти = (РазделениеВключено() + И ОбщиеДанные <> Истина + И (ДоступноИспользованиеРазделенныхДанных() + Или ЗначениеЗаполнено(ОбластьДанных))); + Если ЗапросОбласти Тогда ИмяБезопасногоХранилищаДанных = "РегистрСведений.БезопасноеХранилищеДанныхОбластейДанных"; КонецЕсли; @@ -9757,11 +10337,26 @@ |ИЗ | #ИмяБезопасногоХранилищаДанных КАК БезопасноеХранилищеДанных |ГДЕ - | БезопасноеХранилищеДанных.Владелец В (&Владельцы)"; + | &Условие"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИмяБезопасногоХранилищаДанных", ИмяБезопасногоХранилищаДанных); + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "#ИмяБезопасногоХранилищаДанных", + ИмяБезопасногоХранилищаДанных); + ТекстЗапроса = ?((ЗначениеЗаполнено(ОбластьДанных) И ЗапросОбласти), + СтрЗаменить( + ТекстЗапроса, + "&Условие", + "БезопасноеХранилищеДанных.Владелец В (&Владельцы) + |И БезопасноеХранилищеДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных"), + СтрЗаменить( + ТекстЗапроса, + "&Условие", + "БезопасноеХранилищеДанных.Владелец В (&Владельцы)")); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Владельцы", Владельцы); + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); Результат = Новый Соответствие(); @@ -10159,20 +10754,7 @@ Функция СистемнаяИнформацияДляЖурналаРегистрации() - СистемнаяИнформация = Новый СистемнаяИнформация; - - Возврат Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Платформа 1С:Предприятие: %1 - |Тип платформы: %2 - |Версия ОС: %3 - |Процессор: %4 - |Оперативная память: %5'", - КодОсновногоЯзыка()), - СистемнаяИнформация.ВерсияПриложения, - СистемнаяИнформация.ТипПлатформы, - СистемнаяИнформация.ВерсияОС, - СистемнаяИнформация.Процессор, - СистемнаяИнформация.ОперативнаяПамять); + Возврат СтандартныеПодсистемыСервер.ИнформацияДляПоддержки(); КонецФункции @@ -10276,8 +10858,8 @@ Функция ЭтоВерсияЗащищенногоПрограммногоКомплекса(Версия) - Версии = СтандартныеПодсистемыСервер.ВерсииЗащищенногоПрограммногоКомплекса(); - Возврат Версии.Найти(Версия) <> Неопределено; + СистемнаяИнформация = Новый СистемнаяИнформация(); + Возврат ЗначениеЗаполнено(СистемнаяИнформация.ВариантПриложения); КонецФункции @@ -10305,90 +10887,62 @@ КонецПроцедуры -// Локализация - // Параметры: // ОбщиеПараметры - см. ОбщиеПараметрыБазовойФункциональности // Процедура УточнитьМинимальнуюВерсиюПлатформыИзСервиса(ОбщиеПараметры) - - Если Не ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда - Возврат; - КонецЕсли; - - // Проверка версии БИП начиная с которой появился программный интерфейс - МодульИнтернетПоддержкаПользователейКлиентСервер = ОбщийМодуль("ИнтернетПоддержкаПользователейКлиентСервер"); - ВерсияБИП = МодульИнтернетПоддержкаПользователейКлиентСервер.ВерсияБиблиотеки(); - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБИП, "2.7.1.35") <= 0 Тогда + МинимальнаяИзСервиса = ""; + РекомендуемаяИзСервиса = ""; + + СтандартныеПодсистемыСерверЛокализация.ПриОпределенииМинимальнойИРекомендуемойВерсийПлатформы( + МинимальнаяИзСервиса, РекомендуемаяИзСервиса); + + Если Не ЗначениеЗаполнено(МинимальнаяИзСервиса) И Не ЗначениеЗаполнено(РекомендуемаяИзСервиса) Тогда + Возврат; + КонецЕсли; + + Минимальная = НомерСборкиПоТекущейВерсииПлатформы(МинимальнаяИзСервиса); + Рекомендуемая = НомерСборкиПоТекущейВерсииПлатформы(РекомендуемаяИзСервиса); + + Если МинимальнаяИРекомендуемаяВерсияПлатформыЗаполненаНеПравильно(Минимальная, Рекомендуемая) Тогда + СтандартныеПодсистемыСерверЛокализация.ПриНеверномЗаполненииМинимальнойИРекомендуемойВерсийПлатформы( + Минимальная, Рекомендуемая, НомерСборкиПоТекущейВерсииПлатформы(МинимальнаяВерсияПлатформы()), ОбщиеПараметры); Возврат; КонецЕсли; - - Попытка - МодульПолучениеОбновленийПрограммы = ОбщийМодуль("ПолучениеОбновленийПрограммы"); - ИнформацияОВерсияхПлатформы = МодульПолучениеОбновленийПрограммы.ИнформацияОВерсияхПлатформы(); - - // Контроль заполнения версий платформы по данным сервиса - Если ПустаяСтрока(ИнформацияОВерсияхПлатформы.МинимальнаяВерсияПлатформы) - И ПустаяСтрока(ИнформацияОВерсияхПлатформы.РекомендуемаяВерсияПлатформы) Тогда - Возврат; - КонецЕсли; - - Минимальная = НомерСборкиПоТекущейВерсииПлатформы(ИнформацияОВерсияхПлатформы.МинимальнаяВерсияПлатформы); - Рекомендуемая = НомерСборкиПоТекущейВерсииПлатформы(ИнформацияОВерсияхПлатформы.РекомендуемаяВерсияПлатформы); - - Если МинимальнаяИРекомендуемаяВерсияПлатформыЗаполненаНеПравильно(Минимальная, Рекомендуемая) Тогда - - МодульПолучениеОбновленийПрограммы.УдалитьИнформациюОВерсияхПлатформы(); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Минимальная и рекомендуемая версии платформы ""1С:Предприятие"", полученные с сервиса обновления приложений, не соответствуют следующим требованиям: - | - минимальная версия должна быть заполнена; - | - минимальная версия не должна быть меньше минимальной версии БСП (см. %1); - | - минимальная версия не должна быть меньше рекомендуемой версии. - |Минимальная версия сервиса обновления приложений: %2 - |Минимальная версия БСП: %3 - |Рекомендуемая версия сервиса обновления приложений: %4 - | - |Минимальная и рекомендуемая версия платформы ""1С:Предприятие"" установлена по данным см. %5. - |Минимальная версия: %6 - |Рекомендуемая версия: %7'", - КодОсновногоЯзыка()), - "ОбщегоНазначения.МинимальнаяВерсияПлатформы", Минимальная, НомерСборкиПоТекущейВерсииПлатформы(МинимальнаяВерсияПлатформы()), - Рекомендуемая, "ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности", - ОбщиеПараметры.МинимальнаяВерсияПлатформы, ОбщиеПараметры.РекомендуемаяВерсияПлатформы); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,, - ТекстСообщения); - Возврат; - КонецЕсли; - ОбщиеПараметры.МинимальнаяВерсияПлатформы = Минимальная; - ОбщиеПараметры.РекомендуемаяВерсияПлатформы = Рекомендуемая; - - Исключение - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось изменить минимальную и рекомендуемую версию платформы ""1С:Предприятие"", полученную с сервиса обновления приложений, по причине: - |%1'", - КодОсновногоЯзыка()), ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,, - ТекстСообщения); - КонецПопытки; + ОбщиеПараметры.МинимальнаяВерсияПлатформы = Минимальная; + ОбщиеПараметры.РекомендуемаяВерсияПлатформы = Рекомендуемая; КонецПроцедуры -// Конец Локализация #КонецОбласти #Область ПроверкаАлгоритмов -Процедура ПроверитьАлгоритм(Знач Алгоритм) +// Проверяет произвольный алгоритм на встроенном языке 1С:Предприятия, на наличие в нем опасных конструкций, +// позволяющих получить неограниченный доступ к базе. +// +// Параметры: +// Алгоритм - Строка - алгоритм на встроенном языке 1С:Предприятия, который требуется проверить. +// ПараметрыПроверки - см. ОбщегоНазначения.ПараметрыПроверкиАлгоритма +// - Неопределено +// +Процедура ПроверитьАлгоритм(Знач Алгоритм, ПараметрыПроверки) ТекстыОшибок = Новый Массив; + Если ПараметрыПроверки = Неопределено Тогда + ПараметрыПроверки = ПараметрыПроверкиАлгоритма(); + КонецЕсли; + Алгоритм = ВРег(Алгоритм); // Исключение метода объекта Запрос. Алгоритм = СтрЗаменить(СтрЗаменить(Алгоритм, ВРег("Выполнить()"), ""), ВРег("Execute()"), ""); // Проверка наличия в алгоритме недопустимых методов. - НайденныеВызовы = НайденныеВызовы(Алгоритм, НедопустимыеМетоды(), "("); + НедопустимыеМетоды = НедопустимыеМетоды(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(НедопустимыеМетоды, ПараметрыПроверки.НедопустимыеМетоды, Истина); + НайденныеВызовы = НайденныеВызовы(Алгоритм, НедопустимыеМетоды, "("); Если НайденныеВызовы.Количество() > 0 Тогда ТекстОшибки = НСтр("ru = 'Вызовы недопустимых методов: |%1'"); @@ -10398,8 +10952,11 @@ КонецЕсли; // Проверка обращений к общим модулям и свойствам глобального контекста. - НайденныеВызовы = НайденныеВызовы(Алгоритм, ЗапрещенныеСвойстваГлобальногоКонтекста(), "."); - НайденныеВызовыАльтернативные = НайденныеВызовы(Алгоритм, ЗапрещенныеСвойстваГлобальногоКонтекста(), "["); + ЗапрещенныеСвойстваГлобальногоКонтекста = ЗапрещенныеСвойстваГлобальногоКонтекста(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив( + ЗапрещенныеСвойстваГлобальногоКонтекста, ПараметрыПроверки.ЗапрещенныеСвойстваГлобальногоКонтекста, Истина); + НайденныеВызовы = НайденныеВызовы(Алгоритм, ЗапрещенныеСвойстваГлобальногоКонтекста, "."); + НайденныеВызовыАльтернативные = НайденныеВызовы(Алгоритм, ЗапрещенныеСвойстваГлобальногоКонтекста, "["); ОбщегоНазначенияКлиентСервер.ДополнитьМассив(НайденныеВызовы, НайденныеВызовыАльтернативные, Истина); Если НайденныеВызовы.Количество() > 0 Тогда ТекстОшибки = НСтр("ru = 'Вызовы недопустимых свойств глобального контекста: @@ -10409,7 +10966,9 @@ ТекстыОшибок.Добавить(ТекстОшибки); КонецЕсли; - НайденныеВызовы = НайденныеВызовы(Алгоритм, ЗапрещенныеМодули(), "."); + ЗапрещенныеМодули = ЗапрещенныеМодули(); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗапрещенныеМодули, ПараметрыПроверки.ЗапрещенныеМодули, Истина); + НайденныеВызовы = НайденныеВызовы(Алгоритм, ЗапрещенныеМодули, "."); Если НайденныеВызовы.Количество() > 0 Тогда ТекстОшибки = НСтр("ru = 'Вызовы недопустимых модулей: |%1'"); @@ -10419,8 +10978,9 @@ КонецЕсли; Если ТекстыОшибок.Количество() > 0 Тогда - ВызватьИсключение СтрСоединить(ТекстыОшибок, Символы.ПС + Символы.ПС); + ВызватьИсключение (СтрСоединить(ТекстыОшибок, Символы.ПС + Символы.ПС), КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных); КонецЕсли; + КонецПроцедуры Функция НайденныеВызовы(Алгоритм, СтрокиПоиска, Окончание = Неопределено) @@ -10549,4 +11109,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl index 96889df42..ed3d9329b 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервера/Module.bsl @@ -8,73 +8,11 @@ #Область ПрограммныйИнтерфейс -#Область ДанныеВБазе - -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции для работы с данными в базе. - -// Проверяет наличие ссылок на объект в базе данных. -// При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. -// -// См. ОбщегоНазначения.ЕстьСсылкиНаОбъект -// -// Параметры: -// СсылкаИлиМассивСсылок - ЛюбаяСсылка -// - Массив - объект или список объектов. -// ИскатьСредиСлужебныхОбъектов - Булево - если Истина, то не будут учитываться -// исключения поиска ссылок, заданные при разработке конфигурации. -// Про исключение поиска ссылок подробнее -// см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок -// -// Возвращаемое значение: -// Булево - Истина, если есть ссылки на объект. -// -Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт - - Возврат ОбщегоНазначения.ЕстьСсылкиНаОбъект(СсылкаИлиМассивСсылок, ИскатьСредиСлужебныхОбъектов); - -КонецФункции - -// Проверяет статус проведения переданных документов и возвращает -// те из них, которые не проведены. -// -// См. ОбщегоНазначения.ПроверитьПроведенностьДокументов -// -// Параметры: -// Документы - Массив - документы, статус проведения которых необходимо проверить. -// -// Возвращаемое значение: -// Массив - непроведенные документы. -// -Функция ПроверитьПроведенностьДокументов(Знач Документы) Экспорт - - Возврат ОбщегоНазначения.ПроверитьПроведенностьДокументов(Документы); - -КонецФункции - -// Выполняет попытку проведения документов. -// -// См. ОбщегоНазначения.ПровестиДокументы -// -// Параметры: -// Документы - см. ОбщегоНазначения.ПровестиДокументы.Документы -// -// Возвращаемое значение: -// см. ОбщегоНазначения.ПровестиДокументы -// -Функция ПровестиДокументы(Документы) Экспорт - - Возврат ОбщегоНазначения.ПровестиДокументы(Документы); - -КонецФункции - -#КонецОбласти - -#Область ХранилищеНастроек - -//////////////////////////////////////////////////////////////////////////////// -// Сохранение, чтение и удаление настроек из хранилищ. +#Область УстаревшиеПроцедурыИФункции +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Сохраняет настройку в хранилище общих настроек, как метод платформы Сохранить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -106,6 +44,9 @@ КонецПроцедуры +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Сохраняет несколько настроек в хранилище общих настроек, как метод платформы Сохранить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -129,6 +70,9 @@ КонецПроцедуры +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Загружает настройку из хранилища общих настроек, как метод платформы Загрузить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -168,6 +112,9 @@ КонецФункции +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Удаляет настройку из хранилища общих настроек, как метод платформы Удалить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -190,6 +137,9 @@ КонецПроцедуры +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Сохраняет настройку в хранилище системных настроек, как метод платформы Сохранить // объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек // более 128 символов путем хеширования части, которая превышает 96 символов. @@ -220,6 +170,9 @@ КонецПроцедуры +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Загружает настройку из хранилища системных настроек, как метод платформы Загрузить, // объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек // более 128 символов путем хеширования части, которая превышает 96 символов. @@ -258,6 +211,9 @@ КонецФункции +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Удаляет настройку из хранилища системных настроек, как метод платформы Удалить, // объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек // более 128 символов путем хеширования части, которая превышает 96 символов. @@ -279,6 +235,9 @@ КонецПроцедуры +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Сохраняет настройку в хранилище настроек данных форм, как метод платформы Сохранить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -310,6 +269,9 @@ КонецПроцедуры +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Загружает настройку из хранилища настроек данных форм, как метод платформы Загрузить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -349,6 +311,9 @@ КонецФункции +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// // Удаляет настройку из хранилища настроек данных форм, как метод платформы Удалить, // объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, // но с поддержкой длины ключа настроек более 128 символов путем хеширования части, @@ -371,6 +336,64 @@ КонецПроцедуры +// Устарела. Следует открывать форму с длительной операции и вызывать из нее ОбщегоНазначения.ЕстьСсылкиНаОбъект. +// Проверяет наличие ссылок на объект в базе данных. +// При вызове в неразделенном сеансе не выявляет ссылок в разделенных областях. +// +// Параметры: +// СсылкаИлиМассивСсылок - ЛюбаяСсылка +// - Массив - объект или список объектов. +// ИскатьСредиСлужебныхОбъектов - Булево - если Истина, то не будут учитываться +// исключения поиска ссылок, заданные при разработке конфигурации. +// Про исключение поиска ссылок подробнее +// см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок +// +// Возвращаемое значение: +// Булево - Истина, если есть ссылки на объект. +// +Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь) Экспорт + + Возврат ОбщегоНазначения.ЕстьСсылкиНаОбъект(СсылкаИлиМассивСсылок, ИскатьСредиСлужебныхОбъектов); + +КонецФункции + +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// +// Проверяет статус проведения переданных документов и возвращает +// те из них, которые не проведены. +// +// Параметры: +// Документы - Массив из ДокументСсылка - документы, статус проведения которых необходимо проверить. +// +// Возвращаемое значение: +// Массив из ДокументСсылка - непроведенные документы. +// +Функция ПроверитьПроведенностьДокументов(Знач Документы) Экспорт + + Возврат ОбщегоНазначения.ПроверитьПроведенностьДокументов(Документы); + +КонецФункции + +// Исключена из программного интерфейса. +// Следует использовать одноименную функцию в общем модуле ОбщегоНазначения или ОбщегоНазначенияКлиент. +// +// Выполняет попытку проведения документов. +// +// См. ОбщегоНазначения.ПровестиДокументы +// +// Параметры: +// Документы - см. ОбщегоНазначения.ПровестиДокументы.Документы +// +// Возвращаемое значение: +// см. ОбщегоНазначения.ПровестиДокументы +// +Функция ПровестиДокументы(Документы) Экспорт + + Возврат ОбщегоНазначения.ПровестиДокументы(Документы); + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 06b58fea3..bf9acbda7 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -74,28 +74,26 @@ //////////////////////////////////////////////////////////////////////////////// // Общие процедуры и функции для работы с данными в базе. -// Возвращает ссылку предопределенного элемента по его полному имени. -// Предопределенные элементы могут содержаться только в следующих объектах: +// Возвращает ссылку предопределенного элемента по его полному имени в следующих объектах: // - справочники; // - планы видов характеристик; // - планы счетов; // - планы видов расчета. -// После изменения состава предопределенных следует выполнить метод -// ОбновитьПовторноИспользуемыеЗначения(), который сбросит кэш ПовтИсп в текущем сеансе. +// См. также функцию ОбщегоНазначенияКлиент.ПредопределенныйЭлемент. // -// См. ОбщегоНазначения.ПредопределенныйЭлемент +// Для корректной работы этой функции после изменения состава предопределенных следует вызывать +// метод ОбновитьПовторноИспользуемыеЗначения. // // Параметры: -// ПолноеИмяПредопределенного - Строка - полный путь к предопределенному элементу, включая его имя. -// Формат аналогичен функции глобального контекста ПредопределенноеЗначение(). -// Например: +// ПолноеИмяПредопределенного - Строка - полное имя предопределенного элемента. +// Формат аналогичен функции глобального контекста ПредопределенноеЗначение, например: // "Справочник.ВидыКонтактнойИнформации.EmailПользователя" // "ПланСчетов.Хозрасчетный.Материалы" // "ПланВидовРасчета.Начисления.ОплатаПоОкладу". // // Возвращаемое значение: // ЛюбаяСсылка - ссылка на предопределенный элемент. -// Неопределено - если предопределенный элемент есть в метаданных, но не создан в ИБ. +// Неопределено - если предопределенного элемента нет в метаданных или не создан в информационной базе. // Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного) Экспорт @@ -129,6 +127,37 @@ КонецФункции +// Проверяет статус проведения переданных документов и возвращает +// те из них, которые не проведены. +// +// Параметры: +// Документы - Массив из ДокументСсылка - документы, статус проведения которых необходимо проверить. +// +// Возвращаемое значение: +// Массив из ДокументСсылка - непроведенные документы. +// +Функция ПроверитьПроведенностьДокументов(Знач Документы) Экспорт + + Возврат ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(Документы); // АПК:222 вызываемая функция исключена из программного интерфейса. + +КонецФункции + +// Выполняет попытку проведения документов и возвращает информацию о документах, которые не удалось провести. +// +// Параметры: +// Документы - Массив из ДокументСсылка - документы, которые необходимо провести. +// +// Возвращаемое значение: +// Массив из Структура: +// * Ссылка - ДокументСсылка - документ, который не удалось провести, +// * ОписаниеОшибки - Строка - текст описания ошибки при проведении. +// +Функция ПровестиДокументы(Документы) Экспорт + + Возврат ОбщегоНазначенияВызовСервера.ПровестиДокументы(Документы); + +КонецФункции + #КонецОбласти #Область УсловныеВызовы @@ -247,9 +276,8 @@ Возврат ТипПлатформыКлиента = ТипПлатформы.Linux_x86 Или ТипПлатформыКлиента = ТипПлатформы.Linux_x86_64 - Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.1923") >= 0 - И (ТипПлатформыКлиента = ТипПлатформы["Linux_ARM64"] - Или ТипПлатформыКлиента = ТипПлатформы["Linux_E2K"]); + Или ТипПлатформыКлиента = ТипПлатформы["Linux_ARM64"] + Или ТипПлатформыКлиента = ТипПлатформы["Linux_E2K"]; КонецФункции @@ -759,12 +787,21 @@ // ОписаниеОповещения - ОписаниеОповещения - обработчик результата выбора. // НастройкиФормата - Структура - настройки по умолчанию в форме: // * УпаковатьВАрхив - Булево - признак необходимости упаковки вложений в архив. -// * ФорматыСохранения - Массив - список выбранных форматов вложений. +// * ФорматыСохранения - Массив из Строка - список выбранных форматов вложений. // * ПереводитьИменаФайловВТранслит - Булево - преобразовывать кириллические символы в латиницу. +// * Подписать - Булево - подписать вложения электронной подписью. // Владелец - ФормаКлиентскогоПриложения - форма, из которой вызывается форма выбора вложений. // -Процедура ПоказатьВыборФорматаВложений(ОписаниеОповещения, НастройкиФормата, Владелец = Неопределено) Экспорт - ПараметрыФормы = Новый Структура("НастройкиФормата", НастройкиФормата); +Процедура ПоказатьВыборФорматаВложений(ОписаниеОповещения, НастройкиФормата = Неопределено, Владелец = Неопределено) Экспорт + Если НастройкиФормата <> Неопределено Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УпаковатьВАрхив", НастройкиФормата.УпаковатьВАрхив); + ПараметрыФормы.Вставить("ФорматыСохранения", НастройкиФормата.ФорматыСохранения); + ПараметрыФормы.Вставить("ПереводитьИменаФайловВТранслит", НастройкиФормата.ПереводитьИменаФайловВТранслит); + ПараметрыФормы.Вставить("Подписать", НастройкиФормата.Подписать); + Иначе + ПараметрыФормы = Неопределено; + КонецЕсли; ОткрытьФорму("ОбщаяФорма.ВыборФорматаВложений", ПараметрыФормы, , , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -917,8 +954,7 @@ #Область ВнешниеКомпоненты -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для подключения и установки внешних компонент из макетов конфигурации. +#Область ПроцедурыИФункцииДляПодключенияИУстановкиВнешнихКомпонентИзМакетовКонфигурации // Возвращает структуру параметров для процедуры ПодключитьКомпонентуИзМакета. // @@ -938,7 +974,9 @@ // изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях. // См. https://its.1c.eu/db/v83doc#bookmark:dev:TI000001866 // * ОбновлятьАвтоматически - Булево - (по умолчанию Истина) если ПредложитьЗагрузить = Истина, при загрузке -// внешней компоненты устанавливать признак ОбновлятьСПортала1СИТС +// внешней компоненты устанавливать признак ОбновлятьСПортала1СИТС. +// * ПоказыватьВопросУстановки - Булево - (по умолчанию Истина) если ПредложитьУстановить = Истина, перед установкой +// внешней компоненты будет показан вопрос об установке. // // // Пример: @@ -957,6 +995,7 @@ Параметры.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив); Параметры.Вставить("Изолированно", Неопределено); Параметры.Вставить("ОбновлятьАвтоматически", Истина); + Параметры.Вставить("ПоказыватьВопросУстановки", Истина); Возврат Параметры; @@ -1102,16 +1141,18 @@ ЗаполнитьЗначенияСвойств(Параметры, ПараметрыУстановки); КонецЕсли; - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Местоположение", ПолноеИмяМакета); - Контекст.Вставить("ТекстПояснения", Параметры.ТекстПояснения); - Контекст.Вставить("Идентификатор", ПолноеИмяМакета); + Контекст = ОбщегоНазначенияСлужебныйКлиент.КонтекстПодключенияКомпоненты(); + Контекст.Оповещение = Оповещение; + Контекст.Местоположение = ПолноеИмяМакета; + Контекст.ТекстПояснения = Параметры.ТекстПояснения; + Контекст.Идентификатор = ПолноеИмяМакета; ОбщегоНазначенияСлужебныйКлиент.УстановитьКомпоненту(Контекст); КонецПроцедуры +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // БиблиотекаПодключаемогоОборудования @@ -1296,6 +1337,311 @@ КонецПроцедуры #КонецОбласти + +#Область ХранилищеНастроек + +// АПК:222-выкл вызываемые процедуры исключены из программного интерфейса. + +// Сохраняет настройку в хранилище общих настроек, как метод платформы Сохранить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, сохранение пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеОбщихНастроекСохранить +// +// Параметры: +// КлючОбъекта - Строка - см. синтакс-помощник платформы. +// КлючНастроек - Строка - см. синтакс-помощник платформы. +// Настройки - Произвольный - см. синтакс-помощник платформы. +// ОписаниеНастроек - Неопределено - не используется на клиенте. +// ИмяПользователя - Строка - см. синтакс-помощник платформы. +// ОбновитьПовторноИспользуемыеЗначения - Булево - выполнить одноименный метод платформы. +// +Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки, + ОписаниеНастроек = Неопределено, + ИмяПользователя = Неопределено, + ОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + КлючОбъекта, + КлючНастроек, + Настройки, + ОписаниеНастроек, + ИмяПользователя, + ОбновитьПовторноИспользуемыеЗначения); + +КонецПроцедуры + +// Сохраняет несколько настроек в хранилище общих настроек, как метод платформы Сохранить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, сохранение пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив +// +// Параметры: +// НесколькоНастроек - Массив - со значениями: +// * Значение - Структура: +// * Объект - Строка - см. параметр КлючОбъекта в синтакс-помощнике платформы. +// * Настройка - Строка - см. параметр КлючНастроек в синтакс-помощнике платформы. +// * Значение - Произвольный - см. параметр Настройки в синтакс-помощнике платформы. +// +// ОбновитьПовторноИспользуемыеЗначения - Булево - выполнить одноименный метод платформы. +// +Процедура ХранилищеОбщихНастроекСохранитьМассив(НесколькоНастроек, ОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(НесколькоНастроек, ОбновитьПовторноИспользуемыеЗначения); + +КонецПроцедуры + +// Загружает настройку из хранилища общих настроек, как метод платформы Загрузить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. +// Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. +// +// В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно +// - возвращаемая ссылка заменяется на указанное значение по умолчанию; +// - из данных типа Массив ссылки удаляются; +// - у данных типа Структура и Соответствие ключ не меняется, а значение устанавливается Неопределено; +// - анализ значений в данных типа Массив, Структура, Соответствие выполняется рекурсивно. +// +// См. ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить +// +// Параметры: +// КлючОбъекта - Строка - см. синтакс-помощник платформы. +// КлючНастроек - Строка - см. синтакс-помощник платформы. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. +// Если не указано, возвращается значение Неопределено. +// ОписаниеНастроек - Неопределено - не используется на клиенте. +// ИмяПользователя - Строка - см. синтакс-помощник платформы. +// +// Возвращаемое значение: +// Произвольный - см. синтакс-помощник платформы. +// +Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, + ОписаниеНастроек = Неопределено, + ИмяПользователя = Неопределено) Экспорт + + Возврат ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + КлючОбъекта, + КлючНастроек, + ЗначениеПоУмолчанию, + ОписаниеНастроек, + ИмяПользователя); + +КонецФункции + +// Удаляет настройку из хранилища общих настроек, как метод платформы Удалить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, удаление пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеОбщихНастроекУдалить +// +// Параметры: +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. +// +Процедура ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя); + +КонецПроцедуры + +// Сохраняет настройку в хранилище системных настроек, как метод платформы Сохранить +// объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек +// более 128 символов путем хеширования части, которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, сохранение пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить +// +// Параметры: +// КлючОбъекта - Строка - см. синтакс-помощник платформы. +// КлючНастроек - Строка - см. синтакс-помощник платформы. +// Настройки - Произвольный - см. синтакс-помощник платформы. +// ОписаниеНастроек - Неопределено - не используется на клиенте. +// ИмяПользователя - Строка - см. синтакс-помощник платформы. +// ОбновитьПовторноИспользуемыеЗначения - Булево - выполнить одноименный метод платформы. +// +Процедура ХранилищеСистемныхНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки, + ОписаниеНастроек = Неопределено, + ИмяПользователя = Неопределено, + ОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеСистемныхНастроекСохранить( + КлючОбъекта, + КлючНастроек, + Настройки, + ОписаниеНастроек, + ИмяПользователя, + ОбновитьПовторноИспользуемыеЗначения); + +КонецПроцедуры + +// Загружает настройку из хранилища системных настроек, как метод платформы Загрузить, +// объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек +// более 128 символов путем хеширования части, которая превышает 96 символов. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. +// Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. +// +// В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно: +// - возвращаемая ссылка заменяется на указанное значение по умолчанию; +// - из данных типа Массив ссылки удаляются; +// - у данных типа Структура и Соответствие ключ не меняется, а значение устанавливается Неопределено; +// - анализ значений в данных типа Массив, Структура, Соответствие выполняется рекурсивно +// +// См. ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить +// +// Параметры: +// КлючОбъекта - Строка - см. синтакс-помощник платформы. +// КлючНастроек - Строка - см. синтакс-помощник платформы. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. +// Если не указано, возвращается значение Неопределено. +// ОписаниеНастроек - Неопределено - не используется на клиенте. +// ИмяПользователя - Строка - см. синтакс-помощник платформы. +// +// Возвращаемое значение: +// Произвольный - см. синтакс-помощник платформы. +// +Функция ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, + ОписаниеНастроек = Неопределено, + ИмяПользователя = Неопределено) Экспорт + + Возврат ОбщегоНазначенияВызовСервера.ХранилищеСистемныхНастроекЗагрузить( + КлючОбъекта, + КлючНастроек, + ЗначениеПоУмолчанию, + ОписаниеНастроек, + ИмяПользователя); + +КонецФункции + +// Удаляет настройку из хранилища системных настроек, как метод платформы Удалить, +// объекта СтандартноеХранилищеНастроекМенеджер, но с поддержкой длины ключа настроек +// более 128 символов путем хеширования части, которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, удаление пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеСистемныхНастроекУдалить +// +// Параметры: +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. +// +Процедура ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеСистемныхНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя); + +КонецПроцедуры + +// Сохраняет настройку в хранилище настроек данных форм, как метод платформы Сохранить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, сохранение пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить +// +// Параметры: +// КлючОбъекта - Строка - см. синтакс-помощник платформы. +// КлючНастроек - Строка - см. синтакс-помощник платформы. +// Настройки - Произвольный - см. синтакс-помощник платформы. +// ОписаниеНастроек - Неопределено - не используется на клиенте. +// ИмяПользователя - Строка - см. синтакс-помощник платформы. +// ОбновитьПовторноИспользуемыеЗначения - Булево - выполнить одноименный метод платформы. +// +Процедура ХранилищеНастроекДанныхФормСохранить(КлючОбъекта, КлючНастроек, Настройки, + ОписаниеНастроек = Неопределено, + ИмяПользователя = Неопределено, + ОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеНастроекДанныхФормСохранить( + КлючОбъекта, + КлючНастроек, + Настройки, + ОписаниеНастроек, + ИмяПользователя, + ОбновитьПовторноИспользуемыеЗначения); + +КонецПроцедуры + +// Загружает настройку из хранилища настроек данных форм, как метод платформы Загрузить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Кроме того, возвращает указанное значение по умолчанию, если настройки не существуют. +// Если нет права СохранениеДанныхПользователя, возвращается значение по умолчанию без ошибки. +// +// В возвращаемом значении очищаются ссылки на несуществующий объект в базе данных, а именно +// - возвращаемая ссылка заменяется на указанное значение по умолчанию; +// - из данных типа Массив ссылки удаляются; +// - у данных типа Структура и Соответствие ключ не меняется, а значение устанавливается Неопределено; +// - анализ значений в данных типа Массив, Структура, Соответствие выполняется рекурсивно. +// +// См. ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить +// +// Параметры: +// КлючОбъекта - Строка - см. синтакс-помощник платформы. +// КлючНастроек - Строка - см. синтакс-помощник платформы. +// ЗначениеПоУмолчанию - Произвольный - значение, которое возвращается, если настройки не существуют. +// Если не указано, возвращается значение Неопределено. +// ОписаниеНастроек - Неопределено - не используется на клиенте. +// ИмяПользователя - Строка - см. синтакс-помощник платформы. +// +// Возвращаемое значение: +// Произвольный - см. синтакс-помощник платформы. +// +Функция ХранилищеНастроекДанныхФормЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию = Неопределено, + ОписаниеНастроек = Неопределено, + ИмяПользователя = Неопределено) Экспорт + + Возврат ОбщегоНазначенияВызовСервера.ХранилищеНастроекДанныхФормЗагрузить( + КлючОбъекта, + КлючНастроек, + ЗначениеПоУмолчанию, + ОписаниеНастроек, + ИмяПользователя); + +КонецФункции + +// Удаляет настройку из хранилища настроек данных форм, как метод платформы Удалить, +// объектов СтандартноеХранилищеНастроекМенеджер или ХранилищеНастроекМенеджер.<Имя хранилища>, +// но с поддержкой длины ключа настроек более 128 символов путем хеширования части, +// которая превышает 96 символов. +// Если нет права СохранениеДанныхПользователя, удаление пропускается без ошибки. +// +// См. ОбщегоНазначения.ХранилищеНастроекДанныхФормУдалить +// +// Параметры: +// КлючОбъекта - Строка +// - Неопределено - см. синтакс-помощник платформы. +// КлючНастроек - Строка +// - Неопределено - см. синтакс-помощник платформы. +// ИмяПользователя - Строка +// - Неопределено - см. синтакс-помощник платформы. +// +Процедура ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя) Экспорт + + ОбщегоНазначенияВызовСервера.ХранилищеНастроекДанныхФормУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя); + +КонецПроцедуры + +// АПК:222-вкл + +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать: @@ -1312,16 +1658,16 @@ Процедура ПерейтиПоСсылке(Ссылка) Экспорт #Если ТолстыйКлиентОбычноеПриложение Тогда - // Особенность платформы: ПерейтиПоНавигационнойСсылке недоступен в толстом клиенте обычного приложения. - Оповещение = Новый ОписаниеОповещения; - НачатьЗапускПриложения(Оповещение, Ссылка); + // ПерейтиПоНавигационнойСсылке недоступен в толстом клиенте обычного приложения. + Оповещение = Новый ОписаниеОповещения; + НачатьЗапускПриложения(Оповещение, Ссылка); #Иначе - ПерейтиПоНавигационнойСсылке(Ссылка); + ПерейтиПоНавигационнойСсылке(Ссылка); #КонецЕсли КонецПроцедуры -// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия // Предлагает пользователю установить расширение для работы с 1С:Предприятием в веб-клиенте. // Предназначена для использования в начале участков кода, в которых ведется работа с файлами. // @@ -1350,19 +1696,15 @@ // // ... // КонецЕсли; // -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( - ОписаниеОповещенияОЗакрытии, - ТекстПредложения = "", - ВозможноПродолжениеБезУстановки = Истина) Экспорт +Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещенияОЗакрытии, + ТекстПредложения = "", ВозможноПродолжениеБезУстановки = Истина) Экспорт - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( - ОписаниеОповещенияОЗакрытии, - ТекстПредложения, - ВозможноПродолжениеБезУстановки); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещенияОЗакрытии, + ТекстПредложения, ВозможноПродолжениеБезУстановки); КонецПроцедуры -// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия // Предлагает пользователю подключить расширение для работы с 1С:Предприятием в веб-клиенте, // и в случае отказа выдает предупреждение о невозможности продолжения операции. // Предназначена для использования в начале участков кода, в которых ведется работа с файлами @@ -1395,11 +1737,11 @@ ОписаниеОповещенияОЗакрытии, ТекстПредупреждения, ); Оповещение = Новый ОписаниеОповещения("ПроверитьРасширениеРаботыСФайламиПодключеноЗавершение", ОбщегоНазначенияСлужебныйКлиент, Параметры); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения); КонецПроцедуры -// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами +// Устарела. Следует использовать ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия. // Возвращает пользовательскую настройку "Предлагать установку расширения для работы с 1С:Предприятием". // // Возвращаемое значение: @@ -1522,4 +1864,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index c33abd76f..23599dcab 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -245,4 +245,61 @@ КонецПроцедуры +// Вызывается при вводе в строку глобального поиска (после стандартной задержки). +// При вызове события в параметре ПланПоиска передается копия плана, установленного в менеджере глобального поиска. +// Содержимое параметра ПланПоиска можно модифицировать в коде обработчика. +// +// Параметры: +// СтрокаПоиска - Строка - строка поиска +// ПланПоиска - ПланГлобальногоПоиска - текущий план выполнения глобального поиска +// +Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска) Экспорт + +КонецПроцедуры + +// Вызывается при выборе результата глобального поиска. +// Если после завершения работы процедуры обработки события СтандартнаяОбработка установлено в Истина, +// то в зависимости от типа значения, используемого в объекте ЭлементРезультатаГлобальногоПоиска, +// выполняется одно из следующих действий: +// Строка - переход по навигационной ссылке. Если строка является ссылкой на страницу справочной +// информации, выполняется открытие справки. +// ИдентификаторОбсужденияСистемыВзаимодействия, ИдентификаторПользователяСистемыВзаимодействия - открытие обсуждения. +// ИдентификаторСообщенияСистемыВзаимодействия - открытие обсуждения и позиционирование на сообщение. +// Другой тип - вызов метода ПоказатьЗначение с указанным значением. +// +// Параметры: +// ЭлементРезультата - ЭлементРезультатаГлобальногоПоиска - выбранный результат поиска. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, +// стандартная обработка события производиться не будет. +// +Процедура ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Вызывается при нажатии на гиперссылку в элементе результата глобального поиска, заданную в свойстве Действия +// +// Параметры: +// ЭлементРезультата - ЭлементРезультатаГлобальногоПоиска - элемент результата глобального описка, +// в котором нажата гиперссылка действия. +// Действие - Произвольный - значение, заданное для нажатой гиперссылки. +// +Процедура ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) Экспорт + +КонецПроцедуры + +// Вызывается при переходе по навигационной ссылке внутри приложения или при переходе в приложение по +// внешней ссылке или ссылке в мобильное приложение. +// +// Параметры: +// ДанныеПереходаПоНавигационнойСсылке - ДанныеПереходаПоНавигационнойСсылке - данные перехода по навигационной ссылке. +// СтандартнаяОбработка - Булево - в данный параметр передается признак выполнения стандартной (системной) +// обработки ссылки. Если в теле процедуры-обработчика установить данному параметру значение Ложь, +// стандартная обработка перехода по ссылке производиться не будет. +// +Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, + СтандартнаяОбработка) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 14d243c54..f935253a8 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -8,6 +8,137 @@ #Область ПрограммныйИнтерфейс +#Область РаботаСИсключениями + +// Возвращает уточненный текст исключения для пользователя и +// категорию для вызова исключения с уточненным текстом. +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке - исходная информация об ошибке. +// ЗаголовокОшибки - Строка - заголовок, уточняющий ошибку для пользователя и администратора. +// Если не указан, тогда возвращается текст исключения без уточнения. +// +// ОшибкаНаКлиенте - Булево - нужно указать Истина, если уточняется ошибка, +// которая изначально возникла на клиенте, так как для некоторых ошибок, +// например, ОшибкаДоступаКЛокальномуФайлу, ОшибкаРаботыСПринтером платформа +// делает разную обработку (доступ к локальному файлу на клиенте дополняется +// уточнениями, а на сервере не дополняется), соответственно требуется +// по-разному вызывать исключение с уточнением. +// +// Возвращаемое значение: +// Структура: +// * Текст - Строка - текст ошибки с уточнением (без уточнения, если ЗаголовокОшибки пустой). +// * Категория - КатегорияОшибки - категория для вызова исключения с уточнением. +// - Неопределено - если категорию нужно оставить неуказанной +// при вызове исключения с уточнением. +// +// Пример: +// Попытка +// ВыполнитьКоманду(...); +// Исключение +// ИнформацияОбОшибке = ИнформацияОбОшибке(); +// ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( +// НСтр("ru = 'Не удалось выполнить команду %1 по причине:'"), ИдентификаторКоманды); +// Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, ЗаголовокОшибки); +// ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); +// КонецПопытки; +// +// Попытка +// СоединениеСИнтернет.Получить(ПутьНаСервере, ПутьДляСохранения); +// Исключение +// ИнформацияОбОшибке = ИнформацияОбОшибке(); +// Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке); +// ДляАдминистратора = ДиагностикаСоединенияСИнтернет(...); +// ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,, ДляАдминистратора, ИнформацияОбОшибке); +// КонецПопытки; +// +Функция УточнениеИсключения(ИнформацияОбОшибке, ЗаголовокОшибки = "", ОшибкаНаКлиенте = Ложь) Экспорт + + Категория = ОбработкаОшибок.КатегорияОшибкиДляПользователя(ИнформацияОбОшибке); + Если Категория = КатегорияОшибки.ПрочаяОшибка Тогда + Категория = КатегорияОшибки.ОшибкаКонфигурации; + ИначеЕсли Категория = КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка Тогда + Категория = Неопределено; + КонецЕсли; + + Если Не ОшибкаНаКлиенте Тогда + Если Категория = КатегорияОшибки.ОшибкаДоступаКЛокальномуФайлу + Или Категория = КатегорияОшибки.ОшибкаРаботыСПринтером Тогда + Категория = КатегорияОшибки.ОшибкаКонфигурации; + КонецЕсли; + КонецЕсли; + + ТекстОшибки = ""; + ТекущаяПричина = ИнформацияОбОшибке; + Описание = ""; + Пока ТекущаяПричина <> Неопределено Цикл + Если ТекущаяПричина.ЯвляетсяОшибкойКатегории( + КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка, Ложь) Тогда + Описание = ТекущаяПричина.Описание; + Прервать; + КонецЕсли; + ТекущаяПричина = ТекущаяПричина.Причина; + КонецЦикла; + Если Не ЗначениеЗаполнено(Описание) Тогда + Описание = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + Если ЗначениеЗаполнено(ЗаголовокОшибки) Тогда + ТекстОшибки = ЗаголовокОшибки + Символы.ПС + Описание; + Иначе + ТекстОшибки = Описание; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Текст", ЗаменитьНедопустимыеСимволыXML(ТекстОшибки)); + Результат.Вставить("Категория", Категория); + + Возврат Результат; + +КонецФункции + +// Проверяет наличие в ошибке хотя бы одного кода из указанных. +// При проверке учитываются все вложенные причины исключения. +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке - ошибка, в которой проверяется наличие кода ошибки. +// КодыОшибок - Строка - многострочная строка кодов ошибок, которые нужно искать в ошибке, например: +// "СтандартныеПодсистемы.БазоваяФункциональность.КонфигурацияИзмененаДинамически +// |СтандартныеПодсистемы.БазоваяФункциональность.РасширенияИзмененыДинамически". +// +// Возвращаемое значение: +// Булево +// +// Пример: +// Попытка +// ВыполнитьОбновление(); +// Исключение +// Если ОбщегоНазначенияКлиентСервер.ЭтоИсключениеСКодомОшибки(ИнформацияОбОшибке(), +// "СтандартныеПодсистемы.БазоваяФункциональность.КонфигурацияИзмененаДинамически +// |СтандартныеПодсистемы.БазоваяФункциональность.РасширенияИзмененыДинамически") Тогда +// ПерезапуститьФоновоеЗадание(); +// Возврат; +// КонецЕсли; +// ВызватьИсключение; +// КонецПопытки; +// +Функция ЭтоИсключениеСКодомОшибки(ИнформацияОбОшибке, КодыОшибок) Экспорт + + Коды = СтрРазделить(КодыОшибок, Символы.ПС, Ложь); + ТекущаяПричина = ИнформацияОбОшибке; + + Пока ТекущаяПричина <> Неопределено Цикл + Если Коды.Найти(ТекущаяПричина.Код) <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + ТекущаяПричина = ТекущаяПричина.Причина; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + #Область ОповещениеПользователя // АПК:142-выкл 4 необязательных параметра для совместимости с предыдущими версиями библиотеки. @@ -258,25 +389,21 @@ ИменаТиповПлатформы.Добавить("Windows_x86_64"); #Если Не МобильныйКлиент Тогда - Если СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.1923") >= 0 Тогда - ИменаТиповПлатформы.Добавить("Linux_ARM64"); - ИменаТиповПлатформы.Добавить("Linux_E2K"); - КонецЕсли; + ИменаТиповПлатформы.Добавить("Linux_ARM64"); + ИменаТиповПлатформы.Добавить("Linux_E2K"); #КонецЕсли - Если СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.23.0") >= 0 Тогда - ИменаТиповПлатформы.Добавить("Android_ARM"); - ИменаТиповПлатформы.Добавить("Android_ARM_64"); - ИменаТиповПлатформы.Добавить("Android_x86"); - ИменаТиповПлатформы.Добавить("Android_x86_64"); - - ИменаТиповПлатформы.Добавить("iOS_ARM"); - ИменаТиповПлатформы.Добавить("iOS_ARM_64"); - - ИменаТиповПлатформы.Добавить("WinRT_ARM"); - ИменаТиповПлатформы.Добавить("WinRT_x86"); - ИменаТиповПлатформы.Добавить("WinRT_x86_64"); - КонецЕсли; + ИменаТиповПлатформы.Добавить("Android_ARM"); + ИменаТиповПлатформы.Добавить("Android_ARM_64"); + ИменаТиповПлатформы.Добавить("Android_x86"); + ИменаТиповПлатформы.Добавить("Android_x86_64"); + + ИменаТиповПлатформы.Добавить("iOS_ARM"); + ИменаТиповПлатформы.Добавить("iOS_ARM_64"); + + ИменаТиповПлатформы.Добавить("WinRT_ARM"); + ИменаТиповПлатформы.Добавить("WinRT_x86"); + ИменаТиповПлатформы.Добавить("WinRT_x86_64"); Для Каждого ИмяТипаПлатформы Из ИменаТиповПлатформы Цикл Если ЗначениеТипаПлатформы = ТипПлатформы[ИмяТипаПлатформы] Тогда @@ -315,7 +442,7 @@ НСтр("ru = '%1 в %2'"), ТекстИсключения, КонтекстПроверки); КонецЕсли; - ВызватьИсключение ТекстИсключения; + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; @@ -649,23 +776,17 @@ // Удаляет все вхождения переданного значения из массива. // // Параметры: -// Массив - Массив - массив, из которого необходимо удалить значение; +// Массив - Массив из Произвольный - массив, из которого необходимо удалить значение. // Значение - Произвольный - удаляемое значение из массива. // Процедура УдалитьВсеВхожденияЗначенияИзМассива(Массив, Значение) Экспорт КоличествоЭлементовКоллекции = Массив.Количество(); - Для ОбратныйИндекс = 1 По КоличествоЭлементовКоллекции Цикл - Индекс = КоличествоЭлементовКоллекции - ОбратныйИндекс; - Если Массив[Индекс] = Значение Тогда - Массив.Удалить(Индекс); - КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -673,23 +794,17 @@ // Удаляет все вхождения значений указанного типа. // // Параметры: -// Массив - Массив - массив, из которого необходимо удалить значения; +// Массив - Массив из Произвольный - массив, из которого необходимо удалить значения. // Тип - Тип - тип значений, которые подлежат удалению из массива. // Процедура УдалитьВсеВхожденияТипаИзМассива(Массив, Тип) Экспорт КоличествоЭлементовКоллекции = Массив.Количество(); - Для ОбратныйИндекс = 1 По КоличествоЭлементовКоллекции Цикл - Индекс = КоличествоЭлементовКоллекции - ОбратныйИндекс; - Если ТипЗнч(Массив[Индекс]) = Тип Тогда - Массив.Удалить(Индекс); - КонецЕсли; - КонецЦикла; КонецПроцедуры @@ -697,8 +812,8 @@ // Удаляет одно значение из массива. // // Параметры: -// Массив - Массив - массив, из которого необходимо удалить значение; -// Значение - Массив - удаляемое значение из массива. +// Массив - Массив из Произвольный - массив, из которого необходимо удалить значение. +// Значение - Произвольный - удаляемое значение из массива. // Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт @@ -712,10 +827,10 @@ // Возвращает копию исходного массива с уникальными значениями. // // Параметры: -// Массив - Массив - массив произвольных значений. +// Массив - Массив из Произвольный - массив произвольных значений. // // Возвращаемое значение: -// Массив - массив уникальных элементов. +// Массив из Произвольный // Функция СвернутьМассив(Знач Массив) Экспорт Результат = Новый Массив; @@ -727,8 +842,8 @@ // все элементы первого массива, не существующие во втором массиве. // // Параметры: -// Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; -// МассивВычитания - Массив - массив элементов, который будет вычитаться. +// Массив - Массив из Произвольный - массив элементов, из которого необходимо выполнить вычитание; +// МассивВычитания - Массив из Произвольный - массив элементов, который будет вычитаться. // // Возвращаемое значение: // Массив - разностью двух массивов. @@ -754,9 +869,9 @@ // Сравнивает элементы списков значений или массивов по значениям. // // Параметры: -// Список1 - Массив +// Список1 - Массив из Произвольный // - СписокЗначений - сравниваемая коллекция элементов. -// Список2 - Массив +// Список2 - Массив из Произвольный // - СписокЗначений - сравниваемая коллекция элементов. // СравниватьКоличествоЗначений - Булево - уточнение способа сравнения: // Ложь - проверка вхождения значений одной коллекции в другую, @@ -826,7 +941,7 @@ // Значение - Произвольный - любое значение. // // Возвращаемое значение: -// Массив - массив из одного элемента. +// Массив из Произвольный - массив из одного элемента. // Функция ЗначениеВМассиве(Знач Значение) Экспорт @@ -1558,7 +1673,7 @@ // Составляет полное имя файла из имени каталога и имени файла. // // Параметры: -// ИмяКаталога - Строка - путь к каталогу файла на диске. +// ИмяКаталога - Строка - путь к каталогу файла на компьютере (устройстве). // ИмяФайла - Строка - имя файла, без имени каталога. // // Возвращаемое значение: @@ -1566,20 +1681,16 @@ // Функция ПолучитьПолноеИмяФайла(Знач ИмяКаталога, Знач ИмяФайла) Экспорт - Если НЕ ПустаяСтрока(ИмяФайла) Тогда - - Слэш = ""; - Если (Прав(ИмяКаталога, 1) <> "\") И (Прав(ИмяКаталога, 1) <> "/") Тогда - Слэш = ?(СтрНайти(ИмяКаталога, "\") = 0, "/", "\"); - КонецЕсли; - - Возврат ИмяКаталога + Слэш + ИмяФайла; - - Иначе - + Если ПустаяСтрока(ИмяФайла) Тогда Возврат ИмяКаталога; - КонецЕсли; + + РазделительПути = ""; + Если (Прав(ИмяКаталога, 1) <> "\") И (Прав(ИмяКаталога, 1) <> "/") Тогда + РазделительПути = ?(СтрНайти(ИмяКаталога, "\") = 0, "/", "\"); + КонецЕсли; + + Возврат ИмяКаталога + РазделительПути + ИмяФайла; КонецФункции @@ -1714,8 +1825,8 @@ КонецФункции -// Возвращает строку недопустимых символов. -// Согласно http://en.wikipedia.org/wiki/Filename - в разделе "Reserved characters and words". +// Возвращает строку недопустимых символов в имени файла +// согласно http://en.wikipedia.org/wiki/Filename - в разделе "Reserved characters and words". // // Возвращаемое значение: // Строка @@ -1741,16 +1852,16 @@ НедопустимыеСимволы = ПолучитьНедопустимыеСимволыВИмениФайла(); - МассивНайденныхНедопустимыхСимволов = Новый Массив; + Результат = Новый Массив; Для ПозицияСимвола = 1 По СтрДлина(НедопустимыеСимволы) Цикл ПроверяемыйСимвол = Сред(НедопустимыеСимволы,ПозицияСимвола,1); Если СтрНайти(ИмяФайла,ПроверяемыйСимвол) <> 0 Тогда - МассивНайденныхНедопустимыхСимволов.Добавить(ПроверяемыйСимвол); + Результат.Добавить(ПроверяемыйСимвол); КонецЕсли; КонецЦикла; - Возврат МассивНайденныхНедопустимыхСимволов; + Возврат Результат; КонецФункции @@ -2615,45 +2726,37 @@ Возврат Новый ЗащищенноеСоединениеOpenSSL; // Для обратной совместимости. #Иначе Если СертификатыУдостоверяющихЦентров = Неопределено Тогда - ВерсииПлатформыДляИспользованияСертификатов = "8.3.22.2470; 8.3.23.2122; 8.3.24.1446"; + ВерсииПлатформыДляИспользованияСертификатов = "8.3.24.1446"; СистемнаяИнформация = Новый СистемнаяИнформация; ТекущийНомерВерсии = ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); - ИспользоватьСертификатыУдостоверяющихЦентров = СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.21") > 0; + ИспользоватьСертификатыУдостоверяющихЦентров = Истина; + + Если СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.25") < 0 Тогда + Для Каждого НомерСборки Из СтрРазделить(ВерсииПлатформыДляИспользованияСертификатов, "; ", Ложь) Цикл + Если СтрНачинаетсяС(НомерСборки, ТекущийНомерВерсии + ".") Тогда + ИспользоватьСертификатыУдостоверяющихЦентров = + СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, НомерСборки) >= 0; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; Если ИспользоватьСертификатыУдостоверяющихЦентров Тогда - Если СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.25") < 0 Тогда - Для Каждого НомерСборки Из СтрРазделить(ВерсииПлатформыДляИспользованияСертификатов, "; ", Ложь) Цикл - Если СтрНачинаетсяС(НомерСборки, ТекущийНомерВерсии + ".") Тогда - ИспользоватьСертификатыУдостоверяющихЦентров = - СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, НомерСборки) >= 0; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ИспользоватьСертификатыУдостоверяющихЦентров Тогда - СертификатыУдостоверяющихЦентров = Новый СертификатыУдостоверяющихЦентровОС(); - КонецЕсли; + СертификатыУдостоверяющихЦентров = Новый СертификатыУдостоверяющихЦентровОС(); КонецЕсли; КонецЕсли; Если ВидСоединения = "КриптоПро" Тогда СистемнаяИнформация = Новый СистемнаяИнформация; - Если СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.24.0") >= 0 Тогда - ЗащищенноеСоединениеКриптоПро = Неопределено; - // АПК:487-выкл Поддержка новых методов платформы (исполняемый код безопасен) - Выполнить("ЗащищенноеСоединениеКриптоПро = Новый ЗащищенноеСоединениеКриптоПро(СертификатКлиента, СертификатыУдостоверяющихЦентров)"); - // АПК:487-вкл - Возврат ЗащищенноеСоединениеКриптоПро; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для создания защищенного соединения %1 необходима версия платформы не ниже 8.3.24. Текущая версия платформы %2.'"), - НСтр("ru = 'КриптоПро'"), СистемнаяИнформация.ВерсияПриложения); - КонецЕсли; + ЗащищенноеСоединениеКриптоПро = Неопределено; + // АПК:487-выкл Поддержка новых методов платформы (исполняемый код безопасен) + Выполнить("ЗащищенноеСоединениеКриптоПро = Новый ЗащищенноеСоединениеКриптоПро(СертификатКлиента, СертификатыУдостоверяющихЦентров, РежимПроверкиОтзываTLSСертификатаСервера.Строгий)"); + // АПК:487-вкл + Возврат ЗащищенноеСоединениеКриптоПро; КонецЕсли; - Возврат Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров); + Возврат Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров, РежимПроверкиОтзываTLSСертификатаСервера.Строгий); #КонецЕсли КонецФункции @@ -3565,9 +3668,8 @@ #Если Не МобильныйКлиент Тогда СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоLinuxКлиент = ЭтоLinuxКлиент - Или СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.1923") >= 0 - И (СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_ARM64"] - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_E2K"]); + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_ARM64"] + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_E2K"]; #КонецЕсли Возврат ЭтоLinuxКлиент; @@ -3986,9 +4088,8 @@ ИначеЕсли (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86) Или (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64) - Или СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.22.1923") >= 0 - И (СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_ARM64"] - Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_E2K"]) Тогда + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_ARM64"] + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы["Linux_E2K"] Тогда Если ВыполнитьСНаивысшимиПравами Тогда @@ -4247,71 +4348,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает уточненный текст исключения для пользователя и -// категорию для вызова исключения с уточненным текстом. -// -// Параметры: -// ИнформацияОбОшибке - ИнформацияОбОшибке - исходная информация об ошибке. -// Заголовок - Строка - если пустая, тогда возвращает текст исключения без уточнения. -// -// ОшибкаНаКлиенте - Булево - нужно указать Истина, если уточняется ошибка, -// которая изначально возникла на клиенте, так как для некоторых ошибок, -// например, ОшибкаДоступаКЛокальномуФайлу, ОшибкаРаботыСПринтером платформа -// делает разную обработку (доступ к локальному файлу на клиенте дополняется -// уточнениями, а на сервере не дополняется), соответственно требуется -// по-разному вызывать исключение с уточнением. -// -// Возвращаемое значение: -// Структура: -// * Текст - Строка - текст ошибки с уточнением (без уточнения, если Заголовок пустой). -// * Категория - КатегорияОшибки - категория для вызова исключения с уточнением. -// - Неопределено - если категорию нужно оставить неуказанной -// при вызове исключения с уточнением. -// -Функция УточнениеИсключения(ИнформацияОбОшибке, Заголовок = "", ОшибкаНаКлиенте = Ложь) Экспорт - - Категория = ОбработкаОшибок.КатегорияОшибкиДляПользователя(ИнформацияОбОшибке); - Если Категория = КатегорияОшибки.ПрочаяОшибка Тогда - Категория = КатегорияОшибки.ОшибкаКонфигурации; - ИначеЕсли Категория = КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка Тогда - Категория = Неопределено; - КонецЕсли; - - Если Не ОшибкаНаКлиенте Тогда - Если Категория = КатегорияОшибки.ОшибкаДоступаКЛокальномуФайлу - Или Категория = КатегорияОшибки.ОшибкаРаботыСПринтером Тогда - Категория = КатегорияОшибки.ОшибкаКонфигурации; - КонецЕсли; - КонецЕсли; - - ТекстОшибки = ""; - ТекущаяПричина = ИнформацияОбОшибке; - Описание = ""; - Пока ТекущаяПричина <> Неопределено Цикл - Если ТекущаяПричина.ЯвляетсяОшибкойКатегории( - КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка, Ложь) Тогда - Описание = ТекущаяПричина.Описание; - Прервать; - КонецЕсли; - ТекущаяПричина = ТекущаяПричина.Причина; - КонецЦикла; - Если Не ЗначениеЗаполнено(Описание) Тогда - Описание = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - КонецЕсли; - Если ЗначениеЗаполнено(Заголовок) Тогда - ТекстОшибки = Заголовок + Символы.ПС + Описание; - Иначе - ТекстОшибки = Описание; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Текст", ЗаменитьНедопустимыеСимволыXML(ТекстОшибки)); - Результат.Вставить("Категория", Категория); - - Возврат Результат; - -КонецФункции - // Создает массив и помещает в него переданные значения. // // Параметры: diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 5941fcd13..be419d51d 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -235,24 +235,26 @@ КонецПроцедуры -// Вызывается при обновлении информационной базы для учета переименований подсистем и ролей в конфигурации. +// Вызывается при обновлении информационной базы для учета переименований подсистем в конфигурации. // В противном случае, возникнет рассинхронизация между метаданными конфигурации и // элементами справочника ИдентификаторыОбъектовМетаданных, что приведет к различным ошибкам при работе конфигурации. +// Переименования задаются с помощью процедуры ОбщегоНазначения.ДобавитьПереименование. +// +// Если в конфигурации предусмотрен переход с предыдущей версии, в которую включена библиотека версии +// 3.1.5 и меньше, то также необходимо указывать переименования ролей. +// +// Переименования остальных объектов метаданных задавать не следует, т.к. они обрабатываются автоматически. // См. также ОбщегоНазначения.ИдентификаторОбъектаМетаданных, ОбщегоНазначения.ИдентификаторыОбъектовМетаданных. // -// В этой процедуре последовательно для каждой версии конфигурации задаются переименования только подсистем и ролей, -// а переименования остальных объектов метаданных задавать не следует, т.к. они обрабатываются автоматически. -// // Параметры: -// Итог - ТаблицаЗначений - таблица переименований, которую требуется заполнить. -// См. ОбщегоНазначения.ДобавитьПереименование. +// Переименования - Структура - сведения о переименованиях, которые требуется заполнить с помощью процедуры +// ОбщегоНазначения.ДобавитьПереименование. // // Пример: -// ОбщегоНазначения.ДобавитьПереименование(Итог, "2.1.2.14", -// "Подсистема.СлужебныеПодсистемы", -// "Подсистема.СервисныеПодсистемы"); +// ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.1.2.14", +// "Подсистема.СлужебныеПодсистемы", "Подсистема.СервисныеПодсистемы"); // -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт @@ -391,8 +393,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики отправки и получения данных для обмена в распределенной информационной базе. +#Область ОбработчикиОтправкиИПолученияДанныхДляОбменаВРаспределеннойИнформационнойБазе // Дополнительный обработчик одноименного события, возникающего при обмене данными в распределенной информационной базе. // Выполняется после выполнения базовых алгоритмов библиотеки. @@ -460,3 +461,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl index 9c5122c16..38c6f64b6 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиент/Module.bsl @@ -74,7 +74,9 @@ // изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях. // См. https://its.1c.eu/db/v83doc#bookmark:dev:TI000001866 // * ОбновлятьАвтоматически - Булево - (по умолчанию Истина) если ПредложитьЗагрузить = Истина, при загрузке -// внешней компоненты устанавливать признак ОбновлятьСПортала1СИТС +// внешней компоненты устанавливать признак ОбновлятьСПортала1СИТС. +// * ПоказыватьВопросУстановки - Булево - (по умолчанию Истина) если ПредложитьУстановить = Истина, перед установкой +// внешней компоненты будет показан вопрос об установке. // Функция КонтекстПодключенияКомпоненты() Экспорт @@ -93,6 +95,7 @@ Контекст.Вставить("ВыполненПоискНовойВерсии", Ложь); Контекст.Вставить("Изолированно", Неопределено); Контекст.Вставить("БылаПопыткаУстановки", Ложь); + Контекст.Вставить("ПоказыватьВопросУстановки", Истина); Возврат Контекст; @@ -376,6 +379,7 @@ // * Местоположение - Строка // * ТекстПояснения - Строка // * Идентификатор - Строка +// * ПоказыватьВопросУстановки - Булево // Процедура УстановитьКомпоненту(Контекст) Экспорт @@ -386,14 +390,18 @@ Если СимволическоеИмя = Неопределено Тогда - Оповещение = Новый ОписаниеОповещения( - "УстановитьКомпонентуПослеОтветаНаВопросОбУстановке", ЭтотОбъект, Контекст); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); - - ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеВнешнейКомпоненты", - ПараметрыФормы,,,,, Оповещение); + Если Контекст.ПоказыватьВопросУстановки Тогда + Оповещение = Новый ОписаниеОповещения( + "УстановитьКомпонентуПослеОтветаНаВопросОбУстановке", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПояснения", Контекст.ТекстПояснения); + + ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеВнешнейКомпоненты", + ПараметрыФормы,,,,, Оповещение); + Иначе + УстановитьКомпонентуПослеОтветаНаВопросОбУстановке(КодВозвратаДиалога.Да, Контекст); + КонецЕсли; Иначе @@ -430,16 +438,20 @@ Если СимволическоеИмя = Неопределено Тогда - ТекстПояснения = ?(ПустаяСтрока(Контекст.ТекстПояснения), - НСтр("ru = 'Установить внешнюю компоненту?'"), Контекст.ТекстПояснения); + Если Контекст.ПоказыватьВопросУстановки Тогда + ТекстПояснения = ?(ПустаяСтрока(Контекст.ТекстПояснения), + НСтр("ru = 'Установить внешнюю компоненту?'"), Контекст.ТекстПояснения); - СписокКнопок = Новый СписокЗначений; - СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Установить и продолжить'")); - СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отмена'")); + СписокКнопок = Новый СписокЗначений; + СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Установить и продолжить'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Отмена'")); + + Ответ = Ждать ВопросАсинх(ТекстПояснения, СписокКнопок,, + КодВозвратаДиалога.Да, НСтр("ru = 'Установка внешней компоненты'")); + Иначе + Ответ = КодВозвратаДиалога.Да; + КонецЕсли; - Ответ = Ждать ВопросАсинх(ТекстПояснения, СписокКнопок,, - КодВозвратаДиалога.Да, НСтр("ru = 'Установка внешней компоненты'")); - Если Ответ = КодВозвратаДиалога.Да Тогда Попытка @@ -567,7 +579,6 @@ // ЭлементыФормы - ЭлементыФормы // Видимость - Булево - признак включения / выключения видимости панели показателей. // См. также Синтакс-помощник: ГруппаФормы.Видимость. -// Процедура УстановитьВидимостьПанелиПоказателей(ЭлементыФормы, Видимость = Ложь) Экспорт ЭлементыФормы.ОбластьПоказателей.Видимость = Видимость; @@ -1004,6 +1015,7 @@ КонтекстУстановки.Вставить("Местоположение", Контекст.Местоположение); КонтекстУстановки.Вставить("ТекстПояснения", Контекст.ТекстПояснения); КонтекстУстановки.Вставить("Идентификатор", Контекст.Идентификатор); + КонтекстУстановки.Вставить("ПоказыватьВопросУстановки", Контекст.ПоказыватьВопросУстановки); УстановитьКомпоненту(КонтекстУстановки); @@ -1238,9 +1250,7 @@ #Если ВебКлиент Тогда СистемнаяИнформация = Новый СистемнаяИнформация; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.24.0") >= 0 Тогда - Ждать ПаузаАсинх(2); - КонецЕсли; + Ждать ПаузаАсинх(2); #КонецЕсли Если Контекст.Кэшировать Тогда @@ -1260,9 +1270,10 @@ Если Контекст.ПредложитьУстановить И Не Контекст.БылаПопыткаУстановки Тогда КонтекстУстановки = Новый Структура; - КонтекстУстановки.Вставить("Местоположение", Контекст.Местоположение); - КонтекстУстановки.Вставить("ТекстПояснения", Контекст.ТекстПояснения); - КонтекстУстановки.Вставить("Идентификатор", Контекст.Идентификатор); + КонтекстУстановки.Вставить("Местоположение", Контекст.Местоположение); + КонтекстУстановки.Вставить("ТекстПояснения", Контекст.ТекстПояснения); + КонтекстУстановки.Вставить("Идентификатор", Контекст.Идентификатор); + КонтекстУстановки.Вставить("ПоказыватьВопросУстановки", Контекст.ПоказыватьВопросУстановки); РезультатУстановки = Ждать УстановитьКомпонентуАсинх(КонтекстУстановки); Если РезультатУстановки.Установлено Тогда diff --git a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl index 8308f875f..68d068a9f 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияСлужебныйКлиентСервер/Module.bsl @@ -315,21 +315,14 @@ Функция ПредопределенныйЭлемент(ПолноеИмяПредопределенного, ПоляПредопределенного, ПредопределенныеЗначения) Экспорт - // Если ошибка в имени метаданных. + // Если перечисление не существует в метаданных. Если ПредопределенныеЗначения = Неопределено Тогда - ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); + Возврат Неопределено; КонецЕсли; - // Получение результата из кэша. + // Если предопределенного нет в метаданных, или он есть в метаданных, но не создан в ИБ. Результат = ПредопределенныеЗначения.Получить(ПоляПредопределенного.ИмяПредопределенного); - - // Если предопределенного нет в метаданных. - Если Результат = Неопределено Тогда - ВызватьИсключение ТекстОшибкиПредопределенноеЗначениеНеНайдено(ПолноеИмяПредопределенного); - КонецЕсли; - - // Если предопределенный есть в метаданных, но не создан в ИБ. - Если Результат = Null Тогда + Если Результат = Неопределено Или Результат = Null Тогда Возврат Неопределено; КонецЕсли; diff --git a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl index 261108402..c53803205 100644 --- a/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииПереопределяемый/Module.bsl @@ -53,7 +53,8 @@ // | Организации.ГоловнаяОрганизация КАК ГоловнаяОрганизация, // | Организации.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь, // | Организации.Предопределенный КАК Предопределенный, -// | Организации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных +// | Организации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, +// | Организации.ВАрхиве КАК ВАрхиве // |ИЗ // | Справочник.Организации КАК Организации // |ГДЕ diff --git a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl index 08b8429f6..195b359f7 100644 --- a/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl +++ b/SSL/src/CommonModules/ОрганизацииСервер/Module.bsl @@ -75,8 +75,9 @@ Если НЕ СведенияОбОрганизации.Свойство(Элемент.Ключ) Тогда СведенияОбОрганизации.Вставить(Элемент.Ключ, Элемент.Значение); Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элемент с таким ключом ""%1"" уже определен.'"), Элемент.Ключ); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент с таким ключом ""%1"" уже определен.'"), Элемент.Ключ), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецЦикла; @@ -130,6 +131,7 @@ // * СтавкаНалогаУСН - Число - ставка налога УСН. // * ЭтоФизическоеЛицо - Булево - признак что это физическое лицо. // * ЭтоЮридическоеЛицо - Булево - признак что это юридическое лицо. +// * ВАрхиве - Булево - признак неактуальной организации. // Функция РегистрационныеДанныеОрганизации(Знач Организация, Знач Поля = "", Знач Дата = Неопределено, Знач КодЯзыка = Неопределено) Экспорт @@ -279,6 +281,24 @@ КонецФункции +// Возвращает Истина, если есть неактуальные организации. +// Проверка выполняется по наличию реквизита ВАрхиве у справочника Организации. +// +// Возвращаемое значение: +// Булево +// +Функция ИспользуетсяАрхив() Экспорт + + МетаданныеОрганизации = Метаданные.НайтиПоТипу(Метаданные.ОпределяемыеТипы.Организация.Тип.Типы()[0]); + Если МетаданныеОрганизации = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Результат = ОбщегоНазначения.ЕстьРеквизитОбъекта("ВАрхиве", МетаданныеОрганизации); + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СведенияОбОбособленномПодразделении diff --git a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl index 5d3423ddb..fead020cb 100644 --- a/SSL/src/CommonModules/ОтправкаSMS/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMS/Module.bsl @@ -29,6 +29,11 @@ Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, ""); + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + Результат.ОписаниеОшибки = ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения(); + Возврат Результат; + КонецЕсли; + Если Не ЗначениеЗаполнено(СтрСоединить(НомераПолучателей, "")) Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Не указан номер получателя SMS.'"); Возврат Результат; @@ -75,14 +80,15 @@ Тип("Структура"), Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Тип("Массив"), Тип("Строка"))); Если Не ЗначениеЗаполнено(Результат.ОписаниеОшибки) И Не ЗначениеЗаполнено(Результат.ОтправленныеСообщения) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'Ошибка при выходе из процедуры %1: |Не заполнены выходные параметры %2 и %3 (провайдер: %4). - |Ожидается заполнение по меньшей мере одного из этих параметров.'", ОбщегоНазначения.КодОсновногоЯзыка()), + |Ожидается заполнение по меньшей мере одного из этих параметров.'"), "ОтправкаSMSПереопределяемый.ОтправитьSMS", "ОписаниеОшибки", "ОтправленныеСообщения", НастройкиОтправкиSMS.Провайдер); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Результат.ОтправленныеСообщения.Количество() > 0 Тогда @@ -97,10 +103,11 @@ Для Индекс = 0 По Результат.ОтправленныеСообщения.Количество() - 1 Цикл ОбщегоНазначенияКлиентСервер.ПроверитьПараметр( "ОтправкаSMSПереопределяемый.ОтправитьSMS", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Результат.ОтправленныеСообщения[%1]", Формат(Индекс, "ЧН=; ЧГ=0")), - Результат.ОтправленныеСообщения[Индекс], - Тип("Структура"), - Новый Структура("НомерПолучателя,ИдентификаторСообщения", Тип("Строка"), Тип("Строка"))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Результат.ОтправленныеСообщения[%1]", + Формат(Индекс, "ЧН=; ЧГ=0")), + Результат.ОтправленныеСообщения[Индекс], + Тип("Структура"), + Новый Структура("НомерПолучателя,ИдентификаторСообщения", Тип("Строка"), Тип("Строка"))); КонецЦикла; КонецЕсли; КонецЕсли; @@ -133,6 +140,7 @@ Возврат "НеОтправлялось"; КонецЕсли; + Возврат СтатусыДоставки(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторСообщения))[ИдентификаторСообщения]; КонецФункции @@ -180,7 +188,7 @@ // Функция ДоступнаОтправкаSMS() Экспорт - Возврат ОтправкаSMSПовтИсп.ДоступнаОтправкаSMS(); + Возврат ОтправкаSMSПовтИсп.ДоступнаОтправкаSMS() И ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); КонецФункции @@ -257,7 +265,7 @@ // ИдентификаторыСообщений - Массив из Строка - идентификаторы, присвоенные SMS при отправке; // // Возвращаемое значение: -// Соответствие: +// Соответствие из КлючИЗначение: // * Ключ - Строка - идентификатор SMS; // * Значение - Строка - статус доставки сообщения, который вернул поставщик услуг: // "НеОтправлялось" - сообщение еще не было обработано поставщиком услуг (в очереди); @@ -272,6 +280,9 @@ Функция СтатусыДоставки(Знач ИдентификаторыСообщений) Экспорт ПроверитьПрава(); + + ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(Истина); + СтатусыДоставки = ОтправкаSMSПовтИсп.СтатусыДоставки(СтрСоединить(ИдентификаторыСообщений, ",")); Возврат Новый Соответствие(СтатусыДоставки); diff --git a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl index f090e0f27..127fd8756 100644 --- a/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSЧерезSMSЦЕНТР/Module.bsl @@ -144,7 +144,7 @@ ОписанияОшибок.Вставить(1, НСтр("ru = 'Ошибка в параметрах.'")); ОписанияОшибок.Вставить(2, НСтр("ru = 'Неверный логин или пароль.'")); ОписанияОшибок.Вставить(3, НСтр("ru = 'Недостаточно средств на счете.'")); - ОписанияОшибок.Вставить(4, НСтр("ru = 'IP-адрес временно заблокирован из-за частых ошибок в запросах. Подробнее см. http://smsc.ru/faq/99'")); + ОписанияОшибок.Вставить(4, НСтр("ru = 'IP-адрес временно заблокирован из-за частых ошибок в запросах. Подробнее см. https://smsc.ru/faq/99'")); ОписанияОшибок.Вставить(5, НСтр("ru = 'Неверный формат даты.'")); ОписанияОшибок.Вставить(6, НСтр("ru = 'Сообщение запрещено (по тексту или по имени отправителя).'")); ОписанияОшибок.Вставить(7, НСтр("ru = 'Неверный формат номера телефона.'")); @@ -164,7 +164,7 @@ ОписанияОшибок.Вставить(1, НСтр("ru = 'Ошибка в параметрах.'")); ОписанияОшибок.Вставить(2, НСтр("ru = 'Неверный логин или пароль.'")); ОписанияОшибок.Вставить(5, НСтр("ru = 'Ошибка удаления сообщения.'")); - ОписанияОшибок.Вставить(4, НСтр("ru = 'IP-адрес временно заблокирован из-за частых ошибок в запросах. Подробнее см. http://smsc.ru/faq/99'")); + ОписанияОшибок.Вставить(4, НСтр("ru = 'IP-адрес временно заблокирован из-за частых ошибок в запросах. Подробнее см. https://smsc.ru/faq/99'")); ОписанияОшибок.Вставить(9, НСтр("ru = 'Отправка более пяти запросов на получения статуса одного и того же сообщения в течение минуты.'")); ТекстСообщения = ОписанияОшибок[КодОшибки]; diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index 2606c88fd..201ed6bfe 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -28,8 +28,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Методы работы с СКД из формы отчета. +#Область МетодыРаботыССКДИзФормыОтчета Функция ТипЗначенияОграниченныйСвязьюПоТипу(Настройки, ПользовательскиеНастройки, ЭлементНастройки, ОписаниеЭлементаНастройки, ТипЗначения = Неопределено) Экспорт Если ОписаниеЭлементаНастройки = Неопределено Тогда @@ -264,6 +263,8 @@ Возврат Неопределено; КонецФункции +#КонецОбласти + #Область ПериодОтчета // Вызывает диалог редактирования стандартного периода. diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index 36203fa20..294e1ef23 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -997,8 +997,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +#Область ЛокальныеСлужебныеПроцедурыИФункции // Находит общую настройку компоновки данных по идентификатору. Функция НайтиЭлементНастройки(ЭлементНастройки, ИдентификаторПользовательскойНастройки) @@ -1127,8 +1126,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Унификация формы отчета и формы настроек отчета. +#КонецОбласти + +#Область УнификацияФормыОтчетаИФормыНастроекОтчета // Возвращает представление элемента условного оформления. // @@ -1366,8 +1366,9 @@ Возврат Представление; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее Функция СкопироватьРекурсивно(Знач Узел, Знач ЧтоКопировать, Знач КудаВставить, Знач Индекс, Соответствие = Неопределено, БезСтруктуры = Ложь) Экспорт Если Соответствие = Неопределено Тогда @@ -2048,3 +2049,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index 5a3ddbeb4..86bfca809 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -544,6 +544,12 @@ // ПараметрыЗагрузки - см. ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета // НастройкиОтчета - Структура // +// Возвращаемое значение: +// Структура: +// * Настройки - НастройкиКомпоновкиДанных +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных +// * ФиксированныеНастройки - НастройкиКомпоновкиДанных +// Функция ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета) Экспорт Настройки = Неопределено; ПользовательскиеНастройки = Неопределено; @@ -684,8 +690,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Настройки варианта +#Область НастройкиВарианта // Определяет свойства параметров вывода, влияющих на отображение заголовка, параметров данных и отборов: // * Выводить заголовок; @@ -1059,8 +1064,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Пользовательские настройки +#КонецОбласти + +#Область ПользовательскиеНастройки // Собирает статистику по количеству пользовательских настроек в разрезе режимов отображения. // @@ -1068,7 +1074,7 @@ // КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - актуальный компоновщик. // // Возвращаемое значение: -// Структура - количество пользовательских настроек в разрезе режимов отображения: +// Структура: // * БыстрогоДоступа - Число - количество настроек с режимом отображения БыстрыйДоступ или Авто; // * Обычных - Число - количество настроек с режимом отображения Обычный; // * Итог - Число - общее количество доступных настроек. @@ -1188,8 +1194,9 @@ Возврат Свойства; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные +#КонецОбласти + +#Область Вспомогательные // Создает и возвращает экземпляр отчета по полному имени объекта метаданных. // @@ -1224,8 +1231,9 @@ КонецЕсли; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление элементов формы пользовательских настроек +#КонецОбласти + +#Область ОбновлениеЭлементовФормыПользовательскихНастроек Процедура ПередОбновлениемЭлементовФормыНастроек(Форма, ПараметрыОбновления) @@ -3311,8 +3319,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сохранение состояния формы +#КонецОбласти + +#Область СохранениеСостоянияФормы // Запоминает состояние формы. // @@ -3400,8 +3409,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Отчет пустой +#КонецОбласти + +#Область ОтчетПустой // Проверяет наличие внешних наборов данных. // @@ -3435,8 +3445,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Параметры выбора +#КонецОбласти + +#Область ПараметрыВыбора Функция ЗначенияДляВыбора(ПараметрыНастройки, ТипИлиТипы = Неопределено) Экспорт ПараметрыПолученияДанныхВыбора = Новый Структура("Отбор, ВыборГруппИЭлементов"); @@ -3498,8 +3509,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Схема компоновки данных +#КонецОбласти + +#Область СхемаКомпоновкиДанных // Добавляет выбранное поле компоновки данных. // @@ -3541,8 +3553,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Контекстные варианты +#КонецОбласти + +#Область КонтекстныеВарианты Процедура ДобавитьВариантыКонтекста(Отчет, Варианты, ВариантыКонтекста) Экспорт @@ -3585,8 +3598,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее Функция РасширенноеОписаниеТипов(ИсходноеОписаниеТипов, ПривестиКФорме, ПараметрыПодбора = Неопределено) Экспорт Результат = Новый Структура; @@ -3806,3 +3820,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl index e6eafbcad..7ef349358 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -616,8 +616,9 @@ ПозицииСлов = Новый Массив; Для ПозицияСимвола = 1 По СтрДлина(Строка) Цикл ТекСимвол = Сред(Строка, ПозицияСимвола, 1); - Если ТекСимвол = ВРег(ТекСимвол) И (ОценкаПроизводительностиКлиентСервер.ТолькоКириллицаВСтроке(ТекСимвол) - Или ОценкаПроизводительностиКлиентСервер.ТолькоЛатиницаВСтроке(ТекСимвол)) Тогда + Если ТекСимвол = ВРег(ТекСимвол) + И (ОценкаПроизводительностиКлиентСервер.ТолькоСимволыНациональногоАлфавитаВСтроке(ТекСимвол) + Или ОценкаПроизводительностиКлиентСервер.ТолькоЛатиницаВСтроке(ТекСимвол)) Тогда ПозицииСлов.Добавить(ПозицияСимвола); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 34fdfeca9..b7d67ee3a 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -410,44 +410,31 @@ КонецФункции -// Проверяет, содержит ли строка только символы кириллического алфавита. +// Проверяет наличие в строке посторонних символов. // // Параметры: -// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. -// ДопустимыеСимволы - строка для проверки. +// ПроверяемаяСтрока - Строка - проверяемая строка. +// ДополнительныеДопустимыеСимволы - Неопределено, Строка - дополнительные разрешенные символы. Если Параметр не +// указан, то +// допустимыми символами считаются непечатные символы: пробел, неразрывный пробел, табуляция, перевод строки +// и перевод формы. // // Возвращаемое значение: -// Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая; +// Булево - Истина, если строка содержит только допустимые символы или пустая; // Ложь, если строка содержит иные символы. // -Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт +Функция ТолькоСимволыНациональногоАлфавитаВСтроке(Знач ПроверяемаяСтрока, Знач ДополнительныеДопустимыеСимволы = Неопределено) Экспорт - Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда - Возврат Ложь; + СимволыНациональногоАлфавита = "abcdefghijklmnopqrstuvwxyz"; + // Локализация + СимволыНациональногоАлфавита = СимволыНациональногоАлфавита + "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; // АПК:163 буква ё разрешена в данном контексте. + // Конец Локализация + + Если ДополнительныеДопустимыеСимволы = Неопределено Тогда + ДопустимыеСимволы = " " + Символы.Таб + Символы.ПС + Символы.ВК + Символы.ВТаб + Символы.НПП + Символы.ПФ; КонецЕсли; - Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда - Возврат Истина; - КонецЕсли; - - КодыДопустимыхСимволов = Новый Массив; - КодыДопустимыхСимволов.Добавить(1105); // "ё" - КодыДопустимыхСимволов.Добавить(1025); // "Ё" - - Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл - КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1))); - КонецЦикла; - - Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл - КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1)); - Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) - И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) - И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Возврат Истина; + Возврат СтрРазделить(НРег(ПроверяемаяСтрока), СимволыНациональногоАлфавита + ДополнительныеДопустимыеСимволы, Ложь).Количество() = 0; КонецФункции diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index e09811589..2be89a96e 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -30,8 +30,7 @@ Возврат РегистрыСведений.ЗамерыВремениТехнологические.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -152,6 +151,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -229,8 +230,7 @@ КонецЕсли; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Находит и возвращает регламентное задание экспорта замеров времени. // @@ -378,8 +378,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +#КонецОбласти + +#Область ЛокальныеСлужебныеПроцедурыИФункции // Формирует массив разрешений для экспорта данных замеров. // @@ -423,6 +424,8 @@ Возврат Разрешения; КонецФункции +#КонецОбласти + #Область ОбщегоНазначенияКопия // Возвращает Истина, если "функциональная" подсистема существует в конфигурации. @@ -976,4 +979,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыки/Module.bsl b/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыки/Module.bsl index ab3f70cf2..ea7f08fdc 100644 --- a/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыки/Module.bsl +++ b/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыки/Module.bsl @@ -62,7 +62,7 @@ НайденныеПереводы = НайтиПереводТекстов(Тексты, ЯзыкПеревода, ИсходныйЯзык); - Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСервисПереводаТекста") Тогда + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСервисПереводаТекста") Или Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда Возврат НайденныеПереводы; КонецЕсли; @@ -198,7 +198,7 @@ // Функция ДоступенПереводТекста() Экспорт - Возврат ПолучитьФункциональнуюОпцию("ИспользоватьСервисПереводаТекста"); + Возврат ПолучитьФункциональнуюОпцию("ИспользоватьСервисПереводаТекста") И ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); КонецФункции @@ -206,12 +206,30 @@ #Область СлужебныйПрограммныйИнтерфейс -Функция СервисПереводаТекста() Экспорт +// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт - Возврат Константы.СервисПереводаТекста.Получить(); + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + Для Каждого МодульПровайдера Из МодулиСервисовПереводаТекста() Цикл + МодульСервисаПереводаТекста = МодульПровайдера.Значение; + Разрешения = МодульСервисаПереводаТекста.Разрешения(); + ЗапросРазрешений = МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения); + ЗапросыРазрешений.Добавить(ЗапросРазрешений); + КонецЦикла; + +КонецПроцедуры + +Функция ДоступнаНастройкаСервисаПереводаТекста() Экспорт + + Возврат ПравоДоступа("Просмотр", Метаданные.ОбщиеФормы.НастройкаПереводаТекста); КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура ПеревестиТекстыТабличногоДокумента(ТабличныйДокумент, ЯзыкПеревода, ИсходныйЯзык) Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда @@ -252,24 +270,6 @@ КонецПроцедуры -// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. -Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт - - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - - Для Каждого МодульПровайдера Из МодулиСервисовПереводаТекста() Цикл - МодульСервисаПереводаТекста = МодульПровайдера.Значение; - Разрешения = МодульСервисаПереводаТекста.Разрешения(); - ЗапросРазрешений = МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения); - ЗапросыРазрешений.Добавить(ЗапросРазрешений); - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - Функция НайтиПереводТекстов(Тексты, ЯзыкПеревода, ИсходныйЯзык) ТекстыДляПоиска = Новый Массив; @@ -403,13 +403,25 @@ Процедура ПроверитьНастройки() - МодульСервисаПереводаТекста = МодульСервисаПереводаТекста(); - Если МодульСервисаПереводаТекста = Неопределено Или Не МодульСервисаПереводаТекста.НастройкаВыполнена() Тогда + Если ТребуетсяНастройка() Тогда ВызватьИсключение НСтр("ru = 'Не указаны настройки сервиса перевода текстов.'"); КонецЕсли; КонецПроцедуры +Функция ТребуетсяНастройка() Экспорт + + Если Не Константы.ИспользоватьСервисПереводаТекста.Получить() Тогда + Возврат Истина; + КонецЕсли; + + МодульСервисаПереводаТекста = МодульСервисаПереводаТекста(); + НастройкаВыполнена = МодульСервисаПереводаТекста <> Неопределено И МодульСервисаПереводаТекста.НастройкаВыполнена(); + + Возврат Не НастройкаВыполнена; + +КонецФункции + // Возвращаемое значение: // Структура: // * ИнструкцияПоПодключению - Строка diff --git a/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыкиВызовСервера/Module.bsl new file mode 100644 index 000000000..49438b910 --- /dev/null +++ b/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыкиВызовСервера/Module.bsl @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..30c9da4ae --- /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 922129d21..dd5ab357e 100644 --- a/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыкиКлиент/Module.bsl @@ -8,10 +8,70 @@ #Область СлужебныйПрограммныйИнтерфейс -Процедура ПерейтиКНастройкам(Владелец, ОбработчикЗавершения) Экспорт +Процедура ПерейтиКНастройкам(Владелец, ОбработчикЗавершения, ЭтоКонтекстныйВызов = Ложь) Экспорт - ОткрытьФорму("ОбщаяФорма.НастройкаПереводаТекста", , Владелец, , , , ОбработчикЗавершения); + Параметры = Новый Структура; + Параметры.Вставить("ЭтоКонтекстныйВызов", ЭтоКонтекстныйВызов); + + ОткрытьФорму("ОбщаяФорма.НастройкаПереводаТекста", Параметры, Владелец, , , , ОбработчикЗавершения); КонецПроцедуры -#КонецОбласти \ 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..2ba3479c2 --- /dev/null +++ b/SSL/src/CommonModules/ПереводТекстаНаДругиеЯзыкиЛокализация/Module.bsl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..73c0f88c7 --- /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 ce90a28bd..df4fd1904 100644 --- a/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКоманды/Module.bsl @@ -103,6 +103,11 @@ ПараметрыРазмещения.Вставить("ЭтоФормаОбъекта", КэшФормы.ЭтоФормаОбъекта); ПараметрыРазмещения.Вставить("ВводНаОснованииЧерезПодключаемыеКоманды", КэшФормы.ВводНаОснованииЧерезПодключаемыеКоманды); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульУправлениеПечатью.ПриСозданииНаСервере(Форма, КэшФормы.Команды, ЭтоФормаОбъекта); + КонецЕсли; + Если КэшФормы.ФункциональныеОпции.Количество() > 0 Тогда Форма.УстановитьПараметрыФункциональныхОпцийФормы(КэшФормы.ФункциональныеОпции); КонецЕсли; @@ -252,8 +257,7 @@ #Область СлужебныйПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий. +#Область ОбработчикиСобытий // Формирует таблицу общих настроек всех расширений, подключенных к объекту метаданных. Функция ПодключенныеОбъекты(ОписаниеИсточника, ПодключенныеОбъекты = Неопределено, НастройкиПрограммногоИнтерфейса = Неопределено) Экспорт @@ -442,8 +446,9 @@ Возврат Источник; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Шаблоны. +#КонецОбласти + +#Область Шаблоны // Шаблон сведений об объектах метаданных - источников команд. // @@ -531,8 +536,9 @@ Возврат Таблица; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -551,8 +557,9 @@ Возврат ОперативноеОбновлениеОбщихДанных(Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений")); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы Функция ОперативноеОбновлениеОбщихДанныхКонфигурации() Экспорт Возврат ОперативноеОбновлениеОбщихДанных(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); @@ -560,10 +567,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Кэш формы ПриСозданииНаСервере. +#Область КэшФормыПриСозданииНаСервере // Кэш формы, в которой будут выводиться подключаемые команды. Функция КэшФормы(ИмяФормы, ИсточникиЧерезЗапятую, ЭтоФормаОбъекта) Экспорт @@ -723,8 +731,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вывод. +#КонецОбласти + +#Область Вывод // Размещает подключенные команды в форме. // @@ -828,6 +837,7 @@ СведенияОПодменюСоздатьНаОсновании = СведенияОПодменюПоУмолчанию; КонецЕсли; + ЕстьКомандыПоУмолчанию = Ложь; Для Каждого Команда Из КомандыВида Цикл Если ПустаяСтрока(Команда.Подменю) Тогда СведенияОПодменюКоманды = СведенияОПодменюПоУмолчанию; @@ -840,9 +850,54 @@ БыстрыйПоискСведенийОПодменю.Вставить(НРег(ИмяПодменю), СведенияОПодменюКоманды); КонецЕсли; КонецЕсли; - СведенияОПодменюКоманды.КоличествоКоманд = СведенияОПодменюКоманды.КоличествоКоманд + 1; + + Если Команда.КомандаПоУмолчанию Тогда + ЕстьКомандыПоУмолчанию = Истина; + СведенияОПодменюКоманды.КомандыПоУмолчанию.Добавить(Команды.Индекс(Команда)); + Иначе + СведенияОПодменюКоманды.КоличествоКоманд = СведенияОПодменюКоманды.КоличествоКоманд + 1; + КонецЕсли; + СведенияОПодменюКоманды.Команды.Добавить(Команды.Индекс(Команда)); КонецЦикла; + + // для единственной команды нет смысла создавать группу и кнопку по умолчанию + Если ЕстьКомандыПоУмолчанию И СведенияОПодменюКоманды.КоличествоКоманд = 1 Тогда + Для Каждого КомандаПоУмолчанию Из СведенияОПодменюКоманды.КомандыПоУмолчанию Цикл + Индекс = СведенияОПодменюКоманды.Команды.Найти(КомандаПоУмолчанию); + СведенияОПодменюКоманды.Команды.Удалить(Индекс); + КонецЦикла; + СведенияОПодменюКоманды.КомандыПоУмолчанию.Очистить(); + ЕстьКомандыПоУмолчанию = Ложь; + КонецЕсли; + + // Создание групп для команд по умолчанию + Если ЕстьКомандыПоУмолчанию Тогда + ГруппаВидаКоманд = СведенияОПодменюКоманды.Подменю; + Если ГруппаВидаКоманд.Видимость Тогда + + ГруппаВидаКоманд.Отображение = ОтображениеКнопки.Текст; + ГруппаСКомандамиПоУмолчанию = "ГруппаСКомандамиПоУмолчанию" + ПрефиксГрупп + ВидКоманд.ИмяПодменю; + + ГруппаСКомандамиПоУмолчанию = Элементы.Вставить(ГруппаСКомандамиПоУмолчанию, Тип("ГруппаФормы"), + ГруппаВидаКоманд.Родитель, ГруппаВидаКоманд); + ГруппаСКомандамиПоУмолчанию.Вид = ВидГруппыФормы.ГруппаКнопок; + + ШаблонСтроки = НСтр("ru = 'Группа с командами по умолчанию %1'"); + ЗаголовокГруппы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ВидКоманд.Заголовок); + ГруппаСКомандамиПоУмолчанию.Заголовок = ЗаголовокГруппы; + ГруппаСКомандамиПоУмолчанию.Отображение = ОтображениеГруппыКнопок.Компактное; + + Для Каждого ИндексКоманды Из СведенияОПодменюКоманды.КомандыПоУмолчанию Цикл + Команды[ИндексКоманды].Подменю = ГруппаСКомандамиПоУмолчанию; + КонецЦикла; + + Элементы.Переместить(ГруппаВидаКоманд, ГруппаСКомандамиПоУмолчанию); + СведенияОПодменюКоманды.ГруппаСКомандамиПоУмолчанию = ГруппаСКомандамиПоУмолчанию; + СведенияОПодменюКоманды.ЕстьГруппаСКомандамиПоУмолчанию = Истина; + + КонецЕсли; + КонецЕсли; КонецЦикла; СозданиеНаОсновании.ПриВыводеКоманд(Форма, СведенияОПодменюСоздатьНаОсновании, ПараметрыРазмещения); @@ -885,7 +940,11 @@ КомандаФормы.ИзменяетСохраняемыеДанные = Команда.ИзменяетВыбранныеОбъекты И ПараметрыРазмещения.ЭтоФормаОбъекта И Форма.ТолькоПросмотр; - Если СведенияОПодменюКоманды.КоличествоКоманд = 1 И ТипЗнч(ГруппаФормы.Родитель) <> Тип("ФормаКлиентскогоПриложения") + ГруппаСКомандамиПоУмолчанию = СведенияОПодменюКоманды.ГруппаСКомандамиПоУмолчанию; + Если Команда.КомандаПоУмолчанию И ГруппаСКомандамиПоУмолчанию <> Неопределено Тогда + КнопкаФормы = Элементы.Вставить(Команда.ИмяВФорме, Тип("КнопкаФормы"), ГруппаСКомандамиПоУмолчанию, ГруппаСКомандамиПоУмолчанию.ПодчиненныеЭлементы[0]); + КнопкаФормы.Отображение = КомандаФормы.Отображение; + ИначеЕсли СведенияОПодменюКоманды.КоличествоКоманд = 1 И ТипЗнч(ГруппаФормы.Родитель) <> Тип("ФормаКлиентскогоПриложения") И Не КомандаВидаКоманднаяПанель Тогда КнопкаФормы = Элементы.Вставить(Команда.ИмяВФорме, Тип("КнопкаФормы"), СведенияОПодменюКоманды.Подменю.Родитель, ГруппаФормы.Родитель); Иначе @@ -927,6 +986,7 @@ СведенияОКоманде.Вставить("УсловияВидимости"); СведенияОКоманде.Вставить("УсловияВидимостиПоТипамОбъектов"); СведенияОКоманде.Вставить("ПрефиксКоманд"); + СведенияОКоманде.Вставить("КомандаПоУмолчанию"); ЗаполнитьЗначенияСвойств(СведенияОКоманде, Команда); СведенияОКоманде.ПрефиксКоманд = ПрефиксКоманд; @@ -1003,11 +1063,22 @@ УдалитьИзВременногоХранилища(ПодключенныеКоманды.АдресТаблицыКоманд); КонецЕсли; + ПриВыводеКоманд(Форма, ПодключенныеКоманды); + Команды.Колонки.Удалить("СочетаниеКлавиш"); ПодключенныеКоманды.АдресТаблицыКоманд = ПоместитьВоВременноеХранилище(Команды, Форма.УникальныйИдентификатор); КонецПроцедуры +Процедура ПриВыводеКоманд(Форма, ПодключенныеКоманды) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульУправлениеПечатью.ПриВыводеКоманд(Форма, ПодключенныеКоманды); + КонецЕсли; + +КонецПроцедуры + // Возвращаемое значение: // ТаблицаЗначений: // * Подменю - ГруппаФормы @@ -1037,6 +1108,9 @@ СведенияОВсехПодменю.Колонки.Добавить("КомандыСУсловиямиВидимости", Новый ОписаниеТипов("Массив")); СведенияОВсехПодменю.Колонки.Добавить("КартинкаПодменю"); СведенияОВсехПодменю.Колонки.Добавить("Команды", Новый ОписаниеТипов("Массив")); + СведенияОВсехПодменю.Колонки.Добавить("КомандыПоУмолчанию", Новый ОписаниеТипов("Массив")); + СведенияОВсехПодменю.Колонки.Добавить("ГруппаСКомандамиПоУмолчанию"); + СведенияОВсехПодменю.Колонки.Добавить("ЕстьГруппаСКомандамиПоУмолчанию", Новый ОписаниеТипов("Булево")); Возврат СведенияОВсехПодменю; @@ -1047,9 +1121,11 @@ // * Имя - Строка // * КомандыСУсловиямиВидимости - Массив // * ЕстьКомандыБезУсловийВидимости - Булево +// * ЕстьГруппаСКомандамиПоУмолчанию - Булево // Функция КраткиеСведенияОПодменю(СведенияОПодменю) - КраткиеСведенияОПодменю = Новый Структура("Имя, КомандыСУсловиямиВидимости, ЕстьКомандыБезУсловийВидимости"); + КраткиеСведенияОПодменю = Новый Структура("Имя, КомандыСУсловиямиВидимости, ЕстьКомандыБезУсловийВидимости, + |ЕстьГруппаСКомандамиПоУмолчанию"); ЗаполнитьЗначенияСвойств(КраткиеСведенияОПодменю, СведенияОПодменю); Возврат КраткиеСведенияОПодменю; КонецФункции @@ -1171,7 +1247,7 @@ Функция ЭтоПутьДоРеквизита(Знач ПутьДоРеквизита) ПутьДоРеквизита = ВРег(ПутьДоРеквизита); ПутьДоРеквизита = СтрЗаменить(ПутьДоРеквизита, "НЕ ", ""); - Идентификаторы = СтрРазделить(СтрЗаменить(ПутьДоРеквизита, "%ИСТОЧНИК%",""), "."); + Идентификаторы = СтрРазделить(СтрЗаменить(ПутьДоРеквизита, ".%ИСТОЧНИК%.","."), "."); Для Каждого Элемент Из Идентификаторы Цикл Если Не ОбщегоНазначенияКлиентСервер.ИмяСоответствуетТребованиямИменованияСвойств(Элемент) Тогда Возврат Ложь; @@ -1308,8 +1384,9 @@ Возврат ИмяКоманды; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Обновляет кэш объектов метаданных указанного типа. // @@ -1389,8 +1466,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызовы из модулей ВызовСервера. +#КонецОбласти + +#Область ВызовыИзМодулейВызовСервера // Возвращает описание команды по имени элемента формы. // @@ -1487,8 +1565,9 @@ Возврат Новый ФиксированнаяСтруктура(ОписаниеКоманды); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с объектами метаданных. +#КонецОбласти + +#Область РаботаСОбъектамиМетаданных // Возвращает вид объекта во множественном числе. Функция ВидОбъектаМетаданныхВоМножественномЧисле(Знач Вид) @@ -1536,8 +1615,9 @@ КонецЕсли; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Шаблоны. +#КонецОбласти + +#Область Шаблоны // Шаблон таблицы подключаемых команд. // @@ -1573,6 +1653,7 @@ // * ИмяВФорме - Строка // * ЕстьУсловияВидимости - Булево // * КлючПараметровРазмещения - Строка +// * КомандаПоУмолчанию - Булево // Функция ТаблицаКоманд() Таблица = Новый ТаблицаЗначений; @@ -1612,12 +1693,14 @@ Таблица.Колонки.Добавить("ЕстьУсловияВидимости", Новый ОписаниеТипов("Булево")); Таблица.Колонки.Добавить("КлючПараметровРазмещения", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("УсловияВидимостиПоТипамОбъектов", Новый ОписаниеТипов("Соответствие")); - + Таблица.Колонки.Добавить("КомандаПоУмолчанию", Новый ОписаниеТипов("Булево")); + Возврат Таблица; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочее. +#КонецОбласти + +#Область Прочее // Возвращает полное имя подсистемы. Функция ПолноеИмяПодсистемы() Экспорт @@ -1704,3 +1787,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl index d6732e8c3..863dc9f83 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыВызовСервера/Module.bsl @@ -13,12 +13,36 @@ Возврат ПодключаемыеКоманды.ОписаниеКоманды(ИмяКомандыВФорме, АдресНастроек); КонецФункции -// Проводит анализ массива документов на предмет проведенности и наличия прав на их проведение. -Функция ИнформацияОДокументах(МассивСсылок) Экспорт +Функция ПометкиОсновныхКоманд(Знач Ссылка, Знач КомандыСПометкой) Экспорт + Результат = Новый Структура; - Результат.Вставить("Непроведенные", ОбщегоНазначения.ПроверитьПроведенностьДокументов(МассивСсылок)); - Результат.Вставить("ДоступноПравоПроведения", СтандартныеПодсистемыСервер.ДоступноПравоПроведения(Результат.Непроведенные)); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульУправлениеПечатью.ПриОбновленииПометкиОсновныхКоманд(Ссылка, КомандыСПометкой, Результат); + КонецЕсли; Возврат Результат; + +КонецФункции + +// Проверяет статус проведения переданных документов и возвращает те из них, которые не проведены. +// +// Параметры: +// Документы - Массив из ДокументСсылка - документы, статус проведения которых необходимо проверить. +// +// Возвращаемое значение: +// Структура: +// * НепроведенныеДокументы - Массив из ДокументСсылка +// * ЕстьПравоПроведения - Булево +// +Функция СведенияОПроведенииДокументов(Знач Документы) Экспорт + + Результат = Новый Структура; + Результат.Вставить("НепроведенныеДокументы", + ОбщегоНазначения.ПроверитьПроведенностьДокументов(Документы)); + Результат.Вставить("ЕстьПравоПроведения", + СтандартныеПодсистемыСервер.ДоступноПравоПроведения(Результат.НепроведенныеДокументы)); + Возврат Результат; + КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl index 23494e573..515603e15 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиент/Module.bsl @@ -136,6 +136,26 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Проверяет статус проведения переданных документов и возвращает те из них, которые не проведены. +// +// Параметры: +// Документы - Массив из ДокументСсылка - документы, статус проведения которых необходимо проверить. +// +// Возвращаемое значение: +// Структура: +// * НепроведенныеДокументы - Массив из ДокументСсылка +// * ЕстьПравоПроведения - Булево +// +Функция СведенияОПроведенииДокументов(Знач Документы) Экспорт + + Возврат ПодключаемыеКомандыВызовСервера.СведенияОПроведенииДокументов(Документы); + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Выполняет команду, подключенную к форме. @@ -156,9 +176,9 @@ // Установка расширения для работы с 1С:Предприятием. Если ПараметрыВыполнения.ТребуетсяРаботаСФайлами Тогда ПараметрыВыполнения.ТребуетсяРаботаСФайлами = Ложь; - Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами", ЭтотОбъект, ПараметрыВыполнения); + Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботы1СПредприятия", ЭтотОбъект, ПараметрыВыполнения); ТекстСообщения = НСтр("ru = 'Для продолжения установите расширение для работы с 1С:Предприятием.'"); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Обработчик, ТекстСообщения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Обработчик, ТекстСообщения); Возврат; КонецЕсли; @@ -166,7 +186,8 @@ Если ПараметрыВыполнения.ТребуетсяЗапись Тогда ПараметрыВыполнения.ТребуетсяЗапись = Ложь; Если Источник.Ссылка.Пустая() - Или (ОписаниеКоманды.РежимЗаписи <> "ЗаписыватьТолькоНовые" И ПараметрыВыполнения.Форма.Модифицированность) Тогда + Или (ОписаниеКоманды.РежимЗаписи <> "ЗаписыватьТолькоНовые" И ПараметрыВыполнения.Форма.Модифицированность) + Или ПараметрыВыполнения.ТребуетсяПроведение И Не Источник.Проведен Тогда Кнопки = Новый СписокЗначений; Если ПараметрыВыполнения.ТребуетсяПроведение Тогда @@ -195,22 +216,23 @@ // Проведение документов. Если ПараметрыВыполнения.ТребуетсяПроведение Тогда ПараметрыВыполнения.ТребуетсяПроведение = Ложь; - ИнформацияОДокументах = ПодключаемыеКомандыВызовСервера.ИнформацияОДокументах(ПараметрыВыполнения.МассивСсылок); - Если ИнформацияОДокументах.Непроведенные.Количество() > 0 Тогда - Если ИнформацияОДокументах.ДоступноПравоПроведения Тогда - Если ИнформацияОДокументах.Непроведенные.Количество() = 1 Тогда + ИнформацияОДокументах = СведенияОПроведенииДокументов(ПараметрыВыполнения.МассивСсылок); + Если ИнформацияОДокументах.НепроведенныеДокументы.Количество() > 0 Тогда + Если ИнформацияОДокументах.ЕстьПравоПроведения Тогда + Если ИнформацияОДокументах.НепроведенныеДокументы.Количество() = 1 Тогда ТекстВопроса = НСтр("ru = 'Для выполнения команды предварительно проведите документ. Выполнить проведение документа и продолжить?'"); Иначе ТекстВопроса = НСтр("ru = 'Для выполнения команды предварительно проведите документы. Выполнить проведение документов и продолжить?'"); КонецЕсли; - ПараметрыВыполнения.НепроведенныеДокументы = ИнформацияОДокументах.Непроведенные; - Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтверждениеПроведения", ЭтотОбъект, ПараметрыВыполнения); + ПараметрыВыполнения.НепроведенныеДокументы = ИнформацияОДокументах.НепроведенныеДокументы; + Обработчик = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандыПослеПодтверждениеПроведения", + ЭтотОбъект, ПараметрыВыполнения); Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Провести и продолжить'")); Кнопки.Добавить(КодВозвратаДиалога.Отмена); ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки); Иначе - Если ИнформацияОДокументах.Непроведенные.Количество() = 1 Тогда + Если ИнформацияОДокументах.НепроведенныеДокументы.Количество() = 1 Тогда ТекстПредупреждения = НСтр("ru = 'Для выполнения команды предварительно проведите документ. Недостаточно прав для проведения документа.'"); Иначе ТекстПредупреждения = НСтр("ru = 'Для выполнения команды предварительно проведите документы. Недостаточно прав для проведения документов.'"); @@ -283,7 +305,9 @@ РежимЗаписи = РежимЗаписиДокумента.Запись; Если Контекст.ТребуетсяПроведение Тогда + Контекст.ТребуетсяПроведение = Ложь; РежимЗаписи = РежимЗаписиДокумента.Проведение; + Контекст.Форма.Модифицированность = Истина; КонецЕсли; ПараметрыВыполненияПодключаемойКоманды = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Контекст); // Структура @@ -309,15 +333,13 @@ КонецЕсли; ОчиститьСообщения(); - ДанныеОНепроведенныхДокументах = ОбщегоНазначенияВызовСервера.ПровестиДокументы(Контекст.НепроведенныеДокументы); + ДанныеОНепроведенныхДокументах = ОбщегоНазначенияКлиент.ПровестиДокументы(Контекст.НепроведенныеДокументы); ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2'"); НепроведенныеДокументы = Новый Массив; Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл ОбщегоНазначенияКлиент.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонСообщения, - Строка(ИнформацияОДокументе.Ссылка), - ИнформацияОДокументе.ОписаниеОшибки), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + Строка(ИнформацияОДокументе.Ссылка), ИнформацияОДокументе.ОписаниеОшибки), ИнформацияОДокументе.Ссылка); НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); КонецЦикла; @@ -371,7 +393,7 @@ КонецПроцедуры // Ветка процедуры после установки расширения для работы с 1С:Предприятием. -Процедура ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботыСФайлами(РасширениеРаботыСФайламиПодключено, Контекст) Экспорт +Процедура ПродолжитьВыполнениеКомандыПослеУстановкиРасширенияРаботы1СПредприятия(РасширениеРаботыСФайламиПодключено, Контекст) Экспорт Если Не РасширениеРаботыСФайламиПодключено Тогда Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl index 1b11d16c7..92f3e74a9 100644 --- a/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПодключаемыеКомандыКлиентСервер/Module.bsl @@ -244,6 +244,8 @@ КонецЕсли; КонецЦикла; + ПриОбновленииКомандСПометкой(Форма, Источник, ПараметрыКлиента.КомандыСПометкой); + Для каждого ОписаниеКоманды Из ПараметрыКлиента.КомандыСПометкой Цикл Если ЗначениеЗаполнено(ИмяИсточника) И ОписаниеКоманды.ПрефиксКоманд <> ИмяИсточника Тогда Продолжить; @@ -252,7 +254,7 @@ Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда ВыражениеВычисленияЗначениеПометки = СтрЗаменить(ОписаниеКоманды.ЗначениеПометки, "%ИСТОЧНИК%", Источник.Имя); Иначе - ВыражениеВычисленияЗначениеПометки = ОписаниеКоманды.ЗначениеПометки; + ВыражениеВычисленияЗначениеПометки = СтрЗаменить(ОписаниеКоманды.ЗначениеПометки, "[""%ИСТОЧНИК%""]", ""); КонецЕсли; Форма.Элементы[ОписаниеКоманды.ИмяВФорме].Пометка = Вычислить(ВыражениеВычисленияЗначениеПометки); // АПК:488 Исполняемый код безопасен. @@ -273,6 +275,11 @@ СкрыватьКомандуРазблокировкиОбъекта = СкрыватьКомандуРазблокировкиОбъекта(Форма); Для Каждого Команда Из КраткиеСведенияОПодменю.КомандыСУсловиямиВидимости Цикл + + Если Команда.КомандаПоУмолчанию Тогда + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ИмяИсточника) И Команда.ПрефиксКоманд <> ИмяИсточника Тогда Продолжить; КонецЕсли; @@ -318,6 +325,26 @@ КонецЦикла; КонецПроцедуры +Процедура ПриОбновленииКомандСПометкой(Форма, Источник, КомандыСПометкой) + + Если КомандыСПометкой.Количество() = 0 Тогда + Возврат + КонецЕсли; + + ТипИсточника = ТипЗнч(Источник); + + СсылкаОбъектаФормы = Неопределено; + Если ТипИсточника = Тип("ДанныеФормыСтруктура") Тогда + СсылкаОбъектаФормы = Источник.Ссылка; + КонецЕсли; + + Если ЗначениеЗаполнено(СсылкаОбъектаФормы) Тогда + Результат = ПодключаемыеКомандыВызовСервера.ПометкиОсновныхКоманд(СсылкаОбъектаФормы, КомандыСПометкой); + ЗаполнитьЗначенияСвойств(Форма, Результат); + КонецЕсли; + +КонецПроцедуры + Функция ВладелецКомандыПоИмениКоманды(ИмяКоманды, Форма) Экспорт Результат = Неопределено; diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl index 5b7c779bf..7c95f4ef1 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl @@ -292,8 +292,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт @@ -357,6 +356,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // см. Обработка.ПоискИУдалениеДублей. @@ -737,7 +738,7 @@ Для каждого КлючевойРеквизит Из ОписаниеПодчиненногоОбъекта.КлючевыеРеквизиты Цикл - Значение = "ОБЪЕДИНИТЬ" // @query-part + Значение = "ОБЪЕДИНИТЬ" + СтрЗаменить(" ВЫБРАТЬ | Таб.Ссылка КАК Ссылка, | &НеИзменяемыеРеквизиты, @@ -749,7 +750,7 @@ | (ВЫБРАТЬ | Таб.Оригинал | ИЗ - | ТаблицаЗамен КАК Таб)", "&КлючевойРеквизит","Таб." + КлючевойРеквизит); + | ТаблицаЗамен КАК Таб)", "&КлючевойРеквизит","Таб." + КлючевойРеквизит); // @query-part-1 ЗначениеКлючей = ЗначениеКлючей + Значение; Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Таб.%1 = Замена.%1 ", КлючевойРеквизит); @@ -912,22 +913,16 @@ Процедура ВыполнитьПоискПоПрикладнымПравилам(Знач ИспользуемыеСвязи, Знач НеподобранныеЗамены, Знач ОписаниеПодчиненногоОбъекта, Знач ПарыЗамен) - Перем ПараметрыМетодаПоиска, Сч; - - Для Сч = 0 По НеподобранныеЗамены.Количество() - 1 Цикл - - НеподобранныеЗамены[Сч] = НовыйПараметрыЗамены( - НеподобранныеЗамены[Сч], - ОписаниеПодчиненногоОбъекта, - ИспользуемыеСвязи); - + Для Индекс = 0 По НеподобранныеЗамены.Количество() - 1 Цикл + НеподобранныеЗамены[Индекс] = НовыйПараметрыЗамены(НеподобранныеЗамены[Индекс], + ОписаниеПодчиненногоОбъекта, ИспользуемыеСвязи); КонецЦикла; ПараметрыМетодаПоиска = Новый Массив; ПараметрыМетодаПоиска.Добавить(ПарыЗамен); ПараметрыМетодаПоиска.Добавить(НеподобранныеЗамены); ОбщегоНазначения.ВыполнитьМетодКонфигурации( - ОписаниеПодчиненногоОбъекта.ИмяМодуляМетодаПоиска+".ПриПоискеЗаменыСсылок", + ОписаниеПодчиненногоОбъекта.ИмяМодуляМетодаПоиска + ".ПриПоискеЗаменыСсылок", ПараметрыМетодаПоиска); КонецПроцедуры diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 6476f33d5..31cfddc3c 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -201,6 +201,7 @@ Если Не ПустаяСтрока(ТекстОшибки) И СтрНайти(ВРег(ТекстОшибки), ВРег("Удаленный узел не прошел проверку")) > 0 Тогда // АПК:1297 Нелокализуемый фрагмент информации об ошибке в исключении. + Описание.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Необходимо установить корневой и промежуточные сертификаты к %1 на компьютере <%2>.'"), СтруктураСсылки.ИмяСервера, @@ -220,7 +221,7 @@ Если ОбщегоНазначения.РазделениеВключено() Тогда Описание.Добавить(НСтр("ru = 'Обратитесь к администратору.'")); - + ПолучениеФайловИзИнтернетаЛокализация.ПриФормированииСообщенияОбИзвестнойПроблеме(Описание, ТекстОшибки); ОписаниеОшибки = СтрСоединить(Описание, Символы.ПС); @@ -230,6 +231,7 @@ Результат.Вставить("ЖурналДиагностики", ""); Возврат Результат; + КонецЕсли; Журнал = Новый Массив; @@ -256,15 +258,11 @@ НСтр("ru = 'Диагностика соединения не выполнена, т.к. настроен прокси-сервер. |Обратитесь к администратору.'")); - Иначе + Иначе АдресСервераРесурса = СтруктураСсылки.Хост; АдресСервераКонтрольнойПроверки = "google.com"; - - Если Метаданные.ОбщиеМодули.Найти("ПолучениеФайловИзИнтернетаСлужебныйЛокализация") <> Неопределено Тогда - МодульПолучениеФайловИзИнтернетаСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаСлужебныйЛокализация"); - АдресСервераКонтрольнойПроверки = МодульПолучениеФайловИзИнтернетаСлужебныйЛокализация.АдресСервераКонтрольнойПроверки(); - КонецЕсли; + ПолучениеФайловИзИнтернетаЛокализация.ПриПолученииАдресаСервераКонтрольнойПроверки(АдресСервераКонтрольнойПроверки); Если ПроверятьДоставкуПакетов Тогда РезультатДоступностиРесурса = ПолучениеФайловИзИнтернетаСлужебный.ПроверитьДоступностьСервера(АдресСервераРесурса); diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 7d42ac65d..63a062e42 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -22,6 +22,8 @@ // - ЗащищенноеСоединениеOpenSSL // - Неопределено - в случае, если защищенное соединение не используется. // * ПроверятьДоставкуПакетовПриОшибке - Булево - при ошибке обращения к URL включать в диагностику команду PING. +// * ПроверятьДоступКИнтернетСервисам - Булево - необязательный параметр, по умолчанию Истина - выполняется проверка +// разрешения доступа к Интернет-сервисам из приложения. // // Параметры только для http (https) соединения: // * Заголовки - Соответствие - см. в синтакс-помощнике описание параметра Заголовки объекта HTTPЗапрос. @@ -47,6 +49,7 @@ ПараметрыПолучения.Вставить("ИспользоватьАутентификациюОС", Ложь); ПараметрыПолучения.Вставить("УровеньИспользованияЗащищенногоСоединения", Неопределено); ПараметрыПолучения.Вставить("ПроверятьДоставкуПакетовПриОшибке", Истина); + ПараметрыПолучения.Вставить("ПроверятьДоступКИнтернетСервисам", Истина); Возврат ПараметрыПолучения; diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/Module.bsl index dc26c4397..a8942fc31 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/Module.bsl @@ -8,15 +8,27 @@ #Область ПрограммныйИнтерфейс -// Вызывается при проверке доступности Интернета и позволяет указать ссылку, -// содержащую подробную информацию об известной проблеме. +// Вызывается при проверке доступности Интернета и позволяет указать контрольный адрес. // // Параметры: -// Описание - Массив из Строка - Краткое описание ошибки при проверке доступности Интернета. -// ТекстОшибки - см. ПолучениеФайловИзИнтернета.ДиагностикаСоединения -// РазделениеВключено - см. ОбщегоНазначения.РазделениеВключено +// АдресаСервера - Строка - установить адрес сервера для контрольной проверки подключения. +// По умолчанию, "google.co)m". // -Процедура ПриФормированииСообщенияОбИзвестнойПроблеме(Описание, ТекстОшибки, РазделениеВключено = Ложь) Экспорт +Процедура ПриПолученииАдресаСервераКонтрольнойПроверки(АдресаСервера) Экспорт + + // Локализация + АдресаСервера = "ya.ru"; + // Конец Локализация + +КонецПроцедуры + +// Вызывается при проверке доступности Интернета и позволяет дополнить подробную информацию об известной проблеме. +// +// Параметры: +// Описание - Массив из Строка - краткое описание ошибки при проверке доступности Интернета. +// ТекстОшибки - см. ПолучениеФайловИзИнтернета.ДиагностикаСоединения +// +Процедура ПриФормированииСообщенияОбИзвестнойПроблеме(Описание, ТекстОшибки) Экспорт Если СтрНайти(ВРег(ТекстОшибки), ВРег("Удаленный узел не прошел проверку")) > 0 Тогда // АПК:1297 Нелокализуемый фрагмент информации об ошибке в исключении. // Локализация @@ -26,4 +38,5 @@ КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/ПолучениеФайловИзИнтернетаЛокализация.mdo b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/ПолучениеФайловИзИнтернетаЛокализация.mdo index f1b9d0143..bc0c663c7 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/ПолучениеФайловИзИнтернетаЛокализация.mdo +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаЛокализация/ПолучениеФайловИзИнтернетаЛокализация.mdo @@ -1,5 +1,5 @@ - + ПолучениеФайловИзИнтернетаЛокализация ru diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl index a87332ffd..0680b8b88 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаСлужебный/Module.bsl @@ -72,7 +72,7 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); - Константы.НастройкаПроксиСервера.Установить(Новый ХранилищеЗначения(Настройки)); + Константы.НастройкаПроксиСервера.Установить(Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(9))); КонецПроцедуры @@ -184,6 +184,19 @@ Функция ПолучитьФайлИзИнтернет(Знач URL, Знач НастройкаСохранения, Знач НастройкаСоединения, Знач НастройкиПрокси, Знач ЗаписыватьОшибку, Перенаправления = Неопределено) + Если НастройкаСоединения.ПроверятьДоступКИнтернетСервисам И Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить файл %1 по причине: + |%2'"), URL, ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения()); + + Если ЗаписыватьОшибку Тогда + ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки); + КонецЕсли; + Возврат РезультатПолученияФайла(Ложь, ТекстОшибки); + + КонецЕсли; + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); Сервер = СтруктураURI.Хост; diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index ab707c64b..02152e5a7 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Основные процедуры и функции. +#Область ОсновныеПроцедурыИФункции // Возвращает текущего пользователя или текущего внешнего пользователя, // в зависимости от того, кто выполнил вход в сеанс. @@ -382,8 +381,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые в работе элементов управляемых форм. +#КонецОбласти + +#Область ПроцедурыИФункцииИспользуемыеВРаботеЭлементовУправляемыхФорм // Возвращает список пользователей, групп пользователей, внешних пользователей и // групп внешних пользователей. @@ -656,8 +656,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые при обновлении информационной базы. +#КонецОбласти + +#Область ПроцедурыИФункцииИспользуемыеПриОбновленииИнформационнойБазы // Используется при обновлении и начальном заполнении информационной базы. // 1) Создает первого администратора и сопоставляет его с новым или существующим @@ -850,8 +851,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с пользователями информационной базы. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСПользователямиИнформационнойБазы // Возвращает текстовое представление "<Не указан>" для случаев, когда пользователь не указан или не выбран. // См. также Пользователи.СсылкаНеуказанногоПользователя. @@ -1336,7 +1338,7 @@ // КопируемыеСвойства - Строка - список свойств через запятую, которые нужно скопировать (без префикса). // ИсключаемыеСвойства - Строка - список свойств через запятую, которые не нужно копировать (без префикса). // ПрефиксСвойств - Строка - начальное имя для Источника или Приемника типа НЕ Структура. -// - Соответствие: +// - Соответствие из КлючИЗначение: // * Ключ - имя свойства без префикса // * Значение - полное имя свойства с префиксом // @@ -1552,17 +1554,15 @@ Если СтрДлина(ЗначениеСвойства) > 64 Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка записи пользователя информационной базы - |Имя (для входа): ""%1"" - |превышает длину 64 символа.'"), + НСтр("ru = 'Невозможно записать пользователя информационной базы, т.к. + |имя (для входа) превышает длину 64 символа: ""%1"".'"), ЗначениеСвойства); ВызватьИсключение ТекстОшибки; ИначеЕсли СтрНайти(ЗначениеСвойства, ":") > 0 Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка записи пользователя информационной базы - |Имя (для входа): ""%1"" - |содержит запрещенный символ "":"".'"), + НСтр("ru = 'Невозможно записать пользователя информационной базы, т.к. + |имя (для входа) содержит запрещенный символ "":"": ""%1"".'"), ЗначениеСвойства); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -2257,8 +2257,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Определяет, предусмотрено ли в конфигурации использование настроек входа, общих для пользователей: // сложность пароля, смена пароля, ограничения срока работы в программе и другие. @@ -2435,7 +2436,7 @@ Настройки[СохраняемаяНастройка.Ключ] = СохраняемаяНастройка.Значение; КонецЦикла; - Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода)); + Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода, Новый СжатиеДанных(9))); Если Не ОбщиеСохраняемыеНастройки.Свойство("ОбновитьТолькоКонстанту") Тогда ПользователиСлужебный.ОбновитьОбщуюПолитикуПаролей(Настройки); @@ -2549,7 +2550,7 @@ Настройки.ПросрочкаРаботыВПрограммеДатаВключения = НачалоДня(ТекущаяДатаСеанса()); КонецЕсли; - Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода)); + Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода, Новый СжатиеДанных(9))); Если Не СохраняемыеНастройки.Свойство("ОбновитьТолькоКонстанту") Тогда Если ДляВнешнихПользователей Тогда @@ -2708,6 +2709,8 @@ КонецФункции +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Больше не требуется, так как использованные пароли хранятся в пользователе информационной базы и @@ -2832,4 +2835,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index f5ce5f3c3..2126f4399 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -126,8 +126,12 @@ Если ЗначениеЗаполнено(НайденныйПользователь) Тогда // ПользовательИБ найден в справочнике. - Если ПриНачалеРаботыСистемы И РолиАдминистратораДоступны() Тогда - ИнтеграцияПодсистемБСП.ПриСозданииАдминистратора(НайденныйПользователь, + Если ПриНачалеРаботыСистемы + И РолиАдминистратораДоступны() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриСозданииИлиАвторизацииАдминистратора(НайденныйПользователь, НСтр("ru = 'При авторизации у пользователя найдены роли администратора.'")); КонецЕсли; Возврат РезультатУстановкиПараметровСеанса(РегистрироватьВЖурнале); @@ -408,8 +412,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей в управляемой форме. +#Область ДляРаботыИнтерфейсаРолейВУправляемойФорме // Только для внутреннего использования. // @@ -487,13 +490,14 @@ |Неверное значение параметра Действие: ""%2"".'"), "ПользователиСлужебный.ОбработатьИнтерфейсРолей", Действие); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции общего назначения. +#КонецОбласти + +#Область ПроцедурыИФункцииОбщегоНазначения // Возвращает имена и синонимы ролей. // @@ -502,9 +506,12 @@ // * Массив - ФиксированныйМассив из Строка - массив имен ролей. // * Соответствие - ФиксированноеСоответствие из КлючИЗначение: // ** Ключ - Строка - имя роли. -// ** Значение - Строка - синоним роли. +// ** Значение - Строка - представление роли. // * Таблица - ХранилищеЗначения из ТаблицаЗначений: // ** Имя - Строка - имя роли. +// * Список - ХранилищеЗначения из СписокЗначений: +// ** Значение - Строка - имя роли. +// ** Представление - Строка - представление роли. // Функция ВсеРоли() Экспорт @@ -734,11 +741,12 @@ Назначение = Форма.Объект.Назначение; - Если Не ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - Назначение.Очистить(); - НоваяСтрока = Назначение.Добавить(); + Если Не ВнешниеПользователи.ИспользоватьВнешнихПользователей() + И ( Назначение.Количество() = 1 + И Назначение[0].ТипПользователей = Справочники.Пользователи.ПустаяСсылка() + Или Назначение.Количество() = 0) Тогда + Форма.Элементы.ВыбратьНазначение.Родитель.Видимость = Ложь; - НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; Если ДобавлятьПользователей И Назначение.Количество() = 0 Тогда @@ -959,7 +967,7 @@ КонецЕсли; Если ЗначениеЗаполнено(ТекстОшибки) Тогда - ВызватьИсключение ЗаголовокОшибки + ТекстОшибки; + ВызватьИсключение(ЗаголовокОшибки + ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецПроцедуры @@ -1463,8 +1471,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Универсальные процедуры и функции. +#КонецОбласти + +#Область УниверсальныеПроцедурыИФункции // Возвращает ссылку старого объекта или ссылку нового объекта. // @@ -1532,8 +1541,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа компоновщиком настроек +#КонецОбласти + +#Область РаботаКомпоновщикомНастроек // Установка пользовательской настройки параметра компоновки данных. // Если пользовательская настройка не предусмотрена, устанавливается значение параметра. @@ -1635,8 +1645,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительная функциональность для обмена данными. +#КонецОбласти + +#Область ДополнительнаяФункциональностьДляОбменаДанными // Регистрирует указанный массив данных тех типов, которые допустимы // с соответствии с указанным параметром вида ссылок. @@ -1772,8 +1783,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ, ЭтоВызовПередНачаломРаботыСистемы) Экспорт @@ -2668,6 +2680,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -2724,8 +2738,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия // Вызывает обновление представления внешнего пользователя при изменении // представления его объекта авторизации, а также помечает, как недействительного, @@ -2763,8 +2776,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с настройками входа пользователей. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСНастройкамиВходаПользователей // Возвращаемое значение: // Структура: @@ -3473,8 +3487,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с паролем. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСПаролем // Создает новый пароль, соответствующий заданным правилам проверки сложности. // Для облегчения запоминания, пароль формируется из слогов (согласная-гласная). @@ -4111,7 +4126,7 @@ // полным именам свойств пользователя ИБ в форме с префиксом. // // Возвращаемое значение: -// Соответствие +// Соответствие из КлючИЗначение: // * Ключ - имя свойства без префикса // * Значение - полное имя свойства с префиксом // @@ -4142,8 +4157,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с пользователями. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСПользователями // Только для внутреннего использования. // @@ -4618,7 +4634,7 @@ НСтр("ru = 'Ошибка при записи пользователя ""%1"". |В параметре %2 не указано свойство %3.'"), ПользовательОбъект.Ссылка, "ОписаниеПользователяИБ", "Действие"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ОписаниеПользователяИБ.Действие <> "Записать" @@ -4632,7 +4648,7 @@ "ОписаниеПользователяИБ", ОписаниеПользователяИБ.Действие, "Действие"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ПараметрыОбработки.Вставить("Действие", ОписаниеПользователяИБ.Действие); @@ -4654,7 +4670,7 @@ |Нельзя сопоставить пользователя ИБ с пользователем в справочнике, |с которым уже сопоставлен другой пользователем ИБ.'"), ПользовательОбъект.Наименование); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; НайденныйПользователь = Неопределено; @@ -4671,7 +4687,7 @@ |""%2"".'"), НайденныйПользователь, ПользовательОбъект.Наименование); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Не УровеньДоступа.ПолныеПрава Тогда @@ -6270,8 +6286,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с внешними пользователями. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСВнешнимиПользователями // Обновляет состав группы внешних пользователей с признаком ВсеОбъектыАвторизации. // @@ -6826,8 +6843,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с настройками пользователя информационной базы. +#КонецОбласти + +#Область РаботаСНастройкамиПользователяИнформационнойБазы // Копирует настройки от пользователя источника пользователю приемнику. При значении // параметра Переносить = Истина, настройки у пользователя источника удаляются. @@ -6860,8 +6878,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительная функциональность для обмена данными. +#КонецОбласти + +#Область ДополнительнаяФункциональностьДляОбменаДанными // Вызывается для заполнения видов ссылок, используемых // в процедуре ЗарегистрироватьСсылки и функции ЗарегистрированныеСсылки. @@ -6943,8 +6962,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции перемещения пользователей между группами. +#КонецОбласти + +#Область ПроцедурыИФункцииПеремещенияПользователейМеждуГруппами // Перемещает пользователя из одной группы в другую. // @@ -7303,8 +7323,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Восстановление паролей пользователей +#КонецОбласти + +#Область ВосстановлениеПаролейПользователей Процедура ЗаполнитьПочтуДляВосстановленияПароляУПользователейВФоне(ДополнительныеПараметры, АдресВоВременномХранилище) Экспорт @@ -7913,8 +7934,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Универсальные процедуры и функции. +#КонецОбласти + +#Область УниверсальныеПроцедурыИФункции // Возвращает несовпадающие значения в колонке таблиц значений. // @@ -8320,8 +8342,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Вызывается при переходе на версию конфигурации 2.1.3.16. Процедура ОбновитьПредопределенныеВидыКонтактнойИнформацииПользователей() Экспорт @@ -8332,14 +8355,14 @@ МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ПараметрыВида = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации("АдресЭлектроннойПочты"); + ПараметрыВида = МодульУправлениеКонтактнойИнформацией.ПараметрыАдресаЭлектроннойПочты(); ПараметрыВида.Вид = "EmailПользователя"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.РазрешитьВводНесколькихЗначений = Истина; ПараметрыВида.Порядок = 1; МодульУправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); - ПараметрыВида = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации("Телефон"); + ПараметрыВида = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); ПараметрыВида.Вид = "ТелефонПользователя"; ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; ПараметрыВида.РазрешитьВводНесколькихЗначений = Истина; @@ -8462,7 +8485,7 @@ ПараметрыАдминистрированияИБ.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина); КонецЕсли; ПараметрыАдминистрированияИБ.Удалить("РазрешеноОткрытиеВнешнихОтчетовИОбработок"); - Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(ПараметрыАдминистрированияИБ)); + Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(ПараметрыАдминистрированияИБ, Новый СжатиеДанных(9))); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -8479,8 +8502,9 @@ РегистрыСведений.СведенияОПользователях.ОбновитьДанныеРегистра(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с настройками пользователей. +#КонецОбласти + +#Область РаботаСНастройкамиПользователей // Вызывается из обработки НастройкиПользователей и формирует // список настроек пользователей. @@ -8510,8 +8534,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие пользовательские настройки. +#КонецОбласти + +#Область ПрочиеПользовательскиеНастройки // См. ПользователиПереопределяемый.ПриПолученииПрочихНастроек Процедура ПриПолученииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт @@ -8555,8 +8580,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // При первом запуске подчиненного узла очищает идентификаторы // пользователей ИБ, скопированные при создании начального образа. @@ -9748,8 +9774,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры используемые при обмене данными РИБ. +#Область ПроцедурыИспользуемыеПриОбменеДаннымиРИБ // Для процедур ПриОтправкеДанныхГлавному, ПриОтправкеДанныхПодчиненному, // ПриПолученииДанныхОтГлавного, ПриПолученииДанныхОтПодчиненного. @@ -10190,8 +10215,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры обработки настроек входа. +#КонецОбласти + +#Область ПроцедурыОбработкиНастроекВхода // Для функции АвторизоватьТекущегоПользователяПриВходе. // Обновляет дату последней активности и проверяет необходимость смены пароля. @@ -10608,8 +10634,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для процедуры НачатьОбработкуПользователяИБ. +#КонецОбласти + +#Область ДляПроцедурыНачатьОбработкуПользователяИБ Процедура ЗапомнитьСвойстваПользователя(ПользовательОбъект, ПараметрыОбработки) @@ -10977,8 +11004,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для процедуры ЗавершитьОбработкуПользователяИБ. +#КонецОбласти + +#Область ДляПроцедурыЗавершитьОбработкуПользователяИБ Процедура ПроверитьИзмененияРеквизитовПользователя(ПользовательОбъект, ПараметрыОбработки) @@ -10993,7 +11021,7 @@ НСтр("ru = 'Ошибка при записи пользователя ""%1"". |Реквизит Служебный не допускается изменять в подписках на события.'"), ПользовательОбъект.Ссылка); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если БлокируемыеРеквизиты.Подготовлен <> ПользовательОбъект.Подготовлен Тогда @@ -11001,7 +11029,7 @@ НСтр("ru = 'Ошибка при записи пользователя ""%1"". |Реквизит Подготовлен не допускается изменять в подписках на события.'"), ПользовательОбъект.Ссылка); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если АвтоРеквизиты.ИдентификаторПользователяИБ <> ПользовательОбъект.ИдентификаторПользователяИБ Тогда @@ -11011,7 +11039,7 @@ |Обновление реквизита выполняется автоматически.'"), ПользовательОбъект.Ссылка, "ИдентификаторПользователяИБ"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Не ОбщегоНазначения.ДанныеСовпадают(АвтоРеквизиты.УдалитьСвойстваПользователяИБ, @@ -11023,7 +11051,7 @@ |Обновление реквизита выполняется автоматически.'"), ПользовательОбъект.Ссылка, "УдалитьСвойстваПользователяИБ"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -11033,8 +11061,7 @@ И Пользователи.ВходВПрограммуРазрешен(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя помечать на удаление пользователя, которому разрешен вход в приложение.'"), + НСтр("ru = 'Невозможно пометить на удаление пользователя ""%1"", т.к. ему разрешен вход в приложение.'"), ПользовательОбъект.Ссылка); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -11044,8 +11071,7 @@ И Пользователи.ВходВПрограммуРазрешен(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя пометить недействительным пользователя, которому разрешен вход в приложение.'"), + НСтр("ru = 'Невозможно пометить недействительным пользователя ""%1"", т.к. ему разрешен вход в приложение.'"), ПользовательОбъект.Ссылка); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -11055,8 +11081,7 @@ И Пользователи.ВходВПрограммуРазрешен(ПользовательОбъект.ИдентификаторПользователяИБ) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи пользователя ""%1"". - |Нельзя пометить подготовленным пользователя, которому разрешен вход в приложение.'"), + НСтр("ru = 'Невозможно пометить подготовленным пользователя ""%1"", т.к. ему разрешен вход в приложение.'"), ПользовательОбъект.Ссылка); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -11333,8 +11358,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для процедуры ОбработатьИнтерфейсРолей. +#КонецОбласти + +#Область ДляПроцедурыОбработатьИнтерфейсРолей // Заполняет коллекцию ролей. // @@ -12000,4 +12026,8 @@ КонецФункции +#КонецОбласти + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index a00649ced..c06ad1946 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -586,8 +586,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистемы БСП "РаботаВМоделиСервиса" +#Область ОбработчикиСобытийПодсистемыБСПРаботаВМоделиСервиса // См. ИнтеграцияПодсистемБСП.ПриОпределенииПсевдонимаПользователя Процедура ПриОпределенииПсевдонимаПользователя(ИдентификаторПользователя, Псевдоним) Экспорт @@ -669,6 +668,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиПодписокНаСобытия Процедура ОбработкаПолученияФормыПользователя(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт @@ -1361,4 +1362,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index e0a70c6cf..246d58feb 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -46,8 +46,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей в управляемой форме. +#Область ДляРаботыИнтерфейсаРолейВУправляемойФорме // Только для внутреннего использования. // @@ -142,8 +141,9 @@ ИнформироватьОПерезапускеПриложения(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы. Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт @@ -248,6 +248,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции /////////////////////////////////////////////////////////////////////////////// @@ -749,4 +751,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index 079b431ba..176365e0f 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -212,9 +212,9 @@ Функция ТекущийПользователь(АвторизованныйПользователь) Экспорт Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.Пользователи") Тогда - ВызватьИсключение - НСтр("ru = 'Невозможно получить текущего пользователя - |в сеансе внешнего пользователя.'"); + ТекстОшибки = НСтр("ru = 'Невозможно получить текущего пользователя + |в сеансе внешнего пользователя.'"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Возврат АвторизованныйПользователь; @@ -225,9 +225,9 @@ Функция ТекущийВнешнийПользователь(АвторизованныйПользователь) Экспорт Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда - ВызватьИсключение - НСтр("ru = 'Невозможно получить текущего внешнего пользователя - |в сеансе пользователя.'"); + ТекстОшибки = НСтр("ru = 'Невозможно получить текущего внешнего пользователя + |в сеансе пользователя.'"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Возврат АвторизованныйПользователь; diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 0bf068d63..23c2dddac 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -13,22 +13,26 @@ Массив = Новый Массив; Соответствие = Новый Соответствие; + Список = Новый СписокЗначений; Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(256))); Для каждого Роль Из Метаданные.Роли Цикл ИмяРоли = Роль.Имя; + ПредставлениеРоли = Роль.Представление(); Массив.Добавить(ИмяРоли); - Соответствие.Вставить(ИмяРоли, Роль.Синоним); + Соответствие.Вставить(ИмяРоли, ПредставлениеРоли); Таблица.Добавить().Имя = ИмяРоли; + Список.Добавить(ИмяРоли, ПредставлениеРоли); КонецЦикла; ВсеРоли = Новый Структура; ВсеРоли.Вставить("Массив", Новый ФиксированныйМассив(Массив)); ВсеРоли.Вставить("Соответствие", Новый ФиксированноеСоответствие(Соответствие)); - ВсеРоли.Вставить("Таблица", Новый ХранилищеЗначения(Таблица)); + ВсеРоли.Вставить("Таблица", Новый ХранилищеЗначения(Таблица, Новый СжатиеДанных(9))); + ВсеРоли.Вставить("Список", Новый ХранилищеЗначения(Список, Новый СжатиеДанных(9))); Возврат ОбщегоНазначения.ФиксированныеДанные(ВсеРоли, Ложь); @@ -357,8 +361,7 @@ КонецЦикла; Дерево.Строки.Сортировать("ЭтоРоль Убыв, Синоним Возр", Истина); - - Возврат Новый ХранилищеЗначения(Дерево); + Возврат Новый ХранилищеЗначения(Дерево, Новый СжатиеДанных(9)); КонецФункции @@ -492,8 +495,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы, НедоступныеРоли, ВсеРоли = Неопределено) @@ -562,9 +564,11 @@ "ДляПользователей", "ДляВнешнихПользователей", "СовместноДляПользователейИВнешнихПользователей"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl index 1b0ccb408..ca2d1c8fe 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСлужебный/Module.bsl @@ -92,8 +92,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Возвращает признак изменения организации или даты объекта. // @@ -302,21 +301,17 @@ Если Характеристики.ДлинаКода = 0 И Характеристики.ДлинаНомера = 0 Тогда Если Не РежимДиагностики Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка внедрения подсистемы ""%1"" для объекта метаданных ""%2"".'"), Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.ПрефиксацияОбъектов, ПолноеИмяОбъекта); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; + ИначеЕсли ОписаниеОбъекта.ЭтоСправочник Или ОписаниеОбъекта.ЭтоПланВидовХарактеристик Тогда + ОписаниеОбъекта.ЕстьКод = Истина; Иначе - - Если ОписаниеОбъекта.ЭтоСправочник Или ОписаниеОбъекта.ЭтоПланВидовХарактеристик Тогда - ОписаниеОбъекта.ЕстьКод = Истина; - Иначе - ОписаниеОбъекта.ЕстьНомер = Истина; - КонецЕсли; - + ОписаниеОбъекта.ЕстьНомер = Истина; КонецЕсли; // Определение периодичности номера для документа и бизнес-процесса. @@ -346,8 +341,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +#КонецОбласти + +#Область ЛокальныеСлужебныеПроцедурыИФункции // Определяет необходимость выполнения обработчика события "ПослеЗагрузкиДанных" при обмене в РИБ. // @@ -566,4 +562,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index c21ebea3b..e2e0e72cf 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -55,8 +55,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для справочников +#Область ДляСправочников // Выполняет проверку модифицированности реквизита Организация элемента справочника. // Если реквизит Организация изменен, то Код элемента обнуляется. @@ -72,8 +71,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для бизнес-процессов +#КонецОбласти + +#Область ДляБизнесПроцессов // Выполняет проверку модифицированности Даты бизнес процесса. // Если дата не входит в предыдущий период, то номер бизнес процесса обнуляется. @@ -103,8 +103,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для документов +#КонецОбласти + +#Область ДляДокументов // Выполняет проверку модифицированности Даты документа. // Если дата не входит в предыдущий период, то номер документа обнуляется. @@ -138,8 +139,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Получение префикса +#КонецОбласти + +#Область ПолучениеПрефикса // Возвращает префикс этой информационной базы. // @@ -182,6 +184,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура УстановитьПрефикс(Источник, Префикс, УстановитьПрефиксИнформационнойБазы, УстановитьПрефиксОрганизации) @@ -353,4 +357,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ 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..65b5696df --- /dev/null +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияПереопределяемый/Module.bsl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..a8205e7ad --- /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 2a52d0f06..73b53f32b 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -8,9 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Функции-конструкторы разрешений. -// +#Область ФункцииКонструкторыРазрешений // Возвращает внутреннее описание разрешения на использование каталога файловой системы. // Для передачи в качестве параметра в функции: @@ -253,9 +251,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции-конструкторы запросов на использование внешних ресурсов. -// +#КонецОбласти + +#Область ФункцииКонструкторыЗапросовНаИспользованиеВнешнихРесурсов // Создает запрос на использование внешних ресурсов. // @@ -390,9 +388,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочее -// +#КонецОбласти + +#Область Прочее // Создает запросы на обновление разрешений конфигурации. // @@ -428,6 +426,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс Функция ИспользуютсяПрофилиБезопасности() Экспорт @@ -527,5 +527,4 @@ КонецФункции -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index fb738cd4d..1be014b05 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -34,9 +34,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Внешние модули -// +#Область ВнешниеМодули // Возвращает режим подключения внешнего модуля. // @@ -54,9 +52,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Использование профилей безопасности. -// +#КонецОбласти + +#Область ИспользованиеПрофилейБезопасности // Возвращает URI пространства имен XDTO-пакета, который используется для описания разрешений // в профилях безопасности. @@ -70,9 +68,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Создание запросов разрешений. -// +#КонецОбласти + +#Область СозданиеЗапросовРазрешений // Создает запросы на использование внешних ресурсов для внешнего модуля. // @@ -118,11 +116,11 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Использование профилей безопасности. -// +#КонецОбласти + +#Область ИспользованиеПрофилейБезопасности + -//////////////////////////////////////////////////////////////////////////////// // Преобразование ссылок к виду Тип+Идентификатор для хранения в регистрах // разрешений. // @@ -162,9 +160,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Применение запросов разрешений на использование внешних ресурсов. -// +#КонецОбласти + +#Область ПрименениеЗапросовРазрешенийНаИспользованиеВнешнихРесурсов Функция ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля, Знач ТипВладельца, Знач ИдентификаторВладельца, Знач Разрешения) Экспорт @@ -200,8 +198,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске. Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, ДоОбновленияПараметровРаботыПрограммы = Ложь) Экспорт @@ -249,6 +248,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Создает запрос на создание профиля безопасности для внешнего модуля. @@ -286,9 +287,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Использование профилей безопасности. -// +#Область ИспользованиеПрофилейБезопасности // Проверяет возможность использования профилей безопасности для текущей информационной базы. // @@ -433,18 +432,13 @@ ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Тип); Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); - - Если ПустаяСтрока(Идентификатор) Тогда - Возврат Менеджер.ПустаяСсылка(); - Иначе - Возврат Менеджер.ПолучитьСсылку(Идентификатор); - КонецЕсли; + Возврат ?(ПустаяСтрока(Идентификатор), Менеджер.ПустаяСсылка(), Менеджер.ПолучитьСсылку(Идентификатор)); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Создание запросов разрешений. -// +#КонецОбласти + +#Область СозданиеЗапросовРазрешений // Создает запрос на изменение разрешений использования внешних ресурсов. // Только для внутреннего использования. @@ -571,9 +565,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее. -// +#КонецОбласти + +#Область Прочее // Возвращает программный модуль, выполняющий функции менеджера внешнего модуля. // @@ -655,3 +649,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl index 8c5ec4ec5..3a0b0655e 100644 --- a/SSL/src/CommonModules/РаботаСАдресами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресами/Module.bsl @@ -791,7 +791,10 @@ КонецЕсли; - Возврат УправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзJSONВXML(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); + Результат = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнуюИнформациюИзJSONВXML(Адрес, Результат, Перечисления.ТипыКонтактнойИнформации.Адрес); + + Возврат Результат; КонецФункции @@ -2007,14 +2010,14 @@ Функция ПреобразоватьКлючЗначениеВСтруктуру(Знач ЗначенияПолей, Знач Представление) - Перем АдресРоссийский, ИмяПоля, НазваниеОсновнойСтраны, ПолеПредставления, Результат, СписокПолей, ТипАдреса, ТипДомаНеопределен, ТипЗначенийПолей, ТипКвартирыНеопределен, ТипКорпусаНеопределен, ЭлементДом, ЭлементКвартира, ЭлементКорпус, ЭлементСписка; - + // Старый формат через разделитель строк и равенство. Результат = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); Результат.Comment = ""; - НазваниеОсновнойСтраны = ВРег(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(), "Наименование")); + НазваниеОсновнойСтраны = ВРег(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(), + "Наименование")); ЭлементКвартира = Неопределено; ЭлементКорпус = Неопределено; ЭлементДом = Неопределено; @@ -2058,7 +2061,8 @@ Результат.areaCode = ЭлементСписка.Значение; Если ПустаяСтрока(Результат.area) Тогда - НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(РегионКода(ЭлементСписка.Значение)); + НаименованиеИТип = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение( + РегионКода(ЭлементСписка.Значение)); Результат.area = НаименованиеИТип.Наименование; Результат.areaType = СокрЛП(НаименованиеИТип.Сокращение); КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl index a9458ab31..020656bf9 100644 --- a/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСАдресамиКлиентСервер/Module.bsl @@ -125,23 +125,15 @@ // ** КодУчасткаИФНСФЛ - Строка - код участка налоговой инспекции физических лиц. Например, "7713" // ** КодУчасткаИФНСЮЛ - Строка - код участка налоговой инспекции юридических лиц. Например, "7713" // * Комментарий - Строка - комментарий к адресу. +// * ДополнительнаяИнформация - Строка - текстовое представление дополнительной информации. // Функция ПоляАдреса() Экспорт - Результат = Новый Структура; + Результат = УправлениеКонтактнойИнформациейКлиентСервер.ПоляАдреса(); - Результат.Вставить("ТипАдреса" , ""); - Результат.Вставить("Комментарий" , ""); - - Результат.Вставить("Представление" , ""); Результат.Вставить("МуниципальноеПредставление", ""); - Результат.Вставить("Страна" , ""); - Результат.Вставить("КодСтраны", ""); - Результат.Вставить("Индекс" , ""); - Результат.Вставить("КодРегиона" , ""); - Результат.Вставить("Регион" , ""); Результат.Вставить("РегионТипПолный" , ""); Результат.Вставить("РегионТипКраткий" , ""); @@ -153,7 +145,6 @@ Результат.Вставить("МуниципальныйРайонТипПолный" , ""); Результат.Вставить("МуниципальныйРайонТипКраткий" , ""); - Результат.Вставить("Город" , ""); Результат.Вставить("ГородТипПолный" , ""); Результат.Вставить("ГородТипКраткий" , ""); @@ -173,7 +164,6 @@ Результат.Вставить("ТерриторияТипПолный" , ""); Результат.Вставить("ТерриторияТипКраткий" , ""); - Результат.Вставить("Улица" , ""); Результат.Вставить("УлицаТипПолный" , ""); Результат.Вставить("УлицаТипКраткий" , ""); @@ -284,7 +274,7 @@ Функция ПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление, ТипАдреса = Неопределено, ПредставлениеИзПолей = Ложь) Экспорт Если ТипЗнч(Адрес) <> Тип("Структура") Тогда - ВызватьИсключение НСтр("ru = 'Для формирования представления адреса передан некорректный тип адреса'"); + ВызватьИсключение НСтр("ru = 'Для создания представления адреса был передан недопустимый тип данных.'"); КонецЕсли; Если ТипАдреса = Неопределено Тогда diff --git a/SSL/src/CommonModules/РаботаСАдресамиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСАдресамиСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..56f300ca7 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСАдресамиСлужебныйКлиент/Module.bsl @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ТемаОбращенияВПоддержку() Экспорт + + Возврат НСтр("ru = 'Проблема при заполнении адреса'"); + +КонецФункции + +Функция ТекстОбращенияВПоддержку(Знач Адрес, Знач ТехническаяИнформация) Экспорт + + ОсновнаяПричина = СтрЗаменить(ТехническаяИнформация, Символы.ПС, " "); + + Шаблон = НСтр("ru = 'Проблема при заполнении адреса %1: %2. + | + |<Опишите возникшую проблему и приложите скриншоты ошибки.>'"); + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Адрес, ОсновнаяПричина); + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСАдресамиСлужебныйКлиент/РаботаСАдресамиСлужебныйКлиент.mdo b/SSL/src/CommonModules/РаботаСАдресамиСлужебныйКлиент/РаботаСАдресамиСлужебныйКлиент.mdo new file mode 100644 index 000000000..b067f89b0 --- /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 af702987a..9bfa0f726 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -59,7 +59,8 @@ | СправочникБИК.МеждународноеНаименование КАК МеждународноеНаименование, | СправочникБИК.ГородМеждународный КАК ГородМеждународный, | СправочникБИК.АдресМеждународный КАК АдресМеждународный, - | СправочникБИК.Страна КАК Страна + | """" КАК Страна, + | СправочникБИК.КодСтраны КАК КодСтраны |ИЗ | Справочник.КлассификаторБанков КАК СправочникБИК |ГДЕ @@ -80,7 +81,16 @@ Запрос.УстановитьПараметр("КоррСчет", КоррСчет); Запрос.УстановитьПараметр("ТолькоАктуальные", ТолькоАктуальные); - Возврат Запрос.Выполнить().Выгрузить(); + СведенияБИК = Запрос.Выполнить().Выгрузить(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + КодыСтран = МодульУправлениеКонтактнойИнформациейСлужебный.КодыСтран(); + Для Каждого СтрокаТаблицы Из СведенияБИК Цикл + СтрокаТаблицы.Страна = КодыСтран[СтрокаТаблицы.КодСтраны]; + КонецЦикла; + КонецЕсли; + + Возврат СведенияБИК; КонецФункции diff --git a/SSL/src/CommonModules/РаботаСБанкамиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиСлужебный/Module.bsl index dad3dc6d7..8f8c2c57f 100644 --- a/SSL/src/CommonModules/РаботаСБанкамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанкамиСлужебный/Module.bsl @@ -6,6 +6,34 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Процедура = "Справочники.КлассификаторБанков.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.Версия = "3.1.11.1"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("ffab8bb3-4bb1-4dde-9283-8328c8ede4d9"); + Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.КлассификаторБанков.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик.Комментарий = НСтр("ru = 'Заполняет код страны в Справочнике БИК.'"); + + Изменяемые = Новый Массив; + Изменяемые.Добавить(Метаданные.Справочники.КлассификаторБанков.ПолноеИмя()); + Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ","); + + Блокируемые = Новый Массив; + Блокируемые.Добавить(Метаданные.Справочники.КлассификаторБанков.ПолноеИмя()); + Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ","); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Определяет нужно ли обновление данных классификатора. diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 4ebfd5dec..613b8e299 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -8,37 +8,41 @@ #Область ПрограммныйИнтерфейс -// Добавляет в справочник валют валюты из классификатора. -// При отсутствии обработки ЗагрузкаКурсовВалют валюты добавляются с наименованием "Валюта", +// Добавляет в справочник указанные валюты из классификатора. +// Для вызова из обработчиков начального заполнения. +// +// При отсутствии классификатора валюты добавляются с наименованием "Валюта", // символьный код соответствует цифровому. // // Параметры: -// Коды - Массив - цифровые коды добавляемых валют. +// КодыВалют - Массив из Строка - цифровые коды добавляемых валют. // // Возвращаемое значение: -// Массив, СправочникСсылка.Валюты - ссылки созданных валют. +// Массив из СправочникСсылка.Валюты // -Функция ДобавитьВалютыПоКоду(Знач Коды) Экспорт +Функция ДобавитьВалютыПоКоду(Знач КодыВалют) Экспорт - Результат = Новый Массив(); - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Результат = Обработки["ЗагрузкаКурсовВалют"].ДобавитьВалютыПоКоду(Коды); - Иначе - Для Каждого Код Из Коды Цикл - ВалютаСсылка = Справочники.Валюты.НайтиПоКоду(Код); - Если ВалютаСсылка.Пустая() Тогда - ВалютаОбъект = Справочники.Валюты.СоздатьЭлемент(); - ВалютаОбъект.Код = Код; - ВалютаОбъект.Наименование = Код; - ВалютаОбъект.НаименованиеПолное = НСтр("ru = 'Валюта'"); - ВалютаОбъект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; - ВалютаОбъект.Записать(); - ВалютаСсылка = ВалютаОбъект.Ссылка; - КонецЕсли; - Результат.Добавить(ВалютаСсылка); - КонецЦикла; + Результат = Новый Массив; + СтандартнаяОбработка = Истина; + РаботаСКурсамиВалютЛокализация.ПриДобавленииВалютПоКоду(КодыВалют, Результат, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда + Возврат Результат; КонецЕсли; + Для Каждого КодВалюты Из КодыВалют Цикл + ВалютаСсылка = Справочники.Валюты.НайтиПоКоду(КодВалюты); + Если ВалютаСсылка.Пустая() Тогда + ВалютаОбъект = Справочники.Валюты.СоздатьЭлемент(); + ВалютаОбъект.Код = КодВалюты; + ВалютаОбъект.Наименование = КодВалюты; + ВалютаОбъект.НаименованиеПолное = НСтр("ru = 'Валюта'"); + ВалютаОбъект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; + ВалютаОбъект.Записать(); + ВалютаСсылка = ВалютаОбъект.Ссылка; + КонецЕсли; + Результат.Добавить(ВалютаСсылка); + КонецЦикла; + Возврат Результат; КонецФункции @@ -166,45 +170,18 @@ // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт - ОбъектМетаданных = Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют"); - Если ОбъектМетаданных = Неопределено Тогда + Если Не ДоступнаЗагрузкаКурсовВалют() Тогда Возврат; КонецЕсли; - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если ОбщегоНазначения.РазделениеВключено() // В модели сервиса обновляется автоматически. - Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() - Или Не РаботаСКурсамиВалютСлужебный.ЕстьПравоИзмененияКурсовВалют() - Или МодульТекущиеДелаСервер.ДелоОтключено("КлассификаторВалют") Тогда - Возврат; - КонецЕсли; - - КурсыАктуальны = КурсыАктуальны(); - - // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь - // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(ОбъектМетаданных.ПолноеИмя()); - - Для Каждого Раздел Из Разделы Цикл - - ИдентификаторВалюты = "КлассификаторВалют" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = ИдентификаторВалюты; - Дело.ЕстьДела = Не КурсыАктуальны; - Дело.Представление = НСтр("ru = 'Курсы валют устарели'"); - Дело.Важное = Истина; - Дело.Форма = "Обработка.ЗагрузкаКурсовВалют.Форма"; - Дело.ПараметрыФормы = Новый Структура("ОткрытиеИзСписка", Истина); - Дело.Владелец = Раздел; - - КонецЦикла; + РаботаСКурсамиВалютЛокализация.ПриЗаполненииСпискаТекущихДел(ТекущиеДела); КонецПроцедуры // См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных. Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт - // Загрузка в классификатор валюты запрещена. + // Загрузка в классификатор валют запрещена. СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.Валюты.ПолноеИмя(), "ПолноеИмя"); Если СтрокаТаблицы <> Неопределено Тогда ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); @@ -219,9 +196,7 @@ // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Обработки["ЗагрузкаКурсовВалют"].ПриОпределенииНастроекРегламентныхЗаданий(Настройки); - КонецЕсли; + РаботаСКурсамиВалютЛокализация.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецПроцедуры // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей. @@ -253,31 +228,21 @@ // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт - Если ОбщегоНазначения.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения())); + РаботаСКурсамиВалютЛокализация.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений); КонецПроцедуры // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Обработки["ЗагрузкаКурсовВалют"].ПриДобавленииОбработчиковОбновления(Обработчики); - КонецЕсли; + РаботаСКурсамиВалютЛокализация.ПриДобавленииОбработчиковОбновления(Обработчики); КонецПроцедуры // См. ИнтернетПоддержкаПользователейПереопределяемый.ПриИзмененииДанныхАутентификацииИнтернетПоддержки. Процедура ПриИзмененииДанныхАутентификацииИнтернетПоддержки(ДанныеПользователя) Экспорт - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Обработки["ЗагрузкаКурсовВалют"].ПриИзмененииДанныхАутентификацииИнтернетПоддержки(ДанныеПользователя); - КонецЕсли; + РаботаСКурсамиВалютЛокализация.ПриИзмененииДанныхАутентификацииИнтернетПоддержки(ДанныеПользователя); КонецПроцедуры @@ -327,7 +292,8 @@ ДополнительныеПараметры) Экспорт Если ИдентификаторСхемыКомпоновкиДанных = "ДанныеПечатиСуммаПрописью" Тогда - ВнешниеНаборыДанных.Вставить("Данные", ДанныеПечатиСуммаПрописью(ДополнительныеПараметры.ОписанияИсточниковДанных, КодЯзыка)); + ВнешниеНаборыДанных.Вставить("Данные", + ДанныеПечатиСуммаПрописью(ДополнительныеПараметры.ОписанияИсточниковДанных, КодЯзыка)); Возврат; КонецЕсли; @@ -337,33 +303,18 @@ #Область СлужебныеПроцедурыИФункции -Процедура ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт - - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - Обработки["ЗагрузкаКурсовВалют"].ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки, АдресРезультата); - КонецЕсли; - -КонецПроцедуры - -// Возвращает список разрешений для загрузки курсов валют из внешних ресурсов. -// // Возвращаемое значение: -// Массив +// Булево // -Функция Разрешения() - - Разрешения = Новый Массив; - ИмяОбработки = "ЗагрузкаКурсовВалют"; - Если Метаданные.Обработки.Найти(ИмяОбработки) <> Неопределено Тогда - Обработки[ИмяОбработки].ДобавитьРазрешения(Разрешения); - КонецЕсли; - - Возврат Разрешения; - +Функция ДоступнаЗагрузкаКурсовВалют() Экспорт + + Результат = Ложь; + РаботаСКурсамиВалютЛокализация.ПриОпределенииДоступностиЗагрузкиКурсовВалют(Результат); + Возврат Результат; + КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Возвращает массив валют, курсы которых загружаются из внешних ресурсов. // @@ -520,8 +471,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление курсов валют +#КонецОбласти + +#Область ОбновлениеКурсовВалют // Проверяет актуальность курсов всех валют. // @@ -630,3 +582,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl index eee8bf433..9abc7d6a8 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиент/Module.bsl @@ -10,14 +10,11 @@ Процедура ПоказатьЗагрузкуКурсовВалют(ПараметрыФормы = Неопределено) Экспорт - // Локализация - ОткрытьФорму("Обработка.ЗагрузкаКурсовВалют.Форма", ПараметрыФормы); - // Конец Локализация + РаботаСКурсамиВалютКлиентЛокализация.ПоказатьЗагрузкуКурсовВалют(ПараметрыФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы. Процедура ПослеНачалаРаботыСистемы() Экспорт @@ -31,6 +28,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -113,4 +112,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ 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..81e9abe39 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентЛокализация/Module.bsl @@ -0,0 +1,24 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..0dec3c246 --- /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..c72f9416a --- /dev/null +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютЛокализация/Module.bsl @@ -0,0 +1,202 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается при начальном заполнении справочника валют для добавления указанных валют из классификатора. +// +// Параметры: +// КодыВалют - Массив из Строка - цифровые коды добавляемых валют. +// Валюты - Массив из СправочникСсылка.Валюты - выходной параметр. Добавленные валюты. +// СтандартнаяОбработка - Булево - выходной параметр. Установить Ложь, если реализовано собственное заполнение. +// +Процедура ПриДобавленииВалютПоКоду(Знач КодыВалют, Валюты, СтандартнаяОбработка) Экспорт + + // Локализация + СтандартнаяОбработка = Ложь; + Валюты = Обработки.ЗагрузкаКурсовВалют.ДобавитьВалютыПоКоду(КодыВалют); + // Конец Локализация + +КонецПроцедуры + +// Определяет техническую возможность загрузки курсов валют из Интернета +// (наличие такой функциональности в конфигурации). +// +// Параметры: +// Значение - Булево +// +Процедура ПриОпределенииДоступностиЗагрузкиКурсовВалют(Значение) Экспорт + + // Локализация + Значение = Истина; + // Конец Локализация + +КонецПроцедуры + +// Определяет валюты, для которых есть техническая возможность загрузки курсов из Интернета +// (внешний ресурс предоставляет эти данные). +// +// Параметры: +// КодыВалютЗагружаемыхИзИнтернета - Массив из Строка - выходной параметр. +// +Процедура ПриОпределенииКодовВалютЗагружаемыхИзИнтернета(КодыВалютЗагружаемыхИзИнтернета) Экспорт + + // Локализация + КодыВалютЗагружаемыхИзИнтернета = Обработки.ЗагрузкаКурсовВалют.КодыВалютЗагружаемыхИзИнтернета(); + // Конец Локализация + +КонецПроцедуры + +// Вызывается при загрузке курсы валют на текущую дату. +// +// Параметры: +// ПараметрыЗагрузки - Структура: +// * НачалоПериода - Дата - начало периода загрузки. +// * КонецПериода - Дата - конец периода загрузки. +// * СписокВалют - ТаблицаЗначений: +// ** Валюта - СправочникСсылка.Валюты +// ** КодВалюты - Строка +// АдресРезультата - Строка - адрес во временном хранилище для помещения результатов загрузки. +// +Процедура ПриЗагрузкеАктуальныхКурсов(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт + + // Локализация + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют); + Обработки.ЗагрузкаКурсовВалют.ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки, АдресРезультата); + // Конец Локализация + +КонецПроцедуры + +// См. РаботаСКлассификаторамиПереопределяемый.ПриЗагрузкеКлассификатора. +Процедура ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры) Экспорт + + // Локализация + Обработки.ЗагрузкаКурсовВалют.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, + ДополнительныеПараметры); + // Конец Локализация + +КонецПроцедуры + +// См. ТекущиеДелаПереопределяемый.ПриОпределенииОбработчиковТекущихДел. +Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + + // Локализация + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если ОбщегоНазначения.РазделениеВключено() // В модели сервиса курсы обновляются автоматически. + Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() + Или Не РаботаСКурсамиВалютСлужебный.ЕстьПравоИзмененияКурсовВалют() + Или МодульТекущиеДелаСервер.ДелоОтключено("КлассификаторВалют") Тогда + Возврат; + КонецЕсли; + + КурсыАктуальны = РаботаСКурсамиВалют.КурсыАктуальны(); + + // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь + // не делается проверка существования подсистемы. + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Обработки.ЗагрузкаКурсовВалют.ПолноеИмя()); + + Для Каждого Раздел Из Разделы Цикл + + ИдентификаторВалюты = "КлассификаторВалют" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = ИдентификаторВалюты; + Дело.ЕстьДела = Не КурсыАктуальны; + Дело.Представление = НСтр("ru = 'Курсы валют устарели'"); + Дело.Важное = Истина; + Дело.Форма = "Обработка.ЗагрузкаКурсовВалют.Форма"; + Дело.ПараметрыФормы = Новый Структура("ОткрытиеИзСписка", Истина); + Дело.Владелец = Раздел; + + КонецЦикла; + // Конец Локализация + +КонецПроцедуры + +// Указывает коллекции объектов метаданных, содержащие формы ввода прописей для различных языков. +// Имя формы должно соответствовать шаблону ПараметрыПрописиВалюты_<код языка>. Например, "ПараметрыПрописиВалюты_en". +// +// Для того, чтобы создать новую форму ввода прописей на нужном языке, необходимо скопировать +// форму ПараметрыПрописиВалюты_en, изменить в ее имени код языка и реализовать в ней заполнение параметров прописи на +// выбранном языке. См. описание параметра ПараметрыПредметаИсчисления в функции ЧислоПрописью в синтакс-помощнике. +// +// Параметры: +// КоллекцииФорм - Массив из КоллекцияОбъектовМетаданных - выходной параметр. +// +Процедура ПриОпределенииФормВводаПрописей(КоллекцииФорм) Экспорт + + // Локализация + КоллекцииФорм.Добавить(Метаданные.Обработки.ЗагрузкаКурсовВалют.Формы); + // Конец Локализация + +КонецПроцедуры + +// См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий. +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт + + // Локализация + Обработки.ЗагрузкаКурсовВалют.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); + // Конец Локализация + +КонецПроцедуры + +// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + + // Локализация + Обработки.ЗагрузкаКурсовВалют.ПриДобавленииОбработчиковОбновления(Обработчики); + // Конец Локализация + +КонецПроцедуры + +// См. ИнтернетПоддержкаПользователейПереопределяемый.ПриИзмененииДанныхАутентификацииИнтернетПоддержки. +Процедура ПриИзмененииДанныхАутентификацииИнтернетПоддержки(ДанныеПользователя) Экспорт + + // Локализация + Обработки.ЗагрузкаКурсовВалют.ПриИзмененииДанныхАутентификацииИнтернетПоддержки(ДанныеПользователя); + // Конец Локализация + +КонецПроцедуры + +// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + // Локализация + Если ОбщегоНазначения.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения())); + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти + +// Локализация + +#Область СлужебныеПроцедурыИФункции + +// Возвращает список разрешений для загрузки курсов валют из внешних ресурсов. +// +// Возвращаемое значение: +// Массив +// +Функция Разрешения() + + Разрешения = Новый Массив; + Обработки.ЗагрузкаКурсовВалют.ДобавитьРазрешения(Разрешения); + Возврат Разрешения; + +КонецФункции + +#КонецОбласти + +// Конец Локализация + diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютЛокализация/РаботаСКурсамиВалютЛокализация.mdo b/SSL/src/CommonModules/РаботаСКурсамиВалютЛокализация/РаботаСКурсамиВалютЛокализация.mdo new file mode 100644 index 000000000..954fc0fd8 --- /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 9fa052e5f..e1e23077a 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютСлужебный/Module.bsl @@ -155,8 +155,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // Вызывается при получении уведомления о новых данных. // В теле следует проверить, необходимы ли эти данные приложению, @@ -250,6 +249,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Регистрирует обработчики поставляемых данных за день и за все время. @@ -277,8 +278,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сериализация/десериализация файла курсов. +#Область СериализацияДесериализацияФайлаКурсов // Записывает файл в формате поставляемых данных. // @@ -785,9 +785,7 @@ КоллекцииФорм = Новый Массив; КоллекцииФорм.Добавить(Метаданные.ОбщиеФормы); КоллекцииФорм.Добавить(Метаданные.Справочники.Валюты.Формы); - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - КоллекцииФорм.Добавить(Метаданные.Обработки["ЗагрузкаКурсовВалют"].Формы); - КонецЕсли; + РаботаСКурсамиВалютЛокализация.ПриОпределенииФормВводаПрописей(КоллекцииФорм); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность"); @@ -843,3 +841,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index dc2355ead..d5e1a9826 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -688,4 +688,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ 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..0b309bc44 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/Module.bsl @@ -0,0 +1,66 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Устанавливает IP-адреса серверов DNS, которые могут использоваться для чтения MX-записей доменов. +// +// Параметры: +// АдресаСерверовDNS - Массив из Строка - IP-адреса; +// СтандартнаяОбработка - Булево - установить в Ложь, если в список не требуется добавлять стандартные +// +Процедура ПриПолученииАдресовСерверовDNS(АдресаСерверовDNS, СтандартнаяОбработка) Экспорт + + // Локализация + АдресаСерверовDNS.Добавить("78.88.8.8"); // dns.yandex + АдресаСерверовDNS.Добавить("78.8.8.1"); // dns.yandex + СтандартнаяОбработка = Ложь; + // Конец Локализация + +КонецПроцедуры + +// Определяет адрес файла с настройками подключения к почтовым серверам. +// +// Параметры: +// АдресФайла - Строка - URL файла с настройками подключения к почтовым серверам. +// +Процедура ПриПолученииАдресаФайлаСНастройками(АдресФайла) Экспорт + + // Локализация + АдресФайла = "https://downloads.v8.1c.ru/content/common/settings/mailservers.json"; + // Конец Локализация + +КонецПроцедуры + +// Определяет адрес файла с описанием ошибок подключения к почтовым серверам. +// +// Параметры: +// АдресФайла - Строка - URL файла с описанием ошибок подключения к почтовым серверам. +// +Процедура ПриПолученииАдресаФайлаСОписаниемОшибок(АдресФайла) Экспорт + + // Локализация + АдресФайла = "https://downloads.v8.1c.ru/content/common/settings/v2/mailerrors.json"; + // Конец Локализация + +КонецПроцедуры + +// Определяет адрес внешнего ресурса для механизма профилей безопасности. +// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. // +// Параметры: +// АдресВнешнегоРесурса - Строка - адрес внешнего ресурса. +// +Процедура ПриПолученииАдресаВнешнегоРесурса(АдресВнешнегоРесурса) Экспорт + + // Локализация + АдресВнешнегоРесурса = "downloads.v8.1c.ru"; + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйЛокализация/РаботаСПочтовымиСообщениямиСлужебныйЛокализация.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/РаботаСПочтовымиСообщениямиЛокализация.mdo similarity index 72% rename from SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйЛокализация/РаботаСПочтовымиСообщениямиСлужебныйЛокализация.mdo rename to SSL/src/CommonModules/РаботаСПочтовымиСообщениямиЛокализация/РаботаСПочтовымиСообщениямиЛокализация.mdo index b2377cca4..359b1ccda 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 2ed09367d..ea4eb062b 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -313,7 +313,7 @@ СведенияОбУчетнойЗаписи = ОписаниеНастроекУчетнойЗаписиДляВосстановленияПароля(); ЗаполнитьЗначенияСвойств(СведенияОбУчетнойЗаписи, Настройки); - Константы.УчетнаяЗаписьДляВосстановленияПароля.Установить(Новый ХранилищеЗначения(СведенияОбУчетнойЗаписи)); + Константы.УчетнаяЗаписьДляВосстановленияПароля.Установить(Новый ХранилищеЗначения(СведенияОбУчетнойЗаписи, Новый СжатиеДанных(9))); КонецПроцедуры @@ -346,8 +346,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт @@ -480,17 +479,17 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт Библиотека = "СтандартныеПодсистемы"; СтароеИмя = "Роль.ИспользованиеУчетныхЗаписейЭлектроннойПочты"; НовоеИмя = "Роль.ЧтениеУчетныхЗаписейЭлектроннойПочты"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.11", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.11", СтароеИмя, НовоеИмя, Библиотека); СтароеИмя = "Роль.ЧтениеУчетныхЗаписейЭлектроннойПочты"; НовоеИмя = "Роль.ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.4.1.1", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.4.1.1", СтароеИмя, НовоеИмя, Библиотека); КонецПроцедуры @@ -549,6 +548,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Проверяет, что предопределенная системная учетная запись электронной почты @@ -1472,7 +1473,8 @@ КонецЕсли; Если УчетнаяЗапись <> Неопределено Тогда - РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты,ОтправлятьСкрытыеКопииПисемНаЭтотАдрес,ИспользоватьДляПолучения"); + РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, + "ИмяПользователя,АдресЭлектроннойПочты,ОтправлятьСкрытыеКопииПисемНаЭтотАдрес,ИспользоватьДляПолучения"); УстановитьОтключениеБезопасногоРежима(Истина); Профиль = ИнтернетПочтовыйПрофиль(УчетнаяЗапись); @@ -1489,25 +1491,29 @@ ОпределитьПапкуОтправленные(Соединение); КонецЕсли; Исключение - ТекстОшибки = РасширенноеПредставлениеОшибки(ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) + Или ПротоколПолученияПочты <> ПротоколИнтернетПочты.IMAP Или РеквизитыОтправителя.ИспользоватьДляПолучения Тогда + ВызватьИсключение; + КонецЕсли; + + ТекстОшибки = РасширенноеПредставлениеОшибки(ИнформацияОбОшибке, ОбщегоНазначения.КодОсновногоЯзыка()); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось подключиться к серверу IMAP: |%1'", ОбщегоНазначения.КодОсновногоЯзыка()), ТекстОшибки); - Если ПротоколПолученияПочты = ПротоколИнтернетПочты.IMAP И Не РеквизитыОтправителя.ИспользоватьДляПолучения Тогда - ЗаписьЖурналаРегистрации(ИмяСобытияОтправкаПочты(), УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты, УчетнаяЗапись, ТекстОшибки); - ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3; - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль, ПротоколПолученияПочты); - Иначе - ВызватьИсключение; - КонецЕсли; + ЗаписьЖурналаРегистрации(ИмяСобытияОтправкаПочты(), УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты, УчетнаяЗапись, ТекстОшибки); + + ПротоколПолученияПочты = ПротоколИнтернетПочты.POP3; + Соединение = Новый ИнтернетПочта; + ПодключитьсяКИнтернетПочте(Соединение, Профиль, ПротоколПолученияПочты); + КонецПопытки; КонецЕсли; РезультатыОтправкиПисем = Новый Соответствие; - ОбрабатыватьТексты = ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать; Попытка @@ -1550,7 +1556,13 @@ ОшибочныеПолучатели.Вставить(Получатель.Адрес, ТекстОшибки); КонецЦикла; Иначе - ВызватьИсключение; + + УточнениеИсключения = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке); + КодОшибки = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.КодОшибкиРаботыИнтернетПочты(); + + ВызватьИсключение( + УточнениеИсключения.Текст, УточнениеИсключения.Категория, КодОшибки, , ИнформацияОбОшибке); + КонецЕсли; КонецПопытки; @@ -1565,14 +1577,18 @@ ТекстыОшибок.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1: %2'"), Получатель, ТекстОшибки)); КонецЦикла; - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отправка письма следующим получателям не выполнена: - |%1'", ОбщегоНазначения.КодОсновногоЯзыка()), СтрСоединить(ТекстыОшибок, Символы.ПС)); - ЗаписьЖурналаРегистрации(ИмяСобытияОтправкаПочты(), УровеньЖурналаРегистрации.Ошибка, , УчетнаяЗапись, ТекстОшибки); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отправка письма следующим получателям не выполнена: + |%1'", + ОбщегоНазначения.КодОсновногоЯзыка()), СтрСоединить(ТекстыОшибок, Символы.ПС)); + ЗаписьЖурналаРегистрации(ИмяСобытияОтправкаПочты(), УровеньЖурналаРегистрации.Ошибка, , + УчетнаяЗапись, ТекстОшибки); КонецЕсли; РезультатыОтправкиПисем.Вставить(Письмо, РезультатОтправкиПисьма); КонецЦикла; Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); Если УчетнаяЗапись <> Неопределено Тогда Попытка Соединение.Отключиться(); @@ -1581,17 +1597,16 @@ // в вызывающий код передается исходное исключение, которое будет там обработано. КонецПопытки; КонецЕсли; - - ТекстОшибки = РасширенноеПредставлениеОшибки(ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка()); - - ЗаписьЖурналаРегистрации(ИмяСобытияОтправкаПочты(), УровеньЖурналаРегистрации.Ошибка, , УчетнаяЗапись, ТекстОшибки); - ТекстИсключения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - Если РезультатыОтправкиПисем.Количество() = 0 Тогда + + ТекстИсключения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) + Или РезультатыОтправкиПисем.Количество() = 0 Тогда ВызватьИсключение; - Иначе - Возврат РезультатыОтправкиПисем; КонецЕсли; + + ТекстОшибки = РасширенноеПредставлениеОшибки(ИнформацияОбОшибке, ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(ИмяСобытияОтправкаПочты(), УровеньЖурналаРегистрации.Ошибка, , УчетнаяЗапись, ТекстОшибки); + Возврат РезультатыОтправкиПисем; КонецПопытки; Если УчетнаяЗапись <> Неопределено Тогда @@ -1908,8 +1923,8 @@ СпособыУстранения.Добавить(НСтр("ru = 'Проверьте введенные настройки.'")); Иначе СпособыУстранения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Попробуйте перенастроить почту (кнопка Перенастроить в настройках почты).'"), - "Перенастроить")); + "ru = 'Попробуйте перенастроить почту (кнопка Перенастроить в настройках почты).'"), + "00aae216-28f1-4b32-8ac5-d2a104368df5")); КонецЕсли; СпособыУстранения.Добавить(НСтр("ru = 'Повторите действие еще раз через некоторое время.'")); @@ -2087,6 +2102,12 @@ Результат.Вставить("ЗапросВыполнен", Ложь); Результат.Вставить("ОтветСервера", ""); + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(), + УровеньЖурналаРегистрации.Ошибка, , , ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения()); + Возврат Результат; + КонецЕсли; + HTTPЗапрос = ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса, Истина); HTTPОтвет = Неопределено; @@ -2181,6 +2202,12 @@ ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты, ИмяПочтовогоСервиса"); + + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + ЗаписьЖурналаРегистрации(ИмяСобытияАвторизацияПоПротоколуOAuth(), + УровеньЖурналаРегистрации.Ошибка, , , ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения()); + Возврат ""; + КонецЕсли; Если Не ЗначениеЗаполнено(ЗначенияРеквизитов.ИмяПочтовогоСервиса) Тогда ТекстОшибки = НСтр("ru = 'Не указано имя почтового сервиса для авторизации. Необходимо перенастроить почту.'"); @@ -2522,12 +2549,28 @@ КонецЕсли; ИнтернетПочта = Новый ИнтернетПочта; - ИнтернетПочта.Подключиться(ИнтернетПочтовыйПрофиль, Протокол); + ПодключитьсяКИнтернетПочте(ИнтернетПочта, ИнтернетПочтовыйПрофиль, Протокол); Возврат ИнтернетПочта; КонецФункции +Процедура ПодключитьсяКИнтернетПочте(ИнтернетПочта, Профиль, Протокол) + + Попытка + ИнтернетПочта.Подключиться(Профиль, Протокол); + Исключение + + ИнформацияОбОшибке = ИнформацияОбОшибке(); + УточнениеИсключения = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке); + КодОшибки = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.КодОшибкиРаботыИнтернетПочты(); + + ВызватьИсключение(УточнениеИсключения.Текст, УточнениеИсключения.Категория, КодОшибки, , ИнформацияОбОшибке); + + КонецПопытки; + +КонецПроцедуры + #Область Punycode Функция КодироватьСтрокуСРазделителем(Строка, Разделители = ".") @@ -2819,9 +2862,9 @@ Результат = Новый Массив; - Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация.ПриПолученииАдресовСерверовDNS(Результат); + СтандартнаяОбработка = Истина; + РаботаСПочтовымиСообщениямиЛокализация.ПриПолученииАдресовСерверовDNS(Результат, СтандартнаяОбработка); + Если Не СтандартнаяОбработка Тогда Возврат Результат; КонецЕсли; @@ -2835,25 +2878,15 @@ Функция АдресФайлаСНастройками() Экспорт АдресФайла = "https://downloads.1c.eu/content/common/settings/mailservers.json"; - - Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация.ПриПолученииАдресаФайлаСНастройками(АдресФайла); - КонецЕсли; - + РаботаСПочтовымиСообщениямиЛокализация.ПриПолученииАдресаФайлаСНастройками(АдресФайла); Возврат АдресФайла; КонецФункции Функция АдресФайлаСОписаниемОшибок() - АдресФайла = "https://downloads.1c.eu/content/common/settings/mailerrors.json"; - - Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация.ПриПолученииАдресаФайлаСОписаниемОшибок(АдресФайла); - КонецЕсли; - + АдресФайла = "https://downloads.1c.eu/content/common/settings/v2/mailerrors.json"; + РаботаСПочтовымиСообщениямиЛокализация.ПриПолученииАдресаФайлаСОписаниемОшибок(АдресФайла); Возврат АдресФайла; КонецФункции @@ -2861,12 +2894,7 @@ Функция АдресВнешнегоРесурса() АдресВнешнегоРесурса = "downloads.1c.eu"; - - Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); - МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация.ПриПолученииАдресаВнешнегоРесурса(АдресВнешнегоРесурса); - КонецЕсли; - + РаботаСПочтовымиСообщениямиЛокализация.ПриПолученииАдресаВнешнегоРесурса(АдресВнешнегоРесурса); Возврат АдресВнешнегоРесурса; КонецФункции diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..750f93db8 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиент/Module.bsl @@ -0,0 +1,42 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ТемаОбращенияВПоддержку(Знач ТехническаяИнформация) Экспорт + + ОсновнаяПричина = СтрЗаменить(ТехническаяИнформация, Символы.ПС, " "); + + ОграничениеДлины = 500; + ОсновнаяПричина = Лев(ОсновнаяПричина, ОграничениеДлины); + + Шаблон = НСтр("ru = 'Настройка почтового ящика: %1'"); + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ОсновнаяПричина); + + Возврат Результат; + +КонецФункции + +Функция ТекстОбращенияВПоддержку(Знач АдресЭлектроннойПочты, Знач ТехническаяИнформация) Экспорт + + ОсновнаяПричина = СтрЗаменить(ТехническаяИнформация, Символы.ПС, " "); + + Шаблон = НСтр("ru = 'Проблема при настройке почтового ящика %1: %2. + | + |<Опишите возникшую проблему и приложите скриншоты ошибки.>'"); + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Шаблон, + АдресЭлектроннойПочты, + ОсновнаяПричина); + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиент/РаботаСПочтовымиСообщениямиСлужебныйКлиент.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиент/РаботаСПочтовымиСообщениямиСлужебныйКлиент.mdo new file mode 100644 index 000000000..b22608aee --- /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 16b8465cd..c2804a394 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер/Module.bsl @@ -20,4 +20,16 @@ Возврат "Обычная"; КонецФункции +Функция ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) Экспорт + + Возврат ИнформацияОбОшибке.Код = КодОшибкиРаботыИнтернетПочты(); + +КонецФункции + +Функция КодОшибкиРаботыИнтернетПочты() Экспорт + + Возврат "ОшибкаРаботыИнтернетПочты"; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйЛокализация/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйЛокализация/Module.bsl deleted file mode 100644 index 816fdad20..000000000 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебныйЛокализация/Module.bsl +++ /dev/null @@ -1,36 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныеПроцедурыИФункции - -Процедура ПриПолученииАдресовСерверовDNS(АдресаСерверовDNS) Экспорт - - АдресаСерверовDNS.Добавить("78.88.8.8"); // dns.yandex - АдресаСерверовDNS.Добавить("78.8.8.1"); // dns.yandex - -КонецПроцедуры - -Процедура ПриПолученииАдресаФайлаСНастройками(АдресФайла) Экспорт - - АдресФайла = "https://downloads.v8.1c.ru/content/common/settings/mailservers.json"; - -КонецПроцедуры - -Процедура ПриПолученииАдресаФайлаСОписаниемОшибок(АдресФайла) Экспорт - - АдресФайла = "https://downloads.v8.1c.ru/content/common/settings/mailerrors.json"; - -КонецПроцедуры - -Процедура ПриПолученииАдресаВнешнегоРесурса(АдресВнешнегоРесурса) Экспорт - - АдресВнешнегоРесурса = "downloads.v8.1c.ru"; - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index 8f9f67a65..49b23af55 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -92,9 +92,9 @@ // Возвращаемое значение: // Соответствие из КлючИЗначение: // * Ключ - ОпределяемыйТип.ПрисоединенныйФайл - файл из параметра ПрисоединенныеФайлы. -// * Значение - ДвоичныеДанные - двоичные данные присоединенного файла. Если двоичные данные файла не найдены +// * Значение - ДвоичныеДанные - двоичные данные присоединенного файла. Если двоичные данные файла не существуют // в информационной базе или в томах, вызывает исключение. Если двоичные данные не -// найдены и параметр ВызыватьИсключение принимает значение Ложь, тогда +// существуют и параметр ВызыватьИсключение принимает значение Ложь, тогда // запись для такого файла будет отсутствовать. // Функция ДвоичныеДанныеФайлов(Знач ПрисоединенныеФайлы, Знач ВызыватьИсключение = Истина) Экспорт @@ -109,7 +109,10 @@ ТипФайла = ТипЗнч(ПрисоединенныеФайлы[0]); Для Индекс = 1 По ПрисоединенныеФайлы.Количество() - 1 Цикл Если ТипЗнч(ПрисоединенныеФайлы[Индекс]) <> ТипФайла Тогда - ВызватьИсключение НСтр("ru = 'Все присоединенные файлы должны быть одного типа'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все присоединенные файлы в параметре %1 должны быть одного типа в %2.'"), + "ПрисоединенныеФайлы", "РаботаСФайлами.ДвоичныеДанныеФайлов"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецЦикла; @@ -364,17 +367,31 @@ КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ПрисоединенныйФайл); - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДанныеФайла", "ПрисоединенныйФайл", ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); - + + Если Не ВызыватьИсключение Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + ЧтениеРазрешено = МодульУправлениеДоступом.ЧтениеРазрешено(ПрисоединенныйФайл); + Иначе + ЧтениеРазрешено = ПравоДоступа("Чтение", ПрисоединенныйФайл.Метаданные()); + КонецЕсли; + Если Не ЧтениеРазрешено Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - Если ВызыватьИсключение Тогда - ОбщегоНазначенияКлиентСервер.Проверить(ФайлОбъект <> Неопределено, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден присоединенный файл ""%1"" (%2)'"), - Строка(ПрисоединенныйФайл), ПрисоединенныйФайл.Метаданные())); - ИначеЕсли ФайлОбъект = Неопределено Тогда - Возврат Неопределено; + Если ФайлОбъект = Неопределено Тогда + Если ВызыватьИсключение Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Файл не существует или недоступен ""%1"" (%2)'"), + Строка(ПрисоединенныйФайл), ПрисоединенныйФайл.Метаданные().Представление()); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.НарушениеПравДоступа); + Иначе + Возврат Неопределено; + КонецЕсли; КонецЕсли; Если ДляРедактирования И Не ЗначениеЗаполнено(ФайлОбъект.Редактирует) Тогда @@ -524,7 +541,57 @@ // Процедура ОбновитьФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт - РаботаСФайламиСлужебный.ОбновитьФайл(ИнформацияОФайле, ПрисоединенныйФайл); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ОбновитьФайл", "ПрисоединенныйФайл", + ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); + + НачатьТранзакцию(); + Попытка + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)).ПолноеИмя()); + ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", ПрисоединенныйФайл); + БлокировкаДанных.Заблокировать(); + + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ПрисоединенныйФайл); + + ИмяБезРасширения = ""; + Если ИнформацияОФайле.Свойство("ИмяБезРасширения", ИмяБезРасширения) + И ЗначениеЗаполнено(ИнформацияОФайле.ИмяБезРасширения) Тогда + ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяБезРасширения); + ФайлОбъект.Наименование = ИмяБезРасширения; + КонецЕсли; + + ФайлОбъект.ДатаМодификацииУниверсальная = ТекущаяУниверсальнаяДата(); + Если ИнформацияОФайле.Свойство("ДатаМодификацииУниверсальная") + И ЗначениеЗаполнено(ИнформацияОФайле.ДатаМодификацииУниверсальная) + И ИнформацияОФайле.ДатаМодификацииУниверсальная < ФайлОбъект.ДатаМодификацииУниверсальная Тогда + ФайлОбъект.ДатаМодификацииУниверсальная = ИнформацияОФайле.ДатаМодификацииУниверсальная; + КонецЕсли; + + Если ИнформацияОФайле.Свойство("Редактирует") Тогда + ФайлОбъект.Редактирует = ИнформацияОФайле.Редактирует; + КонецЕсли; + + РасширениеФайла = ""; + Если ИнформацияОФайле.Свойство("Расширение", РасширениеФайла) Тогда + РасширениеФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(РасширениеФайла); + ФайлОбъект.Расширение = РасширениеФайла; + КонецЕсли; + + Если ИнформацияОФайле.Свойство("Кодировка") И Не ПустаяСтрока(ИнформацияОФайле.Кодировка) Тогда + РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ПрисоединенныйФайл, ИнформацияОФайле.Кодировка); + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ИнформацияОФайле.АдресФайлаВоВременномХранилище); + РаботаСФайламиСлужебный.ЗаполнитьИзвлеченныйТекст(ФайлОбъект, + ИнформацияОФайле.АдресВременногоХранилищаТекста, ДвоичныеДанные); + РаботаСФайламиСлужебный.ОбновитьДвоичныеДанныеФайлаНаСервере(ФайлОбъект, ДвоичныеДанные); + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -532,25 +599,20 @@ // // Параметры: // ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - объект, к которому -// требуется прикрепить добавляемый файл. +// требуется прикрепить добавляемый файл. // // Возвращаемое значение: // Строка - полное имя формы объекта присоединенных файлов по владельцу. // Функция ИмяФормыОбъектаФайловПоВладельцу(Знач ВладелецФайлов) Экспорт - ЗаголовокОшибки = НСтр("ru = 'Ошибка при получении имени формы присоединенного файла.'"); - ОкончаниеОшибки = НСтр("ru = 'В этом случае получение формы невозможно.'"); - + ЗаголовокОшибки = НСтр("ru = 'Невозможно открыть форму присоединенного файла.'"); ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( - ВладелецФайлов, "", ЗаголовокОшибки, ОкончаниеОшибки); - - ПолноеИмяОМ = "Справочник." + ИмяСправочника; + ВладелецФайлов, "", ЗаголовокОшибки); МетаданныеПрисоединенныхФайлов = Метаданные.Справочники.Найти(ИмяСправочника); - Если МетаданныеПрисоединенныхФайлов.ОсновнаяФормаОбъекта = Неопределено Тогда - ИмяФормы = ПолноеИмяОМ + ".ФормаОбъекта"; + ИмяФормы = "Справочник." + ИмяСправочника + ".ФормаОбъекта"; Иначе ИмяФормы = МетаданныеПрисоединенныхФайлов.ОсновнаяФормаОбъекта.ПолноеИмя(); КонецЕсли; @@ -574,9 +636,7 @@ ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( ВладелецФайлов, ИмяСправочника); - СправочникПрисоединенныеФайлы = Метаданные.Справочники.Найти(ИмяСправочника); - ТипыХранимыхФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип; Возврат СправочникПрисоединенныеФайлы <> Неопределено @@ -601,8 +661,10 @@ Функция ДобавитьФайлСДиска(ВладелецФайлов, ПутьКФайлуНаДиске) Экспорт Если Не ЗначениеЗаполнено(ВладелецФайлов) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не задано значение параметра %1 в %2.'"), - "ВладелецФайлов","РаботаСФайлами.ДобавитьФайлСДиска"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не задано значение параметра %1 в %2.'"), + "ВладелецФайлов","РаботаСФайлами.ДобавитьФайлСДиска"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Файл = Новый Файл(ПутьКФайлуНаДиске); @@ -619,14 +681,23 @@ // Попытка извлечения текста, если сервер под Windows. Если ОбщегоНазначения.ЭтоWindowsСервер() Тогда Текст = РаботаСФайламиСлужебный.ИзвлечьТекстИзФайлаНаДиске(ПутьКФайлуНаДиске); - АдресВременногоХранилищаТекста = Новый ХранилищеЗначения(Текст); + АдресВременногоХранилищаТекста = Новый ХранилищеЗначения(Текст, Новый СжатиеДанных(9)); КонецЕсли; КонецЕсли; СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", Файл); СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; - Возврат РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ВладелецФайлов, СведенияОФайле); + Результат = РаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ВладелецФайлов, СведенияОФайле); + + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаФайла) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаФайла); + КонецЕсли; + + Возврат Результат; КонецФункции @@ -732,19 +803,16 @@ // Возвращаемое значение: // ОпределяемыйТип.ПрисоединенныйФайл - ссылка на созданный присоединенный файл. // -Функция ДобавитьФайл(ПараметрыФайла, - Знач АдресФайлаВоВременномХранилище, - Знач АдресВременногоХранилищаТекста = "", - Знач Описание = "", - Знач НоваяСсылкаНаФайл = Неопределено) Экспорт +Функция ДобавитьФайл(ПараметрыФайла, Знач АдресФайлаВоВременномХранилище, + Знач АдресВременногоХранилищаТекста = "", Знач Описание = "", Знач НоваяСсылкаНаФайл = Неопределено) Экспорт ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; - ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ПараметрыФайла.ИмяБезРасширения); - РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ПараметрыФайла.РасширениеБезТочки); Если Не ЗначениеЗаполнено(ВладелецФайлов) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не задано значение параметра %1 в %2.'"), "ПараметрыФайла.ВладелецФайлов", "РаботаСФайлами.ДобавитьФайл"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не задано значение параметра %1 в %2.'"), + "ПараметрыФайла.ВладелецФайлов", "РаботаСФайлами.ДобавитьФайл"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); // ДвоичныеДанные @@ -759,6 +827,8 @@ ГруппаФайлов = ПараметрыФайла.ГруппаФайлов; КонецЕсли; + ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ПараметрыФайла.ИмяБезРасширения); + РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ПараметрыФайла.РасширениеБезТочки); Если Не ЗначениеЗаполнено(РасширениеБезТочки) Тогда ЧастиИмениФайла = СтрРазделить(ИмяБезРасширения, ".", Ложь); Если ЧастиИмениФайла.Количество() > 1 Тогда @@ -785,7 +855,7 @@ Если НоваяСсылкаНаФайл = Неопределено Тогда ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов, "", ЗаголовокОшибки, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В этом случае параметр ""%1"" должен быть указан.'"), "НоваяСсылкаНаФайл")); + НСтр("ru = 'В этом случае должен быть указан параметр ""%1"".'"), "НоваяСсылкаНаФайл")); НоваяСсылкаНаФайл = Справочники[ИмяСправочника].ПолучитьСсылку(); Иначе @@ -793,8 +863,11 @@ Если Не Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСсылкаНаФайл)) Или Не ЗначениеЗаполнено(НоваяСсылкаНаФайл) Тогда - ВызватьИсключение НСтр("ru = 'Ошибка при добавлении присоединенного файла. - |Ссылка на новый файл не заполнена.'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при добавлении присоединенного файла: + |не указан параметр %1 в %2.'"), + "НоваяСсылкаНаФайл", "РаботаСФайлами.ДобавитьФайл"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ИмяСправочника = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( @@ -828,31 +901,19 @@ ЗаполнитьЗначенияСвойств(ПрисоединенныйФайл, ПараметрыФайла); - ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ПрисоединенныйФайл.ПутьКФайлу = ""; ПрисоединенныйФайл.Заполнить(Неопределено); - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - ИзвлекатьТекст = Метаданные.Справочники[ИмяСправочника].ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска; - - Если ИзвлекатьТекст И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыФайла, "Зашифрован", Ложь) <> Истина Тогда - - РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст(АдресВременногоХранилищаТекста, - ДвоичныеДанные, ПрисоединенныйФайл.Расширение); - - ПрисоединенныйФайл.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - ПрисоединенныйФайл.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - - Иначе - ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(""); - ПрисоединенныйФайл.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; + РаботаСФайламиСлужебный.ЗаполнитьИзвлеченныйТекст(ПрисоединенныйФайл, АдресВременногоХранилищаТекста, + ДвоичныеДанные); Если Не ЗначениеЗаполнено(ПрисоединенныйФайл.Изменил) Тогда ПрисоединенныйФайл.Изменил = Пользователи.АвторизованныйПользователь(); КонецЕсли; - Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(ПрисоединенныйФайл, АдресФайлаВоВременномХранилище, НоваяСсылкаНаФайл); + Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(ПрисоединенныйФайл, АдресФайлаВоВременномХранилище, + НоваяСсылкаНаФайл); МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайлов(ПрисоединенныйФайл); МенеджерФайла.ПередОбновлениемДанныхФайла(Контекст); @@ -877,9 +938,7 @@ КонецЕсли; СведенияОФайле.АдресВременногоХранилищаФайла = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( - Контекст, - "ПутьКФайлу", - АдресФайлаВоВременномХранилище); + Контекст, "ПутьКФайлу", АдресФайлаВоВременномХранилище); СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста; СведенияОФайле.ЗаписатьВИсторию = Истина; @@ -896,7 +955,6 @@ ОтменитьТранзакцию(); ИнформацияОбОшибке = ИнформацияОбОшибке(); - ШаблонСообщения = НСтр("ru = 'Ошибка при добавлении присоединенного файла ""%1"": |%2'"); КомментарийЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -904,13 +962,9 @@ ИмяБезРасширения + "." + РасширениеБезТочки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Файлы.Добавление присоединенного файла'", + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление присоединенного файла'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - КомментарийЖурналаРегистрации); + УровеньЖурналаРегистрации.Ошибка,,, КомментарийЖурналаРегистрации); МенеджерФайла.ПослеОбновленияДанныхФайла(Контекст, Ложь); @@ -1107,9 +1161,10 @@ Знач Приемник = Неопределено) Экспорт Если Не ЗначениеЗаполнено(ВладелецФайлов) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не задано значение параметра %1 в %2.'"), - "ВладелецФайлов","РаботаСФайлами.СконвертироватьФайлыВПрисоединенные"); + "ВладелецФайлов","РаботаСФайлами.СконвертироватьФайлыВПрисоединенные"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Источник = Неопределено Или Приемник = Неопределено Тогда @@ -1128,11 +1183,12 @@ ЗаголовокОшибки = НСтр("ru = 'Ошибка при конвертации присоединенных файлов.'"); Если Источник = Приемник Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ЗаголовокОшибки + Символы.ПС - + НСтр("ru = 'Справочник источник присоединенных файлов ""%1"" совпадает - |со справочником приемником.'"), - Источник); + + НСтр("ru = 'Справочник-источник присоединенных файлов ""%1"" совпадает + |со справочником-приемником в %2.'"), + Источник, "РаботаСФайлами.ПеренестиФайлыМеждуСправочникамиХранения"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ИмяПриемника = Метаданные.НайтиПоПолномуИмени(Приемник).Имя; @@ -1825,7 +1881,7 @@ Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьКаталогЖурналаСканирования", НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования, ИдентификаторКлиента)); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(Результат, Истина); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив(Результат, Истина); КонецПроцедуры #Область ДляВызоваИзДругихПодсистем @@ -1903,8 +1959,10 @@ Процедура ИзменитьСправочникХраненияФайлов(Знач ВладелецФайлов, ИмяСправочника = Неопределено) Экспорт Если Не ЗначениеЗаполнено(ВладелецФайлов) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не задано значение параметра %1 в %2.'"), "ВладелецФайлов","РаботаСФайлами.ИзменитьСправочникХраненияФайлов"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не задано значение параметра %1 в %2.'"), + "ВладелецФайлов","РаботаСФайлами.ИзменитьСправочникХраненияФайлов"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ЗаголовокОшибки = НСтр("ru = 'Ошибка при конвертации присоединенных файлов.'"); @@ -2163,8 +2221,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции // Возвращает ключи объектов настроек работы с файлами. // @@ -2205,12 +2262,7 @@ УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - Попытка - ИменаСправочников = РаботаСФайламиСлужебный.ИменаСправочниковХраненияФайлов(ТипЗнч(Источник.Ссылка)); - Исключение - ВызватьИсключение НСтр("ru = 'Ошибка при пометке на удаление присоединенных файлов.'") - + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; + ИменаСправочников = РаботаСФайламиСлужебный.ИменаСправочниковХраненияФайлов(ТипЗнч(Источник.Ссылка)); ТекстыЗапроса = Новый Массив; ШаблонЗапроса = @@ -2340,8 +2392,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#КонецОбласти + +#Область ОбработчикиПодписокНаСобытия // Обработчик подписки на событие ПередЗаписью для заполнения авто реквизитов присоединенного файла. // @@ -2442,9 +2495,11 @@ КонецЕсли; - СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(Источник))); + СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", + Метаданные.НайтиПоТипу(ТипЗнч(Источник))); - Если Не Источник.ЭтоГруппа И СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(Источник.ТекущаяВерсия) Тогда + Если Не Источник.ЭтоГруппа И СправочникПоддерживаетВозможностьХранитьВерсии + И ЗначениеЗаполнено(Источник.ТекущаяВерсия) Тогда РеквизитыТекущейВерсии = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Источник.ТекущаяВерсия, "Наименование"); @@ -2642,8 +2697,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Управление присоединенными файлами. +#КонецОбласти + +#Область УправлениеПрисоединеннымиФайлами Процедура СоздатьГиперссылкуФайлов(Форма, ДобавляемыйЭлемент, ВладелецПрисоединенныхФайлов, ПараметрыГиперссылки) @@ -3257,4 +3313,6 @@ Возврат "ИзПодменю"; КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl index 4d5598b86..498086fac 100644 --- a/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиВТомахСлужебный/Module.bsl @@ -34,7 +34,7 @@ // Процедура УстановитьПараметрыХраненияФайловВИнформационнойБазе(ПараметрыХранения) Экспорт - ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыХранения); + ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыХранения, Новый СжатиеДанных(9)); Константы.ПараметрыХраненияФайловВИБ.Установить(ХранилищеПараметров); КонецПроцедуры @@ -201,10 +201,10 @@ Если ТипЗнч(ДвоичныеДанныеИлиПуть) = Тип("Строка") Тогда - ФайлНаДиске = Новый Файл(ДвоичныеДанныеИлиПуть); - Если ФайлНаДиске.Существует() Тогда - ПрисоединенныйФайл.Размер = ФайлНаДиске.Размер(); - ПрисоединенныйФайл.Расширение = СтрЗаменить(ФайлНаДиске.Расширение, ".", ""); + ФайлВТоме = Новый Файл(ДвоичныеДанныеИлиПуть); + Если ФайлВТоме.Существует() Тогда + ПрисоединенныйФайл.Размер = ФайлВТоме.Размер(); + ПрисоединенныйФайл.Расширение = СтрЗаменить(ФайлВТоме.Расширение, ".", ""); Иначе ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -242,7 +242,7 @@ ПрисоединенныйФайл.Том = Неопределено; ПрисоединенныйФайл.ПутьКФайлу = ""; Если ЗаполнятьСлужебныйРеквизитХранилище Тогда - ПрисоединенныйФайл.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла); + ПрисоединенныйФайл.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла, Новый СжатиеДанных(9)); КонецЕсли; Иначе @@ -317,8 +317,8 @@ Функция УдалитьФайл(ПутьКФайлу) Экспорт Результат = Новый Структура("Имя,Успешно,ИнформацияОбОшибке", ПутьКФайлу, Истина, Неопределено); - ФайлНаДиске = Новый Файл(ПутьКФайлу); - Если Не ФайлНаДиске.Существует() Тогда + ФайлВТоме = Новый Файл(ПутьКФайлу); + Если Не ФайлВТоме.Существует() Тогда Возврат Результат; КонецЕсли; @@ -328,9 +328,9 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,,, СообщениеЖурналаРегистрации(ТекстСообщения)); - КаталогФайла = ФайлНаДиске.Путь; + КаталогФайла = ФайлВТоме.Путь; Попытка - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + ФайлВТоме.УстановитьТолькоЧтение(Ложь); УдалитьФайлы(ПутьКФайлу); // Удаляем каталог файла, если после удаления файла каталог стал пустым. @@ -408,12 +408,12 @@ ПутьКТому = ПолныйПутьТома(ПрисоединенныйФайлОбъект.Том); ТекущийПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла); - ФайлНаДиске = Новый Файл(ТекущийПутьКФайлу); + ФайлВТоме = Новый Файл(ТекущийПутьКФайлу); ИмяДляЗамены = ?(ПустаяСтрока(СтароеИмя), ПрисоединенныйФайлОбъект.Наименование, СтароеИмя); - НовоеИмяФайла = СтрЗаменить(ФайлНаДиске.ИмяБезРасширения, ИмяДляЗамены, НовоеИмя) + ФайлНаДиске.Расширение; + НовоеИмяФайла = СтрЗаменить(ФайлВТоме.ИмяБезРасширения, ИмяДляЗамены, НовоеИмя) + ФайлВТоме.Расширение; - НовыйПутьКФайлу = ФайлНаДиске.Путь - + РаботаСФайламиСлужебныйКлиентСервер.УникальноеИмяСПутем(ФайлНаДиске.Путь, НовоеИмяФайла); + НовыйПутьКФайлу = ФайлВТоме.Путь + + РаботаСФайламиСлужебныйКлиентСервер.УникальноеИмяСПутем(ФайлВТоме.Путь, НовоеИмяФайла); ПереместитьФайл(ТекущийПутьКФайлу, НовыйПутьКФайлу); @@ -662,7 +662,7 @@ КонецФункции -// Проверяет наличие файла на компьютере. +// Проверяет наличие файла в томе. // // Параметры: // ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - элемент справочника с файлом. @@ -670,7 +670,7 @@ // Возвращаемое значение: // Булево // -Функция ПрисоединенныйФайлНаходитсяНаДиске(ПрисоединенныйФайл) Экспорт +Функция ПрисоединенныйФайлНаходитсяВТоме(ПрисоединенныйФайл) Экспорт СвойстваФайла = СвойстваФайлаВТоме(ПрисоединенныйФайл); ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайла); @@ -708,7 +708,7 @@ Процедура ПроверкаСсылокНаНесуществующиеФайлыВТоме(Проверка, ПараметрыПроверки) Экспорт Если ОбщегоНазначения.РазделениеВключено() - Или Не ХранитьФайлыВТомахНаДиске() Тогда + Или Не ХранитьФайлыВТомах() Тогда Возврат; КонецЕсли; @@ -752,7 +752,7 @@ // Возвращаемое значение: // Булево // -Функция ХранитьФайлыВТомахНаДиске() Экспорт +Функция ХранитьФайлыВТомах() Экспорт УстановитьПривилегированныйРежим(Истина); СпособХраненияФайлов = Константы.СпособХраненияФайлов.Получить(); @@ -835,16 +835,16 @@ Для Каждого ИсправляемыйФайл Из Порция Цикл ПутьХраненияФайла = ПутиХраненияФайлов[ИсправляемыйФайл.Файл]; Если ПутьКТому = "" Тогда - ПутьКФайлуНаДиске = СокрП(ИсправляемыйФайл.ПолноеИмя); + ПутьКФайлВТоме = СокрП(ИсправляемыйФайл.ПолноеИмя); ИначеЕсли СтрНачинаетсяС(ИсправляемыйФайл.ПолноеИмя, ПутьКТому) Тогда - ПутьКФайлуНаДиске = СокрП(Сред(ИсправляемыйФайл.ПолноеИмя, СтрДлина(ПутьКТому) + 1)); + ПутьКФайлВТоме = СокрП(Сред(ИсправляемыйФайл.ПолноеИмя, СтрДлина(ПутьКТому) + 1)); Иначе - ПутьКФайлуНаДиске = Неопределено; + ПутьКФайлВТоме = Неопределено; КонецЕсли; - Если ПутьКФайлуНаДиске <> ПутьХраненияФайла Тогда + Если ПутьКФайлВТоме <> ПутьХраненияФайла Тогда ФайлДляЗаписи = ИсправляемыйФайл.Файл.ПолучитьОбъект(); - ФайлДляЗаписи.ПутьКФайлу = ПутьКФайлуНаДиске; + ФайлДляЗаписи.ПутьКФайлу = ПутьКФайлВТоме; ФайлДляЗаписи.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); ФайлДляЗаписи.Записать(); КонецЕсли; @@ -930,7 +930,7 @@ |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.Том"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстЗапросаПрисоединенныхФайлов", - "(" + СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + ")"); // @query-part + "(" + СтрСоединить(ТекстыЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС) + ")"); // @query-part-3 Запрос = Новый Запрос(ТекстЗапроса); Запрос.Параметры.Вставить("Тома", Тома); @@ -999,9 +999,9 @@ ДвоичныеДанныеИлиПуть.Записать(ПутьКФайлу); КонецЕсли; - ФайлНаДиске = Новый Файл(ПутьКФайлу); - ФайлНаДиске.УстановитьУниверсальноеВремяИзменения(ПрисоединенныйФайл.ДатаМодификацииУниверсальная); - ФайлНаДиске.УстановитьТолькоЧтение(Истина); + ФайлВТоме = Новый Файл(ПутьКФайлу); + ФайлВТоме.УстановитьУниверсальноеВремяИзменения(ПрисоединенныйФайл.ДатаМодификацииУниверсальная); + ФайлВТоме.УстановитьТолькоЧтение(Истина); Исключение @@ -1051,7 +1051,7 @@ КонецПроцедуры Процедура ОчиститьУдаленныеФайлы() Экспорт - Если НЕ ХранитьФайлыВТомахНаДиске() Тогда + Если НЕ ХранитьФайлыВТомах() Тогда Возврат; КонецЕсли; @@ -1602,7 +1602,7 @@ // Возвращаемое значение: // Булево // -Функция ХранитьФайлыВТомахНаДискеИИнформационнойБазе() +Функция ХранитьФайлыВТомахИИнформационнойБазе() УстановитьПривилегированныйРежим(Истина); Возврат Константы.СпособХраненияФайлов.Получить() = "ВИнформационнойБазеИТомахНаДиске"; @@ -1637,7 +1637,7 @@ ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла); + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла, Новый СжатиеДанных(9)); ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; КонецПроцедуры @@ -1703,7 +1703,7 @@ Продолжить; КонецЕсли; - ПолныйПутьФайлаНаДиске = СведенияОФайлеПуть.Значение; + ПолныйПутьФайлаВТоме = СведенияОФайлеПуть.Значение; НачатьТранзакцию(); Попытка @@ -1725,17 +1725,17 @@ Объект.ПутьКФайлу = ""; Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаВТоме); РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, ДвоичныеДанные); Иначе // В базе-приемнике файлы должны храниться в томах - переместим разархивированный файл на том. - ФайлИсходный = Новый Файл(ПолныйПутьФайлаНаДиске); + ФайлИсходный = Новый Файл(ПолныйПутьФайлаВТоме); ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Объект.Наименование, Объект.Расширение); ОбщегоНазначения.СократитьИмяФайла(ИмяФайла); ПолныйПутьНовый = ФайлИсходный.Путь + ИмяФайла; - ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); + ПереместитьФайл(ПолныйПутьФайлаВТоме, ПолныйПутьНовый); ДобавитьФайл(Объект, ПолныйПутьНовый); @@ -1795,32 +1795,32 @@ // * Отредактировал - Строка // * ДатаРедактирования - Строка // -Функция ЛишниеФайлыНаДиске() Экспорт - ТаблицаФайловНаДиске = Новый ТаблицаЗначений; +Функция ЛишниеФайлыВТоме() Экспорт + Результат = Новый ТаблицаЗначений; - ТаблицаФайловНаДиске.Колонки.Добавить("Имя"); - ТаблицаФайловНаДиске.Колонки.Добавить("Файл"); - ТаблицаФайловНаДиске.Колонки.Добавить("ИмяБезРасширения"); - ТаблицаФайловНаДиске.Колонки.Добавить("ПолноеИмя"); - ТаблицаФайловНаДиске.Колонки.Добавить("Путь"); - ТаблицаФайловНаДиске.Колонки.Добавить("Том"); - ТаблицаФайловНаДиске.Колонки.Добавить("Расширение"); - ТаблицаФайловНаДиске.Колонки.Добавить("СтатусПроверки"); - ТаблицаФайловНаДиске.Колонки.Добавить("Количество"); - ТаблицаФайловНаДиске.Колонки.Добавить("Отредактировал"); - ТаблицаФайловНаДиске.Колонки.Добавить("ДатаРедактирования"); + Результат.Колонки.Добавить("Имя"); + Результат.Колонки.Добавить("Файл"); + Результат.Колонки.Добавить("ИмяБезРасширения"); + Результат.Колонки.Добавить("ПолноеИмя"); + Результат.Колонки.Добавить("Путь"); + Результат.Колонки.Добавить("Том"); + Результат.Колонки.Добавить("Расширение"); + Результат.Колонки.Добавить("СтатусПроверки"); + Результат.Колонки.Добавить("Количество"); + Результат.Колонки.Добавить("Отредактировал"); + Результат.Колонки.Добавить("ДатаРедактирования"); - ТаблицаФайловНаДиске.Индексы.Добавить("ПолноеИмя"); - ТаблицаФайловНаДиске.Индексы.Добавить("СтатусПроверки"); + Результат.Индексы.Добавить("ПолноеИмя"); + Результат.Индексы.Добавить("СтатусПроверки"); - Возврат ТаблицаФайловНаДиске; + Возврат Результат; КонецФункции // Параметры: -// ТаблицаФайловНаДиске - см. РаботаСФайламиВТомахСлужебный.ЛишниеФайлыНаДиске +// ТаблицаФайловВТоме - см. РаботаСФайламиВТомахСлужебный.ЛишниеФайлыВТоме // Том - СправочникСсылка.ТомаХраненияФайлов - ссылка на том. // -Процедура ЗаполнитьЛишниеФайлы(ТаблицаФайловНаДиске, Том) Экспорт +Процедура ЗаполнитьЛишниеФайлы(ТаблицаФайловВТоме, Том) Экспорт ТипыФайлов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы(); @@ -1897,7 +1897,7 @@ СвойстваФайла.ПутьКФайлу = ПутьКФайлу; ПолныйПутьФайла = ПолноеИмяФайлаВТоме(СвойстваФайла); - СуществующийФайл = ТаблицаФайловНаДиске.НайтиСтроки(Новый Структура("ПолноеИмя", ПолныйПутьФайла)); + СуществующийФайл = ТаблицаФайловВТоме.НайтиСтроки(Новый Структура("ПолноеИмя", ПолныйПутьФайла)); ПоискПоАльтернативномуПути = Ложь; @@ -1908,7 +1908,8 @@ ПутьКФайлу = Лев(ПутьКФайлу, СтрДлина(ПутьКФайлу)-1); КонецЕсли; - Если Не СвойстваФайловойСистемыТома.ПробелВНачалеИмениФайла И СтрНайти(ПутьКФайлу, ПолучитьРазделительПути()+" ") > 0 Тогда + Если Не СвойстваФайловойСистемыТома.ПробелВНачалеИмениФайла + И СтрНайти(ПутьКФайлу, ПолучитьРазделительПути()+" ") > 0 Тогда ПараметрыФайла = Новый Файл(ПутьКФайлу); ПутьКФайлу = ПараметрыФайла.Путь+СокрЛП(ПараметрыФайла.Имя); КонецЕсли; @@ -1917,13 +1918,13 @@ СвойстваФайла.ПутьКФайлу = ПутьКФайлу; ПолныйПутьФайла = ПолноеИмяФайлаВТоме(СвойстваФайла); - СуществующийФайл = ТаблицаФайловНаДиске.НайтиСтроки(Новый Структура("ПолноеИмя", ПолныйПутьФайла)); + СуществующийФайл = ТаблицаФайловВТоме.НайтиСтроки(Новый Структура("ПолноеИмя", ПолныйПутьФайла)); ПоискПоАльтернативномуПути = Истина; КонецЕсли; КонецЕсли; Если СуществующийФайл.Количество() = 0 Тогда - НесуществующийФайл = ТаблицаФайловНаДиске.Добавить(); + НесуществующийФайл = ТаблицаФайловВТоме.Добавить(); НесуществующийФайл.Файл = ВерсияСсылка; НесуществующийФайл.ПолноеИмя = ПолныйПутьФайла; НесуществующийФайл.Расширение = Выборка.Расширение; @@ -2058,6 +2059,7 @@ | ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Том) КАК Том, | ОбъектМетаданных.ПутьКФайлу КАК ПутьКФайлу, | ОбъектМетаданных.Том КАК ТомСсылка, + | ОбъектМетаданных.ФайлХранилище КАК ФайлХранилище, | &Автор КАК Автор |ИЗ | &ОбъектМетаданных КАК ОбъектМетаданных @@ -2070,71 +2072,110 @@ | ОбъектМетаданных.Ссылка"; ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ПолноеИмяВерсийФайлов = Метаданные.Справочники.ВерсииФайлов.ПолноеИмя(); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОбъектМетаданных", ПолноеИмя); - - Если ОбъектМетаданных.Реквизиты.Найти("Автор") <> Неопределено Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Автор", "ОбъектМетаданных.Автор"); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Автор", "NULL"); - КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Автор", + ?(ОбъектМетаданных.Реквизиты.Найти("Автор") <> Неопределено, "ОбъектМетаданных.Автор", "NULL")); - // @query-part-2 - ПолеВладельца = ?(ПолноеИмя = "Справочник.ВерсииФайлов", "ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Владелец) ","Неопределено "); + ПолеВладельца = ?(ПолноеИмя = ПолноеИмяВерсийФайлов, "ПРЕДСТАВЛЕНИЕССЫЛКИ(ОбъектМетаданных.Владелец) ","Неопределено "); // @query-part-1, @query-part-2 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладельца", ПолеВладельца); Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Ссылка", Справочники.ТомаХраненияФайлов.ПустаяСсылка()); + Запрос.УстановитьПараметр("Ссылка", ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).ПустаяСсылка()); Запрос.УстановитьПараметр("ДоступныеТома", ДоступныеТома); Результат = Запрос.Выполнить().Выгрузить(); Пока Результат.Количество() > 0 Цикл Для Каждого СтрокаРезультата Из Результат Цикл - СвойстваФайлаВТоме = Новый Структура("Том, ПутьКФайлу", - СтрокаРезультата.ТомСсылка, СтрокаРезультата.ПутьКФайлу); - - ПутьКФайлу = ПолноеИмяФайлаВТоме(СвойстваФайлаВТоме); - Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда + Если НЕ ЗначениеЗаполнено(СтрокаРезультата.ТомСсылка) Тогда Продолжить; КонецЕсли; + Если Не ЗначениеЗаполнено(СтрокаРезультата.ПутьКФайлу) Тогда + Если СтрокаРезультата.Владелец <> Неопределено Тогда + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У версии ""%1"" файла ""%2"" не указан полный путь к файлу в томе ""%3"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); + Иначе + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У файла ""%1"" не указан полный путь к файлу в томе ""%2"".'"), + СтрокаРезультата.Файл, СтрокаРезультата.Том); + КонецЕсли; + + ЗарегистрироватьНесуществующийФайлВТоме(МодульКонтрольВеденияУчета, ПараметрыПроверки, + СтрокаРезультата, УточнениеПроблемы); + КонецЕсли; + + Если ТипЗнч(СтрокаРезультата.ФайлХранилище) = Тип("ХранилищеЗначения") + И СтрокаРезультата.ФайлХранилище.Получить() <> Неопределено Тогда + + Если СтрокаРезультата.Владелец <> Неопределено Тогда + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У версии ""%1"" файла ""%2"", хранящегося в томе ""%3"", избыточно хранятся двоичные данные в информационной базе.'"), + СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); + Иначе + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У файла ""%1"", хранящегося в томе ""%2"", избыточно хранятся двоичные данные в информационной базе.'"), + СтрокаРезультата.Файл, СтрокаРезультата.Том); + КонецЕсли; + + ЗарегистрироватьНесуществующийФайлВТоме(МодульКонтрольВеденияУчета, ПараметрыПроверки, + СтрокаРезультата, УточнениеПроблемы); + КонецЕсли; + + Если Не ЗначениеЗаполнено(СтрокаРезультата.ПутьКФайлу) Тогда + Продолжить; + КонецЕсли; + + ПолныйПутьТома = ПолныйПутьТома(СтрокаРезультата.ТомСсылка); + ПутьКФайлу = ПолныйПутьТома + СтрокаРезультата.ПутьКФайлу; ПроверяемыйФайл = Новый Файл(ПутьКФайлу); Если ПроверяемыйФайл.Существует() Тогда Продолжить; КонецЕсли; - СсылкаНаОбъект = СтрокаРезультата.ПроблемныйОбъект; Если СтрокаРезультата.Владелец <> Неопределено Тогда - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ""%1"" файла ""%2"" не существует в томе ""%3"".'"), - СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том); + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Версия ""%1"" файла ""%2"" не существует в томе ""%3"" (%4).'"), + СтрокаРезультата.Файл, СтрокаРезультата.Владелец, СтрокаРезультата.Том, + ПутьКФайлу); Иначе - УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл ""%1"" не существует в томе ""%2"".'"), - СтрокаРезультата.Файл, СтрокаРезультата.Том); + УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" не существует в томе ""%2"" (%3).'"), + СтрокаРезультата.Файл, СтрокаРезультата.Том, ПутьКФайлу); КонецЕсли; - Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СсылкаНаОбъект, ПараметрыПроверки); - - Проблема.УточнениеПроблемы = УточнениеПроблемы; - Если ЗначениеЗаполнено(СтрокаРезультата.Автор) Тогда - Проблема.Вставить("Ответственный", СтрокаРезультата.Автор); - КонецЕсли; - - МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); + ЗарегистрироватьНесуществующийФайлВТоме(МодульКонтрольВеденияУчета, ПараметрыПроверки, + СтрокаРезультата, УточнениеПроблемы); КонецЦикла; Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.ПроблемныйОбъект); - // @skip-check query-in-loop - Порционная обработка данных - Результат = Запрос.Выполнить().Выгрузить(); + Результат = Запрос.Выполнить().Выгрузить(); // @skip-check query-in-loop - Порционная обработка данных КонецЦикла; КонецПроцедуры +Процедура ЗарегистрироватьНесуществующийФайлВТоме(МодульКонтрольВеденияУчета, ПараметрыПроверки, + СтрокаРезультата, УточнениеПроблемы) + + Проблема = МодульКонтрольВеденияУчета.ОписаниеПроблемы(СтрокаРезультата.ПроблемныйОбъект, ПараметрыПроверки); + Проблема.УточнениеПроблемы = УточнениеПроблемы; + Если ЗначениеЗаполнено(СтрокаРезультата.Автор) Тогда + Проблема.Вставить("Ответственный", СтрокаРезультата.Автор); + КонецЕсли; + + МодульКонтрольВеденияУчета.ЗаписатьПроблему(Проблема, ПараметрыПроверки); + +КонецПроцедуры + Функция ПроверитьОбъектПрисоединенныхФайлов(ОбъектМетаданных) Если СтрЗаканчиваетсяНа(ОбъектМетаданных.Имя, РаботаСФайламиСлужебный.СуффиксСправочникаПрисоединенныеФайлы()) - Или ОбъектМетаданных.ПолноеИмя() = "Справочник.ВерсииФайлов" Тогда + Или ОбъектМетаданных.ПолноеИмя()= "Справочник.ВерсииФайлов" + Или ОбъектМетаданных.ПолноеИмя()= "Справочник.Файлы" Тогда Возврат ОбъектМетаданных.Реквизиты.Найти("ПутьКФайлу") <> Неопределено И ОбъектМетаданных.Реквизиты.Найти("Том") <> Неопределено; @@ -2172,16 +2213,17 @@ Обработчик.НачальноеЗаполнение = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.8.331"; - Обработчик.Процедура = "Справочники.ВерсииФайлов.ОбработатьПутьХраненияВерсий"; + Обработчик.Версия = "3.1.11.80"; + Обработчик.Процедура = "Справочники.ВерсииФайлов.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.Комментарий = НСтр("ru = 'Исправляет ошибочные пути хранения файлов в томе.'"); + Обработчик.Комментарий = НСтр("ru = 'Исправляет ошибочные пути хранения файлов в томах, а также удаление избыточные двоичных данных в версиях файлов.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("06354049-b702-4f27-8e99-f49b86f7f152"); Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; Обработчик.БлокируемыеОбъекты = "Справочник.ВерсииФайлов"; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ВерсииФайлов.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ЧитаемыеОбъекты = "Справочник.ВерсииФайлов"; Обработчик.ИзменяемыеОбъекты = "Справочник.ВерсииФайлов"; + Обработчик.Многопоточный = Истина; КонецПроцедуры @@ -2303,7 +2345,7 @@ Функция ТипХраненияФайла(Знач РазмерФайла, Знач РасширениеФайла) Экспорт ТипХранения = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - Если ХранитьФайлыВТомахНаДискеИИнформационнойБазе() Тогда + Если ХранитьФайлыВТомахИИнформационнойБазе() Тогда ПараметрыХранения = ПараметрыХраненияФайловВИнформационнойБазе(); Если РазмерФайла <= ПараметрыХранения.МаксимальныйРазмер Тогда diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index e1af4394d..a117b6edc 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Команды работы с файлами +#Область КомандыРаботыСФайлами // Открывает файл для просмотра или редактирования. // Если файл открывается для просмотра, тогда получает файл в рабочий каталог пользователя, @@ -80,7 +79,7 @@ Параметры.Вставить("ОбработчикРезультата", ОбработчикРезультата); ОписаниеОповещения = Новый ОписаниеОповещения("ДобавитьФайлыРасширениеПредложено", РаботаСФайламиСлужебныйКлиент, Параметры); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(ОписаниеОповещения); КонецПроцедуры @@ -356,12 +355,16 @@ КонецПроцедуры // Открывает форму списка файлов. -// +// // Параметры: // ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, // к которому прикреплены выбираемые файлы. +// ПараметрыФормы - см. ПараметрыОткрытияФормыСпискаФайлов +// ВладелецФормы - ФормаКлиентскогоПриложения +// ОповещениеОЗакрытии - ОписаниеОповещения // -Процедура ОткрытьФормуСпискаФайлов(Знач ВладелецФайлов) Экспорт +Процедура ОткрытьФормуСпискаФайлов(Знач ВладелецФайлов, Знач ПараметрыФормы = Неопределено, + ВладелецФормы = Неопределено, ОповещениеОЗакрытии = Неопределено) Экспорт Если РаботаСФайламиСлужебныйКлиент.Используется1СДокументооборотДляХраненияФайловОбъекта(ВладелецФайлов) Тогда @@ -370,16 +373,40 @@ // Конец ИнтеграцияС1СДокументооборотом Иначе - - ПараметрыФормы = Новый Структура(); - ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайлов); - ПараметрыФормы.Вставить("СкрыватьВладельца", Ложь); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыФормы); - + Если ПараметрыФормы = Неопределено Тогда + ПараметрыФормы = ПараметрыОткрытияФормыСпискаФайлов(ВладелецФайлов); + КонецЕсли; + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыФормы, ВладелецФормы, , , , + ОповещениеОЗакрытии); КонецЕсли; КонецПроцедуры +// Конструктор параметров открытия формы списка файлов для ОткрытьФормуСпискаФайлов. +// +// Параметры: +// ВладелецФайлов - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, +// к которому прикреплены выбираемые файлы. +// ФиксированныеНастройки - НастройкиКомпоновкиДанных - настройки динамического списка +// +// Возвращаемое значение: +// Структура: +// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - папка файлов или объект, +// к которому прикреплены выбираемые файлы. +// * СкрыватьВладельца - Булево - признак отображения/скрытия на форме владельца файлов. +// * ФиксированныеНастройки - НастройкиКомпоновкиДанных - настройки динамического списка. +// +Функция ПараметрыОткрытияФормыСпискаФайлов(ВладелецФайлов, ФиксированныеНастройки = Неопределено) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайлов); + ПараметрыФормы.Вставить("СкрыватьВладельца", Ложь); + ПараметрыФормы.Вставить("ФиксированныеНастройки", ФиксированныеНастройки); + + Возврат ПараметрыФормы; + +КонецФункции + // Открывает форму файла. // Может использоваться как обработчик открытия файла. // @@ -578,8 +605,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа со сканером. +#КонецОбласти + +#Область РаботаСоСканером // Открывает форму настройки сканирования из пользовательских настроек. // @@ -686,8 +714,9 @@ ВыполнитьОбработкуОповещения(ОповещениеВозврата, Результат); Возврат; ИначеЕсли ИспользоватьImageMagick И Не ЗначениеЗаполнено(ПутьКПрограммеКонвертации) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Не указан путь к программе %1. - |Объединение многостраничных документов выполняется штатными средствами.'"), "ImageMagick"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Не указан путь к приложению %1. + |Объединение многостраничных документов выполняется штатными средствами.'"), + "ImageMagick"); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Предупреждение", ТекстОшибки,, Истина); @@ -697,7 +726,6 @@ КонецЕсли; #Если Не ВебКлиент И Не МобильныйКлиент Тогда - Если ИспользоватьImageMagick Тогда ОповещениеРезультата = Новый ОписаниеОповещения("ПослеПроверкиНаличияПрограммыКонвертации", ЭтотОбъект, Контекст); НачатьПроверкуНаличияПрограммыКонвертации(ПутьКПрограммеКонвертации, ОповещениеРезультата); @@ -705,7 +733,6 @@ КонецЕсли; ОбъединитьВМногостраничныйФайлПродолжение(Контекст); - #КонецЕсли КонецПроцедуры @@ -802,9 +829,10 @@ КонецПроцедуры // Проверяет ограничения клиента для работы со сканером. +// Сканирование доступно в операционных системах Windows и Linux x86/x64. // // Возвращаемое значение: -// см. РаботаСФайламиСлужебныйКлиент.ДоступноСканирование +// Булево // Функция ДоступноСканирование() Экспорт Возврат РаботаСФайламиСлужебныйКлиент.ДоступноСканирование(); @@ -863,6 +891,8 @@ КонецПроцедуры +#КонецОбласти + #Область УправлениеПрисоединеннымиФайлами // Обработчик события ПриОткрытии управляемой формы владельца файла. @@ -1027,7 +1057,7 @@ ЗадатьВопросОЗаписиВладельца(ПараметрыОбработчика); Иначе ОповещениеОбУстановке = Новый ОписаниеОповещения("ПолеПредпросмотраПеретаскиваниеЗавершение", ЭтотОбъект, ПараметрыОбработчика); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОповещениеОбУстановке, , Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОповещениеОбУстановке, , Ложь); КонецЕсли; КонецПроцедуры @@ -1174,7 +1204,7 @@ Возврат КонецЕсли; - Если РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда + Если РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда Обработчик = Новый ОписаниеОповещения("НапечататьФайлПослеПолученияВерсииВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); РаботаСФайламиСлужебныйКлиент.ПолучитьФайлВерсииВРабочийКаталог(Обработчик, ПараметрыВыполнения.ДанныеФайла, @@ -1591,7 +1621,7 @@ ДополнительныеПараметры.Просмотр, ДополнительныеПараметры.ТолькоОдинФайл); ИначеЕсли ДополнительныеПараметры.Действие = "Перетаскивание" Тогда ОповещениеОбУстановке = Новый ОписаниеОповещения("ПолеПредпросмотраПеретаскиваниеЗавершение", ЭтотОбъект, ДополнительныеПараметры); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОповещениеОбУстановке, , Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОповещениеОбУстановке, , Ложь); КонецЕсли; КонецЕсли; @@ -1644,10 +1674,9 @@ Иначе - ПараметрыФормы = Новый Структура(); + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ВладелецФайла", ВладелецПрисоединенныхФайлов); ПараметрыФормы.Вставить("СкрыватьВладельца", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Форма.УникальныйИдентификатор); ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ПрисоединенныеФайлы", ПараметрыФормы); КонецЕсли; @@ -1803,7 +1832,7 @@ ТипЧисло = Новый ОписаниеТипов("Число"); НомерЭлемента = ТипЧисло.ПривестиЗначение(ПараметрыВыполнения.НомерЭлемента); Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("СсылкаНаФайл") - И РаботаСФайламиСлужебныйВызовСервера.ЕстьПравоДоступа("Добавление", ВладелецПрисоединенныхФайлов) Тогда //@Access-right-2 + И РаботаСФайламиСлужебныйВызовСервера.ЕстьПравоДоступа("Добавление", ВладелецПрисоединенныхФайлов) Тогда // @Access-right-2 Файл = ПараметрыПеретаскивания.Значение.Файл; Если Файл = Неопределено Тогда @@ -2086,4 +2115,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ 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..5031eeaf1 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСФайламиЛокализация/Module.bsl @@ -0,0 +1,46 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается для определения адреса объекта в облачном сервисе файлов. +// +// Параметры: +// Сервис - Строка - адрес облачного сервиса файлов, например, "https://dav.dropdav.com". +// Href - Строка - относительный URL объекта. +// АдресОбъекта - Строка - возвращаемое значение. +// +Процедура ПриОпределенииАдресаВОблачномСервисе(Знач Сервис, Знач Href, АдресОбъекта) Экспорт + + // Локализация + Если Сервис = "https://webdav.yandex.com" Тогда + АдресОбъекта = СтрЗаменить(Href, "https://webdav.yandex.com", "https://disk.yandex.com/client/disk"); + ИначеЕсли Сервис = "https://webdav.yandex.ru" Тогда + АдресОбъекта = СтрЗаменить(Href, "https://webdav.yandex.ru", "https://disk.yandex.ru/client/disk"); + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// Вызывается для определения списка облачных сервисов файлов. +// +// Параметры: +// Сервисы - СписокЗначений: +// * Значение - адрес облачного сервиса файлов. +// * Представление - название облачного сервиса файлов. +// +Процедура ПриОпределенииОблачныхСервисов(Сервисы) Экспорт + + // Локализация + Сервисы.Добавить("https://webdav.yandex.com", "Яндекс.Диск"); + // Конец Локализация + +КонецПроцедуры + + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиЛокализация/РаботаСФайламиЛокализация.mdo b/SSL/src/CommonModules/РаботаСФайламиЛокализация/РаботаСФайламиЛокализация.mdo new file mode 100644 index 000000000..61ab8460b --- /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 0cfc5f538..73fe5a69d 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -113,18 +113,6 @@ -КонецПроцедуры - -// Позволяет определить параметры штампов электронной подписи в подписанном табличном документе. -// -// Параметры: -// ПараметрыШтампа - Структура - возвращаемый параметр, со свойствами: -// * ТекстОтметки - Строка - описание расположения подлинника подписанного документа. -// * Логотип - Картинка - логотип, который будет выведен в штампе. -// Сертификат - СертификатКриптографии - сертификат, по которому формируется штамп электронной подписи. -// -Процедура ПриПечатиФайлаСоШтампом(ПараметрыШтампа, Сертификат) Экспорт - КонецПроцедуры // Позволяет изменить стандартную форму списка файлов. @@ -160,5 +148,21 @@ КонецПроцедуры +#Область УстаревшиеПроцедурыИФункции + +// Устарела. +// +// Параметры: +// ПараметрыШтампа - Структура - возвращаемый параметр, со свойствами: +// * ТекстОтметки - Строка - описание расположения подлинника подписанного документа. +// * Логотип - Картинка - логотип, который будет выведен в штампе. +// Сертификат - СертификатКриптографии - сертификат, по которому формируется штамп электронной подписи. +// +Процедура ПриПечатиФайлаСоШтампом(ПараметрыШтампа, Сертификат) Экспорт + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index aa8beba42..4964b2dec 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -10,9 +10,7 @@ // См. СозданиеНаОснованииПереопределяемый.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты) Экспорт - Объекты.Добавить(Метаданные.Справочники.Файлы); - КонецПроцедуры // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. @@ -23,13 +21,41 @@ // См. ПоискИУдалениеДублей.ТипыИсключаемыеИзВозможныхДублей Процедура ПриДобавленииТиповИсключаемыхИзВозможныхДублей(ИсключаемыеТипы) Экспорт - ОбщегоНазначенияКлиентСервер.ДополнитьМассив( - ИсключаемыеТипы, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы()); - + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИсключаемыеТипы, + Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы()); ИсключаемыеТипы.Добавить(Тип("СправочникСсылка.ХранилищеДвоичныхДанных")); КонецПроцедуры +Функция СправочникВерсийФайлов() Экспорт + Возврат Тип("СправочникСсылка.ВерсииФайлов"); +КонецФункции + +// Определяет, является ли переданный объект справочником Файлы. +// Возвращает Истину для объектов типа: метаданные, ссылка или объект. +// +// Параметры: +// ОбъектПроверки - ОбъектМетаданных +// - СправочникСсылка +// - СправочникОбъект +// +// Возвращаемое значение: +// Булево - если Истина, то это справочник файлы +// +Функция ЭтоСправочникФайлы(ОбъектПроверки) Экспорт + + Если ТипЗнч(ОбъектПроверки) = Тип("ОбъектМетаданных") И ОбъектПроверки = Метаданные.Справочники.Файлы Тогда + Возврат Истина; + ИначеЕсли ТипЗнч(ОбъектПроверки) = Тип("СправочникСсылка.Файлы") Тогда + Возврат Истина; + ИначеЕсли ТипЗнч(ОбъектПроверки) = Тип("СправочникОбъект.Файлы") Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Используется при выгрузке файлов для перехода в сервис (БТС). // // Параметры: @@ -84,8 +110,8 @@ // Процедура ЗаполнитьДополнительныеДанныеФайла(Результат, ПрисоединенныйФайл, ВерсияФайла = Неопределено) Экспорт - СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл))); - + СправочникПоддерживаетВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", + Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл))); Если СправочникПоддерживаетВозможностьХранитьВерсии И ЗначениеЗаполнено(ПрисоединенныйФайл.ТекущаяВерсия) Тогда ТекущаяВерсияФайла = ПрисоединенныйФайл.ТекущаяВерсия; Иначе @@ -134,8 +160,8 @@ ИмяКаталога = РабочийКаталогПользователя(); Если ЗначениеЗаполнено(ТекущаяВерсияФайла) Тогда - ПолноеИмяФайлаВРабочемКаталоге = РаботаСФайламиСлужебныйВызовСервера.ПолноеИмяФайлаВРабочемКаталоге(ТекущаяВерсияФайла, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - + ПолноеИмяФайлаВРабочемКаталоге = РаботаСФайламиСлужебныйВызовСервера.ПолноеИмяФайлаВРабочемКаталоге( + ТекущаяВерсияФайла, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); Результат.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге); КонецЕсли; Результат.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); @@ -257,9 +283,8 @@ НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. |Обратитесь к администратору.'"), РасширениеФайла); - Иначе - Возврат Ложь; КонецЕсли; + Возврат Ложь; КонецЕсли; Возврат Истина; @@ -331,7 +356,9 @@ // * СтарыйПутьКФайлу - Строка // * ПараметрыДобавленияФайла - см. РаботаСФайламиВТомахСлужебный.ПараметрыДобавленияФайла // -Функция КонтекстОбновленияФайла(ПрисоединенныйФайл, ДанныеФайла, СсылкаНаФайл = Неопределено, ТипХраненияФайла = Неопределено) Экспорт +Функция КонтекстОбновленияФайла(ПрисоединенныйФайл, ДанныеФайла, СсылкаНаФайл = Неопределено, + ТипХраненияФайла = Неопределено) Экспорт + Контекст = Новый Структура; Контекст.Вставить("ИзменяемыеРеквизиты", Новый Структура); Контекст.Вставить("СтарыйПутьКФайлу", ""); @@ -347,7 +374,7 @@ ЗаполнитьЗначенияСвойств(Контекст.ПараметрыДобавленияФайла, ПрисоединенныйФайл); Контекст.ПараметрыДобавленияФайла.ТипХраненияФайла = ТипХраненияФайла; - Если ТипЗнч(Контекст.ПрисоединенныйФайл) = Тип("СправочникСсылка.ВерсииФайлов") Тогда + Если ТипЗнч(Контекст.ПрисоединенныйФайл) = СправочникВерсийФайлов() Тогда Контекст.ПараметрыДобавленияФайла.ВладелецФайла = ПрисоединенныйФайл.Владелец.ВладелецФайла; КонецЕсли; Если ТипЗнч(ДанныеФайла) = Тип("Строка") И ЭтоАдресВременногоХранилища(ДанныеФайла) Тогда @@ -737,7 +764,7 @@ ОсновнойСправочникУказан = Ложь; Ошибки = Новый Массив; - Ошибки.Добавить(НСтр("ru = 'Ошибка при определении имен справочников для хранения файлов.'")); + Ошибки.Добавить(НСтр("ru = 'Невозможно определить имена справочников для хранения файлов.'")); Для каждого КлючИЗначение Из ИменаСправочников Цикл @@ -780,11 +807,11 @@ НСтр("ru = 'У владельца файлов типа ""%1"" |не имеется справочников для хранения файлов.'"), Строка(ТипВладельцаФайлов))); - ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС + Символы.ПС); + ВызватьИсключение(СтрСоединить(Ошибки, Символы.ПС + Символы.ПС), КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Ошибки.Количество() > 1 Тогда - ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС + Символы.ПС); + ВызватьИсключение(СтрСоединить(Ошибки, Символы.ПС + Символы.ПС), КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Возврат ИменаСправочников; @@ -842,8 +869,8 @@ КопияФайла.Записать(); Если ДоступнаЭлектроннаяПодпись Тогда - УстановленныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(КопируемыйФайл); - МодульЭлектроннаяПодпись.ДобавитьПодпись(КопияФайла.Ссылка, УстановленныеПодписи); + ПодписиОбъекта = МодульЭлектроннаяПодпись.ПодписиОбъекта(КопируемыйФайл); + МодульЭлектроннаяПодпись.ДобавитьПодпись(КопияФайла.Ссылка, ПодписиОбъекта); СертификатыИсточника = МодульЭлектроннаяПодпись.СертификатыШифрования(КопируемыйФайл); МодульЭлектроннаяПодпись.ЗаписатьСертификатыШифрования(КопияФайла, СертификатыИсточника); @@ -981,7 +1008,7 @@ // Функция ТипХраненияФайлов() Экспорт - Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске() + Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомах() И РаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов() Тогда Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; Иначе @@ -1002,7 +1029,7 @@ // Функция ТипХраненияФайла(Знач РазмерФайла, Знач РасширениеФайла) Экспорт - Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске() + Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомах() И РаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов() Тогда Возврат РаботаСФайламиВТомахСлужебный.ТипХраненияФайла(РазмерФайла, РасширениеФайла); Иначе @@ -1088,8 +1115,6 @@ Подписание = Ложь; Шифрование = Ложь; ПросмотрЗашифрованных = Ложь; - ДоступнаУсовершенствованнаяПодпись = Ложь; - ВидимостьИнструкции = Ложь; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда @@ -1099,8 +1124,6 @@ Подписание = МодульЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей(); Шифрование = МодульЭлектроннаяПодпись.ШифрованиеИРасшифровкаДанных(); ПросмотрЗашифрованных = МодульЭлектроннаяПодпись.РасшифровкаДанных(); - ДоступнаУсовершенствованнаяПодпись = МодульЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись(); - ВидимостьИнструкции = МодульЭлектроннаяПодписьСлужебный.ВидимостьСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); КонецЕсли; КонецЕсли; @@ -1133,13 +1156,12 @@ Элементы.СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование.Видимость = ДоступнаЭлектроннаяПодпись; Иначе - Элементы.ЭлектронныеПодписиПродлитьДействиеПодписей.Видимость = Подписание И ДоступнаУсовершенствованнаяПодпись; + Элементы.ЭлектронныеПодписиПродлитьДействиеПодписей.Видимость = Подписание; Элементы.ЭлектронныеПодписи.ИзменятьСоставСтрок = Подписание; Элементы.ЭлектронныеПодписиПодписать.Видимость = Подписание; Элементы.ЭлектронныеПодписиУдалить.Видимость = Подписание; Элементы.ГруппаЭлектронныеПодписи.Видимость = ДоступнаЭлектроннаяПодпись; Элементы.ГруппаСертификатыШифрования.Видимость = ПросмотрЗашифрованных И ДоступнаЭлектроннаяПодпись; - Элементы.Инструкция.Видимость = Подписание И ВидимостьИнструкции; Элементы.ФормаСохранитьВместеСПодписью.Видимость = Форма.ЭлектронныеПодписи.Количество() <> 0; КонецЕсли; КонецЕсли; @@ -1214,7 +1236,9 @@ КонецЕсли; МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ПодписиВОбъекте = МодульЭлектроннаяПодпись.УстановленныеПодписи(ПодписанныйФайл, Неопределено, Истина); + ПараметрыПолученияПодписей = МодульЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьДанныеМЧД = Истина; + ПодписиВОбъекте = МодульЭлектроннаяПодпись.ПодписиОбъекта(ПодписанныйФайл, ПараметрыПолученияПодписей); Если ПодписиВФорме.Количество() <> ПодписиВОбъекте.Количество() Тогда Возврат; // Если объект был изменен, результаты проверки не переносятся. @@ -1275,7 +1299,7 @@ ЕстьИзменения = Ложь; Для Каждого КлючИЗначение Из Свойства Цикл - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если КлючИЗначение.Ключ = "РезультатПроверкиПодписиПоМЧД" Тогда НовыйРезультат = Неопределено; Если ЗначениеЗаполнено(Подпись[КлючИЗначение.Ключ]) Тогда @@ -1290,7 +1314,7 @@ КонецЕсли; Продолжить; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Если Подпись[КлючИЗначение.Ключ] <> Свойства[КлючИЗначение.Ключ] Тогда ЕстьИзменения = Истина; @@ -1359,7 +1383,7 @@ Для Каждого ДанныеДляЗаписиНаСервере Из ПараметрыЗаписиИнформацииОШифровании.МассивДанныхДляЗанесенияВБазу Цикл - Если ТипЗнч(ДанныеДляЗаписиНаСервере.ВерсияСсылка) <> Тип("СправочникСсылка.ВерсииФайлов") Тогда + Если ТипЗнч(ДанныеДляЗаписиНаСервере.ВерсияСсылка) <> СправочникВерсийФайлов() Тогда АдресВременногоХранилищаОсновногоФайла = ДанныеДляЗаписиНаСервере.АдресВременногоХранилища; Продолжить; КонецЕсли; @@ -1425,39 +1449,21 @@ ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , ПараметрыЗаписиИнформацииОШифровании.УникальныйИдентификатор); ФайлОбъект.Зашифрован = ПараметрыЗаписиИнформацииОШифровании.Зашифровать; - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; // Чтобы прошла запись ранее подписанного объекта. ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - Если ПараметрыЗаписиИнформацииОШифровании.Зашифровать Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); - МодульЭлектроннаяПодписьСлужебный.ДобавитьСертификатыШифрования(ФайлСсылка, ПараметрыЗаписиИнформацииОШифровании.МассивОтпечатков); - КонецЕсли; - Иначе - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + Если ПараметрыЗаписиИнформацииОШифровании.Зашифровать Тогда + МодульЭлектроннаяПодписьСлужебный.ДобавитьСертификатыШифрования(ФайлСсылка, + ПараметрыЗаписиИнформацииОШифровании.МассивОтпечатков); + Иначе МодульЭлектроннаяПодписьСлужебный.ОчиститьСертификатыШифрования(ФайлСсылка); КонецЕсли; КонецЕсли; - МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - - Если Не ПараметрыЗаписиИнформацииОШифровании.Зашифровать И АдресВременногоХранилищаТекстаТекущейВерсии <> "" Тогда - - Если МетаданныеФайла.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекстаТекущейВерсии); - ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Иначе - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); - КонецЕсли; - - КонецЕсли; + ЗаполнитьИзвлеченныйТекст(ФайлОбъект, АдресВременногоХранилищаТекстаТекущейВерсии); МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ФайлСсылка)); ВозможностьХранитьВерсии = ОбщегоНазначения.ЕстьРеквизитОбъекта("ТекущаяВерсия", МетаданныеФайла); @@ -1562,7 +1568,7 @@ // Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста. Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, - АдресВременногоХранилищаТекста) Экспорт + АдресВременногоХранилищаТекста) Экспорт МетаданныеФайла = ФайлИлиВерсияСсылка.Метаданные(); ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; @@ -1583,30 +1589,25 @@ ЗаблокироватьДанныеДляРедактирования(ФайлИлиВерсияСсылка); ФайлИлиВерсияОбъект = ФайлИлиВерсияСсылка.ПолучитьОбъект(); - Если ФайлИлиВерсияОбъект <> Неопределено Тогда - - Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Если МетаданныеФайла.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста); - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - ФайлИлиВерсияОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Иначе - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ФайлИлиВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); - КонецЕсли; - УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); - КонецЕсли; - - Если РезультатИзвлечения = "НеИзвлечен" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; - - ПриЗаписиИзвлеченногоТекста(ФайлИлиВерсияОбъект); + Если ФайлИлиВерсияОбъект = Неопределено Тогда + ЗафиксироватьТранзакцию(); + Возврат; КонецЕсли; + + ЗаполнитьИзвлеченныйТекст(ФайлИлиВерсияОбъект, АдресВременногоХранилищаТекста); + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; + + Если РезультатИзвлечения = "НеИзвлечен" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + КонецЕсли; + + ПриЗаписиИзвлеченногоТекста(ФайлИлиВерсияОбъект); ЗафиксироватьТранзакцию(); Исключение @@ -2557,13 +2558,12 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.0.2.46"; - Обработчик.Комментарий = - НСтр("ru = 'Обновление универсальной даты и типа хранения элементов справочника Файлы.'"); + Обработчик.Версия = "3.1.11.80"; + Обработчик.Комментарий = НСтр("ru = 'Обновление универсальной даты, типа хранения файлов, а также удаление избыточные двоичных данных в справочнике Файлы.'"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("8b417c47-dd46-45ce-b59b-c675059c9020"); Обработчик.Процедура = "Справочники.Файлы.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.РежимВыполнения = "Отложенно"; - Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы"; + Обработчик.ЧитаемыеОбъекты = "Справочник.Файлы,Справочник.ВерсииФайлов"; Обработчик.ИзменяемыеОбъекты = "Справочник.Файлы,РегистрСведений.СведенияОФайлах"; Обработчик.БлокируемыеОбъекты = "Справочник.Файлы,Справочник.ВерсииФайлов"; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.Файлы.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; @@ -2667,13 +2667,10 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - СтароеИмя = "Роль.РаботаСПапкамиФайлов"; - НовоеИмя = "Роль.ДобавлениеИзменениеПапокИФайлов"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.4.1.1", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.4.1.1", + "Роль.РаботаСПапкамиФайлов", "Роль.ДобавлениеИзменениеПапокИФайлов", "СтандартныеПодсистемы"); КонецПроцедуры @@ -3103,10 +3100,10 @@ Если ЕстьВозможностьХранитьВерсии И Настройка.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьВерсии Тогда ТекстЗапроса = ТекстЗапроса + " | И ВерсииФайлов.Ссылка <> Файлы.ТекущаяВерсия - | И ВерсииФайлов.РодительскаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; // @query-part + | И ВерсииФайлов.РодительскаяВерсия <> ЗНАЧЕНИЕ(Справочник.ВерсииФайлов.ПустаяСсылка)"; // @query-part-1, @query-part-2 КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоНеГруппа", - ?(МетаданныеОбъектаФайлов.Иерархический, "НЕ Файлы.ЭтоГруппа", "ИСТИНА")); // @query-part + ?(МетаданныеОбъектаФайлов.Иерархический, "НЕ Файлы.ЭтоГруппа", "ИСТИНА")); // @query-part-2, @query-part-3 Возврат ТекстЗапроса; @@ -3199,7 +3196,11 @@ ИначеЕсли ЭтоАдресВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла) Тогда Возврат ПолучитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаФайла); Иначе - ВызватьИсключение НСтр("ru='Не поддерживаемый тип хранилища файлов.'"); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Некорректный тип хранилища файлов %1 в %2.'"), + СведенияОФайле.АдресВременногоХранилищаФайла, + "РаботаСФайламиСлужебный.ДвоичныеДанныеИзСведенийОФайле"), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецФункции @@ -3221,7 +3222,7 @@ ТаблицаНенужныхФайлов[0].ОбъемНенужныхФайлов, 0); Тома = РаботаСФайламиВТомахСлужебный.ДоступныеТома(); - ЛишниеФайлы = РаботаСФайламиВТомахСлужебный.ЛишниеФайлыНаДиске(); + ЛишниеФайлы = РаботаСФайламиВТомахСлужебный.ЛишниеФайлыВТоме(); Для Каждого Том Из Тома Цикл РаботаСФайламиВТомахСлужебный.ЗаполнитьЛишниеФайлы(ЛишниеФайлы, Том); КонецЦикла; @@ -3300,11 +3301,12 @@ КонецЕсли; ЭтоСлужебныйФайл = Ложь; - Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный",Источник.Метаданные()) Тогда - ЭтоСлужебныйФайл = Источник.Служебный; + Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный", Источник.Метаданные()) + И ТипЗнч(Источник.Служебный) = Тип("Булево") Тогда + ЭтоСлужебныйФайл = Источник.Служебный; КонецЕсли; - ЕстьФайлы = НЕ Источник.ПометкаУдаления И НЕ ЭтоСлужебныйФайл ИЛИ ЕстьФайлыУВладельца(ВладелецФайлов); + ЕстьФайлы = Не Источник.ПометкаУдаления И Не ЭтоСлужебныйФайл Или ЕстьФайлыУВладельца(ВладелецФайлов); Если МенеджерЗаписи.ЕстьФайлы <> ЕстьФайлы Тогда МенеджерЗаписи.ЕстьФайлы = ЕстьФайлы; ЗаписьИзменилась = Истина; @@ -3379,18 +3381,14 @@ Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + Возврат; // Стандартную обработку не переопределяем. + КонецЕсли; - // Стандартную обработку не переопределяем. - - Иначе - - Если СозданиеНачальногоОбраза Тогда - ПриОтправкеФайлаСозданиеНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, Получатель); - Иначе - ПриОтправкеФайлаСообщениеОбмена(ЭлементДанных, ОтправкаЭлемента, Получатель); - КонецЕсли; - - КонецЕсли + Если СозданиеНачальногоОбраза Тогда + ПриОтправкеФайлаСозданиеНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, Получатель); + Иначе + ПриОтправкеФайлаСообщениеОбмена(ЭлементДанных, ОтправкаЭлемента, Получатель); + КонецЕсли; КонецПроцедуры @@ -3430,16 +3428,16 @@ // Файлы в справочниках ПрисоединенныеФайлы // Копируем файл из тома в каталог создания начального образа. НовыйПутьФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - Строка(ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог")), - ЭлементДанных.Ссылка.Метаданные().Имя + "." + ЭлементДанных.Ссылка.УникальныйИдентификатор()); + Строка(ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог")), + ЭлементДанных.Ссылка.Метаданные().Имя + "." + ЭлементДанных.Ссылка.УникальныйИдентификатор()); Попытка // Данные файла могут быть очищены РаботаСФайламиВТомахСлужебный.СкопироватьФайл(ЭлементДанных.Ссылка, НовыйПутьФайла); Исключение СообщениеОбОшибке = НСтр("ru='Не удалось скопировать данные файла во временный каталог.'") - + Символы.ПС + Символы.ПС - + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + Символы.ПС + Символы.ПС + + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДляОбмена(), УровеньЖурналаРегистрации.Предупреждение, @@ -3492,13 +3490,13 @@ Возврат; КонецЕсли; - // Данные файла обрабатываем только в случае, если нет версий. + // Двоичные данные файла в реквизите ФайлХранилище обрабатываем только в случае, если нет версий. // Если версии есть, то двоичные данные будут обработаны при обработке версий. ОбработатьПолученныеФайлы = НЕ ЭлементДанных.ХранитьВерсии; Если Не ОбработатьПолученныеФайлы Тогда ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); КонецЕсли; - + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВерсииФайлов") Или (ЭтоЭлементРаботаСФайлами(ЭлементДанных) И ТипЗнч(ЭлементДанных) <> Тип("СправочникОбъект.ИдентификаторыОбъектовМетаданных")) Тогда @@ -3513,87 +3511,86 @@ КонецЕсли; - Если ОбработатьПолученныеФайлы Тогда + Если Не ОбработатьПолученныеФайлы Тогда + Возврат; + КонецЕсли; - Если Отправитель <> Неопределено - И ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, ЭлементДанных) Тогда + Если Отправитель <> Неопределено + И ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, ЭлементДанных) Тогда + + // Коллизия объекта (изменения зарегистрированы и на главном узле и на подчиненном). + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + Если ЭлементДанных.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); + НовыйТипХраненияФайла = ТипХраненияФайла(ЭлементДанных.Размер, ЭлементДанных.Расширение); + ЭлементДанных.ТипХраненияФайла = НовыйТипХраненияФайла; + + Если Не ЭлементДанных.ЭтоНовый() Тогда + ТипХраненияПредыдущейВерсииФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭлементДанных.Ссылка, + "ТипХраненияФайла"); + + Если ТипХраненияПредыдущейВерсииФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(ЭлементДанных.Ссылка); - // Коллизия объекта (изменения зарегистрированы и на главном узле и на подчиненном). - ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - Возврат; - КонецЕсли; - - Если ЭлементДанных.ЭтоГруппа Тогда - Возврат; - КонецЕсли; - - ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); - НовыйТипХраненияФайла = ТипХраненияФайла(ЭлементДанных.Размер, ЭлементДанных.Расширение); - ЭлементДанных.ТипХраненияФайла = НовыйТипХраненияФайла; - - Если Не ЭлементДанных.ЭтоНовый() Тогда - ТипХраненияПредыдущейВерсииФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ЭлементДанных.Ссылка, - "ТипХраненияФайла"); - - Если ТипХраненияПредыдущейВерсииФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - СвойстваФайла = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме(ЭлементДанных.Ссылка); - - Если ЗначениеЗаполнено(СвойстваФайла.Том) Тогда - ПутьДоФайла = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла); - РаботаСФайламиВТомахСлужебный.УдалитьФайл(ПутьДоФайла); - - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ЭлементДанных.ПутьКФайлу = ""; - КонецЕсли; - Иначе - УстановитьПривилегированныйРежим(Истина); - РегистрыСведений.ХранилищеФайлов.УдалитьДвоичныеДанные(ЭлементДанных.Ссылка); - УстановитьПривилегированныйРежим(Ложь); + Если ЗначениеЗаполнено(СвойстваФайла.Том) Тогда + ПутьДоФайла = РаботаСФайламиВТомахСлужебный.ПолноеИмяФайлаВТоме(СвойстваФайла); + РаботаСФайламиВТомахСлужебный.УдалитьФайл(ПутьДоФайла); + + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ЭлементДанных.ПутьКФайлу = ""; КонецЕсли; + Иначе + УстановитьПривилегированныйРежим(Истина); + РегистрыСведений.ХранилищеФайлов.УдалитьДвоичныеДанные(ЭлементДанных.Ссылка); + УстановитьПривилегированныйРежим(Ложь); КонецЕсли; + КонецЕсли; + + Если НовыйТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НовыйТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + // По обмену пришел элемент с хранением в базе - но в базе приемнике принято хранить в томах. + // Из служебного реквизита файл размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске. + ТипМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); + + Если ДвоичныеДанные = Неопределено Тогда - // По обмену пришел элемент с хранением в базе - но в базе приемнике принято хранить в томах. - // Из служебного реквизита файл размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске. - ТипМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); + ЭлементДанных.Том = Неопределено; + ЭлементДанных.ПутьКФайлу = Неопределено; - Если ДвоичныеДанные = Неопределено Тогда - - ЭлементДанных.Том = Неопределено; - ЭлементДанных.ПутьКФайлу = Неопределено; - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл ни в один из томов, т.к. он не существует. - |Возможно, файл удален антивирусом. - |%1.'"), - ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ЭлементДанных.Наименование, ЭлементДанных.Расширение)); - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, ТипМетаданных, ЭлементДанных.Ссылка, ТекстОшибки); - - Иначе - РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ЭлементДанных, ДвоичныеДанные, , Истина); - КонецЕсли; + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить файл ни в один из томов, т.к. он не существует. + |Возможно, файл удален антивирусом. + |%1.'"), + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ЭлементДанных.Наименование, + ЭлементДанных.Расширение)); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, ТипМетаданных, ЭлементДанных.Ссылка, ТекстОшибки); Иначе - - Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда - ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанные); - КонецЕсли; - - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ЭлементДанных.ПутьКФайлу = ""; - + РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ЭлементДанных, ДвоичныеДанные, , Истина); КонецЕсли; + Иначе + + Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда + ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанные); + КонецЕсли; + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ЭлементДанных.ПутьКФайлу = ""; + КонецЕсли; КонецПроцедуры - // Записывает двоичные данные файла в информационную базу. // // Параметры: @@ -3615,7 +3612,7 @@ // на одну единицу и возвращает полученный результат. // // Возвращаемое значение: -// Строка - Строка - длина 10 +// Строка - строка - длина 10 // Функция ПолучитьОчереднойИдентификаторОбъекта() @@ -3713,9 +3710,8 @@ КонецПроцедуры -// Очищает в регистре сведений рабочий каталог папки. // Параметры: -// СсылкаПапки - СправочникСсылка.ПапкиФайлов - владелец файла. +// СсылкаПапки - СправочникСсылка.ПапкиФайлов // Процедура ОчиститьРабочийКаталог(СсылкаПапки) Экспорт @@ -3734,38 +3730,44 @@ ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.РабочиеКаталогиФайлов"); ЭлементБлокировки.УстановитьЗначение("Пользователь", ТекущийПользователь); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПапкиФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Ссылка В ИЕРАРХИИ(&Ссылка)"; + Запрос.УстановитьПараметр("Ссылка", СсылкаПапки); + + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено; + УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); Попытка - Блокировка.Заблокировать(); + Выборка = Запрос.Выполнить().Выбрать(); - НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Папка.Установить(СсылкаПапки); - НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); - НаборЗаписей.Записать(); // удаляем записи - - // Для дочерних папок очищаем рабочие каталоги. - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Родитель = &Ссылка"; - - Запрос.УстановитьПараметр("Ссылка", СсылкаПапки); - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - ОчиститьРабочийКаталог(Выборка.Ссылка); // @skip-check query-in-loop - Рекурсивное удаление записей о файлах. - КонецЦикла; + Если ПакетныйРежим Тогда + НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + УдаляемаяЗапись = НаборЗаписей.Добавить(); + УдаляемаяЗапись.Папка = Выборка.Ссылка; + УдаляемаяЗапись.Пользователь = ТекущийПользователь; + КонецЦикла; + НаборЗаписей.Записать(РежимУдаления); + Иначе + Пока Выборка.Следующий() Цикл + НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Папка.Установить(Выборка.Ссылка); + НаборЗаписей.Отбор.Пользователь.Установить(ТекущийПользователь); + НаборЗаписей.Записать(); + КонецЦикла; + КонецЕсли; ЗафиксироватьТранзакцию(); - Исключение ОтменитьТранзакцию(); ВызватьИсключение; @@ -3773,7 +3775,6 @@ КонецПроцедуры - #Область ДругиеПроцедурыИФункции // Возвращает имя справочника для указанного владельца или вызывает исключение, @@ -3803,12 +3804,12 @@ Возврат ""; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ЗаголовокОшибки + Символы.ПС - + НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" - |нет справочников для хранения файлов.'"), - Строка(ВладелецФайлов), - Строка(ТипЗнч(ВладелецФайлов))); + + НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" нет справочников для хранения файлов.'"), + Строка(ВладелецФайлов), + Строка(ТипЗнч(ВладелецФайлов))), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ЗначениеЗаполнено(ИмяСправочника) Тогда @@ -3820,13 +3821,13 @@ Возврат ""; КонецЕсли; - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ЗаголовокОшибки + Символы.ПС - + НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" - |нет справочника ""%3"" для хранения файлов.'"), - Строка(ВладелецФайлов), - Строка(ТипЗнч(ВладелецФайлов)), - Строка(ИмяСправочника)); + + НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" нет справочника ""%3"" для хранения файлов.'"), + Строка(ВладелецФайлов), + Строка(ТипЗнч(ВладелецФайлов)), + Строка(ИмяСправочника)), + КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ОсновнойСправочник = ""; @@ -3845,18 +3846,12 @@ Возврат ""; КонецЕсли; - ШаблонПричиныОшибки = - НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" - |не указан основной справочник для хранения файлов.'") + Символы.ПС; - + ШаблонПричиныОшибки = НСтр("ru = 'У владельца файлов ""%1"" типа ""%2"" + |не указан основной справочник для хранения файлов.'") + Символы.ПС; ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонПричиныОшибки, Строка(ВладелецФайлов), Строка(ТипЗнч(ВладелецФайлов))); - - ТекстОшибки = ЗаголовокОшибки + Символы.ПС - + ПричинаОшибки + Символы.ПС - + ОкончаниеОшибки; - - ВызватьИсключение СокрЛП(ТекстОшибки); + ТекстОшибки = ЗаголовокОшибки + Символы.ПС + ПричинаОшибки + Символы.ПС + ОкончаниеОшибки; + ВызватьИсключение(СокрЛП(ТекстОшибки), КатегорияОшибки.ОшибкаКонфигурации); КонецФункции @@ -3965,12 +3960,8 @@ ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонПричиныОшибки, Строка(ВладелецФайлов)); - - ТекстОшибки = ЗаголовокОшибки + Символы.ПС - + ПричинаОшибки + Символы.ПС - + ОкончаниеОшибки; - - ВызватьИсключение СокрЛП(ТекстОшибки); + ТекстОшибки = ЗаголовокОшибки + Символы.ПС + ПричинаОшибки + Символы.ПС + ОкончаниеОшибки; + ВызватьИсключение(СокрЛП(ТекстОшибки), КатегорияОшибки.ОшибкаКонфигурации); КонецФункции @@ -4681,38 +4672,37 @@ КонецЕсли; Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - // Помещаем данные файла из тома в служебный реквизит справочника. РаботаСФайламиВТомахСлужебный.ПоместитьФайлВРеквизитСправочника(ЭлементДанных); - - Иначе - // Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - // Если есть возможность хранения версий файлов - двоичные данные берутся из текущей версии. - Если ЭлементДанных.Метаданные().Реквизиты.Найти("ТекущаяВерсия") <> Неопределено - И ЗначениеЗаполнено(ЭлементДанных.ТекущаяВерсия) Тогда - ИсточникДвоичныхДанных = ЭлементДанных.ТекущаяВерсия; - Иначе - ИсточникДвоичныхДанных = ЭлементДанных.Ссылка; - КонецЕсли; - Попытка - // Помещаем данные файла из информационной базы в служебный реквизит справочника. - АдресВоВременномХранилище = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ИсточникДвоичныхДанных,,Ложь); - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); - Исключение - // Возможно, файл не был найден. Отправку данных не прерываем. - // АПК:154-выкл - отсутствие данных файла штатная ситуация. - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДляОбмена(), - УровеньЖурналаРегистрации.Предупреждение,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - // АПК:154-вкл - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - КонецПопытки; - - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - + Возврат; КонецЕсли; + + // Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе + // Если есть возможность хранения версий файлов - двоичные данные берутся из текущей версии. + Если ЭлементДанных.Метаданные().Реквизиты.Найти("ТекущаяВерсия") <> Неопределено + И ЗначениеЗаполнено(ЭлементДанных.ТекущаяВерсия) Тогда + ИсточникДвоичныхДанных = ЭлементДанных.ТекущаяВерсия; + Иначе + ИсточникДвоичныхДанных = ЭлементДанных.Ссылка; + КонецЕсли; + Попытка + // Помещаем данные файла из информационной базы в служебный реквизит справочника. + АдресВоВременномХранилище = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ИсточникДвоичныхДанных,,Ложь); + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения( + ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); + Исключение + // Возможно, файл не был найден. Отправку данных не прерываем. + // АПК:154-выкл - отсутствие данных файла - штатная ситуация. + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииДляОбмена(), + УровеньЖурналаРегистрации.Предупреждение,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + // АПК:154-вкл + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + КонецПопытки; + + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); КонецПроцедуры @@ -4788,8 +4778,7 @@ // Заменяет двоичные данные файла в ИБ на данные во временном хранилище. Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, - Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, - Знач РеквизитыЗначения = Неопределено) + Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, Знач РеквизитыЗначения = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); ЭтоСсылка = Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)); @@ -4834,6 +4823,35 @@ КонецПроцедуры +Процедура ЗаполнитьИзвлеченныйТекст(ФайлОбъект, АдресВременногоХранилищаТекста, ДвоичныеДанные = Неопределено) Экспорт + + ИспользованиеПолнотекстовогоПоиска = (ФайлОбъект.Метаданные().ПолнотекстовыйПоиск + = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать); + + РеквизитыФайла = Новый Структура("Зашифрован", Ложь); + ЗаполнитьЗначенияСвойств(РеквизитыФайла, ФайлОбъект); + + Если ИспользованиеПолнотекстовогоПоиска И Не РеквизитыФайла.Зашифрован Тогда + + Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда + // При создании файла из шаблона хранилище значения копируется напрямую. + ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Возврат; + ИначеЕсли Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста, ДвоичныеДанные, + ФайлОбъект.Расширение); + ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; + ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; + Возврат; + КонецЕсли; + КонецЕсли; + + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); + +КонецПроцедуры + // Создает версию сохраняемого файла для сохранения в ИБ. // // Параметры: @@ -4965,20 +4983,8 @@ КонецЕсли; - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - Если Метаданные.Справочники.ВерсииФайлов.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - Версия.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - КонецЕсли; - КонецЕсли; - + ЗаполнитьИзвлеченныйТекст(Версия, СведенияОФайле.АдресВременногоХранилищаТекста); + Версия.Заполнить(Неопределено); Версия.Записать(); @@ -4990,64 +4996,6 @@ КонецФункции -// Обновляет свойства файла БЕЗ учета версий - двоичные данные, текст, дату изменения, -// а также другие необязательные свойства. -// -Процедура ОбновитьФайл(ИнформацияОФайле, ПрисоединенныйФайл) Экспорт - - ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("РаботаСФайлами.ДвоичныеДанныеФайла", "ПрисоединенныйФайл", - ПрисоединенныйФайл, Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип); - - РеквизитыЗначения = Новый Структура; - - ИмяБезРасширения = ""; - Если ИнформацияОФайле.Свойство("ИмяБезРасширения", ИмяБезРасширения) И ЗначениеЗаполнено(ИмяБезРасширения) Тогда - ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяБезРасширения); - РеквизитыЗначения.Вставить("Наименование", ИнформацияОФайле.ИмяБезРасширения); - КонецЕсли; - - Если НЕ ИнформацияОФайле.Свойство("ДатаМодификацииУниверсальная") - ИЛИ НЕ ЗначениеЗаполнено(ИнформацияОФайле.ДатаМодификацииУниверсальная) - ИЛИ ИнформацияОФайле.ДатаМодификацииУниверсальная > ТекущаяУниверсальнаяДата() Тогда - - // Заполнение текущей даты в формате универсального времени. - РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ТекущаяУниверсальнаяДата()); - Иначе - РеквизитыЗначения.Вставить("ДатаМодификацииУниверсальная", ИнформацияОФайле.ДатаМодификацииУниверсальная); - КонецЕсли; - - Если ИнформацияОФайле.Свойство("Редактирует") Тогда - РеквизитыЗначения.Вставить("Редактирует", ИнформацияОФайле.Редактирует); - КонецЕсли; - - РасширениеФайла = ""; - Если ИнформацияОФайле.Свойство("Расширение", РасширениеФайла) Тогда - РасширениеФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(РасширениеФайла); - РеквизитыЗначения.Вставить("Расширение", ИнформацияОФайле.Расширение); - КонецЕсли; - - Если ИнформацияОФайле.Свойство("Кодировка") И Не ПустаяСтрока(ИнформацияОФайле.Кодировка) Тогда - РегистрыСведений.КодировкиФайлов.ЗаписатьКодировкуВерсииФайла(ПрисоединенныйФайл, ИнформацияОФайле.Кодировка); - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ИнформацияОФайле.АдресФайлаВоВременномХранилище); - - МетаданныеФайла = Метаданные.НайтиПоТипу(ТипЗнч(ПрисоединенныйФайл)); - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - Если МетаданныеФайла.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(ИнформацияОФайле.АдресВременногоХранилищаТекста, ДвоичныеДанные, - ПрисоединенныйФайл.Расширение); - РеквизитыЗначения.Вставить("СтатусИзвлеченияТекста", РезультатИзвлеченияТекста.СтатусИзвлеченияТекста); - РеквизитыЗначения.Вставить("ТекстХранилище", РезультатИзвлеченияТекста.ТекстХранилище); - Иначе - РеквизитыЗначения.Вставить("СтатусИзвлеченияТекста", Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); - РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения("")); - КонецЕсли; - - ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайл, ДвоичныеДанные, РеквизитыЗначения); - -КонецПроцедуры - // Обновляет или создает версию Файла и возвращает ссылку на обновленную версию (или Ложь, если файл бинарно не // изменен). // @@ -5131,13 +5079,10 @@ Если СведенияОФайле.ХранитьВерсии Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка при записи новой версии присоединенных файлов.'"); - ОкончаниеОшибки = НСтр("ru = 'В этом случае запись версии файла невозможна.'"); - + ЗаголовокОшибки = НСтр("ru = 'Невозможно записать версию присоединенного файла.'"); ЗначенияРеквизитовФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "ВладелецФайла,ТекущаяВерсия"); - ИмяСправочникаХранилищаВерсийФайлов = ИмяСправочникаХраненияВерсийФайлов( - ТипЗнч(ЗначенияРеквизитовФайла.ВладелецФайла), "", ЗаголовокОшибки, ОкончаниеОшибки); + ТипЗнч(ЗначенияРеквизитовФайла.ВладелецФайла), "", ЗаголовокОшибки); Версия = Справочники[ИмяСправочникаХранилищаВерсийФайлов].СоздатьЭлемент(); Версия.РодительскаяВерсия = ЗначенияРеквизитовФайла.ТекущаяВерсия; @@ -5184,18 +5129,7 @@ Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); КонецЕсли; - Если СведенияОФайле.Зашифрован = Ложь И МетаданныеОбъекта.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - РезультатИзвлеченияТекста = ИзвлечьТекст(СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда - Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; - КонецЕсли; - Иначе - Версия.ТекстХранилище = Новый ХранилищеЗначения(""); - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - + ЗаполнитьИзвлеченныйТекст(Версия, СведенияОФайле.АдресВременногоХранилищаТекста); Версия.Заполнить(Неопределено); Контекст = КонтекстОбновленияФайла(Версия, СведенияОФайле.АдресВременногоХранилищаФайла, СсылкаНаВерсию, ТипХраненияФайла); @@ -5327,23 +5261,8 @@ ХранениеВерсии = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Версия, "ТипХраненияФайла, Том, ПутьКФайлу"); ФайлОбъект.ТекущаяВерсия = Версия; - Если АдресВременногоХранилищаТекста <> Неопределено - И МетаданныеСправочника.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - - Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; - Иначе - РезультатИзвлеченияТекста = ИзвлечьТекст(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - ФайлОбъект.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - КонецЕсли; - - Иначе - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(""); - КонецЕсли; - + ЗаполнитьИзвлеченныйТекст(ФайлОбъект, АдресВременногоХранилищаТекста); + ЗаполнитьЗначенияСвойств(ФайлОбъект, ХранениеВерсии); ФайлОбъект.Записать(); @@ -5408,7 +5327,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) - |превышает максимально допустимый размер файла (%3 Мб).'"), + |превышает максимально допустимый размер %3 Мб.'"), Имя, РаботаСФайламиСлужебныйКлиентСервер.ПредставлениеРазмераФайла(РазмерВМб), РаботаСФайламиСлужебныйКлиентСервер.ПредставлениеРазмераФайла(РазмерВМбМакс)); @@ -5704,6 +5623,7 @@ ЭлектронныеПодписи = СписокЭлектронныхПодписей(Источник, Контекст.УникальныйИдентификатор); МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл @@ -5720,10 +5640,9 @@ РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(НоваяСтрока, ТекущаяДатаСеанса()); КонецЕсли; - ДвоичныеДанныеСертификата = ЭлектроннаяПодписьФайла.Сертификат.Получить(); - Если ДвоичныеДанныеСертификата <> Неопределено Тогда + Если ЭлектроннаяПодписьФайла.Сертификат <> Неопределено Тогда НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище( - ДвоичныеДанныеСертификата, Контекст.УникальныйИдентификатор); + ЭлектроннаяПодписьФайла.Сертификат, Контекст.УникальныйИдентификатор); КонецЕсли; КонецЦикла; @@ -5748,16 +5667,20 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(Источник.Ссылка, Неопределено, Истина); - // Локализация + ПараметрыПолученияПодписей = МодульЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьДанныеМЧД = Истина; + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + ЭлектронныеПодписи = МодульЭлектроннаяПодпись.ПодписиОбъекта(Источник.Ссылка, ПараметрыПолученияПодписей); + + // СтандартныеПодсистемы.МашиночитаемыеДоверенности МодульМашиночитаемыеДоверенностиФНССлужебный = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный"); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Для Каждого ЭлектроннаяПодписьФайла Из ЭлектронныеПодписи Цикл @@ -5765,7 +5688,7 @@ АдресПодписи = ПоместитьВоВременноеХранилище(ЭлектроннаяПодписьФайла.Подпись, УникальныйИдентификатор); ЭлектроннаяПодписьФайла.Вставить("АдресПодписи", АдресПодписи); - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(ЭлектроннаяПодписьФайла.РезультатПроверкиПодписиПоМЧД) И МодульМашиночитаемыеДоверенностиФНССлужебный <> Неопределено Тогда @@ -5773,7 +5696,7 @@ МодульМашиночитаемыеДоверенностиФНССлужебный.ДобавитьИнформациюМЧД(ЭлектроннаяПодписьФайла, УникальныйИдентификатор); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности КонецЦикла; @@ -6081,7 +6004,7 @@ ЗафиксироватьТранзакцию(); Возврат Ложь; КонецЕсли; - Если ТипЗнч(ПрисоединенныйФайл) <> Тип("СправочникСсылка.ВерсииФайлов") + Если ТипЗнч(ПрисоединенныйФайл) <> СправочникВерсийФайлов() И ЗначениеЗаполнено(ПрисоединенныйФайлОбъект.Редактирует) Тогда ЗафиксироватьТранзакцию(); Возврат Ложь; @@ -6773,6 +6696,8 @@ // Вызывает метод GET на сервере webdav и возвращает адрес загруженного файла во временном хранилище. Функция ВызватьМетодGET(АдресФайлаHRef, ИдентификаторEtag, ПараметрыСинхронизации, ДатаМодификацииФайла = Неопределено, ДлинаФайла = Неопределено) + ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(Истина); + Результат = Новый Структура("Успешно, АдресВременныхДанных, ТекстОшибки"); СтруктураHref = СтруктураURIРаскодированная(АдресФайлаHRef); @@ -6852,8 +6777,8 @@ ПараметрыСинхронизации = ПараметрыФайла.ПараметрыСинхронизации; ТекстСобытия = НСтр("ru = 'Загрузка файла с сервера: %1'"); - ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, ПараметрыФайла.ИмяФайла), - ПараметрыСинхронизации.УчетнаяЗапись); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, + ПараметрыФайла.ИмяФайла), ПараметрыСинхронизации.УчетнаяЗапись); РезультатЗагрузки = ВызватьМетодGET(АдресФайла, ИдентификаторEtag, ПараметрыСинхронизации, ДатаМодификацииФайла, ДлинаФайла); @@ -6897,7 +6822,8 @@ Иначе - РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаСуществующегоФайла, "ХранитьВерсии, ТекущаяВерсия"); + РеквизитыФайла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаСуществующегоФайла, + "ХранитьВерсии, ТекущаяВерсия"); Режим = ?(РеквизитыФайла.ХранитьВерсии, "ФайлСВерсией", "Файл"); СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле(Режим); @@ -6928,7 +6854,8 @@ ЗаписатьИнформациюОШифровании(СсылкаСуществующегоФайла, ПараметрыЗаписиИнформацииОШифровании); Иначе - РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияФайла(СсылкаСуществующегоФайла, СведенияОФайле, Истина, "", "", Ложь); + РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияФайла(СсылкаСуществующегоФайла, + СведенияОФайле, Истина, "", "", Ложь); КонецЕсли; НовыйФайл = СсылкаСуществующегоФайла; @@ -6938,12 +6865,14 @@ ФайлUID1C = Строка(НовыйФайл.УникальныйИдентификатор()); ОбновитьUID1CФайла(АдресФайла, ФайлUID1C, ПараметрыСинхронизации); - ЗапомнитьСерверныеДанныеСсылки(НовыйФайл, АдресФайла, ИдентификаторEtag, ЭтоФайл, ОбъектВладелец, Ложь, ПараметрыСинхронизации.УчетнаяЗапись); + ЗапомнитьСерверныеДанныеСсылки(НовыйФайл, АдресФайла, ИдентификаторEtag, ЭтоФайл, ОбъектВладелец, Ложь, + ПараметрыСинхронизации.УчетнаяЗапись); ТекстСообщения = НСтр("ru = 'Загружен файл из облачного сервиса: ""%1""'"); СтатусДляЖурналаРегистрации = УровеньЖурналаРегистрации.Информация; Иначе - ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл ""%1"" из облачного сервиса по причине:'") + " " + Символы.ПС + РезультатЗагрузки.ТекстОшибки; + ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл ""%1"" из облачного сервиса по причине:'") + " " + + Символы.ПС + РезультатЗагрузки.ТекстОшибки; СтатусДляЖурналаРегистрации = УровеньЖурналаРегистрации.Ошибка; КонецЕсли; @@ -7519,7 +7448,7 @@ // Href есть всегда, иначе это критическая ошибка. НайденныйHref = ВычислитьXPath("./*[local-name()='href']", КонтекстДокументаXML, НайденныйResponse).ПолучитьСледующий(); Если НайденныйHref = Неопределено Тогда - ТекстОшибки = НСтр("ru = 'Ошибка ответа от сервера: не найден HREF в %1'"); + ТекстОшибки = НСтр("ru = 'Облачный сервис файлов вернул некорректный ответ без HREF в %1.'"); ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, АдресСервера); КонецЕсли; @@ -7822,7 +7751,7 @@ МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); МодульЭлектроннаяПодписьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСервер"); - ПодписиВФайле = МодульЭлектроннаяПодпись.УстановленныеПодписи(ФайлСсылка); + ПодписиВФайле = МодульЭлектроннаяПодпись.ПодписиОбъекта(ФайлСсылка); ОшибкаНеУдалосьПрочитатьДанныеПодписи = ""; @@ -8547,11 +8476,10 @@ // отправим новый на сервер СтрокаТаблицы.Наименование = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтрокаТаблицы.Наименование, "-"); - СтрокаТаблицы.ToHref = ЗакончитьБезСлеша(АдресСервера) + НачатьСлешем(ЗакончитьБезСлеша(РассчитатьHref(СтрокаТаблицы,ТаблицаФайлов))); + СтрокаТаблицы.ToHref = ЗакончитьБезСлеша(АдресСервера) + + НачатьСлешем(ЗакончитьБезСлеша(РассчитатьHref(СтрокаТаблицы,ТаблицаФайлов))); - Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(СтрокаТаблицы.ФайлСсылка) Тогда - ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); - ИначеЕсли СтрокаТаблицы.ЭтоПапка Тогда + Если ОбщегоНазначения.ОбъектЯвляетсяГруппой(СтрокаТаблицы.ФайлСсылка) Или СтрокаТаблицы.ЭтоПапка Тогда ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); Иначе @@ -8559,12 +8487,13 @@ СтрокаТаблицы.ToHref = СтрокаТаблицы.ToHref + ".p7m"; КонецЕсли; - СтрокаТаблицы.ToEtag = ВызватьМетодPUT(СтрокаТаблицы.ToHref, СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации, СтрокаТаблицы.ЭтоФайл); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") И СтрокаТаблицы.ПодписанЭП Тогда + СтрокаТаблицы.ToEtag = ВызватьМетодPUT(СтрокаТаблицы.ToHref, СтрокаТаблицы.ФайлСсылка, + ПараметрыСинхронизации, СтрокаТаблицы.ЭтоФайл); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") + И СтрокаТаблицы.ПодписанЭП Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(СтрокаТаблицы.ФайлСсылка); + ЭлектронныеПодписи = МодульЭлектроннаяПодпись.ПодписиОбъекта(СтрокаТаблицы.ФайлСсылка); НомерПодписи = 0; Для Каждого Подпись Из ЭлектронныеПодписи Цикл @@ -9269,16 +9198,35 @@ | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &Файл"; Запрос.УстановитьПараметр("Файл", ВладелецФайла); - Таблица = Запрос.Выполнить().Выгрузить(); - Если Таблица.Количество() > 0 Тогда - Возврат ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Таблица[0]); - КонецЕсли; + + Пока Таблица.Количество() > 0 Цикл + Результат = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Таблица[0]); + Результат.Вставить("АдресПапкиВОблачномСервисе", АдресВОблачномСервисе(Результат.Сервис, Результат.Href)); + Возврат Результат; + КонецЦикла; Возврат Неопределено; КонецФункции +Функция АдресВОблачномСервисе(Сервис, Href) + + АдресОбъекта = Href; + + Если Не ПустаяСтрока(Сервис) Тогда + Если Сервис = "https://dav.box.com/dav" Тогда + АдресОбъекта = "https://app.box.com/files/0/"; + ИначеЕсли Сервис = "https://dav.dropdav.com" Тогда + АдресОбъекта = "https://www.dropbox.com/home/"; + КонецЕсли; + РаботаСФайламиЛокализация.ПриОпределенииАдресаВОблачномСервисе(Сервис, Href, АдресОбъекта); + КонецЕсли; + + Возврат АдресОбъекта; + +КонецФункции + // Возвращает признак принадлежности узла к плану обмена РИБ. // // Параметры: @@ -9302,6 +9250,47 @@ #Область ИзвлечениеТекста +Функция КоличествоВерсийСНеизвлеченнымТекстом() Экспорт + + ТекстыЗапроса = Новый Массив; + Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл + + ТекстЗапроса = + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(Файлы.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | &ИмяСправочника КАК Файлы + |ГДЕ + | Файлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), + | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + Если Тип = СправочникВерсийФайлов() Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Владелец.Зашифрован"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + | И НЕ Файлы.Зашифрован"; + КонецЕсли; + КонецЕсли; + + МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + МетаданныеСправочникаФайлов.Имя); + ТекстыЗапроса.Добавить(ТекстЗапроса); + + КонецЦикла; + + КоличествоФайлов = 0; + Запрос = Новый Запрос(СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ" + Символы.ПС)); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; + КонецЕсли; + + Возврат КоличествоФайлов; + +КонецФункции + Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(ИмяСправочника, ЧислоФайловВВыборке, ПолучитьВсеФайлы, ДополнительныеПоля) @@ -9345,8 +9334,7 @@ КонецЕсли; КонецЕсли; - СтрокаЗамены = ?(ПолучитьВсеФайлы, "ВЫБРАТЬ", // @query-part - "ВЫБРАТЬ ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")); // @query-part + СтрокаЗамены = ?(ПолучитьВсеФайлы, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")); // @query-part-1, @query-part-2 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 1", СтрокаЗамены); // @query-part ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); Возврат ТекстЗапроса; @@ -9429,15 +9417,19 @@ КонецПроцедуры // Извлекает текст из временного хранилища или из двоичных данных, возвращает статус извлечения. -// +// // Параметры: -// АдресВременногоХранилищаТекста - Строка -// ДвоичныеДанные - ДвоичныеДанные -// - Неопределено -// Расширение - Строка -// - Неопределено -// -Функция ИзвлечьТекст(Знач АдресВременногоХранилищаТекста, Знач ДвоичныеДанные = Неопределено, Знач Расширение = Неопределено) Экспорт +// АдресВременногоХранилищаТекста - Строка +// ДвоичныеДанные - ДвоичныеДанные +// Расширение - Строка +// +// Возвращаемое значение: +// Структура: +// * СтатусИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов +// * ТекстХранилище - ХранилищеЗначения +// +Функция ИзвлечьТекст(Знач АдресВременногоХранилищаТекста, Знач ДвоичныеДанные = Неопределено, + Знач Расширение = Неопределено) Экспорт УстановитьОтключениеБезопасногоРежима(Истина); @@ -9495,17 +9487,13 @@ Отказ = Ложь; ОбщиеНастройки = РаботаСФайламиСлужебныйПовтИсп.НастройкиРаботыСФайлами().ОбщиеНастройки; - РасширениеИмениФайла = - ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); - + РасширениеИмениФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( ОбщиеНастройки.СписокРасширенийТекстовыхФайлов, РасширениеИмениФайла); Если РасширениеФайлаВСписке Тогда - ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстИзТекстовогоФайла( ИмяФайла, Кодировка, Отказ); - Иначе Попытка @@ -9518,17 +9506,11 @@ КонецПопытки; Если ПустаяСтрока(ИзвлеченныйТекст) Тогда - - РасширениеИмениФайла = - ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла); - РасширениеФайлаВСписке = РаботаСФайламиСлужебныйКлиентСервер.РасширениеФайлаВСписке( ОбщиеНастройки.СписокРасширенийФайловOpenDocument, РасширениеИмениФайла); - Если РасширениеФайлаВСписке Тогда ИзвлеченныйТекст = РаботаСФайламиСлужебныйКлиентСервер.ИзвлечьТекстOpenDocument(ИмяФайла, Отказ); КонецЕсли; - КонецЕсли; КонецЕсли; @@ -9827,7 +9809,7 @@ Если НЕ ЗначениеЗаполнено(ТекущееУсловияИсключений) Тогда ТекущееУсловияИсключений = "ИСТИНА"; КонецЕсли; - ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&УсловияИсключений", ТекущееУсловияИсключений); // @Query-part-2 + ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&УсловияИсключений", ТекущееУсловияИсключений); // @Query-part-1 ТекстыЗапроса.Добавить(СтрЗаменить(ТекущийТекстЗапроса, "&ИмяСправочника", "Справочник." + КлючИЗначение.Ключ)); КонецЦикла; @@ -9854,8 +9836,9 @@ МассивЗапрещенныхРасширений.Добавить(ВРег(Расширение)); КонецЕсли; КонецЦикла; - СписокЗапрещенныхРасширенийВБазе = СтрСоединить(МассивЗапрещенныхРасширений, " "); + Если ОбновитьСписокЗапрещенныхРасширений Тогда + СписокЗапрещенныхРасширенийВБазе = СокрЛП(СтрСоединить(МассивЗапрещенныхРасширений, " ")); Константы.СписокЗапрещенныхРасширений.Установить(СписокЗапрещенныхРасширенийВБазе); КонецЕсли; @@ -9863,19 +9846,20 @@ Процедура ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных() Экспорт - СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); + СписокЗапрещенныхРасширений = СписокЗапрещенныхРасширений(); ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Ложь; СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); МассивЗапрещенныхРасширенийОбластиДанных = СтрРазделить(СписокЗапрещенныхРасширенийОбластиДанных, " "); - Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл + Для Каждого Расширение Из СписокЗапрещенныхРасширений Цикл Если МассивЗапрещенныхРасширенийОбластиДанных.Найти(ВРег(Расширение)) = Неопределено Тогда МассивЗапрещенныхРасширенийОбластиДанных.Добавить(ВРег(Расширение)); ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Истина; КонецЕсли; КонецЦикла; - СписокЗапрещенныхРасширенийОбластиДанных = СтрСоединить(МассивЗапрещенныхРасширенийОбластиДанных, " "); + Если ОбновитьСписокЗапрещенныхРасширенийОбластиДанных Тогда + СписокЗапрещенныхРасширенийОбластиДанных = СокрЛП(СтрСоединить(МассивЗапрещенныхРасширенийОбластиДанных, " ")); Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); КонецЕсли; @@ -9894,52 +9878,11 @@ КонецЕсли; КонецЦикла; Если ОбновитьСписокРасширений Тогда - Константы.СписокРасширенийТекстовыхФайлов.Установить(СтрСоединить(РасширенияТекстовыхФайлов, " ")); + Константы.СписокРасширенийТекстовыхФайлов.Установить(СокрЛП(СтрСоединить(РасширенияТекстовыхФайлов, " "))); КонецЕсли; КонецПроцедуры -Функция КоличествоВерсийСНеизвлеченнымТекстом() Экспорт - - ТекстыЗапроса = Новый Массив; - Для Каждого Тип Из Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы() Цикл - - ТекстЗапроса = - "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(Файлы.Ссылка), 0) КАК КоличествоФайлов - |ИЗ - | &ИмяСправочника КАК Файлы - |ГДЕ - | Файлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), - | ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Если Тип = Тип("СправочникСсылка.ВерсииФайлов") Тогда - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Владелец.Зашифрован"; - Иначе - ТекстЗапроса = ТекстЗапроса + " - | И НЕ Файлы.Зашифрован"; - КонецЕсли; - КонецЕсли; - - МетаданныеСправочникаФайлов = Метаданные.НайтиПоТипу(Тип); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + МетаданныеСправочникаФайлов.Имя); - ТекстыЗапроса.Добавить(ТекстЗапроса); - - КонецЦикла; - - КоличествоФайлов = 0; - Запрос = Новый Запрос(СтрСоединить(ТекстыЗапроса, Символы.ПС + "ОБЪЕДИНИТЬ" + Символы.ПС)); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; - КонецЕсли; - - Возврат КоличествоФайлов; - -КонецФункции - #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index 2ec9ca8ad..baf13d95d 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -770,7 +770,7 @@ ИмяПользователя = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СвойстваПользователяИБ, "Имя"); КонецЕсли; - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога,, ИмяПользователя, Истина); КонецПроцедуры @@ -821,25 +821,7 @@ КонецЕсли; Файл.Зашифрован = СведенияОФайле.Зашифрован; - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - Если Метаданные.Справочники[СведенияОФайле.ИмяСправочникаХранилищаФайлов].ПолнотекстовыйПоиск - = ИспользованиеПолнотекстовогоПоиска Тогда - - Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - Файл.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; - ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст( - СведенияОФайле.АдресВременногоХранилищаТекста); - Файл.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Файл.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - КонецЕсли; - - Иначе - Файл.ТекстХранилище = Новый ХранилищеЗначения(""); - Файл.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - + РаботаСФайламиСлужебный.ЗаполнитьИзвлеченныйТекст(Файл, СведенияОФайле.АдресВременногоХранилищаТекста); Файл.Заполнить(Неопределено); Файл.Записать(); Возврат Файл.Ссылка; @@ -963,8 +945,7 @@ Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); - + ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); Если Версия.Размер = 0 Тогда ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); // ДвоичныеДанные Версия.Размер = ДвоичныеДанныеФайла.Размер(); @@ -986,35 +967,19 @@ РаботаСФайламиВТомахСлужебный.ЗаполнитьСведенияОФайле(Версия, ДвоичныеДанные); КонецЕсли; - ИспользованиеПолнотекстовогоПоиска = Метаданные.СвойстваОбъектов.ИспользованиеПолнотекстовогоПоиска.Использовать; - Если МетаданныеСправочника.ПолнотекстовыйПоиск = ИспользованиеПолнотекстовогоПоиска Тогда - - Если СведенияОФайле.АдресВременногоХранилищаТекста <> Неопределено Тогда - Если РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - Иначе - РезультатИзвлеченияТекста = РаботаСФайламиСлужебный.ИзвлечьТекст( - СведенияОФайле.АдресВременногоХранилищаТекста); - Версия.ТекстХранилище = РезультатИзвлеченияТекста.ТекстХранилище; - Версия.СтатусИзвлеченияТекста = РезультатИзвлеченияТекста.СтатусИзвлеченияТекста; - КонецЕсли; - Иначе - Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - - Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда - Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; - КонецЕсли; - - Иначе + Если РаботаСФайламиСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + Версия.ТекстХранилище = Новый ХранилищеЗначения(""); + Иначе + РаботаСФайламиСлужебный.ЗаполнитьИзвлеченныйТекст(Версия, СведенияОФайле.АдресВременногоХранилищаТекста); КонецЕсли; - - Если Версия.Размер = 0 Тогда - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); // ДвоичныеДанные - Версия.Размер = ДвоичныеДанныеФайла.Размер(); - КонецЕсли; + Если СведенияОФайле.НовыйСтатусИзвлеченияТекста <> Неопределено Тогда + Версия.СтатусИзвлеченияТекста = СведенияОФайле.НовыйСтатусИзвлеченияТекста; + КонецЕсли; + + Если Версия.Размер = 0 И ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); // ДвоичныеДанные + Версия.Размер = ДвоичныеДанныеФайла.Размер(); КонецЕсли; Версия.Заполнить(Неопределено); @@ -1219,29 +1184,25 @@ НовыйФайл.ВладелецФайла = ВладелецНовогоФайла; НовыйФайл.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - НовыйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИсходныйФайл.ТекстХранилище.Получить()); - НовыйФайл.ФайлХранилище = Новый ХранилищеЗначения(ИсходныйФайл.ФайлХранилище.Получить()); + НовыйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИсходныйФайл.ТекстХранилище.Получить(), Новый СжатиеДанных(9)); + НовыйФайл.ФайлХранилище = Новый ХранилищеЗначения(ИсходныйФайл.ФайлХранилище.Получить(), Новый СжатиеДанных(9)); ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ИсходныйФайл); - ДвоичныеДанныеВХранилищеЗначения = Новый ХранилищеЗначения(ДвоичныеДанные); + ДвоичныеДанныеВХранилищеЗначения = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(НовыйФайл.Размер, НовыйФайл.Расширение); Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда НовыйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(); УстановитьПривилегированныйРежим(Истина); РегистрыСведений.ХранилищеФайлов.ЗаписатьДвоичныеДанные(КопияФайлаСсылка, ДвоичныеДанные); - УстановитьПривилегированныйРежим(Ложь); - УстановитьПривилегированныйРежим(Истина); РегистрыСведений.ХранилищеФайлов.ЗаписатьДвоичныеДанные(КопияФайлаСсылка, ДвоичныеДанные); УстановитьПривилегированныйРежим(Ложь); Иначе - НовыйФайл.Том = Неопределено; НовыйФайл.ПутьКФайлу = Неопределено; НовыйФайл.ТипХраненияФайла = Неопределено; РаботаСФайламиВТомахСлужебный.ДобавитьФайл(НовыйФайл, ДвоичныеДанные); - КонецЕсли; НовыйФайл.Записать(); @@ -1265,53 +1226,14 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); ДоступнаЭлектроннаяПодпись = МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(ИсходныйФайл)); Если ДоступнаЭлектроннаяПодпись Тогда - - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - - Если ИсходныйФайл.ПодписанЭП Тогда - - НовыйФайл.Прочитать(); - НовыйФайл.ПодписанЭП = Истина; - НовыйФайл.Записать(); - - ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.УстановленныеПодписи(ИсходныйФайл); - Для Каждого ЭП Из ЭлектронныеПодписиИсходногоФайла Цикл - МенеджерЗаписи = РегистрыСведений["ЭлектронныеПодписи"].СоздатьМенеджерЗаписи(); // РегистрСведенийМенеджерЗаписи.ЭлектронныеПодписи - МенеджерЗаписи.ПодписанныйОбъект = НовыйФайл; - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ЭП); - МенеджерЗаписи.Записать(Истина); - КонецЦикла; - - КонецЕсли; - - Если ИсходныйФайл.Зашифрован Тогда - - НовыйФайл.Прочитать(); - НовыйФайл.Зашифрован = Истина; - - ЭлектронныеПодписиИсходногоФайла = МодульЭлектроннаяПодпись.СертификатыШифрования(ИсходныйФайл); - Для Каждого Сертификат Из ЭлектронныеПодписиИсходногоФайла Цикл - МенеджерЗаписи = РегистрыСведений["СертификатыШифрования"].СоздатьМенеджерЗаписи(); // РегистрСведенийМенеджерЗаписи.СертификатыШифрования - МенеджерЗаписи.ЗашифрованныйОбъект = НовыйФайл; - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Сертификат); - МенеджерЗаписи.Записать(Истина); - КонецЦикла; - // Чтобы прошла запись ранее подписанного объекта. - НовыйФайл.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - НовыйФайл.Записать(); - - КонецЕсли; - + МодульЭлектроннаяПодписьСлужебный.СкопироватьПодписиИСертификатыШифрования(ИсходныйФайл, НовыйФайл); КонецЕсли; - КонецЕсли; РаботаСФайламиПереопределяемый.ЗаполнитьРеквизитыФайлаИзИсходногоФайла(НовыйФайл, ИсходныйФайл); - Возврат НовыйФайл; КонецФункции @@ -1581,20 +1503,20 @@ // Для записи изменений файла без его освобождения. // // Параметры: -// ФайлСсылка - Структура - структура с данными файла. +// ФайлСсылка - СправочникСсылка.Файлы // СведенияОФайле - см. РаботаСФайламиКлиентСервер.СведенияОФайле -// ОтносительныйПутьКФайлу - Строка - относительный путь без пути рабочего каталога, например -// "А1/Приказ.doc"; указывается, если НеМенятьЗаписьВРабочемКаталоге = -// Ложь. -// ПолныйПутьКФайлу - Строка - путь на клиенте в рабочем каталоге; указывается, если -// НеМенятьЗаписьВРабочемКаталоге = Ложь. -// ВРабочемКаталогеВладельца - Булево - файл находится в рабочем каталоге владельца. -// УникальныйИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. +// ОтносительныйПутьКФайлу - Строка - относительный путь без пути рабочего каталога, например +// "А1/Приказ.doc"; указывается, если НеМенятьЗаписьВРабочемКаталоге = +// Ложь. +// ПолныйПутьКФайлу - Строка - путь на клиенте в рабочем каталоге; указывается, если +// НеМенятьЗаписьВРабочемКаталоге = Ложь. +// ВРабочемКаталогеВладельца - Булево - файл находится в рабочем каталоге владельца. +// УникальныйИдентификаторФормы - УникальныйИдентификатор // // Возвращаемое значение: // Структура: // * Успешно - Булево - Истина, если создание версии выполнено (и файл бинарно изменен). -// * ДанныеФайла - Структура - структура с данными файла. +// * ДанныеФайла - см. ДанныеФайла. // Функция ПолучитьДанныеФайлаИСохранитьИзмененияФайла(ФайлСсылка, СведенияОФайле, ОтносительныйПутьКФайлу, ПолныйПутьКФайлу, ВРабочемКаталогеВладельца, УникальныйИдентификаторФормы = Неопределено) Экспорт @@ -1604,7 +1526,7 @@ ДанныеФайла = ДанныеФайла(ФайлСсылка,, ПараметрыДанныхФайла); Если Не ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда - ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); + ВызватьИсключение НСтр("ru = 'Файл не занят для редактирования.'"); КонецЕсли; ВерсияСоздана = СохранитьИзмененияФайла(ФайлСсылка, СведенияОФайле, Ложь, ОтносительныйПутьКФайлу, @@ -1619,7 +1541,7 @@ // СсылкаПапки - СправочникСсылка.ПапкиФайлов - владелец файла. // // Возвращаемое значение: -// Строка - рабочий каталог. +// Строка // Функция РабочийКаталогПапки(СсылкаПапки) Экспорт @@ -1631,23 +1553,16 @@ РабочийКаталог = ""; - // Подготовить структуру отбора по измерениям. - - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Папка", СсылкаПапки); - СтруктураОтбора.Вставить("Пользователь", Пользователи.АвторизованныйПользователь()); + Отбор = Новый Структура; + Отбор.Вставить("Папка", СсылкаПапки); + Отбор.Вставить("Пользователь", Пользователи.АвторизованныйПользователь()); - // Получить структуру с данными ресурсов записи. - СтруктураРесурсов = РегистрыСведений.РабочиеКаталогиФайлов.Получить(СтруктураОтбора); - - // Получить путь из регистра - РабочийКаталог = СтруктураРесурсов.Путь; + ЗначенияРесурсов = РегистрыСведений.РабочиеКаталогиФайлов.Получить(Отбор); + РабочийКаталог = ЗначенияРесурсов.Путь; Если Не ПустаяСтрока(РабочийКаталог) Тогда - // Добавляем слэш в конце, если его нет. РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог); КонецЕсли; - Возврат РабочийКаталог; КонецФункции @@ -2307,7 +2222,7 @@ УстановитьПривилегированныйРежим(Истина); Если Значение <> Неопределено Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Значение,,, Истина); ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; @@ -2322,11 +2237,13 @@ АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); РезультатУдаления = Новый Соответствие; + АвторыФайлов = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ФайлыИлиВерсии, "Автор"); + Для Каждого ФайлИлиВерсия Из ФайлыИлиВерсии Цикл ЭтоВерсияФайла = ТипЗнч(ФайлИлиВерсия) = Тип("СправочникСсылка.ВерсииФайлов"); Результат = Новый Структура("ТекстПредупреждения, Файлы", "", Новый Массив); - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ФайлИлиВерсия, "Автор") = АвторизованныйПользователь Тогда + Если АвторыФайлов[ФайлИлиВерсия] = АвторизованныйПользователь Тогда Если ЭтоВерсияФайла Тогда // @skip-check query-in-loop - Порционное удаление каждой версии в своей транзакции УдалитьДанныеВерсии(ФайлИлиВерсия, УникальныйИдентификатор, Результат); @@ -2692,8 +2609,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы // Создает новые файлы по аналогии с указанными. // Параметры: @@ -2926,7 +2842,6 @@ ////////////////////////////////////////////////////////////////////////////////////////////////// ///// Общие файловые функции // См. эту процедуру в модуле РаботаСФайламиСлужебный. -// Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) Экспорт РаботаСФайламиСлужебный.ЗаписатьРезультатИзвлеченияТекста( @@ -2974,7 +2889,7 @@ СтрокаПодписи.СрокДействияПоследнейМеткиВремени = РезультатПроверкиПодписи.СрокДействияПоследнейМеткиВремени; КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(СтрокаПодписи.РезультатПроверкиПодписиПоМЧД) И ОбщегоНазначения.ПодсистемаСуществует( "СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда @@ -2999,7 +2914,7 @@ НовыйРезультатПроверкиДоверенностей, СтрокаПодписи.РезультатПроверкиПодписиПоМЧД); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Если СтрокаПодписи.ОписаниеОшибки <> Неопределено Тогда РаботаСФайламиСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи, ТекущаяДатаСеанса()); // Для совместимости. @@ -3085,13 +3000,14 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// Заполняет в табличном или офисном документе штамп электронной подписи. +#КонецОбласти Функция ДокументСоШтампом(Знач ДанныеФайла) Экспорт Расширение = ДанныеФайла.Расширение; + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + Если Расширение = "mxl" Тогда ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); // ДвоичныеДанные @@ -3103,28 +3019,7 @@ УдалитьФайлы(ВременныйФайл); - МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - - ПараметрыШтампа = Новый Структура; - ПараметрыШтампа.Вставить("ТекстОтметки", ""); - ПараметрыШтампа.Вставить("Логотип"); - - ЭлектронныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(ДанныеФайла.Ссылка); - ВладелецФайла = ДанныеФайла.Владелец; - - СведенияОФайле = Новый Структура; - СведенияОФайле.Вставить("ВладелецФайла", ВладелецФайла); - - Штампы = Новый Массив; - Для Каждого Подпись Из ЭлектронныеПодписи Цикл - Сертификат = Подпись.Сертификат; - СертификатКриптографии = Новый СертификатКриптографии(Сертификат.Получить()); - РаботаСФайламиПереопределяемый.ПриПечатиФайлаСоШтампом(ПараметрыШтампа, СертификатКриптографии); - - Штамп = МодульЭлектроннаяПодпись.ШтампВизуализацииЭлектроннойПодписи(СертификатКриптографии, - Подпись.ДатаПодписи, ПараметрыШтампа.ТекстОтметки, ПараметрыШтампа.Логотип); - Штампы.Добавить(Штамп); - КонецЦикла; + Штампы = МодульЭлектроннаяПодпись.ШтампыВизуализацииЭлектронныхПодписей(ДанныеФайла.Ссылка); МодульЭлектроннаяПодпись.ДобавитьШтампыВТабличныйДокумент(ТабличныйДокумент, Штампы); @@ -3132,7 +3027,9 @@ ИначеЕсли Расширение = "docx" Тогда МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ЭлектронныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(ДанныеФайла.Ссылка); + ПараметрыПолученияПодписей = МодульЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + ЭлектронныеПодписи = МодульЭлектроннаяПодпись.ПодписиОбъекта(ДанныеФайла.Ссылка, ПараметрыПолученияПодписей); МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); МодульУправлениеПечатью.ДобавитьШтампыВОфисныйДокумент(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ЭлектронныеПодписи); @@ -3144,7 +3041,6 @@ КонецФункции - // Проверяет наличие файла на компьютере. // // Параметры: @@ -3183,7 +3079,7 @@ Возврат Ложь; Иначе - Возврат РаботаСФайламиВТомахСлужебный.ПрисоединенныйФайлНаходитсяНаДиске(ПрисоединенныйФайл); + Возврат РаботаСФайламиВТомахСлужебный.ПрисоединенныйФайлНаходитсяВТоме(ПрисоединенныйФайл); КонецЕсли; КонецФункции @@ -3219,7 +3115,7 @@ МассивСтруктур.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьКаталогЖурналаСканирования", Ложь, ИдентификаторКлиента)); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); КонецПроцедуры @@ -3269,18 +3165,18 @@ Результат.Вставить("ТехническаяИнформацияОВерсияхПодсистемИРасширениях", СтандартныеПодсистемыСервер.ТехническаяИнформацияОВерсияхПодсистемИРасширениях()); - Результат.Вставить("ИмяЛогФайла", ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + Результат.Вставить("ИмяЛогФайла", ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "КомпонентаСканирования", "ИмяЛогФайла")); Возврат Результат; КонецФункции Процедура УстановитьПараметрыНачалаЖурналаСканирования(ИмяЛогФайла) Экспорт - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", "ИмяЛогФайла", ИмяЛогФайла); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", "ИмяЛогФайла", ИмяЛогФайла); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", "ДатаНачалаЖурналаСканирования", ТекущаяДатаСеанса()); КонецПроцедуры -Процедура ОчиститьРабочийКаталог(СсылкаПапки) Экспорт +Процедура ОчиститьРабочийКаталог(Знач СсылкаПапки) Экспорт РаботаСФайламиСлужебный.ОчиститьРабочийКаталог(СсылкаПапки); КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 8133efdf8..1f6384ada 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -98,7 +98,6 @@ ПараметрыВыполнения.ФильтрДиалогаВыбора, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы())); Если Не ПараметрыВыполнения.Свойство("ПолноеИмяФайла") Тогда - // Загрузить из файловой системы с расширением работы с файлами. ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выбор файла'"); @@ -204,11 +203,16 @@ ПараметрыФайла.РасширениеБезТочки = РасширениеФайла; Результат.ФайлСсылка = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста); + АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); КонецЕсли; + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаФайла) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаФайла); + КонецЕсли; Результат.ФайлДобавлен = Истина; Исключение @@ -328,7 +332,7 @@ // - Неопределено - описание процедуры, принимающей результат работы метода. // ПредставлениеКоманды - Строка - имя команды, для выполнения которой необходимо расширение. // -Процедура ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата, ПредставлениеКоманды = "") Экспорт +Процедура ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(ОбработчикРезультата, ПредставлениеКоманды = "") Экспорт Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда ТекстПредупреждения = НСтр("ru = 'Действие ""%1"" доступно только в клиентском приложении.'"); Иначе @@ -362,12 +366,12 @@ #Если Не ВебКлиент И НЕ МобильныйКлиент Тогда - Путь = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки"); + Путь = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки"); Если Путь = Неопределено Тогда Если Не СтандартныеПодсистемыКлиент.ЭтоБазоваяВерсияКонфигурации() Тогда Путь = КаталогМоиДокументы(); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", Путь); КонецЕсли; КонецЕсли; @@ -407,30 +411,16 @@ // Проверяет имя файла на наличие некорректных символов. // // Параметры: -// ИмяФайла - Строка- проверяемое имя файла. +// ИмяФайла - Строка - проверяемое имя файла. // -// УдалятьНекорректныеСимволы - Булево - Истина указывает удалять некорректные -// символы из переданной строки. +// УдалятьНекорректныеСимволы - Булево - если указать Истина, то удаляет некорректные символы +// из проверяемого имени файла. // Процедура КорректноеИмяФайла(ИмяФайла, УдалятьНекорректныеСимволы = Ложь) Экспорт - // Перечень запрещенных символов взят отсюда: http://support.microsoft.com/kb/100108/ru - // при этом были объединены запрещенные символы для файловых систем FAT и NTFS. - - СтрИсключения = ОбщегоНазначенияКлиентСервер.ПолучитьНедопустимыеСимволыВИмениФайла(); - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В имени файла не должно быть следующих символов: %1'"), СтрИсключения); - - Результат = Истина; - - МассивНайденныхНедопустимыхСимволов = - ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла); - - Если МассивНайденныхНедопустимыхСимволов.Количество() <> 0 Тогда - - Результат = Ложь; - + НедопустимыеСимволы = ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла); + Результат = НедопустимыеСимволы.Количество() = 0; + Если Не Результат Тогда Если УдалятьНекорректныеСимволы Тогда ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, ""); КонецЕсли; @@ -438,7 +428,9 @@ КонецЕсли; Если Не Результат Тогда - ВызватьИсключение ТекстОшибки; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В имени файла не должно быть следующих символов: %1'"), + ОбщегоНазначенияКлиентСервер.ПолучитьНедопустимыеСимволыВИмениФайла()); КонецЕсли; КонецПроцедуры @@ -477,7 +469,7 @@ Функция ВыбратьПутьККаталогуДанныхПользователя() Экспорт ИмяКаталога = ""; - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда ИмяКаталога = РабочийКаталогДанныхПользователя(); КонецЕсли; @@ -505,18 +497,16 @@ // Возвращаемое значение: // Булево - в тонком клиенте всегда Истина, в браузере, основанных на Chrome, всегда ложь. // -Функция РасширениеРаботыСФайламиПодключено() Экспорт +Функция Расширение1СПредприятияПодключено() Экспорт Возврат ?(КлиентПоддерживаетСинхронныеВызовы(), ПодключитьРасширениеРаботыСФайлами(), Ложь); КонецФункции -// Описание процедуры см. ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами. -// -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения) Экспорт +Процедура ПоказатьВопросОбУстановкеРасширения1СПредприятия(ОписаниеОповещения) Экспорт Если Не КлиентПоддерживаетСинхронныеВызовы() Тогда ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь); Возврат; КонецЕсли; - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения); КонецПроцедуры Процедура ОтправитьФайлыПоПочте(МассивФайлов, ИдентификаторФормы, ПараметрыОтправки, ЭтоФайл = Ложь) Экспорт @@ -531,7 +521,8 @@ Параметры.Вставить("ЭтоФайл", ЭтоФайл); Параметры.Вставить("ПараметрыОтправки", ПараметрыОтправки); - ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьФайлыПоПочтеНастройкаУчетнойЗаписиПредложена", ЭтотОбъект, Параметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьФайлыПоПочтеНастройкаУчетнойЗаписиПредложена", + ЭтотОбъект, Параметры); Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); МодульРаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения); @@ -657,8 +648,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Интеграция с 1С:Документооборотом. +#Область ИнтеграцияС1СДокументооборотом // Проверяет используется ли 1С:Документооборот для хранения присоединенных файлов объекта. // @@ -733,8 +723,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с криптографией. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСКриптографией // Проверить подписи данных объекта в таблице. // @@ -835,7 +826,7 @@ КонецЕсли; КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(ДанныеСтроки.РезультатПроверкиПодписиПоМЧД) И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда @@ -847,7 +838,7 @@ ДополнительныеПараметры.СтрокиДляПроверкиПоМЧД.Добавить(Структура); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности ЗаполнитьЗначенияСвойств(СтрокаПодписи, ДанныеСтроки); @@ -914,6 +905,8 @@ КонецПроцедуры +#КонецОбласти + #Область Сканирование @@ -1008,8 +1001,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции работы с файлами операционной системы. +#Область ОбщиеПроцедурыИФункцииРаботыСФайламиОперационнойСистемы // Открыть версию файла. // @@ -1028,12 +1020,13 @@ Обработчик = Новый ОписаниеОповещения("ОткрытьВерсиюФайлаПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы Процедура ПередЗавершениемРаботыСистемы(Отказ, Предупреждения) Экспорт @@ -1051,7 +1044,7 @@ ПредупреждениеПользователю.ТекстГиперссылки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Открыть список редактируемых файлов (%1)'"), Ответ.КоличествоЗанятыхФайлов); - ПредупреждениеПользователю.ТекстПредупреждения = НСтр("ru = 'Имеются занятые для редактирования файлы, изменения в которых не помещены в приложение.'"); + ПредупреждениеПользователю.ТекстПредупреждения = НСтр("ru = 'Рекомендуется посмотреть занятые для редактирования файлы, изменения которых не помещены в приложение.'"); ДействиеПриНажатииГиперссылки = ПредупреждениеПользователю.ДействиеПриНажатииГиперссылки; @@ -1105,6 +1098,8 @@ КонецПроцедуры +#КонецОбласти + #Область ИзвлечениеТекста Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор, @@ -1170,7 +1165,11 @@ РаботаСФайламиСлужебныйВызовСервера.ЗаписатьРезультатИзвлеченияТекста( ФайлИлиВерсияФайла, РезультатИзвлечения, АдресВременногоХранилищаТекста); - + + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; + #КонецЕсли КонецПроцедуры @@ -1386,7 +1385,7 @@ Если ДополнительныеПараметры.Коллекция.Количество() <= ДополнительныеПараметры.Индекс + 1 Тогда - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ДополнительныеПараметры.СтрокиДляПроверкиПоМЧД.Количество() > 0 Тогда Результат = РаботаСФайламиСлужебныйВызовСервера.ПроверитьПодписиПоМЧД( @@ -1399,7 +1398,7 @@ КонецЦикла; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Возврат; КонецЕсли; @@ -1625,7 +1624,7 @@ Процедура ВывестиНапоминаниеПриРедактировании(ОбработчикРезультата) ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); Если ПерсональныеНастройки.ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда - Если НЕ РасширениеРаботыСФайламиПодключено() Тогда + Если НЕ Расширение1СПредприятияПодключено() Тогда ТекстНапоминания = НСтр("ru = 'Сейчас будет предложено открыть или сохранить файл. | @@ -1758,9 +1757,7 @@ Знач ГруппаФайлов = Неопределено) ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами(); - ТекущаяПозиция = 0; - ПоследнийСохраненныйФайл = Неопределено; Для Каждого ПолноеИмяФайла Из ВыбранныеФайлы Цикл @@ -1809,7 +1806,10 @@ ПараметрыФайла.ВремяИзмененияУниверсальное = ВремяИзмененияУниверсальное; ПрисоединенныйФайл = РаботаСФайламиСлужебныйВызовСервера.ДобавитьФайл(ПараметрыФайла, - АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); + АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; Если ПрисоединенныйФайл = Неопределено Тогда Продолжить; КонецЕсли; @@ -1909,7 +1909,7 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) - |превышает максимально допустимый размер файла (%3 Мб).'"), + |превышает максимально допустимый размер %3 Мб.'"), ВыбранноеИмяФайла, РаботаСФайламиСлужебныйКлиентСервер.ПредставлениеРазмераФайла(РазмерВМб), РаботаСФайламиСлужебныйКлиентСервер.ПредставлениеРазмераФайла(РазмерВМбМакс)); @@ -2027,7 +2027,7 @@ РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор); ИзменитьКоличествоЗанятыхФайлов(); - РасширениеПодключено = РасширениеРаботыСФайламиПодключено(); + РасширениеПодключено = Расширение1СПредприятияПодключено(); Если РасширениеПодключено Тогда ПеререгистрироватьФайлВРабочемКаталоге(ДанныеФайла, Истина, ДанныеФайла.РабочийКаталогВладельца <> ""); КонецЕсли; @@ -2121,7 +2121,7 @@ Функция ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось создать файл по причине: + НСтр("ru = 'Невозможно добавить файл в приложение. |%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); @@ -2148,7 +2148,7 @@ ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) - |превышает максимально допустимый размер файла (%3 Мб).'"), + |превышает максимально допустимый размер %3 Мб.'"), Файл.Имя, РаботаСФайламиСлужебныйКлиентСервер.ПредставлениеРазмераФайла(РазмерВМб), РаботаСФайламиСлужебныйКлиентСервер.ПредставлениеРазмераФайла(РазмерВМбМакс)); @@ -2196,8 +2196,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Завершение редактирования Файла и помещение его на сервер. +#Область ЗавершениеРедактированияФайлаИПомещениеЕгоНаСервер // Завершить редактирования Файла и поместить его на сервер. // @@ -2207,7 +2206,7 @@ Процедура ЗакончитьРедактирование(Параметры) Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеПослеУстановкиРасширения", ЭтотОбъект, Параметры); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -2215,7 +2214,7 @@ Процедура ЗакончитьРедактированиеПослеУстановкиРасширения(РасширениеУстановлено, ПараметрыВыполнения) Экспорт ПараметрыВыполнения.Вставить("ДанныеФайла", Неопределено); - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда ЗакончитьРедактированиеСРасширением(ПараметрыВыполнения); Иначе ЗакончитьРедактированиеБезРасширения(ПараметрыВыполнения); @@ -2224,7 +2223,7 @@ // Продолжение процедуры (см. выше). Процедура ЗакончитьРедактированиеСРасширением(ПараметрыВыполнения) - // Веб-клиент с расширением для работы с файлами, + // Веб-клиент с расширением для работы с 1С:Предприятием, // Тонкий клиент, // Толстый клиент. @@ -2299,8 +2298,6 @@ ПараметрыВыполнения.СоздатьНовуюВерсию = ДанныеФайла.ХранитьВерсии; Если ДанныеФайла.ХранитьВерсии Тогда - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". СоздатьНовуюВерсиюДоступность = ДанныеФайла.АвторТекущейВерсии = ДанныеФайла.Редактирует; ВозвратФайла = Новый Структура; @@ -2310,7 +2307,7 @@ ВозвратФайла.Вставить("СоздатьНовуюВерсиюДоступность", СоздатьНовуюВерсиюДоступность); Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСРасширениемПослеПомещенияФайлаНаСервер", ЭтотОбъект, ПараметрыВыполнения); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", ВозвратФайла, , , , , Обработчик); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеВерсииФайла", ВозвратФайла, , , , , Обработчик); Иначе ЗакончитьРедактированиеСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения); @@ -2319,13 +2316,9 @@ Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. Если ДанныеФайла.ХранитьВерсии Тогда - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". Если ДанныеФайла.АвторТекущейВерсии <> ДанныеФайла.Редактирует Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; КонецЕсли; - Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; КонецЕсли; @@ -2446,9 +2439,12 @@ КонецЕсли; Попытка - ВерсияОбновлена = РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияИОсвободитьФайл(ПараметрыВыполнения.ДанныеФайла, СведенияОФайле, - НеМенятьЗаписьВРабочемКаталоге, ПараметрыВыполнения.ПолныйПутьКФайлу, РабочийКаталогПользователя(), - ПараметрыВыполнения.ИдентификаторФормы); + ВерсияОбновлена = РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияИОсвободитьФайл(ПараметрыВыполнения.ДанныеФайла, + СведенияОФайле, НеМенятьЗаписьВРабочемКаталоге, ПараметрыВыполнения.ПолныйПутьКФайлу, + РабочийКаталогПользователя(), ПараметрыВыполнения.ИдентификаторФормы); + Если ЭтоАдресВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); + КонецЕсли; Исключение ЗакончитьРедактированиеСРасширениемОбработкаИсключения(ИнформацияОбОшибке(), ПараметрыВыполнения); Возврат; @@ -2528,7 +2524,7 @@ Процедура ЗакончитьРедактированиеСРасширениемПослеПоказаОповещения(Результат, ПараметрыВыполнения) Экспорт Если ТипЗнч(Результат) = Тип("Структура") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы", "ПоказыватьИнформациюЧтоФайлНеБылИзменен", Ложь,,, Истина); КонецЕсли; @@ -2608,14 +2604,7 @@ Если ПараметрыВыполнения.ХранитьВерсии Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". - Если ПараметрыВыполнения.АвторТекущейВерсии <> ПараметрыВыполнения.Редактирует Тогда - СоздатьНовуюВерсиюДоступность = Ложь; - Иначе - СоздатьНовуюВерсиюДоступность = Истина; - КонецЕсли; + СоздатьНовуюВерсиюДоступность = ПараметрыВыполнения.АвторТекущейВерсии = ПараметрыВыполнения.Редактирует; Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; СоздатьНовуюВерсиюДоступность = Ложь; @@ -2629,18 +2618,14 @@ Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеБезРасширенияПослеПомещенияФайлаНаСервер", ЭтотОбъект, ПараметрыВыполнения); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", СтруктураПараметров, , , , , Обработчик); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеВерсииФайла", СтруктураПараметров, , , , , Обработчик); Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. Если ПараметрыВыполнения.ХранитьВерсии Тогда - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". Если ПараметрыВыполнения.АвторТекущейВерсии <> ПараметрыВыполнения.Редактирует Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; КонецЕсли; - Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; КонецЕсли; @@ -2687,7 +2672,7 @@ КонецЕсли; Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("БольшеНеЗадаватьЭтотВопрос") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Ложь,,, Истина); КонецЕсли; @@ -2728,8 +2713,6 @@ Возврат; КонецЕсли; - // Не нужно ПредложитьУстановкуРасширенияРаботыСФайлами(), т.к. все делается в памяти через ДвоичныеДанные. - ОписаниеДанных = Новый Структура; ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Шифрование файла'")); ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); @@ -2825,7 +2808,7 @@ Процедура ЗакончитьРедактированиеБезРасширенияПослеПоказаОповещения(Результат, ПараметрыВыполнения) Экспорт Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("БольшеНеЗадаватьЭтотВопрос") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы","ПоказыватьИнформациюЧтоФайлНеБылИзменен", Ложь,,, Истина); КонецЕсли; @@ -2859,8 +2842,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Выбор файла и создание из него новой версии. +#КонецОбласти + +#Область ВыборФайлаИСозданиеИзНегоНовойВерсии // Загружает файл и создает новую версию. // @@ -2877,7 +2861,7 @@ Процедура ОбновитьИзФайлаНаДиске(ОбработчикРезультата, ДанныеФайла, ИдентификаторФормы, ПараметрыДобавленияФайла = Неопределено) - Если Не РасширениеРаботыСФайламиПодключено() Тогда + Если Не Расширение1СПредприятияПодключено() Тогда ВернутьРезультат(ОбработчикРезультата, Ложь); Возврат; КонецЕсли; @@ -2887,7 +2871,7 @@ Если Не ПустаяСтрока(ДанныеФайла.РабочийКаталогВладельца) Тогда ПутьВыбора = ДанныеФайла.РабочийКаталогВладельца; Иначе - ПутьВыбора = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПапкаДляОбновитьИзФайла"); + ПутьВыбора = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПапкаДляОбновитьИзФайла"); КонецЕсли; Если ПутьВыбора = Неопределено Или ПутьВыбора = "" Тогда @@ -2957,7 +2941,7 @@ ПутьВыбора = ФайлНаДиске.Путь; Если ПустаяСтрока(ДанныеФайла.РабочийКаталогВладельца) Тогда Если ПутьВыбораПрежний <> ПутьВыбора Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПапкаДляОбновитьИзФайла", ПутьВыбора); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПапкаДляОбновитьИзФайла", ПутьВыбора); КонецЕсли; КонецЕсли; @@ -3286,8 +3270,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Пометка файла как занятого для редактирования. +#КонецОбласти + +#Область ПометкаФайлаКакЗанятогоДляРедактирования // Помечает файл, как занятый для редактирования. // @@ -3309,7 +3294,7 @@ Обработчик = Новый ОписаниеОповещения("ЗанятьФайлПоСсылкеПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3327,7 +3312,7 @@ Возврат; КонецЕсли; - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда НаЧтение = Ложь; ВРабочемКаталогеВладельца = ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> ""; ПеререгистрироватьФайлВРабочемКаталоге(ПараметрыВыполнения.ДанныеФайла, НаЧтение, ВРабочемКаталогеВладельца); @@ -3348,8 +3333,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Пометка файлов как занятых для редактирования. +#КонецОбласти + +#Область ПометкаФайловКакЗанятыхДляРедактирования // Помечает файлы, как занятые для редактирования. // @@ -3366,7 +3352,7 @@ Обработчик = Новый ОписаниеОповещения("ЗанятьФайлыПоСсылкамПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3398,7 +3384,7 @@ Продолжить; КонецЕсли; - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда НаЧтение = Ложь; ВРабочемКаталогеВладельца = ДанныеФайла.РабочийКаталогВладельца <> ""; ПеререгистрироватьФайлВРабочемКаталоге(ДанныеФайла, НаЧтение, ВРабочемКаталогеВладельца); @@ -3422,8 +3408,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Открытие файла для редактирования по ссылке. +#КонецОбласти + +#Область ОткрытиеФайлаДляРедактированияПоСсылке // Открывает файл для редактирования. // @@ -3444,7 +3431,7 @@ ПараметрыОбработчика.Вставить("РабочийКаталогВладельца", РабочийКаталогВладельца); Обработчик = Новый ОписаниеОповещения("РедактироватьФайлПоСсылкеПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3452,7 +3439,7 @@ Процедура РедактироватьФайлПоСсылкеПослеУстановкиРасширения(РасширениеУстановлено, ПараметрыВыполнения) Экспорт ПараметрыВыполнения.Вставить("ДанныеФайла", Неопределено); - ПараметрыВыполнения.Вставить("РасширениеПодключено", РасширениеРаботыСФайламиПодключено()); + ПараметрыВыполнения.Вставить("РасширениеПодключено", Расширение1СПредприятияПодключено()); ПараметрыВыполнения.Вставить("ФайлУжеРедактируетТекущийПользователь", Ложь); Результат = РаботаСФайламиСлужебныйВызовСервера.ЗанятьФайлДляРедактирования(ПараметрыВыполнения.ОбъектСсылка, @@ -3538,8 +3525,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Открытие файла для редактирования. +#КонецОбласти + +#Область ОткрытиеФайлаДляРедактирования // Открывает файл для редактирования. // @@ -3558,7 +3546,7 @@ Обработчик = Новый ОписаниеОповещения("РедактироватьФайлПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3610,7 +3598,7 @@ Возврат; КонецЕсли; - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда Обработчик = Новый ОписаниеОповещения( "РедактироватьФайлСРасширениемПослеПолученияФайлаВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); ПолучитьФайлВерсииВРабочийКаталог( @@ -3649,8 +3637,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Открытие версии файла. +#КонецОбласти + +#Область ОткрытиеВерсииФайла // Продолжение процедуры (см. выше). // @@ -3661,7 +3650,7 @@ // Процедура ОткрытьВерсиюФайлаПослеУстановкиРасширения(РасширениеУстановлено, ПараметрыВыполнения) Экспорт - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда Обработчик = Новый ОписаниеОповещения("ОткрытьВерсиюФайлаПослеПолученияФайлаВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); ПолучитьФайлВерсииВРабочийКаталог( Обработчик, @@ -3695,8 +3684,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Освобождение файлов без обновления. +#КонецОбласти + +#Область ОсвобождениеФайловБезОбновления // Освобождает файлы без обновления. // @@ -3713,7 +3703,7 @@ Обработчик = Новый ОписаниеОповещения("ОсвободитьФайлыПоСсылкамПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3742,7 +3732,7 @@ КонецЦикла; - Если Не РасширениеРаботыСФайламиПодключено() Тогда + Если Не Расширение1СПредприятияПодключено() Тогда Возврат; КонецЕсли; @@ -3799,8 +3789,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Освобождение файла без обновления. +#КонецОбласти + +#Область ОсвобождениеФайлаБезОбновления // Возвращаемое значение: // Структура: @@ -3839,7 +3830,7 @@ Процедура ОсвободитьФайл(ПараметрыОсвобожденияФайла) Обработчик = Новый ОписаниеОповещения("ОсвободитьФайлПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОсвобожденияФайла); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3916,7 +3907,7 @@ ОповеститьОбИзменении(ТипЗнч(ПараметрыВыполнения.ОбъектСсылка)); Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла("ДанныеФайлаИзменены"), ПараметрыВыполнения.ОбъектСсылка); - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда НаЧтение = Истина; ВРабочемКаталогеВладельца = ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> ""; ПеререгистрироватьФайлВРабочемКаталоге(ПараметрыВыполнения.ДанныеФайла, НаЧтение, ВРабочемКаталогеВладельца); @@ -3938,8 +3929,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Запись изменений файла. +#КонецОбласти + +#Область ЗаписьИзмененийФайла // Начало записи изменений файла. // @@ -3949,7 +3941,7 @@ Процедура СохранитьИзмененияФайла(ПараметрыОбновленияФайла) Обработчик = Новый ОписаниеОповещения("СохранитьИзмененияФайлаПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбновленияФайла); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -3960,7 +3952,7 @@ ПараметрыВыполнения.Вставить("АдресВременногоХранилища", Неопределено); ПараметрыВыполнения.Вставить("ПолныйПутьКФайлу", Неопределено); - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда СохранитьИзмененияФайлаСРасширением(ПараметрыВыполнения); Иначе СохранитьИзмененияФайлаБезРасширения(ПараметрыВыполнения); @@ -4029,14 +4021,7 @@ Если ДанныеФайла.ХранитьВерсии Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". - Если ДанныеФайла.АвторТекущейВерсии <> ДанныеФайла.Редактирует Тогда - СоздатьНовуюВерсиюДоступность = Ложь; - Иначе - СоздатьНовуюВерсиюДоступность = Истина; - КонецЕсли; + СоздатьНовуюВерсиюДоступность = ДанныеФайла.АвторТекущейВерсии = ДанныеФайла.Редактирует; Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; СоздатьНовуюВерсиюДоступность = Ложь; @@ -4052,18 +4037,14 @@ Обработчик = Новый ОписаниеОповещения("СохранитьИзмененияФайлаСРасширениемПослеПомещенияФайлаНаСервер", ЭтотОбъект, ПараметрыВыполнения); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", СтруктураПараметров, , , , , Обработчик); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеВерсииФайла", СтруктураПараметров, , , , , Обработчик); Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. Если ПараметрыВыполнения.ХранитьВерсии Тогда - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". Если ПараметрыВыполнения.АвторТекущейВерсии <> ПараметрыВыполнения.Редактирует Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; КонецЕсли; - Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; КонецЕсли; @@ -4180,6 +4161,11 @@ ВерсияОбновлена = РаботаСФайламиСлужебныйВызовСервера.СохранитьИзмененияФайла(ПараметрыВыполнения.ДанныеФайла.Ссылка, СведенияОФайле, НеМенятьЗаписьВРабочемКаталоге, ОтносительныйПутьКФайлу, ПараметрыВыполнения.ПолныйПутьКФайлу, ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "", ПараметрыВыполнения.ИдентификаторФормы); + + Если ЭтоАдресВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); + КонецЕсли; + Если ПараметрыВыполнения.ПоказыватьОповещение Тогда Если ВерсияОбновлена Тогда ПоказатьОповещениеПользователя( @@ -4206,7 +4192,7 @@ Процедура СохранитьИзмененияФайлаСРасширениемПослеПоказаОповещения(Результат, ПараметрыВыполнения) Экспорт Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("БольшеНеЗадаватьЭтотВопрос") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы","ПоказыватьИнформациюЧтоФайлНеБылИзменен", Ложь,,, Истина); ОбновитьПовторноИспользуемыеЗначения(); КонецЕсли; @@ -4250,14 +4236,7 @@ Если ПараметрыВыполнения.ХранитьВерсии Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". - Если ПараметрыВыполнения.АвторТекущейВерсии <> ПараметрыВыполнения.Редактирует Тогда - СоздатьНовуюВерсиюДоступность = Ложь; - Иначе - СоздатьНовуюВерсиюДоступность = Истина; - КонецЕсли; + СоздатьНовуюВерсиюДоступность = ПараметрыВыполнения.АвторТекущейВерсии = ПараметрыВыполнения.Редактирует; Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; СоздатьНовуюВерсиюДоступность = Ложь; @@ -4271,18 +4250,14 @@ Обработчик = Новый ОписаниеОповещения("СохранитьИзмененияФайлаБезРасширенияПослеПомещенияФайлаНаСервер", ЭтотОбъект, ПараметрыВыполнения); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", СтруктураПараметров, , , , , Обработчик); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеВерсииФайла", СтруктураПараметров, , , , , Обработчик); Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне. Если ПараметрыВыполнения.ХранитьВерсии Тогда - - // Если автор текущей версии не текущий пользователь, тогда - // отключается доступность флажка "Не создавать новую версию". Если ПараметрыВыполнения.АвторТекущейВерсии <> ПараметрыВыполнения.Редактирует Тогда ПараметрыВыполнения.СоздатьНовуюВерсию = Истина; КонецЕсли; - Иначе ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь; КонецЕсли; @@ -4327,7 +4302,7 @@ Если Результат.Значение = КодВозвратаДиалога.ОК Тогда Если ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("БольшеНеЗадаватьЭтотВопрос") И Результат.БольшеНеЗадаватьЭтотВопрос Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", Ложь,,, Истина); КонецЕсли; Обработчик = Новый ОписаниеОповещения("СохранитьИзмененияФайлаБезРасширенияПослеЗагрузкиФайла", ЭтотОбъект, ПараметрыВыполнения); @@ -4369,8 +4344,6 @@ Возврат; КонецЕсли; - // Не нужно ПредложитьУстановкуРасширенияРаботыСФайлами(), т.к. все делается в памяти через ДвоичныеДанные. - ОписаниеДанных = Новый Структура; ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Шифрование файла'")); ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); @@ -4417,8 +4390,8 @@ СведенияОФайле.ИмяБезРасширения = СтруктураПути.ИмяБезРасширения; КонецЕсли; - Результат = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИСохранитьИзмененияФайла(ПараметрыВыполнения.ОбъектСсылка, СведенияОФайле, - "", ПараметрыВыполнения.ПолныйПутьКФайлу, Ложь, ПараметрыВыполнения.ИдентификаторФормы); + Результат = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИСохранитьИзмененияФайла(ПараметрыВыполнения.ОбъектСсылка, + СведенияОФайле, "", ПараметрыВыполнения.ПолныйПутьКФайлу, Ложь, ПараметрыВыполнения.ИдентификаторФормы); ПараметрыВыполнения.ДанныеФайла = Результат.ДанныеФайла; Если ПараметрыВыполнения.ПоказыватьОповещение Тогда ПоказатьОповещениеПользователя( @@ -4446,8 +4419,6 @@ Возврат; КонецЕсли; - // Не нужно ПредложитьУстановкуРасширенияРаботыСФайлами(), т.к. все делается в памяти через ДвоичныеДанные. - ОписаниеДанных = Новый Структура; ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Шифрование файла'")); ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); @@ -4504,8 +4475,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Пометка файла как занятого для редактирования. +#КонецОбласти + +#Область ПометкаФайлаКакЗанятогоДляРедактирования // Пометка файла как занятого для редактирования. // @@ -4523,7 +4495,7 @@ Обработчик = Новый ОписаниеОповещения("ЗанятьФайлПослеУстановкиРасширения", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -4558,7 +4530,7 @@ Возврат; КонецЕсли; - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда НаЧтение = Ложь; ВРабочемКаталогеВладельца = ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> ""; ПеререгистрироватьФайлВРабочемКаталоге(ПараметрыВыполнения.ДанныеФайла, НаЧтение, ВРабочемКаталогеВладельца); @@ -4579,8 +4551,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Добавление файлов. +#КонецОбласти + +#Область ДобавлениеФайлов // Продолжение процедуры ПрисоединенныеФайлыКлиент.ДобавитьФайлы. Процедура ДобавитьФайлыЗавершение(ПрисоединенныйФайл, ДополнительныеПараметры) Экспорт @@ -4624,11 +4597,12 @@ КонецПроцедуры +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Освобождение файлов без обновления. -//////////////////////////////////////////////////////////////////////////////// -// Удаление файла. Перед удалением снимается атрибут "Только для чтения". +#Область УдалениеФайлаПередУдалениемСнимаетсяАтрибутТолькоДляЧтения // Параметры: // ПолноеИмяФайла - Строка @@ -4673,8 +4647,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Получение файла из хранилища в рабочий каталог. +#КонецОбласти + +#Область ПолучениеФайлаИзХранилищаВРабочийКаталог // Получает Файл из хранилища файлов в рабочий каталог // и возвращает путь к этому файлу. @@ -4764,8 +4739,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Получение файла из программы на компьютер. +#КонецОбласти + +#Область ПолучениеФайлаИзПрограммыНаКомпьютер // Получить файл из программы на компьютер и возвращает путь к этому файлу. // @@ -4797,21 +4773,22 @@ Возврат; КонецЕсли; - ПолучитьФайлВерсииВРабочийКаталогПапки(ОбработчикРезультата, ДанныеФайла, ПолноеИмяФайла, ДанныеФайла.НаЧтение, - ИдентификаторФормы, ДополнительныеПараметры); + ПолучитьФайлВерсииВРабочийКаталогПапки(ОбработчикРезультата, ДанныеФайла, ПолноеИмяФайла, + ДанныеФайла.НаЧтение, ИдентификаторФормы, ДополнительныеПараметры); КонецЕсли; КонецПроцедуры Функция РабочийКаталогДоступен(РабочийКаталогВладельца, Владелец) + Результат = Ложь; - // Создать каталог для файлов. Попытка // В случае если передан каталог, имя которого запрещено в текущей файловой системе, // исключение вызвано не будет, хотя каталог будет не доступен. СведенияОКаталоге = Новый Файл(РабочийКаталогВладельца); Если НЕ СведенияОКаталоге.Существует() Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Каталог папки файлов %1 не существует.'"), + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Каталог папки файлов %1 не существует.'"), Владелец); КонецЕсли; СоздатьКаталог(РабочийКаталогВладельца); @@ -4835,6 +4812,7 @@ РаботаСФайламиСлужебныйВызовСервера.ОчиститьРабочийКаталог(Владелец); КонецПопытки; Возврат Результат; + КонецФункции // См. одноименную процедуру в общем модуле РаботаСФайламиКлиент. @@ -4879,7 +4857,7 @@ КонецЕсли; Контекст.Вставить("ДляРедактирования", ЗначениеЗаполнено(Контекст.ДанныеФайла.Редактирует)); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Новый ОписаниеОповещения( "ПолучитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст)); КонецПроцедуры @@ -4999,7 +4977,7 @@ Контекст.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось поместить файл с компьютера в приложение по причине:'") + Символы.ПС); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Новый ОписаниеОповещения( "ПоместитьПрисоединенныйФайлПослеПодключенияРасширения", ЭтотОбъект, Контекст)); КонецПроцедуры @@ -5206,8 +5184,8 @@ КонецЕсли; #Если ВебКлиент Тогда - Если НЕ РасширениеРаботыСФайламиПодключено() Тогда - ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата); + Если НЕ Расширение1СПредприятияПодключено() Тогда + ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(ОбработчикРезультата); Возврат; КонецЕсли; #КонецЕсли @@ -5265,8 +5243,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Удаление файла с компьютера и из регистра сведений. +#КонецОбласти + +#Область УдалениеФайлаСКомпьютераИИзРегистраСведений // Удалить с компьютера и из регистра сведений. // @@ -5362,8 +5341,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Очистка рабочего каталога. +#КонецОбласти + +#Область ОчисткаРабочегоКаталога // Освободить место для помещения файла - если место есть, ничего не делает. // @@ -5532,8 +5512,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Получение файла с сервера и регистрация в локальном кэше. +#КонецОбласти + +#Область ПолучениеФайлаССервераИРегистрацияВЛокальномКэше // Получить Файл с сервера и зарегистрировать в локальном кэше. // @@ -5886,8 +5867,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Получение файла из хранилища в рабочий каталог. +#КонецОбласти + +#Область ПолучениеФайлаИзХранилищаВРабочийКаталог // Получает Файл из хранилища файлов в рабочий каталог папки // и возвращает путь к этому файлу. @@ -6066,8 +6048,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Получение файла с сервера и регистрация в рабочем каталоге. +#КонецОбласти + +#Область ПолучениеФайлаССервераИРегистрацияВРабочемКаталоге // Получить Файл с сервера и зарегистрировать в рабочем каталоге. // @@ -6157,8 +6140,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Проверка максимальной длины рабочего каталога с заменой и переносом файлов. +#КонецОбласти + +#Область ПроверкаМаксимальнойДлиныРабочегоКаталогаСЗаменойИПереносомФайлов // Проверяет максимальную длину, если нужно - меняет рабочий каталог и переносит файлы. // @@ -6285,8 +6269,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Копирование содержимого из одного каталога в другой. +#КонецОбласти + +#Область КопированиеСодержимогоИзОдногоКаталогаВДругой // Копирует все файлы в указанном каталоге в другой каталог. // @@ -6404,8 +6389,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Перенос содержимого рабочего каталога в новый. +#КонецОбласти + +#Область ПереносСодержимогоРабочегоКаталогаВНовый // Переносит все файлы в рабочем каталоге в другой каталог (в том числе и взятые на редактирование). // @@ -6507,8 +6493,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Удаление массива путей переданных папок и файлов. +#КонецОбласти + +#Область УдалениеМассиваПутейПереданныхПапокИФайлов // Удаляет все файлы и папки из переданного массива. // @@ -6559,8 +6546,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Импорт файлов с проверкой размера. +#КонецОбласти + +#Область ИмпортФайловСПроверкойРазмера // Импорт со вспомогательными операциями (проверка предельного размера, удаление файлов и показ // ошибок при импорте). @@ -6742,7 +6730,7 @@ ПоказатьОповещениеПользователя(ТекстСостояния); КонецЕсли; - Если ПараметрыВыполнения.УдалятьФайлыПослеДобавления = Истина Тогда + Если ПараметрыВыполнения.УдалитьФайлыПослеЗагрузки = Истина Тогда УдалитьФайлыПослеДобавления(ПараметрыВыполнения.МассивСтруктурВсехФайлов, ПараметрыВыполнения.МассивВсехПапок); КонецЕсли; @@ -6795,8 +6783,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сохранение файла на компьютер +#КонецОбласти + +#Область СохранениеФайлаНаКомпьютер // Сохранение файла на компьютер. // @@ -6813,7 +6802,7 @@ ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); ПараметрыВыполнения.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда СохранитьКакСРасширением(ПараметрыВыполнения); Иначе СохранитьКакБезРасширения(ПараметрыВыполнения); @@ -7063,7 +7052,7 @@ ПутьВыбораПрежний = ПараметрыВыполнения.ПутьВыбора; ПараметрыВыполнения.ПутьВыбора = Файл.Путь; Если ПутьВыбораПрежний <> ПараметрыВыполнения.ПутьВыбора Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПапкаДляСохранитьКак", ПараметрыВыполнения.ПутьВыбора); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПапкаДляСохранитьКак", ПараметрыВыполнения.ПутьВыбора); КонецЕсли; ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Новый Структура("ПолноеИмяФайла", ПолноеИмяФайла)); @@ -7156,8 +7145,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Показывает напоминание перед помещением файла, если оно настроено. +#КонецОбласти + +#Область ПоказываетНапоминаниеПередПомещениемФайлаЕслиОноНастроено // Покажет напоминание - если стоит настройка. // @@ -7169,7 +7159,7 @@ ПерсональныеНастройки = ПерсональныеНастройкиРаботыСФайлами(); Если ПерсональныеНастройки.ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда - Если Не РасширениеРаботыСФайламиПодключено() Тогда + Если Не Расширение1СПредприятияПодключено() Тогда ТекстНапоминания = НСтр("ru = 'Сейчас будет предложено выбрать файл для того, |чтобы поместить его в приложение и закончить редактирование. @@ -7195,8 +7185,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Проверяет размер файлов. +#КонецОбласти + +#Область ПроверяетРазмерФайлов // Проверить предельный размер файлов. // Возвращает Ложь, если есть файлы, превышающие предельный размер, @@ -7283,8 +7274,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Показывает информацию о том, что файл не был изменен. +#КонецОбласти + +#Область ПоказываетИнформациюОТомЧтоФайлНеБылИзменен // Покажет напоминание - если стоит настройка. // @@ -7313,8 +7305,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Загружает отредактированный файл в программу, снимает блокировку и рассылает оповещение. +#КонецОбласти + +#Область ЗагружаетОтредактированныйФайлВПрограммуСнимаетБлокировкуИРассылаетОповещение // Продолжение процедуры (см. выше). Процедура ЗакончитьРедактированиеСОповещениемЗавершение(Результат, ПараметрыВыполнения) Экспорт @@ -7344,7 +7337,7 @@ КонецЕсли; Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеПоСсылкамПослеУстановкиРасширения", ЭтотОбъект, Параметры); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры @@ -7450,8 +7443,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Захватывает файл, открывает диалог редактирования и рассылает оповещение. +#КонецОбласти + +#Область ЗахватываетФайлОткрываетДиалогРедактированияИРассылаетОповещение // Блокирует файл для редактирования и открывает его. Процедура РедактироватьСОповещением(ОбработчикРезультата, ОбъектСсылка, @@ -7483,8 +7477,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Захватывает файл или несколько файлов и рассылает оповещение. +#КонецОбласти + +#Область ЗахватываетФайлИлиНесколькоФайловИРассылаетОповещение // Выполняет блокировку файла или нескольких файлов. // @@ -7538,8 +7533,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Снимает блокировку файла и рассылает оповещение. +#КонецОбласти + +#Область СнимаетБлокировкуФайлаИРассылаетОповещение // Освобождает занятый ранее файл. // @@ -7596,8 +7592,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Открывает файл и рассылает оповещение. +#КонецОбласти + +#Область ОткрываетФайлИРассылаетОповещение // Открывает файл. // @@ -7618,7 +7615,7 @@ // Файл не содержит владельца, просто открываем его по ссылке из временного хранилища. Если НЕ ПараметрыВыполнения.ДанныеФайла.Свойство("Владелец") Или Не ЗначениеЗаполнено(ПараметрыВыполнения.ДанныеФайла.Владелец) Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьФайлРасширениеПредложено", РаботаСФайламиСлужебныйКлиент, ПараметрыВыполнения); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(ОписаниеОповещения); Возврат; КонецЕсли; @@ -7630,14 +7627,14 @@ КонецЕсли; Обработчик = Новый ОписаниеОповещения("ОткрытьФайлСОповещениемПослеУстановкиРасширения", ЭтотОбъект, ПараметрыВыполнения); - ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры // Продолжение процедуры (см. выше). Процедура ОткрытьФайлСОповещениемПослеУстановкиРасширения(РасширениеУстановлено, ПараметрыВыполнения) Экспорт - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда Обработчик = Новый ОписаниеОповещения("ОткрытьФайлСОповещениемСРасширениемПослеПолученияВерсииВРабочийКаталог", ЭтотОбъект, ПараметрыВыполнения); ПолучитьФайлВерсииВРабочийКаталог( Обработчик, @@ -7825,8 +7822,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Загружает файл в программу и рассылает оповещение. +#КонецОбласти + +#Область ЗагружаетФайлВПрограммуИРассылаетОповещение // Продолжение процедуры (см. выше). Процедура СохранитьИзмененияФайлаСОповещениемЗавершение(Результат, ПараметрыВыполнения) Экспорт @@ -7840,15 +7838,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Показывает диалог выбора файла, загружает выбранный файл в программу как версию и рассылает оповещение. +#КонецОбласти + +#Область ПоказываетДиалогВыбораФайлаЗагружаетВыбранныйФайлВПрограммуКакВерсиюИРассылаетОповещение // Выбирает файл и создает из него новую версию. Процедура ОбновитьИзФайлаНаДискеСОповещением(ОбработчикРезультата, ДанныеФайла, ИдентификаторФормы, ПараметрыДобавленияФайла = Неопределено) Экспорт - Если Не РасширениеРаботыСФайламиПодключено() Тогда - ПоказатьПредупреждениеОНеобходимостиРасширенияРаботыСФайлами(ОбработчикРезультата); + Если Не Расширение1СПредприятияПодключено() Тогда + ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(ОбработчикРезультата); Возврат; КонецЕсли; @@ -7878,8 +7877,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Шифрование файла. +#КонецОбласти + +#Область ШифрованиеФайла // Зашифровать файл. // @@ -7916,11 +7916,8 @@ Возврат; КонецЕсли; - // Не нужно ПредложитьУстановкуРасширенияРаботыСФайлами(), т.к. все делается в памяти через ДвоичныеДанные. - МассивВерсий = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИНавигационнаяСсылкаВсехВерсийФайла(ПараметрыВыполнения.ДанныеФайла.Ссылка, ПараметрыВыполнения.УникальныйИдентификатор); - Если МассивВерсий.Количество() = 0 Тогда ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Ложь); Возврат; @@ -8017,8 +8014,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Расшифровка файла. +#КонецОбласти + +#Область РасшифровкаФайла // Расшифровка файла. // @@ -8043,13 +8041,9 @@ ПараметрыВыполнения.Вставить("Успех", Ложь); ПараметрыВыполнения.Вставить("МассивДанныхДляЗанесенияВБазу", Новый Массив); - // Не нужно ПредложитьУстановкуРасширенияРаботыСФайлами(), т.к. все делается в памяти через ДвоичныеДанные. - МассивВерсий = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИНавигационнаяСсылкаВсехВерсийФайла( ПараметрыВыполнения.ФайлСсылка, ПараметрыВыполнения.УникальныйИдентификатор); - ПараметрыВыполнения.МассивДанныхДляЗанесенияВБазу = Новый Массив; - ПараметрыВыполнения.Вставить("ИзвлекатьТекстыФайловНаСервере", ОбщиеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере); @@ -8124,18 +8118,18 @@ АдресВременногоХранилищаТекста = ""; #Если Не ВебКлиент Тогда - Если Не ПараметрыВыполнения.ИзвлекатьТекстыФайловНаСервере Тогда - ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(ПараметрыВыполнения.ДанныеФайла.Расширение); - ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); - - АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, ПараметрыВыполнения.УникальныйИдентификатор); - Попытка - УдалитьФайлы(ПолныйПутьКФайлу); - Исключение - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), - "Предупреждение", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); - КонецПопытки; - КонецЕсли; + Если Не ПараметрыВыполнения.ИзвлекатьТекстыФайловНаСервере Тогда + ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(ПараметрыВыполнения.ДанныеФайла.Расширение); + ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); + + АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, ПараметрыВыполнения.УникальныйИдентификатор); + Попытка + УдалитьФайлы(ПолныйПутьКФайлу); + Исключение + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Предупреждение", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); + КонецПопытки; + КонецЕсли; #КонецЕсли ДанныеДляЗаписиНаСервере = Новый Структура; @@ -8173,11 +8167,12 @@ КонецПроцедуры +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Продолжения асинхронных процедур. -//////////////////////////////////////////////////////////////////////////////// -// Создает новый файл. +#Область СоздаетНовыйФайл // Создает новый файл интерактивно с вызовом диалога выбора режима создания Файла. // @@ -8244,7 +8239,7 @@ // 1 - из шаблона (копированием другого файла), // 2 - с компьютера (из файловой системы), // 3 - со сканера. -// ПараметрыВыполнения - Структура - типы значений и описания см. в РаботаСФайламиКлиент.ДобавитьФайл(). +// ПараметрыВыполнения - Структура - типы значений и описания см. в РаботаСФайламиКлиент.ДобавитьФайл(): // * ОбработчикРезультата. // * ВладелецФайла. // * ФормаВладелец @@ -8257,7 +8252,7 @@ Если РежимСоздания = 1 Тогда // Скопировать другой файла. ДобавитьНаОсновеШаблона(ПараметрыВыполнения); ИначеЕсли РежимСоздания = 2 Тогда // Загрузить из файловой системы. - Если РасширениеРаботыСФайламиПодключено() Тогда + Если Расширение1СПредприятияПодключено() Тогда ДобавитьИзФайловойСистемыСРасширением(ПараметрыВыполнения); Иначе ДобавитьИзФайловойСистемыБезРасширения(ПараметрыВыполнения); @@ -8424,8 +8419,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с криптографией из формы файла. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСКриптографиейИзФормыФайла // Параметры: // Форма - ФормаКлиентскогоПриложения @@ -8627,9 +8623,10 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с электронными подписями. -// +#КонецОбласти + +#Область РаботаСЭлектроннымиПодписями + Процедура ПодписатьФайл(ПрисоединенныйФайл, ДанныеФайла, ИдентификаторФормы, ОбработчикЗавершения = Неопределено, ОбработчикПриПолученииПодписи = Неопределено, ПараметрыПодписи = Неопределено) Экспорт @@ -8918,8 +8915,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Загружает структуру файлов и каталогов с компьютера в программу. +#КонецОбласти + +#Область ЗагружаетСтруктуруФайловИКаталоговСКомпьютераВПриложение // Возвращаемое значение: // Структура: @@ -8928,11 +8926,11 @@ // добавляются импортированные файлы. // * ГруппаФайлов - ОпределяемыйТип.ПрисоединенныйФайл - группа файлов, в которую добавляются // импортированные файлы. -// * ВыбранныеФайлы - СписокЗначений - импортируемые объекты Файл. +// * ВыбранныеФайлы - СписокЗначений - импортируемые объекты Файл с компьютера или устройства. // * Индикатор - Число - число от 0 до 100 - прогресс выполнения. // * Комментарий - Строка - комментарий. // * ХранитьВерсии - Булево - хранить версии. -// * УдалятьФайлыПослеДобавления - Булево - удалять файлы ВыбранныеФайлы после завершения импорта. +// * УдалитьФайлыПослеЗагрузки - Булево - удалять файлы ВыбранныеФайлы после завершения загрузки. // * Рекурсивно - Булево - рекурсивно обходить подкаталоги. // * ИдентификаторФормы - УникальныйИдентификатор - идентификатор формы. // * ПсевдоФайловаяСистема - Соответствие - эмуляция файловой системы - для строки (каталога) возвращает массив @@ -8948,7 +8946,7 @@ ПараметрыВыполнения.Вставить("ВыбранныеФайлы"); ПараметрыВыполнения.Вставить("Комментарий"); ПараметрыВыполнения.Вставить("ХранитьВерсии"); - ПараметрыВыполнения.Вставить("УдалятьФайлыПослеДобавления"); + ПараметрыВыполнения.Вставить("УдалитьФайлыПослеЗагрузки"); ПараметрыВыполнения.Вставить("Рекурсивно"); ПараметрыВыполнения.Вставить("ИдентификаторФормы"); ПараметрыВыполнения.Вставить("ПсевдоФайловаяСистема", Новый Соответствие); @@ -8973,7 +8971,7 @@ // * МассивСтруктурВсехФайлов - Массив - массив структур всех файлов. // * Комментарий - Строка - комментарий. // * ХранитьВерсии - Булево - хранить версии. -// * УдалятьФайлыПослеДобавления - Булево - удалять файлы ВыбранныеФайлы после завершения импорта. +// * УдалитьФайлыПослеЗагрузки - Булево - удалять файлы ВыбранныеФайлы после завершения импорта. // * Рекурсивно - Булево - рекурсивно обходить подкаталоги. // * КоличествоСуммарное - Число - количество суммарное импортированных файлов. // * Счетчик - Число - счетчик обработанных файлов (не обязательно файл будет загружен). @@ -9185,7 +9183,11 @@ КонецЕсли; // Создаем элемент справочника Файлы. - ИмпортироватьФайл(ВыбранныйФайл, Владелец, ПараметрыВыполнения, АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста); + ИмпортироватьФайл(ВыбранныйФайл, Владелец, ПараметрыВыполнения, АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста); + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -9209,7 +9211,8 @@ // // ПараметрыВыполнения - см. ИмпортФайловРекурсивно.ПараметрыВыполнения // -Процедура ИмпортироватьФайл(Знач ВыбранныйФайл, Знач Владелец, Знач ПараметрыВыполнения, Знач АдресВременногоХранилищаФайла, Знач АдресВременногоХранилищаТекста) +Процедура ИмпортироватьФайл(Знач ВыбранныйФайл, Знач Владелец, Знач ПараметрыВыполнения, + Знач АдресВременногоХранилищаФайла, Знач АдресВременногоХранилищаТекста) Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.Владелец) Тогда @@ -9253,8 +9256,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие служебные процедуры и функции. +#КонецОбласти + +#Область ПрочиеСлужебныеПроцедурыИФункции // При переименовании файла обновляет информацию в рабочем каталоге (имя файла на компьютере и в регистре). // @@ -9325,7 +9329,7 @@ // Процедура ОткрытьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла, ИдентификаторВладельца = Неопределено) - Если Не РасширениеРаботыСФайламиПодключено() Тогда + Если Не Расширение1СПредприятияПодключено() Тогда Возврат; КонецЕсли; @@ -9479,9 +9483,7 @@ Процедура ОбходФайловТаблица(Знач Путь, Знач МассивФайлов, Знач ТаблицаФайлов) #Если Не ВебКлиент Тогда - Перем Версия; - Перем ДатаПомещения; - + ИмяКаталога = РабочийКаталогПользователя(); АнализируемыеФайлы = Новый Массив; Для Каждого ВыбранныйФайл Из МассивФайлов Цикл @@ -9596,8 +9598,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Возвращаемое значение: // см. РаботаСФайлами.НастройкиРаботыСФайлами @@ -10188,13 +10191,12 @@ ПараметрыФормы.Вставить("ПапкаДляДобавления", ПапкаДляДобавления); ПараметрыФормы.Вставить("МассивИменФайлов", МассивИменФайлов); - ОткрытьФорму("Справочник.Файлы.Форма.ФормаПеретаскивания", ПараметрыФормы); + ОткрытьФорму("Справочник.Файлы.Форма.ПеретаскиваниеФайлов", ПараметрыФормы); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции для асинхронных методов. -// +#Область СлужебныеПроцедурыИФункцииДляАсинхронныхМетодов + // Общее описание параметров: // Обработчик - ОписаниеОповещения, Неопределено, Структура - Процедура-обработчик асинхронного метода. // * Неопределено - Обработка не требуется. @@ -10735,7 +10737,7 @@ // Загружает файл с клиента во временное хранилище на сервере. Не работает без расширения для работы с 1С:Предприятием. Функция ПоместитьФайлСДискаВоВременноеХранилище(ПолноеИмяФайла, АдресФайла = "", УникальныйИдентификатор = Неопределено) - Если Не РасширениеРаботыСФайламиПодключено() Тогда + Если Не Расширение1СПредприятияПодключено() Тогда Возврат Неопределено; КонецЕсли; ЧтоЗагрузить = Новый Массив; @@ -10748,8 +10750,9 @@ Возврат РезультатЗагрузки[0].Хранение; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функция для работы со сканером. +#КонецОбласти + +#Область ПроцедурыИФункцияДляРаботыСоСканером Процедура ПроинициализироватьКомпоненту(ОповещениеВозврата, ПредложитьУстановить = Ложь) Экспорт @@ -10805,9 +10808,10 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры для поддержки асинхронной модели. -// +#КонецОбласти + +#Область ВспомогательныеПроцедурыДляПоддержкиАсинхроннойМодели + Функция КлиентПоддерживаетСинхронныеВызовы() #Если ВебКлиент Тогда @@ -10826,8 +10830,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработка событий общих форм работы с файлами. +#КонецОбласти + +#Область ОбработкаСобытийОбщихФормРаботыСФайлами // Выбрать режим открытия файла и начать редактирование. // Варианты "Редактировать", "Отмена". @@ -10878,7 +10883,7 @@ ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата); Обработчик = Новый ОписаниеОповещения("ВыбратьРежимИРедактироватьФайлЗавершение", ЭтотОбъект, ПараметрыВыполнения); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВыбораРежимаОткрытия", , , , , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.КакОткрытьФайл", , , , , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); Возврат; КонецЕсли; @@ -10931,14 +10936,18 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////////// -// Печать табличного или офисного документа со штампом электронной подписи. +#КонецОбласти + +#Область ПечатьТабличногоИлиОфисногоДокументаСоШтампомЭлектроннойПодписи Процедура НапечататьФайлСоШтампом(Ссылка, УникальныйИдентификатор) Экспорт - ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайла( - Ссылка, УникальныйИдентификатор, Истина); - + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайла(Ссылка, УникальныйИдентификатор, Истина); + Если Не ДанныеФайла.ПодписанЭП Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Печать документа со штампом электронной подписи недоступна.'")); + Возврат; + КонецЕсли; + Если ДанныеФайла.Зашифрован Тогда МассивСертификатовШифрования = ДанныеФайла.МассивСертификатовШифрования; ПолучитьРасшифрованныеДанныеДляПечати(ДанныеФайла, УникальныйИдентификатор); @@ -10986,7 +10995,6 @@ КонецЕсли; Контекст.ДанныеФайла.СсылкаНаДвоичныеДанныеФайла = АдресФайла; - ПечатьФайлаСоШтампом(Контекст.ДанныеФайла); КонецПроцедуры @@ -10996,7 +11004,7 @@ Документ = РаботаСФайламиСлужебныйВызовСервера.ДокументСоШтампом(ДанныеФайла); НаименованиеДокумента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (со штампом)'"), - ДанныеФайла.Наименование); + ДанныеФайла.Наименование); Если ТипЗнч(Документ) = Тип("ТабличныйДокумент") Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда @@ -11354,12 +11362,20 @@ ИмяЛогФайла = ПараметрыЖурналаСканирования.ИмяЛогФайла; Если Перезапуск И ИмяЛогФайла <> Неопределено Тогда + УстановитьИмяЛогФайла(ПодключаемыйМодуль, ""); + ФайлЛога = Новый Файл(ИмяЛогФайла); Если ФайлЛога.Существует() Тогда УдалитьФайлы(ИмяЛогФайла); КонецЕсли; - КонецЕсли; + + КаталогФайла = Новый Файл(ФайлЛога.Путь); + Если Не КаталогФайла.Существует() Тогда + ИмяЛогФайла = ""; + КонецЕсли; + + КонецЕсли; КаталогЖурналаСканирования = ПараметрыЖурналаСканирования.КаталогЖурналаСканирования; ИспользоватьКаталогЖурналаСканирования = ПараметрыЖурналаСканирования.ИспользоватьКаталогЖурналаСканирования; @@ -11465,25 +11481,24 @@ КонецПроцедуры -Процедура ПоказатьОшибкуСканирования(Форма, Заголовок, ПодробноеПредставлениеОшибки, РежимТребуетсяПомощь = Ложь) Экспорт - - ПараметрыОткрытияФормы = Новый Структура("Заголовок, ПодробноеПредставлениеОшибки", - Заголовок, ПодробноеПредставлениеОшибки); - ПараметрыОткрытияФормы.Вставить("ИмяУстройстваСканирования", Форма.ИмяУстройстваСканирования); - ПараметрыОткрытияФормы.Вставить("ПоказыватьДиалогСканера", Форма.ПоказыватьДиалогСканера); - ПараметрыОткрытияФормы.Вставить("РежимТребуетсяПомощь", РежимТребуетсяПомощь); - ПараметрыОткрытияФормы.Вставить("Разрешение", Форма.РазрешениеПеречисление); +Процедура ПоказатьОшибкуСканирования(Форма, Заголовок, ПодробноеПредставлениеОшибки) - Контекст = Новый Структура("РежимТребуетсяПомощь", РежимТребуетсяПомощь); - ПослеЗакрытияФормыОшибки = Новый ОписаниеОповещения("ПослеЗакрытияФормыОшибки", Форма, Контекст); - ОткрытьФорму("Обработка.Сканирование.Форма.ОшибкаСканирования", ПараметрыОткрытияФормы, Форма,,,, - ПослеЗакрытияФормыОшибки); + Если Не ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "ПредставлениеОшибки") Тогда + Возврат; + КонецЕсли; + + Форма.ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1: %2'"), + Заголовок, + ПодробноеПредставлениеОшибки); + + ПоказатьПредупреждение(, Заголовок); КонецПроцедуры Функция БылаОшибкаСканирования() Экспорт - ПараметрыЗаданияСканирования = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + ПараметрыЗаданияСканирования = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить( "КомпонентаСканирования", "ПараметрыЗаданияСканирования", Неопределено); Возврат ПараметрыЗаданияСканирования <> Неопределено; @@ -11492,7 +11507,7 @@ Процедура УдалитьОшибкуСканирования(ПодключаемыйМодуль, ОповещениеЗавершения = Неопределено, ОчиститьЖурналКомпоненты = Истина) Экспорт - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", Неопределено); ВключитьЖурналСканирования(ПодключаемыйМодуль, ОповещениеЗавершения, ОчиститьЖурналКомпоненты); @@ -11555,7 +11570,8 @@ Контекст.Вставить("КаталогВременныхФайлов", КаталогВременныхФайлов); Контекст.Вставить("ТехническаяИнформация", ТехническаяИнформация); - Текст = НСтр("ru = 'Информация о компьютере:'") + Символы.ПС + СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки(); + ИнформацияДляПоддержки = СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки(); + Текст = НСтр("ru = 'Информация о компьютере:'") + Символы.ПС + ИнформацияДляПоддержки; Контекст.Вставить("ТекстСводнойИнформации", Текст); ОписаниеОповещения = Новый ОписаниеОповещения("СводнаяИнформацияПослеПолученияКомпоненты", ЭтотОбъект, Контекст); @@ -11632,6 +11648,10 @@ КонецЕсли; КонецПроцедуры +#КонецОбласти + +#КонецОбласти + #Область УдалениеДанныхФайловИВерсий Процедура УдалитьДанные(ОбработчикЗавершения, ФайлИлиВерсия, УникальныйИдентификатор) Экспорт @@ -11733,7 +11753,8 @@ ФайлИлиВерсия = ФайлыИлиВерсии[0]; Если ФайлыИлиВерсии.Количество() = 1 Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Удалить файл %1 без возможности восстановления?'"), + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Удалить файл %1 без возможности восстановления?'"), Строка(ФайлИлиВерсия)); ТекстЗаголовка = НСтр("ru = 'Удаление файла'"); Иначе @@ -11755,7 +11776,8 @@ Контекст.ФайлыИлиВерсии, Контекст.УникальныйИдентификатор); Предупреждения = Новый Соответствие; - Результат = Новый Структура("Файлы,ИндексУдаляемогоФайла,ОбработчикЗавершения,ТекстПредупреждения", Новый Массив, 0); + Результат = Новый Структура("Файлы,ИндексУдаляемогоФайла,ОбработчикЗавершения,ТекстПредупреждения", + Новый Массив, 0); Для Каждого РезультатУдаления Из РезультатыУдаления Цикл Если РезультатУдаления.Значение.Файлы.Количество() > 0 Тогда @@ -11778,7 +11800,8 @@ ТекстПредупреждения = ""; Для Каждого Предупреждение Из Предупреждения Цикл ТекстПредупреждения = ?(ТекстПредупреждения = "", "", Символы.ПС) - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1: %2'"), Предупреждение.Ключ, Предупреждение.Значение); + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1: %2'"), + Предупреждение.Ключ, Предупреждение.Значение); КонецЦикла; ОповеститьОбУдаленииДанных(Контекст.ОбработчикЗавершения, ТекстПредупреждения); КонецЕсли; @@ -11886,4 +11909,148 @@ Возврат Результат; КонецФункции -#КонецОбласти +// Формирует техническую информацию для поддержки. +// +// Параметры: +// ОписаниеОшибки - Строка - основное описание ошибки. +// ОбработчикЗавершения - ОписаниеОповещения, Неопределено - обработчик завершения, который вызывается после +// формирования технической информации. В Результате +// возвращается Структура с полями: +// * ТехническаяИнформация - Строка - техническая информация. +// * ДополнительныеФайлы - Массив из см. ОбращенияВТехническуюПоддержкуСлужебныйКлиент.ДанныеДополнительногоФайла. +// +Процедура СформироватьИнформациюДляПоддержки(ОписаниеОшибки, ОбработчикЗавершения = Неопределено) Экспорт + +#Если Не ВебКлиент Тогда + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОписаниеОшибки", ОписаниеОшибки); + ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПродолжитьФормированиеИнформацииДляПоддержки", + ЭтотОбъект, + ДополнительныеПараметры); + + ПроинициализироватьКомпоненту(ОписаниеОповещения, Истина); + +#КонецЕсли + +КонецПроцедуры + +Процедура ПродолжитьФормированиеИнформацииДляПоддержки(Результат, ДополнительныеПараметры) Экспорт + + РезультатФормирования = Новый Структура; + РезультатФормирования.Вставить("ТехнологическаяИнформация", ""); + РезультатФормирования.Вставить("ДополнительныеФайлы", Новый Массив); + + ИнформацияДляПоддержки = Новый Массив; + ИнформацияДляПоддержки.Добавить(СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки()); + ИнформацияДляПоддержки.Добавить(НСтр("ru = 'Техническая информация'")); + ИнформацияДляПоддержки.Добавить(ДополнительныеПараметры.ОписаниеОшибки); + ИнформацияДляПоддержки.Добавить(""); + + ПодключаемыйМодуль = Неопределено; + + Если Результат.Подключено Тогда + + Попытка + + ПодключаемыйМодуль = Результат.ПодключаемыйМодуль; + ВерсияКомпоненты = ПодключаемыйМодуль.Версия(); + + ИнформацияОКомпоненте = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Версия компоненты %1: %2'"), "ImageScan", ВерсияКомпоненты); + + ИнформацияДляПоддержки.Добавить(ИнформацияОКомпоненте); + ИнформацияДляПоддержки.Добавить(""); + + Исключение + + ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьЖурналСканирования(НСтр("ru = 'Версия компоненты'"), ПодробноеПредставлениеОшибки, Истина); + + КонецПопытки; + + КонецЕсли; + + РежимРаботы = РежимРаботыПриложенияДляПоддержки(); + ИнформацияДляПоддержки.Добавить(РежимРаботы); + + ТехническаяИнформация = РаботаСФайламиСлужебныйВызовСервера.ТехническаяИнформация(); + ИнформацияДляПоддержки.Добавить(ТехническаяИнформация.ТехническаяИнформацияОВерсияхПодсистемИРасширениях); + + РезультатФормирования.ТехнологическаяИнформация = СтрСоединить(ИнформацияДляПоддержки, Символы.ПС); + + ДанныеФайлаЛогирования = ДанныеФайлаЛогированияКомпонентыДляПоддержки(); + + Если ДанныеФайлаЛогирования <> Неопределено Тогда + РезультатФормирования.ДополнительныеФайлы.Добавить(ДанныеФайлаЛогирования); + КонецЕсли; + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикЗавершения, РезультатФормирования); + УдалитьОшибкуСканирования(ПодключаемыйМодуль); + +КонецПроцедуры + +Функция ДанныеФайлаЛогированияКомпонентыДляПоддержки() + + Результат = Неопределено; + + Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + Возврат Результат; + КонецЕсли; + + ПараметрыЖурналаСканирования = РаботаСФайламиСлужебныйВызовСервера.ПараметрыЖурналаСканирования( + ИдентификаторКлиента()); + + ИмяФайлаЛогирования = ПараметрыЖурналаСканирования.ИмяЛогФайла; + ФайлЛогирования = Новый Файл(ИмяФайлаЛогирования); + + Если ФайлЛогирования.Существует() Тогда + + АдресХраненияЛогов = ПоместитьВоВременноеХранилище( + Новый ДвоичныеДанные(ИмяФайлаЛогирования), + Новый УникальныйИдентификатор); + + // Служба технической поддержки поддерживает вложения формата "txt". + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + Результат = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ДанныеДополнительногоФайла( + АдресХраненияЛогов, + НСтр("ru = 'ImageScan.txt'")); + + Иначе + + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл журнала компоненты сканирования не существует: %1.'"), + ИмяФайлаЛогирования); + + ЗаписатьЖурналСканирования(НСтр("ru = 'Файл компоненты'"), Комментарий, Истина); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция РежимРаботыПриложенияДляПоддержки() + + Результат = ""; + + Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда + Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда + Результат = НСтр("ru = 'Режим работы информационной базы: Файловый через веб-сервер'"); + Иначе + Результат = НСтр("ru = 'Режим работы информационной базы: Файловый'"); + КонецЕсли; + Иначе + Результат = НСтр("ru = 'Режим работы информационной базы: Клиент-серверный'"); + КонецЕсли; + + Возврат Результат + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl index e7995187e..0df2dcee4 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиентСервер/Module.bsl @@ -128,8 +128,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для пользовательского интерфейса. +#Область ДляПользовательскогоИнтерфейса // Возвращает сообщение о недопустимости подписания занятого файла. // @@ -296,8 +295,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие +#КонецОбласти + +#Область Прочие // Только для внутреннего использования. Процедура ЗаполнитьСтатусПодписи(СтрокаПодписи, ТекущаяДата) Экспорт @@ -321,30 +321,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Синхронизация файлов +#КонецОбласти -Функция АдресВОблачномСервисе(Сервис, Href) Экспорт - - АдресОбъекта = Href; - - Если Не ПустаяСтрока(Сервис) Тогда - Если Сервис = "https://webdav.yandex.com" Тогда - АдресОбъекта = СтрЗаменить(Href, "https://webdav.yandex.com", "https://disk.yandex.com/client/disk"); - // Локализация - ИначеЕсли Сервис = "https://webdav.yandex.ru" Тогда - АдресОбъекта = СтрЗаменить(Href, "https://webdav.yandex.ru", "https://disk.yandex.ru/client/disk"); - // Конец Локализация - ИначеЕсли Сервис = "https://dav.box.com/dav" Тогда - АдресОбъекта = "https://app.box.com/files/0/"; - ИначеЕсли Сервис = "https://dav.dropdav.com" Тогда - АдресОбъекта = "https://www.dropbox.com/home/"; - КонецЕсли; - КонецЕсли; - - Возврат АдресОбъекта; - -КонецФункции +#Область СинхронизацияФайлов // Параметры занятия файла на редактирование. // @@ -382,6 +361,8 @@ КонецФункции +#КонецОбласти + #Область ИзвлечениеТекста // Извлекает текст в соответствии с кодировкой. @@ -553,8 +534,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции Функция ЭтоЗарезервированноеИмяКаталога(ИмяПодКаталога) @@ -950,4 +930,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl index cf54d6a8a..41a45d424 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйПовтИсп/Module.bsl @@ -125,17 +125,15 @@ УстановитьПривилегированныйРежим(Истина); СписокРасширений = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); - Если СписокРасширений = Неопределено ИЛИ СписокРасширений = "" Тогда + Если Не ЗначениеЗаполнено(СписокРасширений) Тогда СписокРасширений = ВРег(СтрСоединить(РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений().ВыгрузитьЗначения(), " ")); Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокРасширений); КонецЕсли; - Результат = ""; - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - + Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); - Результат = СписокЗапрещенныхРасширений + " " + СписокРасширений; + Результат = ?(ЗначениеЗаполнено(СписокЗапрещенныхРасширений), СписокЗапрещенныхРасширений + " " + СписокРасширений, + СписокЗапрещенныхРасширений); Иначе Результат = СписокРасширений; КонецЕсли; @@ -151,30 +149,26 @@ СписокРасширенийФайловOpenDocumentОбластиДанных = Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Получить(); - Если СписокРасширенийФайловOpenDocumentОбластиДанных = Неопределено - ИЛИ СписокРасширенийФайловOpenDocumentОбластиДанных = "" Тогда - + Если Не ЗначениеЗаполнено(СписокРасширенийФайловOpenDocumentОбластиДанных) Тогда СписокРасширенийФайловOpenDocumentОбластиДанных = "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; - Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Установить( СписокРасширенийФайловOpenDocumentОбластиДанных); КонецЕсли; - ИтоговыйСписокРасширений = ""; + Результат = ""; - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда СписокЗапрещенныхРасширений = Константы.СписокРасширенийФайловOpenDocument.Получить(); - - ИтоговыйСписокРасширений = - СписокЗапрещенныхРасширений + " " + СписокРасширенийФайловOpenDocumentОбластиДанных; + Результат = ?(ЗначениеЗаполнено(СписокЗапрещенныхРасширений), + СписокЗапрещенныхРасширений + " " + СписокРасширенийФайловOpenDocumentОбластиДанных, + СписокРасширенийФайловOpenDocumentОбластиДанных); Иначе - ИтоговыйСписокРасширений = СписокРасширенийФайловOpenDocumentОбластиДанных; + Результат = СписокРасширенийФайловOpenDocumentОбластиДанных; КонецЕсли; - Возврат ИтоговыйСписокРасширений; + Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 74d9501be..edb212e6f 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -383,7 +383,7 @@ НайденныеСтроки[0].СертификатДляШифрования, Неопределено); КонецЕсли; - // Шифрование каждого файла, если не выбрано архивирование + // Шифрование каждого файла, если не выбрано архивирование Если ЗначениеЗаполнено(ПараметрыДоставки.СертификатДляШифрования) И Не ПараметрыДоставки.Архивировать Тогда ЗашифрованныеВложения = Новый Соответствие; Для Каждого Вложение Из ВложенияПолучателя Цикл @@ -422,27 +422,19 @@ Попытка ОтправитьОтчетыПолучателю(ВложенияПолучателя, ПараметрыДоставки, ПараметрыЖурнала, СтрокаПолучатель); РассылкаВыполнена = Истина; - ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; - КоличествоОтправлено = КоличествоОтправлено + 1; - ТекстПрогресса = ТекстПрогрессаВыполненияРассылкиОтчетов(ПараметрыДоставки, КоличествоОтправлено, КоличествоКОтправке); - ПроцентВыполнения = Окр(КоличествоОтправлено * 100 / КоличествоКОтправке); - ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, ТекстПрогресса); - - ДополнительныеСведения = ""; - Если ОтправлятьСкрытыеКопииОтправителю Тогда - ДополнительныеСведения = НСтр("ru = 'Копия направлена отправителю.'"); - КонецЕсли; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчеты отправлены ''%1'' от %2. %3'"), ПредставлениеПолучателя, ПредставлениеОтправителя, - ДополнительныеСведения); - - ЗаписьЖурнала(ПараметрыЖурнала, , ТекстСообщения); - Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты( + ИнформацияОбОшибке) Тогда + + ВызватьИсключение; + КонецЕсли; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось отправить отчеты получателю ''%1'':'"), ПредставлениеПолучателя); РасширенноеПредставлениеОшибки = РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки( - ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка(), Ложь); + ИнформацияОбОшибке, ОбщегоНазначения.КодОсновногоЯзыка(), Ложь); ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения, РасширенноеПредставлениеОшибки); Если НЕ ИспользуетсяПочтовыйКлиент() И ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") @@ -461,6 +453,22 @@ КонецПопытки; Если РассылкаВыполнена Тогда + ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; + КоличествоОтправлено = КоличествоОтправлено + 1; + ТекстПрогресса = ТекстПрогрессаВыполненияРассылкиОтчетов(ПараметрыДоставки, КоличествоОтправлено, КоличествоКОтправке); + ПроцентВыполнения = Окр(КоличествоОтправлено * 100 / КоличествоКОтправке); + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, ТекстПрогресса); + + ДополнительныеСведения = ""; + Если ОтправлятьСкрытыеКопииОтправителю Тогда + ДополнительныеСведения = НСтр("ru = 'Копия направлена отправителю.'"); + КонецЕсли; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчеты отправлены ''%1'' от %2. %3'"), ПредставлениеПолучателя, ПредставлениеОтправителя, + ДополнительныеСведения); + + ЗаписьЖурнала(ПараметрыЖурнала, , ТекстСообщения); + ПараметрыДоставки.Получатели.Удалить(СтрокаПолучатель.Ключ); КонецЕсли; КонецЦикла; @@ -1033,13 +1041,13 @@ КомандаСоздать.Действие = "РассылкаОтчетовКлиент.СоздатьНовуюРассылкуИзОтчета"; КомандаСоздать.Картинка = БиблиотекаКартинок.РассылкаОтчетов; КомандаСоздать.Заголовок = НСтр("ru = 'Создать рассылку отчетов...'"); - КомандаСоздать.Подсказка = НСтр("ru = 'Создать новую рассылку отчетов и добавить в нее отчет с текущими настройками.'"); + КомандаСоздать.Подсказка = НСтр("ru = 'Отправлять отчет автоматически по расписанию по почте, публиковать в каталог и т.п.'"); Команды.Добавить(КомандаСоздать); КомандаПрисоединить = Форма.Команды.Добавить("РассылкаОтчетовПрисоединитьКСуществующей"); КомандаПрисоединить.Действие = "РассылкаОтчетовКлиент.ПрисоединитьОтчетКСуществующейРассылке"; - КомандаПрисоединить.Заголовок = НСтр("ru = 'Включить в существующую рассылку отчетов...'"); - КомандаПрисоединить.Подсказка = НСтр("ru = 'Присоединить отчет с текущими настройками к существующей рассылке отчетов.'"); + КомандаПрисоединить.Заголовок = НСтр("ru = 'Включить в рассылку отчетов...'"); + КомандаПрисоединить.Подсказка = НСтр("ru = 'Включить вариант отчета в существующую рассылку.'"); Команды.Добавить(КомандаПрисоединить); КоличествоРассылокСОтчетом = КоличествоРассылокСОтчетом(Форма.НастройкиОтчета.ВариантСсылка); @@ -1056,16 +1064,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Панели администрирования. +#Область ПанелиАдминистрирования // Возвращает Истина если у пользователя есть право на сохранение рассылок отчетов. Функция ПравоДобавления() Экспорт Возврат ТекстОшибкиПроверкиПраваДобавления() = ""; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок. Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт @@ -1347,10 +1355,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Выполнение регламентных заданий. +#Область ВыполнениеРегламентныхЗаданий // Запускает рассылку и контролирует результат. // @@ -1383,8 +1392,9 @@ ВыполнитьРассылкуОтчетов(Рассылка, ПараметрыЖурнала(Рассылка), Новый Структура("ЗапускЗафиксирован", Истина)); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#КонецОбласти + +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Формирует список получателей из табличной части "Получатели" рассылки. // @@ -1620,7 +1630,7 @@ КонецЕсли; Если СписокПолучателей.Количество() = 0 Тогда - ТекстОшибок = НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по одной из возможных причин: + ТекстОшибок = НСтр("ru = 'Не удалось сформировать список получателей ""%1"" по одной из возможных причин: | - У получателей не заполнен адрес электронной почты ""%2""; | - Не заполнен список получателей или получатели помечены на удаление; | - Выбраны пустые группы получателей; @@ -2097,294 +2107,30 @@ // * Ключ - Строка - имя файла // * Значение - Строка - полное имя файла // -// Возвращаемое значение: -// Структура: -// * Доставка - Строка - представление способа доставки. -// * Выполнена - Булево - Истина, если доставка выполнена хотя бы одним из способов. +// Возвращаемое значение: +// Булево - Истина, если доставка выполнена хотя бы одним из способов. // Функция ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения) Экспорт Результат = Ложь; - ШаблонСообщенияОбОшибке = НСтр("ru = 'Отчеты не доставлены'"); - РежимТестирования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыДоставки, "РежимТестирования", Ложь); - //////////////////////////////////////////////////////////////////////////// // В сетевой каталог. - Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда - СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогWindows; - - Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда - СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогLinux; - КонецЕсли; - - ВсеПолучатели = СформироватьМассивПолучателейРассылки(ПараметрыЖурнала.Данные, ПараметрыЖурнала); - Попытка - КоличествоОтправлено = 0; - КоличествоКОтправке = Вложения.Количество(); - Для Каждого Вложение Из Вложения Цикл - КопироватьФайл(Вложение.Значение, СетевойКаталогСервера + Вложение.Ключ); - Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( - ПараметрыДоставки.ПредставлениеОтчетовПолучателя, - Вложение.Значение, - ПараметрыДоставки.СетевойКаталогWindows + Вложение.Ключ); - КонецЕсли; - КоличествоОтправлено = КоличествоОтправлено + 1; - ТекстПрогресса = ТекстПрогрессаВыполненияРассылкиОтчетов(ПараметрыДоставки, КоличествоОтправлено, КоличествоКОтправке); - ПроцентВыполнения = Окр(КоличествоОтправлено * 100 / КоличествоКОтправке); - ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, ТекстПрогресса); - КонецЦикла; - Результат = Истина; - ПараметрыДоставки.ВыполненаВСетевойКаталог = Истина; - - Если РежимТестирования Тогда // Удалить все, что создали. - Для Каждого Вложение Из Вложения Цикл - УдалитьФайлы(СетевойКаталогСервера + Вложение.Ключ); - КонецЦикла; - КонецЕсли; - - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Отчеты помещены в сетевой каталог ''%1''.'"), СетевойКаталогСервера); - Для Каждого Получатель Из ВсеПолучатели Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.Комментарий = ТекстСообщения; - ПоляИстории.Выполнена = Истина; - ПоляИстории.ДатаДоставки = ТекущаяДатаСеанса(); - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЕсли; - Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , ШаблонСообщенияОбОшибке, ИнформацияОбОшибке()); - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - Для Каждого Получатель Из ВсеПолучатели Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.Комментарий = ШаблонСообщенияОбОшибке; - ПоляИстории.Выполнена = Ложь; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЕсли; - КонецПопытки; - + ВыполнитьДоставкуВСетевойКаталог(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат); КонецЕсли; - //////////////////////////////////////////////////////////////////////////// // На FTP ресурс. - Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда - - Цель = "ftp://"+ ПараметрыДоставки.Сервер +":"+ Формат(ПараметрыДоставки.Порт, "ЧН=0; ЧГ=0") + ПараметрыДоставки.Каталог; - ВсеПолучатели = СформироватьМассивПолучателейРассылки(ПараметрыЖурнала.Данные, ПараметрыЖурнала); - Попытка - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("ftp"); - Иначе - Прокси = Неопределено; - КонецЕсли; - Если ПараметрыДоставки.Свойство("Пароль") Тогда - Пароль = ПараметрыДоставки.Пароль; - Иначе - УстановитьПривилегированныйРежим(Истина); - ДанныеИзХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ПараметрыДоставки.Владелец, "FTPПароль"); - УстановитьПривилегированныйРежим(Ложь); - Пароль = ?(ЗначениеЗаполнено(ДанныеИзХранилища), ДанныеИзХранилища, ""); - КонецЕсли; - Соединение = Новый FTPСоединение( - ПараметрыДоставки.Сервер, - ПараметрыДоставки.Порт, - ПараметрыДоставки.Логин, - Пароль, - Прокси, - ПараметрыДоставки.ПассивноеСоединение, - 15); - Соединение.УстановитьТекущийКаталог(ПараметрыДоставки.Каталог); - КоличествоОтправлено = 0; - КоличествоКОтправке = Вложения.Количество(); - Для Каждого Вложение Из Вложения Цикл - Соединение.Записать(Вложение.Значение, ПараметрыДоставки.Каталог + Вложение.Ключ); - Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( - ПараметрыДоставки.ПредставлениеОтчетовПолучателя, - Вложение.Значение, - Цель + Вложение.Ключ); - КоличествоОтправлено = КоличествоОтправлено + 1; - ТекстПрогресса = ТекстПрогрессаВыполненияРассылкиОтчетов(ПараметрыДоставки, КоличествоОтправлено, КоличествоКОтправке); - ПроцентВыполнения = Окр(КоличествоОтправлено * 100 / КоличествоКОтправке); - ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, ТекстПрогресса); - КонецЕсли; - КонецЦикла; - - Результат = Истина; - ПараметрыДоставки.ВыполненаНаFTP = Истина; - - Если РежимТестирования Тогда // Удалить все, что создали. - Для Каждого Вложение Из Вложения Цикл - Соединение.Удалить(ПараметрыДоставки.Каталог + Вложение.Ключ); - КонецЦикла; - КонецЕсли; - - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Отчеты опубликованы на ''%1''.'"), Цель); - Для Каждого Получатель Из ВсеПолучатели Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.Комментарий = ТекстСообщения; - ПоляИстории.Выполнена = Истина; - ПоляИстории.ДатаДоставки = ТекущаяДатаСеанса(); - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЕсли; - Исключение - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(ПараметрыДоставки.Сервер); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Результат диагностики: - |%2'"), - ШаблонСообщенияОбОшибке, - РезультатДиагностики.ОписаниеОшибки); - Иначе - ТекстОшибки = ШаблонСообщенияОбОшибке; - КонецЕсли; - - ЗаписьЖурнала(ПараметрыЖурнала, , ТекстОшибки, ИнформацияОбОшибке()); - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - Для Каждого Получатель Из ВсеПолучатели Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.Комментарий = ТекстОшибки; - ПоляИстории.Выполнена = Ложь; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЕсли; - КонецПопытки; - + ВыполнитьДоставкуНаFTPРесурс(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат); КонецЕсли; - //////////////////////////////////////////////////////////////////////////// // В папку. - Если ПараметрыДоставки.ИспользоватьПапку Тогда - ВсеПолучатели = СформироватьМассивПолучателейРассылки(ПараметрыЖурнала.Данные, ПараметрыЖурнала); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); - Попытка - МодульРаботаСФайламиСлужебный.ПриВыполненииДоставкиВПапку(ПараметрыДоставки, Вложения); - Результат = Истина; - ПараметрыДоставки.ВыполненаВПапку = Истина; - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( - "ru = 'Отчеты помещены в папку ''%1''.'"), Строка(ПараметрыДоставки.Папка)); - Для Каждого Получатель Из ВсеПолучатели Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.Комментарий = ТекстСообщения; - ПоляИстории.Выполнена = Истина; - ПоляИстории.ДатаДоставки = ТекущаяДатаСеанса(); - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю( - ПоляИстории); - КонецЦикла; - КонецЕсли; - Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , ШаблонСообщенияОбОшибке, ИнформацияОбОшибке()); - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - Для Каждого Получатель Из ВсеПолучатели Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.Комментарий = ШаблонСообщенияОбОшибке; - ПоляИстории.Выполнена = Ложь; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю( - ПоляИстории); - КонецЦикла; - КонецЕсли; - КонецПопытки; - КонецЕсли; - + ВыполнитьДоставкуВПапку(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат); КонецЕсли; - //////////////////////////////////////////////////////////////////////////// // По электронной почте. - Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда - - Если ПараметрыДоставки.ТолькоУведомить Тогда - ШаблонСообщенияОбОшибке = НСтр("ru = 'Невозможно отправить уведомление о рассылке по электронной почте:'"); - ВложенияПисьма = Новый Соответствие; - ИначеЕсли НЕ ПараметрыДоставки.ПрикреплятьОтчетыВоВложения Тогда - ВложенияПисьма = Новый Соответствие; - Иначе - ШаблонСообщенияОбОшибке = НСтр("ru = 'Невозможно отправить отчет по электронной почте:'"); - ВложенияПисьма = Вложения; - КонецЕсли; - - Попытка - ОтправитьОтчетыПолучателю(ВложенияПисьма, ПараметрыДоставки, ПараметрыЖурнала); - Если Не ПараметрыДоставки.ТолькоУведомить Тогда - Результат = Истина; - КонецЕсли; - Если Результат = Истина Тогда - ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Истина; - КонецЕсли; - - Исключение - РасширенноеПредставлениеОшибки = РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки( - ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка(), Ложь); - - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ШаблонСообщенияОбОшибке, РасширенноеПредставлениеОшибки); - - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И НЕ ИспользуетсяПочтовыйКлиент() - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - Для Каждого СтрокаПолучатель Из ПараметрыДоставки.Получатели Цикл - АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(СтрокаПолучатель.Значение); - Для Каждого АдресЭП Из АдресаПолучателя Цикл - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, СтрокаПолучатель.Ключ, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = АдресЭП.Адрес; - ПоляИстории.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 %2", ШаблонСообщенияОбОшибке, РасширенноеПредставлениеОшибки); - ПоляИстории.Выполнена = Ложь; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, СтрокаПолучатель.Ключ, - АдресЭП.Адрес); - ПоляИстории.ИдентификаторПисьма = ""; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - - КонецЦикла; - КонецЕсли; - КонецПопытки; - + ВыполнитьДоставкуПоЭлектроннойПочте(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат); КонецЕсли; Возврат Результат; @@ -2810,8 +2556,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. +#КонецОбласти + +#Область ЛокальныеСлужебныеПроцедурыИФункции // Помимо формирования отчетов выполняет персонализацию отчетов по списку получателей // и формирует отчеты в разрезах получателей (если это необходимо). @@ -2924,7 +2671,7 @@ Иначе Период = ПолучитьПериодИзПользовательскихНастроек(ПараметрыОтчета.ПользовательскиеНастройкиКД); ОтчетПодготовленДляТекстаПисьма = Ложь; - // Сохранение табличного документа в форматы. + // Сохранение табличного документа в форматы. ПредставлениеФорматов = ""; Для Каждого Формат Из ПараметрыОтчета.Форматы Цикл @@ -2941,14 +2688,12 @@ НайтиСвободноеИмяФайла(ПолноеИмяФайла); СтандартнаяОбработка = Истина; - - // Механизм расширения РассылкаОтчетовПереопределяемый.ПередСохранениемТабличногоДокументаВФормат( - СтандартнаяОбработка, СтрокаОтчет.Значение, Формат, ПолноеИмяФайла); + СтандартнаяОбработка, СтрокаОтчет.Значение, Формат, ПолноеИмяФайла); - // Сохранение отчета встроенными средствами подсистемы. + // Сохранение отчета встроенными средствами. Если СтандартнаяОбработка = Истина Тогда - ЗаголовокОшибки = НСтр("ru = 'Ошибка записи отчета ''%1'' в формат ''%2'':'"); + ЗаголовокОшибки = НСтр("ru = 'Невозможно записать отчет ''%1'' в формате ''%2'':'"); Если ПараметрыФормата.ТипФайла = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, @@ -2958,7 +2703,6 @@ КонецЕсли; ДокументРезультат = СтрокаОтчет.Значение; // ТабличныйДокумент - Попытка ДокументРезультат.Записать(ПолноеИмяФайла, ПараметрыФормата.ТипФайла); Исключение @@ -2969,28 +2713,28 @@ КонецПопытки; КонецЕсли; - // Проверки и регистрация результата. + // Проверки и регистрация результата. ВременныйФайл = Новый Файл(ПолноеИмяФайла); Если Не ВременныйФайл.Существует() Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки + Символы.ПС + НСтр( - "ru = 'Файл ''%3'' не существует.'"), СтрокаОтчет.Ключ, ПараметрыФормата.Имя, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки + Символы.ПС + + НСтр("ru = 'Файл ''%3'' не существует.'"), СтрокаОтчет.Ключ, ПараметрыФормата.Имя, ВременныйФайл.ПолноеИмя)); Продолжить; КонецЕсли; - // Регистрация конечного результата - сохраненного отчета во временном каталоге. - // 3 - Файлы получателей - // Ключ - имя файла - // Значение - полный путь к файлу. - // Настройки - настройки файла. + // Регистрация конечного результата - сохраненного отчета во временном каталоге. + // 3 - Файлы получателей + // Ключ - имя файла + // Значение - полный путь к файлу. + // Настройки - настройки файла. СтрокаФайл = СтрокаОтчет.Строки.Добавить(); СтрокаФайл.Уровень = 3; СтрокаФайл.Ключ = ВременныйФайл.Имя; СтрокаФайл.Значение = ВременныйФайл.ПолноеИмя; СтрокаФайл.Настройки = Новый Структура("ФайлСКаталогом, ИмяФайла, ПолноеИмяФайла, ИмяКаталога, ПолноеИмяКаталога, - |Формат, Имя, Расширение, ТипФайла, Ссылка"); + |Формат, Имя, Расширение, ТипФайла, Ссылка"); СтрокаФайл.Настройки.Формат = Формат; ЗаполнитьЗначенияСвойств(СтрокаФайл.Настройки, ПараметрыФормата, "Имя, Расширение, ТипФайла"); @@ -3107,7 +2851,7 @@ ПараметрыФормата, ПараметрыДоставки, ПараметрыОтчета.ШаблонНаименования, Неопределено); НайтиСвободноеИмяФайла(ПолноеИмяФайла); - ЗаголовокОшибки = НСтр("ru = 'Ошибка записи отчета ''%1'' в формат ''%2'':'"); + ЗаголовокОшибки = НСтр("ru = 'Невозможно записать отчет ''%1'' в формате ''%2'':'"); Если ПараметрыФормата.ТипФайла = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, ПараметрыОтчета.ПредставлениеОтчета, @@ -3497,74 +3241,39 @@ Если ИспользуетсяПочтовыйКлиент() И ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") Тогда ОтправитьПисьмоВзаимодействие(ПараметрыДоставки, ПараметрыПисьма, СтрокаПолучатель, ПараметрыЖурнала); - Иначе - Письмо = ПодготовитьПисьмо(ПараметрыДоставки, ПараметрыПисьма); - РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(ПараметрыДоставки.УчетнаяЗапись, Письмо); - - Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") - И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда - ПредставлениеОтправителя = Строка(ПараметрыДоставки.УчетнаяЗапись); - - Если ПараметрыДоставки.Получатель <> Неопределено Тогда - Если ПараметрыДоставки.СкрытыеКопии Тогда - АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"), - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), ПараметрыПисьма.СкрытыеКопии); - Иначе - АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"), - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому); - КонецЕсли; - - Для Каждого Кому Из АдресаПолучателя Цикл - ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель) + " (" + Кому.Адрес + ")"; - - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, ПараметрыДоставки.Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = Кому.Адрес; - ТекстОшибкиПолучателя = РезультатОтправки.ОшибочныеПолучатели.Получить(Кому.Адрес); - Если ТекстОшибкиПолучателя <> Неопределено Тогда - ПоляИстории.Комментарий = ТекстОшибкиПолучателя; - ПоляИстории.Выполнена = Ложь; - Иначе - ПоляИстории.Комментарий = ТекстУспешнойОтправкиОтчетов(ПараметрыДоставки, СтрокаПолучатель, ПредставлениеПолучателя, ПредставлениеОтправителя); - ПоляИстории.Выполнена = Истина; - КонецЕсли; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, ПараметрыДоставки.Получатель, - Кому.Адрес); - ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP; + Возврат; + КонецЕсли; - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - ИначеЕсли ПараметрыДоставки.Получатели <> Неопределено Тогда - Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл - Если ПараметрыДоставки.ТолькоУведомить Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уведомления отправлены ''%1'' от %2. %3'"), ПредставлениеПолучателя, - ПредставлениеОтправителя); - Иначе - ТекстСообщения = ТекстУспешнойОтправкиОтчетов(ПараметрыДоставки, СтрокаПолучатель, ПредставлениеПолучателя, ПредставлениеОтправителя); - КонецЕсли; - АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); - Для Каждого Кому Из АдресаПолучателя Цикл - ПредставлениеПолучателя = Строка(Получатель.Ключ) + " (" + Кому.Адрес + ")"; - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель.Ключ, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = Кому.Адрес; - ТекстОшибкиПолучателя = РезультатОтправки.ОшибочныеПолучатели.Получить(Кому.Адрес); - Если ТекстОшибкиПолучателя <> Неопределено Тогда - ПоляИстории.Комментарий = ТекстОшибкиПолучателя; - ПоляИстории.Выполнена = Ложь; - Иначе - ПоляИстории.Комментарий = ТекстСообщения; - ПоляИстории.Выполнена = Истина; - КонецЕсли; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель.Ключ, Кому.Адрес); - ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP; - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЦикла; - КонецЕсли; + Письмо = ПодготовитьПисьмо(ПараметрыДоставки, ПараметрыПисьма); + РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(ПараметрыДоставки.УчетнаяЗапись, Письмо); + + Если Не ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") + Или ТипЗнч(ПараметрыЖурнала.Данные) <> Тип("СправочникСсылка.РассылкиОтчетов") Тогда + Возврат; + КонецЕсли; + + ДополнительныеПараметры = ДополнительныеПараметрыРезультатаРассылки(ПараметрыДоставки, СтрокаПолучатель, Ложь); + + Если ПараметрыДоставки.Получатель <> Неопределено Тогда + Если ПараметрыДоставки.СкрытыеКопии Тогда + АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"), + ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), + ПараметрыПисьма.СкрытыеКопии); + Иначе + АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"), + ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому); КонецЕсли; + ЗафиксироватьРезультатВыполненияРассылкиНаЭлектроннуюПочту(ПараметрыДоставки, ПараметрыЖурнала, + ПараметрыДоставки.Получатель, АдресаПолучателя, РезультатОтправки, ДополнительныеПараметры); + + ИначеЕсли ПараметрыДоставки.Получатели <> Неопределено Тогда + Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл + АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); + + ЗафиксироватьРезультатВыполненияРассылкиНаЭлектроннуюПочту(ПараметрыДоставки, ПараметрыЖурнала, + Получатель.Ключ, АдресаПолучателя, РезультатОтправки, ДополнительныеПараметры); + КонецЦикла; КонецЕсли; КонецПроцедуры @@ -3572,131 +3281,141 @@ Процедура ОтправитьПисьмоВзаимодействие(ПараметрыДоставки, ПараметрыПисьма, СтрокаПолучатель, ПараметрыЖурнала) МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - Сообщение = ПараметрыСообщенияДляПодсистемыВзаимодействия(ПараметрыДоставки, ПараметрыПисьма); РезультатОтправки = МодульВзаимодействия.СоздатьПисьмо(Сообщение, ПараметрыДоставки.УчетнаяЗапись, Истина); - Если ТипЗнч(ПараметрыЖурнала.Данные) <> Тип("СправочникСсылка.РассылкиОтчетов")Тогда Возврат; КонецЕсли; Если РезультатОтправки.Отправлено Тогда + + ДополнительныеПараметры = ДополнительныеПараметрыРезультатаРассылки(ПараметрыДоставки, СтрокаПолучатель, Истина); - Если ЗначениеЗаполнено(ПараметрыДоставки.УчетнаяЗапись) Тогда + Если ПараметрыДоставки.Получатель <> Неопределено Тогда + Если ПараметрыДоставки.СкрытыеКопии Тогда + АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"), + ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), + ПараметрыПисьма.СкрытыеКопии); + Иначе + АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"), + ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому); + КонецЕсли; + ЗафиксироватьРезультатВыполненияРассылкиНаЭлектроннуюПочту(ПараметрыДоставки, ПараметрыЖурнала, + ПараметрыДоставки.Получатель, АдресаПолучателя, РезультатОтправки, ДополнительныеПараметры); + + ИначеЕсли ПараметрыДоставки.Получатели <> Неопределено Тогда + Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл + АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); + + ЗафиксироватьРезультатВыполненияРассылкиНаЭлектроннуюПочту(ПараметрыДоставки, ПараметрыЖурнала, + Получатель.Ключ, АдресаПолучателя, РезультатОтправки, ДополнительныеПараметры); + КонецЦикла; + КонецЕсли; + Возврат; + КонецЕсли; + + Если ПараметрыДоставки.Получатель <> Неопределено Тогда + АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); + ЗафиксироватьНеудачныйРезультатРассылки(ПараметрыДоставки, ПараметрыЖурнала, ПараметрыДоставки.Получатель, + АдресаПолучателя, РезультатОтправки); + Иначе + Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл + АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); + ЗафиксироватьНеудачныйРезультатРассылки(ПараметрыДоставки, ПараметрыЖурнала, Получатель.Ключ, + АдресаПолучателя, РезультатОтправки); + КонецЦикла; + КонецЕсли; + + ВызватьИсключение РезультатОтправки.ОписаниеОшибки; + +КонецПроцедуры + +Функция ДополнительныеПараметрыРезультатаРассылки(ПараметрыДоставки, СтрокаПолучатель, ИспользуетсяПочтовыйКлиент) + + Если ЗначениеЗаполнено(ПараметрыДоставки.УчетнаяЗапись) Тогда ПредставлениеОтправителя = Строка(ПараметрыДоставки.УчетнаяЗапись); ОтправлятьСкрытыеКопииОтправителю = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ПараметрыДоставки.УчетнаяЗапись, "ОтправлятьСкрытыеКопииПисемНаЭтотАдрес"); + ПараметрыДоставки.УчетнаяЗапись, "ОтправлятьСкрытыеКопииПисемНаЭтотАдрес"); Иначе ПредставлениеОтправителя = ""; ОтправлятьСкрытыеКопииОтправителю = Ложь; КонецЕсли; - ДополнительныеСведения = ""; + ДополнительнаяИнформация = ""; Если ОтправлятьСкрытыеКопииОтправителю Тогда - ДополнительныеСведения = НСтр("ru = 'Копия направлена отправителю.'"); + ДополнительнаяИнформация = НСтр("ru = 'Копия направлена отправителю.'"); КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ПредставлениеОтправителя", ПредставлениеОтправителя); + ДополнительныеПараметры.Вставить("ДополнительнаяИнформация", ДополнительнаяИнформация); + ДополнительныеПараметры.Вставить("СтрокаПолучатель", СтрокаПолучатель); + ДополнительныеПараметры.Вставить("ИспользуетсяПочтовыйКлиент", ИспользуетсяПочтовыйКлиент); + + Возврат ДополнительныеПараметры; + +КонецФункции - Если ПараметрыДоставки.Получатель <> Неопределено Тогда - Если ПараметрыДоставки.СкрытыеКопии Тогда - АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.СкрытыеКопии) = Тип("Строка"), - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.СкрытыеКопии), ПараметрыПисьма.СкрытыеКопии); - Иначе - АдресаПолучателя = ?(ТипЗнч(ПараметрыПисьма.Кому) = Тип("Строка"), - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому), ПараметрыПисьма.Кому); - КонецЕсли; - Для Каждого Кому Из АдресаПолучателя Цикл - ПредставлениеПолучателя = Строка(ПараметрыДоставки.Получатель) + " (" + Кому.Адрес + ")"; - - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, ПараметрыДоставки.Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = Кому.Адрес; - ТекстОшибкиПолучателя = РезультатОтправки.ОшибочныеПолучатели.Получить(Кому.Адрес); - Если ТекстОшибкиПолучателя <> Неопределено Тогда - ПоляИстории.Комментарий = ТекстОшибкиПолучателя; - ПоляИстории.Выполнена = Ложь; - Иначе - ПоляИстории.Комментарий = ТекстУспешнойОтправкиОтчетов(ПараметрыДоставки, СтрокаПолучатель, ПредставлениеПолучателя, ПредставлениеОтправителя, ДополнительныеСведения); - ПоляИстории.Выполнена = Истина; - КонецЕсли; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, ПараметрыДоставки.Получатель, Кому.Адрес); - ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо; - ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - ИначеЕсли ПараметрыДоставки.Получатели <> Неопределено Тогда - Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл - АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); - Для Каждого Кому Из АдресаПолучателя Цикл - - ПредставлениеПолучателя = Строка(Получатель.Ключ) + " (" + Кому.Адрес + ")"; - Если ПараметрыДоставки.ТолькоУведомить Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уведомления отправлены ''%1'' от %2. %3'"), ПредставлениеПолучателя, - ПредставлениеОтправителя, ДополнительныеСведения); - Иначе - ТекстСообщения = ТекстУспешнойОтправкиОтчетов(ПараметрыДоставки, СтрокаПолучатель, ПредставлениеПолучателя, ПредставлениеОтправителя, ДополнительныеСведения); - КонецЕсли; - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель.Ключ, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = Кому.Адрес; - ТекстОшибкиПолучателя = РезультатОтправки.ОшибочныеПолучатели.Получить(Кому.Адрес); - Если ТекстОшибкиПолучателя <> Неопределено Тогда - ПоляИстории.Комментарий = ТекстОшибкиПолучателя; - ПоляИстории.Выполнена = Ложь; - Иначе - ПоляИстории.Комментарий = ТекстСообщения; - ПоляИстории.Выполнена = Истина; - КонецЕсли; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель.Ключ, Кому.Адрес); - ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо; - ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЦикла; - КонецЕсли; - - Иначе - Если ПараметрыДоставки.Получатель <> Неопределено Тогда - АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПараметрыПисьма.Кому); - Для Каждого Кому Из АдресаПолучателя Цикл - - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, ПараметрыДоставки.Получатель, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = Кому.Адрес; - ПоляИстории.Комментарий = РезультатОтправки.ОписаниеОшибки; - ПоляИстории.Выполнена = Ложь; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, ПараметрыДоставки.Получатель, Кому.Адрес); - ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо; - ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; +Процедура ЗафиксироватьРезультатВыполненияРассылкиНаЭлектроннуюПочту(ПараметрыДоставки, ПараметрыЖурнала, Получатель, + АдресаПолучателя, РезультатОтправки, ДополнительныеПараметры) + + Для Каждого Кому Из АдресаПолучателя Цикл + + ПредставлениеПолучателя = Строка(Получатель) + " (" + Кому.Адрес + ")"; + + Если ПараметрыДоставки.ТолькоУведомить Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Уведомления отправлены ''%1'' от %2. %3'"), ПредставлениеПолучателя, + ДополнительныеПараметры.ПредставлениеОтправителя, ДополнительныеПараметры.ДополнительнаяИнформация); Иначе - Для Каждого Получатель Из ПараметрыДоставки.Получатели Цикл - АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Получатель.Значение); - Для Каждого Кому Из АдресаПолучателя Цикл - - ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель.Ключ, ПараметрыДоставки.ДатаВыполнения); - ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; - ПоляИстории.АдресЭП = Кому.Адрес; - ПоляИстории.Комментарий = РезультатОтправки.ОписаниеОшибки; - ПоляИстории.Выполнена = Ложь; - ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель.Ключ, Кому.Адрес); - ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо; - ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма; - - РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); - КонецЦикла; - КонецЦикла; + ТекстСообщения = ТекстУспешнойОтправкиОтчетов(ПараметрыДоставки, + ДополнительныеПараметры.СтрокаПолучатель, ПредставлениеПолучателя, + ДополнительныеПараметры.ПредставлениеОтправителя, ДополнительныеПараметры.ДополнительнаяИнформация); КонецЕсли; + + ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, + ПараметрыДоставки.ДатаВыполнения); + ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; + ПоляИстории.АдресЭП = Кому.Адрес; + ТекстОшибкиПолучателя = РезультатОтправки.ОшибочныеПолучатели.Получить(Кому.Адрес); + Если ТекстОшибкиПолучателя <> Неопределено Тогда + ПоляИстории.Комментарий = ТекстОшибкиПолучателя; + ПоляИстории.Выполнена = Ложь; + Иначе + ПоляИстории.Комментарий = ТекстСообщения; + ПоляИстории.Выполнена = Истина; + КонецЕсли; + ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель, Кому.Адрес); + Если ДополнительныеПараметры.ИспользуетсяПочтовыйКлиент Тогда + ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо; + ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма; + Иначе + ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьмаSMTP; + КонецЕсли; + + РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); + КонецЦикла; + +КонецПроцедуры - ВызватьИсключение (РезультатОтправки.ОписаниеОшибки); - - КонецЕсли; - +Процедура ЗафиксироватьНеудачныйРезультатРассылки(ПараметрыДоставки, ПараметрыЖурнала, Получатель, + АдресаПолучателя, РезультатОтправки) + + Для Каждого Кому Из АдресаПолучателя Цикл + + ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения); + ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; + ПоляИстории.АдресЭП = Кому.Адрес; + ПоляИстории.Комментарий = РезультатОтправки.ОписаниеОшибки; + ПоляИстории.Выполнена = Ложь; + ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель, Кому.Адрес); + ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо; + ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма; + + РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); + КонецЦикла; + КонецПроцедуры Функция ПараметрыСообщенияДляПодсистемыВзаимодействия(ПараметрыДоставки, ПараметрыПисьма) @@ -4315,11 +4034,11 @@ Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Отчеты.Ссылка) КАК Количество + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РассылаемыеОтчеты.Ссылка) КАК Количество |ИЗ - | Справочник.РассылкиОтчетов.Отчеты КАК Отчеты + | Справочник.РассылкиОтчетов.Отчеты КАК РассылаемыеОтчеты |ГДЕ - | Отчеты.Отчет = &ВариантОтчета"); + | РассылаемыеОтчеты.Отчет = &ВариантОтчета"); Запрос.УстановитьПараметр("ВариантОтчета", ВариантОтчета); Возврат Запрос.Выполнить().Выгрузить()[0].Количество; @@ -5157,6 +4876,275 @@ КонецПроцедуры +Процедура ВыполнитьДоставкуВСетевойКаталог(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат) + + РежимТестирования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыДоставки, "РежимТестирования", Ложь); + + СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогWindows; + + Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда + СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогLinux; + КонецЕсли; + + ВсеПолучатели = СформироватьМассивПолучателейРассылки(ПараметрыЖурнала.Данные, ПараметрыЖурнала); + + Попытка + КоличествоОтправлено = 0; + КоличествоКОтправке = Вложения.Количество(); + Для Каждого Вложение Из Вложения Цикл + КопироватьФайл(Вложение.Значение, СетевойКаталогСервера + Вложение.Ключ); + Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя, Вложение.Значение, + ПараметрыДоставки.СетевойКаталогWindows + Вложение.Ключ); + КонецЕсли; + КоличествоОтправлено = КоличествоОтправлено + 1; + ТекстПрогресса = ТекстПрогрессаВыполненияРассылкиОтчетов(ПараметрыДоставки, КоличествоОтправлено, + КоличествоКОтправке); + ПроцентВыполнения = Окр(КоличествоОтправлено * 100 / КоличествоКОтправке); + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, ТекстПрогресса); + КонецЦикла; + Результат = Истина; + ПараметрыДоставки.ВыполненаВСетевойКаталог = Истина; + + Если РежимТестирования Тогда // Удалить все, что создали. + Для Каждого Вложение Из Вложения Цикл + УдалитьФайлы(СетевойКаталогСервера + Вложение.Ключ); + КонецЦикла; + КонецЕсли; + + ДоставкаВыполнена = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Отчеты помещены в сетевой каталог ''%1''.'"), СетевойКаталогСервера); + + Исключение + ДоставкаВыполнена = Ложь; + ТекстСообщения = ШаблонСообщенияОбОшибке(); + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения, ИнформацияОбОшибке()); + КонецПопытки; + + Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И ТипЗнч(ПараметрыЖурнала.Данные) = Тип( + "СправочникСсылка.РассылкиОтчетов") Тогда + + Для Каждого Получатель Из ВсеПолучатели Цикл + ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, + ПараметрыДоставки.ДатаВыполнения); + ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; + ПоляИстории.Комментарий = ТекстСообщения; + ПоляИстории.Выполнена = ДоставкаВыполнена; + ПоляИстории.ДатаДоставки = ?(ДоставкаВыполнена, ТекущаяДатаСеанса(), Дата(1,1,1)); + ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); + + РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьДоставкуНаFTPРесурс(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат) + + РежимТестирования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыДоставки, "РежимТестирования", Ложь); + + Цель = "ftp://" + ПараметрыДоставки.Сервер + ":" + Формат(ПараметрыДоставки.Порт, "ЧН=0; ЧГ=0") + + ПараметрыДоставки.Каталог; + ВсеПолучатели = СформироватьМассивПолучателейРассылки(ПараметрыЖурнала.Данные, ПараметрыЖурнала); + + Попытка + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("ftp"); + Иначе + Прокси = Неопределено; + КонецЕсли; + Если ПараметрыДоставки.Свойство("Пароль") Тогда + Пароль = ПараметрыДоставки.Пароль; + Иначе + УстановитьПривилегированныйРежим(Истина); + ДанныеИзХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ПараметрыДоставки.Владелец, + "FTPПароль"); + УстановитьПривилегированныйРежим(Ложь); + Пароль = ?(ЗначениеЗаполнено(ДанныеИзХранилища), ДанныеИзХранилища, ""); + КонецЕсли; + Соединение = Новый FTPСоединение(ПараметрыДоставки.Сервер, ПараметрыДоставки.Порт, ПараметрыДоставки.Логин, + Пароль, Прокси, ПараметрыДоставки.ПассивноеСоединение, 15); + Соединение.УстановитьТекущийКаталог(ПараметрыДоставки.Каталог); + КоличествоОтправлено = 0; + КоличествоКОтправке = Вложения.Количество(); + Для Каждого Вложение Из Вложения Цикл + Соединение.Записать(Вложение.Значение, ПараметрыДоставки.Каталог + Вложение.Ключ); + Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя, Вложение.Значение, Цель + Вложение.Ключ); + КоличествоОтправлено = КоличествоОтправлено + 1; + ТекстПрогресса = ТекстПрогрессаВыполненияРассылкиОтчетов(ПараметрыДоставки, КоличествоОтправлено, + КоличествоКОтправке); + ПроцентВыполнения = Окр(КоличествоОтправлено * 100 / КоличествоКОтправке); + ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, ТекстПрогресса); + КонецЕсли; + КонецЦикла; + + Результат = Истина; + ПараметрыДоставки.ВыполненаНаFTP = Истина; + + Если РежимТестирования Тогда // Удалить все, что создали. + Для Каждого Вложение Из Вложения Цикл + Соединение.Удалить(ПараметрыДоставки.Каталог + Вложение.Ключ); + КонецЦикла; + КонецЕсли; + + ДоставкаВыполнена = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Отчеты опубликованы на ''%1''.'"), Цель); + + Исключение + ДоставкаВыполнена = Ложь; + ТекстСообщения = ШаблонСообщенияОбОшибке(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + РезультатДиагностики = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(ПараметрыДоставки.Сервер); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Результат диагностики: + |%2'"), ТекстСообщения, РезультатДиагностики.ОписаниеОшибки); + КонецЕсли; + + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения, ИнформацияОбОшибке()); + КонецПопытки; + + Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И ТипЗнч(ПараметрыЖурнала.Данные) = Тип( + "СправочникСсылка.РассылкиОтчетов") Тогда + + Для Каждого Получатель Из ВсеПолучатели Цикл + ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, + ПараметрыДоставки.ДатаВыполнения); + ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; + ПоляИстории.Комментарий = ТекстСообщения; + ПоляИстории.Выполнена = ДоставкаВыполнена; + ПоляИстории.ДатаДоставки = ?(ДоставкаВыполнена, ТекущаяДатаСеанса(), Дата(1,1,1)); + ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); + + РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьДоставкуВПапку(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат) + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + Возврат; + КонецЕсли; + + РежимТестирования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыДоставки, "РежимТестирования", Ложь); + + ВсеПолучатели = СформироватьМассивПолучателейРассылки(ПараметрыЖурнала.Данные, ПараметрыЖурнала); + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + Попытка + МодульРаботаСФайламиСлужебный.ПриВыполненииДоставкиВПапку(ПараметрыДоставки, Вложения); + Результат = Истина; + ПараметрыДоставки.ВыполненаВПапку = Истина; + + ДоставкаВыполнена = Истина; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Отчеты помещены в папку ''%1''.'"), Строка(ПараметрыДоставки.Папка)); + + Исключение + ДоставкаВыполнена = Ложь; + ТекстСообщения = ШаблонСообщенияОбОшибке(); + ЗаписьЖурнала(ПараметрыЖурнала,, ТекстСообщения, ИнформацияОбОшибке()); + КонецПопытки; + + Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И ТипЗнч(ПараметрыЖурнала.Данные) = Тип( + "СправочникСсылка.РассылкиОтчетов") Тогда + + Для Каждого Получатель Из ВсеПолучатели Цикл + ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, + ПараметрыДоставки.ДатаВыполнения); + ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; + ПоляИстории.Комментарий = ТекстСообщения; + ПоляИстории.Выполнена = ДоставкаВыполнена; + ПоляИстории.ДатаДоставки = ?(ДоставкаВыполнена, ТекущаяДатаСеанса(), Дата(1,1,1)); + ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель); + + РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю( + ПоляИстории); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьДоставкуПоЭлектроннойПочте(ПараметрыЖурнала, ПараметрыДоставки, Вложения, Результат) + + ШаблонСообщенияОбОшибке = ШаблонСообщенияОбОшибке(); + РежимТестирования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыДоставки, "РежимТестирования", Ложь); + + Если ПараметрыДоставки.ТолькоУведомить Тогда + ШаблонСообщенияОбОшибке = НСтр("ru = 'Невозможно отправить уведомление о рассылке по электронной почте:'"); + ВложенияПисьма = Новый Соответствие; + ИначеЕсли Не ПараметрыДоставки.ПрикреплятьОтчетыВоВложения Тогда + ВложенияПисьма = Новый Соответствие; + Иначе + ШаблонСообщенияОбОшибке = НСтр("ru = 'Невозможно отправить отчет по электронной почте:'"); + ВложенияПисьма = Вложения; + КонецЕсли; + + ОтчетыОтправлены = Ложь; + Попытка + ОтправитьОтчетыПолучателю(ВложенияПисьма, ПараметрыДоставки, ПараметрыЖурнала); + ОтчетыОтправлены = Истина; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) Тогда + ВызватьИсключение; + КонецЕсли; + + РасширенноеПредставлениеОшибки = РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки( + ИнформацияОбОшибке, ОбщегоНазначения.КодОсновногоЯзыка(), Ложь); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ШаблонСообщенияОбОшибке, + РасширенноеПредставлениеОшибки); + + Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И Не ИспользуетсяПочтовыйКлиент() И ТипЗнч( + ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда + Для Каждого СтрокаПолучатель Из ПараметрыДоставки.Получатели Цикл + АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами( + СтрокаПолучатель.Значение); + Для Каждого АдресЭП Из АдресаПолучателя Цикл + ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, СтрокаПолучатель.Ключ, + ПараметрыДоставки.ДатаВыполнения); + ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись; + ПоляИстории.АдресЭП = АдресЭП.Адрес; + ПоляИстории.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1 %2", ШаблонСообщенияОбОшибке, РасширенноеПредставлениеОшибки); + ПоляИстории.Выполнена = Ложь; + ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, СтрокаПолучатель.Ключ, + АдресЭП.Адрес); + + РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю( + ПоляИстории); + КонецЦикла; + + КонецЦикла; + КонецЕсли; + КонецПопытки; + + Если ОтчетыОтправлены Тогда + Если Не ПараметрыДоставки.ТолькоУведомить Тогда + Результат = Истина; + КонецЕсли; + ПараметрыДоставки.ВыполненаПоЭлектроннойПочте = Результат; + КонецЕсли; + +КонецПроцедуры + +Функция ШаблонСообщенияОбОшибке() + Возврат НСтр("ru = 'Отчеты не доставлены'"); +КонецФункции + +#КонецОбласти + #Область ФормированиеОтчетовВНесколькоПотоков Функция ВыполнитьФормированиеОтчетовВНесколькоПотоков(Отчеты, ПараметрыДоставки, НаименованиеРассылки, ПараметрыЖурнала) @@ -5419,4 +5407,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl index 8ead1f7cf..5f31b613e 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl @@ -46,7 +46,13 @@ // во внешних источниках (получение почты, синхронизация данных и т.п.). Не следует устанавливать // значение Истина для регламентных заданий, не модифицирующих данные во внешних источниках. // Например, регламентное задание ЗагрузкаКурсовВалют. Регламентные задания, работающие с внешними ресурсами, -// автоматически отключаются в копии информационной базы. По умолчанию - Ложь. +// автоматически отключаются в копии информационной базы и не выполняются при отключенной функциональной +// опции "Разрешить доступ к Интернет-сервисам". По умолчанию - Ложь. +// * ОбращаетсяКВнешнимРесурсам - Булево - Истина, если регламентное задание обращается к внешним ресурсам +// (Интернет-сервисам), но не модифицирует их, например, регламентное задание ЗагрузкаКурсовВалют. +// Регламентные задания, работающие с Интернет-сервисами, не выполняются при отключенной функциональной +// опции "Разрешить доступ к Интернет-сервисам". По умолчанию - Ложь. +// // * Параметризуется - Булево - Истина, если регламентное задание параметризованное. // По умолчанию - Ложь. // diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 40af02df2..78ac1c476 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -468,8 +468,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции без поддержки заданий очереди в модели сервиса. +#Область ПроцедурыИФункцииБезПоддержкиЗаданийОчередиВМоделиСервиса // Возвращает использование регламентного задания. // Перед вызовом требуется иметь право администрирования или УстановитьПривилегированныйРежим. @@ -718,8 +717,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Возвращает признак установленной блокировки работы с внешними ресурсами. // @@ -761,6 +761,32 @@ #КонецОбласти +#Область ДляВызоваИзДругихПодсистем + +// ТехнологияСервиса.ВыгрузкаЗагрузкаДанных + +// Устанавливает признак использования регламентных заданий в информационной базе +// в зависимости от значений функциональных опций. +// +// Параметры: +// ВключатьЗадания - Булево - если Истина, отключенные регламентные задания будут включаться +// при доступности по функциональным опциям. По умолчанию Ложь. +// +Процедура УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(ВключатьЗадания = Ложь) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(ВключатьЗадания); + КонецЕсли; + +КонецПроцедуры + +// Конец ТехнологияСервиса.ВыгрузкаЗагрузкаДанных + +#КонецОбласти + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Устанавливает требуемые значения параметров регламентного задания. diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index e0fc1bf61..dabb225ef 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -98,6 +98,9 @@ // * РаботаетСВнешнимиРесурсами - Булево - Истина, если регламентное задание работает // с внешними ресурсами (получение почты, синхронизация данных и т.п.). // По умолчанию - Ложь. +// * ОбращаетсяКВнешнимРесурсам - Булево - Истина, если регламентное задание работает +// с Интернет-сервисами, но у него не указано свойство РаботаетСВнешнимиРесурсами = Истина. +// По умолчанию - Ложь. // Функция РегламентныеЗаданияЗависимыеОтФункциональныхОпций() Экспорт @@ -109,8 +112,9 @@ Зависимости.Колонки.Добавить("ДоступноВПодчиненномУзлеРИБ"); Зависимости.Колонки.Добавить("ВключатьПриВключенииФункциональнойОпции"); Зависимости.Колонки.Добавить("ДоступноВАвтономномРабочемМесте"); - Зависимости.Колонки.Добавить("РаботаетСВнешнимиРесурсами", Новый ОписаниеТипов("Булево")); - Зависимости.Колонки.Добавить("Параметризуется", Новый ОписаниеТипов("Булево")); + Зависимости.Колонки.Добавить("РаботаетСВнешнимиРесурсами", Новый ОписаниеТипов("Булево")); + Зависимости.Колонки.Добавить("ОбращаетсяКВнешнимРесурсам", Новый ОписаниеТипов("Булево")); + Зависимости.Колонки.Добавить("Параметризуется", Новый ОписаниеТипов("Булево")); ИнтеграцияПодсистемБСП.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); @@ -121,84 +125,18 @@ КонецФункции -// Устанавливает признак использования регламентных заданий в информационной базе -// в зависимости от значений функциональных опций. -// -// Параметры: -// ВключатьЗадания - Булево - если Истина, отключенные регламентные задания будут включаться -// при доступности по функциональным опциям. По умолчанию Ложь. -// -Процедура УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(ВключатьЗадания = Ложь) Экспорт - - ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); - ЭтоАвтономноеРабочееМесто = ОбщегоНазначения.ЭтоАвтономноеРабочееМесто(); - - ЗависимыеРегламентныеЗадания = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); - Задания = ЗависимыеРегламентныеЗадания.Скопировать(,"РегламентноеЗадание"); - Задания.Свернуть("РегламентноеЗадание"); - - Для Каждого СтрокаЗадание Из Задания Цикл - - Использование = Неопределено; - ОтключитьЗадание = Истина; - ОтключитьВПодчиненномУзлеРИБ = Ложь; - ОтключитьВАвтономномРабочемМесте = Ложь; - - НайденныеСтроки = ЗависимыеРегламентныеЗадания.НайтиСтроки(Новый Структура("РегламентноеЗадание", СтрокаЗадание.РегламентноеЗадание)); - - Для Каждого СтрокаЗависимости Из НайденныеСтроки Цикл - ОтключитьВПодчиненномУзлеРИБ = (СтрокаЗависимости.ДоступноВПодчиненномУзлеРИБ = Ложь) И ЭтоПодчиненныйУзелРИБ; - ОтключитьВАвтономномРабочемМесте = (СтрокаЗависимости.ДоступноВАвтономномРабочемМесте = Ложь) И ЭтоАвтономноеРабочееМесто; - Если ОтключитьВПодчиненномУзлеРИБ Или ОтключитьВАвтономномРабочемМесте Тогда - Использование = Ложь; - Прервать; - КонецЕсли; - - Если СтрокаЗависимости.ФункциональнаяОпция = Неопределено Тогда - Продолжить; - КонецЕсли; - - ЗначениеФО = ПолучитьФункциональнуюОпцию(СтрокаЗависимости.ФункциональнаяОпция.Имя); - - Если СтрокаЗависимости.ВключатьПриВключенииФункциональнойОпции = Ложь Тогда - Если ОтключитьЗадание Тогда - ОтключитьЗадание = Не ЗначениеФО; - КонецЕсли; - ЗначениеФО = Ложь; - КонецЕсли; - - Если Использование = Неопределено Тогда - Использование = ЗначениеФО; - ИначеЕсли СтрокаЗависимости.ЗависимостьПоИ Тогда - Использование = Использование И ЗначениеФО; - Иначе - Использование = Использование Или ЗначениеФО; - КонецЕсли; - КонецЦикла; - - Если Использование = Неопределено - Или (Использование И Не ВключатьЗадания) // Автоматически при обновлении только отключаем регламентные задания. - Или (Не Использование И Не ОтключитьЗадание) Тогда - Продолжить; - КонецЕсли; - - СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", СтрокаЗадание.РегламентноеЗадание)); - Для Каждого РегламентноеЗадание Из СписокЗаданий Цикл - ПараметрыЗадания = Новый Структура("Использование", Использование); - РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания); - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - // Возвращает таблицу свойств фоновых заданий. -// Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий(). // // Параметры: -// Отбор - Структура - допустимые поля: -// Идентификатор, Ключ, Состояние, Начало, Конец, -// Наименование, ИмяМетода, РегламентноеЗадание. +// Отбор - Структура: +// * Идентификатор +// * Ключ +// * Состояние +// * Начало +// * Конец +// * Наименование +// * ИмяМетода +// * РегламентноеЗадание // // Возвращаемое значение: // см. НовыеСвойстваФоновыхЗаданий @@ -210,11 +148,9 @@ Таблица = НовыеСвойстваФоновыхЗаданий(); - Если ЗначениеЗаполнено(Отбор) И Отбор.Свойство("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания") Тогда + ПолучитьПоследнее = ЗначениеЗаполнено(Отбор) И Отбор.Свойство("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания"); + Если ПолучитьПоследнее Тогда Отбор.Удалить("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания"); - ПолучитьПоследнее = Истина; - Иначе - ПолучитьПоследнее = Ложь; КонецЕсли; РегламентноеЗадание = Неопределено; @@ -231,7 +167,6 @@ ЗапущенныеВручную = ФоновыеЗадания.ПолучитьФоновыеЗадания(ТекущийОтбор); Если РегламентноеЗадание <> Неопределено Тогда - ПоследнееФоновоеЗадание = РегламентноеЗадание.ПоследнееЗадание; ТекущийОтбор = Новый Структура("РегламентноеЗадание", РегламентноеЗадание); ЗапущенныеАвтоматически = ФоновыеЗадания.ПолучитьФоновыеЗадания(ТекущийОтбор); КонецЕсли; @@ -352,8 +287,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия // Процедура включает/отключает созданные в ИБ регламентные задания // при изменении функциональной опции. @@ -373,8 +307,80 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +// Устанавливает признак использования регламентных заданий в информационной базе +// в зависимости от значений функциональных опций. +// +// Параметры: +// ВключатьЗадания - Булево - если Истина, отключенные регламентные задания будут включаться +// при доступности по функциональным опциям. По умолчанию Ложь. +// +Процедура УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(ВключатьЗадания = Ложь) Экспорт + + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоАвтономноеРабочееМесто = ОбщегоНазначения.ЭтоАвтономноеРабочееМесто(); + + ЗависимыеРегламентныеЗадания = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + Задания = ЗависимыеРегламентныеЗадания.Скопировать(,"РегламентноеЗадание"); + Задания.Свернуть("РегламентноеЗадание"); + + Для Каждого СтрокаЗадание Из Задания Цикл + + Использование = Неопределено; + ОтключитьЗадание = Истина; + ОтключитьВПодчиненномУзлеРИБ = Ложь; + ОтключитьВАвтономномРабочемМесте = Ложь; + + НайденныеСтроки = ЗависимыеРегламентныеЗадания.НайтиСтроки(Новый Структура("РегламентноеЗадание", СтрокаЗадание.РегламентноеЗадание)); + + Для Каждого СтрокаЗависимости Из НайденныеСтроки Цикл + ОтключитьВПодчиненномУзлеРИБ = (СтрокаЗависимости.ДоступноВПодчиненномУзлеРИБ = Ложь) И ЭтоПодчиненныйУзелРИБ; + ОтключитьВАвтономномРабочемМесте = (СтрокаЗависимости.ДоступноВАвтономномРабочемМесте = Ложь) И ЭтоАвтономноеРабочееМесто; + Если ОтключитьВПодчиненномУзлеРИБ Или ОтключитьВАвтономномРабочемМесте Тогда + Использование = Ложь; + Прервать; + КонецЕсли; + + Если СтрокаЗависимости.ФункциональнаяОпция = Неопределено Тогда + Продолжить; + КонецЕсли; + + ЗначениеФО = ПолучитьФункциональнуюОпцию(СтрокаЗависимости.ФункциональнаяОпция.Имя); + + Если СтрокаЗависимости.ВключатьПриВключенииФункциональнойОпции = Ложь Тогда + Если ОтключитьЗадание Тогда + ОтключитьЗадание = Не ЗначениеФО; + КонецЕсли; + ЗначениеФО = Ложь; + КонецЕсли; + + Если Использование = Неопределено Тогда + Использование = ЗначениеФО; + ИначеЕсли СтрокаЗависимости.ЗависимостьПоИ Тогда + Использование = Использование И ЗначениеФО; + Иначе + Использование = Использование Или ЗначениеФО; + КонецЕсли; + КонецЦикла; + + Если Использование = Неопределено + Или (Использование И Не ВключатьЗадания) // Автоматически при обновлении только отключаем регламентные задания. + Или (Не Использование И Не ОтключитьЗадание) Тогда + Продолжить; + КонецЕсли; + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", СтрокаЗадание.РегламентноеЗадание)); + Для Каждого РегламентноеЗадание Из СписокЗаданий Цикл + ПараметрыЗадания = Новый Структура("Использование", Использование); + РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных. Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт @@ -435,6 +441,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ЗначениеНастройки(ИмяНастройки) Экспорт @@ -479,7 +487,6 @@ КонецПроцедуры - // Параметры: // Параметры - Структура: // * Таблица - ТаблицаЗначений: @@ -512,8 +519,9 @@ ПараметрыРегламентныхЗаданий = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); ПараметрыОтбора = Новый Структура; - ПараметризуемыеЗадания = Новый Массив; ПараметрыОтбора.Вставить("Параметризуется", Истина); + ПараметризуемыеЗадания = Новый Массив; + РезультатПоиска = ПараметрыРегламентныхЗаданий.НайтиСтроки(ПараметрыОтбора); Для Каждого СтрокаРезультата Из РезультатПоиска Цикл ПараметризуемыеЗадания.Добавить(СтрокаРезультата.РегламентноеЗадание); @@ -559,11 +567,7 @@ Идентификатор = Строка(Задание.УникальныйИдентификатор); Если Индекс >= Таблица.Количество() Или Таблица[Индекс].Идентификатор <> Идентификатор Тогда - - // Вставка нового задания. Обновляемое = Таблица.Вставить(Индекс); - - // Установка уникального идентификатора. Обновляемое.Идентификатор = Идентификатор; Иначе Обновляемое = Таблица[Индекс]; @@ -589,8 +593,7 @@ Строки = Таблица.НайтиСтроки( Новый Структура("Идентификатор", ИдентификаторРегламентногоЗадания)); - Если Задание <> Неопределено - И Строки.Количество() > 0 Тогда + Если Задание <> Неопределено И Строки.Количество() > 0 Тогда СтрокаЗадание = Строки[0]; Если ПараметризуемыеЗадания.Найти(Задание.Метаданные) <> Неопределено Тогда @@ -612,31 +615,25 @@ ЗаполнитьЗначенияСвойств(Приемник, ЗаданиеИсточник); - // Уточнение наименования Приемник.Наименование = ПредставлениеРегламентногоЗадания(ЗаданиеИсточник); - - // Установка Даты завершения и Состояния завершения по последней фоновой процедуре. - СвойстваПоследнегоФоновогоЗадания = СвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(ЗаданиеИсточник); - Приемник.ИмяЗадания = ЗаданиеИсточник.Метаданные.Имя; + + СвойстваПоследнегоФоновогоЗадания = ЗаданиеИсточник.ПоследнееЗадание; Если СвойстваПоследнегоФоновогоЗадания = Неопределено Тогда Приемник.ДатаНачала = ТекстНеОпределено(); Приемник.ДатаОкончания = ТекстНеОпределено(); Приемник.СостояниеВыполнения = ТекстНеОпределено(); Иначе Приемник.ДатаНачала = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Начало), - СвойстваПоследнегоФоновогоЗадания.Начало, - "<>"); + СвойстваПоследнегоФоновогоЗадания.Начало, "<>"); Приемник.ДатаОкончания = ?(ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Конец), - СвойстваПоследнегоФоновогоЗадания.Конец, - "<>"); + СвойстваПоследнегоФоновогоЗадания.Конец, "<>"); Приемник.СостояниеВыполнения = СвойстваПоследнегоФоновогоЗадания.Состояние; КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с регламентными заданиями. +#Область ПроцедурыИФункцииДляРаботыСРегламентнымиЗаданиями // Предназначена для "ручного" немедленного выполнения процедуры регламентного задания // либо в сеансе клиента (в файловой ИБ), либо в фоновом задании на сервере (в серверной ИБ). @@ -755,14 +752,12 @@ КонецФункции -// Возвращает многострочную Строку содержащую Сообщения и ОписаниеИнформацииОбОшибке, -// последнее фоновое задание найдено по идентификатору регламентного задания -// и сообщения/ошибки есть. +// Возвращает сообщения и описание информации об ошибке из последнего фонового задания +// указанного регламентного задания. // // Параметры: // Задание - РегламентноеЗадание -// - Строка - УникальныйИдентификатор -// РегламентногоЗадания строкой. +// - Строка - уникальный идентификатор регламентного задания строкой. // // Возвращаемое значение: // Строка @@ -780,8 +775,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с фоновыми заданиями. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСФоновымиЗаданиями // Отменяет фоновое задание, если это возможно, а именно, если оно выполняется на сервере, и активно. // @@ -943,8 +939,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции Процедура ИзменитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(Источник, Знач Использование) @@ -1104,15 +1101,11 @@ РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ФоновоеЗадание.Ключ)); КонецЕсли; - Строка.ИдентификаторРегламентногоЗадания = ?( - РегламентноеЗадание = Неопределено, - "", - РегламентноеЗадание.УникальныйИдентификатор); + Строка.ИдентификаторРегламентногоЗадания = ?(РегламентноеЗадание = Неопределено, + "", РегламентноеЗадание.УникальныйИдентификатор); - Строка.ОписаниеИнформацииОбОшибке = ?( - ФоновоеЗадание.ИнформацияОбОшибке = Неопределено, - "", - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке)); + Строка.ОписаниеИнформацииОбОшибке = ?(ФоновоеЗадание.ИнформацияОбОшибке = Неопределено, + "", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке)); Индекс = Индекс - 1; КонецЦикла; @@ -1120,3 +1113,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index cf4eb255e..5c26e6ccd 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -563,6 +563,7 @@ ПараметрыСкрипта.Вставить("ЭтоБазоваяВерсияКонфигурации", ""); ПараметрыСкрипта.Вставить("ПараметрыСкрипта" , ""); ПараметрыСкрипта.Вставить("ПараметрыЗапускаПредприятия" , ""); + ПараметрыСкрипта.Вставить("ПутьКCOMСоединителю" , ""); Возврат ПараметрыСкрипта; КонецФункции diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 8a2337d1f..a2a28eaa9 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -17,7 +17,7 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПараметрыРезервногоКопирования", "", Настройки); Если Пользователь <> Неопределено Тогда ПараметрыКопирования = Новый Структура("Пользователь", Пользователь); - Константы.ПараметрыРезервногоКопирования.Установить(Новый ХранилищеЗначения(ПараметрыКопирования)); + Константы.ПараметрыРезервногоКопирования.Установить(Новый ХранилищеЗначения(ПараметрыКопирования, Новый СжатиеДанных(9))); КонецЕсли; КонецПроцедуры @@ -76,8 +76,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // Параметры: // ТекущиеДела - см. ТекущиеДелаСервер.ТекущиеДела. @@ -173,6 +172,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает параметры подсистемы РезервногоКопированияИБ, которые необходимы при завершении работы @@ -498,6 +499,7 @@ ПараметрыТекста["[ИспользоватьCOMСоединитель]"] = ?(ПараметрыСкрипта.ЭтоБазоваяВерсияКонфигурации, "false", "true"); ПараметрыТекста["[ПараметрыЗапускаПредприятия]"] = ПодготовитьТекст(ПараметрыСкрипта.ПараметрыЗапускаПредприятия); ПараметрыТекста["[КодРазблокировки]"] = "РезервноеКопирование"; + ПараметрыТекста["[ПутьКCOMСоединителю]"] = ПодготовитьТекст(ПараметрыСкрипта.ПутьКCOMСоединителю); Возврат ПараметрыТекста; @@ -587,4 +589,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СерверныеОповещения/Module.bsl b/SSL/src/CommonModules/СерверныеОповещения/Module.bsl index bc7d76eb6..808194104 100644 --- a/SSL/src/CommonModules/СерверныеОповещения/Module.bsl +++ b/SSL/src/CommonModules/СерверныеОповещения/Module.bsl @@ -318,7 +318,7 @@ НоваяЗапись.ДатаДобавления = ДатаДобавления; НоваяЗапись.ДатаДобавленияМиллисекунды = ДатаДобавленияМиллисекунды; НоваяЗапись.Адресаты = ИдентификаторыАдресатов; - НоваяЗапись.СодержимоеОповещения = Новый ХранилищеЗначения(СодержимоеОповещения); + НоваяЗапись.СодержимоеОповещения = Новый ХранилищеЗначения(СодержимоеОповещения, Новый СжатиеДанных(9)); НоваяЗапись.ИдентификаторГруппы = НРег(ДополнительныеПараметры.ИдентификаторГруппы); НоваяЗапись.ВидОповещенияВГруппе = НРег(ДополнительныеПараметры.ВидОповещенияВГруппе); @@ -1619,7 +1619,7 @@ КонецЦикла; Если Записать Тогда МенеджерЗначения = СлужебныйМенеджерЗначения(Константы.СостояниеОтправкиСерверныхОповещений); - МенеджерЗначения.Значение = Новый ХранилищеЗначения(СостояниеОтправки); + МенеджерЗначения.Значение = Новый ХранилищеЗначения(СостояниеОтправки, Новый СжатиеДанных(9)); МенеджерЗначения.Записать(); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -1667,7 +1667,7 @@ Иначе СостояниеОтправки.ИдентификаторФоновогоЗадания = ТекущееФоновоеЗадание.УникальныйИдентификатор; МенеджерЗначения = СлужебныйМенеджерЗначения(Константы.СостояниеОтправкиСерверныхОповещений); - МенеджерЗначения.Значение = Новый ХранилищеЗначения(СостояниеОтправки); + МенеджерЗначения.Значение = Новый ХранилищеЗначения(СостояниеОтправки, Новый СжатиеДанных(9)); МенеджерЗначения.Записать(); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -2029,7 +2029,7 @@ НоваяЗапись.КлючСеанса = Параметры.КлючСеанса; НоваяЗапись.ИдентификаторПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; - НоваяЗапись.Оповещения = Новый ХранилищеЗначения(СохраняемыеПериодическиеОповещения(ПериодическиеОповещения)); + НоваяЗапись.Оповещения = Новый ХранилищеЗначения(СохраняемыеПериодическиеОповещения(ПериодическиеОповещения), Новый СжатиеДанных(9)); НоваяЗапись.ДатаДобавления = ТекущаяДатаСеанса(); НаборЗаписей.Записать(); НастроитьЗаданиеОтправкаСерверныхОповещенийКлиентам(Истина, Параметры.МинимальныйПериод, Истина); diff --git a/SSL/src/CommonModules/СерверныеОповещенияКлиент/Module.bsl b/SSL/src/CommonModules/СерверныеОповещенияКлиент/Module.bsl index 7e581e524..735e3271f 100644 --- a/SSL/src/CommonModules/СерверныеОповещенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/СерверныеОповещенияКлиент/Module.bsl @@ -149,8 +149,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы. Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт @@ -189,6 +188,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ПроверитьПолучитьСерверныеОповещения() Экспорт @@ -903,4 +904,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СервисКриптографииDSS/Module.bsl b/SSL/src/CommonModules/СервисКриптографииDSS/Module.bsl index 5e11507af..adb888148 100644 --- a/SSL/src/CommonModules/СервисКриптографииDSS/Module.bsl +++ b/SSL/src/CommonModules/СервисКриптографииDSS/Module.bsl @@ -3256,7 +3256,8 @@ // Функция ИспользоватьСервисОблачнойПодписи() Экспорт - Результат = ПолучитьФункциональнуюОпцию("ИспользоватьСервисDSS"); + Результат = ПолучитьФункциональнуюОпцию("ИспользоватьСервисDSS") + И ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); Возврат Результат; diff --git a/SSL/src/CommonModules/СервисКриптографииDSSКлиентСервер/Module.bsl b/SSL/src/CommonModules/СервисКриптографииDSSКлиентСервер/Module.bsl index c5b16dda9..716880609 100644 --- a/SSL/src/CommonModules/СервисКриптографииDSSКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СервисКриптографииDSSКлиентСервер/Module.bsl @@ -1838,9 +1838,10 @@ Содержимое = ПолучитьКодОшибки(ТекстОшибки); КонецЕсли; - Результат = ТекстОшибки = "210000" - ИЛИ ТекстОшибки = "210001" - ИЛИ ТекстОшибки = "300045"; + Результат = Содержимое = "210000" + ИЛИ Содержимое = "210001" + ИЛИ Содержимое = "300045"; + Возврат Результат; КонецФункции @@ -2246,7 +2247,7 @@ ИначеЕсли ИдентификаторОшибки = НРег("ОтказПользователя") Тогда Результат = ОписаниеОшибки_ОтказПользователя(); ИначеЕсли ИдентификаторОшибки = НРег("УстановкаРасширенияСФайлами") Тогда - Результат = ОписаниеОшибки_УстановкаРасширенияСФайлами(); + Результат = ОписаниеОшибки_УстановкаРасширения1СПредприятия(); ИначеЕсли ИдентификаторОшибки = НРег("ПолучениеФайла") Тогда Результат = ОписаниеОшибки_ПолучениеФайла(); ИначеЕсли ИдентификаторОшибки = НРег("НеподдерживаемаяВерсия") Тогда @@ -2288,8 +2289,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2302,8 +2301,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2321,8 +2318,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2335,8 +2330,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2349,8 +2342,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2363,8 +2354,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2377,8 +2366,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2391,8 +2378,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2405,8 +2390,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2419,12 +2402,10 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // -Функция ОписаниеОшибки_УстановкаРасширенияСФайлами() +Функция ОписаниеОшибки_УстановкаРасширения1СПредприятия() Результат = ОбщееОписаниеОшибки("300046", НСтр("ru = 'Не удалось установить расширение для работы с 1С:Предприятием.'")); @@ -2433,8 +2414,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2447,8 +2426,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2461,8 +2438,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2475,8 +2450,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2489,8 +2462,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2503,8 +2474,6 @@ КонецФункции -// Формирует описание ошибки -// // Возвращаемое значение: // см. ОбщееОписаниеОшибки // @@ -2521,8 +2490,7 @@ #Область ВспомогательныеПроцедурыИФункции -// Служебная функция для получения реестра типов вторичной авторизации типа для аутентификационного испытания -// варианты методов. +// Получает реестр типов вторичной авторизации типа для аутентификационного испытания. Варианты методов: // otpviasms (SMS), // mobile (myDSS), // airkey (AirKeyDSS), @@ -2537,7 +2505,7 @@ // Возвращаемое значение: // Соответствие из КлючИЗначение: // * Ключ - ПеречислениеСсылка.СпособыАвторизацииDSS -// * Значение - Строка - представление метода +// * Значение - Строка - представление метода. // Функция ТипыВторичнойАвторизации() @@ -2563,11 +2531,11 @@ КонецФункции -// Служебная процедура для разбора аутентификационного испытания в процессе процедуры подтверждения +// Разбор аутентификационного испытания в процессе процедуры подтверждения // и заполнения данных цикла подтверждения. // // Параметры: -// ДанныеОтвета - Структура - значение аутентификационного испытания +// ДанныеОтвета - Структура - значение аутентификационного испытания. // ДанныеПодтверждения - см. СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию // Процедура ПолучитьДанныеВторичнойАвторизации(ДанныеОтвета, ДанныеПодтверждения, ДатаСеанса) @@ -2605,11 +2573,11 @@ КонецПроцедуры -// Служебная процедура для разбора первого этапа аутентификационного испытания - выбор способа подтверждения +// Разбор первого этапа аутентификационного испытания - выбор способа подтверждения // и заполнения данных цикла подтверждения. // // Параметры: -// ДанныеОтвета - Структура - значение аутентификационного испытания +// ДанныеОтвета - Структура - значение аутентификационного испытания. // ДанныеПодтверждения - см. СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию // ВторичнаяАвторизация - ПеречислениеСсылка.СпособыАвторизацииDSS // @@ -2645,13 +2613,13 @@ КонецФункции -// Служебная процедура участвуют в рекурсивном формировании представления структуры. +// Для рекурсивного формирования представления структуры. // При этом исключается содержание объемных и конфиденциальных блоков данных. // // Параметры: // НовыйОбъект - Произвольный // ВходящийКонтекст - Структура -// КлючевыеПоля - Структура - исключаемые поля +// КлючевыеПоля - Структура - исключаемые поля. // Процедура ФильтроватьПараметрыВызоваРекурсивно(НовыйОбъект, ВходящийКонтекст, КлючевыеПоля) @@ -2707,7 +2675,7 @@ КонецПроцедуры -// Служебная функция, проверяет строковое значение, что оно целое число +// Проверяет строковое значение, что оно целое число. // // Параметры: // ПроверяемоеЗначение - Строка @@ -2722,12 +2690,11 @@ КонецЕсли; ОписаниеЧисла = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный)); - Возврат ОписаниеЧисла.ПривестиЗначение(ПроверяемоеЗначение) <> 0; КонецФункции -// Служебная функция, проверяет имя поля на соответствие имени переменной +// Проверяет имя поля на соответствие имени переменной. // // Параметры: // ПроверяемоеЗначение - Строка @@ -2758,7 +2725,7 @@ КонецФункции -// Служебная, определяет ключ для сохранения и получения настроек из параметра сеанса +// Определяет ключ для сохранения и получения настроек из параметра сеанса. // // Параметры: // НастройкиПользователя - см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию diff --git a/SSL/src/CommonModules/СервисКриптографииDSSСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/СервисКриптографииDSSСлужебныйКлиент/Module.bsl index 41571e439..ccee9f52b 100644 --- a/SSL/src/CommonModules/СервисКриптографииDSSСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/СервисКриптографииDSSСлужебныйКлиент/Module.bsl @@ -5452,7 +5452,7 @@ ТекстСообщения = НСтр("ru = 'Для продолжения работы требуется установить расширение для работы с 1С:Предприятием.'", КодЯзыка()); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОповещениеСледующее, ТекстСообщения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОповещениеСледующее, ТекстСообщения, Ложь); КонецПроцедуры @@ -5602,7 +5602,7 @@ ТекстСообщения = НСтр("ru = 'Для продолжения работы требуется установить расширение для работы с 1С:Предприятием.'", КодЯзыка()); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОповещениеСледующее, ТекстСообщения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОповещениеСледующее, ТекстСообщения, Ложь); КонецПроцедуры diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl index 984c5a13c..b0f6c44ec 100644 --- a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -120,7 +120,7 @@ УстановитьПривилегированныйРежим(Истина); ТекущиеПараметры = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере); - ТекущиеПараметры.Вставить("ДоступенСервисСклонения", Доступность); + ТекущиеПараметры.Вставить("ДоступенСервисСклонения", Доступность И ОбщегоНазначения.РазрешенДоступКИнтернетСервисам()); ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры); КонецПроцедуры @@ -135,7 +135,7 @@ Результат = СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере(Ложь).Получить("ДоступенСервисСклонения"); Если Результат = Неопределено Тогда - Возврат Истина; + Возврат ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); Иначе Возврат Результат; КонецЕсли; @@ -582,11 +582,10 @@ КонецЕсли; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при вызове сервиса склонения. Обратитесь к администратору. + НСтр("ru = 'Сбой сервиса склонения, обратитесь к его администратору. |Техническая информация: |%1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстСообщения; КонецПроцедуры diff --git a/SSL/src/CommonModules/СнимкиОтчетов/Module.bsl b/SSL/src/CommonModules/СнимкиОтчетов/Module.bsl new file mode 100644 index 000000000..741f25fa5 --- /dev/null +++ b/SSL/src/CommonModules/СнимкиОтчетов/Module.bsl @@ -0,0 +1,370 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Регистрирует к выгрузке все варианты отчетов, по которым сформированы снимки. +// +// Параметры: +// УзелОбмена - ПланОбменаСсылка - узел плана обмена, для которого регистрируются изменения. +// +Процедура ЗарегистрироватьИзмененияДанных(УзелОбмена) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | СнимкиОтчетов.Вариант КАК Вариант + |ИЗ + | РегистрСведений.СнимкиОтчетов КАК СнимкиОтчетов + |ГДЕ + | СнимкиОтчетов.Вариант ССЫЛКА Справочник.ВариантыОтчетов"; + + СоставПланаОбмена = УзелОбмена.Метаданные().Состав; + Для Каждого ЭлементСоставаПланаОбмена Из СоставПланаОбмена Цикл + + Если ЭлементСоставаПланаОбмена.Метаданные = Метаданные.Справочники.ВариантыОтчетов Тогда + // @skip-check query-in-loop - Однократная обработка данных + МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Вариант"); + ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, МассивСсылок); + Иначе + ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена,ЭлементСоставаПланаОбмена.Метаданные); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает Истина, если есть снимки отчета для автономного режима. +// +// Параметры: +// Источник - СправочникОбъект +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьИзмененияДляАвтономногоРежима(Источник) Экспорт + + Если ТипЗнч(Источник) = Тип("СправочникОбъект.ВариантыОтчетов") + И Не ЕстьСнимкиВариантаОтчета(Источник.Ссылка) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// Зарегистрировать к выгрузке связанные со снимками отчетов вариантов отчетов и пользователей, +// сформировавших эти снимки. +// +// Параметры: +// Источник - Произвольный +// Изменения - Массив +// +Процедура ЗарегистрироватьИзмененияДляАвтономногоРежима(Источник, Изменения) Экспорт + + Если ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.СнимкиОтчетов") Тогда + Для Каждого Запись Из Источник Цикл + Изменения.Добавить(Запись.Вариант); + Изменения.Добавить(Запись.Пользователь); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Выгружает в XML варианты отчетов, их снимки и связанные с ними сведения о пользователях. +// +// Параметры: +// ЗаписьXML - ЗаписьXML +// Данные - Произвольный - данные для записи в XML. +// +Процедура ЗаписатьОтчетыВXML(ЗаписьXML, Данные) Экспорт + + Если ТипЗнч(Данные) = Тип("СправочникОбъект.ВариантыОтчетов") Тогда + ЗаписатьВариантыОтчетовВXML(ЗаписьXML, Данные); + ИначеЕсли ТипЗнч(Данные) = Тип("СправочникОбъект.Пользователи") Тогда + ЗаписатьПользователейВXML(ЗаписьXML, Данные); + ИначеЕсли ТипЗнч(Данные) = Тип("РегистрСведенийНаборЗаписей.СнимкиОтчетов") Тогда + ЗаписатьСнимкиОтчетовВXML(ЗаписьXML, Данные); + КонецЕсли; + +КонецПроцедуры + +// Загружает из XML варианты отчетов, их снимки и связанные с ними сведения о пользователях. +// +// Параметры: +// ЧтениеXML - ЧтениеXML +// +// Возвращаемое значение: +// СправочникОбъект +// Неопределено - прочитанные данные, подготовленные для записи. +// +Функция ПрочитатьОтчетыИзXML(ЧтениеXML) Экспорт + + Если ЧтениеXML.Имя = "CatalogObject.ВариантыОтчетов" Тогда + Возврат ПрочитатьВариантыОтчетовИзXML(ЧтениеXML); + ИначеЕсли ЧтениеXML.Имя = "CatalogObject.Пользователи" Тогда + Возврат ПрочитатьПользователейИзXML(ЧтениеXML); + ИначеЕсли ЧтениеXML.Имя = "InformationRegisterRecordSet.СнимкиОтчетов" Тогда + ПрочитатьСнимкиОтчетовИзXML(ЧтениеXML); + КонецЕсли; + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Записывает в XML снимки отчетов. +// +// Параметры: +// ЗаписьXML - ЗаписьXML +// Данные - СтрокаТаблицыЗначений - данные снимков отчетов. +// +Процедура ЗаписатьСнимкиОтчетовВXML(ЗаписьXML, Данные) + + Если Данные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента("InformationRegisterRecordSet.СнимкиОтчетов"); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Пользователь"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные[0].Пользователь.УникальныйИдентификатор())); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Отчет"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные[0].Отчет.УникальныйИдентификатор())); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ОтчетТипЗначения"); + Если ТипЗнч(Данные[0].Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ЗаписьXML.ЗаписатьТекст("ИдентификаторыОбъектовМетаданных"); + ИначеЕсли ТипЗнч(Данные[0].Отчет) = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + ЗаписьXML.ЗаписатьТекст("ИдентификаторыОбъектовРасширений"); + ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + ЗаписьXML.ЗаписатьТекст("ДополнительныеОтчетыИОбработки"); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ВариантОтчета"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные[0].Вариант.УникальныйИдентификатор())); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ВариантТипЗначения"); + ЗаписьXML.ЗаписатьТекст(?(ТипЗнч(Данные[0].Вариант) = Тип("СправочникСсылка.ВариантыОтчетов"), "ВариантыОтчетов", "")); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ХешПользовательскойНастройки"); + ЗаписьXML.ЗаписатьТекст(Данные[0].ХешПользовательскойНастройки); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("РезультатОтчета"); + РезультатОтчета = СериализаторXDTO.ЗаписатьXDTO(Данные[0].РезультатОтчета); + ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, РезультатОтчета, "ValueStorage", "http://v8.1c.ru/8.1/data/core", , + НазначениеТипаXML.Явное); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ДатаАктуальности"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные[0].ДатаАктуальности)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ДатаПоследнегоПросмотра"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные[0].ДатаПоследнегоПросмотра)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ОшибкаОбновленияОтчета"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные[0].ОшибкаОбновленияОтчета)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Записывает в XML данные варианта отчета. +// +// Параметры: +// ЗаписьXML - ЗаписьXML +// Данные - СправочникСсылка.ВариантыОтчетов +// +Процедура ЗаписатьВариантыОтчетовВXML(ЗаписьXML, Данные) + + ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.ВариантыОтчетов"); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Ссылка"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные.Ссылка.УникальныйИдентификатор())); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование"); + ЗаписьXML.ЗаписатьТекст(Данные.Наименование); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Записывает в XML данные пользователя. +// +// Параметры: +// ЗаписьXML - ЗаписьXML +// Данные - СправочникСсылка.ВариантыОтчетов +// +Процедура ЗаписатьПользователейВXML(ЗаписьXML, Данные) + + ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.Пользователи"); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Ссылка"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные.Ссылка.УникальныйИдентификатор())); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование"); + ЗаписьXML.ЗаписатьТекст(Данные.Наименование); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ИдентификаторПользователяИБ"); + ЗаписьXML.ЗаписатьТекст(Строка(Данные.ИдентификаторПользователяИБ)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +Процедура ПрочитатьСнимкиОтчетовИзXML(ЧтениеXML) + + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + Пользователь = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбъектXDTO.Пользователь)); + Отчет = Неопределено; + Если ОбъектXDTO.ОтчетТипЗначения = "ИдентификаторыОбъектовМетаданных" Тогда + Отчет = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОбъектXDTO.Отчет)); + ИначеЕсли ОбъектXDTO.ОтчетТипЗначения = "ИдентификаторыОбъектовРасширений" Тогда + Отчет = Справочники.ИдентификаторыОбъектовРасширений.ПолучитьСсылку( + Новый УникальныйИдентификатор(ОбъектXDTO.Отчет)); + ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(МодульДополнительныеОтчетыИОбработки.ИмяТаблицыДополнительныеОтчеты()); + Отчет = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбъектXDTO.Отчет)); + КонецЕсли; + Если ОбъектXDTO.ВариантТипЗначения = "ВариантыОтчетов" Тогда + Вариант = Справочники.ВариантыОтчетов.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбъектXDTO.ВариантОтчета)); + Иначе + Вариант = Неопределено; + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.СнимкиОтчетов.СоздатьМенеджерЗаписи(); + + МенеджерЗаписи.Пользователь = Пользователь; + МенеджерЗаписи.Отчет = Отчет; + МенеджерЗаписи.Вариант = Вариант; + МенеджерЗаписи.ХешПользовательскойНастройки = ОбъектXDTO.ХешПользовательскойНастройки; + + МенеджерЗаписи.РезультатОтчета = ОбъектXDTO.РезультатОтчета.ValueStorage; + МенеджерЗаписи.ДатаАктуальности = Дата(ОбъектXDTO.ДатаАктуальности); + МенеджерЗаписи.ДатаПоследнегоПросмотра = Дата(ОбъектXDTO.ДатаПоследнегоПросмотра); + + МенеджерЗаписи.ОшибкаОбновленияОтчета = Булево(ОбъектXDTO.ОшибкаОбновленияОтчета); + + Попытка + МенеджерЗаписи.Записать(); + Исключение + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось записать снимок отчета %1 по причине: + |%2'"), ?(ЗначениеЗаполнено(Вариант), Вариант, Отчет), ОбработкаОшибок.ПодробноеПредставлениеОшибки( + ИнформацияОбОшибке())); +#Если МобильныйАвтономныйСервер Тогда + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения); +#Иначе + ЗаписьЖурналаРегистрации(НСтр("ru='Загрузка снимка отчета из XML'", ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, Метаданные.РегистрыСведений.СнимкиОтчетов, , ТекстСообщения); +#КонецЕсли + КонецПопытки; + +КонецПроцедуры + +// Считывает из XML варианты отчетов. +// +// Параметры: +// ЧтениеXML - ЧтениеXML +// +// Возвращаемое значение: +// СправочникОбъект.ВариантыОтчетов +// +Функция ПрочитатьВариантыОтчетовИзXML(ЧтениеXML) + + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + ДанныеСсылка = Справочники.ВариантыОтчетов.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбъектXDTO.Ссылка)); + Данные = ДанныеСсылка.ПолучитьОбъект(); + + Если Данные = Неопределено Тогда + Данные = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + Данные.УстановитьСсылкуНового(ДанныеСсылка); + Иначе + Данные = ДанныеСсылка.ПолучитьОбъект(); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Данные, ОбъектXDTO); + Возврат Данные; + +КонецФункции + +// Считывает из XML сведения о пользователях. +// +// Параметры: +// ЧтениеXML - ЧтениеXML +// +// Возвращаемое значение: +// СправочникОбъект.Пользователи +// +Функция ПрочитатьПользователейИзXML(ЧтениеXML) + + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + ДанныеСсылка = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбъектXDTO.Ссылка)); + Данные = ДанныеСсылка.ПолучитьОбъект(); + + Если Данные = Неопределено Тогда + Данные = Справочники.Пользователи.СоздатьЭлемент(); + Данные.УстановитьСсылкуНового(ДанныеСсылка); + Иначе + Данные = ДанныеСсылка.ПолучитьОбъект(); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Данные, ОбъектXDTO); + Данные.ИдентификаторПользователяИБ = Новый УникальныйИдентификатор(ОбъектXDTO.ИдентификаторПользователяИБ); + + Возврат Данные; + +КонецФункции + +// Возвращает признак наличия снимков по заданному варианту отчета. +// +// Параметры: +// Вариант - СправочникСсылка.ВариантыОтчетов - вариант отчета. +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьСнимкиВариантаОтчета(Вариант) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Вариант", Вариант); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СнимкиОтчетов.Вариант КАК Вариант + |ИЗ + | РегистрСведений.СнимкиОтчетов КАК СнимкиОтчетов + |ГДЕ + | СнимкиОтчетов.Вариант = &Вариант"; + + Возврат Запрос.Выполнить().Пустой(); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/СнимкиОтчетов/СнимкиОтчетов.mdo b/SSL/src/CommonModules/СнимкиОтчетов/СнимкиОтчетов.mdo new file mode 100644 index 000000000..2740b15d2 --- /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 1d815a0f7..7d0ab641c 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Блокировка и завершение соединений с ИБ. +#Область БлокировкаИЗавершениеСоединенийСИБ // Устанавливает блокировку соединений ИБ. // Если вызывается из сеанса с установленными значениями разделителей, @@ -218,8 +217,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Блокировка сеансов областей данных. +#КонецОбласти + +#Область БлокировкаСеансовОбластейДанных // Получить пустую структуру с параметрами блокировки сеансов области данных. // @@ -368,6 +368,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс Функция ПодсистемаИспользуется() Экспорт @@ -477,8 +479,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. РаботаВМоделиСервисаПереопределяемый.ПриЗаполненииТаблицыПараметровИБ. Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт @@ -691,6 +692,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ОтправитьСерверноеОповещениеОбУстановкеБлокировки(ПриОтправкеСерверногоОповещения = Ложь) Экспорт @@ -719,8 +722,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее. +#Область Прочее // Возвращает текст сообщения блокировки сеансов. // @@ -746,7 +748,7 @@ Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстСообщения = ТекстСообщения + НСтр("ru = '%1 |Для разрешения работы пользователей можно открыть приложение с параметром %2. Например: - |http://<веб-адрес сервера>/?C=%2'"); + |https://<веб-адрес сервера>/?C=%2'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СоединенияИБКлиентСервер.ТекстДляАдминистратора(), ИмяПараметра); Иначе @@ -880,3 +882,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index dc4f63242..725deb5de 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -84,8 +84,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // Вызывается при интерактивном начале работы пользователя с областью данных. // @@ -325,6 +324,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ПодсистемаИспользуется() @@ -781,27 +782,34 @@ // Функция ОбработатьПараметрыЗапуска(Знач ПараметрыЗапуска) - Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат Ложь; - КонецЕсли; - - // Обработка параметров запуска программы ЗапретитьРаботуПользователей и РазрешитьРаботуПользователей. + // Обработка параметров запуска ЗапретитьРаботуПользователей и РазрешитьРаботуПользователей. ИмяПараметраРазрешитьРаботуПользователей = "РазрешитьРаботуПользователей"; ИмяПараметраЗавершитьРаботуПользователей = "ЗавершитьРаботуПользователей"; Если КлючСодержитсяВПараметрахЗапуска(ПараметрыЗапуска, ИмяПараметраРазрешитьРаботуПользователей) Тогда + Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Параметр запуска %1 не отработан. Не выполнен вход в область данных.'"), + ИмяПараметраРазрешитьРаботуПользователей); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Предупреждение", ТекстСообщения,, Истина); + Возврат Истина; + КонецЕсли; + Если НЕ СоединенияИБВызовСервера.РазрешитьРаботуПользователей() Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Параметр запуска %1 не отработан. Нет прав на администрирование информационной базы.'"), ИмяПараметраРазрешитьРаботуПользователей); - ПоказатьПредупреждение(,ТекстСообщения); - Возврат Ложь; + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Предупреждение", ТекстСообщения,, Истина); + Возврат Истина; КонецЕсли; + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнен запуск с параметром %1. Работа приложения будет завершена.'"), + ИмяПараметраРазрешитьРаботуПользователей); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(),, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнен запуск с параметром %1. Работа приложения будет завершена.'"), - ИмяПараметраРазрешитьРаботуПользователей), ,Истина); + ТекстСообщения,, Истина); ЗавершитьРаботуСистемы(Ложь); Возврат Истина; @@ -810,8 +818,16 @@ // в клиент-серверном варианте. См. использование в процедуре ЗавершитьРаботуПользователей. ИначеЕсли КлючСодержитсяВПараметрахЗапуска(ПараметрыЗапуска, ИмяПараметраЗавершитьРаботуПользователей) Тогда + Если Не ОбщегоНазначенияКлиент.ДоступноИспользованиеРазделенныхДанных() Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Параметр запуска %1 не отработан. Не выполнен вход в область данных.'"), + ИмяПараметраЗавершитьРаботуПользователей); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Предупреждение", ТекстСообщения,, Истина); + Возврат Истина; + КонецЕсли; + ДополнительныеПараметры = ДополнительныеПараметрыЗавершенияРаботыПользователей(); - БлокировкаУстановлена = СоединенияИБВызовСервера.УстановитьБлокировкуСоединений( ДополнительныеПараметры.ТекстСообщения, ДополнительныеПараметры.КодРазрешения, @@ -822,18 +838,18 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Параметр запуска %1 не отработан. Нет прав на администрирование информационной базы.'"), ИмяПараметраЗавершитьРаботуПользователей); - ПоказатьПредупреждение(,ТекстСообщения); - Возврат Ложь; + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), + "Предупреждение", ТекстСообщения,, Истина); + Возврат Истина; КонецЕсли; - // Если выполнен запуск с ключом, то нужно зачитать параметры администрирования кластера. ПараметрыЗапускаУточненные = ПараметрыЗапускаУточненные(ПараметрыЗапуска, ДополнительныеПараметры); ЗаполнитьПараметрыАдминистрированияКластера(ПараметрыЗапускаУточненные); УстановитьПризнакРаботаПользователейЗавершается(Истина); ТекущийРежим = СоединенияИБВызовСервера.ПараметрыБлокировкиСеансов(Истина); ЗавершитьРаботуПользователей(ТекущийРежим); - Возврат Ложь; + Возврат Истина; КонецЕсли; Возврат Ложь; @@ -1081,4 +1097,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl index 5ce2b8ac3..958a1307e 100644 --- a/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/СообщенияКонтрольДополнительныхОтчетовИОбработокИнтерфейс/Module.bsl @@ -21,23 +21,6 @@ КонецФункции -#КонецОбласти - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. -// -// Возвращаемое значение: -// Строка -// -Функция Пакет() Экспорт - - Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Control/" + Версия(); - -КонецФункции - // Возвращает название программного интерфейса сообщений. // // Возвращаемое значение: @@ -69,6 +52,23 @@ КонецПроцедуры +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает пространство имен текущей (используемой вызывающим кодом) версии интерфейса сообщений. +// +// Возвращаемое значение: +// Строка +// +Функция Пакет() Экспорт + + Возврат "http://www.1c.ru/1cFresh/ApplicationExtensions/Control/" + Версия(); + +КонецФункции + // Возвращает тип сообщения {http://www.1c.ru/1cFresh/ApplicationExtensions/Control/a.b.c.d}ExtensionInstalled // // Параметры: diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 06c03adc7..c720699f7 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -48,7 +48,7 @@ Если Скрыть Тогда Если ТипЗнч(СохраненныеНастройки) <> Тип("ХранилищеЗначения") Тогда ТекущиеНастройки = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта); - СохраняемыеНастройки = Новый ХранилищеЗначения(ТекущиеНастройки); + СохраняемыеНастройки = Новый ХранилищеЗначения(ТекущиеНастройки, Новый СжатиеДанных(9)); ХранилищеСистемныхНастроек.Сохранить(КлючОбъектаХранения, "", СохраняемыеНастройки); КонецЕсли; СтандартныеПодсистемыСервер.УстановитьПустуюФормуНаРабочийСтол(); @@ -369,8 +369,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с предопределенными данными. +#Область РаботаСПредопределеннымиДанными // См. СтандартныеПодсистемыПовтИсп.СсылкиПоИменамПредопределенных Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт @@ -379,8 +378,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для справочника ИдентификаторыОбъектовМетаданных. +#КонецОбласти + +#Область ДляСправочникаИдентификаторыОбъектовМетаданных // См. Справочники.ИдентификаторыОбъектовМетаданных.ПредставлениеИдентификатора Функция ПредставлениеИдентификатораОбъектаМетаданных(Ссылка) Экспорт @@ -389,8 +389,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции Процедура ДобавитьПоправкиКВремени(Параметры, СвойстваКлиента) @@ -509,3 +510,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index d4979c120..dc7bbe357 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -210,6 +210,115 @@ КонецПроцедуры +// Открыть выбор объектов метаданных. +// +// Параметры: +// ПараметрыФормы - см. СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, вызываемое при закрытии формы с параметрами: +// # ВыбранныеОбъектыМетаданных - СписокЗначений - полные имена выбранных объектов метаданных, +// или ссылки на идентификаторы объектов метаданных, если параметр ВыбиратьСсылки установлен в Истина. +// # ДополнительныеПараметры - Произвольный - дополнительные параметры, переданные при создании оповещения. +// Если ОписаниеОповещенияОЗакрытии не указано, то будет вызвано оповещение, которое можно получить +// с помощью обработчика ОбработкаОповещения: +// # ИмяСобытия - Строка - "ВыборОбъектовМетаданных" +// # Параметр - СписокЗначений - выбранные объекты метаданных. +// # Источник - см. СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных.УникальныйИдентификаторИсточник +// +Процедура ВыбратьОбъектыМетаданных(ПараметрыФормы, ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт + ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); +КонецПроцедуры + +// Открыть табличный документ на просмотр или редактирование. +// При записи отредактированного табличного документа также вызывается оповещение, которое можно получить +// с помощью обработчика ОбработкаОповещения: +// # ИмяСобытия - Строка - "Запись_ТабличныйДокумент" или "ОтменаРедактированияТабличногоДокумента" +// # Параметр - Структура: +// ## ПутьКФайлу - Строка - полный путь к файлу отредактированного табличного документа. +// ## Представление - Строка - имя документа, заданное в ПараметрыРедактораТабличногоДокумента.ИмяДокумента +// # Источник - ФормаКлиентскогоПриложения - форма редактора табличного документа. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент - отображаемый или редактируемый табличный документ. +// ПараметрыФормы - см. СтандартныеПодсистемыКлиент.ПараметрыРедактораТабличногоДокумента +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, которое будет вызвано при закрытии +// формы редактора табличного документа. +// Владелец - ФормаКлиентскогоПриложения - форма-владелец. +// +Процедура ПоказатьРедакторТабличногоДокумента(Знач ТабличныйДокумент, Знач ПараметрыФормы = Неопределено, + Знач ОписаниеОповещенияОЗакрытии = Неопределено, Владелец = Неопределено) Экспорт + + Если ПараметрыФормы = Неопределено Тогда + ПараметрыФормы = ПараметрыРедактораТабличногоДокумента(); + КонецЕсли; + ПараметрыФормы.ТабличныйДокумент = ТабличныйДокумент; + + ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыФормы, Владелец,,, + ОписаниеОповещенияОЗакрытии); + +КонецПроцедуры + +// Параметры редактора табличного документа для СтандартныеПодсистемыКлиент.ПоказатьРедакторТабличногоДокумента. +// +// Возвращаемое значение: +// Структура: +// * ИмяДокумента - Строка - наименование табличного документа, выводимое в заголовке редактора. +// * ТабличныйДокумент - ТабличныйДокумент, Строка - отображаемый или редактируемый табличный документ. +// Также может быть указан адрес табличного документа во временном хранилище. +// * ПутьКФайлу - Строка - полный путь к файлу табличного документа, опционально. +// * Редактирование - Булево - если Истина, то табличный документ можно отредактировать. По умолчанию Ложь. +// +Функция ПараметрыРедактораТабличногоДокумента() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ИмяДокумента", ""); + Результат.Вставить("ТабличныйДокумент", Неопределено); + Результат.Вставить("ПутьКФайлу", ""); + Результат.Вставить("Редактирование", Ложь); + Возврат Результат; + +КонецФункции + +// Отрыть форму сравнения табличных документов, в которой можно посмотреть их отличия. +// +// Параметры: +// ТабличныйДокументЛевый - ТабличныйДокумент - первый сравниваемый табличный документ. +// ТабличныйДокументПравый - ТабличныйДокумент - второй сравниваемый табличный документ. +// Параметры - см. ПараметрыСравненияТабличныхДокументов +// +Процедура ПоказатьСравнениеТабличныхДокументов(ТабличныйДокументЛевый, ТабличныйДокументПравый, Параметры) Экспорт + + Если ТабличныйДокументЛевый <> Неопределено Тогда + ПараметрыФормы = ПараметрыСравненияТабличныхДокументов(); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, Параметры, Истина); + СравниваемыеДокументы = Новый Структура("Левый, Правый", ТабличныйДокументЛевый, ТабличныйДокументПравый); + ПараметрыФормы.АдресТабличныхДокументов = ПоместитьВоВременноеХранилище(СравниваемыеДокументы, Неопределено); + Иначе + ПараметрыФормы = Параметры; + КонецЕсли; + ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыФормы); + +КонецПроцедуры + +// Параметры сравнения табличных документов для процедуры ПоказатьСравнениеТабличныхДокументов. +// +// Возвращаемое значение: +// Структура: +// * АдресТабличныхДокументов - Строка - адрес сравниваемых табличных документов во временном хранилище. +// * Заголовок - Строка - заголовок формы. Если не задано, то "Сравнение табличных документов". +// * ЗаголовокЛевый - Строка - заголовок первого табличного документа (слева). +// * ЗаголовокПравый - Строка - заголовок правого табличного документа (справа). +// +Функция ПараметрыСравненияТабличныхДокументов() Экспорт + + Результат = Новый Структура; + Результат.Вставить("АдресТабличныхДокументов", ""); + Результат.Вставить("Заголовок", ""); + Результат.Вставить("ЗаголовокЛевый", ""); + Результат.Вставить("ЗаголовокПравый", ""); + Возврат Результат; + +КонецФункции + // См. СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации Функция ЭтоБазоваяВерсияКонфигурации() Экспорт @@ -706,6 +815,51 @@ КонецФункции +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриГлобальномПоиске +Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска) Экспорт + + ИнтеграцияПодсистемБСПКлиент.ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска); + ОбщегоНазначенияКлиентПереопределяемый.ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска); + +КонецПроцедуры + +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриВыбореРезультатаГлобальногоПоиска +Процедура ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, СтандартнаяОбработка) Экспорт + + ИнтеграцияПодсистемБСПКлиент.ПриВыбореРезультатаГлобальногоПоиска( + ЭлементРезультата, + СтандартнаяОбработка); + ОбщегоНазначенияКлиентПереопределяемый.ПриВыбореРезультатаГлобальногоПоиска( + ЭлементРезультата, + СтандартнаяОбработка); + +КонецПроцедуры + +// См. ОбщегоНазначенияКлиентПереопределяемый.ПриВыбореДействияРезультатаГлобальногоПоиска +Процедура ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) Экспорт + + ИнтеграцияПодсистемБСПКлиент.ПриВыбореДействияРезультатаГлобальногоПоиска( + ЭлементРезультата, + Действие); + ОбщегоНазначенияКлиентПереопределяемый.ПриВыбореДействияРезультатаГлобальногоПоиска( + ЭлементРезультата, + Действие); + +КонецПроцедуры + +// См. ОбщегоНазначенияКлиентПереопределяемый.ОбработкаПереходаПоНавигационнойСсылке +Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, + СтандартнаяОбработка) Экспорт + + ИнтеграцияПодсистемБСПКлиент.ОбработкаПереходаПоНавигационнойСсылке( + ДанныеПереходаПоНавигационнойСсылке, + СтандартнаяОбработка); + ОбщегоНазначенияКлиентПереопределяемый.ОбработкаПереходаПоНавигационнойСсылке( + ДанныеПереходаПоНавигационнойСсылке, + СтандартнаяОбработка); + +КонецПроцедуры + #КонецОбласти #Область ДляВызоваИзДругихПодсистем @@ -806,6 +960,7 @@ ПараметрыПриложения[ИмяПараметра].Вставить("СмещениеСтандартногоВремени"); ПараметрыПриложения[ИмяПараметра].Вставить("СмещениеДатыКлиента"); ПараметрыПриложения[ИмяПараметра].Вставить("КодОсновногоЯзыка"); + ПараметрыПриложения[ИмяПараметра].Вставить("КоличествоДополнительныхЯзыков"); ПараметрыПриложения[ИмяПараметра].Вставить("НастройкиОтправкиИнформацииОбОшибке"); КонецЕсли; Если Не ПараметрыПриложения[ИмяПараметра].Свойство("ОценкаПроизводительности") @@ -987,8 +1142,109 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +Функция НовыйПараметрОповещенияЗаписиТабличногоДокумента() Экспорт + + ПараметрыОповещения = Новый Структура; + + ПараметрыОповещения.Вставить("ПутьКФайлу", ""); + ПараметрыОповещения.Вставить("ИмяОбъектаМетаданныхМакета", ""); + ПараметрыОповещения.Вставить("КодЯзыка", ""); + ПараметрыОповещения.Вставить("Представление", ""); + ПараметрыОповещения.Вставить("ИсточникиДанных", Новый Массив()); + ПараметрыОповещения.Вставить("ОсновнаяПечатнаяФорма", Ложь); + ПараметрыОповещения.Вставить("НаименованиеПечатнойФормы", ""); + ПараметрыОповещения.Вставить( + "ФорматСохраненияВыгрузки", + ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.ПустаяСсылка")); + ПараметрыОповещения.Вставить("МакетДляВыгрузкиОбъекта", Ложь); + + Возврат ПараметрыОповещения; + +КонецФункции + +#Область ТехническаяПоддержка + +// Возвращает информацию для технической поддержки, содержащая основную, системную и дополнительную информацию. +// +// Системная информация содержит описание технических характеристик клиентского компьютера. +// Серверный аналог: см. СтандартныеПодсистемыСервер.ИнформацияДляПоддержки. +// +// Пример: +// Демонстрационная конфигурация, редакция Х.Х, Х.Х.ХХ.ХХ +// Платформа 1С:Предприятие: Х.Х.ХХ.ХХХХ +// Библиотека стандартных подсистем: Х.Х.ХХ.ХХ +// +// Системная информация +// Версия ОС: ХХХ +// Процессор: ХХХ +// Оперативная память: ХХХ +// Приложение: ХХХ +// +// Дополнительная информация +// Имя COM-соединителя: ХХХ +// Базовая конфигурация: Нет +// Полноправный пользователь: Нет +// Учебная платформа: Нет +// Конфигурация изменена: Нет +// +// Возвращаемое значение: +// Строка - информация для технической поддержки. +// +Функция ИнформацияДляПоддержки() Экспорт + + ИнформацияДляПоддержки = СтандартныеПодсистемыКлиентСервер.НоваяИнформацияДляПоддержки(); + + СистемнаяИнформация = Новый СистемнаяИнформация; + ЗаполнитьЗначенияСвойств(ИнформацияДляПоддержки, СистемнаяИнформация); + + Если ЗапускПрограммыЗавершен() Тогда + ПараметрыКонфигурации = ПараметрыРаботыКлиента(); + Иначе + ПараметрыКонфигурации = ПараметрыРаботыКлиентаПриЗапуске(); + КонецЕсли; + + ПараметрНедоступен = НСтр("ru = 'недоступно'"); + + // АПК:1417-выкл Динамический состав свойств. + ИнформацияДляПоддержки.НазваниеПрограммы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыКонфигурации, + "ПодробнаяИнформация", + ПараметрНедоступен); + // АПК:1417-вкл + + // АПК:1417-выкл Динамический состав свойств. + ИнформацияДляПоддержки.ВерсияПрограммы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыКонфигурации, + "ВерсияКонфигурации", + ПараметрНедоступен); + // АПК:1417-вкл + + ИнформацияДляПоддержки.ВерсияБСП = СтандартныеПодсистемыВызовСервера.ВерсияБиблиотеки(); + ИнформацияДляПоддержки.ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); + ИнформацияДляПоддержки.ЭтоБазоваяКонфигурация = ЭтоБазоваяВерсияКонфигурации(); + ИнформацияДляПоддержки.ЭтоПолноправныйПользователь = ПользователиКлиент.ЭтоПолноправныйПользователь(); + ИнформацияДляПоддержки.ЭтоУчебнаяПлатформа = ЭтоУчебнаяПлатформа(); + + // АПК:1417-выкл Динамический состав свойств. + НастройкиОбновления = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + ПараметрыКонфигурации, + "НастройкиОбновления"); + // АПК:1417-вкл + + // АПК:1417-выкл Динамический состав свойств. + ИнформацияДляПоддержки.КонфигурацияИзменена = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + НастройкиОбновления, + "КонфигурацияИзменена", + ПараметрНедоступен); + // АПК:1417-вкл + + Возврат СтандартныеПодсистемыКлиентСервер.ТекстИнформацииДляПоддержки(ИнформацияДляПоддержки); + +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ИнтеграцияПодсистемБСПКлиент.ПередПериодическойОтправкойДанныхКлиентаНаСервер Процедура ПередПериодическойОтправкойДанныхКлиентаНаСервер(Параметры) Экспорт @@ -1023,8 +1279,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вывод результата выполнения. +#КонецОбласти + +#Область ВыводРезультатаВыполнения // Разворачивает узлы указанного дерева на форме. // @@ -1131,50 +1388,6 @@ ПоказатьВопросПользователю(Обработчик, Текст, Кнопки, НастройкиДиалога); КонецПроцедуры -// Шапка файла для технической поддержки. -// -// Возвращаемое значение: -// Строка -// -Функция ИнформацияДляПоддержки() Экспорт - - Текст = НСтр("ru = '[НазваниеПрограммы], [ВерсияПрограммы]; - |Платформа 1С:Предприятие: [ВерсияПлатформы] [РазрядностьПлатформы]; - |Библиотека стандартных подсистем: [ВерсияБСП]; - |Приложение: [ПрограммаПросмотра] - |Операционная система: [ОперационнаяСистема]; - |Размер оперативной памяти: [ОперативнаяПамять]; - |Имя COM-соединителя: [ИмяCOMСоединителя]; - |Базовая: [ЭтоБазоваяВерсияКонфигурации] - |Полноправный пользователь: [ЭтоПолноправныйПользователь] - |Учебная: [ЭтоУчебнаяПлатформа] - |Конфигурация изменена: [КонфигурацияИзменена]'") + Символы.ПС; - - Параметры = ?(ЗапускПрограммыЗавершен(), ПараметрыРаботыКлиента(), ПараметрыРаботыКлиентаПриЗапуске()); - СистемнаяИнформация = Новый СистемнаяИнформация; - ТекстНедоступно = НСтр("ru = 'недоступно'"); - - Текст = СтрЗаменить(Текст, "[НазваниеПрограммы]", - ?(Параметры.Свойство("ПодробнаяИнформация"), Параметры.ПодробнаяИнформация, ТекстНедоступно)); - Текст = СтрЗаменить(Текст, "[ВерсияПрограммы]", - ?(Параметры.Свойство("ВерсияКонфигурации"), Параметры.ВерсияКонфигурации, ТекстНедоступно)); - Текст = СтрЗаменить(Текст, "[ВерсияПлатформы]", СистемнаяИнформация.ВерсияПриложения); - Текст = СтрЗаменить(Текст, "[РазрядностьПлатформы]", СистемнаяИнформация.ТипПлатформы); - Текст = СтрЗаменить(Текст, "[ВерсияБСП]", СтандартныеПодсистемыВызовСервера.ВерсияБиблиотеки()); - Текст = СтрЗаменить(Текст, "[ПрограммаПросмотра]", СистемнаяИнформация.ИнформацияПрограммыПросмотра); - Текст = СтрЗаменить(Текст, "[ОперационнаяСистема]", СистемнаяИнформация.ВерсияОС); - Текст = СтрЗаменить(Текст, "[ОперативнаяПамять]", СистемнаяИнформация.ОперативнаяПамять); - Текст = СтрЗаменить(Текст, "[ИмяCOMСоединителя]", ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя()); - Текст = СтрЗаменить(Текст, "[ЭтоБазоваяВерсияКонфигурации]", ЭтоБазоваяВерсияКонфигурации()); - Текст = СтрЗаменить(Текст, "[ЭтоПолноправныйПользователь]", ПользователиКлиент.ЭтоПолноправныйПользователь()); - Текст = СтрЗаменить(Текст, "[ЭтоУчебнаяПлатформа]", ЭтоУчебнаяПлатформа()); - Текст = СтрЗаменить(Текст, "[КонфигурацияИзменена]", - ?(Параметры.Свойство("НастройкиОбновления"), Параметры.НастройкиОбновления.КонфигурацияИзменена, ТекстНедоступно)); - - Возврат Текст; - -КонецФункции - #Если Не ВебКлиент И Не МобильныйКлиент Тогда // Каталог системных приложений, например, "C:\Windows\System32". @@ -1225,117 +1438,13 @@ КонецПроцедуры -// Открыть выбор объектов метаданных. -// -// Параметры: -// ПараметрыФормы - см. СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных -// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, вызываемое при закрытии формы с параметрами: -// # ВыбранныеОбъектыМетаданных - СписокЗначений - полные имена выбранных объектов метаданных, -// или ссылки на идентификаторы объектов метаданных, если параметр ВыбиратьСсылки установлен в Истина. -// # ДополнительныеПараметры - Произвольный - дополнительные параметры, переданные при создании оповещения. -// Если ОписаниеОповещенияОЗакрытии не указано, то будет вызвано оповещение, которое можно получить -// с помощью обработчика ОбработкаОповещения: -// # ИмяСобытия - Строка - "ВыборОбъектовМетаданных" -// # Параметр - СписокЗначений - выбранные объекты метаданных. -// # Источник - см. СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных.УникальныйИдентификаторИсточник -// -Процедура ВыбратьОбъектыМетаданных(ПараметрыФормы, ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт - ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии); -КонецПроцедуры - -// Открыть табличный документ на просмотр или редактирование. -// При записи отредактированного табличного документа вызывается оповещение, которое можно получить -// с помощью обработчика ОбработкаОповещения: -// # ИмяСобытия - Строка - "Запись_ТабличныйДокумент" или "ОтменаРедактированияТабличногоДокумента" -// # Параметр - Структура: -// ## ПутьКФайлу - Строка - полный путь к файлу отредактированного табличного документа. -// ## Представление - Строка - имя документа, заданное в ПараметрыРедактораТабличногоДокумента.ИмяДокумента -// # Источник - ФормаКлиентскогоПриложения - форма редактора табличного документа. -// -// Параметры: -// ТабличныйДокумент - ТабличныйДокумент - отображаемый или редактируемый табличный документ. -// ПараметрыФормы - см. СтандартныеПодсистемыКлиент.ПараметрыРедактораТабличногоДокумента -// -Процедура ПоказатьРедакторТабличногоДокумента(Знач ТабличныйДокумент, Знач ПараметрыФормы = Неопределено, - Знач ОписаниеОповещенияОЗакрытии = Неопределено, Владелец = Неопределено) Экспорт - - Если ПараметрыФормы = Неопределено Тогда - ПараметрыФормы = ПараметрыРедактораТабличногоДокумента(); - КонецЕсли; - ПараметрыФормы.ТабличныйДокумент = ТабличныйДокумент; - - ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыФормы, Владелец); - -КонецПроцедуры - -// Параметры редактора табличного документа для СтандартныеПодсистемыКлиент.ПоказатьРедакторТабличногоДокумента. -// -// Возвращаемое значение: -// Структура: -// * ИмяДокумента - Строка - наименование табличного документа, выводимое в заголовке редактора. -// * ТабличныйДокумент - ТабличныйДокумент, Строка - отображаемый или редактируемый табличный документ. -// Также может быть указан адрес табличного документа во временном хранилище. -// * ПутьКФайлу - Строка - полный путь к файлу табличного документа, опционально. -// * Редактирование - Булево - если Истина, то табличный документ можно отредактировать. По умолчанию Ложь. -// -Функция ПараметрыРедактораТабличногоДокумента() Экспорт - - Результат = Новый Структура; - Результат.Вставить("ИмяДокумента", ""); - Результат.Вставить("ТабличныйДокумент", Неопределено); - Результат.Вставить("ПутьКФайлу", ""); - Результат.Вставить("Редактирование", Ложь); - Возврат Результат; - -КонецФункции - -// Отрыть форму сравнения табличных документов, в которой можно посмотреть их отличия. -// -// Параметры: -// ТабличныйДокументЛевый - ТабличныйДокумент - первый сравниваемый табличный документ. -// ТабличныйДокументПравый - ТабличныйДокумент - второй сравниваемый табличный документ. -// Параметры - см. ПараметрыСравненияТабличныхДокументов -// -Процедура ПоказатьСравнениеТабличныхДокументов(ТабличныйДокументЛевый, ТабличныйДокументПравый, Параметры) Экспорт - - Если ТабличныйДокументЛевый <> Неопределено Тогда - ПараметрыФормы = ПараметрыСравненияТабличныхДокументов(); - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, Параметры, Истина); - СравниваемыеДокументы = Новый Структура("Левый, Правый", ТабличныйДокументЛевый, ТабличныйДокументПравый); - ПараметрыФормы.АдресТабличныхДокументов = ПоместитьВоВременноеХранилище(СравниваемыеДокументы, Неопределено); - Иначе - ПараметрыФормы = Параметры; - КонецЕсли; - ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыФормы); - -КонецПроцедуры - -// Параметры сравнения табличных документов для процедуры ПоказатьСравнениеТабличныхДокументов. -// -// Возвращаемое значение: -// Структура: -// * АдресТабличныхДокументов - Строка - адрес сравниваемых табличных документов во временном хранилище. -// * Заголовок - Строка - заголовок формы. Если не задано, то "Сравнение табличных документов". -// * ЗаголовокЛевый - Строка - заголовок первого табличного документа (слева). -// * ЗаголовокПравый - Строка - заголовок правого табличного документа (справа). -// -Функция ПараметрыСравненияТабличныхДокументов() Экспорт - - Результат = Новый Структура; - Результат.Вставить("АдресТабличныхДокументов", ""); - Результат.Вставить("Заголовок", ""); - Результат.Вставить("ЗаголовокЛевый", ""); - Результат.Вставить("ЗаголовокПравый", ""); - Возврат Результат; - -КонецФункции +#КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// ПередНачаломРаботыСистемы +#Область ПередНачаломРаботыСистемы // Продолжение процедуры ПередНачаломРаботыСистемы. Процедура ДействияПередНачаломРаботыСистемы(ОповещениеЗавершения) @@ -1663,8 +1772,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПриНачалеРаботыСистемы +#КонецОбласти + +#Область ПриНачалеРаботыСистемы // Продолжение процедуры ПриНачалеРаботыСистемы. Процедура ДействияПриНачалеРаботыСистемы(ОповещениеЗавершения, НепрерывноеВыполнение) @@ -1979,8 +2089,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПередЗавершениемРаботыСистемы +#КонецОбласти + +#Область ПередЗавершениемРаботыСистемы // Только для внутреннего использования. // @@ -2092,8 +2203,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции для запуска и завершения работы программы. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункцииДляЗапускаИЗавершенияРаботыПрограммы // См. ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы. Процедура ПередНачаломРаботыСистемы2(Параметры) Экспорт @@ -2490,8 +2602,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для справочника ИдентификаторыОбъектовМетаданных. +#КонецОбласти + +#Область ДляСправочникаИдентификаторыОбъектовМетаданных // Только для внутреннего использования. Процедура ИдентификаторыОбъектовМетаданныхФормаСпискаСписокВыборЗначения(Форма, Элемент, Значение, СтандартнаяОбработка) Экспорт @@ -2528,6 +2641,8 @@ КонецПроцедуры +#КонецОбласти + #Область ПараметрыРаботыКлиентаНаСервере Процедура ЗаполнитьПараметрыРаботыКлиентаНаСервере(Параметры) Экспорт @@ -2777,8 +2892,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции Процедура ВойтиВОбластьДанных() @@ -3367,3 +3481,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 3fee53b32..4fbbfea47 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -206,8 +206,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для справочника ИдентификаторыОбъектовМетаданных. +#Область ДляСправочникаИдентификаторыОбъектовМетаданных // См. Справочники.ИдентификаторыОбъектовМетаданных.ПредставлениеИдентификатора Функция ПредставлениеИдентификатораОбъектаМетаданных(Ссылка) Экспорт @@ -217,3 +216,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index a9b431b09..ac8bb5547 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -6,7 +6,7 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Возвращает параметры выбора объектов метаданных для процедуры // СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных. @@ -79,4 +79,130 @@ Возврат Ложь; КонецФункции +#Область ТехническаяПоддержка + +// Конструктор информации для технической поддержки. +// см. СтандартныеПодсистемыСервер.ИнформацияДляПоддержки, СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки. +// +// Возвращаемое значение: +// Структура: +// * НазваниеПрограммы - Неопределено. +// * ВерсияПрограммы - Неопределено. +// * ВерсияПриложения - Неопределено. +// * ТипПлатформы - Неопределено. +// * ВерсияБСП - Неопределено. +// * ВерсияОС - Неопределено. +// * Процессор - Неопределено. +// * ОперативнаяПамять - Неопределено. +// * ИнформацияПрограммыПросмотра - Неопределено. +// * ИмяCOMСоединителя - Неопределено. +// * ЭтоБазоваяКонфигурация - Неопределено. +// * ЭтоПолноправныйПользователь - Неопределено. +// * ЭтоУчебнаяПлатформа - Неопределено. +// * КонфигурацияИзменена - Неопределено. +// +Функция НоваяИнформацияДляПоддержки() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("НазваниеПрограммы", Неопределено); + Результат.Вставить("ВерсияПрограммы", Неопределено); + Результат.Вставить("ВерсияПриложения", Неопределено); + Результат.Вставить("ТипПлатформы", Неопределено); + Результат.Вставить("ВерсияБСП", Неопределено); + + Результат.Вставить("ВерсияОС", Неопределено); + Результат.Вставить("Процессор", Неопределено); + Результат.Вставить("ОперативнаяПамять", Неопределено); + Результат.Вставить("ИнформацияПрограммыПросмотра", Неопределено); + + Результат.Вставить("ИмяCOMСоединителя", Неопределено); + Результат.Вставить("ЭтоБазоваяКонфигурация", Неопределено); + Результат.Вставить("ЭтоПолноправныйПользователь", Неопределено); + Результат.Вставить("ЭтоУчебнаяПлатформа", Неопределено); + Результат.Вставить("КонфигурацияИзменена", Неопределено); + + Возврат Результат; + +КонецФункции + +// Текст информации для технической поддержки. +// см. СтандартныеПодсистемыСервер.ИнформацияДляПоддержки, СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки. +// +// Параметры: +// ИнформацияДляПоддержки - см. СтандартныеПодсистемыКлиентСервер.НоваяИнформацияДляПоддержки. +// +// Возвращаемое значение: +// Строка - текст информации для технической поддержки. +// +Функция ТекстИнформацииДляПоддержки(ИнформацияДляПоддержки) Экспорт + + Результат = Новый Массив; + + ШаблонОсновнойИнформации = НСтр( + "ru = '%1, %2 + |Платформа 1С:Предприятие: %3 %4 + |Библиотека стандартных подсистем: %5'"); + + ОсновнаяИнформация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОсновнойИнформации, + ИнформацияДляПоддержки.НазваниеПрограммы, + ИнформацияДляПоддержки.ВерсияПрограммы, + ИнформацияДляПоддержки.ВерсияПриложения, + ИнформацияДляПоддержки.ТипПлатформы, + ИнформацияДляПоддержки.ВерсияБСП); + + Результат.Добавить(ОсновнаяИнформация); + Результат.Добавить(""); + + ШаблонСистемнойИнформации = НСтр( + "ru = 'Системная информация + |Версия ОС: %1 + |Процессор: %2 + |Оперативная память: %3'"); + + СистемнаяИнформация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСистемнойИнформации, + ИнформацияДляПоддержки.ВерсияОС, + ИнформацияДляПоддержки.Процессор, + ИнформацияДляПоддержки.ОперативнаяПамять); + + Результат.Добавить(СистемнаяИнформация); + + Если ЗначениеЗаполнено(ИнформацияДляПоддержки.ИнформацияПрограммыПросмотра) Тогда + + ИнформацияПрограммыПросмотра = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Приложение: %1'"), ИнформацияДляПоддержки.ИнформацияПрограммыПросмотра); + + Результат.Добавить(ИнформацияПрограммыПросмотра); + + КонецЕсли; + + Результат.Добавить(""); + + ШаблонДополнительнойИнформации = НСтр( + "ru = 'Дополнительная информация + |Имя COM-соединителя: %1 + |Базовая конфигурация: %2 + |Полноправный пользователь: %3 + |Учебная платформа: %4 + |Конфигурация изменена: %5'"); + + ДополнительнаяИнформация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонДополнительнойИнформации, + ИнформацияДляПоддержки.ИмяCOMСоединителя, + ИнформацияДляПоддержки.ЭтоБазоваяКонфигурация, + ИнформацияДляПоддержки.ЭтоПолноправныйПользователь, + ИнформацияДляПоддержки.ЭтоУчебнаяПлатформа, + ИнформацияДляПоддержки.КонфигурацияИзменена); + + Результат.Добавить(ДополнительнаяИнформация); + Результат.Добавить(""); + + Возврат СтрСоединить(Результат, Символы.ПС); + +КонецФункции + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl index 686b39218..7431686bc 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверЛокализация/Module.bsl @@ -6,7 +6,7 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс // Описывает правил транслитерации национального алфавита в латиницу. // diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index 9ceba0805..a6a1add36 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -171,8 +171,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Использование идентификаторов объектов метаданных конфигурации и расширений. +#Область ИспользованиеИдентификаторовОбъектовМетаданныхКонфигурацииИРасширений // Только для внутреннего использования. // @@ -227,8 +226,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с обменом данными. +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСОбменомДанными // Возвращает признак использования в информационной базе полного РИБ (без фильтров). // Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". @@ -403,8 +403,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочее. +#КонецОбласти + +#Область Прочее // Доступность объектов метаданных по функциональным опциям. // @@ -547,6 +548,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ЭтоРазделенныйРежимБезРасширенийОбластиДанных() Экспорт @@ -766,8 +769,189 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для справочника ИдентификаторыОбъектовМетаданных. +// См. СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи +Функция ОписаниеКлючаЗаписи(ПолноеИмяРегистра) Экспорт + + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяРегистра); + + ВсеПоля = Новый Массив; + НаборЗаписей = Менеджер.СоздатьНаборЗаписей(); + Колонки = НаборЗаписей.Выгрузить().Колонки; + Для Каждого Колонка Из Колонки Цикл + ВсеПоля.Добавить(Колонка.Имя); + КонецЦикла; + + ПоляКлюча = Новый Массив; + ПоляОбновления = Новый Массив; + ОписаниеПолей = Новый Массив; + ОписаниеПолейОбновления = Новый Массив; + + СписокВсехПолей = СтрСоединить(ВсеПоля, ","); + ПустойКлючЗаписи = Менеджер.СоздатьКлючЗаписи(Новый Структура(СписокВсехПолей)); + МетаданныеРегистра = НаборЗаписей.Метаданные(); + ЭтоРегистрСведенийСРегистратором = ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеРегистра) + И МетаданныеРегистра.РежимЗаписи + = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору; + + Для Каждого Колонка Из Колонки Цикл + Поле = Колонка.Имя; + ОдноПоле = Новый Структура(Поле, Null); + ЗаполнитьЗначенияСвойств(ОдноПоле, ПустойКлючЗаписи); + Если ОдноПоле[Поле] = Null И Поле <> "НомерСтроки" Тогда + Продолжить; + КонецЕсли; + ЭтоРазделитель = Ложь; + ПредставлениеПоля = ПредставлениеПоляРегистра(МетаданныеРегистра, Поле, ЭтоРазделитель); + ОписаниеПоля = Новый ФиксированнаяСтруктура(Новый Структура("Имя, Тип, Представление", + Поле, Колонка.ТипЗначения, ПредставлениеПоля)); + Если ОдноПоле[Поле] <> Null Тогда + ПоляКлюча.Добавить(Поле); + ОписаниеПолей.Добавить(ОписаниеПоля); + КонецЕсли; + Если Не ЭтоРегистрСведенийСРегистратором + Или Не ЭтоРазделитель + И Поле <> "Регистратор" + И Поле <> "НомерСтроки" Тогда + Продолжить; + КонецЕсли; + ПоляОбновления.Добавить(Поле); + ОписаниеПолейОбновления.Добавить(ОписаниеПоля); + КонецЦикла; + + Если Не ЭтоРегистрСведенийСРегистратором Тогда + ПоляОбновления = ПоляКлюча; + ОписаниеПолейОбновления = ОписаниеПолей; + КонецЕсли; + + ОписаниеКлюча = Новый Структура; + ОписаниеКлюча.Вставить("ОписаниеПолей", Новый ФиксированныйМассив(ОписаниеПолей)); + ОписаниеКлюча.Вставить("СписокПолей", СтрСоединить(ПоляКлюча, ",")); + ОписаниеКлюча.Вставить("ОписаниеПолейОбновления", Новый ФиксированныйМассив(ОписаниеПолейОбновления)); + ОписаниеКлюча.Вставить("СписокПолейОбновления", СтрСоединить(ПоляОбновления, ",")); + + Возврат Новый ФиксированнаяСтруктура(ОписаниеКлюча); + +КонецФункции + +// Для функции ОписаниеКлючаЗаписи. +Функция ПредставлениеПоляРегистра(МетаданныеРегистра, Поле, ЭтоРазделитель) + + МетаданныеПоля = МетаданныеРегистра.Измерения.Найти(Поле); + Если МетаданныеПоля = Неопределено Тогда + МетаданныеПоля = МетаданныеРегистра.Ресурсы.Найти(Поле); + Если МетаданныеПоля = Неопределено Тогда + МетаданныеПоля = МетаданныеРегистра.Реквизиты.Найти(Поле); + Если МетаданныеПоля = Неопределено Тогда + Для Каждого СтандартныйРеквизит Из МетаданныеРегистра.СтандартныеРеквизиты Цикл + Если СтандартныйРеквизит.Имя <> Поле Тогда + Продолжить; + КонецЕсли; + МетаданныеПоля = СтандартныйРеквизит; + КонецЦикла; + Если МетаданныеПоля = Неопределено Тогда + РазделениеНеИспользовать = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.НеИспользовать; + Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + Если ОбщийРеквизит.РазделениеДанных = РазделениеНеИспользовать + Или ОбщийРеквизит.Имя <> Поле Тогда + Продолжить; + КонецЕсли; + МетаданныеПоля = ОбщийРеквизит; + ЭтоРазделитель = Истина; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат МетаданныеПоля.Представление(); + +КонецФункции + +Функция РежимДобавленияНабораЗаписей() Экспорт + + Если Не РежимыЗамещенияДоступны() Тогда + Возврат Неопределено; + КонецЕсли; + + // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) + Возврат Вычислить("РежимЗамещения.Добавление"); + // АПК:488-вкл + +КонецФункции + +Функция РежимЗамещенияНабораЗаписей() Экспорт + + Если Не РежимыЗамещенияДоступны() Тогда + Возврат Неопределено; + КонецЕсли; + + // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) + Возврат Вычислить("РежимЗамещения.Замещение"); + // АПК:488-вкл + +КонецФункции + +Функция РежимОбновленияНабораЗаписей() Экспорт + + Если Не РежимыЗамещенияДоступны(Истина) Тогда + Возврат Неопределено; + КонецЕсли; + + // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) + Возврат Вычислить("РежимЗамещения.Обновление"); + // АПК:488-вкл + +КонецФункции + +Функция РежимСлиянияНабораЗаписей() Экспорт + + Если Не РежимыЗамещенияДоступны() Тогда + Возврат Неопределено; + КонецЕсли; + + // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) + Возврат Вычислить("РежимЗамещения.Слияние"); + // АПК:488-вкл + +КонецФункции + +Функция РежимУдаленияНабораЗаписей() Экспорт + + Если Не РежимыЗамещенияДоступны() Тогда + Возврат Неопределено; + КонецЕсли; + + // АПК:488-выкл Поддержка новых типов платформы (исполняемый код безопасен) + Возврат Вычислить("РежимЗамещения.Удаление"); + // АПК:488-вкл + +КонецФункции + +Функция РежимыЗамещенияДоступны(ВключаяОбновление = Ложь) + + СистемнаяИнформация = Новый СистемнаяИнформация; + Версия = СистемнаяИнформация.ВерсияПриложения; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.26.1398") < 0 Тогда + Возврат Ложь; + КонецЕсли; + + Если Не ОбщегоНазначения.РазделениеВключено() Тогда + Возврат Истина; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.26.0") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.26.1540") < 0 + Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.27.0") > 0 + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.27.1483") < 0 Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#Область ДляСправочникаИдентификаторыОбъектовМетаданных // См. Справочники.ИдентификаторыОбъектовМетаданных.КэшИдентификаторовОбъектовМетаданных Функция КэшИдентификаторовОбъектовМетаданных(КлючДанныхПовторногоИспользования) Экспорт @@ -798,8 +982,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с предопределенными данными. +#КонецОбласти + +#Область РаботаСПредопределеннымиДанными // Возвращает соответствие имен предопределенных значений ссылкам на них. // @@ -886,8 +1071,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Возвращаемое значение: // Структура: @@ -953,4 +1139,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 8b9d7f1cc..24404e872 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -266,7 +266,7 @@ ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера = ""; ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = ""; - Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(ПараметрыАдминистрированияИБ)); + Константы.ПараметрыАдминистрированияИБ.Установить(Новый ХранилищеЗначения(ПараметрыАдминистрированияИБ, Новый СжатиеДанных(9))); КонецПроцедуры @@ -646,8 +646,81 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительная базовая функциональность для анализа параметров клиента на сервере. +// Возвращает номера версий, поддерживаемых программным интерфейсом ИмяИнтерфейса, +// указанных в процедурах ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов. +// +// Параметры: +// ИмяИнтерфейса - Строка - имя программного интерфейса. +// +// Возвращаемое значение: +// Массив из Строка - список номеров версий +// +Функция ПоддерживаемыеВерсииПрограммногоИнтерфейса(ИмяИнтерфейса) Экспорт + + ВерсииИнтерфейса = Неопределено; + + ПоддерживаемыеВерсии = ОбщегоНазначения.ВерсииИнтерфейсов(); + ПоддерживаемыеВерсии.Свойство(ИмяИнтерфейса, ВерсииИнтерфейса); + + Если ВерсииИнтерфейса = Неопределено Тогда + ВерсииИнтерфейса = Новый Массив(); + КонецЕсли; + + Возврат ВерсииИнтерфейса; + +КонецФункции + +#Область ТехническаяПоддержка + +// Возвращает информацию для технической поддержки, содержащая основную, системную и дополнительную информацию. +// +// Системная информация содержит описание технических характеристик серверного компьютера. +// Клиентский аналог: см. СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки. +// +// Пример: +// Демонстрационная конфигурация, редакция Х.Х, Х.Х.ХХ.ХХ +// Платформа 1С:Предприятие: Х.Х.ХХ.ХХХХ +// Библиотека стандартных подсистем: Х.Х.ХХ.ХХ +// +// Системная информация +// Версия ОС: ХХХ +// Процессор: ХХХ +// Оперативная память: ХХХ +// Приложение: ХХХ +// +// Дополнительная информация +// Имя COM-соединителя: ХХХ +// Базовая конфигурация: Нет +// Полноправный пользователь: Нет +// Учебная платформа: Нет +// Конфигурация изменена: Нет +// +// Возвращаемое значение: +// Строка - информация для технической поддержки. +// +Функция ИнформацияДляПоддержки() Экспорт + + ИнформацияДляПоддержки = СтандартныеПодсистемыКлиентСервер.НоваяИнформацияДляПоддержки(); + + СистемнаяИнформация = Новый СистемнаяИнформация; + ЗаполнитьЗначенияСвойств(ИнформацияДляПоддержки, СистемнаяИнформация); + + ИнформацияДляПоддержки.НазваниеПрограммы = Метаданные.ПодробнаяИнформация; + ИнформацияДляПоддержки.ВерсияПрограммы = Метаданные.Версия; + ИнформацияДляПоддержки.ВерсияБСП = ВерсияБиблиотеки(); + ИнформацияДляПоддержки.ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); + ИнформацияДляПоддержки.ЭтоБазоваяКонфигурация = ЭтоБазоваяВерсияКонфигурации(); + ИнформацияДляПоддержки.ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); + ИнформацияДляПоддержки.ЭтоУчебнаяПлатформа = ЭтоУчебнаяПлатформа(); + ИнформацияДляПоддержки.КонфигурацияИзменена = КонфигурацияИзменена(); + + Возврат СтандартныеПодсистемыКлиентСервер.ТекстИнформацииДляПоддержки(ИнформацияДляПоддержки); + +КонецФункции + +#КонецОбласти + +#Область ДополнительнаяБазоваяФункциональностьДляАнализаПараметровКлиентаНаСервере // Параметры: // ВызыватьИсключение - Булево - вызывать исключение, если параметры не инициализированы. @@ -720,8 +793,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры для установки/обновления/получения параметров работы программы (кэшей). +#КонецОбласти + +#Область ПроцедурыДляУстановкиОбновленияПолученияПараметровРаботыПрограммыКэшей // Проверяет, что в текущем сеансе доступна последняя версия программы, // в противном случае, вызывает исключение с требованием перезапустить сеанс. @@ -1203,8 +1277,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры для установки/получения параметров работы расширений (кэшей). +#КонецОбласти + +#Область ПроцедурыДляУстановкиПолученияПараметровРаботыРасширенийКэшей // Возвращает значения параметра для текущей версии расширений. // Если не заполнен, возвращает Неопределено. @@ -1307,8 +1382,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительная базовая функциональность для обмена данными. +#КонецОбласти + +#Область ДополнительнаяБазоваяФункциональностьДляОбменаДанными // Выполняет регистрацию изменений объекта на всех узлах плана обмена. // Для разделенных конфигураций должны выполняться условия: @@ -1434,8 +1510,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики отправки и получения данных для обмена в распределенной ИБ. +#КонецОбласти + +#Область ОбработчикиОтправкиИПолученияДанныхДляОбменаВРаспределеннойИБ // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной // информационной базе. @@ -1472,6 +1549,12 @@ КонецЕсли; КонецЕсли; + Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.РазрешитьДоступКИнтернетСервисам") Тогда + Если Не СозданиеНачальногоОбраза Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + КонецЕсли; + ИнтеграцияПодсистемБСП.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; @@ -1590,8 +1673,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Дополнительные функции для работы с типами. +#КонецОбласти + +#Область ДополнительныеФункцииДляРаботыСТипами // Возвращает тип ссылки или ключа записи указанного объекта метаданных. // @@ -1676,8 +1760,35 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции работы с формами. +// Возвращает описание полей ключа записи и ключевых полей строки набора записей, +// используемых в режимах замещения Обновление, Слияние, Удаление. +// +// Параметры: +// ПолноеИмяРегистра - Строка - полное имя регистра. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура: +// * СписокПолей - Строка - имена полей ключа записи через запятую. +// * СписокПолейОбновления - Строка - имена ключевых полей строки набора записей +// для режимов замещения (Обновление, Слияние, Удаление) через запятую. +// * ОписаниеПолей - ФиксированныйМассив из ФиксированнаяСтруктура: +// ** Имя - Строка - имя поля ключа записи. +// ** Тип - ОписаниеТипов +// ** Представление - Строка +// * ОписаниеПолейОбновления - ФиксированныйМассив из ФиксированнаяСтруктура: +// ** Имя - Строка - имя ключевого поля строки набора записей. +// ** Тип - ОписаниеТипов +// ** Представление - Строка +// +Функция ОписаниеКлючаЗаписи(ПолноеИмяРегистра) Экспорт + + Возврат СтандартныеПодсистемыПовтИсп.ОписаниеКлючаЗаписи(ПолноеИмяРегистра); + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСФормами // Устанавливает ключ назначения формы (ключ назначения использования и // ключ сохранения положения окна). При необходимости копирует текущие настройки формы, @@ -1799,8 +1910,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Возвращает уточнения при возникновении проблем с параметрами работы программы. // @@ -2064,8 +2176,6 @@ КонецПроцедуры -// Для подписки на событие ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи. -// Процедура ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи(Источник, Отказ, Замещение, ТолькоЗапись = Неопределено, ЗаписьФактическогоПериодаДействия = Неопределено, @@ -2092,8 +2202,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных. Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт @@ -2182,6 +2293,7 @@ Типы.Добавить(Метаданные.РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных); Типы.Добавить(Метаданные.РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений); Типы.Добавить(Метаданные.РегистрыСведений.ПараметрыРаботыВерсийРасширений); + Типы.Добавить(Метаданные.РегистрыСведений.УдалитьБезопасноеХранилищеДанныхОбластейДанных); КонецПроцедуры @@ -2334,6 +2446,20 @@ Обработчик.НачальноеЗаполнение = Истина; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.11.61"; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ВключитьКонстантуРазрешитьДоступКИнтернетСервисам"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + + Если ОбщегоНазначения.РазделениеВключено() Тогда + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.11.65"; + Обработчик.Процедура = "СтандартныеПодсистемыСервер.ПеренестиБезопасноеХранилищеДанныхОбластейДанных"; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.РежимВыполнения = "Оперативно"; + КонецЕсли; + КонецПроцедуры // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий @@ -2625,6 +2751,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной @@ -2645,6 +2773,10 @@ Возврат; КонецЕсли; + Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.РазрешитьДоступКИнтернетСервисам") Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + ИнтеграцияПодсистемБСП.ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель); // Вызов переопределяемого обработчика для выполнения прикладной логики обмена РИБ. @@ -2744,6 +2876,17 @@ ДобавитьПоказатель(Параметры, МоментНачала, "ОбщегоНазначения.КодОсновногоЯзыка"); + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда + МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); + КоличествоДополнительныхЯзыков = МодульМультиязычностьСервер.КоличествоДополнительныхЯзыков(); + Иначе + КоличествоДополнительныхЯзыков = 0; + КонецЕсли; + Параметры.Вставить("КоличествоДополнительныхЯзыков", КоличествоДополнительныхЯзыков); + ДобавитьПоказатель(Параметры, МоментНачала, + "МультиязычностьСервер.КоличествоДополнительныхЯзыков"); + МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); НастройкиПользователя = ОбработкаОшибок.ПолучитьНастройкиПользователя(); Параметры.Вставить("НастройкиОтправкиИнформацииОбОшибке", @@ -3250,28 +3393,18 @@ КонецПроцедуры -// Возвращает номера версий, поддерживаемых программным интерфейсом ИмяИнтерфейса. -// См. ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение. +// Для вызова из ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение. // // Параметры: -// ИмяИнтерфейса - Строка - имя программного интерфейса. +// ИмяИнтерфейса - см. ПоддерживаемыеВерсииПрограммныхИнтерфейсов.ИмяИнтерфейса // // Возвращаемое значение: -// Массив - список версий типа Строка. +// Строка - ЗначениеВСтрокуXML результата функции ПоддерживаемыеВерсииПрограммныхИнтерфейсов. // Функция ПоддерживаемыеВерсии(ИмяИнтерфейса) Экспорт - МассивВерсий = Неопределено; - СтруктураПоддерживаемыхВерсий = Новый Структура; - - ИнтеграцияПодсистемБСП.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); - СтруктураПоддерживаемыхВерсий.Свойство(ИмяИнтерфейса, МассивВерсий); - - Если МассивВерсий = Неопределено Тогда - Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Новый Массив); - Иначе - Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(МассивВерсий); - КонецЕсли; + МассивВерсий = ПоддерживаемыеВерсииПрограммногоИнтерфейса(ИмяИнтерфейса); + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(МассивВерсий); КонецФункции @@ -3425,8 +3558,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы // Устанавливает значение константам НеИспользоватьРазделениеПоОбластямДанных и // СтандартныеПодсистемыВАвтономномРежиме на основании значения ИспользоватьРазделениеПоОбластямДанных. @@ -3512,27 +3644,89 @@ КонецПроцедуры +Процедура ВключитьКонстантуРазрешитьДоступКИнтернетСервисам() Экспорт + + Константы.РазрешитьДоступКИнтернетСервисам.Установить(Истина); + +КонецПроцедуры + // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт Библиотека = "СтандартныеПодсистемы"; СтароеИмя = "Роль.БазовыеПрава"; НовоеИмя = "Роль.БазовыеПраваБСП"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "3.0.1.19", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "3.0.1.19", СтароеИмя, НовоеИмя, Библиотека); СтароеИмя = "Роль.БазовыеПраваВнешнегоПользователя"; НовоеИмя = "Роль.БазовыеПраваВнешнихПользователейБСП"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "3.0.1.19", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "3.0.1.19", СтароеИмя, НовоеИмя, Библиотека); СтароеИмя = "Роль.РежимВсеФункции"; НовоеИмя = "Роль.РежимТехническогоСпециалиста"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "3.1.5.153", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "3.1.5.153", СтароеИмя, НовоеИмя, Библиотека); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +// Миграция данных регистра УдалитьБезопасноеХранилищеДанныхОбластейДанных +// в БезопасноеХранилищеДанныхОбластейДанных. +// +Процедура ПеренестиБезопасноеХранилищеДанныхОбластейДанных() Экспорт + + // Не поддерживается работа в модели сервиса. + Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + ОбластьДанных = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + + НаборЗаписей = РегистрыСведений.БезопасноеХранилищеДанныхОбластейДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ОбластьДанныхВспомогательныеДанные.Установить(ОбластьДанных); + НаборЗаписейУдалить = РегистрыСведений.УдалитьБезопасноеХранилищеДанныхОбластейДанных.СоздатьНаборЗаписей(); + + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.УдалитьБезопасноеХранилищеДанныхОбластейДанных"); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | УдалитьБезопасноеХранилищеДанныхОбластейДанных.Владелец, + | УдалитьБезопасноеХранилищеДанныхОбластейДанных.Данные + |ИЗ + | РегистрСведений.УдалитьБезопасноеХранилищеДанныхОбластейДанных КАК УдалитьБезопасноеХранилищеДанныхОбластейДанных"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Запись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств( + Запись, + ВыборкаДетальныеЗаписи); + Запись.ОбластьДанныхВспомогательныеДанные = ОбластьДанных; + КонецЦикла; + + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписейУдалить); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиПодписокНаСобытия // Обработчик события ПередЗаписью предопределенных элементов. // @@ -3623,8 +3817,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработка подписок на события планов обмена РИБ. +#КонецОбласти + +#Область ОбработкаПодписокНаСобытияПлановОбменаРИБ // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной // информационной базе. @@ -3736,8 +3931,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Возвращаемое значение: // Массив из ОбъектМетаданных @@ -3897,21 +4093,18 @@ КонецПроцедуры +// Параметры: +// ТаблицаИмен - ТаблицаЗначений +// ИмяРодителя - Строка +// // Возвращаемое значение: // СтрокаТаблицыЗначений: -// * Ссылка - СправочникСсылка, -// - ПланВидовХарактеристикСсылка -// - ПланСчетовСсылка -// - ПланВидовРасчетаСсылка -// * Имя - Строка -// * ВерсияДанных- Строка -// * ИмяРодителя - Строка -// * Объект - СправочникОбъект -// - ПланВидовХарактеристикОбъект -// - ПланСчетовОбъект -// - ПланВидовРасчетаОбъект -// * ОбъектСуществует - Булево -// Неопределено +// * Ссылка - СправочникСсылка +// * Имя - Строка +// * ВерсияДанных - Строка +// * ИмяРодителя - Строка +// * Объект - СправочникОбъект +// * ОбъектСуществует - Булево // Функция ОписаниеСохраненногоОбъекта(ТаблицаИмен, ИмяРодителя) Возврат ТаблицаИмен.Найти(ИмяРодителя, "Имя"); @@ -4163,7 +4356,7 @@ // Функция МинимальнаяВерсияПлатформыДляЗапуска() Экспорт - Возврат "8.3.21.1622; 8.3.22.1704"; // Недопустимо менять в исправительных релизах. + Возврат "8.3.24.1342"; // Недопустимо менять в исправительных релизах. КонецФункции @@ -4182,44 +4375,20 @@ // Не рекомендуется менять в исправительных релизах. Версии = Новый СписокЗначений; - Версии.Добавить("8.3.21", "8.3.22.2501; 8.3.23.2137; 8.3.24.1467;"); - Версии.Добавить("8.3.22", "8.3.22.2501; 8.3.23.2137; 8.3.24.1548; 8.3.25.1286"); - Версии.Добавить("8.3.23", "8.3.23.2137; 8.3.24.1548; 8.3.25.1286"); - Версии.Добавить("8.3.24", "8.3.24.1548; 8.3.25.1286"); + Версии.Добавить("8.3.24", "8.3.24.1548; 8.3.25.1286; 8.3.26.1498; 8.3.27.1244"); + Версии.Добавить("8.3.25", "8.3.25.1286; 8.3.26.1498; 8.3.27.1244"); + Версии.Добавить("8.3.26", "8.3.26.1498; 8.3.27.1244"); + Версии.Добавить("8.3.27", "8.3.27.1244"); Возврат Версии; КонецФункции -// Поддерживаемые версии защищенного программно комплекса. См. файл ReadMe.txt -// Запуск на этих версиях допускается, даже если версия ниже, чем указана в функции МинимальнаяВерсияПлатформыДляИспользования, -// но версия должна быть выше, чем указанная в МинимальнаяВерсияПлатформыДляЗапуска. -// -Функция ВерсииЗащищенногоПрограммногоКомплекса() Экспорт // АПК:581 - экспортная, так как используется при тестировании. - - Версии = Новый Массив; - Версии.Добавить("8.3.21.1676"); - Версии.Добавить("8.3.21.1901"); - Версии.Добавить("8.3.24.1440"); - Версии.Добавить("8.3.24.1599"); - - Возврат Версии; - -КонецФункции - // Для процедуры УточнитьВерсиюПлатформы. // Здесь указываются отозванные версии платформы и рекомендуемые вместо них. // Функция НомерВерсииПлатформыВместоОтозванной(ТекущаяСборка) Экспорт - Если СтрНайти("8.3.22.1672,8.3.22.1603", ТекущаяСборка) Тогда - Возврат "8.3.22.1709"; - - ИначеЕсли СтрНайти("8.3.21.1607,8.3.21.1508,8.3.21.1484", ТекущаяСборка) Тогда - Возврат "8.3.21.1624"; - - КонецЕсли; - Возврат ""; КонецФункции @@ -4334,7 +4503,7 @@ ТекущиеНастройки.УстановитьСоставФорм(СоставФорм); Если НастройкиСохранены Тогда - СохраняемыеНастройки = Новый ХранилищеЗначения(ТекущиеНастройки); + СохраняемыеНастройки = Новый ХранилищеЗначения(ТекущиеНастройки, Новый СжатиеДанных(9)); ХранилищеСистемныхНастроек.Сохранить(КлючОбъектаХранения, "", СохраняемыеНастройки); УстановитьПустуюФормуНаРабочийСтол(); Иначе @@ -5062,8 +5231,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Другие процедуры и функции. +#КонецОбласти + +#Область ДругиеПроцедурыИФункции Функция ЭлементыСтиля() Экспорт @@ -5699,4 +5869,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСерверЛокализация/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСерверЛокализация/Module.bsl index 52fb769bf..5fbe2542e 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСерверЛокализация/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСерверЛокализация/Module.bsl @@ -6,9 +6,14 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс -// См. СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента +// Позволяет добавить новые или поменять форматы сохранения табличного документа, +// в зависимости от национальной специфики. Например, указать те форматы, в которых +// принимают документы в местных контролирующих органах. +// +// Параметры: +// ТаблицаФорматов - см. СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента // Процедура ПриНастройкеФорматовСохраненияТабличногоДокумента(ТаблицаФорматов) Экспорт @@ -24,4 +29,114 @@ КонецПроцедуры +// Процедура доопределяет минимальную и рекомендуемую версии платформы "1С:Предприятие" для работы конфигурации, +// заданные в ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности. +// Может использоваться для установки минимальной и рекомендуемой версий платформы по данным внешнего сервиса. +// +// Параметры: +// МинимальнаяВерсияПлатформы - см. ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности.ОбщиеПараметры.МинимальнаяВерсияПлатформы +// РекомендуемаяВерсияПлатформы - см. ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности.ОбщиеПараметры.РекомендуемаяВерсияПлатформы +// +Процедура ПриОпределенииМинимальнойИРекомендуемойВерсийПлатформы(МинимальнаяВерсияПлатформы, РекомендуемаяВерсияПлатформы) Экспорт + + // Локализация + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + Возврат; + КонецЕсли; + + МодульИнтернетПоддержкаПользователейКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиентСервер"); + ВерсияБИП = МодульИнтернетПоддержкаПользователейКлиентСервер.ВерсияБиблиотеки(); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБИП, "2.7.1.35") <= 0 Тогда + Возврат; + КонецЕсли; + + Попытка + МодульПолучениеОбновленийПрограммы = ОбщегоНазначения.ОбщийМодуль("ПолучениеОбновленийПрограммы"); + ИнформацияОВерсияхПлатформы = МодульПолучениеОбновленийПрограммы.ИнформацияОВерсияхПлатформы(); + + // Контроль заполнения версий платформы по данным сервиса + Если ПустаяСтрока(ИнформацияОВерсияхПлатформы.МинимальнаяВерсияПлатформы) + И ПустаяСтрока(ИнформацияОВерсияхПлатформы.РекомендуемаяВерсияПлатформы) Тогда + Возврат; + КонецЕсли; + + МинимальнаяВерсияПлатформы = ИнформацияОВерсияхПлатформы.МинимальнаяВерсияПлатформы; + РекомендуемаяВерсияПлатформы = ИнформацияОВерсияхПлатформы.РекомендуемаяВерсияПлатформы; + Исключение + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось изменить минимальную и рекомендуемую версию платформы ""1С:Предприятие"", полученную с сервиса обновления приложений, по причине: + |%1'", + ОбщегоНазначения.КодОсновногоЯзыка()), ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,, + ТекстСообщения); + КонецПопытки; + + // Конец Локализация + +КонецПроцедуры + +// Вызывается при неверном заполнении минимальной и рекомендуемой версий платформы +// в процедуре ПриОпределенииМинимальнойИРекомендуемойВерсийПлатформы. +// +// Параметры: +// УказаннаяМинимальная - Строка +// УказаннаяРекомендуемая - Строка +// ТребуемаяБСПМинимальная - Строка +// ОбщиеПараметры - см. ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности +// +Процедура ПриНеверномЗаполненииМинимальнойИРекомендуемойВерсийПлатформы(УказаннаяМинимальная, УказаннаяРекомендуемая, + ТребуемаяБСПМинимальная, ОбщиеПараметры) Экспорт + + // Локализация + + Если Не ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда + Возврат; + КонецЕсли; + + МодульИнтернетПоддержкаПользователейКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиентСервер"); + ВерсияБИП = МодульИнтернетПоддержкаПользователейКлиентСервер.ВерсияБиблиотеки(); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБИП, "2.7.1.35") <= 0 Тогда + Возврат; + КонецЕсли; + + Попытка + МодульПолучениеОбновленийПрограммы = ОбщегоНазначения.ОбщийМодуль("ПолучениеОбновленийПрограммы"); + МодульПолучениеОбновленийПрограммы.УдалитьИнформациюОВерсияхПлатформы(); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Минимальная и рекомендуемая версии платформы ""1С:Предприятие"", полученные с сервиса обновления приложений, не соответствуют следующим требованиям: + | - минимальная версия должна быть заполнена; + | - минимальная версия не должна быть меньше минимальной версии БСП (см. %1); + | - минимальная версия не должна быть меньше рекомендуемой версии. + |Минимальная версия сервиса обновления приложений: %2 + |Минимальная версия БСП: %3 + |Рекомендуемая версия сервиса обновления приложений: %4 + | + |Минимальная и рекомендуемая версия платформы ""1С:Предприятие"" установлены по данным см. %5. + |Минимальная версия: %6 + |Рекомендуемая версия: %7'", + ОбщегоНазначения.КодОсновногоЯзыка()), + "ОбщегоНазначения.МинимальнаяВерсияПлатформы", УказаннаяМинимальная, ТребуемаяБСПМинимальная, + УказаннаяРекомендуемая, "ОбщегоНазначенияПереопределяемый.ПриОпределенииОбщихПараметровБазовойФункциональности", + ОбщиеПараметры.МинимальнаяВерсияПлатформы, ОбщиеПараметры.РекомендуемаяВерсияПлатформы); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,, + ТекстСообщения); + Исключение + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось удалить ранее сохраненный ответ сервиса по получению информации о версиях платформы для текущей конфигурации по причине: + |%1'", + ОбщегоНазначения.КодОсновногоЯзыка()), ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Базовая функциональность'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение,,, + ТекстСообщения); + КонецПопытки; + + // Конец Локализация + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 134edb147..e5c436a81 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -50,7 +50,7 @@ Результат = СтрРазделить(Значение, Разделитель, Ложь); Для Индекс = 0 По Результат.ВГраница() Цикл - Результат[Индекс] = СокрЛП(Результат[Индекс]) + Результат[Индекс] = СокрЛП(Результат[Индекс]); КонецЦикла; Возврат Результат; @@ -68,17 +68,26 @@ Возврат Результат; КонецЕсли; КонецЕсли; - // + + Если СтрДлина(Разделитель) = 0 Тогда + Если ПропускатьПустыеСтроки И ПустаяСтрока(Значение) Тогда + Возврат Результат; + КонецЕсли; + Если СокращатьНепечатаемыеСимволы Тогда + Значение = СокрЛП(Значение); + КонецЕсли; + Результат.Добавить(Значение); + Возврат Результат; + КонецЕсли; Позиция = СтрНайти(Значение, Разделитель); Пока Позиция > 0 Цикл Подстрока = Лев(Значение, Позиция - 1); Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда Если СокращатьНепечатаемыеСимволы Тогда - Результат.Добавить(СокрЛП(Подстрока)); - Иначе - Результат.Добавить(Подстрока); + Подстрока = СокрЛП(Подстрока); КонецЕсли; + Результат.Добавить(Подстрока); КонецЕсли; Значение = Сред(Значение, Позиция + СтрДлина(Разделитель)); Позиция = СтрНайти(Значение, Разделитель); @@ -86,10 +95,9 @@ Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда Если СокращатьНепечатаемыеСимволы Тогда - Результат.Добавить(СокрЛП(Значение)); - Иначе - Результат.Добавить(Значение); + Значение = СокрЛП(Значение); КонецЕсли; + Результат.Добавить(Значение); КонецЕсли; Возврат Результат; @@ -1253,7 +1261,7 @@ // Локализация -// Устарела. Следует использовать см. СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке +// Устарела. Следует использовать см. СтроковыеФункцииКлиентСервер.ТолькоСимволыНациональногоАлфавитаВСтроке // Проверяет, содержит ли строка только символы кириллического алфавита. // // Параметры: diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl index 62fba51aa..aab54f26e 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиСлужебный/Module.bsl @@ -12,13 +12,10 @@ // Обработчики событий подсистем конфигурации. // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - СтароеИмя = "Роль.ИспользованиеСтруктурыПодчиненности"; - НовоеИмя = "Роль.ПросмотрСвязанныеДокументы"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.5", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.5", + "Роль.ИспользованиеСтруктурыПодчиненности", "Роль.ПросмотрСвязанныеДокументы", "СтандартныеПодсистемы"); КонецПроцедуры diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index 183456524..b17ec800f 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -96,8 +96,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт @@ -109,19 +108,18 @@ КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - СтароеИмя = "Роль.ИспользованиеТекущихДел"; - НовоеИмя = "Роль.ИспользованиеОбработкиТекущиеДела"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.25", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.25", + "Роль.ИспользованиеТекущихДел", "Роль.ИспользованиеОбработкиТекущиеДела", "СтандартныеПодсистемы"); КонецПроцедуры #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ЧисловыеПоказателиТекущихДел(Запрос, ОбщиеПараметрыЗапросов = Неопределено) Экспорт @@ -391,4 +389,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ 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..2360172af --- /dev/null +++ b/SSL/src/CommonModules/ТранспортСообщенийОбмена/Module.bsl @@ -0,0 +1,2493 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Параметры инициализации. +// +// Параметры: +// ИдентификаторТранспорта - Строка - идентифкатор транспорта +// +// Возвращаемое значение: +// Структура: +// * Корреспондент - ПланОбменаСсылка, Неопределено - ссылка на узел плана обмена +// * ИмяПланаОбмена - Строка +// * ИмяПланаОбменаКорреспондента - Строка +// * ИдентификаторТранспорта - Строка +// * НастройкиТранспорта - Структура - состав повторяет реквизиты обработки транспорта +// * ДанныеАутентификации - Структура - состав повторяет реквизиты обработки транспорта, +// но только данные аутентификации, например: Пароль, ИмяПользоватля +// +Функция ПараметрыИнициализации(ИдентификаторТранспорта = "") Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("Корреспондент", Неопределено); + Параметры.Вставить("ИмяПланаОбмена", ""); + Параметры.Вставить("ИмяПланаОбменаКорреспондента", ""); + Параметры.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + Параметры.Вставить("НастройкиТранспорта", Новый Структура); + Параметры.Вставить("ДанныеАутентификации", Новый Структура); + + Возврат Параметры; + +КонецФункции + +// Инициализация обарботки транспорта. +// +// Параметры: +// ПараметрыИнициализации - Структура: +// * Корреспондент - ПланОбменаСсылка - ссылка на узел плана обмена. Если значение задано, +// то будут заполнены настройки транспорта (реквизиты обработки). +// * ИмяПланаОбмена - Строка +// * ИмяПланаОбменаКорреспондента - Строка +// * ИдентификаторТранспорта - Строка - доступный индентфикатор транспорта. +// Доступные идентфикаторы см. ДоступныеТипыТранспорта +// * НастройкиТранспорта - Структура - состав повторяет реквизиты обработки транспорта, +// * ДанныеАутентификации - Структура - состав повторяет реквизиты обработки транспорта, +// но только данные аутентификации, например: Пароль, ИмяПользоватля +// +// Возвращаемое значение: +// ОбработкаОбъект.ТранспортСообщенийОбменаCOM, +// ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, +// ОбработкаОбъект.ТранспортСообщенийОбменаESB1C, +// ОбработкаОбъект.ТранспортСообщенийОбменаFILE, +// ОбработкаОбъект.ТранспортСообщенийОбменаFTP, +// ОбработкаОбъект.ТранспортСообщенийОбменаGoogleDrive, +// ОбработкаОбъект.ТранспортСообщенийОбменаHTTP, +// ОбработкаОбъект.ТранспортСообщенийОбменаSM, +// ОбработкаОбъект.ТранспортСообщенийОбменаWS, +// ОбработкаОбъект.ТранспортСообщенийОбменаПассивныйРежим, +// ОбработкаОбъект.ТранспортСообщенийОбменаЯндексДиск - обработка заданного типа транспорта с заполненными параметрами. +// При инициализации создатся ВременныйКаталог, задается временное имя файла СообщениеОбмена, +// а так же шаблоны имен файлов (ШаблоныИменДляПолученияСообщения) для получения +// +Функция Инициализация(ПараметрыИнициализации) Экспорт + + Параметры = ПараметрыИнициализации(); + ЗаполнитьЗначенияСвойств(Параметры, ПараметрыИнициализации); + + Если ЗначениеЗаполнено(Параметры.ИдентификаторТранспорта) Тогда + ИдентификаторТранспорта = Параметры.ИдентификаторТранспорта; + ИначеЕсли ЗначениеЗаполнено(Параметры.Корреспондент) Тогда + ИдентификаторТранспорта = ТранспортПоУмолчанию(Параметры.Корреспондент); + КонецЕсли; + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + Транспорт = Менеджер.Создать(); + + Если ЗначениеЗаполнено(Параметры.Корреспондент) Тогда + Транспорт.Корреспондент = Параметры.Корреспондент; + ИначеЕсли ЗначениеЗаполнено(Параметры.ИмяПланаОбмена) Тогда + Транспорт.Корреспондент = ПланыОбмена[Параметры.ИмяПланаОбмена].ПустаяСсылка(); + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.ИмяПланаОбмена) Тогда + Транспорт.ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + ИначеЕсли ЗначениеЗаполнено(Параметры.Корреспондент) Тогда + Транспорт.ИмяПланаОбмена = Параметры.Корреспондент.Метаданные().Имя; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.ИмяПланаОбменаКорреспондента) Тогда + Транспорт.ИмяПланаОбменаКорреспондента = Параметры.ИмяПланаОбменаКорреспондента; + ИначеЕсли ЗначениеЗаполнено(Параметры.Корреспондент) Тогда + Транспорт.ИмяПланаОбменаКорреспондента = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(Параметры.Корреспондент); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Транспорт.ИмяПланаОбменаКорреспондента) Тогда + Транспорт.ИмяПланаОбменаКорреспондента = Транспорт.ИмяПланаОбмена; + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.НастройкиТранспорта) Тогда + НастройкиТранспорта = Параметры.НастройкиТранспорта; + ИначеЕсли ЗначениеЗаполнено(Параметры.Корреспондент) Тогда; + НастройкиТранспорта = НастройкиТранспорта(Параметры.Корреспондент, ИдентификаторТранспорта); + Иначе + НастройкиТранспорта = Новый Структура; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Транспорт, НастройкиТранспорта); + ЗаполнитьНастройкиИзБезопасногоХранилища(Транспорт); + + Если ЗначениеЗаполнено(Параметры.ДанныеАутентификации) Тогда + ЗаполнитьЗначенияСвойств(Транспорт, Параметры.ДанныеАутентификации); + КонецЕсли; + + Если ЗначениеЗаполнено(Параметры.Корреспондент) Тогда + ЗаполнитьИменаСообщенийПоУмолчанию(Транспорт); + КонецЕсли; + + Транспорт.ВременныйКаталог = ВременныйКаталогСообщенийОбмена(Транспорт); + + ИмяВременногоФайла = Строка(Новый УникальныйИдентификатор) + ".xml"; + + Транспорт.СообщениеОбмена = + ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(Транспорт.ВременныйКаталог, ИмяВременногоФайла); + + Возврат Транспорт; + +КонецФункции + +// Уничтожение обработки трансорта, удаление временного каталога обмена +// +// Параметры: +// Транспорт - ОбработкаОбъект.ТранспортСообщенийОбменаCOM, +// - ОбработкаОбъект.ТранспортСообщенийОбменаEMAIL, +// - ОбработкаОбъект.ТранспортСообщенийОбменаESB1C, +// - ОбработкаОбъект.ТранспортСообщенийОбменаFILE, +// - ОбработкаОбъект.ТранспортСообщенийОбменаFTP, +// - ОбработкаОбъект.ТранспортСообщенийОбменаGoogleDrive, +// - ОбработкаОбъект.ТранспортСообщенийОбменаHTTP, +// - ОбработкаОбъект.ТранспортСообщенийОбменаSM, +// - ОбработкаОбъект.ТранспортСообщенийОбменаWS, +// - ОбработкаОбъект.ТранспортСообщенийОбменаПассивныйРежим, +// - ОбработкаОбъект.ТранспортСообщенийОбменаЯндексДиск - обработка транспорта сообщений обмена. +// +// Возвращаемое значение: +// Булево - Истина при удачном выполнении, Ложь - при возникновении ошибки. +// +Функция Деинициализация(Транспорт) Экспорт + + Попытка + + Если Не ПустаяСтрока(Транспорт.ВременныйКаталог) Тогда + УдалитьФайлы(Транспорт.ВременныйКаталог); + КонецЕсли; + + Если Не Транспорт.ИдентификаторКаталога = Неопределено Тогда + ОбменДаннымиСервер.ПолучитьФайлИзХранилища(Транспорт.ИдентификаторКаталога); + КонецЕсли; + + Транспорт = Неопределено; + + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +// Настройки транспорта. +// +// Параметры: +// Корреспондент - ПланОбменаСсылка - корреспондент +// ИдентификаторТранспорта - Строка - идентификатор транспорта +// +// Возвращаемое значение: +// Структура - настройки транспорта (рекизиты обработки транспорта) +// +Функция НастройкиТранспорта(Корреспондент, ИдентификаторТранспорта) Экспорт + + Результат = Новый Структура; + + Настройки = Справочники.НастройкиТранспортаСообщенийОбмена.НастройкиТранспорта( + Корреспондент, ИдентификаторТранспорта); + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + Реквизиты = Менеджер.Создать().Метаданные().Реквизиты; + + Для Каждого Реквизит Из Реквизиты Цикл + Результат.Вставить(Реквизит.Имя, Реквизит.Тип.ПривестиЗначение()); + КонецЦикла; + + ЗаполнитьЗначенияСвойств(Результат, Настройки); + + Возврат Результат; + +КонецФункции + +// Настройки транспорта по умолчанию. +// +// Параметры: +// Корреспондент - ПланОбменаСсылка +// ИдентификаторТранспорта - Строка - возвращает идентификатор транспорта заданный по умолчанию +// +// Возвращаемое значение: +// Структура - настройки транспорта по умолчанию (рекизиты обработки транспорта) +// +Функция НастройкиТранспортаПоУмолчанию(Корреспондент, ИдентификаторТранспорта = "") Экспорт + + Результат = Новый Структура; + + Настройки = Справочники.НастройкиТранспортаСообщенийОбмена.НастройкиТранспортаПоУмолчанию( + Корреспондент, ИдентификаторТранспорта); + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + Возврат Результат; + КонецЕсли; + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + Реквизиты = Менеджер.Создать().Метаданные().Реквизиты; + + Для Каждого Реквизит Из Реквизиты Цикл + Результат.Вставить(Реквизит.Имя, Реквизит.Тип.ПривестиЗначение()); + КонецЦикла; + + ЗаполнитьЗначенияСвойств(Результат, Настройки); + + Возврат Результат; + +КонецФункции + +// Транспорт по умолчанию. +// +// Параметры: +// Корреспондент - ПланОбменаСсылка - корреспондент +// +// Возвращаемое значение: +// Строка - идентфикатор транспорта +// +Функция ТранспортПоУмолчанию(Корреспондент) Экспорт + + Возврат Справочники.НастройкиТранспортаСообщенийОбмена.ТранспортПоУмолчанию(Корреспондент); + +КонецФункции + +// Параметры транспорта (обработки транспорта). +// +// Параметры: +// ИдентификаторТранспорта - Строка - идентификатор транспорта +// +// Возвращаемое значение: +// Неопределено, Структура - см. СтруктураПараметровТранспорта +// +Функция ПараметрыТранспорта(Знач ИдентификаторТранспорта) Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипЗнч(ИдентификаторТранспорта) <> Тип("Строка") Тогда + ИдентификаторТранспорта = ТранспортПоУмолчанию(ИдентификаторТранспорта); + КонецЕсли; + + Возврат МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта).ПараметрыТранспорта(); + +КонецФункции + +// Параметр транспорта (обработки транспорта). +// +// Параметры: +// ИдентификаторТранспорта - Строка - идентификатор транспорта +// ИмяПараметра - Строка - имя параметра транспорта. Список параметров см. СтруктураПараметровТранспорта +// +// Возвращаемое значение: +// Произвольный +// +Функция ПараметрТранспорта(Знач ИдентификаторТранспорта, ИмяПараметра) Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипЗнч(ИдентификаторТранспорта) <> Тип("Строка") Тогда + ИдентификаторТранспорта = ТранспортПоУмолчанию(ИдентификаторТранспорта); + КонецЕсли; + + Параметры = ПараметрыТранспорта(ИдентификаторТранспорта); + Возврат Параметры[ИмяПараметра]; + +КонецФункции + +// Возвращает обработку транспорта по ее идентификатору. +// +// Параметры: +// ИдентификаторТранспорта - Строка - идентификатор транспорта +// +// Возвращаемое значение: +// Произвольный - менеджер обработки транспорта +// +Функция МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта) Экспорт + + Менеджеры = МенеджерыТранспортаПоИдентификаторам(); + + Возврат Менеджеры.Получить(ИдентификаторТранспорта); + +КонецФункции + +// Возвращает менеджер обработки транспорта FILE. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаFILE +// +Функция МенеджерТранспортаFILE() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаFILE; + +КонецФункции + +// Возвращает менеджер обработки транспорта COM. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаCOM +// +Функция МенеджерТранспортаCOM() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаCOM; + +КонецФункции + +// Возвращает менеджер обработки транспорта EMAIL. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаEMAIL +// +Функция МенеджерТранспортаEMAIL() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаEMAIL; + +КонецФункции + +// Возвращает менеджер обработки транспорта FTP. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаFTP +// +Функция МенеджерТранспортаFTP() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаFTP; + +КонецФункции + +// Возвращает менеджер обработки транспорта HTTP. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаHTTP +// +Функция МенеджерТранспортаHTTP() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаHTTP; + +КонецФункции + +// Возвращает менеджер обработки транспорта WS. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаWS +// +Функция МенеджерТранспортаWS() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаWS; + +КонецФункции + +// Возвращает менеджер обработки транспорта SM. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаSM +// +Функция МенеджерТранспортаSM() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаSM; + +КонецФункции + +// Возвращает менеджер обработки транспорта ПассивныйРежим. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаПассивныйРежим +// +Функция МенеджерТранспортаПассивныйРежим() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаПассивныйРежим; + +КонецФункции + +// Возвращает менеджер обработки транспорта ESB1C. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаESB1C +// +Функция МенеджерТранспортаESB1C() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаESB1C; + +КонецФункции + +// Возвращает менеджер обработки транспорта GoogleDrive. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаGoogleDrive +// +Функция МенеджерТранспортаGoogleDrive() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаGoogleDrive; + +КонецФункции + +// Возвращает менеджер обработки транспорта ЯндексДиск. +// +// Возвращаемое значение: +// ОбработкаМенеджер.ТранспортСообщенийОбменаЯндексДиск +// +Функция МенеджерТранспортаЯндексДиск() Экспорт + + Возврат Обработки.ТранспортСообщенийОбменаЯндексДиск; + +КонецФункции + +// Удалить все настройки транспорта. +// +// Параметры: +// Корреспондент - ПланОбменаСсылка - удаляемый узел плана обмена +// +Процедура УдалитьВсеНастройкиТранспорта(Корреспондент) Экспорт + + Справочники.НастройкиТранспортаСообщенийОбмена.УдалитьВсеНастройки(Корреспондент); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ДоступныеТипыТранспорта(Корреспондент, Знач ВариантНастройки = "") Экспорт + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Корреспондент); + + Если Не Корреспондент.Пустая() Тогда + ВариантНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(Корреспондент); + КонецЕсли; + + ОписаниеВариантаНастройки = ОбменДаннымиПовтИсп.ОписаниеВариантаНастройки(ИмяПланаОбмена, + ВариантНастройки, "", ""); + + Результат = ОписаниеВариантаНастройки.ИспользуемыеТранспортыСообщенийОбмена; + + Если Результат.Количество() = 0 Тогда + Результат = ВсеТипыТранспорта(); + КонецЕсли; + + // Для совместимости со старыми версиями + Для Индекс = 0 По Результат.ВГраница() Цикл + + Транспорт = Результат[Индекс]; + + Если Транспорт = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + Результат[Индекс] = Обработки.ТранспортСообщенийОбменаCOM; + ИначеЕсли Транспорт = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда + Результат[Индекс] = Обработки.ТранспортСообщенийОбменаEMAIL; + ИначеЕсли Транспорт = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + Результат[Индекс] = Обработки.ТранспортСообщенийОбменаFILE; + ИначеЕсли Транспорт = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + Результат[Индекс] = Обработки.ТранспортСообщенийОбменаFTP; + ИначеЕсли Транспорт = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + Результат[Индекс] = Обработки.ТранспортСообщенийОбменаWS; + ИначеЕсли Транспорт = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + Результат[Индекс] = Обработки.ТранспортСообщенийОбменаПассивныйРежим; + КонецЕсли; + + КонецЦикла; + + // Обмен через COM-соединение не поддерживается: + // - для базовых версий конфигураций; + // - для РИБ; + // - для стандартного обмена (без использования правил конвертации); + // - если сервер 1С запущен на ОС Linux. + // + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + Или ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) + Или ОбщегоНазначения.ЭтоLinuxСервер() Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаCOM); + + КонецЕсли; + + // Обмен через 1С:Шина не поддерживается: + // - для базовых версий конфигураций; + // - для РИБ; + // - для стандартного обмена (без использования правил конвертации); + // + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + Или ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена) Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаESB1C); + + КонецЕсли; + + // Обмен через WS-соединение не поддерживается: + // - для РИБ, не являющихся АРМ. + // + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(Корреспондент) Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаWS); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаHTTP); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаПассивныйРежим); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаESB1C); + + КонецЕсли; + + // Обмен через электронную почту не поддерживается: + // - когда недоступна подсистема работы с почтовыми сообщениями; + // - когда в конфигурации недоступно получение писем. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + Если Не МодульРаботаСПочтовымиСообщениямиСлужебный.ДоступноПолучениеПисем() Тогда + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Обработки.ТранспортСообщенийОбменаEMAIL); + КонецЕсли; + Иначе + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, + Обработки.ТранспортСообщенийОбменаEMAIL); + КонецЕсли; + + Если ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаЯндексДиск); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаGoogleDrive); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаCOM); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаEMAIL); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаFILE); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаFTP); + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаESB1C); + + Иначе + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Обработки.ТранспортСообщенийОбменаSM); + + КонецЕсли; + + ТранспортСообщенийОбменаПереопределяемый.ПриОпределенииДоступныхТиповТранспорта( + Результат, Корреспондент, ВариантНастройки); + + Возврат Результат; + +КонецФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Менеджер = МенеджерТранспортаПоИдентификатору(НастройкиПодключения.ИдентификаторТранспорта); + Возврат Менеджер.НастройкиПодключенияВXML(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияВJSON(НастройкиПодключения) Экспорт + + НастройкиПодключенияJSON = НастройкиПодключенияВJSONОбщее(НастройкиПодключения); + + Если ЗначениеЗаполнено(НастройкиПодключения.ИдентификаторТранспорта) Тогда + + Менеджер = МенеджерТранспортаПоИдентификатору(НастройкиПодключения.ИдентификаторТранспорта); + НастройкиТранспорта = Менеджер.НастройкиТранспортаВJSON(НастройкиПодключения.НастройкиТранспорта); + + Иначе + + НастройкиТранспорта = Новый Структура; + + КонецЕсли; + + НастройкиПодключенияJSON.Вставить("TransportSettings", НастройкиТранспорта); + + Возврат ЗначениеВJSON(НастройкиПодключенияJSON); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML, ИдентификаторТранспорта = "") Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстXML); + Фабрика = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + Если Фабрика.Свойства().Получить("ОсновныеПараметрыОбмена") <> Неопределено Тогда + ИдентификаторТранспорта = Фабрика.ОсновныеПараметрыОбмена.ВидТранспортаСообщенийОбмена; + КонецЕсли; + + КонецЕсли; + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + НастройкиПодключения = Менеджер.НастройкиПодключенияИзXML(ТекстXML); + + Возврат НастройкиПодключения; + +КонецФункции + +Функция НастройкиПодключенияИзJSON(ТекстJSON, ИдентификаторТранспорта = "") Экспорт + + НастройкиПодключенияИзФайла = JSONВЗначение(ТекстJSON, Ложь); + + НастройкиПодключения = Новый Структура; + ИдентификаторТранспорта = ""; + + Если НастройкиПодключенияИзФайла.Свойство("MainExchangeParameters") Тогда + + ОсновныеПараметры = НастройкиПодключенияИзФайла.MainExchangeParameters; + + НастройкиПодключения.Вставить("ВерсияФормата", ОсновныеПараметры.FormatVersion); + НастройкиПодключения.Вставить("ПрефиксИнформационнойБазыИсточника", ОсновныеПараметры.DestinationInfobasePrefix); + НастройкиПодключения.Вставить("ПрефиксИнформационнойБазыПриемника", ОсновныеПараметры.SourceInfobasePrefix); + НастройкиПодключения.Вставить("КодУзла", ОсновныеПараметры.CorrespondentNodeCode); + НастройкиПодключения.Вставить("КодУзлаКорреспондента", ОсновныеПараметры.NodeCode); + + НастройкиПодключения.Вставить("КодПредопределенногоУзла", ОсновныеПараметры.CorrespondentNodeCode); + НастройкиПодключения.Вставить("КодНовогоУзлаВторойБазы", ОсновныеПараметры.NodeCode); + + НастройкиПодключения.Вставить("ИмяПланаОбмена", ОсновныеПараметры.CorrespondentExchangePlanName); + НастройкиПодключения.Вставить("ИмяПланаОбменаКорреспондента", ОсновныеПараметры.ExchangePlanName); + + НастройкиПодключения.Вставить("НаименованиеВторойБазы", ОсновныеПараметры.ThisInfobaseDescription); + НастройкиПодключения.Вставить("НаименованиеЭтойБазы", ОсновныеПараметры.SecondInfobaseDescription); + НастройкиПодключения.Вставить("ИдентификаторТранспорта", ОсновныеПараметры.TransportID); + НастройкиПодключения.Вставить("ВариантНастройкиОбмена", ОсновныеПараметры.ExchangeSetupOption); + НастройкиПодключения.Вставить("НомерОтправленного", ОсновныеПараметры.SentNo); + НастройкиПодключения.Вставить("НомерПринятого", ОсновныеПараметры.ReceivedNo); + + ИдентификаторТранспорта = ОсновныеПараметры.TransportID; + + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторТранспорта) + И НастройкиПодключенияИзФайла.Свойство("TransportSettings") Тогда + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + НастройкиТранспорта = Менеджер.НастройкиТранспортаИзJSON(НастройкиПодключенияИзФайла.TransportSettings); + + Иначе + + НастройкиТранспорта = Новый Структура; + + КонецЕсли; + + НастройкиПодключения.Вставить("НастройкиТранспорта", НастройкиТранспорта); + + // ПараметрыОбменаXDTO + Если НастройкиПодключенияИзФайла.Свойство("XDTOExchangeParameters") Тогда + ПараметрыОбменаXDTO = НастройкиПодключенияИзФайла.XDTOExchangeParameters; + НастройкиПодключения.Вставить("ФорматОбмена", ПараметрыОбменаXDTO.ExchangeFormat); + КонецЕсли; + + Если НастройкиПодключенияИзФайла.Свойство("SupportedObjectsInFormat") Тогда + + ОбъектыФормата = ТаблицаИзМассива_ПоддерживаемыеОбъектыФормата( + НастройкиПодключенияИзФайла.SupportedObjectsInFormat, + ОсновныеПараметры.ExchangeFormatVersions); + + Хранилище = Новый ХранилищеЗначения(ОбъектыФормата); + НастройкиПодключения.Вставить("ПоддерживаемыеОбъектыФормата", Хранилище); + + КонецЕсли; + + Возврат НастройкиПодключения; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Менеджер = МенеджерТранспортаПоИдентификатору(НастройкиПодключения.ИдентификаторТранспорта); + Возврат Менеджер.ИмяКаталогаСохраненияНастроек(НастройкиПодключения); + +КонецФункции + +Процедура ПроверитьИЗаполнитьНастройкиПодключенияXML( + НастройкиПодключения, НастройкиПодключенияИзФайла, ЭтоПодключениеОнлайн = Ложь, СообщениеОбОшибке = "") Экспорт + + КорректныйФайлНастроек = Ложь; + ИмяПланаОбменаВНастройках = ""; + + Если НастройкиПодключенияИзФайла.Свойство("ИмяПланаОбмена", ИмяПланаОбменаВНастройках) + И НастройкиПодключенияИзФайла.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбмена Тогда + + КорректныйФайлНастроек = Истина; + + ИначеЕсли ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + + // Для универсального плана обмена не проверяем корректность имени плана обмена + КорректныйФайлНастроек = Истина; + + КонецЕсли; + + Если Не КорректныйФайлНастроек Тогда + + Шаблон = НСтр("ru = 'Файл не содержит настроек подключения для выбранного обмена данными. + |Выбран обмен ""%1"". + |В файле указаны настройки для обмена ""%2"".'"); + + СообщениеОбОшибке = СтрШаблон(Шаблон, НастройкиПодключения.ИмяПланаОбмена, ИмяПланаОбменаВНастройках); + + Возврат; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(НастройкиПодключения.ИмяПланаОбменаКорреспондента) Тогда + НастройкиПодключения.ИмяПланаОбменаКорреспондента = НастройкиПодключенияИзФайла.ИмяПланаОбмена; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(НастройкиПодключения, НастройкиПодключенияИзФайла, , "ИмяПланаОбмена, ПрефиксИнформационнойБазыИсточника"); + + Если СтрДлина(НастройкиПодключения.КодНовогоУзлаВторойБазы) = 36 + И СтрДлина(НастройкиПодключения.КодПредопределенногоУзла) = 36 + И ЗначениеЗаполнено(НастройкиПодключения.НомерОтправленного) + И ЗначениеЗаполнено(НастройкиПодключения.НомерПринятого) Тогда + + Если ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].ЭтотУзел().Код <> НастройкиПодключения.КодПредопределенногоУзла + И ОбменДаннымиПовтИсп.УзлыПланаОбмена(НастройкиПодключения.ИмяПланаОбмена).Количество() > 0 Тогда + НастройкиПодключения.ВосстановлениеНастроекОбмена = "ВосстановлениеСПредупреждением"; + Иначе + НастройкиПодключения.ВосстановлениеНастроекОбмена = "Восстановление"; + КонецЕсли; + + КонецЕсли; + + Если Не ЭтоПодключениеОнлайн + Или Не ЗначениеЗаполнено(НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена) Тогда + + ПустаяСсылкаПланаОбмена = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].ПустаяСсылка(); + + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена = + Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) + Или Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПустаяСсылкаПланаОбмена); + + КонецЕсли; + + Если Не ЭтоПодключениеОнлайн Тогда + КодНовогоУзлаВторойБазы = Неопределено; + НастройкиПодключенияИзФайла.Свойство("КодНовогоУзлаВторойБазы", КодНовогоУзлаВторойБазы); + + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента + Или (НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) + И ЗначениеЗаполнено(КодНовогоУзлаВторойБазы) + И СтрДлина(КодНовогоУзлаВторойБазы) <> 36); + КонецЕсли; + + Если Не НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + И Не НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + НастройкиПодключенияИзФайла.Свойство("КодПредопределенногоУзла", НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника); + НастройкиПодключенияИзФайла.Свойство("КодНовогоУзлаВторойБазы", НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); + + Иначе + + НастройкиПодключенияИзФайла.Свойство("ПрефиксИнформационнойБазыИсточника", НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); + НастройкиПодключенияИзФайла.Свойство("КодНовогоУзлаВторойБазы", НастройкиПодключения.ПрефиксИнформационнойБазыПриемника); + + КонецЕсли; + + Если НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И (НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена + Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда + + ПрефиксИБ = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + Если Не ПустаяСтрока(ПрефиксИБ) + И ПрефиксИБ <> НастройкиПодключения.ПрефиксИнформационнойБазыИсточника Тогда + + Шаблон = НСтр("ru = 'Префикс программы, указанный при настройке (""%1""), не соответствует префиксу в этой программе (""%2""). + |Для продолжения начните настройку заново из другой программы, и укажите корректный префикс (""%2"").'"); + + СообщениеОбОшибке = СтрШаблон(Шаблон, НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, ПрефиксИБ); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + // Поддержка файла настроек обмена формата версии 1.0. + Если НастройкиПодключения.ВерсияФорматаФайлаНастроекОбменаДанными = "1.0" Тогда + + НастройкиПодключения.НаименованиеЭтойБазы = НСтр("ru = 'Эта информационная база'"); + НастройкиПодключенияИзФайла.Свойство("НаименованиеНастройкиВыполненияОбмена", НастройкиПодключения.НаименованиеВторойБазы); + НастройкиПодключенияИзФайла.Свойство("КодНовогоУзла", НастройкиПодключения.КодНовогоУзлаВторойБазы); + + КонецЕсли; + + // + РеквизитыДляБезопасногоХранилища = ПараметрТранспорта( + НастройкиПодключения.ИдентификаторТранспорта, "РеквизитыДляБезопасногоХранилища"); + + НастройкиТранспорта = НастройкиПодключения.НастройкиТранспорта; + + УстановитьПривилегированныйРежим(Истина); + + Для Каждого Реквизит Из РеквизитыДляБезопасногоХранилища Цикл + + Значение = НастройкиТранспорта[Реквизит]; + + Если ЗначениеЗаполнено(Значение) Тогда + + ЗначениеИдентификатор = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ЗначениеИдентификатор, Значение); + НастройкиТранспорта[Реквизит] = ЗначениеИдентификатор; + + КонецЕсли; + + КонецЦикла; + + НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Функция НастроенныеТипыТранспорта(Корреспондент) Экспорт + + Возврат Справочники.НастройкиТранспортаСообщенийОбмена.НастроенныеТипыТранспорта(Корреспондент); + +КонецФункции + +Функция ТаблицаПараметровТранспорта(Корреспондент = Неопределено, ВариантНастройки = "") Экспорт + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("Транспорт"); + Таблица.Колонки.Добавить("ПолноеИмяОбработкиТранспорта"); + + Для Каждого КлючИЗначение Из СтруктураПараметровТранспорта() Цикл + Таблица.Колонки.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + + Если Корреспондент = Неопределено Тогда + ТипыТранспорта = ВсеТипыТранспорта(); + Иначе + ТипыТранспорта = ДоступныеТипыТранспорта(Корреспондент, ВариантНастройки); + КонецЕсли; + + Для Каждого Транспорт Из ТипыТранспорта Цикл + + Параметры = Транспорт.ПараметрыТранспорта(); + + Если Таблица.Найти(Параметры.ИдентификаторТранспорта, "ИдентификаторТранспорта") <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.Транспорт = Транспорт; + НоваяСтрока.ПолноеИмяОбработкиТранспорта = Транспорт.Создать().Метаданные().ПолноеИмя(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Параметры); + + Если Не ЗначениеЗаполнено(НоваяСтрока.Псевдоним) Тогда + НоваяСтрока.Псевдоним = НоваяСтрока.ИдентификаторТранспорта; + КонецЕсли; + + КонецЦикла; + + Возврат Таблица; + +КонецФункции + +Процедура СохранитьНастройкиТранспорта(Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, НастройкаПоУмолчанию = Неопределено) Экспорт + + СтруктураЗаписи = Новый Структура(); + СтруктураЗаписи.Вставить("Корреспондент", Корреспондент); + СтруктураЗаписи.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + СтруктураЗаписи.Вставить("Настройки", НастройкиТранспорта); + + Если НастройкаПоУмолчанию <> Неопределено Тогда + СтруктураЗаписи.Вставить("НастройкаПоУмолчанию", НастройкаПоУмолчанию); + КонецЕсли; + + Справочники.НастройкиТранспортаСообщенийОбмена.ОбновитьНастройки(СтруктураЗаписи); + +КонецПроцедуры + +Функция ПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПаролиСинхронизацииДанных = ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(); + + Возврат ПаролиСинхронизацииДанных.Получить(УзелИнформационнойБазы); + +КонецФункции + +Функция ПарольСинхронизацииДанныхЗадан(Знач УзелИнформационнойБазы) Экспорт + + Возврат ПарольСинхронизацииДанных(УзелИнформационнойБазы) <> Неопределено; + +КонецФункции + +Процедура УстановитьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы, Знач ДанныеАутентификации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПаролиСинхронизацииДанных = ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(); + ПаролиСинхронизацииДанных.Вставить(УзелИнформационнойБазы, ДанныеАутентификации); + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ХранилищеЗначения(ПаролиСинхронизацииДанных); + +КонецПроцедуры + +Функция ПолноеИмяФормыНастройки(ИдентификаторТранспорта) Экспорт + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + ИмяОбработки = Менеджер.Создать().Метаданные().ПолноеИмя(); + ИмяФормыНастройки = ПараметрТранспорта(ИдентификаторТранспорта, "ИмяФормыНастройки"); + + Возврат ИмяОбработки + ".Форма." + ИмяФормыНастройки; + +КонецФункции + +Функция ПолноеИмяФормыПервойНастройки(ИдентификаторТранспорта) Экспорт + + Менеджер = МенеджерТранспортаПоИдентификатору(ИдентификаторТранспорта); + ИмяОбработки = Менеджер.Создать().Метаданные().ПолноеИмя(); + ИмяФормыПервойНастройки = ПараметрТранспорта(ИдентификаторТранспорта, "ИмяФормыПервойНастройки"); + + Возврат ИмяОбработки + ".Форма." + ИмяФормыПервойНастройки; + +КонецФункции + +#Область РаботаСОбъектомFTPСоединение + +// Определяет, существует ли каталог на FTP-сервере. +// +// Параметры: +// Путь - Строка - путь к каталогу. +// ИмяКаталога - Строка - имя каталога. +// FTPСоединение - FTPСоединение - FTPСоединение, используемое для подключения к FTP-серверу. +// +// Возвращаемое значение: +// Булево - если Истина, то каталог существует; Ложь - нет. +// +Функция FTPКаталогСуществует(Знач Путь, Знач ИмяКаталога, Знач FTPСоединение) Экспорт + + Для Каждого FTPФайл Из FTPСоединение.НайтиФайлы(Путь) Цикл + + Если FTPФайл.ЭтоКаталог() И FTPФайл.Имя = ИмяКаталога Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции + +Функция FTPСоединение(Знач Настройки) Экспорт + + Возврат Новый FTPСоединение( + Настройки.Сервер, + Настройки.Порт, + Настройки.ИмяПользователя, + Настройки.ПарольПользователя, + НастройкиПроксиСервера(Настройки.ЗащищенноеСоединение), + Настройки.ПассивноеСоединение, + Настройки.Таймаут, + Настройки.ЗащищенноеСоединение); + +КонецФункции + +Функция FTPНастройкиСоединения(Знач Таймаут = 180) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Сервер", ""); + Результат.Вставить("Порт", 21); + Результат.Вставить("ИмяПользователя", ""); + Результат.Вставить("ПарольПользователя", ""); + Результат.Вставить("ПассивноеСоединение", Ложь); + Результат.Вставить("Таймаут", Таймаут); + Результат.Вставить("ЗащищенноеСоединение", Неопределено); + + Возврат Результат; +КонецФункции + +// Возвращает имя сервера и путь на сервере FTP, полученные из строки подключения к FTP-ресурсу. +// +// Параметры: +// СтрокаПодключения - Строка - строка подключения к FTP-ресурсу. +// +// Возвращаемое значение: +// Структура - настройки подключения к FTP-ресурсу. Поля структуры: +// Сервер - Строка - имя сервера. +// Путь - Строка - путь на сервере. +// +// Пример (1): +// Результат = FTPИмяСервераИПуть("ftp://server"); +// Результат.Сервер = "server"; +// Результат.Путь = "/"; +// +// Пример (2): +// Результат = FTPИмяСервераИПуть("ftp://server/saas/obmen"); +// Результат.Сервер = "server"; +// Результат.Путь = "/saas/obmen/"; +// +Функция FTPИмяСервераИПуть(Знач СтрокаПодключения) Экспорт + + Результат = Новый Структура("Сервер, Путь"); + СтрокаПодключения = СокрЛП(СтрокаПодключения); + + Если (ВРег(Лев(СтрокаПодключения, 6)) <> "FTP://" + И ВРег(Лев(СтрокаПодключения, 7)) <> "FTPS://") + ИЛИ СтрНайти(СтрокаПодключения, "@") <> 0 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Строка подключения к FTP-ресурсу не соответствует формату: ""%1""'"), СтрокаПодключения); + КонецЕсли; + + ПараметрыПодключения = СтрРазделить(СтрокаПодключения, "/"); + + Если ПараметрыПодключения.Количество() < 3 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В строке подключения к FTP-ресурсу не указано имя сервера: ""%1""'"), СтрокаПодключения); + КонецЕсли; + + Результат.Сервер = ПараметрыПодключения[2]; + + ПараметрыПодключения.Удалить(0); + ПараметрыПодключения.Удалить(0); + ПараметрыПодключения.Удалить(0); + + ПараметрыПодключения.Вставить(0, "@"); + + Если Не ПустаяСтрока(ПараметрыПодключения.Получить(ПараметрыПодключения.ВГраница())) Тогда + + ПараметрыПодключения.Добавить("@"); + + КонецЕсли; + + Результат.Путь = СтрСоединить(ПараметрыПодключения, "/"); + Результат.Путь = СтрЗаменить(Результат.Путь, "@", ""); + + Возврат Результат; +КонецФункции + +#КонецОбласти + +#Область COM + +// Основная функция для использования внешнего соединения при обмене. +// +// Параметры: +// СтруктураНастроек - структура настроек транспорта COM обмена. +// +// Возвращаемое значение: +// Структура: +// * Соединение - COMОбъект +// - Неопределено - указатель на COM-объект соединения или Неопределено в +// случае ошибки; +// * КраткоеОписаниеОшибки - Строка - краткое описание ошибки; +// * ПодробноеОписаниеОшибки - Строка - подробное описание ошибки; +// * ОшибкаПодключенияКомпоненты - Булево - флаг ошибки подключения COM. +// +Функция УстановитьВнешнееСоединениеСБазой(СтруктураНастроек) Экспорт + + Результат = ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой(СтруктураНастроек); + + ВнешнееСоединение = Результат.Соединение; + Если ВнешнееСоединение = Неопределено Тогда + // Ошибка установки соединения. + Возврат Результат; + КонецЕсли; + + // Для конфигураций с разными вариантами встроенного языка COM соединение не работает + + ВариантВстроенногоЯзыкаКорреспондента = ""; + ВариантыВстроенногоЯзыкаОтличаются = Ложь; + Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский + И ВнешнееСоединение.Метаданные.ВариантВстроенногоЯзыка <> ВнешнееСоединение.Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда + ВариантВстроенногоЯзыкаКорреспондента = НСтр("ru = 'Английский'"); + ВариантыВстроенногоЯзыкаОтличаются = Истина; + КонецЕсли; + + Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский + И ВнешнееСоединение.Метаданные.ВариантВстроенногоЯзыка <> ВнешнееСоединение.Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский Тогда + ВариантВстроенногоЯзыкаКорреспондента = НСтр("ru = 'Русский'"); + ВариантыВстроенногоЯзыкаОтличаются = Истина; + КонецЕсли; + + Если ВариантыВстроенногоЯзыкаОтличаются Тогда + + ПодробноеОписаниеОшибки = НСтр("ru = 'В подключаемой программе отличается вариант встроенного языка (%1). Подключение невозможно.'"); + ПодробноеОписаниеОшибки = СтрШаблон(ПодробноеОписаниеОшибки, ВариантВстроенногоЯзыкаКорреспондента); + + Результат.ПодробноеОписаниеОшибки = ПодробноеОписаниеОшибки; + Результат.КраткоеОписаниеОшибки = ПодробноеОписаниеОшибки; + Результат.Соединение = Неопределено; + + Возврат Результат; + + КонецЕсли; + + // Дополнительно проверяем возможность работы с внешней базой. + + Попытка + НетПолныхПрав = Не ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.РольДоступнаПолныеПрава(); + Исключение + НетПолныхПрав = Истина; + КонецПопытки; + + Если НетПолныхПрав Тогда + Результат.ПодробноеОписаниеОшибки = НСтр("ru = 'Пользователю, указанному для подключения к другой программе, должны быть назначены роли ""Администратор системы"" и ""Полные права""'"); + Результат.КраткоеОписаниеОшибки = Результат.ПодробноеОписаниеОшибки; + Результат.Соединение = Неопределено; + Иначе + Попытка + СостояниеНеДопустимо = ВнешнееСоединение.ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); + Исключение + СостояниеНеДопустимо = Ложь + КонецПопытки; + + Если СостояниеНеДопустимо Тогда + Результат.ПодробноеОписаниеОшибки = НСтр("ru = 'Другая программа находится в состоянии обновления.'"); + Результат.КраткоеОписаниеОшибки = Результат.ПодробноеОписаниеОшибки; + Результат.Соединение = Неопределено; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. +// Параметры: +// +// Возвращаемое значение: +// Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. +// +Функция НастройкиОбменаДляВнешнегоСоединения(УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции) Экспорт + + // Возвращаемое значение функции. + СтруктураНастроекОбмена = ОбменДаннымиСервер.СтруктураНастроекОбменаБазовая(); + + СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; + СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; + СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + + СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); + + СтруктураНастроекОбмена.УзелИнформационнойБазыКод = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена( + СтруктураНастроекОбмена.УзелИнформационнойБазы); + + СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; + + Если КоличествоЭлементовВТранзакции = Неопределено Тогда + КоличествоЭлементовВТранзакции = ОбменДаннымиСервер.КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); + КонецЕсли; + + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакции; + + // ВЫЧИСЛЯЕМЫЕ ЗНАЧЕНИЯ + СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); + СтруктураНастроекОбмена.ИмяПланаОбменаКорреспондента = + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + // Получаем ключ сообщения для ЖР. + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации( + СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); + + СтруктураНастроекОбмена.ИдентификаторТранспорта = "COM"; + + ОбменДаннымиСервер.УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); + + // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. + ОбменДаннымиСервер.ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); + + // Если настройки содержат ошибки, то выходим. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат СтруктураНастроекОбмена; + КонецЕсли; + + // Инициализируем обработку обмена данными. + ОбменДаннымиСервер.ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); + + Возврат СтруктураНастроекОбмена; + +КонецФункции + +// Возвращает массив номеров версий, поддерживаемых интерфейсом корреспондента для подсистемы ОбменДанными. +// +// Параметры: +// ВнешнееСоединение - COMОбъект - COM-соединение, которое используется для работы с корреспондентом. +// +// Возвращаемое значение: +// Массив из Строка - номера версий, поддерживаемых интерфейсом корреспондента. +// +Функция ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение) Экспорт + + Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение, "ОбменДанными"); + +КонецФункции + +#КонецОбласти + +// Выполняет проверку подключения обработки транспорта по заданным настройкам. +Процедура ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, + СтруктураНастроек, ВидТранспорта, СообщениеОбОшибке = "", НовыеПароли = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Корреспондент = Неопределено; + ЕстьКорреспондент = СтруктураНастроек.Свойство("Корреспондент", Корреспондент) + Или СтруктураНастроек.Свойство("КонечнаяТочкаКорреспондента", Корреспондент); + + СтрокаПараметров = "COMПарольПользователя, FTPСоединениеПароль, WSПароль, ПарольАрхиваСообщенияОбмена, + |FTPСоединениеПарольОбластейДанных, ПарольАрхиваСообщенияОбменаОбластейДанных"; + + Если ЕстьКорреспондент И НовыеПароли = Неопределено Тогда + Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, СтрокаПараметров, Истина); + КонецЕсли; + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + + Транспорт = Обработки.ТранспортСообщенийОбменаFILE.Создать(); + Транспорт.КаталогОбменаИнформацией = СтруктураНастроек.FILEКаталогОбменаИнформацией; + + ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + + Транспорт = Обработки.ТранспортСообщенийОбменаFTP.Создать(); + Транспорт.ПассивноеСоединение = СтруктураНастроек.FTPСоединениеПассивноеСоединение; + Транспорт.Пользователь = СтруктураНастроек.FTPСоединениеПользователь; + Транспорт.Порт = СтруктураНастроек.FTPСоединениеПорт; + Транспорт.Путь = СтруктураНастроек.FTPСоединениеПуть; + + Если СтруктураНастроек.Свойство("FTPСоединениеПароль") Тогда + Транспорт.Пароль = СтруктураНастроек.FTPСоединениеПароль; + ИначеЕсли НовыеПароли = Неопределено Тогда + Транспорт.Пароль = Пароли.FTPСоединениеПароль; + Иначе + Транспорт.Пароль = НовыеПароли.FTPСоединениеПароль; + КонецЕсли; + + КонецЕсли; + + Если Не Транспорт.ПодключениеУстановлено() Тогда + + Отказ = Истина; + + СообщениеОбОшибке = Транспорт.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + КонецЕсли; + +КонецПроцедуры + +Функция ЗначениеВJSON(Значение) Экспорт + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, Значение); + + Возврат ЗаписьJSON.Закрыть(); + +КонецФункции + +Функция JSONВЗначение(Строка, ПрочитатьВСоответствие = Истина, ИменаСвойствСоЗначениямиДата = Неопределено) Экспорт + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(Строка); + + Возврат ПрочитатьJSON(ЧтениеJSON, ПрочитатьВСоответствие, ИменаСвойствСоЗначениямиДата); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВсеТипыТранспорта() + + ТипыТранспорта = Новый Массив; + + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаSM); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаCOM); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаFILE); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаFTP); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаEMAIL); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаЯндексДиск); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаGoogleDrive); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаWS); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаHTTP); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаПассивныйРежим); + ТипыТранспорта.Добавить(Обработки.ТранспортСообщенийОбменаESB1C); + + ТранспортСообщенийОбменаПереопределяемый.ПриОпределенииТиповТранспорта(ТипыТранспорта); + + Возврат ТипыТранспорта; + +КонецФункции + +// Структура параметров транспорта. +// +// Возвращаемое значение: +// Структура - структура параметров транспорта: +// * Псевдоним - Строка - краткое представление транспорта +// * ИдентификаторТранспорта - Строка +// * Описание - Строка - подробное описание транспорта +// * ИмяФормыНастройки - Строка - имя формы, для настроенного транспорта +// * ИмяФормыПервойНастройки - Строка - имя формы, которая используется при первой настройке синхронизации. +// * ИмяФормыАутентификации - Строка - имя формы, которая используется при ввода данных аутентификации +// * РеквизитыДляБезопасногоХранилища - Массив из Строка - список реквизитов, +// которые помещаются в безопасное хранилище при сохранение настроек транспорта +// * ЗапускОбменаИзКорреспондента - Булево - признак того, что синхронизацию можно запустить в базе корреспонденте +// * ИспользоватьПрогресс - Булево - будет ли использован прогресс бар при выгрузке загрузке данных. +// Истина - для оффлайн обменов, Ложь для онлайн +// * СохранитьПараметрыПодключенияВФайл - Булево +// * РежимРаботыПриложения - Число - влияет только на картинку в списке формы НастройкиСинхронизацииДанных. +// Доступно 0 и 1. 0 - Обмен через обычные каналы связи (FILE, FTP и т.д.), 1 - с приложением в сервисе. +// * Картинка - Картинка - картинка, которая будет отображаться для транспорта в списках выбора +// * ПрямоеПодключение - Булево - Истина - с базой корреспондентом есть прямая связь (COM, WS, HTTP) +// * ПассивныйРежим - Булево - Истина Транспорт является "заглушкой", +// при использовании транспорта с этим параметром нельзя инициализировать синхронизацию данных. +// Используется в связке с WS и HTTP +// * НастройкаУзлаВКорреспонденте - Булево - +// Истина, если есть необходимость донастроить транспорт в базе корреспонденте при создании новой синхронизации. +// Ложь - Необходимости нет +// +Функция СтруктураПараметровТранспорта() Экспорт + + Параметры = Новый Структура; + + Параметры.Вставить("Псевдоним", ""); + Параметры.Вставить("ИдентификаторТранспорта", ""); + Параметры.Вставить("Описание", ""); + Параметры.Вставить("ИмяФормыНастройки", "ФормаНастройки"); + Параметры.Вставить("ИмяФормыПервойНастройки", "ФормаНастройки"); + Параметры.Вставить("ИмяФормыАутентификации", "ФормаАутентификации"); + Параметры.Вставить("РеквизитыДляБезопасногоХранилища", Новый Массив); + Параметры.Вставить("ЗапускОбменаИзКорреспондента", Истина); + Параметры.Вставить("ИспользоватьПрогресс", Истина); + Параметры.Вставить("СохранитьПараметрыПодключенияВФайл", Истина); + Параметры.Вставить("РежимРаботыПриложения", 0); + Параметры.Вставить("Картинка", БиблиотекаКартинок.ТранспортПередачаДанных); + + // Для онлайн обмена + Параметры.Вставить("ПрямоеПодключение", Ложь); + Параметры.Вставить("ПассивныйРежим", Ложь); + + Параметры.Вставить("НастройкаУзлаВКорреспонденте", Ложь); + + Возврат Параметры; + +КонецФункции + +Функция СтруктураРезультатаПолученияПараметровКорреспондента() Экспорт + + Результат = Новый Структура; + Результат.Вставить("ПодключениеУстановлено", Ложь); + Результат.Вставить("ПодключениеРазрешено", Ложь); + Результат.Вставить("ВерсииИнтерфейса", Неопределено); + Результат.Вставить("СообщениеОбОшибке", ""); + + Результат.Вставить("ПараметрыКорреспондентаПолучены", Ложь); + Результат.Вставить("ПараметрыКорреспондента", Неопределено); + Результат.Вставить("ИмяПланаОбменаКорреспондента", ""); + + // Контроль дублирования настроек синхронизации (синхронизация уже настроена) + Результат.Вставить("ЭтотУзелЕстьВКорреспонденте", Ложь); + Результат.Вставить("УзелКорреспондентаЕстьВЭтойБазе", Ложь); + Результат.Вставить("УзелДляУдаления", Неопределено); + + Возврат Результат; + +КонецФункции + +Функция МенеджерыТранспортаПоИдентификаторам() + + Менеджеры = Новый Соответствие; + + Для Каждого Транспорт Из ВсеТипыТранспорта() Цикл + + Параметры = Транспорт.ПараметрыТранспорта(); + + Если Менеджеры.Получить(Параметры.ИдентификаторТранспорта) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + Менеджеры.Вставить(Параметры.ИдентификаторТранспорта, Транспорт); + + КонецЦикла; + + Возврат Менеджеры; + +КонецФункции + +Функция ПрефиксДляРеквизитаИдентификатора() + + Возврат "Идентификатор_"; + +КонецФункции + +Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт + + Форма.Доступность = Пользователи.ЭтоПолноправныйПользователь(); + + ПараметрыФормы = Форма.Параметры; + Объект = Форма.Объект; + + Если ПараметрыФормы.Свойство("НастройкиТранспорта") + И ТипЗнч(ПараметрыФормы.НастройкиТранспорта) = Тип("Структура") Тогда + + НастройкиТранспорта = ПараметрыФормы.НастройкиТранспорта; + ЗаполнитьЗначенияСвойств(Объект, НастройкиТранспорта); + + Иначе + + НастройкиТранспорта = Новый Структура; + + КонецЕсли; + + ИмяОбработкиТранспорта = Форма.РеквизитФормыВЗначение("Объект").Метаданные().Имя; + ПараметрыТранспорта = Обработки[ИмяОбработкиТранспорта].ПараметрыТранспорта(); + + Если ЗначениеЗаполнено(ПараметрыТранспорта.Псевдоним) Тогда + Форма.Автозаголовок = Ложь; + Форма.Заголовок = ПараметрыТранспорта.Псевдоним; + КонецЕсли; + + Префикс = ПрефиксДляРеквизитаИдентификатора(); + ДобавляемыеРеквизиты = Новый Массив; + + Для Каждого Реквизит Из ПараметрыТранспорта.РеквизитыДляБезопасногоХранилища Цикл + + НовыйРеквизит = Новый РеквизитФормы(Префикс + Реквизит, + Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(36))); + ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + + КонецЦикла; + + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + Для Каждого Реквизит Из ПараметрыТранспорта.РеквизитыДляБезопасногоХранилища Цикл + + Если НастройкиТранспорта.Свойство(Реквизит) Тогда + Форма[Префикс + Реквизит] = НастройкиТранспорта[Реквизит]; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(Форма, Объект) Экспорт + + ОбъектФормы = Форма.Объект; + ИмяОбработкиТранспорта = Объект.Метаданные().Имя; + ПараметрыТранспорта = Обработки[ИмяОбработкиТранспорта].ПараметрыТранспорта(); + + Префикс = ПрефиксДляРеквизитаИдентификатора(); + + УстановитьПривилегированныйРежим(Истина); + + Для Каждого Реквизит Из ПараметрыТранспорта.РеквизитыДляБезопасногоХранилища Цикл + + Если ОбъектФормы[Реквизит] = Форма[Префикс + Реквизит] + И ЗначениеЗаполнено(Форма[Префикс + Реквизит]) Тогда + Объект[Реквизит] = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Форма[Префикс + Реквизит]); + КонецЕсли; + + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Процедура ЗаполнитьНастройкиИзБезопасногоХранилища(Объект) Экспорт + + ИмяОбработкиТранспорта = Объект.Метаданные().Имя; + ПараметрыТранспорта = Обработки[ИмяОбработкиТранспорта].ПараметрыТранспорта(); + + УстановитьПривилегированныйРежим(Истина); + + Для Каждого Реквизит Из ПараметрыТранспорта.РеквизитыДляБезопасногоХранилища Цикл + + Если ЗначениеЗаполнено(Объект[Реквизит]) Тогда + Объект[Реквизит] = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект[Реквизит]); + КонецЕсли; + + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Функция РезультатЗакрытияФормыТранспорта(Форма) Экспорт + + Результат = Новый Структура; + + Объект = Форма.Объект; + + МетаданныеОбработки = Форма.РеквизитФормыВЗначение("Объект").Метаданные(); + ИмяОбработкиТранспорта = МетаданныеОбработки.Имя; + ПараметрыТранспорта = Обработки[ИмяОбработкиТранспорта].ПараметрыТранспорта(); + + Префикс = ПрефиксДляРеквизитаИдентификатора(); + + УстановитьПривилегированныйРежим(Истина); + + Для Каждого Реквизит Из ПараметрыТранспорта.РеквизитыДляБезопасногоХранилища Цикл + + Значение = Объект[Реквизит]; + ЗначениеИдентификатор = Форма[Префикс + Реквизит]; + + Если НЕ Значение = ЗначениеИдентификатор Тогда + + Если ЗначениеЗаполнено(Значение) Тогда + // Сохраним/обновим пароль. + Если НЕ ЗначениеЗаполнено(ЗначениеИдентификатор) Тогда + ЗначениеИдентификатор = Строка(Новый УникальныйИдентификатор); + КонецЕсли; + + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ЗначениеИдентификатор, Значение); + Объект[Реквизит] = ЗначениеИдентификатор; + + ИначеЕсли ЗначениеЗаполнено(ЗначениеИдентификатор) Тогда + + // Удалим пароль из безопасного хранилища. + ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(ЗначениеИдентификатор); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого Реквизит Из МетаданныеОбработки.Реквизиты Цикл + Результат.Вставить(Реквизит.Имя, Объект[Реквизит.Имя]); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ИнформацияОбОшибкеВСообщения(Транспорт, ИнформацияОбОшибке, ДополнитьСообщениеОбОшибке = Ложь) Экспорт + + КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + + Если ДополнитьСообщениеОбОшибке Тогда + + Транспорт.СообщениеОбОшибке = Транспорт.СообщениеОбОшибке + Символы.ПС + КраткоеПредставлениеОшибки; + Транспорт.СообщениеОбОшибкеЖР = Транспорт.СообщениеОбОшибкеЖР + Символы.ПС + ПодробноеПредставлениеОшибки; + + Иначе + + Транспорт.СообщениеОбОшибке = КраткоеПредставлениеОшибки; + Транспорт.СообщениеОбОшибкеЖР = ПодробноеПредставлениеОшибки; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьСообщениеВЖурналРегистрации(Транспорт, ДействиеПриОбмене = Неопределено, СообщениеОбОшибке = "", ЭтоОшибка = Истина) Экспорт + + Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + ИначеЕсли ЗначениеЗаполнено(Транспорт.СообщениеОбОшибкеЖР) Тогда + СообщениеОбОшибкеЖР = Транспорт.СообщениеОбОшибкеЖР; + ИначеЕсли ЗначениеЗаполнено(Транспорт.СообщениеОбОшибке) Тогда + СообщениеОбОшибкеЖР = Транспорт.СообщениеОбОшибке; + Иначе + СообщениеОбОшибкеЖР = НСтр("ru = 'Внутренняя ошибка'"); + КонецЕсли; + + ИмяТранспорта = НСтр("ru = 'Обработка: %1'"); + ИмяТранспорта = СтрШаблон(ИмяТранспорта, Транспорт.Метаданные().Имя); + + СообщениеОбОшибкеЖР = ИмяТранспорта + Символы.ПС + СообщениеОбОшибкеЖР; + + Если ТипЗнч(ДействиеПриОбмене) = Тип("Строка") Тогда + ДействиеПриОбмене = Перечисления.ДействияПриОбмене[ДействиеПриОбмене]; + КонецЕсли; + + Корреспондент = Транспорт.Корреспондент; + + Если Не ЗначениеЗаполнено(ДействиеПриОбмене) Или Не ЗначениеЗаполнено(Корреспондент) Тогда + КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Транспорт сообщений обмена'"); + Иначе + КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.КлючСообщенияЖурналаРегистрации( + Транспорт.Корреспондент, ДействиеПриОбмене); + КонецЕсли; + + Уровень = ?(ЭтоОшибка, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация); + + Если ЗначениеЗаполнено(Корреспондент) Тогда + + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, + Уровень, + Корреспондент.Метаданные(), + Корреспондент, + СообщениеОбОшибкеЖР); + + Иначе + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, Уровень,,, СообщениеОбОшибкеЖР); + КонецЕсли; + +КонецПроцедуры + +Функция ТребуетсяАутентификация(ПараметрыАутентификации, ИмяФормы = "") Экспорт + + Если Не ЗначениеЗаполнено(ПараметрыАутентификации.ИдентификаторТранспорта) Тогда + Возврат Ложь; + КонецЕсли; + + ПрямоеПодключение = ПараметрТранспорта(ПараметрыАутентификации.ИдентификаторТранспорта, "ПрямоеПодключение"); + + Если Не ПрямоеПодключение Тогда + Возврат Ложь; + КонецЕсли; + + ПарольСинхронизацииДанныхЗадан = ПарольСинхронизацииДанныхЗадан(ПараметрыАутентификации.Корреспондент); + + Если ПарольСинхронизацииДанныхЗадан Тогда + Возврат Ложь; + КонецЕсли; + + Транспорт = Инициализация(ПараметрыАутентификации); + + ИмяОбработки = Транспорт.Метаданные().ПолноеИмя(); + ИмяФормыАутентификации = ПараметрТранспорта(ПараметрыАутентификации.ИдентификаторТранспорта, "ИмяФормыАутентификации"); + ИмяФормы = ИмяОбработки + ".Форма." + ИмяФормыАутентификации; + + Возврат Транспорт.ТребуетсяАутентификация(); + +КонецФункции + +Функция ВременныйКаталогСообщенийОбмена(Транспорт) + + ИмяВременногоКаталога = ""; + + ИдентификаторКаталога = Транспорт.ИдентификаторКаталога; + + // Создаем временный каталог для сообщений обмена. + Попытка + + ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(ИдентификаторКаталога); + + Исключение + + Транспорт.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьСообщениеВЖурналРегистрации(Транспорт); + + Возврат ИмяВременногоКаталога; + + КонецПопытки; + + Возврат ИмяВременногоКаталога; + +КонецФункции + +Процедура ЗаполнитьИменаСообщенийПоУмолчанию(Транспорт) + + // Шаблоны для получения + Шаблоны = Новый Массив; + Корреспондент = Транспорт.Корреспондент; + + ЭтотУзел = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(Транспорт.ИмяПланаОбмена); + Транслитерация = Транспорт.Метаданные().Реквизиты.Найти("Транслитерация") <> Неопределено + И Транспорт.Транслитерация; + + ПервыйШаблон = ШаблонИмениФайлаСообщения(ЭтотУзел, Корреспондент, Ложь, Транслитерация); + ПервыйШаблон = СтрЗаменить(ПервыйШаблон, "Message", "Message*") + ".*"; + + Шаблоны.Добавить(ПервыйШаблон); + + ВторойШаблон = ШаблонИмениФайлаСообщения(ЭтотУзел, Корреспондент, Ложь, Транслитерация, Истина); + ВторойШаблон = СтрЗаменить(ВторойШаблон, "Message", "Message*") + ".*"; + + Если ПервыйШаблон <> ВторойШаблон Тогда + Шаблоны.Добавить(ВторойШаблон); + КонецЕсли; + + Транспорт.ШаблоныИменДляПолученияСообщения = Шаблоны; + + // Имя сообщения для отправки + Транспорт.ИмяСообщенияДляОтправки = ШаблонИмениФайлаСообщения(ЭтотУзел, Корреспондент, Истина, Транслитерация) + ".xml"; + +КонецПроцедуры + +Функция ШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение, + Транслитерация = Ложь, ИспользоватьВиртуальныйКодУзлаПриПолучении = Ложь) + + Если ЭтоИсходящееСообщение Тогда + КодОтправителя = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); + КодПолучателя = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(УзелИнформационнойБазы); + Иначе + КодОтправителя = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(УзелИнформационнойБазы); + КодПолучателя = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(УзелИнформационнойБазы); + КонецЕсли; + + Если ЭтоИсходящееСообщение Или ИспользоватьВиртуальныйКодУзлаПриПолучении Тогда + // Обмен с корреспондентом, который не знаком с новым кодом предопределенного узла - + // при формировании имени файла сообщения обмена вместо кода предопределенного узла используется код из регистра. + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(УзелИнформационнойБазы); + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + Если ЭтоИсходящееСообщение Тогда + КодОтправителя = ПсевдонимПредопределенногоУзла; + Иначе + КодПолучателя = ПсевдонимПредопределенногоУзла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ИмяФайлаСообщения = ИмяФайлаСообщенияОбмена(КодОтправителя, КодПолучателя, ЭтоИсходящееСообщение); + + // Учитываем настройку транслитерации для узла плана обмена. + Если Транслитерация Тогда + ИмяФайлаСообщения = СтроковыеФункции.СтрокаЛатиницей(ИмяФайлаСообщения); + КонецЕсли; + + Возврат ИмяФайлаСообщения; + +КонецФункции + +// Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя. +// +Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя, ЭтоИсходящееСообщение) + + ШаблонИмени = "[Префикс]_[УзелОтправитель]_[УзелПолучатель]"; + Если СтрДлина(КодУзлаОтправителя) = 36 И ЭтоИсходящееСообщение Тогда + ПрефиксИБИсточника = Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Получить(); + Если ЗначениеЗаполнено(ПрефиксИБИсточника) Тогда + ШаблонИмени = "[Префикс]_[ПрефиксИБИсточника]_[УзелОтправитель]_[УзелПолучатель]"; + КонецЕсли; + КонецЕсли; + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[Префикс]", "Message"); + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[ПрефиксИБИсточника]",ПрефиксИБИсточника); + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелОтправитель]", КодУзлаОтправителя); + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелПолучатель]", КодУзлаПолучателя); + + Возврат ШаблонИмени; +КонецФункции + +Функция ЗапаковатьСообщениеОбменаВZipФайл(Транспорт, Пароль) Экспорт + + Результат = Истина; + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + Транспорт.ВременныйКаталог, Транспорт.ИмяСообщенияДляОтправки); + + // Получаем имя для временного файла архива. + Файл = Новый Файл(ИмяФайла); + ИмяФайлаБезРасширения = Файл.ИмяБезРасширения; + + ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + Транспорт.ВременныйКаталог, ИмяФайлаБезРасширения + ".zip"); + + Если ИмяФайла <> Транспорт.СообщениеОбмена Тогда + ПереместитьФайл(Транспорт.СообщениеОбмена, ИмяФайла); + Транспорт.СообщениеОбмена = ИмяФайла; + КонецЕсли; + + Попытка + + Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, Пароль, НСтр("ru = 'Файл сообщения обмена'")); + Архиватор.Добавить(Транспорт.СообщениеОбмена); + Архиватор.Записать(); + + Транспорт.СообщениеОбмена = ИмяВременногоФайлаАрхива; + + Исключение + + Результат = Ложь; + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при сжатии файла сообщения обмена. + |%1'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписатьСообщениеВЖурналРегистрации(Транспорт, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + КонецПопытки; + + Архиватор = Неопределено; + + Возврат Результат; + +КонецФункции + +Функция РаспаковатьСообщениеОбменаИзZipФайла(Транспорт, ИмяФайлаАрхива, Пароль) Экспорт + + Результат = Истина; + + Архив = Новый ЧтениеZipФайла(ИмяФайлаАрхива, Пароль); + ФайлВАрхиве = Архив[0]; + + Попытка + + Архив.Извлечь(ФайлВАрхиве, Транспорт.ВременныйКаталог); + + Транспорт.СообщениеОбмена = + ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(Транспорт.ВременныйКаталог, ФайлВАрхиве.Имя); + + Исключение + + Результат = Ложь; + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при распаковке сжатого файла сообщения. + |%1'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + Транспорт.СообщениеОбОшибке = СообщениеОбОшибке; + + ЗаписатьСообщениеВЖурналРегистрации(Транспорт, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + КонецПопытки; + + Возврат Результат + +КонецФункции + +Функция НастройкиПодключенияВXML_1_2(НастройкиПодключения) Экспорт + + ИдентификаторТранспорта = НастройкиПодключения.ИдентификаторТранспорта; + + РеквизитыУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + НастройкиПодключения.УзелИнформационнойБазы, "Код,НомерПринятого,НомерОтправленного"); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыНастройки"); // @Non-NLS + ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", ВерсияФорматаНастроекОбменаДаннымиXML()); // @Non-NLS + + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); + + // Параметры подключения + ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); // @Non-NLS + + ИмяПланаОбмена = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(НастройкиПодключения.ИмяПланаОбмена, "ru"); + + ДобавитьЗаписьXML(ЗаписьXML, ИмяПланаОбмена, "ИмяПланаОбмена"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеВторойБазы"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.КодУзла, "КодНовогоУзлаВторойБазы"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); // @Non-NLS + + // Настройки транспорта сообщений обмена + ЗаписьXML.ЗаписатьНачалоЭлемента("ВидТранспортаСообщенийОбмена"); // @Non-NLS + ЗаписьXML.ЗаписатьАтрибут("xmlns", ""); + ЗаписьXML.ЗаписатьАтрибут("xsi:type", "EnumRef.ВидыТранспортаСообщенийОбмена"); // @Non-NLS-2 + ЗаписьXML.ЗаписатьТекст(?(ИдентификаторТранспорта = "WS", "", ИдентификаторТранспорта)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + НастройкиТранспорта = НастройкиПодключения.НастройкиТранспорта; + + Если ИдентификаторТранспорта = "FILE" Тогда + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + + ДобавитьЗаписьXML(ЗаписьXML, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.Транслитерация, "ТранслитерацияИмениФайловСообщенийОбмена"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.КаталогОбменаИнформацией, "FILEКаталогОбменаИнформацией"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.СжиматьФайлИсходящегоСообщения, "FILEСжиматьФайлИсходящегоСообщения"); // @Non-NLS + + ИначеЕсли ИдентификаторТранспорта = "COM" Тогда + + ДобавитьЗаписьXML(ЗаписьXML, "", "ПарольАрхиваСообщенияОбмена"); // @Non-NLS-2 + ДобавитьЗаписьXML(ЗаписьXML, Ложь, "ТранслитерацияИмениФайловСообщенийОбмена"); // @Non-NLS + + ПараметрыПодключенияИБ = ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы( + СтрокаСоединенияИнформационнойБазы()); + + ВариантРаботыИнформационнойБазы = ПараметрыПодключенияИБ.ВариантРаботыИнформационнойБазы; + ИмяИнформационнойБазыНаСервере1СПредприятия = ПараметрыПодключенияИБ.ИмяИнформационнойБазыНаСервере1СПредприятия; + ИмяСервера1СПредприятия = ПараметрыПодключенияИБ.ИмяСервера1СПредприятия; + КаталогИнформационнойБазы = ПараметрыПодключенияИБ.КаталогИнформационнойБазы; + + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + АутентификацияОС = ПользовательИБ.АутентификацияОС; + ИмяПользователя = ПользовательИБ.Имя; + + ДобавитьЗаписьXML(ЗаписьXML, ВариантРаботыИнформационнойБазы, "COMВариантРаботыИнформационнойБазы"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, ИмяИнформационнойБазыНаСервере1СПредприятия, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, ИмяСервера1СПредприятия, "COMИмяСервера1СПредприятия"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, КаталогИнформационнойБазы, "COMКаталогИнформационнойБазы"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, АутентификацияОС, "COMАутентификацияОперационнойСистемы"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, ИмяПользователя, "COMИмяПользователя"); // @Non-NLS + + ИначеЕсли ИдентификаторТранспорта = "FTP" Тогда + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.Пароль); + + ДобавитьЗаписьXML(ЗаписьXML, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена"); // @Non-NLS // + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.Транслитерация, "ТранслитерацияИмениФайловСообщенийОбмена"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.СжиматьФайлИсходящегоСообщения, "FTPСжиматьФайлИсходящегоСообщения"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.МаксимальныйДопустимыйРазмерСообщения, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, Пароль, "FTPСоединениеПароль"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.ПассивноеСоединение, "FTPСоединениеПассивноеСоединение"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.Пользователь, "FTPСоединениеПользователь"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.Порт, "FTPСоединениеПорт"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.Путь, "FTPСоединениеПуть"); // @Non-NLS + + ИначеЕсли ИдентификаторТранспорта = "WS" Тогда + + // Действий не требуется + + ИначеЕсли ИдентификаторТранспорта = "EMAIL" Тогда + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + + ДобавитьЗаписьXML(ЗаписьXML, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.Транслитерация, "ТранслитерацияИмениФайловСообщенийОбмена"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.МаксимальныйДопустимыйРазмерСообщения, "EMAILМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, НастройкиТранспорта.СжиматьФайлИсходящегоСообщения, "EMAILСжиматьФайлИсходящегоСообщения"); // @Non-NLS + + // Учтеная запись + ЗаписьXML.ЗаписатьНачалоЭлемента("EMAILУчетнаяЗапись"); // @Non-NLS + ЗаписьXML.ЗаписатьАтрибут("xmlns", ""); + ЗаписьXML.ЗаписатьАтрибут("xsi:type", "CatalogRef.УчетныеЗаписиЭлектроннойПочты"); // @Non-NLS-2 + ЗаписьXML.ЗаписатьТекст(Строка(НастройкиТранспорта.УчетнаяЗапись.УникальныйИдентификатор())); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + КонецЕсли; + + ДобавитьЗаписьXML(ЗаписьXML, ИдентификаторТранспорта = "EMAIL", "ИспользоватьПараметрыТранспортаEMAIL"); // @Non-NLS-2 + ДобавитьЗаписьXML(ЗаписьXML, ИдентификаторТранспорта = "FILE", "ИспользоватьПараметрыТранспортаFILE"); // @Non-NLS-2 + ДобавитьЗаписьXML(ЗаписьXML, ИдентификаторТранспорта = "FTP", "ИспользоватьПараметрыТранспортаFTP"); // @Non-NLS-2 + + // Поддержка файла настроек обмена формата версии 1.0. + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена"); // @Non-NLS + + ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.КодУзла, "КодНовогоУзла"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, РеквизитыУзла.Код, "КодПредопределенногоУзла"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, РеквизитыУзла.НомерОтправленного, "НомерОтправленного"); // @Non-NLS + ДобавитьЗаписьXML(ЗаписьXML, РеквизитыУзла.НомерПринятого, "НомерПринятого"); // @Non-NLS + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ОсновныеПараметрыОбмена + + Если ИдентификаторТранспорта = "EMAIL" Тогда + + // УчетнаяЗаписьЭлектроннойПочты + УчетнаяЗапись = Неопределено; + Если ЗначениеЗаполнено(НастройкиТранспорта.УчетнаяЗапись) Тогда + УчетнаяЗапись = НастройкиТранспорта.УчетнаяЗапись.ПолучитьОбъект(); + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента("УчетнаяЗаписьЭлектроннойПочты"); // @Non-NLS + ЗаписатьXML(ЗаписьXML, УчетнаяЗапись); + ЗаписьXML.ЗаписатьКонецЭлемента(); + // УчетнаяЗаписьЭлектроннойПочты + + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, НастройкиПодключения.ИмяПланаОбмена); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыНастройки + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +Функция НастройкиПодключенияИзXML_1_2(ТекстXML, ИдентификаторТранспорта) Экспорт + + Настройки = Новый Структура; + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстXML); + + Фабрика = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + Если Фабрика.Свойства().Получить("ОсновныеПараметрыОбмена") <> Неопределено Тогда // @Non-NLS + + ОсновныеПараметры = Новый Структура; + ОсновныеПараметрыXDTO = Фабрика["ОсновныеПараметрыОбмена"]; // @Non-NLS + Для Каждого Свойство Из ОсновныеПараметрыXDTO.Свойства() Цикл + ОсновныеПараметры.Вставить(Свойство.Имя, ОсновныеПараметрыXDTO[Свойство.Имя]); + КонецЦикла; + + Настройки.Вставить("ИмяПланаОбмена", ОсновныеПараметры["ИмяПланаОбмена"]); // @Non-NLS-2 + Настройки.Вставить("НаименованиеВторойБазы", ОсновныеПараметры["НаименованиеВторойБазы"]); // @Non-NLS-2 + Настройки.Вставить("НаименованиеЭтойБазы", ОсновныеПараметры["НаименованиеЭтойБазы"]); // @Non-NLS-2 + Настройки.Вставить("КодНовогоУзлаВторойБазы", ОсновныеПараметры["КодНовогоУзлаВторойБазы"]); // @Non-NLS-2 + Настройки.Вставить("ПрефиксИнформационнойБазыИсточника", ОсновныеПараметры["ПрефиксИнформационнойБазыИсточника"]); // @Non-NLS-2 + + Настройки.Вставить("НаименованиеНастройкиВыполненияОбмена", ОсновныеПараметры["НаименованиеНастройкиВыполненияОбмена"]); // @Non-NLS-2 + Настройки.Вставить("КодНовогоУзла", ОсновныеПараметры["КодНовогоУзла"]); // @Non-NLS-2 + Настройки.Вставить("КодПредопределенногоУзла", ОсновныеПараметры["КодПредопределенногоУзла"]); // @Non-NLS-2 + Настройки.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + + СкопироватьЗначениеСтруктуры(ОсновныеПараметры, "НомерОтправленного", Настройки, "НомерОтправленного"); // @Non-NLS-1 + СкопироватьЗначениеСтруктуры(ОсновныеПараметры, "НомерПринятого", Настройки, "НомерПринятого"); // @Non-NLS-1 + + НастройкиТранспорта = Новый Структура; + + Если ИдентификаторТранспорта = "FILE" Тогда + + НастройкиТранспорта.Вставить("КаталогОбменаИнформацией", ОсновныеПараметры["FILEКаталогОбменаИнформацией"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", ОсновныеПараметры["FILEСжиматьФайлИсходящегоСообщения"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", ОсновныеПараметры["ПарольАрхиваСообщенияОбмена"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("Транслитерация", Ложь); + + ИначеЕсли ИдентификаторТранспорта = "FTP" Тогда + + НастройкиТранспорта.Вставить("МаксимальныйДопустимыйРазмерСообщения", ОсновныеПараметры["FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("Пароль", ОсновныеПараметры["FTPСоединениеПароль"]); + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", ОсновныеПараметры["ПарольАрхиваСообщенияОбмена"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ПассивноеСоединение", ОсновныеПараметры["FTPСоединениеПассивноеСоединение"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("Пользователь", ОсновныеПараметры["FTPСоединениеПользователь"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("Порт", ОсновныеПараметры["FTPСоединениеПорт"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("Путь", ОсновныеПараметры["FTPСоединениеПуть"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", ОсновныеПараметры["FTPСжиматьФайлИсходящегоСообщения"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("Транслитерация", Ложь); + + ИначеЕсли ИдентификаторТранспорта = "EMAIL" Тогда + + НастройкиТранспорта.Вставить("МаксимальныйДопустимыйРазмерСообщения", ОсновныеПараметры["EMAILМаксимальныйДопустимыйРазмерСообщения"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", ОсновныеПараметры["EMAILСжиматьФайлИсходящегоСообщения"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", ОсновныеПараметры["ПарольАрхиваСообщенияОбмена"]); // @Non-NLS-2 + + ИначеЕсли ИдентификаторТранспорта = "COM" Тогда + + НастройкиТранспорта.Вставить("ВариантРаботыИнформационнойБазы", ОсновныеПараметры["COMВариантРаботыИнформационнойБазы"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ИмяИнформационнойБазыНаСервере1СПредприятия", ОсновныеПараметры["COMИмяИнформационнойБазыНаСервере1СПредприятия"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ИмяСервера1СПредприятия", ОсновныеПараметры["COMИмяСервера1СПредприятия"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("КаталогИнформационнойБазы", ОсновныеПараметры["COMКаталогИнформационнойБазы"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("АутентификацияОперационнойСистемы", ОсновныеПараметры["COMАутентификацияОперационнойСистемы"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ИмяПользователя", ОсновныеПараметры["COMИмяПользователя"]); // @Non-NLS-2 + НастройкиТранспорта.Вставить("ПарольПользователя"); + НастройкиТранспорта.Вставить("ПродолжениеНастройки", Истина); + + ИначеЕсли ИдентификаторТранспорта = "WS" Тогда + + Настройки.Вставить("ИдентификаторТранспорта", "ПассивныйРежим"); + + КонецЕсли; + + КонецЕсли; + + Если Фабрика.Свойства().Получить("ПараметрыОбменаXDTO") <> Неопределено Тогда + + ПараметрыОбмена = Новый Структура; + ПараметрыОбменаXDTO = Фабрика["ПараметрыОбменаXDTO"]; + Для Каждого Свойство Из ПараметрыОбменаXDTO.Свойства() Цикл + ПараметрыОбмена.Вставить(Свойство.Имя, ПараметрыОбменаXDTO[Свойство.Имя]); + КонецЦикла; + + Настройки.Вставить("ФорматОбмена", ПараметрыОбменаXDTO["ФорматОбмена"]); // @Non-NLS-2 + + КонецЕсли; + + Если Фабрика.Свойства().Получить("УчетнаяЗаписьЭлектроннойПочты") <> Неопределено Тогда // @Non-NLS + + СтандартныеРеквизиты = Новый Структура; + СтандартныеРеквизиты.Вставить("Description","Наименование"); + СтандартныеРеквизиты.Вставить("PredefinedDataName","ИмяПредопределенныхДанных"); + + СтруктураУчетнойЗаписи = Новый Структура; + + ИмяСвойства = Фабрика["УчетнаяЗаписьЭлектроннойПочты"].Свойства()[0].Имя; // @Non-NLS + УчетнаяЗаписьXDTO = Фабрика["УчетнаяЗаписьЭлектроннойПочты"][ИмяСвойства]; // @Non-NLS + + Словарь = СловарьДляУчетнойЗаписи("en"); + + Для Каждого Свойство Из УчетнаяЗаписьXDTO.Свойства() Цикл + + Ключ = Свойство.Имя; + + Если СтандартныеРеквизиты.Свойство(Ключ) Тогда + Ключ = СтандартныеРеквизиты[Ключ]; + КонецЕсли; + + Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский Тогда + Если Словарь.Получить(Ключ) <> Неопределено Тогда + Ключ = Словарь.Получить(Ключ); + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + СтруктураУчетнойЗаписи.Вставить(Ключ, УчетнаяЗаписьXDTO[Свойство.Имя]); + + КонецЦикла; + + ИмяСправочника = "УчетныеЗаписиЭлектроннойПочты"; + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник." + ИмяСправочника); + УчетнаяЗаписьЭлектроннойПочты = Менеджер.СоздатьЭлемент(); + УчетнаяЗаписьЭлектроннойПочты.Наименование = СтруктураУчетнойЗаписи.Наименование; + Если СтруктураУчетнойЗаписи.Свойство("ИмяПредопределенныхДанных") Тогда + УчетнаяЗаписьЭлектроннойПочты.ИмяПредопределенныхДанных = СтруктураУчетнойЗаписи.ИмяПредопределенныхДанных; + КонецЕсли; + + Для Каждого Реквизит Из Метаданные.Справочники[ИмяСправочника].Реквизиты Цикл + + Если Не СтруктураУчетнойЗаписи.Свойство(Реквизит.Имя) Тогда + Продолжить; + КонецЕсли; + + УчетнаяЗаписьЭлектроннойПочты[Реквизит.Имя] = СтруктураУчетнойЗаписи[Реквизит.Имя]; + + КонецЦикла; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + + УчетнаяЗаписьЭтойБазы = МодульРаботаСПочтовымиСообщениямиСлужебный.УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента( + УчетнаяЗаписьЭлектроннойПочты); + + НастройкиТранспорта.Вставить("УчетнаяЗапись", УчетнаяЗаписьЭтойБазы.Ссылка); + + КонецЕсли; + + КонецЕсли; + + Настройки.Вставить("НастройкиТранспорта", НастройкиТранспорта); + + Возврат Настройки; + +КонецФункции + +Функция СловарьДляУчетнойЗаписи(НаправлениеПеревода = "en") + + Словарь = Новый Соответствие; + + Словарь.Вставить("АдресЭлектроннойПочты", "Email"); + Словарь.Вставить("ВремяОжидания", "Timeout"); + Словарь.Вставить("ИмяПользователя", "UserName"); + Словарь.Вставить("ИспользоватьДляОтправки", "UseForSending"); + Словарь.Вставить("ИспользоватьДляПолучения", "UseForReceiving"); + Словарь.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", "UseSecureConnectionForIncomingMail"); + Словарь.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", "UseSecureConnectionForOutgoingMail"); + Словарь.Вставить("ОставлятьКопииСообщенийНаСервере", "KeepMessageCopiesAtServer"); + Словарь.Вставить("ПериодХраненияСообщенийНаСервере", "KeepMailAtServerPeriod"); + Словарь.Вставить("Пользователь", "User"); + Словарь.Вставить("ПользовательSMTP", "SMTPUser"); + Словарь.Вставить("ПортСервераВходящейПочты", "IncomingMailServerPort"); + Словарь.Вставить("ПортСервераИсходящейПочты", "OutgoingMailServerPort"); + Словарь.Вставить("ПротоколВходящейПочты", "ProtocolForIncomingMail"); + Словарь.Вставить("СерверВходящейПочты", "IncomingMailServer"); + Словарь.Вставить("СерверИсходящейПочты", "OutgoingMailServer"); + Словарь.Вставить("ТребуетсяВходНаСерверПередОтправкой", "SignInBeforeSendingRequired"); + Словарь.Вставить("ОтправлятьСкрытыеКопииПисемНаЭтотАдрес", "SendBCCToThisAddress"); + Словарь.Вставить("ВладелецУчетнойЗаписи", "AccountOwner"); + Словарь.Вставить("ПриОтправкеПисемТребуетсяАвторизация", "AuthorizationRequiredOnSendEmails"); + Словарь.Вставить("АвторизацияСПомощьюПочтовогоСервиса", "EmailServiceAuthorization"); + Словарь.Вставить("ИмяПочтовогоСервиса", "EmailServiceName"); + + Если НаправлениеПеревода = "en" Тогда + + Возврат Словарь; + + ИначеЕсли НаправлениеПеревода = "ru" Тогда + + НовыйСловарь = Новый Соответствие; + Для Каждого КлючИЗначение Из Словарь Цикл + НовыйСловарь.Вставить(КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + + Возврат НовыйСловарь; + + КонецЕсли; + +КонецФункции + +Функция НастройкиПодключенияВJSONОбщее(НастройкиПодключения) + + Результат = Новый Структура; + + // Основыне параметры обмена + ОсновныеПараметры = Новый Структура; + + РеквизитыУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + НастройкиПодключения.УзелИнформационнойБазы, "Код,НомерПринятого,НомерОтправленного"); + + ИмяПланаОбмена = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(НастройкиПодключения.ИмяПланаОбмена, "en"); + ИмяПланаОбменаКорреспондента = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя( + НастройкиПодключения.ИмяПланаОбменаКорреспондента, "en"); + + ОсновныеПараметры.Вставить("FormatVersion", ВерсияФорматаНастроекОбменаДаннымиJSON()); + ОсновныеПараметры.Вставить("SourceInfobasePrefix", НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); + ОсновныеПараметры.Вставить("DestinationInfobasePrefix", НастройкиПодключения.ПрефиксИнформационнойБазыПриемника); + ОсновныеПараметры.Вставить("NodeCode", НастройкиПодключения.КодУзла); + ОсновныеПараметры.Вставить("CorrespondentNodeCode", НастройкиПодключения.КодУзлаКорреспондента); + ОсновныеПараметры.Вставить("ExchangePlanName", ИмяПланаОбмена); + ОсновныеПараметры.Вставить("CorrespondentExchangePlanName", ИмяПланаОбменаКорреспондента); + ОсновныеПараметры.Вставить("ThisInfobaseDescription", НастройкиПодключения.НаименованиеЭтойБазы); + ОсновныеПараметры.Вставить("SecondInfobaseDescription", НастройкиПодключения.НаименованиеВторойБазы); + ОсновныеПараметры.Вставить("ExchangeSetupOption", НастройкиПодключения.ВариантНастройкиОбмена); + ОсновныеПараметры.Вставить("TransportID", НастройкиПодключения.ИдентификаторТранспорта); + ОсновныеПараметры.Вставить("SentNo", РеквизитыУзла.НомерОтправленного); + ОсновныеПараметры.Вставить("ReceivedNo", РеквизитыУзла.НомерПринятого); + + Результат.Вставить("MainExchangeParameters", ОсновныеПараметры); + + // ПараметрыОбменаXDTO + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + + ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(НастройкиПодключения.ИмяПланаОбмена, "ВерсииФорматаОбмена"); + ВерсииФорматаОбмена = ОбщегоНазначения.ВыгрузитьКолонку(ВерсииФорматаОбмена, "Ключ", Истина); + + ОсновныеПараметры.Вставить("ExchangeFormatVersions", ВерсииФорматаОбмена); + + ПараметрыОбменаXDTO = Новый Структура; + ПараметрыОбменаXDTO.Вставить("ExchangeFormat", НастройкиПодключения.ФорматОбмена); + + Результат.Вставить("XDTOExchangeParameters", ПараметрыОбменаXDTO); + + Если НастройкиПодключения.ПоддерживаемыеОбъектыФормата <> Неопределено Тогда + + Массив = МассивИзТаблицы_ПоддерживаемыеОбъектыФормата( + НастройкиПодключения.ПоддерживаемыеОбъектыФормата.Получить(), + ВерсииФорматаОбмена); + + Результат.Вставить("SupportedObjectsInFormat", Массив); + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция МассивИзТаблицы_ПоддерживаемыеОбъектыФормата(Таблица, ВерсииФорматаОбмена) Экспорт + + ТаблицаОбъектов = Таблица.Скопировать(,"Объект"); + ТаблицаОбъектов.Свернуть("Объект"); + + Результат = Новый Массив; + + Для Каждого Строка Из ТаблицаОбъектов Цикл + + СтруктураСтроки = Новый Структура; + СтруктураСтроки.Вставить("Object", Строка.Объект); + СтруктураСтроки.Вставить("Receive", Новый Массив); + СтруктураСтроки.Вставить("Send", Новый Массив); + + Отбор = Новый Структура("Объект", Строка.Объект); + РезультатПоиска = Таблица.НайтиСтроки(Отбор); + + Для Каждого ЭлМассива Из РезультатПоиска Цикл + + Если ЭлМассива.Получение Тогда + СтруктураСтроки.Send.Добавить(ЭлМассива.Версия); + КонецЕсли; + + Если ЭлМассива.Отправка Тогда + СтруктураСтроки.Receive.Добавить(ЭлМассива.Версия); + КонецЕсли; + + КонецЦикла; + + Если СтруктураСтроки.Send.Количество() = ВерсииФорматаОбмена.Количество() Тогда + СтруктураСтроки.Send = "*"; + КонецЕсли; + + Если СтруктураСтроки.Receive.Количество() = ВерсииФорматаОбмена.Количество() Тогда + СтруктураСтроки.Receive = "*"; + КонецЕсли; + + Результат.Добавить(СтруктураСтроки); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ТаблицаИзМассива_ПоддерживаемыеОбъектыФормата(Массив, ВерсииФорматаОбмена) Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Версия"); + Результат.Колонки.Добавить("Объект"); + Результат.Колонки.Добавить("Отправка"); + Результат.Колонки.Добавить("Получение"); + + Для Каждого ЭлМассива Из Массив Цикл + + Объект = ЭлМассива["Object"]; + + ОтправкаВерсии = ЭлМассива["Send"]; + Если ОтправкаВерсии = "*" Тогда + ОтправкаВерсии = ВерсииФорматаОбмена; + КонецЕсли; + + Для Каждого Версия Из ОтправкаВерсии Цикл + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.Версия = Версия; + НоваяСтрока.Объект = Объект; + НоваяСтрока.Отправка = Истина; + НоваяСтрока.Получение = Ложь; + + КонецЦикла; + + ПолучениеВерсии = ЭлМассива["Receive"]; + Если ПолучениеВерсии = "*" Тогда + ПолучениеВерсии = ВерсииФорматаОбмена; + КонецЕсли; + + Для Каждого Версия Из ПолучениеВерсии Цикл + + Отбор = Новый Структура("Объект, Версия", Объект, Версия); + РезультатПоиска = Результат.НайтиСтроки(Отбор); + + Если РезультатПоиска.Количество() = 0 Тогда + + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.Версия = Версия; + НоваяСтрока.Объект = Объект; + НоваяСтрока.Отправка = Ложь; + НоваяСтрока.Получение = Истина; + + Иначе + + РезультатПоиска[0].Получение = Истина; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ДобавитьЗаписьXML(ЗаписьXML, Значение, ПолноеИмя) Экспорт + + ЗаписатьXML(ЗаписьXML, Значение, ПолноеИмя, НазначениеТипаXML.Явное); + +КонецПроцедуры + +Процедура СкопироватьЗначениеСтруктуры(Источник, КлючИсточник, Приемник, КлючПриемник = Неопределено) Экспорт + + Если КлючПриемник = Неопределено Тогда + КлючПриемник = КлючИсточник; + КонецЕсли; + + Если Источник.Свойство(КлючИсточник) Тогда + Значение = Источник[КлючИсточник]; + Иначе + Значение = Неопределено; + КонецЕсли; + + Приемник.Вставить(КлючПриемник, Значение); + +КонецПроцедуры + +Функция ВерсияФорматаНастроекОбменаДаннымиXML() Экспорт + + Возврат "1.2"; + +КонецФункции + +Функция ВерсияФорматаНастроекОбменаДаннымиJSON() + + Возврат "2.0"; + +КонецФункции + +Процедура ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, ИмяПланаОбмена) Экспорт + + ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыОбменаXDTO"); // @Non-NLS + + ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); + + ЗаписатьXML(ЗаписьXML, ФорматОбмена, "ФорматОбмена", НазначениеТипаXML.Явное); // @Non-NLS + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыОбменаXDTO + +КонецПроцедуры + +#Область ПриПодключенииККорреспонденту + +Процедура ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, Знач ВерсияКорреспондента, СообщениеОбОшибке = "") Экспорт + + Если Не ЗначениеЗаполнено(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Попытка + + Если НЕ ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена("ПриПодключенииККорреспонденту", ИмяПланаОбмена) Тогда + Возврат; + ИначеЕсли ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ПланыОбмена[ИмяПланаОбмена].ПриПодключенииККорреспонденту(ВерсияКорреспондента); + + Исключение + + ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ШаблонСообщения = НСтр("ru = 'При выполнении обработчика ПриПодключенииККорреспонденту произошла ошибка:%1%2'"); + СообщениеОбОшибке = СтрШаблон(ШаблонСообщения, Символы.ПС, ПодробноеПредставлениеОшибки); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + Отказ = Истина; + + КонецПопытки; + +КонецПроцедуры + +Процедура ПроверитьДублированиеСинхронизаций(ИмяПланаОбмена, ПараметрыКорреспондента, Результат) Экспорт + + МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; + ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); + Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ЭтотУзел) + И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ЭтотУзел) Тогда + + УзелСсылка = МенеджерПланаОбмена.НайтиПоКоду(ПараметрыКорреспондента.КодЭтогоУзла); + + Если НЕ УзелСсылка.Пустая() Тогда + Результат.УзелКорреспондентаЕстьВЭтойБазе = Истина; + Результат.УзелДляУдаления = УзелСсылка; + КонецЕсли; + + Результат.ЭтотУзелЕстьВКорреспонденте = ПараметрыКорреспондента.УзелСуществует; + + КонецЕсли; + +КонецПроцедуры + +// Получает настройки прокси сервера. +// +Функция НастройкиПроксиСервера(ЗащищенноеСоединение) + + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(Протокол); + КонецЕсли; + + Возврат Прокси; + +КонецФункции + +#КонецОбласти + +Функция ПроверитьАутентификацию(Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, ДанныеАутентификации) Экспорт + + Параметры = ПараметрыИнициализации(); + + Если ТипЗнч(Корреспондент) = Тип("Строка") Тогда + Параметры.ИмяПланаОбмена = Корреспондент; + Иначе + Параметры.Корреспондент = Корреспондент; + КонецЕсли; + + Параметры.ИдентификаторТранспорта = ИдентификаторТранспорта; + Параметры.НастройкиТранспорта = НастройкиТранспорта; + Параметры.ДанныеАутентификации = ДанныеАутентификации; + + Транспорт = Инициализация(Параметры); + + Если Транспорт.ПодключениеУстановлено() Тогда + + Возврат Истина; + + Иначе + + ВызватьИсключение Транспорт.СообщениеОбОшибке; + + КонецЕсли; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ТранспортСообщенийОбмена/ТранспортСообщенийОбмена.mdo b/SSL/src/CommonModules/ТранспортСообщенийОбмена/ТранспортСообщенийОбмена.mdo new file mode 100644 index 000000000..683eabbb5 --- /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..072fd88e2 --- /dev/null +++ b/SSL/src/CommonModules/ТранспортСообщенийОбменаВызовСервера/Module.bsl @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..39a6a909b --- /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..b2daf2099 --- /dev/null +++ b/SSL/src/CommonModules/ТранспортСообщенийОбменаКлиент/Module.bsl @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПараметрыАутентификации() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("Корреспондент"); + Параметры.Вставить("ИмяПланаОбмена"); + Параметры.Вставить("ИдентификаторТранспорта"); + Параметры.Вставить("НастройкиТранспорта"); + + Возврат Параметры; + +КонецФункции + +Процедура НачалоАутентификации(ПараметрыАутентификации, ТребуетсяАутентификация, ОповещениеОЗакрытии = Неопределено) Экспорт + + ИмяФормыАутентификации = ""; + ТребуетсяАутентификация = ТранспортСообщенийОбменаВызовСервера.ТребуетсяАутентификация( + ПараметрыАутентификации, ИмяФормыАутентификации); + + Если ТребуетсяАутентификация Тогда + + ОткрытьФорму(ИмяФормыАутентификации, ПараметрыАутентификации,,,,,ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьФормуПараметровПроксиСервера() Экспорт + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиент"); + + ПараметрыФормы = Неопределено; + Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда + ПараметрыФормы = Новый Структура("НастройкаПроксиНаКлиенте", Истина); + КонецЕсли; + + МодульПолучениеФайловИзИнтернетаКлиент.ОткрытьФормуПараметровПроксиСервера(ПараметрыФормы); + КонецЕсли; + +КонецПроцедуры + +// Открывает инструкцию по восстановлению/изменению пароля синхронизации данных +// с автономным рабочим местом. +// +Процедура ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(Знач АдресДляВосстановленияПароляУчетнойЗаписи) Экспорт + + Если ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи) Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Адрес инструкции для восстановления пароля учетной записи не задан.'")); + + Иначе + + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресДляВосстановленияПароляУчетнойЗаписи); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ТранспортСообщенийОбменаКлиент/ТранспортСообщенийОбменаКлиент.mdo b/SSL/src/CommonModules/ТранспортСообщенийОбменаКлиент/ТранспортСообщенийОбменаКлиент.mdo new file mode 100644 index 000000000..951103954 --- /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..f9ea0b907 --- /dev/null +++ b/SSL/src/CommonModules/ТранспортСообщенийОбменаКлиентСервер/Module.bsl @@ -0,0 +1,95 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +Функция СтруктураНастроекПодключения() Экспорт + + Настройки = Новый Структура; + + Настройки.Вставить("КодУзла", ""); + Настройки.Вставить("КодУзлаКорреспондента", ""); + Настройки.Вставить("ИдентификаторНастройки", ""); + Настройки.Вставить("ИмяПланаОбмена", ""); + Настройки.Вставить("ИмяПланаОбменаКорреспондента", ""); + Настройки.Вставить("ВариантНастройкиОбмена", ""); + Настройки.Вставить("ФорматОбмена", Неопределено); + Настройки.Вставить("УзелИнформационнойБазы", Неопределено); + Настройки.Вставить("ВариантРаботыМастера", ""); + Настройки.Вставить("СсылкаНового", Неопределено); + Настройки.Вставить("КодПредопределенногоУзла", ""); + Настройки.Вставить("КодНовогоУзлаВторойБазы", ""); + Настройки.Вставить("НаименованиеЭтойБазы", ""); + Настройки.Вставить("НаименованиеВторойБазы", ""); + Настройки.Вставить("ПрефиксИнформационнойБазыИсточника", ""); + Настройки.Вставить("ПрефиксИнформационнойБазыПриемника", ""); + Настройки.Вставить("УзелИнформационнойБазы", Неопределено); + Настройки.Вставить("ИспользоватьПрефиксыДляНастройкиОбмена", Ложь); + Настройки.Вставить("ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента", Ложь); + Настройки.Вставить("ИдентификаторИнформационнойБазыИсточника", ""); + Настройки.Вставить("ИдентификаторИнформационнойБазыПриемника", ""); + Настройки.Вставить("ВерсияФорматаФайлаНастроекОбменаДанными", ""); + Настройки.Вставить("ВерсияФорматаОбмена", ""); + Настройки.Вставить("ВерсииФорматаОбмена", Новый Массив); + Настройки.Вставить("ПоддерживаемыеОбъектыФормата", Неопределено); + Настройки.Вставить("ПоддерживаемыеОбъектыФорматаКорреспондента", Неопределено); + Настройки.Вставить("ИдентификаторТранспорта", ""); + Настройки.Вставить("НастройкиТранспорта", Новый Структура); + Настройки.Вставить("ДанныеАутентификации", Новый Структура); + Настройки.Вставить("WSКонечнаяТочкаКорреспондента", ""); + Настройки.Вставить("WSОбластьДанныхКорреспондента", 0); + Настройки.Вставить("ВосстановлениеНастроекОбмена", ""); + Настройки.Вставить("НомерОтправленного", 0); + Настройки.Вставить("НомерПринятого", 0); + Настройки.Вставить("ИсправитьДублированиеНастроекСинхронизации"); + Настройки.Вставить("УзелКорреспондентаЕстьВЭтойБазе"); + Настройки.Вставить("ЭтотУзелЕстьВКорреспонденте"); + + Возврат Настройки; + +КонецФункции + +Функция НастройкиПодключенияПоОбработке(ПомощникСозданияОбмена) Экспорт + + Настройки = СтруктураНастроекПодключения(); + + ЗаполнитьЗначенияСвойств(Настройки, ПомощникСозданияОбмена); + + Если Настройки.ИспользоватьПрефиксыДляНастройкиОбмена + Или Настройки.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + Настройки.КодУзла = Настройки.ПрефиксИнформационнойБазыИсточника; + + Иначе + + Настройки.КодУзла = Настройки.ИдентификаторИнформационнойБазыИсточника; + + КонецЕсли; + + Если Настройки.ИспользоватьПрефиксыДляНастройкиОбмена + Или Настройки.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда + + Настройки.КодУзлаКорреспондента = Настройки.ПрефиксИнформационнойБазыПриемника; + + Иначе + + Настройки.КодУзлаКорреспондента = Настройки.ИдентификаторИнформационнойБазыПриемника; + + КонецЕсли; + + Настройки.ПоддерживаемыеОбъектыФормата = ПомощникСозданияОбмена.ПоддерживаемыеОбъектыФорматаКорреспондента; + Настройки.ВариантНастройкиОбмена = ПомощникСозданияОбмена.ИдентификаторНастройки; + + Возврат Настройки; + +КонецФункции + +#КонецОбласти + + + diff --git a/SSL/src/CommonModules/ТранспортСообщенийОбменаКлиентСервер/ТранспортСообщенийОбменаКлиентСервер.mdo b/SSL/src/CommonModules/ТранспортСообщенийОбменаКлиентСервер/ТранспортСообщенийОбменаКлиентСервер.mdo new file mode 100644 index 000000000..5860853ba --- /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..e888f56b2 --- /dev/null +++ b/SSL/src/CommonModules/ТранспортСообщенийОбменаПереопределяемый/Module.bsl @@ -0,0 +1,62 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..19d07e914 --- /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..113202737 --- /dev/null +++ b/SSL/src/CommonModules/ТранспортСообщенийОбменаПовтИсп/Module.bsl @@ -0,0 +1,17 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..b91a4fdb6 --- /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 63d8a76f3..5a6ad406b 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl @@ -701,6 +701,9 @@ НачатьТранзакцию(); Попытка + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + РегламентныеЗаданияСервер.ЗаблокироватьРегламентноеЗадание(Новый УникальныйИдентификатор); + КонецЕсли; Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.УдаляемыеОбъекты"); ЭлементБлокировки.УстановитьЗначение("ИдентификаторСеанса", ИдентификаторСеанса); @@ -753,6 +756,9 @@ НачатьТранзакцию(); Попытка + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + РегламентныеЗаданияСервер.ЗаблокироватьРегламентноеЗадание(Новый УникальныйИдентификатор); + КонецЕсли; Блокировка = Новый БлокировкаДанных; Блокировка.Добавить("Константа.ПроверятьИспользованиеУдаляемыхОбъектов"); Блокировка.Заблокировать(); diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index e0b605f54..441fd6a23 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -8,14 +8,13 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые для проверки прав. +#Область ПроцедурыИФункцииИспользуемыеДляПроверкиПрав -// Проверяет, что у пользователя есть роль в одном из профилей тех групп доступа, в которых он участвует, -// например: роль ПросмотрЖурналаРегистрации, роль ПечатьНепроведенныхДокументов. -// -// Если указан объект (или наборы значений доступа), тогда дополнительно проверяется, -// что группа доступа предоставляет право Чтение указанного объекта (или набор значений доступа разрешен). +// Проверяет, что у пользователя есть роль (дополнительное право) в одном из профилей тех групп доступа, +// в которых он участвует с учетом того, что хотя бы одна группа доступа профиля предоставляет +// право Чтение объекта (или набор значений доступа разрешен для группы доступа). +// +// Для проверки только роли следует использовать функцию Пользователи.РолиДоступны. // // Параметры: // Роль - Строка - имя роли. @@ -124,7 +123,7 @@ "ПравоИзменения", Строка.ЗначениеДоступа, "Чтения"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ИначеЕсли ИменаВидовДоступа.Получить(Строка.ВидДоступа) <> Неопределено ИЛИ Строка.ВидДоступа = "НастройкиПрав" Тогда @@ -141,7 +140,7 @@ Строка.ВидДоступа, "ПравоЧтения", "ПравоИзменения"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); Иначе ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в функции %1 модуля %2. @@ -149,7 +148,7 @@ "ЕстьРоль", "УправлениеДоступом", Строка.ВидДоступа); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Строка.ВидДоступа = ""; @@ -464,13 +463,12 @@ КонецФункции // Проверяет, что на уровне записей (и на уровне прав) указанному пользователю -// разрешено чтение объекта из базы данных. -// Когда указан набор записей проверяются все записи в базе данных, -// которые соответствуют свойству Отбор. +// разрешено чтение объекта или набора записей из базы данных. // -// Важно: если подсистема работает в режиме стандартного ограничения и -// указан пользователь, но не текущий пользователь, то будет вызвано -// исключение (для проверки предусмотрена функция ПроизводительныйВариант). +// Важно: если подсистема работает в стандартном варианте, тогда +// а) если указан пользователь, но не текущий пользователь, то будет вызвано исключение; +// б) выполняется проверка только объекта в базе данных (объект в памяти не проверяется). +// Для проверки варианта работы предусмотрена функция ПроизводительныйВариант. // // Параметры: // ОписаниеДанных - СправочникСсылка @@ -480,11 +478,11 @@ // - ПланВидовРасчетаСсылка // - БизнесПроцессСсылка // - ЗадачаСсылка -// - ПланОбменаСсылка - ссылка на объект, который требуется проверить. +// - ПланОбменаСсылка - ссылка на объект в базе данных, который требуется проверить. // - РегистрСведенийКлючЗаписи // - РегистрНакопленияКлючЗаписи // - РегистрБухгалтерииКлючЗаписи -// - РегистрРасчетаКлючЗаписи - ключ записи, которую требуется проверить. +// - РегистрРасчетаКлючЗаписи - ключ записи в базе данных, которую требуется проверить. // - СправочникОбъект // - ДокументОбъект // - ПланВидовХарактеристикОбъект @@ -492,12 +490,17 @@ // - ПланВидовРасчетаОбъект // - БизнесПроцессОбъект // - ЗадачаОбъект -// - ПланОбменаОбъект - объект в памяти и базе данных, который требуется проверить. +// - ПланОбменаОбъект - объект в памяти и базе данных, которые требуется проверить. // - РегистрСведенийНаборЗаписей // - РегистрНакопленияНаборЗаписей // - РегистрБухгалтерииНаборЗаписей -// - РегистрРасчетаНаборЗаписей - набор записей с настроенным свойством Отбор, -// по которому определяются записи в базе данных для проверки. +// - РегистрРасчетаНаборЗаписей - набор записей в памяти и базе данных, которые требуется проверить. +// В структуре ДополнительныеСвойства можно вставить необязательное свойство +// Замещение (Булево, РежимЗамещения), если не указано, тогда считается равным Истина. +// Если Замещение равно Ложь или РежимЗамещения.Добавление, тогда записи в базе данных +// не проверяются. Если Замещение равно Истина или РежимЗамещения.Замещение, +// тогда записи для проверки будут получены из базы данных по настройке свойства Отбор, +// в противном случае по ключам строк записей в наборе записей. // // Пользователь - СправочникСсылка.Пользователи // - СправочникСсылка.ВнешниеПользователи @@ -519,11 +522,12 @@ // Для нового объекта проверяется только объект в памяти. // Если указана ссылка или ключ записи, проверятся только объект в базе данных. // -// Важно: если подсистема работает в режиме стандартного ограничения, -// а не в режиме универсального ограничения, тогда проверяется право -// Изменение на таблицу, а на уровне записей проверяется только право Чтение. -// Если указан пользователь, но не текущий пользователь, то будет вызвано -// исключение (для проверки предусмотрена функция ПроизводительныйВариант). +// Важно: если подсистема работает в стандартном варианте, тогда +// а) если указан пользователь, но не текущий пользователь, то будет вызвано исключение; +// б) выполняется проверка только объекта в базе данных (объект в памяти не проверяется), +// причем на уровне записей проверяется только право Чтение, +// а право Изменение проверяется на таблицу в целом. +// Для проверки варианта работы предусмотрена функция ПроизводительныйВариант. // // Параметры: // ОписаниеДанных - СправочникСсылка @@ -549,8 +553,13 @@ // - РегистрСведенийНаборЗаписей // - РегистрНакопленияНаборЗаписей // - РегистрБухгалтерииНаборЗаписей -// - РегистрРасчетаНаборЗаписей - набор записей в памяти и базе данных, -// который требуется проверить. +// - РегистрРасчетаНаборЗаписей - набор записей в памяти и базе данных, которые требуется проверить. +// В структуре ДополнительныеСвойства можно вставить необязательное свойство +// Замещение (Булево, РежимЗамещения), если не указано, тогда считается равным Истина. +// Если Замещение равно Ложь или РежимЗамещения.Добавление, тогда записи в базе данных +// не проверяются. Если Замещение равно Истина или РежимЗамещения.Замещение, +// тогда записи для проверки будут получены из базы данных по настройке свойства Отбор, +// в противном случае по ключам строк записей в наборе записей. // // Пользователь - СправочникСсылка.Пользователи // - СправочникСсылка.ВнешниеПользователи @@ -589,8 +598,80 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры для включения и исключения пользователя в профиле групп доступа. +// Возвращает права Чтение и Изменение указанных или всех пользователей и +// внешних пользователей на указанный существующий элемент данных или их массив. +// Для использования требуются административные права или привилегированный режим. +// Служебные пользователи пропускаются. +// +// Если объект не существует или на него не рассчитаны права, тогда для него вернется пустой список прав. +// Аналогично, если записей регистра не существует, тогда для них вернется пустой список прав. +// Если имя поля ключа записи регистра совпадает с именем одной из колонок возвращаемой таблицы +// "ПользовательСПравом" или "ПравоИзменение", тогда оно будет дополнено нижним подчеркиванием слева. +// +// В отличие от функций ЧтениеРазрешено, ИзменениеРазрешено и +// процедур ПроверитьЧтениеРазрешено, ПроверитьИзменениеРазрешено, +// права для текущего пользователя возвращаются по состоянию в базе данных, +// а не по состоянию сеанса (если права были изменены после запуска сеанса). +// +// Важно: требуется производительный вариант ограничения доступа. +// Для проверки варианта работы предусмотрена функция ПроизводительныйВариант. +// +// Параметры: +// ОписаниеДанных - СправочникСсылка +// - ДокументСсылка +// - ПланВидовХарактеристикСсылка +// - ПланСчетовСсылка +// - ПланВидовРасчетаСсылка +// - БизнесПроцессСсылка +// - ЗадачаСсылка +// - ПланОбменаСсылка - ссылка на объект. +// - Массив из СправочникСсылка +// - Массив из ДокументСсылка +// - Массив из ПланВидовХарактеристикСсылка +// - Массив из ПланСчетовСсылка +// - Массив из ПланВидовРасчетаСсылка +// - Массив из БизнесПроцессСсылка +// - Массив из ЗадачаСсылка +// - Массив из ПланОбменаСсылка - массив ссылок на объекты одного типа. +// - РегистрСведенийКлючЗаписи +// - РегистрНакопленияКлючЗаписи +// - РегистрБухгалтерииКлючЗаписи +// - РегистрРасчетаКлючЗаписи - ключ записи, +// по которому определяется запись в базе данных для получения прав. +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей - набор записей с настроенным свойством Отбор, +// по которому определяются записи в базе данных для получения прав. +// Если свойство Отбор не установлено, а набор записей непустой, +// тогда будут возвращены права для записей, содержащихся в наборе записей +// (у записей в наборе записей используются только значения измерений). +// +// ДляВнешнихПользователей - Булево - если Истина, тогда вернуть права для внешних пользователей. +// - Неопределено - вернуть для пользователей и внешних пользователей. +// +// СоставПользователей - Неопределено - вернуть всех пользователей, у которых есть права. +// - Массив из СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - список +// пользователей для которых нужно вернуть права, если есть. +// +// Возвращаемое значение: +// ТаблицаЗначений: +// * ПользовательСПравом - СправочникСсылка.Пользователи +// - СправочникСсылка.ВнешниеПользователи - пользователь, если есть хотя бы право Чтение. +// * ПравоИзменение - Булево - Истина, если есть право Изменение и право Чтение, +// Ложь, если есть только право Чтение. +// <Поле Ссылка или поля ключа записи регистра>. +// +Функция ПраваДоступаКДанным(ОписаниеДанных, ДляВнешнихПользователей = Ложь, СоставПользователей = Неопределено) Экспорт + + Возврат УправлениеДоступомСлужебный.ПраваДоступаКДанным(ОписаниеДанных, + ДляВнешнихПользователей, СоставПользователей); + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыДляВключенияИИсключенияПользователяВПрофилеГруппДоступа // Назначение пользователю профиля групп доступа путем включения // в персональную группу доступа (только для упрощенной настройки прав). @@ -627,8 +708,9 @@ ВключитьОтключитьПрофильПользователя(Пользователь, Профиль, Ложь); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для получения общих настроек подсистемы. +#КонецОбласти + +#Область ПроцедурыИФункцииДляПолученияОбщихНастроекПодсистемы // Проверяет, используется ли ограничение доступа на уровне записей. // @@ -663,8 +745,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые для настройки интерфейса управляемых форм. +#КонецОбласти + +#Область ПроцедурыИФункцииИспользуемыеДляНастройкиИнтерфейсаУправляемыхФорм // Обработчик события формы ПриЧтенииНаСервере, который встраивается в формы элементов справочников, // документов, записей регистров и др., чтобы заблокировать форму, если изменение запрещено. @@ -786,7 +869,7 @@ "СозданиеНового", "Объект.Ссылка", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПопытки; КонецЕсли; @@ -803,7 +886,7 @@ "ТипЗначения", "Объект.Ссылка", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПопытки; Иначе ТипЗначенияДоступа = ТипЗначения; @@ -832,7 +915,7 @@ "Реквизит", "Объект.ГруппаДоступа", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПопытки; Иначе ПозицияТочки = СтрНайти(Реквизит, "."); @@ -848,7 +931,7 @@ Реквизит, "Реквизит", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПопытки; Иначе Попытка @@ -862,7 +945,7 @@ Реквизит, "Реквизит", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПопытки; КонецЕсли; КонецЕсли; @@ -879,7 +962,7 @@ Строка(СвойстваГрупп.Тип), Строка(ТипЗнч(ГруппаЗначенийДоступа)), "ГруппаДоступа"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Не УправлениеДоступомСлужебный.ВидДоступаИспользуется(СвойстваГрупп.ВидДоступа) Тогда @@ -1136,7 +1219,7 @@ "УправлениеДоступом", "Список", Строка(Список)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Не ЗначениеЗаполнено(Список.ОсновнаяТаблица) Тогда @@ -1145,7 +1228,7 @@ |У переданного динамического списка не указана основная таблица.'"), "НастроитьОтборыДинамическогоСписка", "УправлениеДоступом"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Не Список.ПроизвольныйЗапрос Тогда @@ -1155,7 +1238,7 @@ "НастроитьОтборыДинамическогоСписка", "УправлениеДоступом", "ПроизвольныйЗапрос"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; СхемаЗапроса = Новый СхемаЗапроса; @@ -1186,7 +1269,7 @@ "НастроитьОтборыДинамическогоСписка", "УправлениеДоступом", Список.ОсновнаяТаблица); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Отбор = СхемаЗапроса.ПакетЗапросов[0].Операторы[0].Отбор; ИмяПараметра = "РазрешенныеЗначенияПоля" + ИмяПоля; @@ -1266,8 +1349,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с наборами значений доступа. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСНаборамиЗначенийДоступа // Проверяет, предусмотрена ли для объекта метаданных процедура заполнения наборов значений доступа. // @@ -1603,8 +1687,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые в переопределяемом модуле. +#КонецОбласти + +#Область ПроцедурыИФункцииИспользуемыеВПереопределяемомМодуле // Возвращает структуру для удобства описания поставляемых профилей. // @@ -1767,8 +1852,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые при обновлении информационной базы. +#КонецОбласти + +#Область ПроцедурыИФункцииИспользуемыеПриОбновленииИнформационнойБазы // Заменяет роли в профилях, кроме поставляемых профилей, которые обновляются автоматически. // Предназначена для вызова из оперативного обработчика обновления. @@ -2074,7 +2160,7 @@ "ЗаменитьПраваВНастройкахПравОбъектов", "УправлениеДоступом", ПовторяющиесяНовыеИменаПрав); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ТаблицаЗамены = РезультатыЗапроса[РезультатыЗапроса.Количество()-1].Выгрузить(); @@ -2125,8 +2211,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые для обновления служебных данных. +#КонецОбласти + +#Область ПроцедурыИФункцииИспользуемыеДляОбновленияСлужебныхДанных // Обновляет список ролей пользователей информационной базы по их текущим принадлежностям // к группам доступа. Пользователи ИБ с ролью "ПолныеПрава" пропускаются. @@ -2340,22 +2427,13 @@ // (включает константу ОграничиватьДоступНаУровнеЗаписейУниверсально). // Следует использовать только в конечных типовых решениях, а не в поставках библиотек. // -// Для файловой ИБ обработчик не добавляется (кроме начального заполнения). -// Соответственно, в клиент-серверных базах с РИБ (кроме модели сервиса) обработчик тоже не добавляется, -// так как в РИБ могут быть файловые ИБ (если известно обратное, поведение можно переопределить). -// // Параметры: // Версия - Строка - версия для таблицы ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления. -// Указать пустую строку, если параметр ТолькоНачальноеЗаполнение указан Истина. +// Можно указать пустую строку, если параметр УстарелТолькоНачальноеЗаполнение указан Истина. // Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления -// ТолькоНачальноеЗаполнение - Булево - добавить только обработчик начального заполнения. -// Требуется, если пока не планируется переключать все базы на производительный вариант, -// а планируется переключать только новые созданные базы. -// БезУчетаРИБ - Булево - добавить обработчик обновления без учета наличия РИБ. -// Требуется, если планируется переключать клиент-серверные базы на производительный вариант, -// которые участвуют в РИБ, так как известно, что в РИБ не участвуют файловые базы или среди -// них нет файловых баз со значительным количеством активных пользователей, одновременно -// изменяющих данные для которых настроены ограничения на уровне записей. +// УстарелТолькоНачальноеЗаполнение - Булево - для обратной совместимости, если указан Истина, +// тогда не будет добавлен отложенный обработчик обновления для версии в параметре Версия. +// УстарелБезУчетаРИБ - Булево - не учитывается (обработчики добавляются без учета наличия РИБ). // // Пример: // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -2363,7 +2441,7 @@ // КонецПроцедуры // Процедура ДобавитьОбработчикОбновленияДляВключенияУниверсальногоОграничения(Версия, Обработчики, - ТолькоНачальноеЗаполнение = Ложь, БезУчетаРИБ = Ложь) Экспорт + УстарелТолькоНачальноеЗаполнение = Ложь, УстарелБезУчетаРИБ = Ложь) Экспорт Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() @@ -2376,35 +2454,7 @@ Обработчик.Процедура = "РегистрыСведений.ПараметрыОграниченияДоступа.ВключитьОграничениеДоступаНаУровнеЗаписейУниверсально"; Обработчик.РежимВыполнения = "Оперативно"; - Если ТолькоНачальноеЗаполнение - Или ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Возврат; - КонецЕсли; - - ВключенРИБ = Ложь; - Если Не БезУчетаРИБ - И Не ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - - ИменаПлановОбмена = Новый Массив; - Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл - Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда - ИменаПлановОбмена.Добавить(ПланОбмена.Имя); - КонецЕсли; - КонецЦикла; - МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - Таблица = МодульОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(ИменаПлановОбмена); - Граница = ТекущаяДатаСеанса() - ('00010701' - '00010101'); - Для Каждого Строка Из Таблица Цикл - Если Не ЗначениеЗаполнено(Строка.ДатаПоследнегоЗапуска) - Или Строка.ДатаПоследнегоЗапуска > Граница Тогда - ВключенРИБ = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ВключенРИБ Тогда + Если УстарелТолькоНачальноеЗаполнение Тогда Возврат; КонецЕсли; @@ -2421,6 +2471,25 @@ КонецПроцедуры +// Планирует обновление доступа для указанной таблицы. +// Будут проверены и обновлены ключи доступа всех объектов указанной таблицы, если не актуальны. +// Будут пересчитаны и обновлены права на все ключи доступа объектов указанной таблицы, если не актуальны. +// +// Требуется при исправлении специфических прикладных ошибок, из-за которых может потребоваться актуализация +// ключей доступа или прав на ключи доступа, но система не выявила эту необходимость автоматически. +// +// Параметры: +// Таблица - Строка - полное имя объекта метаданных. +// - Массив из Строка - полные имена объектов метаданных. +// +Процедура ЗапланироватьОбновлениеДоступа(Таблица) Экспорт + + УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступа(Таблица); + +КонецПроцедуры + +#КонецОбласти + #Область ДляВызоваИзДругихПодсистем // СлужебныеПодсистемы.ОбъектыУТКАУП @@ -2634,6 +2703,72 @@ // Конец Разработка.РазработкаПравИОграниченийДоступа +// ТехнологияСервиса.ПользователиСервиса + +// Устанавливает права пользователя в соответствии с переданными группами доступа +// (профилями групп доступа в случае упрощенного режима) и группами пользователей +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи +// ГруппыДоступа - Массив из СправочникСсылка.ГруппыДоступа, СправочникСсылка.ПрофилиГруппДоступа +// ГруппыПользователей - Массив из СправочникСсылка.ГруппыПользователей +// +Процедура УстановитьПраваПользователя(Пользователь, ГруппыДоступа, ГруппыПользователей) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступомСлужебныйВМоделиСервиса = + ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + + МодульУправлениеДоступомСлужебныйВМоделиСервиса.УстановитьПраваПользователя( + Пользователь, + ГруппыДоступа, + ГруппыПользователей); + +КонецПроцедуры + +// Обновляет профиль групп доступа по шаблону из Менеджера сервиса +// +// Параметры: +// ИмяШаблона - Строка +// Комментарий - Строка +// ИдентификаторШаблона - УникальныйИдентификатор +// РолиШаблона - Массив из Строка - полные имена объектов метаданных ролей +// ЭтоОтключение - Булево +// +Процедура ОбновитьПрофильГруппДоступаПоШаблону(ИмяШаблона, Комментарий, ИдентификаторШаблона, РолиШаблона, ЭтоОтключение) Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступомСлужебныйВМоделиСервиса = + ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ОбновитьПрофильГруппДоступаПоШаблону( + ИмяШаблона, + Комментарий, + ИдентификаторШаблона, + РолиШаблона, + ЭтоОтключение); + +КонецПроцедуры + +// Отправляет группы доступа в Менеджер сервиса при переходе на новую версию. +Процедура ОтправитьГруппыДоступаВМенеджерСервисаПриПереходеНаНовуюВерсию() Экспорт + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеДоступомСлужебныйВМоделиСервиса = + ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + МодульУправлениеДоступомСлужебныйВМоделиСервиса.ОтправитьГруппыДоступаВМенеджерСервисаПриПереходеНаНовуюВерсию(); +КонецПроцедуры + +// Конец ТехнологияСервиса.ПользователиСервиса + #КонецОбласти #КонецОбласти @@ -3088,7 +3223,7 @@ НСтр("ru = 'Для значений доступа типа ""%1"" |не используются группы значений доступа.'"), Строка(ТипЗначенияДоступа)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; СвойстваГрупп.Вставить("ВидДоступа", СвойстваВидаДоступа.Имя); @@ -3346,4 +3481,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 1b70a9b1d..6a199e2e0 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -8,8 +8,7 @@ #Область СлужебныйПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Основные процедуры и функции. +#Область ОсновныеПроцедурыИФункции // Добавляет пользователя в группу доступа, соответствующую поставляемому профилю. // Группа доступа определяется по идентификатору ссылки поставляемого профиля. @@ -291,7 +290,7 @@ ТаблицаЗначенийДоступа = Метаданные.НайтиПоТипу(ТекущийТип).ПолноеИмя(); ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ТаблицаЗначенийДоступа", ТаблицаЗначенийДоступа); ТекущийТекстЗапроса = СтрЗаменить(ТекущийТекстЗапроса, "&ЗначениеПустойСсылки", - "ЗНАЧЕНИЕ(" + ТаблицаЗначенийДоступа + ".ПустаяСсылка)"); // @query-part-1 + "ЗНАЧЕНИЕ(" + ТаблицаЗначенийДоступа + ".ПустаяСсылка)"); // @query-part-2 Если ЗначениеЗаполнено(ТекстЗапроса) Тогда ОбъединитьЗапросСЗапросом(ТекстЗапроса, ТекущийТекстЗапроса); Иначе @@ -765,6 +764,8 @@ КонецФункции +#КонецОбласти + #Область УниверсальноеОграничение Функция ОграничиватьДоступНаУровнеЗаписейУниверсально(СУчетомКонстантыОграничениеДоступаНаУровнеЗаписей = Истина, @@ -1592,8 +1593,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами. Процедура ПриОпределенииОбъектовСРедактируемымиРеквизитами(Объекты) Экспорт @@ -1841,6 +1841,14 @@ Обработчик.ЧитаемыеОбъекты = "Справочник.ГруппыДоступа"; Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ТаблицыГруппДоступа,РегистрСведений.ЗначенияГруппДоступа,РегистрСведений.ЗначенияГруппДоступаПоУмолчанию"; + // Должен выполнятся до прикладных обработчиков обновления. + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.11.49"; + Обработчик.Процедура = "РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра"; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.Приоритет = 1; + КонецПроцедуры // Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек @@ -2013,8 +2021,6 @@ ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ЗначенияГруппДоступаПоУмолчанию); ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НаборыЗначенийДоступа); ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ПраваРолей); - ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов); - ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.НастройкиПравОбъектов); ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ТаблицыГруппДоступа); ПриДобавленииИсключенийПоискаСсылокДопускающихУдаление(ИсключенияПоискаСсылок); @@ -2407,7 +2413,7 @@ КонецПроцедуры // См. ИнтеграцияПодсистемБСП.ПриСозданииАдминистратора. -Процедура ПриСозданииАдминистратора(Администратор, Уточнение) Экспорт +Процедура ПриСозданииИлиАвторизацииАдминистратора(Администратор, Уточнение) Экспорт Если ТипЗнч(Администратор) <> Тип("СправочникСсылка.Пользователи") Тогда Возврат; @@ -2989,6 +2995,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. @@ -3372,7 +3380,7 @@ ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не существует вид доступа ""%1"", указанный в параметре %2.'"), ВидДоступа, "ВидДоступа"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ВидДоступаСсылка = СвойстваВидаДоступа.Ссылка; @@ -3388,7 +3396,7 @@ НСтр("ru = 'Не существует вид доступа ""%1"", указанный в параметре |%2: ""%3"".'"), ТекущийВидДоступа, "ВсеВидыДоступа", ВсеВидыДоступа); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если СвойстваВидаДоступа.Имя = ВидДоступа Тогда ВидДоступаУказанВоВсехВидахДоступа = Истина; @@ -3405,7 +3413,7 @@ НСтр("ru = 'Вид доступа ""%1"", указанный в параметре %2 не существует в параметре |%3: ""%4"".'"), ВидДоступа, "ВидДоступа", "ВсеВидыДоступа", ВсеВидыДоступа); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ВсеВидыДоступаТаблицыСОтключеннымИспользованием Тогда @@ -3515,8 +3523,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия // Обработчик подписки ОбновитьГруппыЗначенийДоступаПередЗаписью: // - проверяет изменение родителя и готовит группы доступа, в которых @@ -3755,8 +3762,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики регламентных заданий. +#КонецОбласти + +#Область ОбработчикиРегламентныхЗаданий // Обработчик регламентного задания ЗаполнениеДанныхДляОграниченияДоступа. Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания() Экспорт @@ -4008,8 +4016,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с видами доступа. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСВидамиДоступа // Возвращает Истина, если вид доступа включен по функциональным опциям для всех сеансов. // @@ -4132,8 +4141,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с наборами значений доступа. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСНаборамиЗначенийДоступа // Возвращает новые наборы для заполнения табличной части. // @@ -4206,7 +4216,7 @@ |не существует в подписке на событие %2.'"), ТипЗначенияОбъект, "ЗаписатьНаборыЗначенийДоступа"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип.Типы().Найти(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда @@ -4217,7 +4227,7 @@ "НаборыЗначенийДоступа", "Объект", ТипЗнч(СсылкаНаОбъект)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") <> Неопределено Тогда @@ -4304,8 +4314,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для действий при изменений настроек подсистемы. +#КонецОбласти + +#Область ПроцедурыИФункцииДляДействийПриИзмененийНастроекПодсистемы // Если необходимо, включает заполнение данных для ограничения доступа и // обновляет некоторые данные сразу. @@ -4349,8 +4360,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. +#КонецОбласти + +#Область ОбслуживаниеТаблицВидыДоступаИЗначенияДоступаВФормахРедактирования // Заполняет вспомогательные данные, требуемые для работы формы, // которые не зависят от содержания объекта или заполняются для нового объекта. @@ -4543,8 +4555,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Универсальные процедуры и функции. +#КонецОбласти + +#Область УниверсальныеПроцедурыИФункции // Только для внутреннего использования. Процедура УстановитьУсловиеОтбораВЗапросе(Знач Запрос, Знач Значения, Знач ИмяПараметраЗначений, Знач ИмяПараметраУсловияОтбораИмяПоля) Экспорт @@ -4579,7 +4592,7 @@ "ИмяПараметраУсловияОтбораИмяПоля", "<ИмяПараметраУсловия>:<ИмяПоля>", ТекущаяСтрока); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ИмяПараметраУсловияОтбора = Лев(ТекущаяСтрока, ИндексРазделителя-1); ИмяПоля = Сред(ТекущаяСтрока, ИндексРазделителя+1); @@ -4692,12 +4705,12 @@ Если Данные.БезПерезаписи Тогда НаборЗаписи = МенеджерРегистра.СоздатьНаборЗаписей(); - ОписаниеКлючаЗаписи = УправлениеДоступомСлужебныйПовтИсп.ОписаниеКлючаЗаписи(ПолноеИмяРегистра); - ОтборЗаписи = Новый Структура(ОписаниеКлючаЗаписи.СтрокаПолей); + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмяРегистра); + ОтборЗаписи = Новый Структура(ОписаниеКлючаЗаписи.СписокПолей); ПоляОстальныхИзмерений = Новый Массив; - Для каждого Поле Из ОписаниеКлючаЗаписи.МассивПолей Цикл - Если Поле <> ПолеОтбора Тогда - ПоляОстальныхИзмерений.Добавить(Поле); + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + Если ОписаниеПоля.Имя <> ПолеОтбора Тогда + ПоляОстальныхИзмерений.Добавить(ОписаниеПоля.Имя); КонецЕсли; КонецЦикла; УдаляемыеЗаписи = Новый ТаблицаЗначений; @@ -5113,7 +5126,7 @@ ЗаполнитьПараметры(Данные, ВсеПараметры, "МенеджерРегистра, ИзмененияСоставаСтрок"); МетаданныеРегистра = Метаданные.НайтиПоТипу(ТипЗнч(Данные.МенеджерРегистра.ПустойКлюч())); - ОписаниеКлючаЗаписи = УправлениеДоступомСлужебныйПовтИсп.ОписаниеКлючаЗаписи(МетаданныеРегистра.ПолноеИмя()); + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(МетаданныеРегистра.ПолноеИмя()); Если Данные.ИзмеренияОтбора <> Неопределено Тогда Данные.ИзмеренияОтбора = Новый Структура(Данные.ИзмеренияОтбора); @@ -5123,7 +5136,8 @@ ЗначенияИзмеренийОтбора = Новый Структура; ИзмерениеБезФиксированногоОтбора = Новый Структура; - Для Каждого Поле Из ОписаниеКлючаЗаписи.МассивПолей Цикл + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + Поле = ОписаниеПоля.Имя; Если Не Данные.ФиксированныйОтбор.Свойство(Поле) Тогда Значения = ЗначенияКолонкиТаблицы(Данные.ИзмененияСоставаСтрок, Поле); @@ -5173,7 +5187,7 @@ Данные.Вставить("ЗначенияТретьегоИзмерения", Неопределено); КонецЕсли; - Данные.Вставить("ПоляСравнения", ОписаниеКлючаЗаписи.СтрокаПолей); + Данные.Вставить("ПоляСравнения", ОписаниеКлючаЗаписи.СписокПолей); Данные.Вставить("НовыеЗаписиСодержатТолькоРазличия", Истина); Данные.Вставить("НовыеЗаписи", Данные.ИзмененияСоставаСтрок); Данные.Удалить("ИзмененияСоставаСтрок"); @@ -5212,7 +5226,7 @@ "ПустаяСсылкаОбъектаМетаданных", "УправлениеДоступомСлужебный", "ОписаниеОбъектаМетаданных"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ПустаяСсылка = Неопределено; @@ -5229,15 +5243,16 @@ "ПустаяСсылкаОбъектаМетаданных", "УправлениеДоступомСлужебный", ОбъектМетаданных.ПолноеИмя()); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПопытки; Возврат ПустаяСсылка; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Создает запрос выбора различий между строками регистра в заданной области данных // (на основе отборов в параметре ПоляИОтбор). @@ -5314,7 +5329,7 @@ "ТекстЗапросаВыбораИзменений", "УправлениеДоступомСлужебный", "&ПодстановкаПоляВидИзмененияСтроки"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ТекстЗапросаВыбораСтарых = СтрЗаменить( @@ -5330,7 +5345,7 @@ "ТекстЗапросаВыбораИзменений", "УправлениеДоступомСлужебный", "&ПодстановкаПоляВидИзмененияСтроки"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ТекстЗапросаВыбораНовых = СтрЗаменить( @@ -5355,7 +5370,7 @@ | | ОБЪЕДИНИТЬ ВСЕ | - | " + ТекстЗапросаВыбораСтарых + ")"; // @query-part-1 + | " + ТекстЗапросаВыбораСтарых + ")"; // @query-part-2 ВыбираемыеПоля = ""; ПоляГруппировки = ""; @@ -5392,8 +5407,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Заполняет обработчик разделенных данных, зависимый от изменения неразделенных данных. // @@ -5558,8 +5574,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Возвращаемое значение: // см. РегистрыСведений.ПраваРолей.ТаблицаПравРолей @@ -6518,7 +6535,7 @@ "НаборыЗначенийДоступа", "Объект", ТипЗнч(СсылкаНаОбъект)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() @@ -6866,9 +6883,8 @@ Если Константы.ИспользоватьВнешнихПользователей.Получить() Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИсключитьВнешнихПользователей", "ИСТИНА"); Иначе - // @query-part-2 Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИсключитьВнешнихПользователей", - "ТИПЗНАЧЕНИЯ(ПроверяемыеПользователи.Пользователь) = ТИП(Справочник.Пользователи)"); + "ТИПЗНАЧЕНИЯ(ПроверяемыеПользователи.Пользователь) = ТИП(Справочник.Пользователи)"); // @query-part-2 КонецЕсли; РезультатыЗапросов = Запрос.ВыполнитьПакет(); @@ -7722,7 +7738,7 @@ "НовыеЗаписи", "ВидИзмененияСтроки", Строка(СтрокаИзменений.ВидИзмененияСтроки)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецЦикла; @@ -7735,8 +7751,7 @@ "ОбновитьНаборыЗаписей", "УправлениеДоступомСлужебный", "НовыеЗаписи"); - - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецПроцедуры @@ -8669,7 +8684,7 @@ ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя вида доступа ""%1"" уже определено.'"), ВидДоступа.Имя); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; // Проверка повторения типов значений и групп. @@ -9309,12 +9324,14 @@ // Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву // объектов метаданных. -// Если записи по праву нет, значит ограничений по праву нет. -// Таблица содержит только виды доступа, заданные разработчиком, +// Если записи по праву нет, значит ограничений по праву нет. +// Таблица содержит только виды доступа, заданные разработчиком, // исходя из их применения в текстах ограничений. -// Для получения всех видов доступа, включая используемые в наборах -// значений доступа может быть использовано -// текущее состояние регистра сведений НаборыЗначенийДоступа. +// В стандартном варианте ограничения доступа для получения видов доступа объектов, +// которые ограничиваются с помощью шаблона ПоНаборамЗначений, используется текущее +// состояние регистра сведений НаборыЗначенийДоступа. Признаком такого ограничения +// является строка, в которой таблица ограничивается по виду ограничения Объект +// с той же ведущей таблицей (кроме случая, когда таблица является владельцем настроек прав). // // Параметры: // ДляПроверки - Булево - вернуть текстовое описание ограничений прав, заполненное @@ -9328,12 +9345,15 @@ // * ПолноеИмя - Строка - полное имя таблицы. // * Таблица - СправочникСсылка.ИдентификаторыОбъектовМетаданных // - СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор таблицы. -// * ВидДоступа - ЛюбаяСсылка - пустая ссылка основного типа значений вида доступа, -// пустая ссылка владельца настроек прав. // * Право - Строка - "Чтение", "Изменение". -// - Неопределено - для вида доступа Объект. -// * ТаблицаОбъекта - ЛюбаяСсылка - пустая ссылка объекта метаданных, через который ограничивается доступ, -// используя наборы значений доступа, например, Справочник.ПапкиФайлов. +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа значений вида доступа. +// Неопределено если ограничение с помощью стандартного шаблона ПоНаборамЗначений. +// Перечисление.ДополнительныеЗначенияДоступа.Неопределено для +// специальных ограничений Объект и НастройкиПрав. +// * ЭтоАвторизованныйПользователь - Булево - Истина, если вид доступа Пользователи или ВнешниеПользователи, +// но проверка только с помощью ограничения ФункцияЭтоАвторизованныйПользователь. +// * ТаблицаОбъекта - ЛюбаяСсылка - пустая ссылка объекта, который ограничивается с помощью +// стандартного шаблона ПоНаборамЗначений. // - Неопределено - если ВидДоступа <> Неопределено. // Колонка присутствует только для стандартного ограничения. // @@ -9364,6 +9384,7 @@ ВидыОграниченийПрав.Колонки.Добавить("Таблица", Новый ОписаниеТипов(ТипыИдентификаторов)); ВидыОграниченийПрав.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); ВидыОграниченийПрав.Колонки.Добавить("ВидДоступа", УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); + ВидыОграниченийПрав.Колонки.Добавить("ЭтоАвторизованныйПользователь", Новый ОписаниеТипов("Булево")); ВидыОграниченийПрав.Колонки.Добавить("ТаблицаОбъекта", Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип); ВидыОграниченийПрав.Колонки.Добавить("ВедущееПраво", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); @@ -9381,44 +9402,13 @@ ОграниченияПрав, ВидыДоступаПоИменам, Ложь); КонецЕсли; + ВидыОграниченийПрав.Индексы.Добавить("ПолноеИмя"); ПолныеИмена = ВидыОграниченийПрав.ВыгрузитьКолонку("ПолноеИмя"); ИдентификаторыИмен = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИмена); Для Каждого Строка Из ВидыОграниченийПрав Цикл Строка.Таблица = ИдентификаторыИмен.Получить(Строка.ПолноеИмя); КонецЦикла; - // Добавление видов доступа объектов, которые определяются не только через наборы значений доступа. - Если Не УниверсальноеОграничение Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЗависимостиПравДоступа.ПодчиненнаяТаблица, - | ЗависимостиПравДоступа.ТипВедущейТаблицы - |ИЗ - | РегистрСведений.ЗависимостиПравДоступа КАК ЗависимостиПравДоступа"; - ЗависимостиПрав = Запрос.Выполнить().Выгрузить(); - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("УниверсальноеОграничение", УниверсальноеОграничение); - Контекст.Вставить("ВидыОграниченийПрав", ВидыОграниченийПрав); - Контекст.Вставить("ЗависимостиПрав", ЗависимостиПрав); - Контекст.Вставить("ТекущиеЗависимыеТаблицы", Новый Соответствие); - Контекст.Вставить("ВидыДоступаВедущихТаблиц", Новый Соответствие); - Отбор = Новый Структура("ВидДоступа", Неопределено); - ВидыДоступаОбъект = ВидыОграниченийПрав.НайтиСтроки(Отбор); - Отбор = Новый Структура("ДляВнешнихПользователей, ПолноеИмя, Таблица, Право, ВидДоступа"); - Для Каждого СтрокаВидДоступаОбъект Из ВидыДоступаОбъект Цикл - ВидыДоступа = ВидыДоступаВедущейТаблицы(Контекст, СтрокаВидДоступаОбъект); - Для Каждого ВидДоступа Из ВидыДоступа Цикл - ЗаполнитьЗначенияСвойств(Отбор, СтрокаВидДоступаОбъект); - Отбор.ВидДоступа = ВидДоступа; - Если ВидыОграниченийПрав.НайтиСтроки(Отбор).Количество() = 0 Тогда - ЗаполнитьЗначенияСвойств(ВидыОграниченийПрав.Добавить(), Отбор); - КонецЕсли; - КонецЦикла; - КонецЦикла; - ВидыОграниченийПрав.Колонки.Удалить("ВедущееПраво"); Если УниверсальноеОграничение Тогда ВидыОграниченийПрав.Колонки.Удалить("ТаблицаОбъекта"); @@ -9430,72 +9420,6 @@ КонецФункции -// Для функции ПостоянныеВидыОграниченийПравОбъектовМетаданных. -Функция ВидыДоступаВедущейТаблицы(Контекст, СтрокаВидДоступаОбъект) - - ИдентификаторТаблицы = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( - ТипЗнч(СтрокаВидДоступаОбъект.ТаблицаОбъекта)); - - Если Контекст.УниверсальноеОграничение Тогда - ВедущееПраво = СтрокаВидДоступаОбъект.ВедущееПраво; - Иначе - Отбор = Новый Структура; - Отбор.Вставить("ПодчиненнаяТаблица", СтрокаВидДоступаОбъект.Таблица); - Отбор.Вставить("ТипВедущейТаблицы", СтрокаВидДоступаОбъект.ТаблицаОбъекта); - Если Контекст.ЗависимостиПрав.НайтиСтроки(Отбор).Количество() = 0 Тогда - ВедущееПраво = СтрокаВидДоступаОбъект.Право; - Иначе - ВедущееПраво = "Чтение"; - КонецЕсли; - КонецЕсли; - - Ключ = ?(СтрокаВидДоступаОбъект.ДляВнешнихПользователей, "1:", "0:") - + Строка(ИдентификаторТаблицы.УникальныйИдентификатор()) + ":" + ВедущееПраво; - - Если Контекст.ТекущиеЗависимыеТаблицы.Получить(Ключ) <> Неопределено Тогда - Возврат Новый Массив; - КонецЕсли; - - ВидыДоступа = Контекст.ВидыДоступаВедущихТаблиц.Получить(Ключ); - Если ВидыДоступа <> Неопределено Тогда - Возврат ВидыДоступа; - КонецЕсли; - - Контекст.ТекущиеЗависимыеТаблицы.Вставить(Ключ, Истина); - ВидыДоступа = Новый Массив; - - Отбор = Новый Структура("ДляВнешнихПользователей, Таблица, Право", - СтрокаВидДоступаОбъект.ДляВнешнихПользователей, ИдентификаторТаблицы, ВедущееПраво); - ВидыДоступаВедущейТаблицы = Контекст.ВидыОграниченийПрав.НайтиСтроки(Отбор); - - Для Каждого ОписаниеВидаДоступа Из ВидыДоступаВедущейТаблицы Цикл - Если ОписаниеВидаДоступа.ВидДоступа = Неопределено Тогда - ВидыДоступаВложеннойВедущейТаблицы = ВидыДоступаВедущейТаблицы(Контекст, - ОписаниеВидаДоступа); - Для Каждого ВидДоступа Из ВидыДоступаВложеннойВедущейТаблицы Цикл - ДобавитьВидДоступаВедущейТаблицы(ВидыДоступа, ВидДоступа); - КонецЦикла; - Иначе - ДобавитьВидДоступаВедущейТаблицы(ВидыДоступа, ОписаниеВидаДоступа.ВидДоступа); - КонецЕсли; - КонецЦикла; - - Контекст.ТекущиеЗависимыеТаблицы.Удалить(Ключ); - Контекст.ВидыДоступаВедущихТаблиц.Вставить(Ключ, ВидыДоступа); - - Возврат ВидыДоступа; - -КонецФункции - -// Для функции ВидыДоступаВедущейТаблицы. -Процедура ДобавитьВидДоступаВедущейТаблицы(ВидыДоступа, ВидДоступа) - - Если ВидыДоступа.Найти(ВидДоступа) = Неопределено Тогда - ВидыДоступа.Добавить(ВидДоступа); - КонецЕсли; - -КонецПроцедуры - // Для функции ПостоянныеВидыОграниченийПравОбъектовМетаданных. Процедура ДобавитьВидыОграниченияПрав(ВидыОграниченийПрав, ОграниченияПрав, ВидыДоступаПоИменам, УниверсальноеОграничение, ДляВнешнихПользователей = Неопределено) @@ -9542,7 +9466,8 @@ НСтр("ru = 'Не существует право ""%1"".'"), Право); ИначеЕсли ВРег(ВидДоступа) = ВРег("Объект") Тогда - Если ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ТаблицаОбъекта) = Неопределено Тогда + ОбъектМетаданныхТаблицыОбъекта = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ТаблицаОбъекта); + Если ОбъектМетаданныхТаблицыОбъекта = Неопределено Тогда Если УниверсальноеОграничение Тогда Продолжить; КонецЕсли; @@ -9550,8 +9475,13 @@ НСтр("ru = 'Не существует таблица объекта ""%1"".'"), ТаблицаОбъекта); Иначе - ВидДоступаСсылка = Неопределено; - ТаблицаОбъектаСсылка = ПустаяСсылкаОбъектаМетаданных(ТаблицаОбъекта); + Если ОбъектМетаданныхТаблицы = ОбъектМетаданныхТаблицыОбъекта Тогда + ВидДоступаСсылка = Неопределено; + ТаблицаОбъектаСсылка = ПустаяСсылкаОбъектаМетаданных(ТаблицаОбъекта); + Иначе + ВидДоступаСсылка = Перечисления.ДополнительныеЗначенияДоступа.Неопределено; + ТаблицаОбъектаСсылка = Неопределено; + КонецЕсли; Если УниверсальноеОграничение И ВедущееПраво <> "Чтение" И ВедущееПраво <> "Изменение" Тогда @@ -9569,10 +9499,18 @@ НСтр("ru = 'Не существует таблица владельца настроек прав ""%1"".'"), ТаблицаОбъекта); Иначе - ВидДоступаСсылка = ПустаяСсылкаОбъектаМетаданных(ТаблицаОбъекта); + ВидДоступаСсылка = Перечисления.ДополнительныеЗначенияДоступа.Неопределено; ТаблицаОбъектаСсылка = Неопределено; КонецЕсли; + ИначеЕсли ВРег(ВидДоступа) = ВРег("ПравоЧтения") + Или ВРег(ВидДоступа) = ВРег("ПравоИзменения") + Или ВРег(ВидДоступа) = ВРег("ФункцияЭтоАвторизованныйПользователь") + Или ВРег(ВидДоступа) = ВРег("ФункцияПравоДоступаИлиРольДоступна") Тогда + + ВидДоступаСсылка = Перечисления.ДополнительныеЗначенияДоступа.Неопределено; + ТаблицаОбъектаСсылка = Неопределено; + ИначеЕсли ВидыДоступаПоИменам.Получить(ВидДоступа) = Неопределено Тогда Если УниверсальноеОграничение Тогда Продолжить; @@ -9607,7 +9545,7 @@ "УправлениеДоступомПереопределяемый", ТекстОшибки); КонецЕсли; - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); Иначе НовоеОписание = ВидыОграниченийПрав.Добавить(); НовоеОписание.ДляВнешнихПользователей = ДляВнешнихПользователей; @@ -9616,6 +9554,24 @@ НовоеОписание.ВидДоступа = ВидДоступаСсылка; НовоеОписание.ТаблицаОбъекта = ТаблицаОбъектаСсылка; НовоеОписание.ВедущееПраво = ВедущееПраво; + Если ВРег(ВидДоступа) = ВРег("ФункцияЭтоАвторизованныйПользователь") Тогда + Если ДляВнешнихПользователей <> Истина Тогда + НовоеОписание = ВидыОграниченийПрав.Добавить(); + НовоеОписание.ДляВнешнихПользователей = ДляВнешнихПользователей; + НовоеОписание.ПолноеИмя = ОбъектМетаданныхТаблицы.ПолноеИмя(); + НовоеОписание.Право = Право; + НовоеОписание.ВидДоступа = Справочники.Пользователи.ПустаяСсылка(); + НовоеОписание.ЭтоАвторизованныйПользователь = Истина; + КонецЕсли; + Если ДляВнешнихПользователей <> Ложь Тогда + НовоеОписание = ВидыОграниченийПрав.Добавить(); + НовоеОписание.ДляВнешнихПользователей = ДляВнешнихПользователей; + НовоеОписание.ПолноеИмя = ОбъектМетаданныхТаблицы.ПолноеИмя(); + НовоеОписание.Право = Право; + НовоеОписание.ВидДоступа = Справочники.ВнешниеПользователи.ПустаяСсылка(); + НовоеОписание.ЭтоАвторизованныйПользователь = Истина; + КонецЕсли; + КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; @@ -9625,9 +9581,9 @@ // Только для внутреннего использования. // // Возвращаемое значение: -// ФиксированноеСоответствие из КлючИЗначение: -// * Ключ - Тип -// * Значение - Строка +// ТаблицаЗначений: +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка +// * ТипГруппИЗначений - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка // Функция ТипыГруппИЗначенийВидовДоступа() Экспорт @@ -9798,10 +9754,11 @@ КонецФункции +#КонецОбласти + #Область УниверсальноеОграничение -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия // Обработчик подписок ПроверитьДоступПередЗаписью* проверяет доступ к старой версии объекта, проверяет // изменение полей объектов дополнительных таблиц, присоединенных в ограничениях доступа списков. @@ -9847,7 +9804,7 @@ // на событие ПередЗаписью. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// Замещение - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// Замещение - РежимЗамещения, Булево - параметр, передаваемый в подписку на событие ПередЗаписью. // // ТолькоЗапись - Булево - параметр, передаваемый в подписку на событие ПередЗаписью, // когда Источник это РегистрРасчетаНаборЗаписей. @@ -9904,7 +9861,7 @@ // на событие ПриЗаписи. // // Отказ - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. -// Замещение - Булево - параметр, передаваемый в подписку на событие ПриЗаписи. +// Замещение - РежимЗамещения, Булево - параметр, передаваемый в подписку на событие ПриЗаписи. // // ТолькоЗапись - Булево - параметр, передаваемый в подписку на событие ПриЗаписи, // когда Источник это РегистрРасчетаНаборЗаписей. @@ -9949,8 +9906,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Универсальное ограничение доступа. +#КонецОбласти + +#Область УниверсальноеОграничениеДоступа // Параметры: // ОписаниеДанных - см. УправлениеДоступом.ИзменениеРазрешено.ОписаниеДанных @@ -10081,34 +10039,37 @@ ИмяПраваДоступа = "Изменение"; КонецЕсли; - ЕстьПраво = Истина; + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + СписокПолей = УправлениеДоступомСлужебныйПовтИсп.СписокВсехПолейОграниченияДоступа(ПолноеИмя); + Если ВызыватьИсключение Тогда ВыполнитьПроверкуПравДоступа(ИмяПраваДоступа, ОбъектМетаданных); + ПараметрыДоступа = ПараметрыДоступа(ИмяПраваДоступа, ОбъектМетаданных, СписокПолей); ИначеЕсли ПользовательИБ = Неопределено Тогда - ЕстьПраво = ПравоДоступа(ИмяПраваДоступа, ОбъектМетаданных); + ПараметрыДоступа = ПараметрыДоступа(ИмяПраваДоступа, ОбъектМетаданных, СписокПолей); ИначеЕсли Пользователь = Неопределено Тогда УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - ЕстьПраво = ПравоДоступа(ИмяПраваДоступа, ОбъектМетаданных, ПользовательИБ); + ПараметрыДоступа = ПараметрыДоступа(ИмяПраваДоступа, ОбъектМетаданных, СписокПолей, ПользовательИБ); УстановитьПривилегированныйРежим(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь); Иначе - ЕстьПраво = ПравоДоступа(ИмяПраваДоступа, ОбъектМетаданных, ПользовательИБ); + ПараметрыДоступа = ПараметрыДоступа(ИмяПраваДоступа, ОбъектМетаданных, СписокПолей, ПользовательИБ); КонецЕсли; - Если Не ЕстьПраво Тогда + Если Не ПараметрыДоступа.Доступность Тогда Возврат Ложь; + ИначеЕсли Не ПараметрыДоступа.ОграничениеУсловием Тогда + Возврат Истина; КонецЕсли; Если УправлениеДоступомСлужебныйПовтИсп.ЭтоПользовательБезОграниченияДоступа(Пользователь) Тогда Возврат Истина; КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Если Не ПроизводительныйВариант Тогда Возврат ЧтениеДоступно(ПолноеИмя, ОбъектМетаданных, ОписаниеДанных, ВызыватьИсключение); КонецЕсли; @@ -10182,8 +10143,8 @@ ЗначениеПоляОбъекта = Null; Иначе ПоляЧерезТочку.Удалить(0); - ПараметрИзПамяти = "ВЫРАЗИТЬ(&Владелец КАК " + ОбъектМетаданныхПоТипу.ПолноеИмя() // @query-part-1 - + ")." + СтрСоединить(ПоляЧерезТочку, "."); + ПараметрИзПамяти = "ВЫРАЗИТЬ(&Владелец КАК " + ОбъектМетаданныхПоТипу.ПолноеИмя() + + ")." + СтрСоединить(ПоляЧерезТочку, "."); // @query-part-1 КонецЕсли; КонецЕсли; Запрос.Текст = СтрЗаменить(Запрос.Текст, @@ -10224,23 +10185,17 @@ КонецЕсли; Иначе НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); + ОтборЗаписей = ОтборЗаписейИзОписанияДанных(ОписаниеДанных, ПолноеИмя, НаборЗаписей); - Если ТипЗнч(ОписаниеДанных) = ТипЗнч(НаборЗаписей) Тогда - НаборЗаписей = ОписаниеДанных; - Иначе // КлючЗаписи. - Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл - ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; - ЭлементОтбора.Использование = Истина; - КонецЦикла; - КонецЕсли; - - ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос); + Замещение = Неопределено; + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(ОтборЗаписей, Запрос, Замещение); ТекстЗапроса = Запрос.Текст; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоИзмерениям", ОтборПоИзмерениям); ДоступРазрешен = Запрос.Выполнить().Пустой(); Если ДоступРазрешен И ТипЗнч(ОписаниеДанных) = ТипЗнч(НаборЗаписей) + И Не ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) И Не ПроверитьТолькоСтаруюВерсию Тогда СтараяВерсия = Ложь; @@ -10249,16 +10204,15 @@ Комбинации = ОписаниеДанных.Выгрузить(, ПолеВладельца); // ТаблицаЗначений Комбинации.Свернуть(ПолеВладельца); Запрос.УстановитьПараметр("КомбинацииЗначенийОпорныхПолей", Комбинации); - ТекстЗапросаПодготовкиКомбинаций = // @query-part-1 - "ВЫБРАТЬ ТекущаяТаблица." + ПолеВладельца + " + ТекстЗапросаПодготовкиКомбинаций = "ВЫБРАТЬ ТекущаяТаблица." + ПолеВладельца + " |ПОМЕСТИТЬ КомбинацииЗначенийОпорныхПолей - |ИЗ &КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица"; // @query-part-1 + |ИЗ &КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица"; // @query-part-1, @query-part-2 Иначе - ТекстЗапросаПодготовкиКомбинаций = // @query-part-1 - "ВЫБРАТЬ ТекущаяТаблица." + СтрСоединить(ПараметрыОграничения.ОпорныеПоля.Используемые, ", + ТекстЗапросаПодготовкиКомбинаций = "ВЫБРАТЬ ТекущаяТаблица." + + СтрСоединить(ПараметрыОграничения.ОпорныеПоля.Используемые, ", | ТекущаяТаблица.") + " |ПОМЕСТИТЬ КомбинацииЗначенийОпорныхПолей - |ИЗ &КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица"; // @query-part-1 + |ИЗ &КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица"; // @query-part-1, @query-part-2, @query-part-3 ОписаниеДанных.ДополнительныеСвойства.Вставить("УправлениеДоступомИдентификаторТранзакции", ИдентификаторТранзакции); ОбновитьКлючиДоступаКНаборуЗаписей(ОписаниеДанных, Ложь, Ложь, @@ -10268,8 +10222,8 @@ Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ОтборПоИзмерениям", "ИСТИНА"); ПолноеИмяРегистра = Метаданные.НайтиПоТипу(ТипЗнч(ОписаниеДанных)).ПолноеИмя(); Запрос.Текст = ТекстЗапросаПодготовкиКомбинаций + ОбщегоНазначения.РазделительПакетаЗапросов() - + СтрЗаменить(Запрос.Текст, ПолноеИмяРегистра + " КАК ТекущаяТаблица", // @query-part-1 @query-part-2 - "КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица"); + + СтрЗаменить(Запрос.Текст, ПолноеИмяРегистра + " КАК ТекущаяТаблица", + "КомбинацииЗначенийОпорныхПолей КАК ТекущаяТаблица"); // @query-part-1 @query-part-2 ДоступРазрешен = Запрос.Выполнить().Пустой(); КонецЕсли; @@ -10320,17 +10274,9 @@ ДанныеДляПредставления = СсылкаНаОбъект; Иначе НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); + ОтборЗаписей = ОтборЗаписейИзОписанияДанных(ОписаниеДанных, ПолноеИмя, НаборЗаписей); - Если ТипЗнч(ОписаниеДанных) = ТипЗнч(НаборЗаписей) Тогда - НаборЗаписей = ОписаниеДанных; - Иначе // КлючЗаписи. - Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл - ЭлементОтбора.Значение = ОписаниеДанных[ЭлементОтбора.Имя]; - ЭлементОтбора.Использование = Истина; - КонецЦикла; - КонецЕсли; - - ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос); + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(ОтборЗаписей, Запрос); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КОЛИЧЕСТВО(1) КАК КоличествоДанных @@ -10359,12 +10305,640 @@ Возврат Ложь; КонецЕсли; - СообщитьОбОшибкеДоступа(ДанныеДляПредставления, Ложь, Ложь, Ложь, Ложь); + СообщитьОбОшибкеДоступа(ДанныеДляПредставления, Истина, Ложь, Ложь, Ложь); Возврат Ложь; КонецФункции +// См. УправлениеДоступом.ПраваДоступаКДанным +Функция ПраваДоступаКДанным(ОписаниеДанных, ДляВнешнихПользователей, СоставПользователей) Экспорт + + Если ТипЗнч(ДляВнешнихПользователей) <> Тип("Булево") Тогда + Результат1 = ПраваДоступаКДанным(ОписаниеДанных, Ложь, СоставПользователей); + Результат2 = ПраваДоступаКДанным(ОписаниеДанных, Истина, СоставПользователей); + Для Каждого СтрокаТЗ Из Результат2 Цикл + ЗаполнитьЗначенияСвойств(Результат1.Добавить(), СтрокаТЗ); + КонецЦикла; + Возврат Результат1; + КонецЕсли; + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ТекстОшибки = НСтр("ru = 'Недостаточно прав доступа.'"); + ДляАдминистратора = НСтр("ru = 'Нужны полные права или привилегированный режим.'"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.НарушениеПравДоступа,, ДляАдминистратора); + КонецЕсли; + + Если Не УправлениеДоступом.ПроизводительныйВариант() Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Функция %1 не поддерживается в стандартном варианте ограничения доступа.'"), + "УправлениеДоступом.ПраваДоступаКДанным"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + + Если ТипЗнч(ОписаниеДанных) = Тип("Массив") Тогда + ЭлементДанных = ?(ОписаниеДанных.Количество() > 0, ОписаниеДанных[0], + "<" + НСтр("ru = 'Пустой массив'") + ">"); + Иначе + ЭлементДанных = ОписаниеДанных; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); + Если ОбъектМетаданных = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалась ссылка, ключ записи, набор записей или непустой массив ссылок одного типа. + |Передано значение: %3 (тип %4).'"), + "ОписаниеДанных", + "УправлениеДоступом.ПраваДоступаКДанным", + Строка(ЭлементДанных), + Строка(ТипЗнч(ОписаниеДанных))); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ПараметрыОграничения = ПараметрыОграничения(ПолноеИмя, + Новый УникальныйИдентификатор, ДляВнешнихПользователей); + + Если ДляВнешнихПользователей + И Не Константы.ИспользоватьВнешнихПользователей.Получить() Тогда + + Возврат ПодготовленныйРезультат(ПараметрыОграничения); + КонецЕсли; + + Запрос = Новый Запрос; + ДобавитьЗапросПроверяемыхПользователей(Запрос, ДляВнешнихПользователей, СоставПользователей); + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); + Запрос.УстановитьПараметр("ИдентификаторОбъектаМетаданных", + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных)); + + Если ПараметрыОграничения.ДоступЗапрещен + Или ПараметрыОграничения.ОграничениеОтключено Тогда + + ДобавитьЗапросПравПользователейНаТаблицу(Запрос, ПараметрыОграничения, + ?(ПараметрыОграничения.ДоступЗапрещен, "ТолькоПраваБезОграничения", "ПраваСОграничением"), + ?(СоставПользователей = Неопределено, "", "ПроверяемыеПользователи"), + "ПользователиСПравамиНаТаблицу"); + + ТекстЗапросаПравСДанными = Неопределено; + ДобавитьЗапросПроверяемыхОбъектов(Запрос, ОписаниеДанных, ПараметрыОграничения, ТекстЗапросаПравСДанными); + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаПравСДанными; + + Возврат ПодготовленныйРезультат(ПараметрыОграничения, Запрос); + КонецЕсли; + + ДобавитьЗапросПравПользователейНаТаблицу(Запрос, ПараметрыОграничения, + ?(ПараметрыОграничения.ОграничениеЧтенияОтключено, "ОграничениеЧтенияОтключено", "ТолькоПраваБезОграничения"), + ?(СоставПользователей = Неопределено, "", "ПроверяемыеПользователи"), + "ПользователиСПравамиБезОграниченияНаТаблицу"); + + ТекстЗапросаПравСДанными = ""; + ОтборПоИзмерениям = ""; + ДобавитьЗапросПроверяемыхОбъектов(Запрос, ОписаниеДанных, ПараметрыОграничения, + ТекстЗапросаПравСДанными, ОтборПоИзмерениям); + + ТекстЗапроса = ПараметрыОграничения.ТекстЗапросаПравПользователей; + + Если СоставПользователей <> Неопределено Тогда + ОтборПользователей = СтрШаблон( + "ВЫРАЗИТЬ(НаборыПользователей.Пользователь КАК %1) В + | (ВЫБРАТЬ + | ПроверяемыеПользователи.ПользовательСПравом + | ИЗ + | ПроверяемыеПользователи КАК ПроверяемыеПользователи)", + ?(ДляВнешнихПользователей, "Справочник.ВнешниеПользователи", "Справочник.Пользователи")); + Иначе + ОтборПользователей = "ИСТИНА"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПользователей1", + ТекстСОтступом(ОтборПользователей, " ")); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПользователей2", ТекстСОтступом( + СтрЗаменить(ОтборПользователей, "НаборыПользователей.Пользователь", "СоставыГруппПользователей.Пользователь"), + " ")); + + Если Не ПараметрыОграничения.ЭтоСсылочныйТип + И Не ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИзмерениям", + ТекстСОтступом(ОтборПоИзмерениям, " ")); + КонецЕсли; + + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; + + Запрос.УстановитьПараметр("РазрешенныйПустойНаборГруппДоступа", + УправлениеДоступомСлужебныйПовтИсп.РазрешенныйПустойНаборГруппДоступа()); + + Если ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + Запрос.УстановитьПараметр("ИдентификаторТаблицыНастроекПрав", + ПараметрыОграничения.ИдентификаторТаблицыНастроекПрав); + КонецЕсли; + + ДобавитьЗапросПользователейИзПравНаЭлементыДанных(Запрос, ПараметрыОграничения, СоставПользователей); + + ДобавитьЗапросПравПользователейНаТаблицу(Запрос, ПараметрыОграничения, + "ПраваСОграничением", + "ПользователиИзПравНаЭлементыДанных", + "ПользователиСПравамиСОграничениемНаТаблицу"); + + ДобавитьИтоговыйЗапросПравПользователей(Запрос, ПараметрыОграничения, ТекстЗапросаПравСДанными, ОтборПоИзмерениям); + + Возврат ПодготовленныйРезультат(ПараметрыОграничения, Запрос); + +КонецФункции + +// Для функций ДоступРазрешен, ЧтениеРазрешено, ПраваДоступаКДанным. +Функция ОтборЗаписейИзОписанияДанных(ОписаниеДанных, ПолноеИмяРегистра, НовыйПустойНаборЗаписей, + ПраваДоступаКДанным = Ложь) + + Если ТипЗнч(ОписаниеДанных) <> ТипЗнч(НовыйПустойНаборЗаписей) Тогда + // КлючЗаписи. + ОтборЗаписей = Новый Массив; + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмяРегистра); + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + ОтборЗаписей.Добавить(Новый Структура("Имя, Значение, Использование", + ОписаниеПоля.Имя, ОписаниеДанных[ОписаниеПоля.Имя], Истина)); + КонецЦикла; + Возврат ОтборЗаписей; + КонецЕсли; + + Если Не ПраваДоступаКДанным Тогда + Возврат ОписаниеДанных; + КонецЕсли; + + ЕстьОтбор = Ложь; + Для Каждого ЭлементОтбора Из ОписаниеДанных.Отбор Цикл + Если ЭлементОтбора.Использование Тогда + ЕстьОтбор = Истина; + КонецЕсли; + КонецЦикла; + + Возврат ?(ЕстьОтбор, ОписаниеДанных.Отбор, Неопределено); + +КонецФункции + +// Для функции ПраваДоступаКДанным. +Функция ПодготовленныйРезультат(ПараметрыОграничения, Запрос = Неопределено); + + ПолноеИмя = ПараметрыОграничения.Список; + + Если Запрос = Неопределено Тогда + ТипПользователь = Новый ОписаниеТипов("СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи"); + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ПользовательСПравом", ТипПользователь); + Результат.Колонки.Добавить("ПравоИзменение", Новый ОписаниеТипов("Булево")); + Если ПараметрыОграничения.ЭтоСсылочныйТип Тогда + ТипСсылки = ТипСсылкиПоПолномуИмениМетаданных(ПолноеИмя); + Результат.Колонки.Добавить("Ссылка", + Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипСсылки))); + Иначе + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмя); + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + Результат.Колонки.Добавить(ОписаниеПоля.Имя, ОписаниеПоля.Тип); + КонецЦикла; + КонецЕсли; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК ПользовательСПравом, + | ЛОЖЬ КАК ПравоИзменение, + | НЕОПРЕДЕЛЕНО КАК Ссылка + |ГДЕ + | ЛОЖЬ + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка), + | ЛОЖЬ, + | НЕОПРЕДЕЛЕНО КАК Ссылка + |ГДЕ + | ЛОЖЬ"; + Если Не ПараметрыОграничения.ЭтоСсылочныйТип Тогда + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмя); + ИзмеренияДляВыбора = Новый Массив; + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + ИзмеренияДляВыбора.Добавить("НЕОПРЕДЕЛЕНО"); // @query-part-1 + КонецЦикла; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "НЕОПРЕДЕЛЕНО КАК Ссылка", + СтрСоединить(ИзмеренияДляВыбора, ", + | ")); // @query-part-1 + КонецЕсли; + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.ТекстОбъединитьВсе() + ТекстЗапроса; + Результат = Запрос.Выполнить().Выгрузить(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ДобавитьЗапросПроверяемыхПользователей(Запрос, ДляВнешнихПользователей, СоставПользователей) + + Если СоставПользователей = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПроверяемыеПользователи.Пользователь КАК ПользовательСПравом + |ПОМЕСТИТЬ ПроверяемыеПользователи + |ИЗ + | &ПроверяемыеПользователи КАК ПроверяемыеПользователи + | + |ИНДЕКСИРОВАТЬ ПО + | Пользователь"; + + ПроверяемыеПользователи = Новый ТаблицаЗначений; + ТипПользователя = ?(ДляВнешнихПользователей, Тип("СправочникСсылка.ВнешниеПользователи"), + Тип("СправочникСсылка.Пользователи")); + ПроверяемыеПользователи.Колонки.Добавить("Пользователь", Новый ОписаниеТипов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипПользователя))); + + Для Каждого Пользователь Из СоставПользователей Цикл + Если ТипЗнч(Пользователь) = ТипПользователя И ЗначениеЗаполнено(Пользователь) Тогда + ПроверяемыеПользователи.Добавить().Пользователь = Пользователь; + КонецЕсли; + КонецЦикла; + + Запрос.УстановитьПараметр("ПроверяемыеПользователи", ПроверяемыеПользователи); + Запрос.Текст = Запрос.Текст + ?(ЗначениеЗаполнено(Запрос.Текст), + ОбщегоНазначения.РазделительПакетаЗапросов(), "") + ТекстЗапроса; + +КонецПроцедуры + +Процедура ДобавитьЗапросПравПользователейНаТаблицу(Запрос, ПараметрыОграничения, ВариантПрав, + ИмяВременнойТаблицыПроверяемыхПользователей = "", ИмяВременнойТаблицыРезультата = "") + + Если ИмяВременнойТаблицыПроверяемыхПользователей = "" Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | СписокПользователей.Ссылка КАК ПользовательСПравом, + | МАКСИМУМ(ТаблицыГруппДоступа.ПравоИзменение) КАК ПравоИзменение + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ПО (ГруппыДоступаПользователи.Ссылка = ТаблицыГруппДоступа.ГруппаДоступа) + | И (ТаблицыГруппДоступа.Таблица = &ИдентификаторОбъектаМетаданных) + | И (&ОтборПрав) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь) + | И (СоставыГруппПользователей.Используется) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК СписокПользователей + | ПО (СписокПользователей.Ссылка = СоставыГруппПользователей.Пользователь) + | И (СписокПользователей.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + | И (НЕ СписокПользователей.ПометкаУдаления) + | И (НЕ СписокПользователей.Недействителен) + | И (НЕ СписокПользователей.Служебный) + | + |СГРУППИРОВАТЬ ПО + | СписокПользователей.Ссылка"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ПроверяемыеПользователи.ПользовательСПравом КАК ПользовательСПравом, + | МАКСИМУМ(ТаблицыГруппДоступа.ПравоИзменение) КАК ПравоИзменение + |ИЗ + | ПроверяемыеПользователи КАК ПроверяемыеПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК СписокПользователей + | ПО (СписокПользователей.Ссылка = ПроверяемыеПользователи.ПользовательСПравом) + | И (СписокПользователей.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор) + | И (НЕ СписокПользователей.ПометкаУдаления) + | И (НЕ СписокПользователей.Недействителен) + | И (НЕ СписокПользователей.Служебный) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.Пользователь = СписокПользователей.Ссылка) + | И (СоставыГруппПользователей.Используется) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ПО (ГруппыДоступаПользователи.Пользователь = СоставыГруппПользователей.ГруппаПользователей) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ПО (ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступаПользователи.Ссылка) + | И (ТаблицыГруппДоступа.Таблица = &ИдентификаторОбъектаМетаданных) + | И (&ОтборПрав) + | + |СГРУППИРОВАТЬ ПО + | ПроверяемыеПользователи.ПользовательСПравом"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПроверяемыеПользователи КАК", + ИмяВременнойТаблицыПроверяемыхПользователей + " КАК"); // @query-part-1, @query-part-2 + КонецЕсли; + + Если ИмяВременнойТаблицыРезультата <> "" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КАК ПравоИзменение", + "КАК ПравоИзменение + |ПОМЕСТИТЬ " + ИмяВременнойТаблицыРезультата); // @query-part-1, @query-part-2 + КонецЕсли; + + Если ПараметрыОграничения.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "СписокПользователей.Недействителен", "ЛОЖЬ"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "СписокПользователей.Служебный", "ЛОЖЬ"); + КонецЕсли; + + Если ВариантПрав = "ПраваСОграничением" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПрав", "ИСТИНА"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "МАКСИМУМ(ТаблицыГруппДоступа.ПравоИзменение)", + "МАКСИМУМ(ТаблицыГруппДоступа.ПравоИзменениеБезОграничения)"); // @query-part-1, @query-part-2 + + Если ВариантПрав = "ОграничениеЧтенияОтключено" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПрав", "ИСТИНА"); + Иначе // ТолькоПраваБезОграничения + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПрав", + "ТаблицыГруппДоступа.ПравоЧтениеБезОграничения"); + КонецЕсли; + КонецЕсли; + + Запрос.Текст = Запрос.Текст + ?(ЗначениеЗаполнено(Запрос.Текст), + ОбщегоНазначения.РазделительПакетаЗапросов(), "") + ТекстЗапроса; + +КонецПроцедуры + +Процедура ДобавитьЗапросПроверяемыхОбъектов(Запрос, ОписаниеДанных, ПараметрыОграничения, + ТекстЗапросаПравСДанными = Неопределено, ОтборПоИзмерениям = Неопределено) + + ТекущаяТаблица = Новый ТаблицаЗначений; + ПолноеИмя = ПараметрыОграничения.Список; + + Если ПараметрыОграничения.ЭтоСсылочныйТип Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТекущаяТаблица.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ТекущаяТаблица + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица"; + + ТипСсылки = ТипСсылкиПоПолномуИмениМетаданных(ПолноеИмя); + ТекущаяТаблица.Колонки.Добавить("Ссылка", Новый ОписаниеТипов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипСсылки))); + + Если ТипЗнч(ОписаниеДанных) = Тип("Массив") Тогда + Для Счетчик = 1 По ОписаниеДанных.Количество() Цикл + ТекущаяТаблица.Добавить(); + КонецЦикла; + ТекущаяТаблица.ЗагрузитьКолонку(ОписаниеДанных, "Ссылка"); + Иначе + ТекущаяТаблица.Добавить().Ссылка = ОписаниеДанных; + КонецЕсли; + Запрос.УстановитьПараметр("ТекущаяТаблица", ТекущаяТаблица); + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; + + Если ТекстЗапросаПравСДанными = Неопределено Тогда + ТекстЗапросаПравСДанными = + "ВЫБРАТЬ + | ПраваПользователей.ПользовательСПравом КАК ПользовательСПравом, + | ПраваПользователей.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | ПользователиСПравамиНаТаблицу КАК ПраваПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущаяТаблица КАК ТекущаяТаблица + | ПО ИСТИНА"; + КонецЕсли; + + Возврат; + + КонецЕсли; + + НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя).СоздатьНаборЗаписей(); + ОтборЗаписей = ОтборЗаписейИзОписанияДанных(ОписаниеДанных, ПолноеИмя, НаборЗаписей, Истина); + + ОтборПоИзмерениям = ?(ОтборЗаписей = Неопределено, "ИСТИНА", + ОтборПоИзмерениямНабораЗаписей(ОтборЗаписей, Запрос)); + + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмя); + + Если ЗначениеЗаполнено(ОписаниеДанных) И ОтборЗаписей = Неопределено Тогда + ИзмеренияДляВыбора = Новый Массив; + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + ИзмеренияДляВыбора.Добавить(СтрШаблон("ТекущаяТаблица.%1 КАК %1", ОписаниеПоля.Имя)); // @query-part-1 + КонецЦикла; + ТекстЗапросаКлючейЗаписей = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТекущаяТаблица.Поле1 КАК Поле1 + |ПОМЕСТИТЬ КлючиЗаписейРегистра + |ИЗ + | &КлючиЗаписейРегистра КАК ТекущаяТаблица"; + ТекстЗапросаКлючейЗаписей = СтрЗаменить(ТекстЗапросаКлючейЗаписей, + "ТекущаяТаблица.Поле1 КАК Поле1", + СтрСоединить(ИзмеренияДляВыбора, ", + | ")); // @query-part-1 + Запрос.УстановитьПараметр("КлючиЗаписейРегистра", + ОписаниеДанных.Выгрузить(, ОписаниеКлючаЗаписи.СписокПолей)); + + ОтборПоИзмерениям = + "ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | КлючиЗаписейРегистра КАК КлючиЗаписейРегистра + | ГДЕ + | КлючиЗаписейРегистра.Поле1 = ТекущаяТаблица.Поле1)"; // @query-part-1 + УсловияОтбора = Новый Массив; + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + УсловияОтбора.Добавить(СтрШаблон("КлючиЗаписейРегистра.%1 = ТекущаяТаблица.%1", ОписаниеПоля.Имя)); + КонецЦикла; + ОтборПоИзмерениям = СтрЗаменить(ОтборПоИзмерениям, + "КлючиЗаписейРегистра.Поле1 = ТекущаяТаблица.Поле1", + СтрСоединить(УсловияОтбора, " + | И ")); // @query-part-1, @query-part-2 + КонецЕсли; + + Если ТекстЗапросаПравСДанными = Неопределено Тогда + ТекстЗапросаПравСДанными = + "ВЫБРАТЬ + | ПраваПользователей.ПользовательСПравом КАК ПользовательСПравом, + | ПраваПользователей.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Поле1 КАК Поле1 + |ИЗ + | ПользователиСПравамиНаТаблицу КАК ПраваПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ТаблицаРегистра КАК ТекущаяТаблица + | ПО (&ОтборПоИзмерениям)"; + + ИначеЕсли ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + ОпорноеПолеВладельца = СтрРазделить(ПараметрыОграничения.ПолеВладельца.Имя, ".").Получить(0); + ТекстЗапросаВладельца = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТекущаяТаблица.ОпорноеПолеВладельца КАК Ссылка + |ПОМЕСТИТЬ ТекущаяТаблица + |ИЗ + | &ТаблицаРегистра КАК ТекущаяТаблица + |ГДЕ + | &ОтборПоИзмерениям"; + ТекстЗапросаВладельца = СтрЗаменить(ТекстЗапросаВладельца, "ОпорноеПолеВладельца", ОпорноеПолеВладельца); + ТекстЗапросаВладельца = СтрЗаменить(ТекстЗапросаВладельца, "&ТаблицаРегистра", ПолноеИмя); + ТекстЗапросаВладельца = СтрЗаменить(ТекстЗапросаВладельца, "&ОтборПоИзмерениям", ОтборПоИзмерениям); + + ТекстЗапросаПравСДанными = + "ВЫБРАТЬ + | ПраваПользователей.ПользовательСПравом КАК ПользовательСПравом, + | ПраваПользователей.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Поле1 КАК Поле1 + |ИЗ + | ПраваПользователейНаЗаписиРегистраПоВладельцу КАК ПраваПользователей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ТаблицаРегистра КАК ТекущаяТаблица + | ПО (ТекущаяТаблица.ОпорноеПолеВладельца = ПраваПользователей.Ссылка) + | И (&ОтборПоИзмерениям)"; + ТекстЗапросаПравСДанными = СтрЗаменить(ТекстЗапросаПравСДанными, + "ОпорноеПолеВладельца", ОпорноеПолеВладельца); + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстЗапросаПравСДанными) Тогда + ИзмеренияДляВыбора = Новый Массив; + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + УточненноеИмя = УточненноеИмяПоляКлючаЗаписиДляВыбораПравДоступаКДанным(ОписаниеПоля.Имя); + ИзмеренияДляВыбора.Добавить(СтрШаблон("ТекущаяТаблица.%1 КАК %2", ОписаниеПоля.Имя, УточненноеИмя)); // @query-part-1 + КонецЦикла; + ТекстЗапросаПравСДанными = СтрЗаменить(ТекстЗапросаПравСДанными, "&ТаблицаРегистра", ПолноеИмя); + ТекстЗапросаПравСДанными = СтрЗаменить(ТекстЗапросаПравСДанными, "&ОтборПоИзмерениям", + ТекстСОтступом(ОтборПоИзмерениям, " ")); + ТекстЗапросаПравСДанными = СтрЗаменить(ТекстЗапросаПравСДанными, + "ТекущаяТаблица.Поле1 КАК Поле1", + СтрСоединить(ИзмеренияДляВыбора, ", + | ")); // @query-part-1 + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстЗапросаКлючейЗаписей) Тогда + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаКлючейЗаписей; + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстЗапросаВладельца) Тогда + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаВладельца; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьЗапросПользователейИзПравНаЭлементыДанных(Запрос, ПараметрыОграничения, СоставПользователей) + + Если СоставПользователей = Неопределено Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВсеПользователиИзПрав.ПользовательСПравом КАК ПользовательСПравом + |ПОМЕСТИТЬ ПользователиИзПравНаЭлементыДанных + |ИЗ + | (ВЫБРАТЬ + | ВЫРАЗИТЬ(ПользователиСПравами.ПользовательСПравом КАК Справочник.Пользователи) КАК ПользовательСПравом + | ИЗ + | ПользователиСПравамиНаЭлементыДанных КАК ПользователиСПравами + | ГДЕ + | ТИПЗНАЧЕНИЯ(ПользователиСПравами.ПользовательСПравом) = ТИП(Справочник.Пользователи) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | СписокПользователей.Ссылка + | ИЗ + | ПользователиСПравамиНаЭлементыДанных КАК ПользователиСПравами + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК СписокПользователей + | ПО (ПользователиСПравами.ПользовательСПравом = &РазрешенныйПустойНаборГруппДоступа)) КАК ВсеПользователиИзПрав"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВсеПользователиИзПрав.ПользовательСПравом КАК ПользовательСПравом + |ПОМЕСТИТЬ ПользователиИзПравНаЭлементыДанных + |ИЗ + | (ВЫБРАТЬ + | ВЫРАЗИТЬ(ПользователиСПравами.ПользовательСПравом КАК Справочник.Пользователи) КАК ПользовательСПравом + | ИЗ + | ПользователиСПравамиНаЭлементыДанных КАК ПользователиСПравами + | ГДЕ + | ТИПЗНАЧЕНИЯ(ПользователиСПравами.ПользовательСПравом) = ТИП(Справочник.Пользователи) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ПроверяемыеПользователи.ПользовательСПравом + | ИЗ + | ПользователиСПравамиНаЭлементыДанных КАК ПользователиСПравами + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПроверяемыеПользователи КАК ПроверяемыеПользователи + | ПО (ПользователиСПравами.ПользовательСПравом = &РазрешенныйПустойНаборГруппДоступа)) КАК ВсеПользователиИзПрав"; + КонецЕсли; + + Если ПараметрыОграничения.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); + КонецЕсли; + + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; + +КонецПроцедуры + +Процедура ДобавитьИтоговыйЗапросПравПользователей(Запрос, ПараметрыОграничения, + ТекстЗапросаПравСДанными, ОтборПоИзмерениям) + + ТекстЗапроса = + "ВЫБРАТЬ + | ПраваПользователей.ПользовательСПравом КАК ПользовательСПравом, + | МАКСИМУМ(ПраваПользователей.ПравоИзменение) КАК ПравоИзменение, + | ПраваПользователей.Ссылка КАК Ссылка + |ИЗ + | (ВЫБРАТЬ + | ПраваНаТаблицу.ПользовательСПравом КАК ПользовательСПравом, + | ПраваНаТаблицу.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + | ИЗ + | ТекущаяТаблица КАК ТекущаяТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПользователиСПравамиБезОграниченияНаТаблицу КАК ПраваНаТаблицу + | ПО (&ОтборПоИзмерениям) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ПраваНаТаблицу.ПользовательСПравом, + | ПраваНаТаблицу.ПравоИзменение + | И ТекущаяТаблица.ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + | ИЗ + | ПользователиСПравамиСОграничениемНаТаблицу КАК ПраваНаТаблицу + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПользователиСПравамиНаЭлементыДанных КАК ТекущаяТаблица + | ПО (ТекущаяТаблица.ПользовательСПравом = ПраваНаТаблицу.ПользовательСПравом) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ПраваНаТаблицу.ПользовательСПравом, + | ПраваНаТаблицу.ПравоИзменение + | И ТекущаяТаблица.ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + | ИЗ + | ПользователиСПравамиСОграничениемНаТаблицу КАК ПраваНаТаблицу + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПользователиСПравамиНаЭлементыДанных КАК ТекущаяТаблица + | ПО (ТекущаяТаблица.ПользовательСПравом = &РазрешенныйПустойНаборГруппДоступа)) КАК ПраваПользователей + | + |СГРУППИРОВАТЬ ПО + | ПраваПользователей.Ссылка, + | ПраваПользователей.ПользовательСПравом"; + + Если Не ПараметрыОграничения.ЭтоСсылочныйТип + И ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПраваПользователей.Ссылка КАК Ссылка", + "ПраваПользователей.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ПраваПользователейНаЗаписиРегистраПоВладельцу"); // @query-part-1, @query-part-2 + + ТекстЗапроса = ТекстЗапроса + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаПравСДанными; + + ИначеЕсли Не ПараметрыОграничения.ЭтоСсылочныйТип Тогда + + УстановитьПоляИзмеренийДляВыбораИГруппировки(ТекстЗапроса, ПараметрыОграничения.Список); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "ТекущаяТаблица КАК ТекущаяТаблица", + ПараметрыОграничения.Список + " КАК ТекущаяТаблица"); // @query-part-1, @query-part-2 + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИзмерениям", + ТекстСОтступом(ОтборПоИзмерениям, " ")); + КонецЕсли; + + Если ПараметрыОграничения.ЭтоСсылочныйТип + Или ПараметрыОграничения.ИспользуетсяОграничениеПоВладельцу Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоИзмерениям", "ИСТИНА"); + КонецЕсли; + + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапроса; + +КонецПроцедуры + // Требуется, как начальная максимальная дата при планировании начального обновления доступа. // // Возвращаемое значение: @@ -10611,6 +11185,8 @@ КонецФункции +#КонецОбласти + #Область ПроверкаДоступаПриИзменении // Для процедур ПроверитьДоступПередЗаписьюИсточника и др. @@ -10684,8 +11260,10 @@ Источник.ДополнительныеСвойства.Вставить("УправлениеДоступомИдентификаторТранзакции", Новый УникальныйИдентификатор); - ЕстьСтараяВерсия = ЭтоНаборЗаписей И Замещение - Или Не ЭтоНаборЗаписей И Не Источник.ЭтоНовый(); + ЕстьСтараяВерсия = Не ЭтоНаборЗаписей И Не Источник.ЭтоНовый() + Или ЭтоНаборЗаписей + И Замещение <> Ложь + И Не ОбщегоНазначения.ЭтоДобавлениеНабораЗаписей(Замещение); Если ЕстьСтараяВерсия Тогда ЗапомнитьДанныеВлияющиеНаЗависимыеКлючиДоступа(Источник, ЭтоНаборЗаписей, Замещение); @@ -10696,7 +11274,7 @@ КонецЕсли; Если ЭтоНаборЗаписей Тогда - ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, ЭтоПолноправныйПользователь); + ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, Замещение, ЭтоПолноправныйПользователь); КонецЕсли; КонецПроцедуры @@ -10802,7 +11380,7 @@ Запрос = Новый Запрос; Если ЭтоНаборЗаписей Тогда - ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос); + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос, Замещение); Запрос.Текст = СтрЗаменить(СвойстваСпискаКакВедущего.ПоЗначениямПолей.ТекстЗапроса, "&ОтборПоИзмерениям", ОтборПоИзмерениям); Иначе @@ -10816,31 +11394,26 @@ КонецПроцедуры -// Для процедур ЗапомнитьДанныеВлияющиеНаЗависимыеКлючиДоступа, ПроверитьДоступКНаборуЗаписей. -Функция ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос, ЗапросНовыхКомбинаций = Неопределено) +// Для процедур ЗапомнитьДанныеВлияющиеНаЗависимыеКлючиДоступа, ОбновитьКлючиДоступаКНаборуЗаписей и +// функций ДоступРазрешен, ЧтениеДоступно. +// +Функция ОтборПоИзмерениямНабораЗаписей(НаборЗаписей, Запрос, Замещение = Неопределено, ЗапросНовыхКомбинаций = Неопределено) - ОтборПоИзмерениям = ""; + Параметры = ОбщегоНазначения.НовыеПараметрыОтбораЗаписейНабораИзБазыДанных(); + Параметры.ПрефиксИменПолейВПараметрах = "ЗначениеПоля"; - Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл - Если Не ЭлементОтбора.Использование Тогда - Продолжить; - КонецЕсли; - ОтборПоИзмерениям = ОтборПоИзмерениям + ?(ОтборПоИзмерениям = "", "", " - | И ") + "ТекущаяТаблица." + ЭлементОтбора.Имя + " = &ЗначениеПоля" + ЭлементОтбора.Имя; // @query-part-1 - + ОтборЗаписей = ОбщегоНазначения.ОтборЗаписейНабораИзБазыДанных(НаборЗаписей, Замещение,, Параметры); + + Для Каждого КлючИЗначение Из ОтборЗаписей.ПараметрыЗапроса Цикл Если Запрос <> Неопределено Тогда - Запрос.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЕсли; Если ЗапросНовыхКомбинаций <> Неопределено Тогда - ЗапросНовыхКомбинаций.УстановитьПараметр("ЗначениеПоля" + ЭлементОтбора.Имя, ЭлементОтбора.Значение); + ЗапросНовыхКомбинаций.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЕсли; КонецЦикла; - Если ОтборПоИзмерениям = "" Тогда - ОтборПоИзмерениям = "ИСТИНА"; - КонецЕсли; - - Возврат ОтборПоИзмерениям; + Возврат ОтборЗаписей.УсловиеЗапроса; КонецФункции @@ -11044,8 +11617,13 @@ Процедура ПроверитьДоступКНаборуЗаписей(Источник, ПередЗаписью, Замещение, ЭтоПолноправныйПользователь, ИдентификаторТранзакции, ПараметрыОграничения, ПараметрыОграниченияДополнительные) - Если ПередЗаписью И (Не Замещение Или ЭтоПолноправныйПользователь) - Или Не ПередЗаписью И Источник.Количество() = 0 Тогда + Если ПередЗаписью + И (Замещение = Ложь + Или ОбщегоНазначения.ЭтоДобавлениеНабораЗаписей(Замещение)) + Или Не ПередЗаписью + И (Источник.Количество() = 0 + Или ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение)) Тогда + Возврат; КонецЕсли; @@ -11107,8 +11685,10 @@ ЗапросНовыхКомбинаций = Новый Запрос; КонецЕсли; - Если Замещение Тогда - ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос, ЗапросНовыхКомбинаций); + Если Замещение <> Ложь + И Не ОбщегоНазначения.ЭтоДобавлениеНабораЗаписей(Замещение) Тогда + + ОтборПоИзмерениям = ОтборПоИзмерениямНабораЗаписей(Источник, Запрос, Замещение, ЗапросНовыхКомбинаций); Иначе КомбинацииЗначенийОпорныхПолей = КомбинацииЗначенийОпорныхПолей(Источник, ОтборПоИзмерениям, ПараметрыОграничения); @@ -11135,9 +11715,11 @@ КонецПроцедуры // Для процедуры ПроверитьДоступПередЗаписьюИсточника. -Процедура ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, ЭтоПолноправныйПользователь) +Процедура ЗаписатьКлючиДоступаНовыхКомбинацийЗначенийОпорныхПолейПередЗаписью(Источник, Замещение, ЭтоПолноправныйПользователь) - Если ЭтоПолноправныйПользователь Или Источник.Количество() = 0 Тогда + Если ЭтоПолноправныйПользователь + Или Источник.Количество() = 0 + Или ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда Возврат; КонецЕсли; @@ -17213,8 +17795,8 @@ "РегистрСведений.ОбновлениеКлючейДоступаКДанным", "РегистрСведений.ОбновлениеКлючейДоступаПользователей"); Запрос.Текст = СтрЗаменить(Запрос.Текст, ", - | КлючиУникальности.ДатаПоследнегоОбновленногоЭлемента КАК ДатаПоследнегоОбновленногоЭлемента", // @query-part-1 - ""); + | КлючиУникальности.ДатаПоследнегоОбновленногоЭлемента КАК ДатаПоследнегоОбновленногоЭлемента", + ""); // @query-part-1 КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); @@ -17235,6 +17817,8 @@ Иначе ПланОбновления = СлужебныйНаборЗаписей(РегистрыСведений.ОбновлениеКлючейДоступаКДанным); КонецЕсли; + ПланОбновления.Отбор.Список.Установить(ИдентификаторСписка); + ПланОбновления.Отбор.ДляВнешнихПользователей.Установить(ДляВнешнихПользователей); Если ПараметрыОбновления.Список = СписокДляПланированияОбновленияКэшаРасчетаПрав() Тогда ОбработатьПланОбновленияКэшаРасчетаПрав(Выгрузка); @@ -17292,13 +17876,11 @@ ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ДляВнешнихПользователей); ЭлементБлокировки.УстановитьЗначение("КлючУникальности", ПустойИдентификатор); - Для Каждого Строка Из Выгрузка Цикл - ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистра); - ЭлементБлокировки.УстановитьЗначение("Список", ИдентификаторСписка); - ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ДляВнешнихПользователей); - ЭлементБлокировки.УстановитьЗначение("КлючУникальности", Строка.КлючУникальности); - Прервать; - КонецЦикла; + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистра); + ЭлементБлокировки.УстановитьЗначение("Список", ИдентификаторСписка); + ЭлементБлокировки.УстановитьЗначение("ДляВнешнихПользователей", ДляВнешнихПользователей); + ЭлементБлокировки.ИсточникДанных = Выгрузка; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("КлючУникальности", "КлючУникальности"); МаксимальнаяДата = МаксимальнаяДата(); СвойстваКлючаДанных = НачальныйЭлемент(ПараметрыОбновления, "НетДанных"); @@ -17376,11 +17958,9 @@ РазмерЗадания = 3; КонецЕсли; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1000", "ВЫБРАТЬ ПЕРВЫЕ 1"); // @query-part-1 @query-part-2 + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1000", "ВЫБРАТЬ ПЕРВЫЕ 1"); // @query-part-1, @query-part-2 ЗаданияУдалены = Ложь; - ПланОбновления.Отбор.Список.Установить(ИдентификаторСписка); - ПланОбновления.Отбор.ДляВнешнихПользователей.Установить(ДляВнешнихПользователей); ПланОбновления.Отбор.КлючУникальности.Установить(ПустойИдентификатор); НачатьТранзакцию(); @@ -17423,11 +18003,31 @@ // Для процедуры ПодготовитьПланОбновления. Процедура ОчиститьЗагруженныеЗаписи(ПланОбновления, Выгрузка) + Если Не ЗначениеЗаполнено(Выгрузка) Тогда + Возврат; + КонецЕсли; + ПланОбновления.Очистить(); - Для Каждого Строка Из Выгрузка Цикл - ПланОбновления.Отбор.КлючУникальности.Установить(Строка.КлючУникальности); - ПланОбновления.Записать(); - КонецЦикла; + + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено; + + Если ПакетныйРежим Тогда + Выгрузка.Колонки.Добавить("Список"); + Выгрузка.Колонки.Добавить("ДляВнешнихПользователей"); + Выгрузка.ЗаполнитьЗначения(ПланОбновления.Отбор.Список.Значение, "Список"); + Выгрузка.ЗаполнитьЗначения(ПланОбновления.Отбор.ДляВнешнихПользователей.Значение, "ДляВнешнихПользователей"); + ПланОбновления.Загрузить(Выгрузка); + ПланОбновления.Отбор.Список.Использование = Ложь; + ПланОбновления.Отбор.ДляВнешнихПользователей.Использование = Ложь; + ПланОбновления.Отбор.КлючУникальности.Использование = Ложь; + ПланОбновления.Записать(РежимУдаления); + Иначе + Для Каждого Строка Из Выгрузка Цикл + ПланОбновления.Отбор.КлючУникальности.Установить(Строка.КлючУникальности); + ПланОбновления.Записать(); + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -18374,11 +18974,11 @@ ЗапросыПакета.Добавить(СтрЗаменить(ЗапросыДанных[0], " |ИЗ - | ", // @query-part-1 + | ", " |ПОМЕСТИТЬ ТекущийСписокПоВедущимОбъектам |ИЗ - | ")); // @query-part-1 + | ")); // @query-part-1, @query-part-2 Иначе ТекстыЗапросов = СтрСоединить(ЗапросыДанных, " @@ -19425,10 +20025,10 @@ КонецЕсли; ТекстЗапросаВыбораПорцииДляБлокировки = СтрЗаменить(ТекстЗапросаВыбораПорцииДляБлокировки, - "ТИП(Справочник.ГруппыДоступа)", "ТИП(Справочник." + ИмяСправочникаГрупп + ")"); // @query-part-1 @query-part-2 + "ТИП(Справочник.ГруппыДоступа)", "ТИП(Справочник." + ИмяСправочникаГрупп + ")"); // @query-part-1, @query-part-2 ТекстЗапросаВыбораПорцииДляОбновления = СтрЗаменить(ТекстЗапросаВыбораПорцииДляОбновления, - "ТИП(Справочник.ГруппыДоступа)", "ТИП(Справочник." + ИмяСправочникаГрупп + ")"); // @query-part-1 @query-part-2 + "ТИП(Справочник.ГруппыДоступа)", "ТИП(Справочник." + ИмяСправочникаГрупп + ")"); // @query-part-1, @query-part-2 ТекстЗапросаВыбораПорцииДляОбновления = СтрЗаменить(ТекстЗапросаВыбораПорцииДляОбновления, "СтарыеДанные.НаборГруппДоступа", "СтарыеДанные." + ИмяПоляНабораГрупп); @@ -19448,6 +20048,10 @@ ТекстЗапросаВыбораПорцииДляОбновления = СтрЗаменить(ТекстЗапросаВыбораПорцииДляОбновления, "&УсловиеОтбораПравГрупп", ?(ИмяСправочникаГрупп = "ГруппыДоступа", "ИСТИНА", "СтарыеДанные.ЭтоПраваНабораГрупп")); + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + Пока Истина Цикл Запрос = Новый Запрос; Запрос.Текст = ТекстЗапросаВыбораПорцииДляБлокировки; @@ -19459,24 +20063,23 @@ Прервать; КонецЕсли; - КлючиДоступа = Новый Массив; + КлючиДоступа = Выгрузка.Скопировать(Новый Массив, "КлючДоступа"); ПорцииКлючейДоступа = Новый Массив; Для Каждого Строка Из Выгрузка Цикл Если КлючиДоступа.Количество() > 100 Тогда ПорцииКлючейДоступа.Добавить(КлючиДоступа); - КлючиДоступа = Новый Массив; + КлючиДоступа = Выгрузка.Скопировать(Новый Массив, "КлючДоступа"); КонецЕсли; - КлючиДоступа.Добавить(Строка.КлючДоступа); + КлючиДоступа.Добавить().КлючДоступа = Строка.КлючДоступа; КонецЦикла; ПорцииКлючейДоступа.Добавить(КлючиДоступа); Для Каждого КлючиДоступа Из ПорцииКлючейДоступа Цикл Блокировка = Новый БлокировкаДанных; - Для Каждого КлючДоступа Из КлючиДоступа Цикл - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистраПрав); - ЭлементБлокировки.УстановитьЗначение(ИмяПоляНабораГрупп, НаборГруппДоступа); - ЭлементБлокировки.УстановитьЗначение("КлючДоступа", КлючДоступа); - КонецЦикла; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистраПрав); + ЭлементБлокировки.УстановитьЗначение(ИмяПоляНабораГрупп, НаборГруппДоступа); + ЭлементБлокировки.ИсточникДанных = КлючиДоступа; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("КлючДоступа", "КлючДоступа"); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ЭлементБлокировки = Блокировка.Добавить("Справочник.НаборыГруппДоступа"); @@ -19489,9 +20092,13 @@ Запрос.Текст = ТекстЗапросаВыбораПорцииДляОбновления; УстановитьУточнениеПланаЗапроса(Запрос.Текст, Истина); Запрос.УстановитьПараметр("НаборГруппДоступа", НаборГруппДоступа); - Запрос.УстановитьПараметр("КлючиДоступа", КлючиДоступа); + Запрос.УстановитьПараметр("КлючиДоступа", КлючиДоступа.ВыгрузитьКолонку("КлючДоступа")); НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраПрав]); + Если Не ПакетныйРежим Тогда + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляНабораГрупп]; // ЭлементОтбора + ЭлементОтбора.Установить(НаборГруппДоступа); + КонецЕсли; НачатьТранзакцию(); Попытка @@ -19501,19 +20108,33 @@ УдалениеЗавершено = Ложь; Пока Выборка.Следующий() Цикл - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляНабораГрупп]; // ЭлементОтбора - ЭлементОтбора.Установить(НаборГруппДоступа); - НаборЗаписей.Отбор.КлючДоступа.Установить(Выборка.КлючДоступа); + Если Не ПакетныйРежим Тогда + НаборЗаписей.Отбор.КлючДоступа.Установить(Выборка.КлючДоступа); + КонецЕсли; Если Не УдалениеЗавершено И Выборка.ВидИзмененияСтроки = 1 Тогда УдалениеЗавершено = Истина; - ОднаЗапись = НаборЗаписей.Добавить(); - ОднаЗапись[ИмяПоляНабораГрупп] = НаборГруппДоступа; + Если Не ПакетныйРежим Тогда + ОднаЗапись = НаборЗаписей.Добавить(); + ОднаЗапись[ИмяПоляНабораГрупп] = НаборГруппДоступа; + ИначеЕсли ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимУдаления); + НаборЗаписей.Очистить(); + КонецЕсли; КонецЕсли; - Если УдалениеЗавершено Тогда - ЗаполнитьЗначенияСвойств(ОднаЗапись, Выборка); + Если Не ПакетныйРежим Тогда + Если УдалениеЗавершено Тогда + ЗаполнитьЗначенияСвойств(ОднаЗапись, Выборка); + КонецЕсли; + НаборЗаписей.Записать(); + Иначе + Запись = НаборЗаписей.Добавить(); + Запись[ИмяПоляНабораГрупп] = НаборГруппДоступа; + ЗаполнитьЗначенияСвойств(Запись, Выборка); КонецЕсли; - НаборЗаписей.Записать(); КонецЦикла; + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(?(УдалениеЗавершено, РежимСлияния, РежимУдаления)); + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение @@ -20006,33 +20627,33 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); КонецЕсли; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)", // @query-part-1 - "ЗНАЧЕНИЕ(Справочник." + ИмяСправочникаГрупп + ".ПустаяСсылка)"); // @query-part-1 + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)", + "ЗНАЧЕНИЕ(Справочник." + ИмяСправочникаГрупп + ".ПустаяСсылка)"); // @query-part-1, @query-part-2 Запрос.Текст = СтрЗаменить(Запрос.Текст, "НовыйНаборГруппДоступа", "Новый" + ИмяПоляНабора); Запрос.Текст = СтрЗаменить(Запрос.Текст, "РазрешенныйНаборГруппДоступа", "Разрешенный" + ИмяПоляНабора); Запрос.Текст = СтрЗаменить(Запрос.Текст, - " НомераГрупп.ЧастьНомера1 КАК ЧастьНомера1", // @query-part-1 + " НомераГрупп.ЧастьНомера1 КАК ЧастьНомера1", " НомераГрупп." + СтрСоединить(ИменаЧастейНомера, ", - | НомераГрупп.")); + | НомераГрупп.")); // @query-part-1 Запрос.Текст = СтрЗаменить(Запрос.Текст, - " СУММА(ЕСТЬNULL(НомераГрупп.ЧастьНомера1, -1234567)) >= 0", // @query-part-1 @query-part-2 @query-part-3 + " СУММА(ЕСТЬNULL(НомераГрупп.ЧастьНомера1, -1234567)) >= 0", " СУММА(ЕСТЬNULL(НомераГрупп." + СтрСоединить(ИменаЧастейНомера, ", -1234567)) >= 0 - | И СУММА(ЕСТЬNULL(НомераГрупп.") + ", -1234567)) >= 0"); + | И СУММА(ЕСТЬNULL(НомераГрупп.") + ", -1234567)) >= 0"); // @query-part-1, @query-part-2, @query-part-3 Запрос.Текст = СтрЗаменить(Запрос.Текст, " СУММА(ЕСТЬNULL(НомераГрупп.ЧастьНомера1, -1234567)) - |", // @query-part-1 @query-part-2 @query-part-3 + |", " СУММА(ЕСТЬNULL(НомераГрупп." + СтрСоединить(ИменаЧастейНомера, ", -1234567)), | СУММА(ЕСТЬNULL(НомераГрупп.") + ", -1234567)) - |"); + |"); // @query-part-1, @query-part-2, @query-part-3 Запрос.Текст = СтрЗаменить(Запрос.Текст, - " НовыеНаборы.ЧастьНомера1 КАК ЧастьНомера1", // @query-part-1 + " НовыеНаборы.ЧастьНомера1 КАК ЧастьНомера1", " НовыеНаборы." + СтрСоединить(ИменаЧастейНомера, ", - | НовыеНаборы.")); + | НовыеНаборы.")); // @query-part-1 УсловиеОтбора = ""; УсловиеСоединения = ""; @@ -20040,13 +20661,13 @@ ПоляСуммированияНовых = ""; Для Каждого ИмяЧастиНомера Из ИменаЧастейНомера Цикл УсловиеОтбора = УсловиеОтбора + ?(УсловиеОтбора = "", ""," - | ИЛИ ") + "СтарыеНаборы." + ИмяЧастиНомера + " <> ЕСТЬNULL(НовыеНаборы." + ИмяЧастиНомера + ", -1234567)"; // @query-part-1 @query-part-3 + | ИЛИ ") + "СтарыеНаборы." + ИмяЧастиНомера + " <> ЕСТЬNULL(НовыеНаборы." + ИмяЧастиНомера + ", -1234567)"; // @query-part-3, @query-part-5 УсловиеСоединения = УсловиеСоединения + ?(УсловиеСоединения = "", "", " - | И ") + "(СуществующиеНаборы." + ИмяЧастиНомера + " = НовыеНаборы." + ИмяЧастиНомера + ")"; // @query-part-1 + | И ") + "(СуществующиеНаборы." + ИмяЧастиНомера + " = НовыеНаборы." + ИмяЧастиНомера + ")"; // @query-part-3 ПоляСуммированияСтарых = ПоляСуммированияСтарых + ?(ПоляСуммированияСтарых = "", "", ", - | ") + "СУММА(ЕСТЬNULL(НомераГрупп." + ИмяЧастиНомера + ", -1234567)) КАК " + ИмяЧастиНомера; // @query-part-2 @query-part-3 + | ") + "СУММА(ЕСТЬNULL(НомераГрупп." + ИмяЧастиНомера + ", -1234567)) КАК " + ИмяЧастиНомера; // @query-part-4, @query-part-5 ПоляСуммированияНовых = ПоляСуммированияНовых + ?(ПоляСуммированияНовых = "", "", ", - | ") + "СУММА(НомераГрупп." + ИмяЧастиНомера + ") КАК " + ИмяЧастиНомера; // @query-part-2 @query-part-3 + | ") + "СУММА(НомераГрупп." + ИмяЧастиНомера + ") КАК " + ИмяЧастиНомера; // @query-part-4, @query-part-5 КонецЦикла; Запрос.Текст = СтрЗаменить(Запрос.Текст, @@ -20625,7 +21246,7 @@ КонецПроцедуры -// Для процедуры УдалитьУстаревшиеНаборыВСправочнике. +// Для процедуры УдалитьУстаревшиеНаборыВСправочнике, ОчиститьПраваНесуществующихНаборовГруппДоступа. Процедура УдалитьЗаписиРегистраДляНабора(Набор, ИмяРегистраСведений, ИмяПоляНабора) Запрос = Новый Запрос; @@ -20641,9 +21262,11 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "КлючиДоступаНаборовГруппДоступа", ИмяРегистраСведений); Запрос.Текст = СтрЗаменить(Запрос.Текст, "НаборГруппДоступа", ИмяПоляНабора); - НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраСведений]); ПолноеИмяРегистраСведений = "РегистрСведений." + ИмяРегистраСведений; + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено; + Пока Истина Цикл Выгрузка = Запрос.Выполнить().Выгрузить(); Если Выгрузка.Количество() = 0 Тогда @@ -20651,21 +21274,33 @@ КонецЕсли; Блокировка = Новый БлокировкаДанных; - Для Каждого Строка Из Выгрузка Цикл - ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистраСведений); - ЭлементБлокировки.УстановитьЗначение(ИмяПоляНабора, Набор); - ЭлементБлокировки.УстановитьЗначение("КлючДоступа", Строка.КлючДоступа); - КонецЦикла; + ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистраСведений); + ЭлементБлокировки.УстановитьЗначение(ИмяПоляНабора, Набор); + ЭлементБлокировки.ИсточникДанных = Выгрузка; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("КлючДоступа", "КлючДоступа"); + + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраСведений]); + Если Не ПакетныйРежим Тогда + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляНабора]; // ЭлементОтбора + ЭлементОтбора.Установить(Набор); + КонецЕсли; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Для Каждого Строка Из Выгрузка Цикл - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляНабора]; // ЭлементОтбора - ЭлементОтбора.Установить(Набор); - НаборЗаписей.Отбор.КлючДоступа.Установить(Строка.КлючДоступа); - НаборЗаписей.Записать(); + Если ПакетныйРежим Тогда + СтараяЗапись = НаборЗаписей.Добавить(); + СтараяЗапись[ИмяПоляНабора] = Набор; + СтараяЗапись.КлючДоступа = Строка.КлючДоступа; + Иначе + НаборЗаписей.Отбор.КлючДоступа.Установить(Строка.КлючДоступа); + НаборЗаписей.Записать(); + КонецЕсли; КонецЦикла; + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимУдаления); + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -20698,12 +21333,18 @@ ЗапросГрупп.Текст = ТекстЗапросаВыбораРазличийГруппДоступаРазрешенногоКлюча(); УстановитьУсловиеОтбораВЗапросе(ЗапросГрупп, ГруппыДоступа, "ГруппыДоступа", "&УсловиеОтбораГруппДоступа1:ГруппыДоступа.Ссылка - |&УсловиеОтбораГруппДоступа2:СтарыеДанные.ГруппаДоступа"); // @query-part-1 + |&УсловиеОтбораГруппДоступа2:СтарыеДанные.ГруппаДоступа"); // @query-part-2 + + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; ЭлементБлокировкиГрупп = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); ЭлементБлокировкиГрупп.УстановитьЗначение("КлючДоступа", РазрешенныйКлючДоступа); НаборЗаписейГрупп = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаГруппДоступа); - НаборЗаписейГрупп.Отбор.КлючДоступа.Установить(РазрешенныйКлючДоступа); + Если Не ПакетныйРежим Тогда + НаборЗаписейГрупп.Отбор.КлючДоступа.Установить(РазрешенныйКлючДоступа); + КонецЕсли; // Обновление наборов групп доступа в регистре КлючиДоступаНаборовГруппДоступа. ЗапросПравДляГруппДоступа = Новый Запрос; @@ -20714,7 +21355,9 @@ ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаНаборовГруппДоступа"); ЭлементБлокировки.УстановитьЗначение("КлючДоступа", РазрешенныйКлючДоступа); ПраваДляГруппДоступа = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаНаборовГруппДоступа); - ПраваДляГруппДоступа.Отбор.КлючДоступа.Установить(РазрешенныйКлючДоступа); + Если Не ПакетныйРежим Тогда + ПраваДляГруппДоступа.Отбор.КлючДоступа.Установить(РазрешенныйКлючДоступа); + КонецЕсли; Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); @@ -20810,90 +21453,159 @@ // Для процедуры ОбновитьПорциюЭлементов. Процедура УдалитьУстаревшиеЭлементыДанныхСписка(ЭлементыДанных, ПараметрыОбновления) - РазмерПорции = 100; // Удаление N элементов данных по 100 за раз. + Если ПараметрыОбновления.ЭтоСсылочныйТип Тогда + УдалитьУстаревшиеЭлементыДанныхСсылочногоТипа(ЭлементыДанных, ПараметрыОбновления) + Иначе + УдалитьУстаревшиеЭлементыДанныхРегистров(ЭлементыДанных, ПараметрыОбновления) + КонецЕсли; + +КонецПроцедуры + +// Для процедуры УдалитьУстаревшиеЭлементыДанныхСписка. +Процедура УдалитьУстаревшиеЭлементыДанныхСсылочногоТипа(ЭлементыДанных, ПараметрыОбновления) + + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + + Если ПакетныйРежим Тогда + РазмерПорции = 1000; // Удаление N элементов данных по 1000 за раз. + Иначе + РазмерПорции = 100; // Удаление N элементов данных по 100 за раз. + КонецЕсли; ПорцияЭлементовДанных = Неопределено; КоличествоЭлементов = ЭлементыДанных.Количество(); - Если ПараметрыОбновления.ЭтоСсылочныйТип Тогда - НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); - Индекс = 0; - Пока Индекс < КоличествоЭлементов Цикл - Если ПорцияЭлементовДанных = Неопределено Тогда - ТребуетсяПроверка = Ложь; - ПорцияЭлементовДанных = ЭлементыДанных.Скопировать(Новый Массив); - Блокировка = Новый БлокировкаДанных; - КонецЕсли; - ЭлементДанных = ЭлементыДанных[Индекс]; - ЗаполнитьЗначенияСвойств(ПорцияЭлементовДанных.Добавить(), ЭлементДанных); - Если Не ЭлементДанных.Удалить И Не ЭлементДанных.Обновить Тогда - ТребуетсяПроверка = Истина; - КонецЕсли; - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаКОбъектам"); - ЭлементБлокировки.УстановитьЗначение("Объект", ЭлементДанных.ТекущаяСсылка); - - Индекс = Индекс + 1; - Если ПорцияЭлементовДанных.Количество() < РазмерПорции И Индекс < КоличествоЭлементов Тогда - Продолжить; - КонецЕсли; - - Если ТребуетсяПроверка Тогда - ЭлементБлокировки = Блокировка.Добавить(ПараметрыОбновления.Список); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - Запрос = Новый Запрос; - Запрос.Текст = ПараметрыОбновления.ТекстЗапросаПроверкиУстаревшихЭлементовДанных; - Запрос.УстановитьПараметр("ЭлементыДанных", ПорцияЭлементовДанных); - УстановитьУточнениеПланаЗапроса(Запрос.Текст); - КонецЕсли; - - КоличествоОбработанных = ПорцияЭлементовДанных.Количество(); - БлокировкаУстановлена = Ложь; - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - БлокировкаУстановлена = Истина; - Если ТребуетсяПроверка Тогда - // @skip-check query-in-loop - Порционная обработка данных - Выгрузка = Запрос.Выполнить().Выгрузить(); - КонецЕсли; - Для Каждого Строка Из ПорцияЭлементовДанных Цикл - НаборИзОднойЗаписи.Отбор.Объект.Установить(Строка.ТекущаяСсылка); - Если Строка.Обновить Тогда - НаборИзОднойЗаписи.Прочитать(); - Если НаборИзОднойЗаписи.Количество() > 0 Тогда - Если ПараметрыОбновления.ДляВнешнихПользователей Тогда - НаборИзОднойЗаписи[0].КлючДоступаВнешнихПользователей = Неопределено; - Иначе - НаборИзОднойЗаписи[0].КлючДоступаПользователей = Неопределено; - КонецЕсли; - Если Не ЗначениеЗаполнено(НаборИзОднойЗаписи[0].КлючДоступаВнешнихПользователей) - И Не ЗначениеЗаполнено(НаборИзОднойЗаписи[0].КлючДоступаПользователей) Тогда - НаборИзОднойЗаписи.Очистить(); - КонецЕсли; - НаборИзОднойЗаписи.Записать(); - КонецЕсли; - ИначеЕсли Строка.Удалить - Или ТребуетсяПроверка - И Выгрузка.Найти(Строка.ТекущаяСсылка, "ТекущаяСсылка") <> Неопределено Тогда - НаборИзОднойЗаписи.Очистить(); - НаборИзОднойЗаписи.Записать(); - КонецЕсли; - КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - Если БлокировкаУстановлена Тогда - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - КоличествоОбработанных = 0; - - Если ТребуетсяПрерватьОбработкуЭлементов(ПараметрыОбновления) Тогда - Прервать; - КонецЕсли; - КонецЦикла; + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); + НаборЗаписейДляУдаления = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); + + Индекс = 0; + Пока Индекс < КоличествоЭлементов Цикл + Если ПорцияЭлементовДанных = Неопределено Тогда + ПорцияЭлементовДанных = ЭлементыДанных.Скопировать(Новый Массив); + ПорцияДляОбновления = ПорцияЭлементовДанных.Скопировать(); + ПорцияДляПроверки = ПорцияЭлементовДанных.Скопировать(); + КонецЕсли; + ЭлементДанных = ЭлементыДанных[Индекс]; + ЗаполнитьЗначенияСвойств(ПорцияЭлементовДанных.Добавить(), ЭлементДанных); + Если ЭлементДанных.Обновить Тогда + ЗаполнитьЗначенияСвойств(ПорцияДляОбновления.Добавить(), ЭлементДанных); + ИначеЕсли Не ЭлементДанных.Удалить Тогда // Не Обновить И Не Удалить. + ЗаполнитьЗначенияСвойств(ПорцияДляПроверки.Добавить(), ЭлементДанных); + КонецЕсли; - Возврат; + Индекс = Индекс + 1; + Если ПорцияЭлементовДанных.Количество() < РазмерПорции И Индекс < КоличествоЭлементов Тогда + Продолжить; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаКОбъектам"); + ЭлементБлокировки.ИсточникДанных = ПорцияЭлементовДанных; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Объект", "ТекущаяСсылка"); + + Если ЗначениеЗаполнено(ПорцияДляОбновления) Тогда + ЗапросДляОбновления = Новый Запрос; + ЗапросДляОбновления.Текст = ПараметрыОбновления.ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных; + ЗапросДляОбновления.УстановитьПараметр("ЭлементыДанных", ПорцияДляОбновления); + КонецЕсли; + Если ЗначениеЗаполнено(ПорцияДляПроверки) Тогда + ЭлементБлокировки = Блокировка.Добавить(ПараметрыОбновления.Список); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировки.ИсточникДанных = ПорцияДляПроверки; + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "ТекущаяСсылка"); + ЗапросДляПроверки = Новый Запрос; + ЗапросДляПроверки.Текст = ПараметрыОбновления.ТекстЗапросаПроверкиУстаревшихЭлементовДанных; + ЗапросДляПроверки.УстановитьПараметр("ЭлементыДанных", ПорцияДляПроверки); + УстановитьУточнениеПланаЗапроса(ЗапросДляПроверки.Текст); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Если ЗначениеЗаполнено(ПорцияДляОбновления) Тогда + // @skip-check query-in-loop - Порционная обработка данных + ДанныеДляОбновления = ЗапросДляОбновления.Выполнить().Выгрузить(); + КонецЕсли; + Если ЗначениеЗаполнено(ПорцияДляПроверки) Тогда + // @skip-check query-in-loop - Порционная обработка данных + ДанныеДляУдаления = ЗапросДляПроверки.Выполнить().Выгрузить(); + КонецЕсли; + Для Каждого Строка Из ПорцияЭлементовДанных Цикл + Если Не ПакетныйРежим Тогда + НаборЗаписей.Отбор.Объект.Установить(Строка.ТекущаяСсылка); + КонецЕсли; + Если Строка.Обновить Тогда + Если Не ПакетныйРежим Тогда + НаборЗаписей.Очистить(); + КонецЕсли; + НайденнаяСтрока = ДанныеДляОбновления.Найти(Строка.ТекущаяСсылка, "Объект"); + Если НайденнаяСтрока <> Неопределено Тогда + Если ПараметрыОбновления.ДляВнешнихПользователей Тогда + НайденнаяСтрока.КлючДоступаПользователей = Неопределено; + Иначе + НайденнаяСтрока.КлючДоступаВнешнихПользователей = Неопределено; + КонецЕсли; + Если ЗначениеЗаполнено(НайденнаяСтрока.КлючДоступаВнешнихПользователей) + Или ЗначениеЗаполнено(НайденнаяСтрока.КлючДоступаПользователей) Тогда + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), НайденнаяСтрока); + ИначеЕсли ПакетныйРежим Тогда + ЗаполнитьЗначенияСвойств(НаборЗаписейДляУдаления.Добавить(), НайденнаяСтрока); + КонецЕсли; + Если Не ПакетныйРежим Тогда + НаборЗаписей.Записать(); + КонецЕсли; + КонецЕсли; + ИначеЕсли Строка.Удалить + Или ЗначениеЗаполнено(ПорцияДляПроверки) + И ДанныеДляУдаления.Найти(Строка.ТекущаяСсылка, "ТекущаяСсылка") <> Неопределено Тогда + + Если ПакетныйРежим Тогда + НаборЗаписейДляУдаления.Добавить().Объект = Строка.ТекущаяСсылка; + Иначе + НаборЗаписей.Очистить(); + НаборЗаписей.Записать(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если ПакетныйРежим Тогда + Если ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимСлияния); + КонецЕсли; + Если ЗначениеЗаполнено(НаборЗаписейДляУдаления) Тогда + НаборЗаписейДляУдаления.Записать(РежимУдаления); + КонецЕсли; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Если ПакетныйРежим Тогда + НаборЗаписей.Очистить(); + НаборЗаписейДляУдаления.Очистить(); + КонецЕсли; + КоличествоОбработанных = ПорцияЭлементовДанных.Количество(); + ПорцияЭлементовДанных = Неопределено; + + Если ТребуетсяПрерватьОбработкуЭлементов(ПараметрыОбновления, КоличествоОбработанных) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для процедуры УдалитьУстаревшиеЭлементыДанныхСписка. +Процедура УдалитьУстаревшиеЭлементыДанныхРегистров(ЭлементыДанных, ПараметрыОбновления) + + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + + Если ПакетныйРежим Тогда + РазмерПорции = 1000; // Удаление N элементов данных по 1000 за раз. + Иначе + РазмерПорции = 100; // Удаление N элементов данных по 100 за раз. КонецЕсли; Если ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) @@ -20903,136 +21615,182 @@ Иначе ИмяРегистра = "КлючиДоступаКРегистрам"; КонецЕсли; - НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистра]); + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистра]); + НаборЗаписейДляУдаления = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистра]); - Если ИмяРегистра = "КлючиДоступаКРегистрам" Тогда - НаборИзОднойЗаписи.Отбор.Регистр.Установить(ПараметрыОбновления.ИдентификаторСписка); + ИзмеренияСпискаДляБлокировки = Новый СписокЗначений; + ОпорныеПоля = ПараметрыОбновления.ОпорныеПоля; + Если ОпорныеПоля = Неопределено Тогда + КоличествоИспользуемыхОпорныхПолей = 0; + МаксимальноеКоличествоОпорныхПолей = + УправлениеДоступомСлужебныйПовтИсп.КоличествоОпорныхПолейРегистра(ИмяРегистра); + Иначе + КоличествоИспользуемыхОпорныхПолей = ОпорныеПоля.Используемые.Количество(); + МаксимальноеКоличествоОпорныхПолей = ОпорныеПоля.МаксимальноеКоличество; + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПараметрыОбновления.Список); + ПоляКлючаЗаписиСписка = СтрРазделить(ОписаниеКлючаЗаписи.СписокПолей, ","); + Номер = 1; + Для Каждого ИмяОпорногоПоля Из ОпорныеПоля.Используемые Цикл + Если ПоляКлючаЗаписиСписка.Найти(ИмяОпорногоПоля) <> Неопределено Тогда + ИзмеренияСпискаДляБлокировки.Добавить(ИмяОпорногоПоля, СтрШаблон("Поле%1", Номер)); + КонецЕсли; + Номер = Номер + 1; + КонецЦикла; КонецЕсли; - ИменаИзмерений = Новый Массив; + Если ИмяРегистра = "КлючиДоступаКРегистрам" Тогда + ИменаИзмерений.Добавить("Регистр"); + КонецЕсли; ИменаИзмерений.Добавить("ВариантДоступа"); - Для Каждого Колонка Из ЭлементыДанных.Колонки Цикл - Если СтрНачинаетсяС(Колонка.Имя, "Поле") Тогда - ИменаИзмерений.Добавить(Колонка.Имя); - КонецЕсли; + Для Номер = 1 По КоличествоИспользуемыхОпорныхПолей Цикл + ИменаИзмерений.Добавить(СтрШаблон("Поле%1", Номер)); КонецЦикла; - ОтборИзмерений = Неопределено; + + ОтборДанных = Новый Структура; + ТочныйОтборДанных = Новый Структура; + Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл + ОтборДанных.Вставить(ИмяИзмерения); + ТочныйОтборДанных.Вставить(ИмяИзмерения); + КонецЦикла; + Для Счетчик = Номер По МаксимальноеКоличествоОпорныхПолей Цикл + ТочныйОтборДанных.Вставить(СтрШаблон("Поле%1", Счетчик), + Перечисления.ДополнительныеЗначенияДоступа.Null); + КонецЦикла; + + ПорцияЭлементовДанных = Неопределено; + КоличествоЭлементов = ЭлементыДанных.Количество(); Индекс = 0; Пока Индекс < КоличествоЭлементов Цикл Если ПорцияЭлементовДанных = Неопределено Тогда - ТребуетсяПроверка = Ложь; ПорцияЭлементовДанных = ЭлементыДанных.Скопировать(Новый Массив); - Блокировка = Новый БлокировкаДанных; + ПорцияДляОбновления = ПорцияЭлементовДанных.Скопировать(); + ПорцияДляПроверки = ПорцияЭлементовДанных.Скопировать(); КонецЕсли; ЭлементДанных = ЭлементыДанных[Индекс]; ЗаполнитьЗначенияСвойств(ПорцияЭлементовДанных.Добавить(), ЭлементДанных); - Если Не ЭлементДанных.Удалить И Не ЭлементДанных.Обновить Тогда - ТребуетсяПроверка = Истина; + Если ЭлементДанных.Обновить Тогда + ЗаполнитьЗначенияСвойств(ПорцияДляОбновления.Добавить(), ЭлементДанных); + ИначеЕсли Не ЭлементДанных.Удалить Тогда // Не Обновить И Не Удалить. + ЗаполнитьЗначенияСвойств(ПорцияДляПроверки.Добавить(), ЭлементДанных); КонецЕсли; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистра); - Если ИмяРегистра = "КлючиДоступаКРегистрам" Тогда - ЭлементБлокировки.УстановитьЗначение("Регистр", ПараметрыОбновления.ИдентификаторСписка); - КонецЕсли; - Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл - Если ЭлементДанных.Обновить И ЭлементДанных[ИмяИзмерения] = Null Тогда - Продолжить; - КонецЕсли; - ЭлементБлокировки.УстановитьЗначение(ИмяИзмерения, ЭлементДанных[ИмяИзмерения]); - КонецЦикла; - Индекс = Индекс + 1; Если ПорцияЭлементовДанных.Количество() < РазмерПорции И Индекс < КоличествоЭлементов Тогда Продолжить; КонецЕсли; - Если ТребуетсяПроверка Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений." + ИмяРегистра); + ЭлементБлокировки.ИсточникДанных = ПорцияЭлементовДанных; + Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл + ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ИмяИзмерения, ИмяИзмерения); + КонецЦикла; + + Если ЗначениеЗаполнено(ПорцияДляОбновления) Тогда + ЗапросДляОбновления = Новый Запрос; + ЗапросДляОбновления.Текст = ПараметрыОбновления.ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных; + ЗапросДляОбновления.УстановитьПараметр("ЭлементыДанных", ПорцияДляОбновления); + КонецЕсли; + Если ЗначениеЗаполнено(ПорцияДляПроверки) Тогда ЭлементБлокировки = Блокировка.Добавить(ПараметрыОбновления.Список); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - Запрос = Новый Запрос; - Запрос.Текст = ПараметрыОбновления.ТекстЗапросаПроверкиУстаревшихЭлементовДанных; - Запрос.УстановитьПараметр("КлючиДоступаКРегистрам", ПорцияЭлементовДанных); - УстановитьУточнениеПланаЗапроса(Запрос.Текст); + Если ЗначениеЗаполнено(ИзмеренияСпискаДляБлокировки) Тогда + ЭлементБлокировки.ИсточникДанных = ПорцияДляПроверки; + Для Каждого ЭлементСписка Из ИзмеренияСпискаДляБлокировки Цикл + ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ЭлементСписка.Значение, + ЭлементСписка.Представление); + КонецЦикла; + КонецЕсли; + ЗапросДляПроверки = Новый Запрос; + ЗапросДляПроверки.Текст = ПараметрыОбновления.ТекстЗапросаПроверкиУстаревшихЭлементовДанных; + ЗапросДляПроверки.УстановитьПараметр("КлючиДоступаКРегистрам", ПорцияДляПроверки); + УстановитьУточнениеПланаЗапроса(ЗапросДляПроверки.Текст); КонецЕсли; - КоличествоОбработанных = ПорцияЭлементовДанных.Количество(); - БлокировкаУстановлена = Ложь; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); - БлокировкаУстановлена = Истина; - Если ТребуетсяПроверка Тогда + Если ЗначениеЗаполнено(ПорцияДляОбновления) Тогда // @skip-check query-in-loop - Порционная обработка данных - Выгрузка = Запрос.Выполнить().Выгрузить(); - Если ОтборИзмерений = Неопределено Тогда - ИменаПроверяемыхИзмерений = Новый Массив; - Для Каждого Колонка Из Выгрузка.Колонки Цикл - ИменаПроверяемыхИзмерений.Добавить(Колонка.Имя); - КонецЦикла; - ОтборИзмерений = Новый Структура(СтрСоединить(ИменаПроверяемыхИзмерений, ",")); - КонецЕсли; + ДанныеДляОбновления = ЗапросДляОбновления.Выполнить().Выгрузить(); + КонецЕсли; + Если ЗначениеЗаполнено(ПорцияДляПроверки) Тогда + // @skip-check query-in-loop - Порционная обработка данных + ДанныеДляУдаления = ЗапросДляПроверки.Выполнить().Выгрузить(); КонецЕсли; Для Каждого Строка Из ПорцияЭлементовДанных Цикл - НаборИзОднойЗаписи.Очистить(); - Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл - ЭлементОтбора = НаборИзОднойЗаписи.Отбор[ИмяИзмерения]; // ЭлементОтбора - Если Строка.Обновить И Строка[ИмяИзмерения] = Null Тогда - ЭлементОтбора.Использование = Ложь; - ИначеЕсли Строка[ИмяИзмерения] = Неопределено Тогда - ЭлементОтбора.Значение = Неопределено; - ЭлементОтбора.Использование = Истина; - Иначе - ЭлементОтбора.Установить(Строка[ИмяИзмерения]); - КонецЕсли; - КонецЦикла; + Если Не ПакетныйРежим Тогда + НаборЗаписей.Очистить(); + Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл + ЭлементОтбора = НаборЗаписей.Отбор[ИмяИзмерения]; // ЭлементОтбора + Если Строка[ИмяИзмерения] = Неопределено Тогда + ЭлементОтбора.Значение = Неопределено; + ЭлементОтбора.Использование = Истина; + Иначе + ЭлементОтбора.Установить(Строка[ИмяИзмерения]); + КонецЕсли; + КонецЦикла; + КонецЕсли; Если Строка.Обновить Тогда - НаборИзОднойЗаписи.Прочитать(); - Количество = НаборИзОднойЗаписи.Количество(); - Если Количество = 0 Тогда + ЗаполнитьЗначенияСвойств(ОтборДанных, Строка); + НайденныеСтроки = ДанныеДляОбновления.НайтиСтроки(ОтборДанных); + Если Не ЗначениеЗаполнено(НайденныеСтроки) Тогда Продолжить; КонецЕсли; - Если Количество > 1 Тогда - Отбор = Новый Структура; - Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл - Отбор.Вставить(ИмяИзмерения, ?(Строка[ИмяИзмерения] = Null, - Перечисления.ДополнительныеЗначенияДоступа.Null, Строка[ИмяИзмерения])); - КонецЦикла; - ТаблицаЗаписей = НаборИзОднойЗаписи.Выгрузить(); - НайденныеСтроки = ТаблицаЗаписей.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - Индекс = ТаблицаЗаписей.Индекс(НайденныеСтроки.Получить(0)); - ЗаполнитьЗначенияСвойств(НаборИзОднойЗаписи.Получить(0), - НаборИзОднойЗаписи.Получить(Индекс)); + ЗаполнитьЗначенияСвойств(ТочныйОтборДанных, ОтборДанных); + ТочноНайденныеСтроки = ДанныеДляОбновления.НайтиСтроки(ТочныйОтборДанных); + Если ТочноНайденныеСтроки.Количество() > 0 Тогда + НайденнаяСтрока = ТочноНайденныеСтроки.Получить(0); + Если Не ПакетныйРежим Тогда + Если НайденныеСтроки.Количество() = 1 Тогда + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), НайденнаяСтрока); КонецЕсли; + Иначе + НайденнаяСтрока = Неопределено; + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, НайденныеСтроки[0]); + ЗаполнитьЗначенияСвойств(НоваяЗапись, ТочныйОтборДанных); КонецЕсли; - Пока Количество > 1 Цикл - Количество = Количество - 1; - НаборИзОднойЗаписи.Удалить(Количество); - КонецЦикла; - Для Каждого ИмяИзмерения Из ИменаИзмерений Цикл - Если Строка[ИмяИзмерения] = Null Тогда - НаборИзОднойЗаписи[0][ИмяИзмерения] = Перечисления.ДополнительныеЗначенияДоступа.Null; - КонецЕсли; - КонецЦикла; - Иначе - Если ТребуетсяПроверка И Не Строка.Удалить Тогда - ЗаполнитьЗначенияСвойств(ОтборИзмерений, Строка); - Если Выгрузка.НайтиСтроки(ОтборИзмерений).Количество() = 0 Тогда - Продолжить; - КонецЕсли; + Если ПакетныйРежим Тогда + Для Каждого УдаляемаяСтрока Из НайденныеСтроки Цикл + Если УдаляемаяСтрока <> НайденнаяСтрока Тогда + ЗаполнитьЗначенияСвойств(НаборЗаписейДляУдаления.Добавить(), УдаляемаяСтрока); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ИначеЕсли Не Строка.Удалить И ЗначениеЗаполнено(ПорцияДляПроверки) Тогда + ЗаполнитьЗначенияСвойств(ОтборДанных, Строка); + Если ДанныеДляУдаления.НайтиСтроки(ОтборДанных).Количество() = 0 Тогда + Продолжить; КонецЕсли; КонецЕсли; - НаборИзОднойЗаписи.Записать(); + Если Не ПакетныйРежим Тогда + НаборЗаписей.Записать(); + ИначеЕсли Не Строка.Обновить Тогда + ЗаполнитьЗначенияСвойств(НаборЗаписейДляУдаления.Добавить(), Строка); + КонецЕсли; КонецЦикла; + Если ПакетныйРежим Тогда + Если ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимСлияния); + КонецЕсли; + Если ЗначениеЗаполнено(НаборЗаписейДляУдаления) Тогда + НаборЗаписейДляУдаления.Записать(РежимУдаления); + КонецЕсли; + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - Если БлокировкаУстановлена Тогда - ВызватьИсключение; - КонецЕсли; - КоличествоОбработанных = 0; + ВызватьИсключение; КонецПопытки; + Если ПакетныйРежим Тогда + НаборЗаписей.Очистить(); + НаборЗаписейДляУдаления.Очистить(); + КонецЕсли; + КоличествоОбработанных = ПорцияЭлементовДанных.Количество(); ПорцияЭлементовДанных = Неопределено; Если ТребуетсяПрерватьОбработкуЭлементов(ПараметрыОбновления, КоличествоОбработанных) Тогда @@ -21566,8 +22324,6 @@ ИмяРеквизитаОбновляемогоКлюча = "КлючДоступаПользователей"; КонецЕсли; - НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); - Запись = НаборИзОднойЗаписи.Добавить(); ОбъектТип = Метаданные.РегистрыСведений.КлючиДоступаКОбъектам.Измерения.Объект.Тип; Если Не ОбъектТип.СодержитТип(ТипЗнч(Контекст.ОписаниеКлючейДоступаОбъектов[0].ТекущаяСсылка)) Тогда ТипыТаблицПоИменам = УправлениеДоступомСлужебныйПовтИсп.СинтаксисЯзыка().ТипыТаблиц.ПоИменам; @@ -21622,6 +22378,14 @@ ПараметрыОбновления.ИдентификаторТранзакции, "ЗаполнитьКэшПараметровОграниченияДоступа"); КонецЕсли; + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + ПакетныйРежим = РежимСлияния <> Неопределено; + + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаКОбъектам); + Если Не ПакетныйРежим Тогда + Запись = НаборЗаписей.Добавить(); + КонецЕсли; + НачатьТранзакцию(); Попытка ПередБлокировкойДанных(ПараметрыОбновления); @@ -21641,7 +22405,11 @@ СсылкиНаОбъекты = Новый Массив; Для Каждого ОписаниеКлючаДоступаОбъекта Из ОписаниеКлючейДоступаОбъектов Цикл СсылкиНаОбъекты.Добавить(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка); - НаборИзОднойЗаписи.Отбор.Объект.Установить(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка); + Если Не ПакетныйРежим Тогда + НаборЗаписей.Отбор.Объект.Установить(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка); + Иначе + Запись = НаборЗаписей.Добавить(); + КонецЕсли; Запись.Объект = ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка; Запись[ИмяРеквизитаОбновляемогоКлюча] = ОписаниеКлючаДоступаОбъекта.СвойстваКлюча.КлючДоступа; @@ -21651,8 +22419,13 @@ Запись[ИмяРеквизитаСохраняемогоКлюча] = Строка[ИмяРеквизитаСохраняемогоКлюча]; КонецЕсли; КонецЕсли; - НаборИзОднойЗаписи.Записать(); + Если Не ПакетныйРежим Тогда + НаборЗаписей.Записать(); + КонецЕсли; КонецЦикла; + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимСлияния); + КонецЕсли; ПослеЗаписиСтрок(ПараметрыОбновления, ОписаниеКлючейДоступаОбъектов.Количество()); ПередПланированиемОбновления(ПараметрыОбновления); @@ -21686,17 +22459,7 @@ // Для процедуры ОбновитьКлючиДоступаПорцииЭлементовДанных. Процедура ЗаписатьКлючиДоступаРегистров(ПараметрыОбновления, Контекст) - Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда - ИмяРегистраКлючей = "КлючиДоступаКРегистрам"; - Иначе - ИмяРегистраКлючей = ПараметрыОбновления.ИмяОтдельногоРегистраКлючей; - КонецЕсли; - НаборИзОднойЗаписи = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраКлючей]); - Запись = НаборИзОднойЗаписи.Добавить(); - ПорцияЭлементовДанных = Контекст.ПорцияЭлементовДанных; - ПустыеЗначенияОпорныхПолей = УправлениеДоступомСлужебныйПовтИсп.ПустыеЗначенияОпорныхПолей( - ПараметрыОбновления.ОпорныеПоля.МаксимальноеКоличество); ЗаписыватьТолькоИзмененные = ЗаписыватьТолькоИзмененныеКлючиДоступаЭлементовДанных(); Если ЗаписыватьТолькоИзмененные Тогда @@ -21726,6 +22489,12 @@ ПослеЗапросаТекущихКлючейДоступа(ПараметрыОбновления); КонецЕсли; + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + ИмяРегистраКлючей = "КлючиДоступаКРегистрам"; + Иначе + ИмяРегистраКлючей = ПараметрыОбновления.ИмяОтдельногоРегистраКлючей; + КонецЕсли; + КоличествоОбработанных = 0; ОписаниеКлючейДоступаОбъектов = Новый Массив; @@ -21765,6 +22534,25 @@ Возврат; КонецЕсли; + ПустыеЗначенияОпорныхПолей = УправлениеДоступомСлужебныйПовтИсп.ПустыеЗначенияОпорныхПолей( + ПараметрыОбновления.ОпорныеПоля.МаксимальноеКоличество); + + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + ПакетныйРежим = РежимСлияния <> Неопределено; + + НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений[ИмяРегистраКлючей]); + Если Не ПакетныйРежим Тогда + Запись = НаборЗаписей.Добавить(); + КонецЕсли; + + Если Не ПакетныйРежим Тогда + Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда + НаборЗаписей.Отбор.Регистр.Установить(ПараметрыОбновления.ИдентификаторСписка); + КонецЕсли; + НаборЗаписей.Отбор.ВариантДоступа.Установить(ПараметрыОбновления.ВариантДоступа); + КонецЕсли; + КоличествоИспользуемыхПолей = ПараметрыОбновления.ОпорныеПоля.Используемые.Количество(); + НачатьТранзакцию(); Попытка ПередБлокировкойДанных(ПараметрыОбновления); @@ -21773,30 +22561,38 @@ ПередЗаписьюСтрок(ПараметрыОбновления); Для Каждого ОписаниеКлючаДоступаОбъекта Из ОписаниеКлючейДоступаОбъектов Цикл + Если ПакетныйРежим Тогда + Запись = НаборЗаписей.Добавить(); + КонецЕсли; Если Не ЗначениеЗаполнено(ПараметрыОбновления.ИмяОтдельногоРегистраКлючей) Тогда - НаборИзОднойЗаписи.Отбор.Регистр.Установить(ПараметрыОбновления.ИдентификаторСписка); Запись.Регистр = ПараметрыОбновления.ИдентификаторСписка; КонецЕсли; - НаборИзОднойЗаписи.Отбор.ВариантДоступа.Установить(ПараметрыОбновления.ВариантДоступа); Запись.ВариантДоступа = ПараметрыОбновления.ВариантДоступа; ЭлементДанных = ПорцияЭлементовДанных.Найти(ОписаниеКлючаДоступаОбъекта.ТекущаяСсылка, "ТекущаяСсылка"); ЗаполнитьЗначенияСвойств(Запись, ПустыеЗначенияОпорныхПолей); - Для НомерПоля = 1 По ПараметрыОбновления.ОпорныеПоля.Используемые.Количество() Цикл + Для НомерПоля = 1 По КоличествоИспользуемыхПолей Цикл ИмяПоля = СтрШаблон("Поле%1", НомерПоля); - ЭлементОтбора = НаборИзОднойЗаписи.Отбор[ИмяПоля]; // ЭлементОтбора - Если ЭлементДанных[ИмяПоля] = Неопределено Тогда - ЭлементОтбора.Значение = Неопределено; - ЭлементОтбора.Использование = Истина; - Иначе - ЭлементОтбора.Установить(ЭлементДанных[ИмяПоля]); + Если Не ПакетныйРежим Тогда + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоля]; // ЭлементОтбора + Если ЭлементДанных[ИмяПоля] = Неопределено Тогда + ЭлементОтбора.Значение = Неопределено; + ЭлементОтбора.Использование = Истина; + Иначе + ЭлементОтбора.Установить(ЭлементДанных[ИмяПоля]); + КонецЕсли; КонецЕсли; Запись[ИмяПоля] = ЭлементДанных[ИмяПоля]; КонецЦикла; Запись.КлючДоступа = ОписаниеКлючаДоступаОбъекта.СвойстваКлюча.КлючДоступа; - НаборИзОднойЗаписи.Записать(); + Если Не ПакетныйРежим Тогда + НаборЗаписей.Записать(); + КонецЕсли; КонецЦикла; + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимСлияния); + КонецЕсли; ПослеЗаписиСтрок(ПараметрыОбновления, ОписаниеКлючейДоступаОбъектов.Количество()); // АПК:330-выкл - №783.1.3 Допустимо указать вызов после ЗафиксироватьТранзакцию, @@ -22037,8 +22833,8 @@ ИмяВременнойТаблицы = "СправочникКлючиДоступа" + ТаблицаКлюча; ПолеНомерСтроки = "НомерСтроки, "; // @query-part-1 Запрос.Текст = СтрЗаменить(Запрос.Текст, - "@Справочник.КлючиДоступа.Шапка КАК " + ТаблицаКлюча, // @query-part-1 - ИмяВременнойТаблицы + " КАК " + ТаблицаКлюча); // @query-part-1 + "@Справочник.КлючиДоступа.Шапка КАК " + ТаблицаКлюча, + ИмяВременнойТаблицы + " КАК " + ТаблицаКлюча); // @query-part-1, @query-part-2 КонецЕсли; Иначе ИмяВременнойТаблицы = "СправочникКлючиДоступа" + ТаблицаКлюча; @@ -24262,10 +25058,16 @@ | И &УточнениеПланаЗапроса"; УстановитьУточнениеПланаЗапроса(ЗапросГрупп.Текст); + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + ЭлементБлокировкиГрупп = Блокировка.Добавить("РегистрСведений.КлючиДоступаГруппДоступа"); ЭлементБлокировкиГрупп.УстановитьЗначение("КлючДоступа", КлючДоступа); НаборЗаписейГрупп = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаГруппДоступа); - НаборЗаписейГрупп.Отбор.КлючДоступа.Установить(КлючДоступа); + Если Не ПакетныйРежим Тогда + НаборЗаписейГрупп.Отбор.КлючДоступа.Установить(КлючДоступа); + КонецЕсли; ЗапросНаборовГруппДоступа = Новый Запрос; ЗапросНаборовГруппДоступа.УстановитьПараметр("КлючДоступа", КлючДоступа); @@ -24276,7 +25078,9 @@ ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КлючиДоступаНаборовГруппДоступа"); ЭлементБлокировки.УстановитьЗначение("КлючДоступа", КлючДоступа); НаборЗаписейНаборовГруппДоступа = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаНаборовГруппДоступа); - НаборЗаписейНаборовГруппДоступа.Отбор.КлючДоступа.Установить(КлючДоступа); + Если Не ПакетныйРежим Тогда + НаборЗаписейНаборовГруппДоступа.Отбор.КлючДоступа.Установить(КлючДоступа); + КонецЕсли; Если ПараметрыОбновления.РассчитыватьПраваПользователей Тогда Запрос = Новый Запрос; @@ -24294,7 +25098,9 @@ НаборЗаписей = СлужебныйНаборЗаписей(РегистрыСведений.КлючиДоступаВнешнихПользователей); КонецЕсли; ЭлементБлокировки.УстановитьЗначение("КлючДоступа", КлючДоступа); - НаборЗаписей.Отбор.КлючДоступа.Установить(КлючДоступа); + Если Не ПакетныйРежим Тогда + НаборЗаписей.Отбор.КлючДоступа.Установить(КлючДоступа); + КонецЕсли; КонецЕсли; Если ОписаниеНовыхКлючей <> Неопределено Тогда @@ -24672,15 +25478,26 @@ ЕстьИзмененияПравГруппДоступа = Ложь; ЕстьИзмененияПравГруппПользователей = Ложь; + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + КоличествоЗаписанных = 0; ПередЗаписьюСтрок(ПараметрыОбновления); + Пока Выборка.Следующий() Цикл ВладелецПрав = Выборка[ИмяПоляВладельцаПрав]; Права = ПраваНаКлюч.Получить(ВладелецПрав); // См. НовыеПрава Если Права = Неопределено Тогда - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора - ЭлементОтбора.Установить(ВладелецПрав); - НаборЗаписей.Записать(); + Если ПакетныйРежим Тогда + СтараяЗапись = НаборЗаписей.Добавить(); + СтараяЗапись.КлючДоступа = КлючДоступа; + СтараяЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; + Иначе + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); + НаборЗаписей.Записать(); + КонецЕсли; Если ТипЗнч(ВладелецПрав) = ТипГруппыДоступа Тогда ЕстьИзмененияПравГруппДоступа = Истина; Иначе @@ -24692,20 +25509,35 @@ КонецЕсли; КонецЦикла; - ОднаЗапись = НаборЗаписей.Добавить(); - ОднаЗапись.КлючДоступа = КлючДоступа; + Если Не ПакетныйРежим Тогда + ОднаЗапись = НаборЗаписей.Добавить(); + ОднаЗапись.КлючДоступа = КлючДоступа; + + ИначеЕсли ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимУдаления); + НаборЗаписей.Очистить(); + КонецЕсли; + Для Каждого ОписаниеПрав Из ПраваНаКлюч Цикл Права = ОписаниеПрав.Значение; // См. НовыеПрава Если Права = Null Тогда Продолжить; КонецЕсли; ВладелецПрав = ОписаниеПрав.Ключ; - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора - ЭлементОтбора.Установить(ВладелецПрав); - ОднаЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; - ОднаЗапись.ПравоИзменение = Права.ПравоИзменение; - ОднаЗапись.ПравоДобавление = Права.ПравоДобавление; - НаборЗаписей.Записать(); + Если ПакетныйРежим Тогда + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.КлючДоступа = КлючДоступа; + НоваяЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; + НоваяЗапись.ПравоИзменение = Права.ПравоИзменение; + НоваяЗапись.ПравоДобавление = Права.ПравоДобавление; + Иначе + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); + ОднаЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; + ОднаЗапись.ПравоИзменение = Права.ПравоИзменение; + ОднаЗапись.ПравоДобавление = Права.ПравоДобавление; + НаборЗаписей.Записать(); + КонецЕсли; Если ТипЗнч(ВладелецПрав) = ТипГруппыДоступа Тогда ЕстьИзмененияПравГруппДоступа = Истина; Иначе @@ -24713,6 +25545,11 @@ КонецЕсли; КоличествоЗаписанных = КоличествоЗаписанных + 1; КонецЦикла; + + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимСлияния); + КонецЕсли; + ПослеЗаписиСтрок(ПараметрыОбновления, КоличествоЗаписанных); ЕстьИзменения.ПраваГруппДоступа = ЕстьИзмененияПравГруппДоступа; @@ -24726,15 +25563,26 @@ Выборка = РезультатЗапроса.Выбрать(); + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + КоличествоЗаписанных = 0; ПередЗаписьюСтрок(ПараметрыОбновления); + Пока Выборка.Следующий() Цикл ВладелецПрав = Выборка[ИмяПоляВладельцаПрав]; Права = ПраваНаКлюч.Получить(ВладелецПрав); // См. НовыеПрава Если Права = Неопределено Тогда - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора - ЭлементОтбора.Установить(ВладелецПрав); - НаборЗаписей.Записать(); + Если ПакетныйРежим Тогда + СтараяЗапись = НаборЗаписей.Добавить(); + СтараяЗапись.КлючДоступа = КлючДоступа; + СтараяЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; + Иначе + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); + НаборЗаписей.Записать(); + КонецЕсли; ЕстьИзмененияПрав = Истина; ИначеЕсли Выборка.ПравоИзменение = Права.ПравоИзменение И Выборка.ПравоДобавление = Права.ПравоДобавление @@ -24743,24 +25591,45 @@ КонецЕсли; КонецЦикла; - ОднаЗапись = НаборЗаписей.Добавить(); - ОднаЗапись.КлючДоступа = КлючДоступа; + Если Не ПакетныйРежим Тогда + ОднаЗапись = НаборЗаписей.Добавить(); + ОднаЗапись.КлючДоступа = КлючДоступа; + + ИначеЕсли ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимУдаления); + НаборЗаписей.Очистить(); + КонецЕсли; + Для Каждого ОписаниеПрав Из ПраваНаКлюч Цикл Права = ОписаниеПрав.Значение; // См. НовыеПрава Если Права = Null Тогда Продолжить; КонецЕсли; ВладелецПрав = ОписаниеПрав.Ключ; - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора - ЭлементОтбора.Установить(ВладелецПрав); - ОднаЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; - ОднаЗапись.ПравоИзменение = Права.ПравоИзменение; - ОднаЗапись.ПравоДобавление = Права.ПравоДобавление; - ОднаЗапись.ЭтоПраваНабораГрупп = Ложь; - НаборЗаписей.Записать(); + Если ПакетныйРежим Тогда + НоваяЗапись = НаборЗаписей.Добавить(); + НоваяЗапись.КлючДоступа = КлючДоступа; + НоваяЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; + НоваяЗапись.ПравоИзменение = Права.ПравоИзменение; + НоваяЗапись.ПравоДобавление = Права.ПравоДобавление; + НоваяЗапись.ЭтоПраваНабораГрупп = Ложь; + Иначе + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(ВладелецПрав); + ОднаЗапись[ИмяПоляВладельцаПрав] = ВладелецПрав; + ОднаЗапись.ПравоИзменение = Права.ПравоИзменение; + ОднаЗапись.ПравоДобавление = Права.ПравоДобавление; + ОднаЗапись.ЭтоПраваНабораГрупп = Ложь; + НаборЗаписей.Записать(); + КонецЕсли; ЕстьИзмененияПрав = Истина; КоличествоЗаписанных = КоличествоЗаписанных + 1; КонецЦикла; + + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимСлияния); + КонецЕсли; + ПослеЗаписиСтрок(ПараметрыОбновления, КоличествоЗаписанных); КонецПроцедуры @@ -24772,23 +25641,46 @@ Выборка = РезультатЗапроса.Выбрать(); УдалениеЗавершено = Ложь; + РежимСлияния = ОбщегоНазначения.РежимСлиянияНабораЗаписей(); + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено И РежимСлияния <> Неопределено; + КоличествоЗаписанных = 0; ПередЗаписьюСтрок(ПараметрыОбновления); + Пока Выборка.Следующий() Цикл - ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора - ЭлементОтбора.Установить(Выборка[ИмяПоляВладельцаПрав]); + Если Не ПакетныйРежим Тогда + ЭлементОтбора = НаборЗаписей.Отбор[ИмяПоляВладельцаПрав]; // ЭлементОтбора + ЭлементОтбора.Установить(Выборка[ИмяПоляВладельцаПрав]); + КонецЕсли; Если Не УдалениеЗавершено И Выборка.ВидИзмененияСтроки = 1 Тогда УдалениеЗавершено = Истина; - ОднаЗапись = НаборЗаписей.Добавить(); - ОднаЗапись.КлючДоступа = КлючДоступа; + Если Не ПакетныйРежим Тогда + ОднаЗапись = НаборЗаписей.Добавить(); + ОднаЗапись.КлючДоступа = КлючДоступа; + ИначеЕсли ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(РежимУдаления); + НаборЗаписей.Очистить(); + КонецЕсли; КонецЕсли; - Если УдалениеЗавершено Тогда - ЗаполнитьЗначенияСвойств(ОднаЗапись, Выборка); + Если Не ПакетныйРежим Тогда + Если УдалениеЗавершено Тогда + ЗаполнитьЗначенияСвойств(ОднаЗапись, Выборка); + КонецЕсли; + НаборЗаписей.Записать(); + Иначе + Запись = НаборЗаписей.Добавить(); + Запись.КлючДоступа = КлючДоступа; + ЗаполнитьЗначенияСвойств(Запись, Выборка); КонецЕсли; - НаборЗаписей.Записать(); ЕстьИзменения = Истина; КоличествоЗаписанных = КоличествоЗаписанных + 1; КонецЦикла; + + Если ПакетныйРежим И ЗначениеЗаполнено(НаборЗаписей) Тогда + НаборЗаписей.Записать(?(УдалениеЗавершено, РежимСлияния, РежимУдаления)); + КонецЕсли; + ПослеЗаписиСтрок(ПараметрыОбновления, КоличествоЗаписанных); КонецПроцедуры @@ -25504,23 +26396,23 @@ И Не ПолеСуществует(КоллекцииПолей.Ресурсы, ИмяПоля) И Не ПолеСуществует(КоллекцииПолей.СтандартныеРеквизиты, ИмяПоля) И Не (ЭтоТабличнаяЧасть - И (ВРег(ИмяПоля) = ВРег("Ссылка") // @Non-NLS - Или ВРег(ИмяПоля) = ВРег("Ref"))) Тогда + И (ВРег(ИмяПоля) = ВРег("Ссылка") + Или ВРег(ИмяПоля) = ВРег("Ref"))) Тогда // @Non-NLS Отказ = Истина; Прервать; КонецЕсли; ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", "," + Символы.ПС) - + "ТекущаяТаблица." + ИмяПоля + " КАК " + ИмяПоля; // @query-part-2 + + "ТекущаяТаблица." + ИмяПоля + " КАК " + ИмяПоля; // @query-part-5 КонецЦикла; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекущаяТаблица.Поле1 КАК Поле1", ТекстСОтступом(СокрЛ(ПоляВыбора), " ")); // @query-part-1 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекущаяТаблицаЭлементовДанных", ПолноеИмя); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", "ПЕРВЫЕ " + Формат( // @query-part-1 @query-part-2 - МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных() * 10, "ЧГ=")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", "ПЕРВЫЕ " + Формат( + МаксимальноеКоличествоКомбинацийЗначенийВедущихПолейПриВычисленииСоставаИзмененных() * 10, "ЧГ=")); // @query-part-1, @query-part-2 КонецПроцедуры @@ -25926,6 +26818,7 @@ РезультатДляПользователей.Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей = Новый Соответствие; УстановитьСвойстваЗаписиКлючейДоступа(РезультатДляПользователей); РезультатДляПользователей.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + РезультатДляПользователей.Вставить("СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей", Истина); Попытка ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляПользователей); Исключение @@ -25975,6 +26868,7 @@ РезультатДляВнешнихПользователей.Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей = Новый Соответствие; УстановитьСвойстваЗаписиКлючейДоступа(РезультатДляВнешнихПользователей); РезультатДляВнешнихПользователей.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + РезультатДляВнешнихПользователей.Вставить("СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей", Истина); Попытка ДобавитьТекстыЗапросовВПараметрыОграничения(РезультатДляВнешнихПользователей); Исключение @@ -26340,6 +27234,7 @@ ПараметрыОграничения.Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей = Новый Соответствие; УстановитьСвойстваЗаписиКлючейДоступа(ПараметрыОграничения); ПараметрыОграничения.Вставить("БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей", Ложь); + ПараметрыОграничения.Вставить("СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей", Истина); Для Каждого КлючИЗначение Из ПараметрыОграничения.ВедущиеСписки.ПоЗначениямПолей Цикл Контекст.ВедущиеСписки.Вставить(КлючИЗначение.Ключ, Неопределено); КонецЦикла; @@ -26584,8 +27479,8 @@ // Для функции ОписаниеОграниченияДанных. Функция ЭтоЖурналДокументов(ПолноеИмя) - Возврат СтрНачинаетсяС(ВРег(ПолноеИмя), ВРег("ЖурналДокументов.")) // @Non-NLS - Или СтрНачинаетсяС(ВРег(ПолноеИмя), ВРег("DocumentJournal.")); + Возврат СтрНачинаетсяС(ВРег(ПолноеИмя), ВРег("ЖурналДокументов.")) + Или СтрНачинаетсяС(ВРег(ПолноеИмя), ВРег("DocumentJournal.")); // @Non-NLS КонецФункции @@ -27552,17 +28447,17 @@ ИмяПараметра = "ПолноеИмя" + Формат(НомерПараметра, "ЧГ="); Запрос.УстановитьПараметр(ИмяПараметра, ПолноеИмя); УсловияОтбораИОМ.Добавить(СтрЗаменить("Идентификаторы.ПолноеИмя ПОДОБНО &ИмяПараметра СПЕЦСИМВОЛ ""~""", - "ИмяПараметра", ИмяПараметра)); // @query-part-1 + "ИмяПараметра", ИмяПараметра)); // @query-part-1, @query-part-2 УсловияОтбораИОР.Добавить(СтрЗаменить("Идентификаторы.ПолноеИмяОбъекта ПОДОБНО &ИмяПараметра СПЕЦСИМВОЛ ""~""", - "ИмяПараметра", ИмяПараметра)); // @query-part-1 + "ИмяПараметра", ИмяПараметра)); // @query-part-1, @query-part-2 НомерПараметра = НомерПараметра + 1; КонецЦикла; Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловияОтбораИОМ", - СтрСоединить(УсловияОтбораИОМ, Символы.ПС + " ИЛИ ")); // @query-part-1 + СтрСоединить(УсловияОтбораИОМ, Символы.ПС + " ИЛИ ")); // @query-part-2 Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловияОтбораИОР", - СтрСоединить(УсловияОтбораИОР, Символы.ПС + " ИЛИ ")); // @query-part-1 + СтрСоединить(УсловияОтбораИОР, Символы.ПС + " ИЛИ ")); // @query-part-2 Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); @@ -27577,7 +28472,7 @@ // Число нужно увеличивать при внесении изменений в состав параметров кэша // (в том числе при изменении версии шаблонов). - Возврат "27.2" + ВерсияПеревода(); + Возврат "28.2" + ВерсияПеревода(); КонецФункции @@ -32819,9 +33714,9 @@ Для Каждого ИмяТипа Из УзелПоле.ТаблицыСледующегоПоля[0] Цикл ТекущееИмяПоля = СтрШаблон("ВЫРАЗИТЬ(%1 КАК %2).%3", ОпорноеПоле, ИмяТипа, ОстальныеПоля); // @query-part-1 Если ЗначениеЗаполнено(ИмяПоля) Тогда - ИмяПоля = // @query-part-1 + ИмяПоля = "ЕСТЬNULL(" + ТекущееИмяПоля + ", - | " + ТекстСОтступом(ИмяПоля, " ") + ")"; + | " + ТекстСОтступом(ИмяПоля, " ") + ")"; // @query-part-1 Иначе ИмяПоля = ТекущееИмяПоля; КонецЕсли; @@ -32872,6 +33767,15 @@ СтруктураОграничения.ОграничениеИзменения, Контекст, Истина); Контекст.Вставить("СтруктураОграничения", СтруктураОграничения); + Если Контекст.ЕстьФункцияПравоДоступаИлиРольДоступнаВОграниченииЧтения Тогда + ДобавитьВидОграниченияПрав("ФункцияПравоДоступаИлиРольДоступна", + Новый Структура("Чтение, Изменение", Истина, Ложь), Контекст); + КонецЕсли; + Если Контекст.ЕстьФункцияПравоДоступаИлиРольДоступна Тогда + ДобавитьВидОграниченияПрав("ФункцияПравоДоступаИлиРольДоступна", + Новый Структура("Чтение, Изменение", Ложь, Истина), Контекст); + КонецЕсли; + ПоляКлючаДоступаПослеУпрощения = Новый Массив; // Массив Из см. НовоеПолеКлючаДоступа Для Каждого ОписаниеПоля Из ПоляКлючаДоступаДоУпрощения Цикл РодителиПоля = Контекст.ОставшиесяПоляПослеУпрощения.Получить(ОписаниеПоля.Поле); // Массив из см. ОписаниеУзла @@ -33258,7 +34162,7 @@ "ТипЗначенийДоступаИспользуется", "УправлениеДоступомСлужебный", Контекст.Список); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Возврат ИспользуемыеТипыЗначений.Получить(ТипЗначений) <> Неопределено; @@ -33678,8 +34582,13 @@ Если Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Или Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений") Тогда + Свойства.ТипыСохраненияЗначений.Добавить(Тип); Свойства.ЕстьТипВедущегоСписка = Истина; + + ВидОграничения = ?(Родитель.Узел = "ЧтениеСпискаРазрешено" + Или Родитель.Узел = "ЧтениеОбъектаРазрешено", "ПравоЧтения", "ПравоИзменения"); + ДобавитьВидОграниченияПрав(ВидОграничения, Свойства, Контекст, Истина); Продолжить; КонецЕсли; @@ -33688,6 +34597,9 @@ Свойства.ТипыСохраненияТипов.Добавить(Тип); Свойства.ЕстьТипВедущегоСписка = Истина; + + ВидОграничения = ?(Родитель.Узел = "ЧтениеСпискаРазрешено", "ПравоЧтения", "ПравоИзменения"); + ДобавитьВидОграниченияПрав(ВидОграничения, Свойства, Контекст, Истина); Продолжить; КонецЕсли; @@ -33698,6 +34610,9 @@ Свойства.ТипыСохраненияТипов.Добавить(Тип); Свойства.ЕстьТипВедущегоСписка = Истина; + + ВидОграничения = ?(Родитель.Узел = "ЧтениеОбъектаРазрешено", "ПравоЧтения", "ПравоИзменения"); + ДобавитьВидОграниченияПрав(ВидОграничения, Свойства, Контекст, Истина); Продолжить; КонецЕсли; @@ -33828,6 +34743,7 @@ Если Родитель.Узел = "ЭтоАвторизованныйПользователь" Тогда Свойства.ЕстьПроверкаАвторизованногоПользователя = Истина; + ДобавитьВидОграниченияПрав("ФункцияЭтоАвторизованныйПользователь", Свойства, Контекст); Для Каждого Тип Из Свойства.ТипКонечногоПоля.Типы() Цикл ИмяТипа = ИмяТипаНаЯзыкеЗапросов(Тип); @@ -34000,8 +34916,8 @@ // Внутри функции ЕстьNull() может быть только поле, т.е. функции Выразить() не может быть. Если ЗначениеЗаполнено(УзелПоле.ЕстьNull) Тогда - ИмяПоляДляЗапроса = "ЕСТЬNULL(" + ИмяПоляДляЗапроса + ", " // @query-part-1 - + ВыражениеУзлаЗначениеИлиКонстанта(УзелПоле.ЕстьNull) + ")"; + ИмяПоляДляЗапроса = "ЕСТЬNULL(" + ИмяПоляДляЗапроса + ", " + + ВыражениеУзлаЗначениеИлиКонстанта(УзелПоле.ЕстьNull) + ")"; // @query-part-1 Если ЭтоКорневойУзел Тогда Свойства.Вставить("БезЗначенияNull", Истина); @@ -34009,7 +34925,7 @@ КонецЕсли; Если ЗначениеЗаполнено(УзелПоле.Выразить) Тогда - ИмяПоляДляЗапроса = "ВЫРАЗИТЬ(" + ИмяПоляДляЗапроса + " КАК " + УзелПоле.Выразить + ")"; // @query-part-1 @query-part-2 + ИмяПоляДляЗапроса = "ВЫРАЗИТЬ(" + ИмяПоляДляЗапроса + " КАК " + УзелПоле.Выразить + ")"; // @query-part-1, @query-part-2 СвойстваПоля.Вставить("ЕстьВыразить"); КонецЕсли; @@ -34127,8 +35043,8 @@ КонецЕсли; Если ТипЗнч(ДополнительныйКонтекст.ГруппаТаблиц) <> Тип("Массив") - И ( ВРег(Поле) = ВРег("Ссылка") // @Non-NLS - Или ВРег(Поле) = ВРег("Ref")) Тогда + И ( ВРег(Поле) = ВРег("Ссылка") + Или ВРег(Поле) = ВРег("Ref")) Тогда // @Non-NLS-2 Если ЭтоСсылочныйТипТаблицы = Неопределено Тогда СоставИмени = СтрРазделить(Таблица, "."); @@ -34331,18 +35247,17 @@ ДополнительноеУсловие = " | И (&УточнениеПланаЗапроса)"; // @query-part-1 Иначе - // @query-part-1 @query-part-3 ДополнительноеУсловие = ?(Не ЗначениеЗаполнено(Контекст.ИмяОтдельногоРегистраКлючей), " | И (ТекущийСписок.Регистр = &ИдентификаторРегистра)", "") + " | И (ТекущийСписок.ВариантДоступа = &ВариантДоступа) - | И (&УточнениеПланаЗапроса)"; + | И (&УточнениеПланаЗапроса)"; // @query-part-1, @query-part-3 КонецЕсли; Если Условие.ГруппаТаблиц = Неопределено Или ЗначениеЗаполнено(Условие.ТабличнаяЧасть) Тогда - ТекстСоединения = // @query-part-1 + ТекстСоединения = "#ТекущиеДанныеДляОтбора КАК ТекущиеДанныеДляОтбора | ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ТекущийСписок КАК ТекущийСписок - | ПО (" + Условие.ПолеИлиПсевдоним + " = ТекущиеДанныеДляОтбора." + Условие.ПоляДляОтбора + ")"; + | ПО (" + Условие.ПолеИлиПсевдоним + " = ТекущиеДанныеДляОтбора." + Условие.ПоляДляОтбора + ")"; // @query-part-1 Если ЗначениеЗаполнено(Условие.ТабличнаяЧасть) Тогда ТекстСоединения = СтрЗаменить(ТекстСоединения, "&ТекущийСписок", "&ТекущийСписок." + Условие.ТабличнаяЧасть); @@ -34499,11 +35414,10 @@ СледующаяТаблица = ОбратнаяГруппаТаблиц[Индекс + 1]; ТаблицаИПсевдоним = СледующаяТаблица.Таблица + " КАК " + СледующаяТаблица.Псевдоним; КонецЕсли; - // @query-part-1 @query-part-2 @query-part-3 ТекстСоединения = ТекстСоединения + " | ВНУТРЕННЕЕ СОЕДИНЕНИЕ " + ТаблицаИПсевдоним + " | ПО (" + СтрСоединить(УсловияСоединения, ") - | И (") + ")"; + | И (") + ")"; // @query-part-1, @query-part-2, @query-part-3 КонецЦикла; Возврат ТекстСоединения + ДополнительноеУсловие; @@ -34681,10 +35595,10 @@ ПервыйСимвол = Лев(ПолноеИмя, 1); - Возврат ПервыйСимвол > "А" // @Non-NLS - И ПервыйСимвол < "Я" // @Non-NLS - Или ПервыйСимвол > "а" // @Non-NLS - И ПервыйСимвол < "я"; // @Non-NLS + Возврат ПервыйСимвол > "А" + И ПервыйСимвол < "Я" + Или ПервыйСимвол > "а" + И ПервыйСимвол < "я"; // @Non-NLS-1, @Non-NLS-2, @Non-NLS-3, @Non-NLS-4 КонецФункции @@ -34717,12 +35631,16 @@ Результат.Вставить("ТекстЗапросаПроверкиПраваЧтение"); // Текст извлечения владельца из ссылки объекта. Результат.Вставить("ПолеОбъектаВладельцаВЗапросеПроверкиПрав"); + // Получение прав пользователей на список элементов данных. + Результат.Вставить("ТекстЗапросаПравПользователей"); ДобавитьТекстЗапросаДатыСледующегоЭлементаДанных(Результат, Контекст); + ЗаполнитьЗапросыПравПользователей(Результат, Контекст); Если Результат.БезЗаписиКлючейДоступа Тогда // Запрос объектов или отборов записей для удаления или установки пустых ключей. Результат.Вставить("ТекстЗапросаУстаревшихЭлементовДанных"); + Результат.Вставить("ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных"); Результат.Вставить("ТекстЗапросаПроверкиУстаревшихЭлементовДанных"); Результат.Вставить("ТекстЗапросаНекорректныхЭлементовДанных"); Результат.Вставить("ТекстЗапросаНекорректныхЭлементовДанныхИзОбщегоРегистра"); @@ -34757,6 +35675,7 @@ Результат.Вставить("ОписаниеЗапросовУстаревшихКлючейДоступаПоВедущимОбъектам", Новый Соответствие); // Запрос несуществующих объектов и отборов записей, которые не используются. Результат.Вставить("ТекстЗапросаУстаревшихЭлементовДанных"); + Результат.Вставить("ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных"); Результат.Вставить("ТекстЗапросаПроверкиУстаревшихЭлементовДанных"); Результат.Вставить("ТекстЗапросаНекорректныхЭлементовДанных"); Результат.Вставить("ТекстЗапросаНекорректныхЭлементовДанныхИзОбщегоРегистра"); @@ -34921,7 +35840,7 @@ |УПОРЯДОЧИТЬ ПО | ТекущийСписок.Период УБЫВ"; Если Контекст.ИмяКоллекцииТипа = "РегистрыРасчета" Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".Период", ".ПериодРегистрации"); // @query-part-1 @query-part-2 + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".Период", ".ПериодРегистрации"); // @query-part-1, @query-part-2 КонецЕсли; КонецЕсли; @@ -34946,7 +35865,7 @@ ИначеЕсли Результат.БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей Тогда ТекстЗапросаУстаревших = ПризнакПустогоЗапроса(); - ТекстЗапросаНекорректных = + ТекстЗапросаНекорректных = // ТекстЗапросаНекорректныхЭлементовДанных "ВЫБРАТЬ ПЕРВЫЕ 995 | КлючиДоступаКОбъектам.Объект КАК ТекущаяСсылка, | ИСТИНА КАК Удалить, @@ -34965,7 +35884,7 @@ Если Результат.ДляВнешнихПользователей Тогда ТекстЗапросаУстаревших = ПризнакПустогоЗапроса(); Иначе - ТекстЗапросаУстаревших = + ТекстЗапросаУстаревших = // ТекстЗапросаНекорректныхЭлементовДанных "ВЫБРАТЬ ПЕРВЫЕ 995 | КлючиДоступаКОбъектам.Объект КАК ТекущаяСсылка, | ЛОЖЬ КАК Удалить, @@ -35005,8 +35924,9 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Результат.Список); Результат.ТекстЗапросаПроверкиУстаревшихЭлементовДанных = ТекстЗапроса; КонецЕсли; - Если Результат.БезЗаписиКлючейДоступа Тогда - ТекстЗапросаНекорректных = + Если Не Результат.СЗаписьюКлючейДоступаДляПользователейИВнешнихПользователей + И Не Результат.БезЗаписиКлючейДоступа Тогда + ТекстЗапросаНекорректных = // ТекстЗапросаНекорректныхЭлементовДанных "ВЫБРАТЬ ПЕРВЫЕ 995 | КлючиДоступаКОбъектам.Объект КАК ТекущаяСсылка, | ЛОЖЬ КАК Удалить, @@ -35022,7 +35942,26 @@ |УПОРЯДОЧИТЬ ПО | КлючиДоступаКОбъектам.Объект"; // @query-part-1 ТекстЗапросаНекорректных = СтрЗаменить(ТекстЗапросаНекорректных, "#КлючДоступаПользователей", - ?(Результат.ДляВнешнихПользователей, "КлючДоступаВнешнихПользователей", "КлючДоступаПользователей")); + ?(Результат.ДляВнешнихПользователей, "КлючДоступаПользователей", "КлючДоступаВнешнихПользователей")); + + ТекстЗапроса = // ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных + "ВЫБРАТЬ + | ЭлементыДанных.ТекущаяСсылка КАК ТекущаяСсылка + |ПОМЕСТИТЬ ЭлементыДанных + |ИЗ + | &ЭлементыДанных КАК ЭлементыДанных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КлючиДоступаКОбъектам.Объект КАК Объект, + | КлючиДоступаКОбъектам.КлючДоступаПользователей КАК КлючДоступаПользователей, + | КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей КАК КлючДоступаВнешнихПользователей + |ИЗ + | ЭлементыДанных КАК ЭлементыДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = ЭлементыДанных.ТекущаяСсылка)"; + Результат.ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных = ТекстЗапроса; Иначе ТекстЗапросаНекорректных = ПризнакПустогоЗапроса(); КонецЕсли; @@ -35033,12 +35972,16 @@ Возврат; КонецЕсли; + ОпорныеПоляВыбора = "КлючиДоступаКРегистрам.ВариантДоступа КАК ВариантДоступа"; + Если ЗначениеЗаполнено(Результат.ИмяОтдельногоРегистраКлючей) Тогда ИмяРегистра = Результат.ИмяОтдельногоРегистраКлючей; ОсновнойОтбор = "ИСТИНА"; // @query-part-1 Иначе ИмяРегистра = "КлючиДоступаКРегистрам"; ОсновнойОтбор = "КлючиДоступаКРегистрам.Регистр = &ИдентификаторРегистра"; + ОпорныеПоляВыбора = "КлючиДоступаКРегистрам.Регистр КАК Регистр, + | " + ОпорныеПоляВыбора; КонецЕсли; ОтборПоВидуПользователей = "ВЫБОР @@ -35055,7 +35998,6 @@ МаксимальноеКоличествоОпорныхПолей = ОпорныеПоля.МаксимальноеКоличество; КонецЕсли; - ОпорныеПоляВыбора = "КлючиДоступаКРегистрам.ВариантДоступа КАК ВариантДоступа"; ОпорныеПоляДляОтбора = "КлючиДоступаКРегистрам.ВариантДоступа >= &ВариантДоступа | И (КлючиДоступаКРегистрам.ВариантДоступа > &ВариантДоступа | ИЛИ КлючиДоступаКРегистрам.ВариантДоступа = &ВариантДоступа"; // @query-part-1 @@ -35138,10 +36080,15 @@ КоличествоИспользуемыхОпорныхПолей = ОпорныеПоля.Используемые.Количество(); Номер = 1; - ОпорныеПоляВыбораПриПроверке = "КлючиДоступаКРегистрам.ВариантДоступа КАК ВариантДоступа"; + ОпорныеПоляВыбораПриПроверке = ?(ОсновнойОтбор = "ИСТИНА", "", + "КлючиДоступаКРегистрам.Регистр КАК Регистр, + | ") + "КлючиДоступаКРегистрам.ВариантДоступа КАК ВариантДоступа"; ОпорныеПоляВыбораИзСписка = ""; ОпорныеПоляДляСравнения = ""; - ОпорныеПоляДляОтбораПриПроверке = + ОпорныеПоляДляСоединения = ?(ОсновнойОтбор = "ИСТИНА", "", + "(КлючиДоступаКРегистрам.Регистр = ЭлементыДанных.Регистр) + |И ") + "(КлючиДоступаКРегистрам.ВариантДоступа = ЭлементыДанных.ВариантДоступа)"; + ОпорныеПоляДляОтбора2 = "КлючиДоступаКРегистрам.ВариантДоступа = &ОсновнойВариантДоступа | И "; // @query-part-1 УсловиеПроверкиПервогоПоля = ""; @@ -35160,12 +36107,14 @@ Отбор = "(КлючиДоступаКРегистрам.Поле%1 > &Поле%1 | ИЛИ КлючиДоступаКРегистрам.Поле%1 = &Поле%1"; // @query-part-1 КонецЕсли; - ОпорныеПоляДляОтбораПриПроверке = ОпорныеПоляДляОтбораПриПроверке + ТекстСОтступом(?(Номер = 1, "", " - |И ") + СтрШаблон(Отбор, Номер), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-1 + ОпорныеПоляДляОтбора2 = ОпорныеПоляДляОтбора2 + ТекстСОтступом(?(Номер = 1, "", " + |И ") + СтрШаблон(Отбор, Номер), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-2 - // Поля для сравнения. + // Поля для сравнения и соединения. ОпорныеПоляДляСравнения = ОпорныеПоляДляСравнения + ?(ОпорныеПоляДляСравнения = "", "", " - |И ") + СтрШаблон("(ТекущийСписок.%2 = КлючиДоступаКРегистрам.Поле%1)", Номер, ИмяОпорногоПоля); // @query-part-1 + |И ") + СтрШаблон("(ТекущийСписок.%2 = КлючиДоступаКРегистрам.Поле%1)", Номер, ИмяОпорногоПоля); // @query-part-3 + ОпорныеПоляДляСоединения = ОпорныеПоляДляСоединения + ?(ОпорныеПоляДляСоединения = "", "", " + |И ") + СтрШаблон("(КлючиДоступаКРегистрам.Поле%1 = ЭлементыДанных.Поле%1)", Номер); // @query-part-3 // Условие проверки по первому полю. Если УсловиеПроверкиПервогоПоля = "" Тогда @@ -35178,7 +36127,7 @@ Номер = Номер + 1; КонецЦикла; - ОпорныеПоляДляОтбораПриПроверке = ОпорныеПоляДляОтбораПриПроверке + ОпорныеПоляДляОтбора2 = ОпорныеПоляДляОтбора2 + УправлениеДоступомСлужебныйПовтИсп.СтрокаСимволов(")", КоличествоИспользуемыхОпорныхПолей - 1); ТекстЗапроса = // ТекстЗапросаУстаревшихЭлементовДанных @@ -35210,10 +36159,10 @@ |УПОРЯДОЧИТЬ ПО | &ОпорныеПоляДляУпорядочения"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбора1", ОпорныеПоляВыбораИзСписка); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбора2", ОпорныеПоляВыбораПриПроверке); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбора2", ОпорныеПоляВыбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийРегистрКлючей", "РегистрСведений." + ИмяРегистра); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОсновнойОтбор", ОсновнойОтбор); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляОтбора", ОпорныеПоляДляОтбораПриПроверке); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляОтбора", ОпорныеПоляДляОтбора2); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляСравнения", ТекстСОтступом(ОпорныеПоляДляСравнения, " ")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПроверкиПервогоПоля", УсловиеПроверкиПервогоПоля); @@ -35253,19 +36202,11 @@ Результат.ТекстЗапросаПроверкиУстаревшихЭлементовДанных = ТекстЗапроса; - ОпорныеПоляВыбораНекорректных = ОпорныеПоляВыбораПриПроверке; Если Номер <= МаксимальноеКоличествоОпорныхПолей Тогда ПроверкаNULL = ""; Для Счетчик = Номер По МаксимальноеКоличествоОпорныхПолей Цикл - ОпорныеПоляВыбораНекорректных = ОпорныеПоляВыбораНекорректных + СтрШаблон(", - | ВЫБОР - | КОГДА КлючиДоступаКРегистрам.ВариантДоступа = &ОсновнойВариантДоступа - | И &ПроверкаNULL1 - | ТОГДА NULL - | ИНАЧЕ КлючиДоступаКРегистрам.Поле%1 - | КОНЕЦ КАК Поле%1", Счетчик); // @query-part-1 ПроверкаNULL = ПроверкаNULL + ?(ПроверкаNULL = "", "", " - |ИЛИ ") + СтрШаблон("КлючиДоступаКРегистрам.Поле%1 <> ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)", Счетчик); // @query-part-1 + |ИЛИ ") + СтрШаблон("КлючиДоступаКРегистрам.Поле%1 <> ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Null)", Счетчик); // @query-part-3 КонецЦикла; Иначе ПроверкаNULL = "ЛОЖЬ"; @@ -35290,7 +36231,7 @@ | |УПОРЯДОЧИТЬ ПО | &ОпорныеПоляДляУпорядочения"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбора", ОпорныеПоляВыбораНекорректных); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбора", ОпорныеПоляВыбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийРегистрКлючей", "РегистрСведений." + ИмяРегистра); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОсновнойОтбор", ОсновнойОтбор); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоВидуПользователей", ОтборПоВидуПользователей); @@ -35298,7 +36239,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПроверкаNULL1", "(" + ТекстСОтступом(ПроверкаNULL, " ") + ")"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПроверкаNULL2", - ТекстСОтступом(ПроверкаNULL, " ")); + "(" + ТекстСОтступом(ПроверкаNULL, " ") + ")"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляУпорядочения", ОпорныеПоляДляУпорядочения); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОсновнойВариантДоступа", ВариантДоступаСтрокой); @@ -35318,6 +36259,33 @@ Результат.ТекстЗапросаНекорректныхЭлементовДанных = ТекстЗапроса; + ОпорныеПоляВыбораДляОбновления = ОпорныеПоляВыбора + ", + | КлючиДоступаКРегистрам.КлючДоступа КАК КлючДоступа"; // @query-part-1 + + ТекстЗапроса = // ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных + "ВЫБРАТЬ + | &ОпорныеПоляВыбораПриПроверке + |ПОМЕСТИТЬ ЭлементыДанных + |ИЗ + | &ЭлементыДанных КАК КлючиДоступаКРегистрам + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | &ОпорныеПоляВыбораДляОбновления + |ИЗ + | ЭлементыДанных КАК ЭлементыДанных + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ТекущийРегистрКлючей КАК КлючиДоступаКРегистрам + | ПО &ОпорныеПоляДляСоединения"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбораПриПроверке", ОпорныеПоляВыбораПриПроверке); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляВыбораДляОбновления", ОпорныеПоляВыбораДляОбновления); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийРегистрКлючей", "РегистрСведений." + ИмяРегистра); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляСоединения", + ТекстСОтступом(ОпорныеПоляДляСоединения, " ")); + + Результат.ТекстЗапросаДляОбновленияУстаревшихЭлементовДанных = ТекстЗапроса; + КонецПроцедуры // Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. @@ -35746,15 +36714,15 @@ // Для запроса новых комбинаций. ОпорныеПоляУсловиеСоединения = ОпорныеПоляУсловиеСоединения + ?(ОпорныеПоляУсловиеСоединения = "", "", " - | И ") + "(КлючиДоступаКРегистрам.ВариантДоступа = &ВариантДоступа)"; // @query-part-1 + | И ") + "(КлючиДоступаКРегистрам.ВариантДоступа = &ВариантДоступа)"; // @query-part-3 // Для запроса текущих ключей доступа. УсловиеОтбора = УсловиеОтбора + ?(УсловиеОтбора = "", "", " - | И ") + "ТекущийСписок.ВариантДоступа = &ВариантДоступа"; // @query-part-1 + | И ") + "ТекущийСписок.ВариантДоступа = &ВариантДоступа"; // @query-part-3 // Для запроса комбинаций с устаревшими ключами. ПоляОтбора = ПоляОтбора + ?(ПоляОтбора = "", "", " - | И ") + "ТекущийСписок.ВариантДоступа = &ВариантДоступа"; // @query-part-1 + | И ") + "ТекущийСписок.ВариантДоступа = &ВариантДоступа"; // @query-part-3 ПоляДляВыбораДиапазона = ""; @@ -35770,10 +36738,10 @@ // Для запроса новых комбинаций. ОпорныеПоляДляВыбора = ОпорныеПоляДляВыбора + ?(ОпорныеПоляДляВыбора = "", "", ", - | ") + СтрШаблон("ТекущийРегистр.%2 КАК Поле%1", Номер, ИмяОпорногоПоля); // @query-part-3 + | ") + СтрШаблон("ТекущийРегистр.%2 КАК Поле%1", Номер, ИмяОпорногоПоля); // @query-part-4 ОпорныеПоляУсловиеСоединения = ОпорныеПоляУсловиеСоединения + ?(ОпорныеПоляУсловиеСоединения = "", "", " - | И ") + СтрШаблон("(КлючиДоступаКРегистрам.Поле%1 = ТекущийРегистр.%2)", Номер, ИмяОпорногоПоля); // @query-part-1 + | И ") + СтрШаблон("(КлючиДоступаКРегистрам.Поле%1 = ТекущийРегистр.%2)", Номер, ИмяОпорногоПоля); // @query-part-3 ОпорныеПоляДляГруппировкиИлиУпорядочения = ОпорныеПоляДляГруппировкиИлиУпорядочения + ?(ОпорныеПоляДляГруппировкиИлиУпорядочения = "", "", ", ") + ИмяОпорногоПоля; @@ -35785,38 +36753,38 @@ | ИЛИ ТекущийРегистр.%2 = &Поле%1"; // @query-part-1 КонецЕсли; Отбор = ТекстСОтступом(?(Номер = 1, "", " - |И ") + СтрШаблон(Отбор, Номер, ИмяОпорногоПоля), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-1 + |И ") + СтрШаблон(Отбор, Номер, ИмяОпорногоПоля), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-2 ОпорныеПоляДляОтбора1 = ОпорныеПоляДляОтбора1 + Отбор; ОпорныеПоляДляОтбора2 = ОпорныеПоляДляОтбора2 + Отбор; // Для запроса текущих ключей доступа. УсловиеОтбора = УсловиеОтбора + ?(УсловиеОтбора = "", "", " - | И ") + СтрШаблон("ТекущийСписок.Поле%1 = &Поле%1", Номер) + "_%1"; // @query-part-1 + | И ") + СтрШаблон("ТекущийСписок.Поле%1 = &Поле%1", Номер) + "_%1"; // @query-part-3 // Для запроса комбинаций с устаревшими ключами. ОпорныеПоля.ДляВыбора = ОпорныеПоля.ДляВыбора + ?(ОпорныеПоля.ДляВыбора = "", "", ", - | ") + СтрШаблон("ТекущийСписок.Поле%1 КАК Поле%1", Номер); // @query-part-3 + | ") + СтрШаблон("ТекущийСписок.Поле%1 КАК Поле%1", Номер); // @query-part-4 ПоляДляВыбораДиапазона = ПоляДляВыбораДиапазона + ?(ПоляДляВыбораДиапазона = "", "", ", - | ") + СтрШаблон("ЭлементыДанных.Поле%1 КАК Поле%1ОкончанияДиапазона", Номер); // @query-part-3 + | ") + СтрШаблон("ЭлементыДанных.Поле%1 КАК Поле%1ОкончанияДиапазона", Номер); // @query-part-4 Если Номер = КоличествоИспользуемыхПолей Тогда Отбор = "ТекущийСписок.Поле%1 > &Поле%1НачалаДиапазона"; // @query-part-1 Иначе Отбор = "(ТекущийСписок.Поле%1 > &Поле%1НачалаДиапазона - | ИЛИ ТекущийСписок.Поле%1 = &Поле%1НачалаДиапазона"; // @query-part-1 @query-part-2 + | ИЛИ ТекущийСписок.Поле%1 = &Поле%1НачалаДиапазона"; // @query-part-1 КонецЕсли; ПоляОтбора1 = ПоляОтбора1 + ТекстСОтступом(?(Номер = 1, "", " - |И ") + СтрШаблон(Отбор, Номер), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-1 + |И ") + СтрШаблон(Отбор, Номер), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-2 Если Номер = КоличествоИспользуемыхПолей Тогда Отбор = "ТекущийСписок.Поле%1 <= &Поле%1ОкончанияДиапазона"; // @query-part-1 Иначе Отбор = "(ТекущийСписок.Поле%1 < &Поле%1ОкончанияДиапазона - | ИЛИ ТекущийСписок.Поле%1 = &Поле%1ОкончанияДиапазона"; // @query-part-1 @query-part-2 + | ИЛИ ТекущийСписок.Поле%1 = &Поле%1ОкончанияДиапазона"; // @query-part-1 КонецЕсли; ПоляОтбора2 = ПоляОтбора2 + ТекстСОтступом(?(Номер = 1, "", " - |И ") + СтрШаблон(Отбор, Номер), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-1 + |И ") + СтрШаблон(Отбор, Номер), Лев(СтрокаТабуляций, Номер * 2)); // @query-part-2 ОпорныеПоля.ДляУпорядочения = ОпорныеПоля.ДляУпорядочения + ?(ОпорныеПоля.ДляУпорядочения = "", "", ", ") + СтрШаблон("Поле%1", Номер); @@ -35857,7 +36825,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляОтбора", ТекстСОтступом(ПоляОтбора1, " ")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляУпорядочения", ОпорныеПоля.ДляУпорядочения); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляОбратногоУпорядочения", - СтрЗаменить(ОпорныеПоля.ДляУпорядочения, ",", " УБЫВ,") + " УБЫВ"); // @query-part-2 @query-part-3 + СтрЗаменить(ОпорныеПоля.ДляУпорядочения, ",", " УБЫВ,") + " УБЫВ"); // @query-part-3, @query-part-4 Контекст.Вставить("ТекстЗапросаДиапазонаЭлементовДанных", ТекстЗапроса); ТекстЗапроса = // ТекстЗапросаПроверки @@ -36314,7 +37282,7 @@ УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа[0]; Иначе УсловиеОтбора = "(" + СтрСоединить(Контекст.ЧастиУсловияВыбораПравВедущихКлючейДоступа, - Символы.ПС + " ИЛИ ") + ")"; // @query-part-1 + Символы.ПС + " ИЛИ ") + ")"; // @query-part-2 КонецЕсли; ТекстЗапроса = @@ -36471,7 +37439,7 @@ УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравВедущихСписков[0]; Иначе УсловиеОтбора = "(" + СтрСоединить(Контекст.ЧастиУсловияВыбораПравВедущихСписков, - Символы.ПС + " ИЛИ ") + ")"; // @query-part-1 + Символы.ПС + " ИЛИ ") + ")"; // @query-part-2 КонецЕсли; УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "ПраваНаСписки.Таблица"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); @@ -36487,7 +37455,31 @@ Возврат; КонецЕсли; - ТекстЗапроса = + ТекстЗапроса = ТекстЗапросаВыбораПравПоВладельцамНастроекПрав(); + + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); + КонецЕсли; + + Если Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав.Количество() = 1 Тогда + УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав[0]; + Иначе + УсловиеОтбора = СтрСоединить(Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав, + Символы.ПС + " ИЛИ "); // @query-part-1 + КонецЕсли; + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "НаследованиеНастроек.Объект"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", ТекстСОтступом(УсловиеОтбора, " ")); + + Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); + +КонецПроцедуры + +// Для процедуры ДобавитьЧастьЗапросаВыбораПравПоВладельцамНастроекПрав и +// функции ТекстЗапросаПравПользователейПоВладельцамНастроекПрав. +// +Функция ТекстЗапросаВыбораПравПоВладельцамНастроекПрав() + + Возврат "ВЫБРАТЬ РАЗЛИЧНЫЕ | НаследованиеНастроек.Объект КАК Объект |ПОМЕСТИТЬ ОбъектыСЗапрещениемЧтения @@ -36666,20 +37658,20 @@ | МАКСИМУМ(НастройкиПрав.ПравоИзменение) КАК ПравоИзменение |ИЗ | (ВЫБРАТЬ - | НастройкиПравЧтения.Объект КАК Объект, - | НастройкиПравЧтения.Пользователь КАК Пользователь, + | НастройкиПрав.Объект КАК Объект, + | НастройкиПрав.Пользователь КАК Пользователь, | ЛОЖЬ КАК ПравоИзменение | ИЗ - | НастройкиПравЧтения КАК НастройкиПравЧтения + | НастройкиПравЧтения КАК НастройкиПрав | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ - | НастройкиПравИзменения.Объект, - | НастройкиПравИзменения.Пользователь, + | НастройкиПрав.Объект, + | НастройкиПрав.Пользователь, | ИСТИНА | ИЗ - | НастройкиПравИзменения КАК НастройкиПравИзменения) КАК НастройкиПрав + | НастройкиПравИзменения КАК НастройкиПрав) КАК НастройкиПрав | |СГРУППИРОВАТЬ ПО | НастройкиПрав.Объект, @@ -36687,22 +37679,7 @@ |ИТОГИ ПО | ВладелецНастроекПрав"; - Если Контекст.ДляВнешнихПользователей Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); - КонецЕсли; - - Если Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав.Количество() = 1 Тогда - УсловиеОтбора = Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав[0]; - Иначе - УсловиеОтбора = СтрСоединить(Контекст.ЧастиУсловияВыбораПравПоВладельцамНастроекПрав, - Символы.ПС + " ИЛИ "); // @query-part-1 - КонецЕсли; - УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "#ПроверяемоеПоле", "НаследованиеНастроек.Объект"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", ТекстСОтступом(УсловиеОтбора, " ")); - - Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса); - -КонецПроцедуры +КонецФункции // Для процедуры СобратьЧастиЗапросовЗаполнения. Функция ТекстЗапросаКлючейДоступаДляОбновленияПрав(Контекст) @@ -36754,7 +37731,7 @@ УсловиеОтбора = Контекст.ЧастиУсловияОтбораПоВедущимКлючамДоступа[0]; Иначе УсловиеОтбора = "(" + СтрСоединить(Контекст.ЧастиУсловияОтбораПоВедущимКлючамДоступа, - Символы.ПС + " ИЛИ ") + ")"; // @query-part-1 + Символы.ПС + " ИЛИ ") + ")"; // @query-part-2 КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); @@ -36767,7 +37744,7 @@ Функция ТекстЗапросаУстаревшихКлючейДоступа(Контекст) Если Контекст.ЭтоСсылочныйТип Тогда - ТекстЗапросаИспользуемых = // @query-part-1 + ТекстЗапросаИспользуемых = "ВЫБРАТЬ РАЗЛИЧНЫЕ | КлючиДоступаКОбъектам.#КлючДоступаПользователей КАК КлючДоступа |ПОМЕСТИТЬ ИспользуемыеКлючиДоступа @@ -36838,6 +37815,303 @@ КонецФункции +// Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. +Процедура ЗаполнитьЗапросыПравПользователей(Результат, Контекст) + + Если Контекст.БезОбъектаМетаданных + Или Не Контекст.ЭтоСсылочныйТип + И Контекст.ИмяКоллекцииТипа <> "РегистрыСведений" + И Контекст.ИмяКоллекцииТипа <> "РегистрыНакопления" + И Контекст.ИмяКоллекцииТипа <> "РегистрыБухгалтерии" + И Контекст.ИмяКоллекцииТипа <> "РегистрыРасчета" Тогда + Возврат; + КонецЕсли; + + Свойства = СвойстваОграниченияСписка(Контекст.Список, Контекст); + ТекстыЗапросов = Новый Массив; + ЧастиЗапроса = Новый Массив; + + Если Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа + Или Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователей Тогда + + ТекстЗапроса = + "ВЫБРАТЬ + | НаборыПользователей.Пользователь КАК ПользовательСПравом, + | РазрешенныеКлючиДоступа.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | ТекущаяТаблица КАК ТекущаяТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = &ПолеОбъекта) + | И (&УсловиеПроверкиТипаВладельцаНастроекПрав1) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ПО (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыГруппДоступа КАК НаборыПользователей + | ПО (НаборыПользователей.ТипЭлементовНабора = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) + | И (ВЫБОР + | КОГДА НаборыПользователей.Ссылка = РазрешенныеКлючиДоступа.Пользователь + | ТОГДА ИСТИНА + | ИНАЧЕ НаборыПользователей.РазрешенныйНаборГруппПользователей = РазрешенныеКлючиДоступа.Пользователь + | КОНЕЦ) + | И (&ОтборПользователей1)"; + ЧастиЗапроса.Добавить(ТекстЗапроса); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | НаборыПользователей.Пользователь КАК ПользовательСПравом, + | РазрешенныеКлючиДоступа.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | ТекущаяТаблица КАК ТекущаяТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = &ПолеОбъекта) + | И (&УсловиеПроверкиТипаВладельцаНастроекПрав1) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыГруппДоступа КАК НаборыПользователей + | ПО (НаборыПользователей.ТипЭлементовНабора = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) + | И (НаборыПользователей.РазрешенныйНаборГруппДоступа = РазрешенныеКлючиДоступа.НаборГруппДоступа) + | И (&ОтборПользователей1)"; + ЧастиЗапроса.Добавить(ТекстЗапроса); + + ТекстЗапроса = + "ВЫБРАТЬ + | &РазрешенныйПустойНаборГруппДоступа КАК ПользовательСПравом, + | РазрешенныеКлючиДоступа.ПравоИзменение КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | ТекущаяТаблица КАК ТекущаяТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ПО (КлючиДоступаКОбъектам.Объект = &ПолеОбъекта) + | И (&УсловиеПроверкиТипаВладельцаНастроекПрав1) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) + | И (РазрешенныеКлючиДоступа.НаборГруппДоступа = &РазрешенныйПустойНаборГруппДоступа)"; + ЧастиЗапроса.Добавить(ТекстЗапроса); + + ТекстыЗапросов = Новый Массив; + УсловиеПроверкиТипаВладельцаНастроекПрав1 = "ИСТИНА"; + УсловиеПроверкиТипаВладельцаНастроекПрав2 = "ИСТИНА"; + + Если Не Результат.ИспользуетсяОграничениеПоВладельцу Тогда + ТипыВладельцевНастроекПравПоля = Неопределено; + Иначе + ТипКонечногоПоля = Контекст.СвойстваПолей[0].ТипКонечногоПоля; + ТипыВладельцевНастроекПравПоля = Новый Соответствие; + Если Контекст.ОграничениеДоступаВключено Тогда + Для Каждого КлючИЗначение Из Контекст.ТипыВладельцевНастроекПрав Цикл + Если ТипКонечногоПоля.СодержитТип(КлючИЗначение.Ключ) Тогда + ТипыВладельцевНастроекПравПоля.Вставить(КлючИЗначение.Ключ, + ИмяТипаНаЯзыкеЗапросов(КлючИЗначение.Ключ)); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ТипыВладельцевНастроекПравПоля.Количество() = 0 Тогда + ТипыВладельцевНастроекПравПоля = Неопределено; + + ИначеЕсли ТипКонечногоПоля.Типы().Количество() = ТипыВладельцевНастроекПравПоля.Количество() Тогда + ЧастиЗапроса.Очистить(); + Иначе + Условие1 = ""; + Условие2 = ""; + Для Каждого СвойстваТипа Из ТипыВладельцевНастроекПравПоля Цикл + Условие1 = Условие1 + ?(Условие1 = "", "", " + | И ") + "ТИПЗНАЧЕНИЯ(&ПолеОбъекта) <> ТИП(" + СвойстваТипа.Значение + ")"; // @query-part-3, @query-part-4 + Условие2 = Условие2 + ?(Условие2 = "", "", " + | ИЛИ ") + "ТИПЗНАЧЕНИЯ(&ПолеОбъекта) = ТИП(" + СвойстваТипа.Значение + ")"; // @query-part-3, @query-part-4 + КонецЦикла; + УсловиеПроверкиТипаВладельцаНастроекПрав1 = Условие1; + УсловиеПроверкиТипаВладельцаНастроекПрав2 = Условие2; + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(ТипыВладельцевНастроекПравПоля) Тогда + ДобавитьТекстЗапросаПравПользователейПоВладельцамНастроекПрав(Контекст.ДляВнешнихПользователей, + ЧастиЗапроса, ТекстыЗапросов); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | ПраваПользователей.ПользовательСПравом КАК ПользовательСПравом, + | МАКСИМУМ(ПраваПользователей.ПравоИзменение) КАК ПравоИзменение, + | ПраваПользователей.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ПользователиСПравамиНаЭлементыДанных + |ИЗ + | (#ЧастиЗапроса) КАК ПраваПользователей + | + |СГРУППИРОВАТЬ ПО + | ПраваПользователей.Ссылка, + | ПраваПользователей.ПользовательСПравом"; // @query-part-1 + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ЧастиЗапроса", + ТекстСОтступом(СтрСоединить(ЧастиЗапроса, ОбщегоНазначения.ТекстОбъединитьВсе()), " ")); + + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РегистрСведений.КлючиДоступаПользователей", + "РегистрСведений.КлючиДоступаВнешнихПользователей"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазрешенныеКлючиДоступа.Пользователь", + "РазрешенныеКлючиДоступа.ВнешнийПользователь"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", + "Справочник.ВнешниеПользователи"); + + Если Контекст.ЭтоСсылочныйТип + Или Результат.ИспользуетсяОграничениеПоВладельцу Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КлючиДоступаКОбъектам.КлючДоступаПользователей", + "КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей"); + КонецЕсли; + КонецЕсли; + + ТекстыЗапросов.Добавить(ТекстЗапроса); + ТекстЗапроса = СтрСоединить(ТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов()); + + Если Контекст.ЭтоСсылочныйТип + Или Результат.ИспользуетсяОграничениеПоВладельцу Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПроверкиТипаВладельцаНастроекПрав1", + УсловиеПроверкиТипаВладельцаНастроекПрав1); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПроверкиТипаВладельцаНастроекПрав2", + УсловиеПроверкиТипаВладельцаНастроекПрав2); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПроверкиТипаВладельцаНастроекПрав3", + ТекстСОтступом(УсловиеПроверкиТипаВладельцаНастроекПрав2, " ")); + КонецЕсли; + + Если Результат.ИспользуетсяОграничениеПоВладельцу Тогда + Если Контекст.ЭтоСсылочныйТип Тогда + ПолеОбъекта = "Ссылка." + Результат.ПолеВладельца.Имя; + Иначе + ЧастиПоляВладельца = СтрРазделить(Результат.ПолеВладельца.Имя, "."); + ЧастиПоляВладельца[0] = "Ссылка"; + ПолеОбъекта = СтрСоединить(ЧастиПоляВладельца, "."); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеОбъекта", "ТекущаяТаблица." + ПолеОбъекта); + + ИначеЕсли Контекст.ЭтоСсылочныйТип Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеОбъекта", "ТекущаяТаблица.Ссылка"); + + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "КлючиДоступаКОбъектам.Объект = &ПолеОбъекта", + "КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка)"); // @query-part-1, @query-part-2 + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + " И (&УсловиеПроверкиТипаВладельцаНастроекПрав1)", + " И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1) + | И (&ОтборПоИзмерениям)"); // @query-part-1 @query-part-2 + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КлючиДоступаКОбъектам.КлючДоступаПользователей", + "КлючиДоступаКРегистрам.КлючДоступа"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КлючиДоступаКОбъектам", "КлючиДоступаКРегистрам"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + "ТекущаяТаблица КАК ТекущаяТаблица", + Контекст.Список + " КАК ТекущаяТаблица"); // @query-part-1, @query-part-2 + + УточнитьРегистрКлючейИУсловиеСоединения(ТекстЗапроса, Результат, Контекст); + + УстановитьПоляИзмеренийДляВыбораИГруппировки(ТекстЗапроса, Контекст.Список); + КонецЕсли; + + Результат.ТекстЗапросаПравПользователей = ТекстЗапроса; + +КонецПроцедуры + +// Для процедуры ЗаполнитьЗапросыПравПользователей. +Процедура УстановитьПоляИзмеренийДляВыбораИГруппировки(ТекстЗапроса, ПолноеИмяРегистра) + + ОписаниеКлючаЗаписи = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи(ПолноеИмяРегистра); + + ИзмеренияДляВыбора = Новый Массив; + ИзмеренияДляГруппировки = Новый Массив; + Для Каждого ОписаниеПоля Из ОписаниеКлючаЗаписи.ОписаниеПолей Цикл + УточненноеИмя = УточненноеИмяПоляКлючаЗаписиДляВыбораПравДоступаКДанным(ОписаниеПоля.Имя); + ИзмеренияДляВыбора.Добавить(СтрШаблон("ТекущаяТаблица.%1 КАК %2", ОписаниеПоля.Имя, УточненноеИмя)); + ИзмеренияДляГруппировки.Добавить(СтрШаблон("ПраваПользователей.%1,", УточненноеИмя)); + КонецЦикла; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТекущаяТаблица.Ссылка КАК Ссылка", + СтрСоединить(ИзмеренияДляВыбора, ", + | ")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПраваПользователей.Ссылка КАК Ссылка", + СтрЗаменить(СтрСоединить(ИзмеренияДляВыбора, ", + | "), "ТекущаяТаблица.", "ПраваПользователей.")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПраваПользователей.Ссылка,", + СтрСоединить(ИзмеренияДляГруппировки, " + | ")); + +КонецПроцедуры + +// Для процедуры УстановитьПоляИзмеренийДляВыбораИГруппировки +Функция УточненноеИмяПоляКлючаЗаписиДляВыбораПравДоступаКДанным(ИмяПоля) + + Если ВРег(ИмяПоля) = ВРег("ПользовательСПравом") + Или ВРег(ИмяПоля) = ВРег("ПравоИзменение") Тогда + Возврат ИмяПоля + "_"; + КонецЕсли; + + Возврат ИмяПоля; + +КонецФункции + +// Для процедуры ЗаполнитьЗапросыПравПользователей. +Процедура ДобавитьТекстЗапросаПравПользователейПоВладельцамНастроекПрав(ДляВнешнихПользователей, + ЧастиЗапроса, ТекстыЗапросов) + + ТекстЗапроса = ТекстЗапросаВыбораПравПоВладельцамНастроекПрав(); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УточнениеПланаЗапроса", "ИСТИНА"); + + Если ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); + КонецЕсли; + + УсловиеОтбора = + "НаследованиеНастроек.Объект В + | (ВЫБРАТЬ + | &ПолеОбъекта + | ИЗ + | ТекущаяТаблица КАК ТекущаяТаблица + | ГДЕ + | &УсловиеПроверкиТипаВладельцаНастроекПрав3)"; // @query-part-1 + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", УсловиеОтбора); + + ЗапросыПакета = СтрРазделить(ТекстЗапроса, ";"); + ЗапросыПакета.Удалить(ЗапросыПакета.Количество() - 1); + ТекстыЗапросов.Добавить(СокрП(СтрСоединить(ЗапросыПакета, ";"))); + + ТекстЗапроса = + "ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь КАК ПользовательСПравом, + | ЛОЖЬ КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | НастройкиПравЧтения КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущаяТаблица КАК ТекущаяТаблица + | ПО (НастройкиПрав.Объект = &ПолеОбъекта) + | И (&УсловиеПроверкиТипаВладельцаНастроекПрав2) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) + | И (&ОтборПользователей2)"; + ЧастиЗапроса.Добавить(ТекстЗапроса); + + ТекстЗапроса = + "ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь КАК ПользовательСПравом, + | ИСТИНА КАК ПравоИзменение, + | ТекущаяТаблица.Ссылка КАК Ссылка + |ИЗ + | НастройкиПравИзменения КАК НастройкиПрав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущаяТаблица КАК ТекущаяТаблица + | ПО (НастройкиПрав.Объект = &ПолеОбъекта) + | И (&УсловиеПроверкиТипаВладельцаНастроекПрав2) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = НастройкиПрав.Пользователь) + | И (&ОтборПользователей2)"; + ЧастиЗапроса.Добавить(ТекстЗапроса); + +КонецПроцедуры + // Для процедуры ДобавитьТекстыЗапросовВПараметрыОграничения. Процедура ЗаполнитьЗапросыПроверкиПравЧтениеИзменение(Результат, Контекст) @@ -36852,83 +38126,52 @@ Если Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа Или Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователей Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + |ГДЕ + | КлючиДоступаКОбъектам.Объект = &Объект + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + | И РазрешенныеКлючиДоступа.Пользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппПользователей) + | И РазрешенныеКлючиДоступа.ПравоИзменение) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей + | И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа) + | И РазрешенныеКлючиДоступа.ПравоИзменение))"; Если Контекст.ДляВнешнихПользователей Тогда - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам - |ГДЕ - | КлючиДоступаКОбъектам.Объект = &Объект - | И (ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей - | И РазрешенныеКлючиДоступа.ВнешнийПользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппПользователей) - | И РазрешенныеКлючиДоступа.ПравоИзменение) - | ИЛИ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей - | И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа) - | И РазрешенныеКлючиДоступа.ПравоИзменение))"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам - |ГДЕ - | КлючиДоступаКОбъектам.Объект = &Объект - | И (ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей - | И РазрешенныеКлючиДоступа.Пользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппПользователей) - | И РазрешенныеКлючиДоступа.ПравоИзменение) - | ИЛИ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей - | И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа) - | И РазрешенныеКлючиДоступа.ПравоИзменение))"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РегистрСведений.КлючиДоступаПользователей", + "РегистрСведений.КлючиДоступаВнешнихПользователей"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазрешенныеКлючиДоступа.Пользователь", + "РазрешенныеКлючиДоступа.ВнешнийПользователь"); КонецЕсли; Иначе - Если Контекст.ДляВнешнихПользователей Тогда - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа - | ПО (КлючиДоступаКОбъектам.Объект = &Объект) - | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей) - | И (РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа)) - | И (РазрешенныеКлючиДоступа.ПравоИзменение)"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа - | ПО (КлючиДоступаКОбъектам.Объект = &Объект) - | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) - | И (РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа)) - | И (РазрешенныеКлючиДоступа.ПравоИзменение)"; - КонецЕсли; + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа + | ПО (КлючиДоступаКОбъектам.Объект = &Объект) + | И (РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКОбъектам.КлючДоступаПользователей) + | И (РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа)) + | И (РазрешенныеКлючиДоступа.ПравоИзменение)"; + КонецЕсли; + Если Контекст.ДляВнешнихПользователей Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "КлючиДоступаКОбъектам.КлючДоступаПользователей", + "КлючиДоступаКОбъектам.КлючДоступаВнешнихПользователей"); КонецЕсли; КонецЕсли; @@ -36983,7 +38226,7 @@ УсловиеПроверкиТипа = ""; Для Каждого СвойстваТипа Из ТипыВладельцевНастроекПравПоля Цикл УсловиеПроверкиТипа = УсловиеПроверкиТипа + ?(УсловиеПроверкиТипа = "", "", " - | ") + "ТИПЗНАЧЕНИЯ(&Объект) = ТИП(" + СвойстваТипа.Значение + ")"; // @query-part-2 + | ИЛИ ") + "ТИПЗНАЧЕНИЯ(&Объект) = ТИП(" + СвойстваТипа.Значение + ")"; // @query-part-3, @query-part-4 КонецЦикла; ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = СтрЗаменить( ТекстЗапросаСПроверкойПоВладельцамНастроекПрав, @@ -37018,61 +38261,37 @@ Если Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователейИГруппДоступа Или Свойства.ОграничениеВШаблонахЧерезКлючиДоступаПользователей Тогда - + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам + |ГДЕ + | КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + | И КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1 + | И (ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + | И РазрешенныеКлючиДоступа.Пользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппПользователей) + | И РазрешенныеКлючиДоступа.ПравоИзменение) + | ИЛИ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа + | ГДЕ + | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа + | И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа) + | И РазрешенныеКлючиДоступа.ПравоИзменение))"; Если Контекст.ДляВнешнихПользователей Тогда - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам - |ГДЕ - | КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - | И КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1 - | И (ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаВнешнихПользователей КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа - | И РазрешенныеКлючиДоступа.ВнешнийПользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппПользователей) - | И РазрешенныеКлючиДоступа.ПравоИзменение) - | ИЛИ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа - | И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа) - | И РазрешенныеКлючиДоступа.ПравоИзменение))"; - Иначе - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.КлючиДоступаКРегистрам КАК КлючиДоступаКРегистрам - |ГДЕ - | КлючиДоступаКРегистрам.Регистр = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) - | И КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1 - | И (ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаПользователей КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа - | И РазрешенныеКлючиДоступа.Пользователь В (&РазрешенныйПользователь, &РазрешенныйНаборГруппПользователей) - | И РазрешенныеКлючиДоступа.ПравоИзменение) - | ИЛИ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - | ИЗ - | РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК РазрешенныеКлючиДоступа - | ГДЕ - | РазрешенныеКлючиДоступа.КлючДоступа = КлючиДоступаКРегистрам.КлючДоступа - | И РазрешенныеКлючиДоступа.НаборГруппДоступа В (&РазрешенныйНаборГруппДоступа, &РазрешенныйПустойНаборГруппДоступа) - | И РазрешенныеКлючиДоступа.ПравоИзменение))"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РегистрСведений.КлючиДоступаПользователей", + "РегистрСведений.КлючиДоступаВнешнихПользователей"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазрешенныеКлючиДоступа.Пользователь", + "РазрешенныеКлючиДоступа.ВнешнийПользователь"); КонецЕсли; Иначе ТекстЗапроса = @@ -37260,8 +38479,8 @@ НомерПоля = НомерПоля + 1; КонецЦикла; Если ИспользуемыеВариантыДоступа.Количество() = 1 Тогда - УсловияОтбора.Добавить("И " + СтрСоединить(Условие, Символы.ПС + "И ")); // @query-part-1 @query-part-2 - УсловияСоединения.Добавить("И (" + СтрСоединить(Условие, ")" + Символы.ПС + "И (") + ")"); // @query-part-1 @query-part-3 + УсловияОтбора.Добавить("И " + СтрСоединить(Условие, Символы.ПС + "И ")); // @query-part-1, @query-part-2 + УсловияСоединения.Добавить("И (" + СтрСоединить(Условие, ")" + Символы.ПС + "И (") + ")"); // @query-part-1, @query-part-3 Иначе УсловияОтбора.Добавить(СтрСоединить(Условие, Символы.ПС + " И ")); УсловияСоединения.Добавить(СтрСоединить(Условие, Символы.ПС + " И ")); @@ -37272,16 +38491,16 @@ УсловиеОтбора = УсловияОтбора[0]; УсловиеСоединения = УсловияСоединения[0]; Иначе - УсловиеОтбора = "И (" + СтрСоединить(УсловияОтбора, Символы.ПС + " ИЛИ ") + ")"; // @query-part-1 @query-part-2 - УсловиеСоединения = "И (" + СтрСоединить(УсловияСоединения, Символы.ПС + " ИЛИ ") + ")"; // @query-part-1 @query-part-2 + УсловиеОтбора = "И (" + СтрСоединить(УсловияОтбора, Символы.ПС + " ИЛИ ") + ")"; // @query-part-1, @query-part-2 + УсловиеСоединения = "И (" + СтрСоединить(УсловияСоединения, Символы.ПС + " ИЛИ ") + ")"; // @query-part-1, @query-part-2 КонецЕсли; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, - "И КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1", // @query-part-1 - ТекстСОтступом(СокрЛ(УсловиеОтбора), " ")); + "И КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1", + ТекстСОтступом(СокрЛ(УсловиеОтбора), " ")); // @query-part-1 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, - "И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1)", // @query-part-1 - ТекстСОтступом(СокрЛ(УсловиеСоединения), " ")); + "И (КлючиДоступаКРегистрам.Поле1 = &ТекущаяТаблицаПоле1)", + ТекстСОтступом(СокрЛ(УсловиеСоединения), " ")); // @query-part-1 Если Не ДобавитьПоляВыбора Тогда Возврат; @@ -37292,19 +38511,19 @@ НомерПоля = 1; Для Каждого Поле Из Результат.ОпорныеПоля.Используемые Цикл ОпорныеПоля = ОпорныеПоля + ?(ОпорныеПоля = "", "", "," + Символы.ПС) - + СтрШаблон("ТекущаяТаблица.%1 КАК %1", Поле); // @query-part-1 + + СтрШаблон("ТекущаяТаблица.%1 КАК %1", Поле); // @query-part-4 ПоляВыбора = ПоляВыбора + ?(ПоляВыбора = "", "", "," + Символы.ПС) - + СтрШаблон("ТекущаяТаблица.%2 КАК Поле%1", НомерПоля, Поле); // @query-part-1 + + СтрШаблон("ТекущаяТаблица.%2 КАК Поле%1", НомерПоля, Поле); // @query-part-4 НомерПоля = НомерПоля + 1; КонецЦикла; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, - "&ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1", // @query-part-1 - ТекстСОтступом(СокрЛ(ОпорныеПоля), " ")); + "&ТекущаяТаблицаПоле1 КАК ТекущаяТаблицаПоле1", + ТекстСОтступом(СокрЛ(ОпорныеПоля), " ")); // @query-part-1 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, - "&ТекущаяТаблицаПоле1 КАК Поле1", // @query-part-1 - ТекстСОтступом(СокрЛ(ПоляВыбора), " ")); + "&ТекущаяТаблицаПоле1 КАК Поле1", + ТекстСОтступом(СокрЛ(ПоляВыбора), " ")); // @query-part-1 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Список", Контекст.Список); @@ -37369,11 +38588,11 @@ Если НомерШапки = 0 Тогда Соединения = СоединенияИПоля.Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа КАК Шапка0 - |ПО (Шапка0.Ссылка = ТекущийСписок.ТекущийКлючДоступа)" // @query-part-1 + |ПО (Шапка0.Ссылка = ТекущийСписок.ТекущийКлючДоступа)" + ?(Контекст.СоставПолей = 0, " - | И (Шапка0.Список = &Список)", "") // @query-part-1 + | И (Шапка0.Список = &Список)", "") + " - | И (Шапка0.СоставПолей = &СоставПолей)"; // @query-part-1 + | И (Шапка0.СоставПолей = &СоставПолей)"; // @query-part-1, @query-part-2, @query-part-4 Иначе Соединения = СоединенияИПоля.Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.Шапка КАК Шапка? @@ -37415,19 +38634,17 @@ Иначе ИмяТабличнойЧастиОбъекта = СтрЗаменить(ПсевдонимТабличнойЧастиОбъекта, "ТекущийСписок", ""); СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ПсевдонимТабличнойЧастиОбъекта); - // @query-part-1 @query-part-2 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок." + ИмяТабличнойЧастиОбъекта + " КАК " + ПсевдонимТабличнойЧастиОбъекта + " - |ПО " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка = ТекущийСписок.Ссылка"; // @query-part-1 + |ПО " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка = ТекущийСписок.Ссылка"; // @query-part-1, @query-part-2, @query-part-3, @query-part-4 КонецЕсли; Соединения = Соединения + СоединенияИПоля.Соединения; Поля = СоединенияИПоля.Поля; Иначе Для Каждого ДополнительнаяТаблица Из ГруппаДополнительныхТаблиц Цикл - // @query-part-1 @query-part-2 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " - |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); // @query-part-1 + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); // @query-part-1, @query-part-2, @query-part-3 СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ДополнительнаяТаблица.Псевдоним); Если СоединенияИПоля = Неопределено Тогда Продолжить; @@ -37633,7 +38850,7 @@ КонецЕсли; Если НомерШапки = 0 Тогда - ТекстЗапроса = // @query-part-1 + ТекстЗапроса = "ВЫБРАТЬ | ПорцияКлючей.Ссылка КАК Ссылка,&Реквизиты |ИЗ @@ -37700,7 +38917,7 @@ И СвойстваПоля.ТипыСохраненияЗначений.Количество() > 0 Тогда Контекст.Вставить("ЧастиУсловияВыбораПравВедущихСписковСТипами"); - УсловиеОтбора = // @query-part-1 + УсловиеОтбора = "#ПроверяемоеПоле В | (ВЫБРАТЬ | ЕСТЬNULL(ТипыКонфигурации.Ссылка, ЕСТЬNULL(ТипыРасширений.Ссылка, Шапка?.Реквизит?)) @@ -37720,9 +38937,9 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК ТипыРасширений | ПО | Шапка?.Реквизит? <> НЕОПРЕДЕЛЕНО - | И ТИПЗНАЧЕНИЯ(ТипыРасширений.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(Шапка?.Реквизит?))"; + | И ТИПЗНАЧЕНИЯ(ТипыРасширений.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(Шапка?.Реквизит?))"; // @query-part-1 Иначе - УсловиеОтбора = // @query-part-1 + УсловиеОтбора = "#ПроверяемоеПоле В | (ВЫБРАТЬ | Шапка?.Реквизит? @@ -37730,15 +38947,15 @@ | ПорцияКлючей КАК ПорцияКлючей | ЛЕВОЕ СОЕДИНЕНИЕ @Справочник.КлючиДоступа КАК Шапка? | ПО - | Шапка?.Ссылка = ПорцияКлючей.Ссылка)"; + | Шапка?.Ссылка = ПорцияКлючей.Ссылка)"; // @query-part-1 КонецЕсли; Если НомерШапки > 0 Тогда УсловиеОтбора = СтрЗаменить(УсловиеОтбора, - "Справочник.КлючиДоступа КАК Шапка?", "Справочник.КлючиДоступа.Шапка КАК Шапка?"); // @query-part-1 @query-part-2 + "Справочник.КлючиДоступа КАК Шапка?", "Справочник.КлючиДоступа.Шапка КАК Шапка?"); // @query-part-1, @query-part-2 УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Шапка?.Ссылка = ПорцияКлючей.Ссылка", ТекстСОтступом( "Шапка?.Ссылка = ПорцияКлючей.Ссылка" + СтрШаблон(" - | И Шапка?.НомерСтроки = %1", НомерШапки), " ")); // @query-part-1 + | И Шапка?.НомерСтроки = %1", НомерШапки), " ")); // @query-part-3 КонецЕсли; УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Шапка?", СтрШаблон("Шапка%1", НомерШапки)); УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Реквизит?", СвойстваПоля.ИмяРеквизитаГруппыПолейКлючаДоступа); @@ -37879,10 +39096,9 @@ Реквизиты = ""; Для Каждого ДополнительнаяТаблица Из ГруппаДополнительныхТаблиц Цикл СоединенияИПоля = СоединенияИПоляПоТаблицам.Получить(ДополнительнаяТаблица.Псевдоним); - // @query-part-1 ТекущееСоединение = " |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " - |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); // @query-part-1 + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); // @query-part-1, @query-part-2, @query-part-3 Соединения = Соединения + ТекущееСоединение; Если Контекст.ЭтоСсылочныйТип Тогда Если ВРег(Контекст.Список) = ВРег(ДополнительнаяТаблица.Таблица) Тогда @@ -37896,15 +39112,14 @@ СоединенияВБазеДанных = СоединенияВБазеДанных + ТекущееСоединение; СоединенияВПамяти = СоединенияВПамяти + ТекущееСоединение; Иначе - // @query-part-1 СоединенияВБазеДанных = СоединенияВБазеДанных + " |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительнаяТаблица.Таблица + " КАК " + ДополнительнаяТаблица.Псевдоним + " |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " ") + " - | И НЕ " + ДополнительнаяТаблица.Псевдоним + ".Ссылка В (&СсылкиНаОбъекты)"; // @query-part-1 @query-part-2 - // @query-part-1 + | И НЕ " + ДополнительнаяТаблица.Псевдоним + ".Ссылка В (&СсылкиНаОбъекты)"; // @query-part-1, @query-part-2, @query-part-3, @query-part-5, @query-part-6 + СоединенияВПамяти = СоединенияВПамяти + " |ЛЕВОЕ СОЕДИНЕНИЕ " + ДополнительноеИмя + " КАК " + ДополнительнаяТаблица.Псевдоним + " - |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); // @query-part-1 + |ПО " + ТекстСОтступом(ДополнительнаяТаблица.ТекстУсловияСоединения, " "); // @query-part-1, @query-part-2, @query-part-3, КонецЕсли; КонецЕсли; Если СоединенияИПоля = Неопределено Тогда @@ -38068,7 +39283,7 @@ И СвойстваПоля.ТипыСохраненияЗначений.Количество() > 0 Тогда Контекст.Вставить("ЧастиУсловияВыбораПравВедущихСписковСТипами"); - УсловиеОтбора = // @query-part-1 + УсловиеОтбора = "#ПроверяемоеПоле В | (ВЫБРАТЬ | ЕСТЬNULL(ТипыКонфигурации.Ссылка, ЕСТЬNULL(ТипыРасширений.Ссылка, ТабличнаяЧасть?.Реквизит?)) @@ -38088,9 +39303,9 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК ТипыРасширений | ПО | ТабличнаяЧасть?.Реквизит? <> НЕОПРЕДЕЛЕНО - | И ТИПЗНАЧЕНИЯ(ТипыРасширений.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(ТабличнаяЧасть?.Реквизит?))"; + | И ТИПЗНАЧЕНИЯ(ТипыРасширений.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(ТабличнаяЧасть?.Реквизит?))"; // @query-part-1 Иначе - УсловиеОтбора = // @query-part-1 + УсловиеОтбора = "#ПроверяемоеПоле В | (ВЫБРАТЬ | ТабличнаяЧасть?.Реквизит? @@ -38098,7 +39313,7 @@ | ПорцияКлючей КАК ПорцияКлючей | ЛЕВОЕ СОЕДИНЕНИЕ @Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть? | ПО - | ТабличнаяЧасть?.Ссылка = ПорцияКлючей.Ссылка)"; + | ТабличнаяЧасть?.Ссылка = ПорцияКлючей.Ссылка)"; // @query-part-1 КонецЕсли; УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "ТабличнаяЧасть?", @@ -38145,29 +39360,29 @@ Продолжить; КонецЕсли; - УсловиеОтбора = // @query-part-1 + УсловиеОтбора = "КлючиДоступа.Ссылка В | (ВЫБРАТЬ | Шапка?.Ссылка | ИЗ | Справочник.КлючиДоступа КАК Шапка? | ГДЕ - | Шапка?.Значение? В (&ВедущиеКлючиДоступа))"; + | Шапка?.Значение? В (&ВедущиеКлючиДоступа))"; // @query-part-1 УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Значение?", СтрШаблон("Значение%1", НомерРеквизита)); Если НомерШапки > 0 Тогда УсловиеОтбора = СтрЗаменить(УсловиеОтбора, - "Справочник.КлючиДоступа КАК Шапка?", // @query-part-1 - "Справочник.КлючиДоступа.Шапка КАК Шапка?"); // @query-part-1 + "Справочник.КлючиДоступа КАК Шапка?", + "Справочник.КлючиДоступа.Шапка КАК Шапка?"); // @query-part-1, @query-part-2 КонецЕсли; Если НомерТабличнойЧастиКлюча = 0 Тогда УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Шапка?", СтрШаблон("Шапка%1", НомерШапки)); Иначе ИмяТабличнойЧасти = СтрШаблон("ТабличнаяЧасть%1", НомерТабличнойЧастиКлюча); - УсловиеОтбора = СтрЗаменить(УсловиеОтбора, " КАК", "." + ИмяТабличнойЧасти + " КАК"); // @query-part-1 @query-part-3 + УсловиеОтбора = СтрЗаменить(УсловиеОтбора, " КАК", "." + ИмяТабличнойЧасти + " КАК"); // @query-part-1, @query-part-3 УсловиеОтбора = СтрЗаменить(УсловиеОтбора, "Шапка?", ИмяТабличнойЧасти); КонецЕсли; @@ -38196,41 +39411,36 @@ Соединения = ""; Если СвойстваПоля.ТипыСохраненияКлючейДоступа.Количество() > 0 Тогда - // @query-part-1 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам? - |ПО (КлючиДоступаКОбъектам?.Объект = #ИмяПоляДляЗапроса)"; + |ПО (КлючиДоступаКОбъектам?.Объект = #ИмяПоляДляЗапроса)"; // @query-part-1 КонецЕсли; Если СвойстваПоля.ТипыСохраненияГруппЗначений.Количество() > 0 Тогда Если Не СвойстваПоля.ЭтоСписокЗначенийДоступаСГруппамиЗначений Тогда - // @query-part-1 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений? |ПО (ГруппыЗначений?.ЗначениеДоступа = #ИмяПоляДляЗапроса) - | И (ГруппыЗначений?.ГруппаДанных = 0)"; + | И (ГруппыЗначений?.ГруппаДанных = 0)"; // @query-part-1 ИначеЕсли СвойстваПоля.НесколькоГруппЗначений Тогда - // @query-part-1 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ &ТекущийСписок.ГруппыДоступа КАК ГруппыЗначений? - |ПО (ГруппыЗначений?.Ссылка = #ИмяПоляДляЗапроса)"; + |ПО (ГруппыЗначений?.Ссылка = #ИмяПоляДляЗапроса)"; // @query-part-1 КонецЕсли; КонецЕсли; Если СвойстваПоля.ТипыСохраненияТиповКонфигурации.Количество() > 0 Тогда - // @query-part-1 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ТипыКонфигурации? |ПО (#ИмяПоляДляЗапроса <> НЕОПРЕДЕЛЕНО) - | И (ТИПЗНАЧЕНИЯ(ТипыКонфигурации?.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса))"; + | И (ТИПЗНАЧЕНИЯ(ТипыКонфигурации?.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса))"; // @query-part-1 КонецЕсли; Если СвойстваПоля.ТипыСохраненияТиповРасширений.Количество() > 0 Тогда - // @query-part-1 Соединения = Соединения + " |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовРасширений КАК ТипыРасширений? |ПО (#ИмяПоляДляЗапроса <> НЕОПРЕДЕЛЕНО) - | И (ТИПЗНАЧЕНИЯ(ТипыРасширений?.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса))"; + | И (ТИПЗНАЧЕНИЯ(ТипыРасширений?.ЗначениеПустойСсылки) = ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса))"; // @query-part-1 КонецЕсли; Поле = СравнениеПоля(СвойстваПоля); @@ -38245,7 +39455,7 @@ + ", " + СтрШаблон("Значение%1", НомерРеквизита); СоединенияИПоля.Реквизиты = СоединенияИПоля.Реквизиты + СтрШаблон(", - |Шапка?.Значение%1 КАК Значение%1", НомерРеквизита); // @query-part-2 + |Шапка?.Значение%1 КАК Значение%1", НомерРеквизита); // @query-part-1 КонецЕсли; ЗаполнитьПсевдонимПоНомеруРеквизита(Соединения, Поле, НомерРеквизита, "Значение?"); @@ -38430,8 +39640,8 @@ "Шапка?.Значение? = #ИмяПоляДляЗапроса", , СохранениеЗначенияБулево); ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияПустойСсылки, - "Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ПустаяСсылкаЛюбогоТипа)", // @query-part-1 - "ЭтоПроверкаПустойСсылки"); + "Шапка?.Значение? = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ПустаяСсылкаЛюбогоТипа)", + "ЭтоПроверкаПустойСсылки"); // @query-part-1 ДобавитьПроверкуПоТипам(ПроверкиПоТипам, СвойстваПоля.ТипыСохраненияТиповКонфигурации, "Шапка?.Значение? = ЕСТЬNULL(ТипыКонфигурации?.Ссылка, @@ -38467,7 +39677,7 @@ КонецЕсли; ШаблонПроверки = ?(ПроверкаПоТипам.Значение.Свойство("ЭтоПроверкаПустойСсылки"), "#ИмяПоляДляЗапроса = ЗНАЧЕНИЕ(#ИмяТипа.ПустаяСсылка)", - "ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса) = ТИП(#ИмяТипа)"); // @query-part-1 + "ТИПЗНАЧЕНИЯ(#ИмяПоляДляЗапроса) = ТИП(#ИмяТипа)"); // @query-part-3 ПроверкаТипов = ПроверкаТипов + СтрЗаменить(ШаблонПроверки, "#ИмяТипа", ИмяТипа); КонецЦикла; Проверка = " @@ -39481,170 +40691,170 @@ Слова = Новый Соответствие; - ДобавитьСловоЯзыка(Слова, "ПрисоединитьДополнительныеТаблицы", // @Non-NLS - "AttachAdditionalTables", "Начало", Ложь); - ДобавитьСловоЯзыка(Слова, "ЭтотСписок", // @Non-NLS - "ThisList", "НачалоСписок", Ложь); - ДобавитьСловоЯзыка(Слова, "РазрешитьЧтениеИзменение", // @Non-NLS - "AllowReadUpdate", "Начало", Ложь); - ДобавитьСловоЯзыка(Слова, "РазрешитьЧтение", // @Non-NLS - "AllowRead", "Начало", Ложь); - ДобавитьСловоЯзыка(Слова, "РазрешитьИзменениеЕслиРазрешеноЧтение", // @Non-NLS - "AllowUpdateIfReadingAllowed", "Начало", Ложь); - ДобавитьСловоЯзыка(Слова, "Где", // @Non-NLS - "Where", "НачалоГде"); + ДобавитьСловоЯзыка(Слова, "ПрисоединитьДополнительныеТаблицы", + "AttachAdditionalTables", "Начало", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ЭтотСписок", + "ThisList", "НачалоСписок", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "РазрешитьЧтениеИзменение", + "AllowReadUpdate", "Начало", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "РазрешитьЧтение", + "AllowRead", "Начало", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "РазрешитьИзменениеЕслиРазрешеноЧтение", + "AllowUpdateIfReadingAllowed", "Начало", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Где", + "Where", "НачалоГде"); // @Non-NLS - ДобавитьСловоЯзыка(Слова, "Левое", // @Non-NLS - "Left", "Присоединение"); - ДобавитьСловоЯзыка(Слова, "Соединение", // @Non-NLS - "Join", "Присоединение"); - ДобавитьСловоЯзыка(Слова, "По", // @Non-NLS - "On", "Присоединение"); + ДобавитьСловоЯзыка(Слова, "Левое", + "Left", "Присоединение"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Соединение", + "Join", "Присоединение"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "По", + "On", "Присоединение"); // @Non-NLS - ДобавитьСловоЯзыка(Слова, "И", // @Non-NLS - "And", "Соединитель", , 2); - ДобавитьСловоЯзыка(Слова, "Или", // @Non-NLS - "Or", "Соединитель", , 1); - ДобавитьСловоЯзыка(Слова, "В", // @Non-NLS - "In", "Соединитель", , 5); - ДобавитьСловоЯзыка(Слова, "Как", // @Non-NLS - "As", "Соединитель"); - ДобавитьСловоЯзыка(Слова, "Кроме", // @Non-NLS - "Except", "Соединитель"); - ДобавитьСловоЯзыка(Слова, "Только", // @Non-NLS - "Only", "Соединитель"); - ДобавитьСловоЯзыка(Слова, "Есть", // @Non-NLS - "Is", "Соединитель", , 7); - ДобавитьСловоЯзыка(Слова, "Не", // @Non-NLS - "Not", "Оператор", , 3); + ДобавитьСловоЯзыка(Слова, "И", + "And", "Соединитель", , 2); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Или", + "Or", "Соединитель", , 1); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "В", + "In", "Соединитель", , 5); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Как", + "As", "Соединитель"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Кроме", + "Except", "Соединитель"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Только", + "Only", "Соединитель"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Есть", + "Is", "Соединитель", , 7); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Не", + "Not", "Оператор", , 3); // @Non-NLS - ДобавитьСловоЯзыка(Слова, "Выбор", // @Non-NLS - "Case", "СловоВыбора"); - ДобавитьСловоЯзыка(Слова, "Когда", // @Non-NLS - "When", "СловоВыбора"); - ДобавитьСловоЯзыка(Слова, "Тогда", // @Non-NLS - "Then", "СловоВыбора"); - ДобавитьСловоЯзыка(Слова, "Иначе", // @Non-NLS - "Else", "СловоВыбора"); - ДобавитьСловоЯзыка(Слова, "Конец", // @Non-NLS - "End", "СловоВыбора"); + ДобавитьСловоЯзыка(Слова, "Выбор", + "Case", "СловоВыбора"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Когда", + "When", "СловоВыбора"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Тогда", + "Then", "СловоВыбора"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Иначе", + "Else", "СловоВыбора"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Конец", + "End", "СловоВыбора"); // @Non-NLS - ДобавитьСловоЯзыка(Слова, "ЕстьNull", // @Non-NLS - "IsNull", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "Выразить", // @Non-NLS - "Cast", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "Значение", // @Non-NLS - "Value", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ТипЗначения", // @Non-NLS - "ValueType", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "Тип", // @Non-NLS - "Type", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ЗначениеРазрешено", // @Non-NLS - "ValueAllowed", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ЧтениеОбъектаРазрешено", // @Non-NLS - "ObjectReadingAllowed", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ИзменениеОбъектаРазрешено", // @Non-NLS - "ObjectUpdateAllowed", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ЧтениеСпискаРазрешено", // @Non-NLS - "ListReadingAllowed", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ИзменениеСпискаРазрешено", // @Non-NLS - "ListUpdateAllowed", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ДляВсехСтрок", // @Non-NLS - "ForAllRows", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ДляОднойИзСтрок", // @Non-NLS - "ForAtLeastOneRow", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ЭтоАвторизованныйПользователь", // @Non-NLS - "IsAuthorizedUser", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "ПравоДоступа", // @Non-NLS - "AccessRight", "Функция", Ложь); - ДобавитьСловоЯзыка(Слова, "РольДоступна", // @Non-NLS - "IsInRole", "Функция", Ложь); + ДобавитьСловоЯзыка(Слова, "ЕстьNull", + "IsNull", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Выразить", + "Cast", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Значение", + "Value", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ТипЗначения", + "ValueType", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Тип", + "Type", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ЗначениеРазрешено", + "ValueAllowed", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ЧтениеОбъектаРазрешено", + "ObjectReadingAllowed", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ИзменениеОбъектаРазрешено", + "ObjectUpdateAllowed", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ЧтениеСпискаРазрешено", + "ListReadingAllowed", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ИзменениеСпискаРазрешено", + "ListUpdateAllowed", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ДляВсехСтрок", + "ForAllRows", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ДляОднойИзСтрок", + "ForAtLeastOneRow", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ЭтоАвторизованныйПользователь", + "IsAuthorizedUser", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ПравоДоступа", + "AccessRight", "Функция", Ложь); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "РольДоступна", + "IsInRole", "Функция", Ложь); // @Non-NLS - ДобавитьСловоЯзыка(Слова, "ПустаяСсылка", // @Non-NLS - "EmptyRef", "ЗначениеСравнения"); - ДобавитьСловоЯзыка(Слова, "Отключено", // @Non-NLS - "Disabled", "ЗначениеСравнения"); - ДобавитьСловоЯзыка(Слова, "Неопределено", // @Non-NLS - "Undefined", "ЗначениеСравнения"); - ДобавитьСловоЯзыка(Слова, "Null", // @Non-NLS - "Null", "ЗначениеСравнения"); - ДобавитьСловоЯзыка(Слова, "Ложь", // @Non-NLS - "False", "ЗначениеУточнения"); - ДобавитьСловоЯзыка(Слова, "Истина", // @Non-NLS - "True", "ЗначениеУточнения"); + ДобавитьСловоЯзыка(Слова, "ПустаяСсылка", + "EmptyRef", "ЗначениеСравнения"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Отключено", + "Disabled", "ЗначениеСравнения"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Неопределено", + "Undefined", "ЗначениеСравнения"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Null", + "Null", "ЗначениеСравнения"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Ложь", + "False", "ЗначениеУточнения"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Истина", + "True", "ЗначениеУточнения"); // @Non-NLS - ДобавитьСловоЯзыка(Слова, "Строка", // @Non-NLS - "String", "ИмяТипа"); - ДобавитьСловоЯзыка(Слова, "Число", // @Non-NLS - "Number", "ИмяТипа"); - ДобавитьСловоЯзыка(Слова, "Дата", // @Non-NLS - "Date", "ИмяТипа"); - ДобавитьСловоЯзыка(Слова, "Булево", // @Non-NLS - "Boolean", "ИмяТипа"); + ДобавитьСловоЯзыка(Слова, "Строка", + "String", "ИмяТипа"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Число", + "Number", "ИмяТипа"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Дата", + "Date", "ИмяТипа"); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Булево", + "Boolean", "ИмяТипа"); // @Non-NLS // Неподдерживаемые, зарезервированные слова. - ДобавитьСловоЯзыка(Слова, "Выбрать", // @Non-NLS - "Select", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Первые", // @Non-NLS - "Top", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Различные", // @Non-NLS - "Distinct", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Из", // @Non-NLS - "From", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Внутреннее", // @Non-NLS - "Inner", "Присоединение", , , Истина); - ДобавитьСловоЯзыка(Слова, "Полное", // @Non-NLS - "Full", "Присоединение", , , Истина); - ДобавитьСловоЯзыка(Слова, "Сгруппировать", // @Non-NLS - "Group", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Имеющие", // @Non-NLS - "Having", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Упорядочить", // @Non-NLS - "Order", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Итоги", // @Non-NLS - "Totals", "Неопределен", , , Истина); - ДобавитьСловоЯзыка(Слова, "Год", // @Non-NLS - "Year", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Квартал", // @Non-NLS - "Quarter", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Месяц", // @Non-NLS - "Month", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "ДеньГода", // @Non-NLS - "DayOfYear", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "День", // @Non-NLS - "Day", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Неделя", // @Non-NLS - "Week", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "ДеньНедели", // @Non-NLS - "Weekday", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Час", // @Non-NLS - "Hour", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Минута", // @Non-NLS - "Minute", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Секунда", // @Non-NLS - "Second", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "НачалоПериода", // @Non-NLS - "BeginOfPeriod", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "КонецПериода", // @Non-NLS - "EndOfPeriod", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "ДобавитьКДате", // @Non-NLS - "DateAdd", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "РазностьДат", // @Non-NLS - "DateDiff", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Сумма", // @Non-NLS - "Sum", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Минимум", // @Non-NLS - "Min", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Максимум", // @Non-NLS - "Max", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Среднее", // @Non-NLS - "Avg", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Количество", // @Non-NLS - "Count", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "Представление", // @Non-NLS - "Presentation", "Функция", Ложь, , Истина); - ДобавитьСловоЯзыка(Слова, "ПредставлениеСсылки", // @Non-NLS - "RefPresentation", "Функция", Ложь, , Истина); + ДобавитьСловоЯзыка(Слова, "Выбрать", + "Select", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Первые", + "Top", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Различные", + "Distinct", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Из", + "From", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Внутреннее", + "Inner", "Присоединение", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Полное", + "Full", "Присоединение", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Сгруппировать", + "Group", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Имеющие", + "Having", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Упорядочить", + "Order", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Итоги", + "Totals", "Неопределен", , , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Год", + "Year", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Квартал", + "Quarter", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Месяц", + "Month", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ДеньГода", + "DayOfYear", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "День", + "Day", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Неделя", + "Week", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ДеньНедели", + "Weekday", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Час", + "Hour", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Минута", + "Minute", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Секунда", + "Second", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "НачалоПериода", + "BeginOfPeriod", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "КонецПериода", + "EndOfPeriod", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ДобавитьКДате", + "DateAdd", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "РазностьДат", + "DateDiff", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Сумма", + "Sum", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Минимум", + "Min", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Максимум", + "Max", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Среднее", + "Avg", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Количество", + "Count", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "Представление", + "Presentation", "Функция", Ложь, , Истина); // @Non-NLS + ДобавитьСловоЯзыка(Слова, "ПредставлениеСсылки", + "RefPresentation", "Функция", Ложь, , Истина); // @Non-NLS Возврат Новый ФиксированноеСоответствие(Слова); @@ -39735,42 +40945,42 @@ ТипыТаблиц.Вставить("ПоКоллекциям", Новый Соответствие); // Установка имен типов таблиц. - ДобавитьТипТаблиц(ТипыТаблиц, "ПланОбмена", // @Non-NLS - "ExchangePlan", "ПланыОбмена"); - ДобавитьТипТаблиц(ТипыТаблиц, "КритерийОтбора", // @Non-NLS - "FilterCriterion", "КритерииОтбора"); - ДобавитьТипТаблиц(ТипыТаблиц, "Константы", // @Non-NLS - "Constants", ""); - ДобавитьТипТаблиц(ТипыТаблиц, "Константа", // @Non-NLS - "Constant", "Константы"); - ДобавитьТипТаблиц(ТипыТаблиц, "Справочник", // @Non-NLS - "Catalog", "Справочники"); - ДобавитьТипТаблиц(ТипыТаблиц, "Последовательность", // @Non-NLS - "Sequence", "Последовательности"); - ДобавитьТипТаблиц(ТипыТаблиц, "Документ", // @Non-NLS - "Document", "Документы"); - ДобавитьТипТаблиц(ТипыТаблиц, "ЖурналДокументов", // @Non-NLS - "DocumentJournal", "ЖурналыДокументов"); - ДобавитьТипТаблиц(ТипыТаблиц, "Перечисление", // @Non-NLS - "Enum", "Перечисления"); - ДобавитьТипТаблиц(ТипыТаблиц, "ПланВидовХарактеристик", // @Non-NLS - "ChartOfCharacteristicTypes", "ПланыВидовХарактеристик"); - ДобавитьТипТаблиц(ТипыТаблиц, "ПланСчетов", // @Non-NLS - "ChartOfAccounts", "ПланыСчетов"); - ДобавитьТипТаблиц(ТипыТаблиц, "ПланВидовРасчета", // @Non-NLS - "ChartOfCalculationTypes", "ПланыВидовРасчета"); - ДобавитьТипТаблиц(ТипыТаблиц, "РегистрСведений", // @Non-NLS - "InformationRegister", "РегистрыСведений"); - ДобавитьТипТаблиц(ТипыТаблиц, "РегистрНакопления", // @Non-NLS - "AccumulationRegister", "РегистрыНакопления"); - ДобавитьТипТаблиц(ТипыТаблиц, "РегистрБухгалтерии", // @Non-NLS - "AccountingRegister", "РегистрыБухгалтерии"); - ДобавитьТипТаблиц(ТипыТаблиц, "РегистрРасчета", // @Non-NLS - "CalculationRegister", "РегистрыРасчета"); - ДобавитьТипТаблиц(ТипыТаблиц, "БизнесПроцесс", // @Non-NLS - "BusinessProcess", "БизнесПроцессы"); - ДобавитьТипТаблиц(ТипыТаблиц, "Задача", // @Non-NLS - "Task", "Задачи"); + ДобавитьТипТаблиц(ТипыТаблиц, "ПланОбмена", + "ExchangePlan", "ПланыОбмена"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "КритерийОтбора", + "FilterCriterion", "КритерииОтбора"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Константы", + "Constants", ""); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Константа", + "Constant", "Константы"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Справочник", + "Catalog", "Справочники"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Последовательность", + "Sequence", "Последовательности"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Документ", + "Document", "Документы"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "ЖурналДокументов", + "DocumentJournal", "ЖурналыДокументов"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Перечисление", + "Enum", "Перечисления"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "ПланВидовХарактеристик", + "ChartOfCharacteristicTypes", "ПланыВидовХарактеристик"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "ПланСчетов", + "ChartOfAccounts", "ПланыСчетов"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "ПланВидовРасчета", + "ChartOfCalculationTypes", "ПланыВидовРасчета"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрСведений", + "InformationRegister", "РегистрыСведений"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрНакопления", + "AccumulationRegister", "РегистрыНакопления"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрБухгалтерии", + "AccountingRegister", "РегистрыБухгалтерии"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "РегистрРасчета", + "CalculationRegister", "РегистрыРасчета"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "БизнесПроцесс", + "BusinessProcess", "БизнесПроцессы"); // @Non-NLS + ДобавитьТипТаблиц(ТипыТаблиц, "Задача", + "Task", "Задачи"); // @Non-NLS // Установка основных свойств основных типов таблиц. ИменаТиповТаблиц = "ПланОбмена,Справочник,Документ,ПланВидовХарактеристик,ПланСчетов,ПланВидовРасчета,БизнесПроцесс,Задача"; @@ -39784,13 +40994,13 @@ ДобавитьКоллекциюТабличныхЧастейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ТабличныеЧасти", "Разрешены"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ВерсияДанных", // @Non-NLS - "DataVersion", "Запрещено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Представление", // @Non-NLS - "Presentation", "Запрещено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ВерсияДанных", + "DataVersion", "Запрещено"); // @Non-NLS + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Представление", + "Presentation", "Запрещено"); // @Non-NLS - ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Изменения", // @Non-NLS - "Changes", "Запрещено"); + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Изменения", + "Changes", "Запрещено"); // @Non-NLS // Установка основных свойств регистров. ИменаТиповТаблиц = "РегистрСведений,РегистрРасчета"; @@ -39809,8 +41019,8 @@ УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ЕстьОграничение", Истина); ДобавитьКоллекциюПолейТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Измерения", "Разрешены"); - ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Изменения", // @Non-NLS - "Changes", "Запрещено"); + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Изменения", + "Changes", "Запрещено"); // @Non-NLS // Установка некоторых из указанных ранее свойств для остальных типов таблиц. УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "Последовательность", "ЕстьОграничение", Истина); @@ -39826,18 +41036,18 @@ УстановитьСвойствоТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "Использование", "Разрешено"); УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "КритерийОтбора", "Использование", "Недопустимо"); - ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "Константа", "Изменения", // @Non-NLS-2 + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "Константа", "Изменения", "Changes", - "Запрещено"); - ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "РегистрСведений", "СрезПервых", // @Non-NLS-2 + "Запрещено"); // @Non-NLS-2 + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "РегистрСведений", "СрезПервых", "SliceFirst", - "Недопустимо"); - ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "РегистрСведений", "СрезПоследних", // @Non-NLS-2 + "Недопустимо"); // @Non-NLS-2 + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "РегистрСведений", "СрезПоследних", "SliceLast", - "Недопустимо"); - ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "БизнесПроцесс", "Точки", // @Non-NLS-2 + "Недопустимо"); // @Non-NLS-2 + ДобавитьРасширениеТипаТаблиц(ТипыТаблиц, "БизнесПроцесс", "Точки", "Points", - "Запрещено"); + "Запрещено"); // @Non-NLS-2 // Установка специализированных свойств. УстановитьСвойствоТипаТаблиц(ТипыТаблиц, "ПланСчетов", "ПризнакиУчетаСубконто", "Разрешены"); @@ -39854,28 +41064,28 @@ // Уточнение стандартных полей типов таблиц. ИменаТиповТаблиц = "Документ,РегистрСведений,РегистрНакопления,РегистрБухгалтерии"; - ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "МоментВремени", // @Non-NLS - "PointInTime", "Недопустимо"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "МоментВремени", + "PointInTime", "Недопустимо"); // @Non-NLS ИменаТиповТаблиц = "Справочник,ПланВидовХарактеристик,ПланСчетов,ПланВидовРасчета"; - ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ИмяПредопределенныхДанных", // @Non-NLS - "PredefinedDataName", "Запрещено"); + ДобавитьПолеТипаТаблиц(ТипыТаблиц, ИменаТиповТаблиц, "ИмяПредопределенныхДанных", + "PredefinedDataName", "Запрещено"); // @Non-NLS - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Константа", "Значение", // @Non-NLS-2 + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Константа", "Значение", "Value", - "Разрешено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Регистратор", // @Non-NLS-2 + "Разрешено"); // @Non-NLS-2 + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Регистратор", "Recorder", - "Разрешено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Период", // @Non-NLS-2 + "Разрешено"); // @Non-NLS-2 + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Последовательность", "Период", "Period", - "Разрешено"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "Тип", // @Non-NLS-2 + "Разрешено"); // @Non-NLS-2 + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "ЖурналДокументов", "Тип", "Type", - "Недопустимо"); - ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Перечисление", "Порядок", // @Non-NLS-2 + "Недопустимо"); // @Non-NLS-2 + ДобавитьПолеТипаТаблиц(ТипыТаблиц, "Перечисление", "Порядок", "Order", - "Запрещено"); + "Запрещено"); // @Non-NLS-2 Возврат ТипыТаблиц; @@ -43381,8 +44591,8 @@ Возврат Неопределено; КонецЕсли; - Если ВРег(ЧастиИмени[2]) = ВРег("СтандартнаяТабличнаяЧасть") // @Non-NLS - Или ВРег(ЧастиИмени[2]) = ВРег("StandardTabularSection") Тогда + Если ВРег(ЧастиИмени[2]) = ВРег("СтандартнаяТабличнаяЧасть") + Или ВРег(ЧастиИмени[2]) = ВРег("StandardTabularSection") Тогда // @Non-NLS Свойства = Новый Структура("СтандартныеТабличныеЧасти"); ЗаполнитьЗначенияСвойств(Свойства, ОсновнойОбъектМетаданных); @@ -43407,8 +44617,8 @@ ВладелецСтандартныхРеквизитов = ОсновнойОбъектМетаданных; КонецЕсли; - Если ВРег(ЧастиИмени[2]) <> ВРег("СтандартныйРеквизит") // @Non-NLS - И ВРег(ЧастиИмени[2]) <> ВРег("StandardAttribute") Тогда + Если ВРег(ЧастиИмени[2]) <> ВРег("СтандартныйРеквизит") + И ВРег(ЧастиИмени[2]) <> ВРег("StandardAttribute") Тогда // @Non-NLS Возврат Неопределено; КонецЕсли; @@ -45807,7 +47017,7 @@ ОпорныеПоля = СвойстваОграничения.ОпорныеПоля; ОтборПоТипуПользователей = XMLСтрока(СвойстваОграничения.ВариантДоступа); УсловиеСоединения = УсловиеСоединения + ?(УсловиеСоединения = "", "", " - | И ") + "(КлючиДоступаКРегистрам.ВариантДоступа = " + ОтборПоТипуПользователей + ")"; // @query-part-1 + | И ") + "(КлючиДоступаКРегистрам.ВариантДоступа = " + ОтборПоТипуПользователей + ")"; // @query-part-3 НомерПоля = 1; Для Каждого ИмяПоля Из ОпорныеПоля.Используемые Цикл @@ -45815,20 +47025,20 @@ ИмяПараметра = ИмяПоля + Формат(Индекс, "ЧГ="); УсловиеСоединения = УсловиеСоединения + ?(УсловиеСоединения = "", "", " - | И ") + СтрШаблон("(КлючиДоступаКРегистрам.Поле%1 = ТекущаяТаблица.%2)", НомерПоля, ИмяПоля); // @query-part-1 + | И ") + СтрШаблон("(КлючиДоступаКРегистрам.Поле%1 = ТекущаяТаблица.%2)", НомерПоля, ИмяПоля); // @query-part-3 Отбор = ""; Для ТекущийИндекс = 0 По НомерПоля - 2 Цикл ТекущееИмяПоля = ОпорныеПоля.Используемые[ТекущийИндекс]; ТекущееИмяПараметра = ТекущееИмяПоля + Формат(Индекс, "ЧГ="); Отбор = Отбор + ?(Отбор = "", "", " - | И ") + "ТекущаяТаблица." + ТекущееИмяПоля + " = &" + ТекущееИмяПараметра; // @query-part-1 + | И ") + "ТекущаяТаблица." + ТекущееИмяПоля + " = &" + ТекущееИмяПараметра; // @query-part-3 КонецЦикла; Отбор = Отбор + ?(Отбор = "", "", " - | И ") + "ТекущаяТаблица." + ИмяПоля + " > &" + ИмяПараметра; // @query-part-1 + | И ") + "ТекущаяТаблица." + ИмяПоля + " > &" + ИмяПараметра; // @query-part-3 УсловиеОтбора = УсловиеОтбора + ?(НомерПоля = 1, ?(ОпорныеПоля.Используемые.Количество() > 1, "(", "") + Отбор, " - | ИЛИ " + ТекстСОтступом(Отбор, " ")); // @query-part-1 + | ИЛИ " + ТекстСОтступом(Отбор, " ")); // @query-part-3 Если КлючДанных.Свойство(ИмяПоляВКлючеДанных) Тогда ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, КлючДанных[ИмяПоляВКлючеДанных]); @@ -45848,9 +47058,9 @@ ИмяПоляПериода = ?(СвойстваТипа.ИмяКоллекции = "РегистрыРасчета", "ПериодРегистрации", "Период"); ИмяПараметра = ИмяПоляПериода + Формат(Индекс, "ЧГ="); УсловиеОтбора = "(ТекущаяТаблица." + ИмяПоляПериода + " < &" + ИмяПараметра + " - | ИЛИ ТекущаяТаблица." // @query-part-1 + | ИЛИ ТекущаяТаблица." + ИмяПоляПериода + " = &" + ИмяПараметра + " - | И " + ТекстСОтступом(УсловиеОтбора, " ") + ")"; // @query-part-1 + | И " + ТекстСОтступом(УсловиеОтбора, " ") + ")"; // @query-part-3, @query-part-5 ОписаниеЗапроса.Запрос.УстановитьПараметр(ИмяПараметра, ПоследнийОбновленныйЭлемент.Дата); КонецЕсли; @@ -46068,4 +47278,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl index e807b0e5b..15235c4f4 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВМоделиСервиса/Module.bsl @@ -45,8 +45,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов. Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт @@ -89,3 +88,752 @@ КонецПроцедуры #КонецОбласти + +Процедура УстановитьПраваПользователя(Пользователь, ГруппыДоступа, ГруппыПользователей) Экспорт + Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИсключитьИзГрупп.Ссылка КАК Группа, + | ИсключитьИзГрупп.Ссылка.Профиль КАК Профиль, + | ИсключитьИзГрупп.Ссылка.Родитель КАК Родитель + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ИсключитьИзГрупп + |ГДЕ + | ИсключитьИзГрупп.Пользователь = &Пользователь + | И ИсключитьИзГрупп.Ссылка НЕ В (&ГруппыДоступа) + | И ИсключитьИзГрупп.Ссылка.Профиль НЕ В (&ГруппыДоступа) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИсключитьИзГрупп.Ссылка КАК Группа + |ИЗ + | Справочник.ГруппыПользователей.Состав КАК ИсключитьИзГрупп + |ГДЕ + | ИсключитьИзГрупп.Пользователь = &Пользователь + | И ИсключитьИзГрупп.Ссылка НЕ В (&ГруппыПользователей) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Ссылка КАК Группа + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК СоставГрупп + | ПО СоставГрупп.Ссылка = ГруппыДоступа.Ссылка + | И СоставГрупп.Пользователь = &Пользователь + |ГДЕ + | ГруппыДоступа.Ссылка В (&ГруппыДоступа) + | И СоставГрупп.Пользователь ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыПользователей.Ссылка КАК Группа + |ИЗ + | Справочник.ГруппыПользователей КАК ГруппыПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК СоставГрупп + | ПО (ГруппыПользователей.Ссылка = СоставГрупп.Ссылка) + | И (СоставГрупп.Пользователь = &Пользователь) + |ГДЕ + | ГруппыПользователей.Ссылка В (&ГруппыПользователей) + | И СоставГрупп.Пользователь ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПрофилиГруппДоступа.Ссылка КАК Профиль + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка + | И ГруппыДоступа.Родитель = &РодительПерсональныхГрупп + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК СоставГрупп + | ПО СоставГрупп.Ссылка = ГруппыДоступа.Ссылка + | И СоставГрупп.Пользователь = &Пользователь + |ГДЕ + | ПрофилиГруппДоступа.Ссылка В (&ГруппыДоступа) + | И СоставГрупп.Пользователь ЕСТЬ NULL"); + + РодительПерсональныхГрупп = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина); + + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("ГруппыДоступа", ГруппыДоступа); + Запрос.УстановитьПараметр("ГруппыПользователей", ГруппыПользователей); + Запрос.УстановитьПараметр("РодительПерсональныхГрупп", РодительПерсональныхГрупп); + + Результат = Запрос.ВыполнитьПакет(); + + ГруппыДоступаИсключить = Результат[0].Выгрузить(); + ГруппыПользователейИсключить = Результат[1].Выгрузить(); + ГруппыДоступаВключить = Результат[2].Выгрузить(); + ГруппыПользователейВключить = Результат[3].Выгрузить(); + ПрофилиВключить = Результат[4].Выгрузить(); + + Блокировка = ПодготовитьБлокировкуПоГруппамПользователя( + ГруппыДоступаВключить, + ГруппыДоступаИсключить, + ГруппыПользователейВключить, + ГруппыПользователейИсключить); + + ДобавитьБлокировкуПоПрофилямПользователя( + Блокировка, + ПрофилиВключить, + ГруппыДоступаИсключить, + РодительПерсональныхГрупп); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + + ОбработатьВключениеИсключениеИзГрупп(Пользователь, ГруппыДоступаИсключить, ГруппыДоступаВключить, Ложь); + + ОбработатьВключениеИсключениеИзГрупп( + Пользователь, ГруппыПользователейИсключить, ГруппыПользователейВключить, Истина); + + ОбработатьВключениеИсключениеИзПрофилей( + Пользователь, ГруппыДоступаИсключить, ПрофилиВключить, РодительПерсональныхГрупп); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +// Обновить профиль групп доступа по шаблону. +// +// Параметры: +// ИмяШаблона - Строка +// Комментарий - Строка +// ИдентификаторШаблона - УникальныйИдентификатор +// РолиШаблона - Массив из Строка +// ЭтоОтключение - Булево +// +Процедура ОбновитьПрофильГруппДоступаПоШаблону(ИмяШаблона, Комментарий, ИдентификаторШаблона, РолиШаблона, ЭтоОтключение) Экспорт + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + ЭлементБлокировки.УстановитьЗначение("ИдентификаторШаблонаСервиса", ИдентификаторШаблона); + Блокировка.Заблокировать(); + + УпрощенныйРежим = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); + + Профиль = Справочники.ПрофилиГруппДоступа.НайтиПоРеквизиту("ИдентификаторШаблонаСервиса", ИдентификаторШаблона); + Если Профиль.Пустая() Тогда + ОбъектПрофиля = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); + Иначе + ОбъектПрофиля = Профиль.ПолучитьОбъект(); + + Если ОбъектПрофиля.ПометкаУдаления <> ЭтоОтключение Тогда + ОбъектПрофиля.УстановитьПометкуУдаления(ЭтоОтключение); + Если ЭтоОтключение Тогда + Если УпрощенныйРежим Тогда + ОтправитьСообщениеИзмененияГруппыДоступа(ОбъектПрофиля); + КонецЕсли; + + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ОбъектПрофиля.Наименование = ИмяШаблона; + ОбъектПрофиля.Комментарий = Комментарий; + ОбъектПрофиля.ИдентификаторШаблонаСервиса = ИдентификаторШаблона; + ОбъектПрофиля.Роли.Очистить(); + + ПолныеИменаРолей = Новый Массив; + Для Каждого ИмяРоли Из РолиШаблона Цикл + ОбъектМетаданныхРоль = Метаданные.Роли.Найти(ИмяРоли); + Если ОбъектМетаданныхРоль = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдена роль %1'"), ИмяРоли); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ПолныеИменаРолей.Добавить(ОбъектМетаданныхРоль.ПолноеИмя()); + КонецЦикла; + + ИдентификаторыРолей = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИменаРолей); + Для Каждого КлючЗначение Из ИдентификаторыРолей Цикл + ОбъектПрофиля.Роли.Добавить().Роль = КлючЗначение.Значение; + КонецЦикла; + + ОбъектПрофиля.Назначение.Очистить(); + ОбъектПрофиля.Назначение.Добавить().ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + + ОбъектПрофиля.Записать(); + + Если УпрощенныйРежим Тогда + ОтправитьСообщениеИзмененияГруппыДоступа(ОбъектПрофиля); + Возврат; + КонецЕсли; + + ГруппыДоступа = Справочники.ГруппыДоступа.ГруппыДоступаПрофиля(ОбъектПрофиля.Ссылка); + Если ГруппыДоступа.Количество() = 0 Тогда + ГруппаДоступа = Справочники.ГруппыДоступа.СоздатьЭлемент(); + ГруппаДоступа.Наименование = ОбъектПрофиля.Наименование; + ГруппаДоступа.Профиль = ОбъектПрофиля.Ссылка; + ГруппаДоступа.Записать(); + ИначеЕсли Не ЭтоОтключение Тогда + ПометкиГрупп = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ГруппыДоступа, "ПометкаУдаления"); + + Для Каждого КлючЗначение Из ПометкиГрупп Цикл + Если КлючЗначение.Значение = Ложь Тогда + Продолжить; + КонецЕсли; + + ГруппаОбъект = КлючЗначение.Ключ.ПолучитьОбъект(); + ГруппаОбъект.УстановитьПометкуУдаления(Ложь); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Процедура ОтправитьСообщениеИзмененияГруппыПользователей(ОбъектГруппы, Удаление = Ложь, ВсеИдентификаторыПользователейСервиса = Неопределено) Экспорт + УстановитьПривилегированныйРежим(Истина); + + Если Не ПоддерживаетсяНастройкаПравПользователейБТС() Тогда + Возврат; + КонецЕсли; + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульОбменСообщениями = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениями"); + + ГруппаПользователей = Новый Структура; + ГруппаПользователей.Вставить("Zone", МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ГруппаПользователей.Вставить("Id", XMLСтрока(ОбъектГруппы.Ссылка)); + ГруппаПользователей.Вставить("Name", ОбъектГруппы.Наименование); + ГруппаПользователей.Вставить("Comment", ОбъектГруппы.Комментарий); + ГруппаПользователей.Вставить("DeletionMark", ОбъектГруппы.ПометкаУдаления); + ГруппаПользователей.Вставить("Deleted", Удаление); + ГруппаПользователей.Вставить("Parent", XMLСтрока(ОбъектГруппы.Родитель)); + ГруппаПользователей.Вставить("GroupAllUsers", ОбъектГруппы.Ссылка = Пользователи.ГруппаВсеПользователи()); + ГруппаПользователей.Вставить("Users", + ИдентификаторыПользователейСервиса( + ОбъектГруппы.Состав.ВыгрузитьКолонку("Пользователь"), + ВсеИдентификаторыПользователейСервиса)); + + МодульОбменСообщениями.ОтправитьСообщение( + "AccessRights/UserGroups", + ОбщегоНазначения.ЗначениеВJSON(ГруппаПользователей), + МодульРаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); +КонецПроцедуры + + +// Отправить сообщение изменения группы доступа. +// +// Параметры: +// ОбъектГруппы - СправочникСсылка.ГруппыДоступа, СправочникСсылка.ПрофилиГруппДоступа +// Удаление - Булево +// ВсеИдентификаторыПользователейСервиса - Неопределено, Соответствие +// +Процедура ОтправитьСообщениеИзмененияГруппыДоступа(ОбъектГруппы, Удаление = Ложь, ВсеИдентификаторыПользователейСервиса = Неопределено) Экспорт + УстановитьПривилегированныйРежим(Истина); + + Если Не ПоддерживаетсяНастройкаПравПользователейБТС() Тогда + Возврат; + КонецЕсли; + + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульОбменСообщениями = ОбщегоНазначения.ОбщийМодуль("ОбменСообщениями"); + + ГруппаДоступа = Новый Структура; + ГруппаДоступа.Вставить("Zone", МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ГруппаДоступа.Вставить("Id", XMLСтрока(ОбъектГруппы.Ссылка)); + ГруппаДоступа.Вставить("Name", ОбъектГруппы.Наименование); + ГруппаДоступа.Вставить("Parent", XMLСтрока(ОбъектГруппы.Родитель)); + ГруппаДоступа.Вставить("IsFolder", ОбъектГруппы.ЭтоГруппа); + ГруппаДоступа.Вставить("DeletionMark", ОбъектГруппы.ПометкаУдаления); + ГруппаДоступа.Вставить("Deleted", Удаление); + + УпрощенныйРежим = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); + + Если Не ОбъектГруппы.ЭтоГруппа Тогда + + СписокПользователей = Новый Массив; + СписокГруппПользователей = Новый Массив; + Профиль = Справочники.ПрофилиГруппДоступа.ПустаяСсылка(); + РодительПерсональныхГрупп = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина); + + Если УпрощенныйРежим + Или (РодительПерсональныхГрупп <> Неопределено И РодительПерсональныхГрупп = ОбъектГруппы.Родитель) Тогда + Если ТипЗнч(ОбъектГруппы) = Тип("СправочникОбъект.ПрофилиГруппДоступа") Тогда + Профиль = ОбъектГруппы.Ссылка; + Иначе + Профиль = ОбъектГруппы.Профиль; + КонецЕсли; + + ГруппаДоступа.Id = XMLСтрока(Профиль); + ГруппаДоступа.Parent = XMLСтрока(Справочники.ГруппыДоступа.ПустаяСсылка()); + СписокПользователей = УчастникиПоПрофилю(Профиль); + + Иначе + Профиль = ОбъектГруппы.Профиль; + + СсылкиПользователей = Новый Массив; + Для Каждого Пользователь Из ОбъектГруппы.Пользователи.ВыгрузитьКолонку("Пользователь") Цикл + + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда + СсылкиПользователей.Добавить(Пользователь); + ИначеЕсли ТипЗнч(Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + СписокГруппПользователей.Добавить(XMLСтрока(Пользователь)); + КонецЕсли; + + КонецЦикла; + + СписокПользователей = + ИдентификаторыПользователейСервиса(СсылкиПользователей, ВсеИдентификаторыПользователейСервиса); + + Если СсылкиПользователей.Количество() > 0 И СписокПользователей.Количество() = 0 И ГруппаДоступа.IsAdmin Тогда + // Происходит при записи группы доступа перед записью первого администратора, группа будет отправлена позже + Возврат; + КонецЕсли; + КонецЕсли; + + ГруппаДоступа.Вставить("Comment", ОбъектГруппы.Комментарий); + ГруппаДоступа.Вставить("SimplifiedMode", УпрощенныйРежим); + ГруппаДоступа.Вставить("IsAdmin", Профиль = УправлениеДоступом.ПрофильАдминистратор()); + ГруппаДоступа.Вставить("LoginToAppAllowed", ПрофильДаетПраваНаВходВПриложение(Профиль)); + ГруппаДоступа.Вставить("Users", СписокПользователей); + ГруппаДоступа.Вставить("UserGroups", СписокГруппПользователей); + ГруппаДоступа.Вставить("ProfileId", XMLСтрока(Профиль)); + + Если СписокПользователей.Количество() > 0 И ГруппаДоступа.Users.Количество() = 0 И ГруппаДоступа.IsAdmin Тогда + // Происходит при записи группы доступа перед записью первого администратора, группа будет отправлена позже + Возврат; + КонецЕсли; + КонецЕсли; + + МодульОбменСообщениями.ОтправитьСообщение( + "AccessRights/AccessGroups", + ОбщегоНазначения.ЗначениеВJSON(ГруппаДоступа), + МодульРаботаВМоделиСервиса.КонечнаяТочкаМенеджераСервиса()); +КонецПроцедуры + +Процедура ОтправитьГруппыДоступаВМенеджерСервиса() Экспорт + Если Не ПоддерживаетсяНастройкаПравПользователейБТС() Тогда + Возврат; + КонецЕсли; + + // АПК:96-выкл Объединить в данном случае требуется, чтобы выбрать уникальные записи + Запрос = Новый Запрос("ВЫБРАТЬ + | ГруппыПользователей.Ссылка КАК Группа + |ИЗ + | Справочник.ГруппыПользователей КАК ГруппыПользователей + | + |УПОРЯДОЧИТЬ ПО + | Группа ИЕРАРХИЯ + |; + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГруппыДоступаПользователи.Пользователь КАК Пользователь, + | ВЫРАЗИТЬ(ГруппыДоступаПользователи.Пользователь КАК Справочник.Пользователи).ИдентификаторПользователяСервиса КАК + | ИдентификаторПользователяСервиса + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | НЕ ВЫРАЗИТЬ(ГруппыДоступаПользователи.Пользователь КАК Справочник.Пользователи).ИдентификаторПользователяСервиса ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ГруппыПользователейСостав.Пользователь, + | ВЫРАЗИТЬ(ГруппыПользователейСостав.Пользователь КАК Справочник.Пользователи).ИдентификаторПользователяСервиса + |ИЗ + | Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав + |ГДЕ + | НЕ ВЫРАЗИТЬ(ГруппыПользователейСостав.Пользователь КАК Справочник.Пользователи).ИдентификаторПользователяСервиса ЕСТЬ NULL"); + // АПК:96-вкл + + Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаВыборкиГруппДоступа(); + + Результат = Запрос.ВыполнитьПакет(); + + ВсеИдентификаторыПользователейСервиса = Новый Соответствие; + + ВыборкаИдентификаторы = Результат[1].Выбрать(); + Пока ВыборкаИдентификаторы.Следующий() Цикл + ВсеИдентификаторыПользователейСервиса[ВыборкаИдентификаторы.Пользователь] = + ВыборкаИдентификаторы.ИдентификаторПользователяСервиса; + КонецЦикла; + + УпрощенныйРежим = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); + + ВыборкаГруппыПользователей = Результат[0].Выбрать(); + Пока ВыборкаГруппыПользователей.Следующий() Цикл + ГруппаОбъект = ВыборкаГруппыПользователей.Группа.ПолучитьОбъект(); + //@skip-check query-in-loop + ОтправитьСообщениеИзмененияГруппыПользователей(ГруппаОбъект, , ВсеИдентификаторыПользователейСервиса); + КонецЦикла; + + ВыборкаГруппыДоступа = Результат[2].Выбрать(); + Пока ВыборкаГруппыДоступа.Следующий() Цикл + ГруппаОбъект = ВыборкаГруппыДоступа.Группа.ПолучитьОбъект(); + //@skip-check query-in-loop + ОтправитьСообщениеИзмененияГруппыДоступа(ГруппаОбъект, , ВсеИдентификаторыПользователейСервиса); + КонецЦикла; +КонецПроцедуры + +Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт + Если Не ПоддерживаетсяНастройкаПравПользователейБТС() Тогда + Возврат; + КонецЕсли; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.11.1"; + Обработчик.Процедура = "УправлениеДоступомСлужебныйВМоделиСервиса.ОбработатьДанныеДляПереходаНаНовуюВерсию"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Комментарий = НСтр("ru = 'Отправляет группы доступа и группы пользователей в Менеджер сервиса.'"); + Обработчик.Идентификатор = Новый УникальныйИдентификатор("7fce724c-8d26-49ab-805d-dd5c21ca0af5"); + Обработчик.ПроцедураЗаполненияДанныхОбновления = "УправлениеДоступомСлужебныйВМоделиСервиса.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; + Обработчик.ЧитаемыеОбъекты = "Справочник.ГруппыДоступа,Справочник.ГруппыПользователей"; +КонецПроцедуры + +Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт + + // Регистрация данных не требуется. + Возврат; + +КонецПроцедуры + +Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт + ОтправитьГруппыДоступаВМенеджерСервисаПриПереходеНаНовуюВерсию(); + Параметры.ОбработкаЗавершена = Истина; +КонецПроцедуры + +Процедура ОтправитьГруппыДоступаВМенеджерСервисаПриПереходеНаНовуюВерсию() Экспорт + КлючОбъекта = "ГруппыДоступаПриложения"; + КлючНастроек = "ОбработчикОбновленияВыполнен"; + ОбработчикВыполнен = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта, КлючНастроек); + Если ОбработчикВыполнен <> Неопределено Тогда + Возврат; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + ОтправитьГруппыДоступаВМенеджерСервиса(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, КлючНастроек, Истина); +КонецПроцедуры + +Процедура ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий) Экспорт + + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("1.0.0.1"); + + СтруктураПоддерживаемыхВерсий.Вставить( + "SettingUpUserRightsInServiceModel", + МассивВерсий); + +КонецПроцедуры + +Функция ПоддерживаетсяНастройкаПравПользователейБТС() Экспорт + + Если Не СуществуютНеобходимыеПодсистемыБТС() Тогда + Возврат Ложь; + КонецЕсли; + + ПоддерживаемыеВерсии = ОбщегоНазначения.ВерсииИнтерфейсов(); + + ИнтерфейсПоддерживается = ПрограммныйИнтерфейсПоддерживается( + ПоддерживаемыеВерсии, + ИмяИнтерфейсаУдаленноеАдминистрированиеПриложений(), + "1.0.3.16"); + + Если Не ИнтерфейсПоддерживается Тогда + + ИнтерфейсПоддерживается = ПрограммныйИнтерфейсПоддерживается( + ПоддерживаемыеВерсии, + ИмяИнтерфейсаУправлениеПравамиДоступ()); + + КонецЕсли; + + Возврат ИнтерфейсПоддерживается; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ОбработатьВключениеИсключениеИзПрофилей(Пользователь, + ГруппыДоступаИсключить, + ПрофилиВключить, + РодительПерсональныхГрупп) + + Если Не УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда + Возврат; + КонецЕсли; + + Для Каждого СтрокаПрофиль Из ГруппыДоступаИсключить Цикл + Если СтрокаПрофиль.Родитель <> РодительПерсональныхГрупп Тогда + Продолжить; + КонецЕсли; + + УправлениеДоступом.ВыключитьПрофильПользователю(Пользователь, СтрокаПрофиль.Профиль); + КонецЦикла; + + Для Каждого ТекСтрока Из ПрофилиВключить Цикл + УправлениеДоступом.ВключитьПрофильПользователю(Пользователь, ТекСтрока.Профиль); + КонецЦикла; +КонецПроцедуры + +Процедура ДобавитьБлокировкуПоПрофилямПользователя(Блокировка, ПрофилиВключить, ГруппыДоступаИсключить, РодительПерсональныхГрупп) + ПрофилиДляБлокировки = ПрофилиВключить.Скопировать(); + Для Каждого СтрокаПрофиль Из ГруппыДоступаИсключить Цикл + Если СтрокаПрофиль.Родитель <> РодительПерсональныхГрупп Тогда + Продолжить; + КонецЕсли; + + ПрофилиДляБлокировки.Добавить().Профиль = СтрокаПрофиль.Профиль; + КонецЦикла; + + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Профиль"); + ЭлементБлокировки.ИсточникДанных = ПрофилиДляБлокировки; +КонецПроцедуры + +Функция УчастникиПоПрофилю(Профиль) + // Блокировка по профилю накладывается ранее, при записи группы доступа + + Результат = Новый Массив(); + + Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК Справочник.Пользователи).ИдентификаторПользователяСервиса КАК + | ИдентификаторПользователяСервиса + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Ссылка.Профиль = &Профиль + | И НЕ ГруппыДоступа.Ссылка.ПометкаУдаления + | И ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК Справочник.Пользователи) <> Значение(Справочник.Пользователи.ПустаяСсылка) + | И ТИПЗНАЧЕНИЯ(ГруппыДоступа.Пользователь) = ТИП(Справочник.Пользователи) + | И ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК + | Справочник.Пользователи).ИдентификаторПользователяСервиса <> &ПустойИдентификатор"); + Запрос.УстановитьПараметр("Профиль", Профиль); + Запрос.УстановитьПараметр("ПустойИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Добавить(Строка(Выборка.ИдентификаторПользователяСервиса)); + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПодготовитьБлокировкуПоГруппамПользователя(ГруппыДоступаВключить, + ГруппыДоступаИсключить, + ГруппыПользователейВключить, + ГруппыПользователейИсключить) + + ПоГруппамДоступа = ГруппыДоступаВключить.Скопировать(); + Для Каждого СтрокаГруппаДоступа Из ГруппыДоступаИсключить Цикл + ПоГруппамДоступа.Добавить().Группа = СтрокаГруппаДоступа.Группа; + КонецЦикла; + + ПоГруппамПользователей = ГруппыПользователейВключить.Скопировать(); + Для Каждого СтрокаГруппаПользователей Из ГруппыПользователейИсключить Цикл + ПоГруппамПользователей.Добавить().Группа = СтрокаГруппаПользователей.Группа; + КонецЦикла; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Группа"); + ЭлементБлокировки.ИсточникДанных = ПоГруппамДоступа; + + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей"); + ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Группа"); + ЭлементБлокировки.ИсточникДанных = ПоГруппамПользователей; + + Возврат Блокировка; +КонецФункции + +// АПК:1327-выкл Исключительная блокировка наложена уровнем выше +Процедура ОбработатьВключениеИсключениеИзГрупп(Пользователь, ГруппаИсключить, ГруппаВключить, ЭтоГруппаПользователей) + ИмяТабличнойЧасти = "Пользователи"; + Если ЭтоГруппаПользователей Тогда + ИмяТабличнойЧасти = "Состав"; + КонецЕсли; + РодительПерсональныхГрупп = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина); + УпрощенныйРежим = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); + + Для Каждого ТекСтрока Из ГруппаИсключить Цикл + Если Не ЭтоГруппаПользователей И ТекСтрока.Родитель = РодительПерсональныхГрупп И УпрощенныйРежим Тогда + Продолжить; + КонецЕсли; + + ГруппаОбъект = ТекСтрока.Группа.ПолучитьОбъект(); + СтрокаПользователь = ГруппаОбъект[ИмяТабличнойЧасти].Найти(Пользователь, "Пользователь"); + Если СтрокаПользователь <> Неопределено Тогда + ГруппаОбъект[ИмяТабличнойЧасти].Удалить(СтрокаПользователь); + ГруппаОбъект.Записать(); + КонецЕсли; + КонецЦикла; + + Для Каждого ТекСтрока Из ГруппаВключить Цикл + ГруппаОбъект = ТекСтрока.Группа.ПолучитьОбъект(); + СтрокаПользователь = ГруппаОбъект[ИмяТабличнойЧасти].Найти(Пользователь, "Пользователь"); + Если СтрокаПользователь <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ГруппаОбъект[ИмяТабличнойЧасти].Добавить().Пользователь = Пользователь; + ГруппаОбъект.Записать(); + КонецЦикла; +КонецПроцедуры +// АПК:1327-вкл + +Функция ИдентификаторыПользователейСервиса(ПользователиГруппы, ВсеИдентификаторыПользователейСервиса = Неопределено) + Результат = Новый Массив; + ПустойИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + Если ВсеИдентификаторыПользователейСервиса = Неопределено Тогда + + Запрос = Новый Запрос("ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяСервиса КАК ИдентификаторПользователяСервиса + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Ссылка В (&ПользователиГруппы) + | И Пользователи.ИдентификаторПользователяСервиса <> &ПустойИдентификатор"); + Запрос.УстановитьПараметр("ПользователиГруппы", ПользователиГруппы); + Запрос.УстановитьПараметр("ПустойИдентификатор", ПустойИдентификатор); + + ТаблицаПользователей = Запрос.Выполнить().Выгрузить(); + Для Каждого ТекСтрока Из ТаблицаПользователей Цикл + Результат.Добавить(Строка(ТекСтрока.ИдентификаторПользователяСервиса)); + КонецЦикла; + + Иначе + + Для Каждого ПользовательГруппы Из ПользователиГруппы Цикл + ИдентификаторПользователя = ВсеИдентификаторыПользователейСервиса.Получить(ПользовательГруппы); + Если ИдентификаторПользователя = Неопределено Или ИдентификаторПользователя = ПустойИдентификатор Тогда + Продолжить; + КонецЕсли; + + Результат.Добавить(Строка(ИдентификаторПользователя)); + КонецЦикла; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПрофильДаетПраваНаВходВПриложение(Профиль) + + БазовыеРоли = Новый Массив; + БазовыеРоли.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.БазовыеПраваБСП.ПолноеИмя())); + БазовыеРоли.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.БазовыеПраваВнешнихПользователейБСП.ПолноеИмя())); + + РолиДающиеПравоЗапуска = Новый Массив; + РолиДающиеПравоЗапуска.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.ЗапускТонкогоКлиента.ПолноеИмя())); + РолиДающиеПравоЗапуска.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.ЗапускВебКлиента.ПолноеИмя())); + РолиДающиеПравоЗапуска.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.ЗапускМобильногоКлиента.ПолноеИмя())); + РолиДающиеПравоЗапуска.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных( + Метаданные.Роли.ЗапускТолстогоКлиента.ПолноеИмя())); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РолиДающиеПравоЗапуска", РолиДающиеПравоЗапуска); + Запрос.УстановитьПараметр("БазовыеРоли", БазовыеРоли); + Запрос.УстановитьПараметр("Профиль", Профиль); + Запрос.Текст = + "ВЫБРАТЬ + | Подзапрос.Профиль КАК Профиль + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | РолиПрофилей.Ссылка КАК Профиль + | ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей + | ГДЕ + | РолиПрофилей.Ссылка = &Профиль + | И РолиПрофилей.Роль В (&РолиДающиеПравоЗапуска) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ РАЗЛИЧНЫЕ + | РолиПрофилей.Ссылка КАК Профиль + | ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей + | ГДЕ + | РолиПрофилей.Ссылка = &Профиль + | И РолиПрофилей.Роль В (&БазовыеРоли)) КАК Подзапрос + |СГРУППИРОВАТЬ ПО + | Подзапрос.Профиль + |ИМЕЮЩИЕ + | Количество(Подзапрос.Профиль) > 1"; + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +Функция СуществуютНеобходимыеПодсистемыБТС() + + Возврат ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") + И ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ОбменСообщениями"); + +КонецФункции + +Функция ПрограммныйИнтерфейсПоддерживается( + ПоддерживаемыеВерсии, ИмяИнтерфейса, ВерсияИнтерфейса = Неопределено) + + ВерсииИнтерфейса = Неопределено; + + Если Не ПоддерживаемыеВерсии.Свойство(ИмяИнтерфейса, ВерсииИнтерфейса) + Или Не ЗначениеЗаполнено(ВерсииИнтерфейса) Тогда + + Возврат Ложь; + + КонецЕсли; + + Если ЗначениеЗаполнено(ВерсияИнтерфейса) + И ВерсииИнтерфейса.Найти(ВерсияИнтерфейса) = Неопределено Тогда + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ИмяИнтерфейсаУправлениеПравамиДоступ() + + Возврат "ManageAccessRights"; + +КонецФункции + +Функция ИмяИнтерфейсаУдаленноеАдминистрированиеПриложений() + + Возврат "RemoteAdministrationApp"; + +КонецФункции + +Функция ТекстЗапросаВыборкиГруппДоступа() + Если УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда + Возврат "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Группа + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | НЕ ПрофилиГруппДоступа.ЭтоГруппа"; + Иначе + Возврат "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Группа + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + | + |УПОРЯДОЧИТЬ ПО + | Группа ИЕРАРХИЯ" + КонецЕсли; +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl index d8b9b729d..a6782e4c5 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйВызовСервера/Module.bsl @@ -58,4 +58,34 @@ КонецФункции +Функция СписокТиповДляВыбора(Знач СоставТипов) Экспорт + + Список = Новый СписокЗначений; + Для Каждого Тип Из СоставТипов.Типы() Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ПравоДоступа("Просмотр", ОбъектМетаданных) Тогда + Список.Добавить(Тип, Строка(Тип)); + КонецЕсли; + КонецЦикла; + Список.СортироватьПоПредставлению(); + + Возврат Список; + +КонецФункции + +Функция ПолноеИмяТаблицыСсылочногоТипа(Знач ТипСсылки) Экспорт + + Если Не ОбщегоНазначения.ЭтоСсылка(ТипСсылки) Тогда + Возврат ""; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипСсылки); + + Возврат ОбъектМетаданных.ПолноеИмя(); + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl index 3ec713c17..ad5b49112 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиент/Module.bsl @@ -11,8 +11,7 @@ //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий таблицы формы ЗначенияДоступа. +#Область ОбработчикиСобытийЭлементовТаблицыФормыЗначенияДоступа // Только для внутреннего использования. // @@ -232,8 +231,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий таблицы формы ВидыДоступа. +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВидыДоступа // Только для внутреннего использования. Процедура ВидыДоступаПриАктивизацииСтроки(Форма, Элемент) Экспорт @@ -426,8 +426,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий общей формы ФормаОтчета. +#Область ОбработчикиСобытийОбщейФормыФормаОтчета // Обработчик двойного щелчка мыши, нажатия клавиши Enter или гиперссылки в табличном документе формы отчета. // См. "Расширение поля формы для поля табличного документа.Выбор" в синтакс-помощнике. @@ -467,14 +466,14 @@ // См. ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки Процедура ПриОбработкеРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт - Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.АнализПравДоступа" Тогда - ПриОбработкеРасшифровкиОтчетаАнализПравДоступа(ФормаОтчета, - Элемент, Расшифровка, СтандартнаяОбработка); + ПриОбработкеРасшифровкиОтчета(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка, Ложь); - ИначеЕсли ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ПраваРолей" Тогда - ПриОбработкеРасшифровкиОтчетаПраваРолей(ФормаОтчета, - Элемент, Расшифровка, СтандартнаяОбработка); - КонецЕсли; +КонецПроцедуры + +// См. ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки. +Процедура ПриОбработкеДополнительнойРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + + ПриОбработкеРасшифровкиОтчета(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка, Истина); КонецПроцедуры @@ -549,6 +548,10 @@ #КонецОбласти +#КонецОбласти + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Продолжение обработчика события ЗначениеДоступаНачалоВыбора. @@ -657,53 +660,160 @@ // Обработка расшифровки отчета. -// Для процедуры ПриОбработкеРасшифровки. -Процедура ПриОбработкеРасшифровкиОтчетаАнализПравДоступа(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) +// Для процедур ПриОбработкеРасшифровки, ПриОбработкеДополнительнойРасшифровки. +Процедура ПриОбработкеРасшифровкиОтчета(ФормаОтчета, Элемент, Расшифровка, + СтандартнаяОбработка, ЭтоДополнительнаяРасшифровка) + + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.АнализПравДоступа" Тогда + Действия = ДействияРасшифровкиОтчетаАнализПравДоступа(ФормаОтчета, Элемент, Расшифровка); + + ИначеЕсли ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ПраваРолей" Тогда + Действия = ДействияРасшифровкиОтчетаПраваРолей(ФормаОтчета, Элемент, Расшифровка); + Иначе + Возврат; + КонецЕсли; СтандартнаяОбработка = Ложь; + Если Не ЗначениеЗаполнено(Действия) Тогда + Возврат; + КонецЕсли; + + Если ЭтоДополнительнаяРасшифровка + Или СтрНайти(Действия[0].Значение.НавигационнаяСсылка, "/command/") > 0 Тогда + + Оповещение = Новый ОписаниеОповещения("ОбработкаДействияРасшифровки", ЭтотОбъект); + ФормаОтчета.ПоказатьВыборИзМеню(Оповещение, Действия, Элемент); + Иначе + ОбработкаДействияРасшифровки(Действия[0], Неопределено); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПриОбработкеРасшифровкиОтчета. +Процедура ОбработкаДействияРасшифровки(Действие, Контекст) Экспорт + + Если Действие = Неопределено Тогда + Возврат; + КонецЕсли; + + Параметры = Действие.Значение; + + Если ЗначениеЗаполнено(Параметры.НавигационнаяСсылка) Тогда + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(Параметры.НавигационнаяСсылка); + + ИначеЕсли Параметры.Значение <> Неопределено Тогда + ПоказатьЗначение(, Параметры.Значение); + + ИначеЕсли Параметры.Пользователь <> Неопределено Тогда + ОткрытьПраваПользователя(Параметры.Пользователь); + Иначе + ОткрытьФорму(Параметры.ПолноеИмяФормы, Параметры.ПараметрыФормы, Параметры.ВладелецФормы); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПриОбработкеРасшифровкиОтчета. +Функция ДействияРасшифровкиОтчетаАнализПравДоступа(ФормаОтчета, Элемент, Расшифровка) + + Действия = Новый СписокЗначений; + ТекущийВариант = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта; + + Если ТекущийВариант = "ПраваПользователейНаОбъект" Тогда + Возврат Действия; + КонецЕсли; + ПараметрыРасшифровки = УправлениеДоступомСлужебныйВызовСервера.ПараметрыРасшифровкиОтчетаАнализПравДоступа( ФормаОтчета.ОтчетДанныеРасшифровки, Расшифровка); Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "ЗначениеПрава" Тогда - Возврат; + Возврат Действия; ИначеЕсли ПараметрыРасшифровки.ИмяПоляРасшифровки = "ВладелецИлиПользовательНастроек" И ПараметрыРасшифровки.СписокПолей.Получить("ЭтоВладелецНастроек") = Истина Тогда ВладелецНастроек = ПараметрыРасшифровки.СписокПолей.Получить("ВладелецИлиПользовательНастроек"); Если Не ЗначениеЗаполнено(ВладелецНастроек) Тогда - Возврат; + Возврат Действия; КонецЕсли; - ПараметрыФормы = Новый Структура("СсылкаНаОбъект", ВладелецНастроек); - ОткрытьФорму("ОбщаяФорма.НастройкиПравОбъектов", ПараметрыФормы); - Возврат; + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.ПолноеИмяФормы = "ОбщаяФорма.НастройкиПравОбъектов"; + Параметры.ПараметрыФормы = Новый Структура("СсылкаНаОбъект", ВладелецНастроек); + Действия.Вставить(0, Параметры, НСтр("ru = 'Открыть настройки прав'")); + Возврат Действия; ИначеЕсли ПараметрыРасшифровки.ИмяПоляРасшифровки = "ЗначениеДоступа" Тогда ГруппаДоступа = ПараметрыРасшифровки.СписокПолей.Получить("ГруппаДоступа"); Если Не ЗначениеЗаполнено(ГруппаДоступа) Или ТипЗнч(ГруппаДоступа) <> Тип("СправочникСсылка.ГруппыДоступа") Тогда - Возврат; + Возврат Действия; КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", ГруппаДоступа); - ПараметрыФормы.Вставить("ПерейтиКВидуДоступа", - ПараметрыРасшифровки.СписокПолей.Получить("ВидДоступа")); - ПараметрыФормы.Вставить("ПерейтиКЗначениюДоступа", - ПараметрыРасшифровки.СписокПолей.Получить("ЗначениеДоступа")); - Форма = ОткрытьФорму("Справочник.ГруппыДоступа.ФормаОбъекта", ПараметрыФормы); - ПараметрыФормы.Удалить("Ключ"); - ЗаполнитьЗначенияСвойств(Форма, ПараметрыФормы); - Возврат; - ИначеЕсли ПараметрыРасшифровки.ИмяПоляРасшифровки = "ОбъектМетаданныхЗаголовкаОтчета" Тогда - НавигационнаяСсылка = ПараметрыРасшифровки.СписокПолей.Получить("ОбъектМетаданныхНавигационнаяСсылка"); - Если ЗначениеЗаполнено(НавигационнаяСсылка) Тогда - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка); + ВидДоступа = ПараметрыРасшифровки.СписокПолей.Получить("ВидДоступа"); + ЗначениеДоступа = ПараметрыРасшифровки.СписокПолей.Получить("ЗначениеДоступа"); + Если ВидДоступа = Неопределено Или ЗначениеДоступа = Неопределено Тогда + Возврат Действия; КонецЕсли; - Возврат; + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.ПолноеИмяФормы = "Справочник.ГруппыДоступа.ФормаОбъекта"; + Параметры.ПараметрыФормы.Вставить("Ключ", ГруппаДоступа); + Параметры.ПараметрыФормы.Вставить("ПерейтиКВидуДоступа", ВидДоступа); + Параметры.ПараметрыФормы.Вставить("ПерейтиКЗначениюДоступа", ЗначениеДоступа); + Действия.Вставить(0, Параметры, НСтр("ru = 'Перейти к значению в группе доступа'")); + Возврат Действия; КонецЕсли; - ТекущийВариант = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта; + Таблица = ПараметрыРасшифровки.СписокПолей.Получить("ОбъектМетаданныхПолноеИмя"); + Если ЗначениеЗаполнено(Таблица) + И Действия <> Неопределено + И ПараметрыРасшифровки.ДоступенОтчетПраваРолей Тогда + + Отбор = Новый Структура("ОбъектМетаданных", Таблица); + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, + "ПраваРолейИПрофилейНаОбъектМетаданных", Расшифровка, Отбор, Действия, + ?(ПараметрыРасшифровки.ИмяПоляРасшифровки = "Отчет", + НСтр("ru = 'Права ролей и профилей на отчет'"), + НСтр("ru = 'Права ролей и профилей на таблицу'"))); + Отбор = Новый Структура("ОбъектМетаданных, Профиль", Таблица); + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, + "ПодробныеПраваРолейНаОбъектМетаданных", Расшифровка, Отбор, Действия, + ?(ПараметрыРасшифровки.ИмяПоляРасшифровки = "Отчет", + НСтр("ru = 'Подробные права профилей на отчет'"), + НСтр("ru = 'Подробные права профилей на таблицу'"))); + Отбор = Новый Структура("ОбъектМетаданных", Таблица); + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, + "ПодробныеПраваРолейНаОбъектМетаданных", Расшифровка, Отбор, Действия, + ?(ПараметрыРасшифровки.ИмяПоляРасшифровки = "Отчет", + НСтр("ru = 'Подробные права ролей на отчет'"), + НСтр("ru = 'Подробные права ролей на таблицу'"))); + КонецЕсли; - ПараметрыОтчета = Новый Структура; - ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); - ПараметрыОтчета.Вставить("Расшифровка", Расшифровка); + НавигационнаяСсылка = ПараметрыРасшифровки.СписокПолей.Получить("ОбъектМетаданныхНавигационнаяСсылка"); + Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "ОбъектМетаданныхЗаголовкаОтчета" + Или ПараметрыРасшифровки.ИмяПоляРасшифровки = "ОтчетЗаголовок" Тогда + Если Не ЗначениеЗаполнено(НавигационнаяСсылка) Тогда + Возврат Действия; + КонецЕсли; + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.НавигационнаяСсылка = НавигационнаяСсылка; + Действия.Вставить(0, Параметры, ?(ПараметрыРасшифровки.ИмяПоляРасшифровки = "ОтчетЗаголовок", + НСтр("ru = 'Открыть'"), НСтр("ru = 'Показать список'"))); + Возврат Действия; + КонецЕсли; + + Если ЗначениеЗаполнено(НавигационнаяСсылка) И Действия <> Неопределено Тогда + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.НавигационнаяСсылка = НавигационнаяСсылка; + Действия.Добавить(Параметры, ?(ПараметрыРасшифровки.ИмяПоляРасшифровки = "Отчет", + НСтр("ru = 'Открыть'"), НСтр("ru = 'Показать список'"))); + КонецЕсли; + + Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "Пользователь" Тогда + Пользователь = ПараметрыРасшифровки.СписокПолей.Получить("Пользователь"); + Если ЗначениеЗаполнено(Пользователь) Тогда + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.Пользователь = Пользователь; + Действия.Добавить(Параметры, НСтр("ru = 'Перейти к настройке прав пользователя'")); + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.Значение = Пользователь; + Действия.Добавить(Параметры, НСтр("ru = 'Открыть'")); + КонецЕсли; + КонецЕсли; Отбор = Новый Структура; Для Каждого ЭлементОтбора Из ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл @@ -741,8 +851,14 @@ КлючВарианта = "ПраваПользователяНаТаблицу"; + Если КлючВарианта = ТекущийВариант Тогда + Возврат Действия; + КонецЕсли; + Если ПараметрыРасшифровки.СписокПолей["Пользователь"] <> Неопределено Тогда Отбор.Вставить("Пользователь", ПараметрыРасшифровки.СписокПолей["Пользователь"]); + Иначе + КлючВарианта = "ПраваПользователейНаТаблицу"; КонецЕсли; Если ПараметрыРасшифровки.СписокПолей["ОбъектМетаданных"] <> Неопределено Тогда @@ -753,14 +869,14 @@ КонецЕсли; Если КлючВарианта = ТекущийВариант Тогда - Возврат; + Возврат Действия; КонецЕсли; Если КлючВарианта <> "ПраваПользователяНаТаблицыОтчета" Тогда ЗначениеПрава = ПараметрыРасшифровки.СписокПолей[ПараметрыРасшифровки.ИмяПоляРасшифровки]; Если ТипЗнч(ЗначениеПрава) = Тип("Число") И ЗначениеПрава = 0 Или ТипЗнч(ЗначениеПрава) = Тип("Булево") И Не ЗначениеПрава Тогда - Возврат; + Возврат Действия; КонецЕсли; КонецЕсли; @@ -792,7 +908,7 @@ КонецЕсли; Если ТекущийВариант = "АнализПравДоступа" - И ГруппировкаПоОтчетамВключена(ФормаОтчета.Отчет.КомпоновщикНастроек) Тогда + И ПараметрыРасшифровки.СписокПолей["ВыводитьГруппировку"] = 1 Тогда КлючВарианта = "ПраваПользователяНаТаблицыОтчетов"; КонецЕсли; @@ -801,46 +917,37 @@ Если ТекущийВариант = "ПраваПользователяНаТаблицыОтчета" Или ТекущийВариант = "ПраваПользователейНаТаблицыОтчета" Тогда - Возврат; + Возврат Действия; КонецЕсли; КлючВарианта = "ПраваПользователейНаТаблицыОтчета"; Отбор.Вставить("Отчет", ПараметрыРасшифровки.СписокПолей["Отчет"]); Иначе - ЗначениеРасшифровки = ПараметрыРасшифровки.СписокПолей[ПараметрыРасшифровки.ИмяПоляРасшифровки]; - Если ЗначениеЗаполнено(ЗначениеРасшифровки) Тогда - Пользователь = ПараметрыРасшифровки.СписокПолей["Пользователь"]; + Если ЗначениеЗаполнено(ЗначениеРасшифровки) + И ТипЗнч(ЗначениеРасшифровки) <> Тип("ПеречислениеСсылка.ДополнительныеЗначенияДоступа") Тогда - Если Пользователь = Неопределено - И Отбор.Свойство("Пользователь") - И ТипЗнч(Отбор.Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда - - Пользователь = Отбор.Пользователь; - КонецЕсли; - - Если ЗначениеЗаполнено(Пользователь) - И ТипЗнч(ЗначениеРасшифровки) = Тип("СправочникСсылка.ПрофилиГруппДоступа") Тогда - - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); - Если ПараметрыРаботыКлиента.УпрощенныйИнтерфейсНастройкиПравДоступа Тогда - ИмяФормы = "ОбщаяФорма.ПраваДоступаУпрощенно"; - Иначе - ИмяФормы = "ОбщаяФорма.ПраваДоступа"; - КонецЕсли; - - Форма = ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", Новый Структура("Ключ", Пользователь)); - ОткрытьФорму(ИмяФормы, Новый Структура("Пользователь", Пользователь), Форма, , Форма.Окно); - Иначе - ПоказатьЗначение(Неопределено, ЗначениеРасшифровки); + Если ПараметрыРасшифровки.ИмяПоляРасшифровки <> "Пользователь" Тогда + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.Значение = ЗначениеРасшифровки; + Действия.Вставить(0, Параметры, НСтр("ru = 'Открыть'")); КонецЕсли; КонецЕсли; - Возврат; + Возврат Действия; КонецЕсли; + ДобавитьОткрытиеВариантаОтчетаАнализПравДоступа(ФормаОтчета, КлючВарианта, Расшифровка, Отбор, Действия); + + Возврат Действия; + +КонецФункции + +Процедура ДобавитьОткрытиеВариантаОтчетаАнализПравДоступа(ФормаОтчета, КлючВарианта, Расшифровка, Отбор, + Действия, ПредставлениеДействия = Неопределено) + Если Отбор.Свойство("ОбъектМетаданных") И Не ЗначениеЗаполнено(Отбор.ОбъектМетаданных) И ( КлючВарианта = "ПраваПользователейНаТаблицу" @@ -855,19 +962,32 @@ УточнитьКлючНазначенияИспользования(КлючНазначенияИспользования, Отбор, "ОбъектМетаданных"); СократитьКлючНазначенияИспользования(КлючНазначенияИспользования); + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Расшифровка", Расшифровка); ПараметрыОтчета.Вставить("Отбор", Отбор); ПараметрыОтчета.Вставить("КлючВарианта", КлючВарианта); ПараметрыОтчета.Вставить("КлючНазначенияИспользования", КлючНазначенияИспользования); - ОткрытьФорму(ФормаОтчета.НастройкиОтчета.ПолноеИмя + ".Форма", ПараметрыОтчета, ФормаОтчета); + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.ПолноеИмяФормы = "Отчет.АнализПравДоступа.Форма"; + Параметры.ПараметрыФормы = ПараметрыОтчета; + Параметры.ВладелецФормы = ФормаОтчета; + + Если ПредставлениеДействия = Неопределено Тогда + Действия.Вставить(0, Параметры, + ПредставлениеВариантаОтчетаАнализПравДоступа(КлючВарианта)); + Иначе + Действия.Добавить(Параметры, ?(ЗначениеЗаполнено(ПредставлениеДействия), ПредставлениеДействия, + ПредставлениеВариантаОтчетаАнализПравДоступа(КлючВарианта))); + КонецЕсли; КонецПроцедуры -// Для процедуры ПриОбработкеРасшифровки. -Процедура ПриОбработкеРасшифровкиОтчетаПраваРолей(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; +// Для процедуры ПриОбработкеРасшифровкиОтчета. +Функция ДействияРасшифровкиОтчетаПраваРолей(ФормаОтчета, Элемент, Расшифровка) + Действия = Новый СписокЗначений; ПараметрыРасшифровки = УправлениеДоступомСлужебныйВызовСервера.ПараметрыРасшифровкиОтчетаАнализПравДоступа( ФормаОтчета.ОтчетДанныеРасшифровки, Расшифровка); @@ -875,19 +995,31 @@ Профиль = ПараметрыРасшифровки.СписокПолей["Профиль"]; Если ТипЗнч(Профиль) = Тип("СправочникСсылка.ПрофилиГруппДоступа") И ЗначениеЗаполнено(Профиль) Тогда - ПоказатьЗначение(, Профиль); + + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.Значение = Профиль; + Действия.Вставить(0, Параметры, НСтр("ru = 'Открыть'")); КонецЕсли; - Возврат; КонецЕсли; ТекущийВариант = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта; - Если ТекущийВариант = "ПодробныеПраваРолиНаОбъектМетаданных" Тогда - Возврат; + + НавигационнаяСсылка = ПараметрыРасшифровки.СписокПолей.Получить("ОбъектМетаданныхНавигационнаяСсылка"); + Если ЗначениеЗаполнено(НавигационнаяСсылка) Тогда + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.НавигационнаяСсылка = НавигационнаяСсылка; + Если СтрНайти(НавигационнаяСсылка, "/command/") > 0 Тогда + Действия.Добавить(Параметры, НСтр("ru = 'Выполнить команду'")); + ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылка, "e1cib/list/") Тогда + Действия.Добавить(Параметры, НСтр("ru = 'Показать список'")); + ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылка, "e1cib/app/") Тогда + Действия.Добавить(Параметры, НСтр("ru = 'Открыть'")); + КонецЕсли; КонецЕсли; - ПараметрыОтчета = Новый Структура; - ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); - ПараметрыОтчета.Вставить("Расшифровка", Расшифровка); + Если ТекущийВариант = "ПодробныеПраваРолейНаОбъектМетаданных" Тогда + Возврат Действия; + КонецЕсли; Отбор = Новый Структура; УстановитьЗначениеПараметра(Отбор, "ФорматИмени", ФормаОтчета); @@ -899,18 +1031,18 @@ Свойства = Новый Структура("ОтчетТабличныйДокумент"); ЗаполнитьЗначенияСвойств(Свойства, ФормаОтчета); Если ТипЗнч(Свойства.ОтчетТабличныйДокумент) <> Тип("ТабличныйДокумент") Тогда - Возврат; + Возврат Действия; КонецЕсли; ОбластьОбъекта = Свойства.ОтчетТабличныйДокумент.Область(Элемент.ТекущаяОбласть.Верх, 2); Если ТипЗнч(ОбластьОбъекта.Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда - Возврат; + Возврат Действия; КонецЕсли; ПараметрыРасшифровкиОбъекта = УправлениеДоступомСлужебныйВызовСервера.ПараметрыРасшифровкиОтчетаАнализПравДоступа( ФормаОтчета.ОтчетДанныеРасшифровки, ОбластьОбъекта.Расшифровка); Если ЗначениеЗаполнено(ПараметрыРасшифровкиОбъекта.СписокПолей["ПолноеИмяОбъекта"]) Тогда Отбор.Вставить("ОбъектМетаданных", ПараметрыРасшифровкиОбъекта.СписокПолей["ПолноеИмяОбъекта"]); Иначе - Возврат; + Возврат Действия; КонецЕсли; КонецЕсли; КонецЕсли; @@ -918,90 +1050,102 @@ Если ТекущийВариант = "ПраваРолей" И ПараметрыРасшифровки.ИмяПоляРасшифровки = "УровеньДоступа" Тогда - КлючВарианта = "ПодробныеПраваРолиНаОбъектМетаданных"; + КлючВарианта = "ПодробныеПраваРолейНаОбъектМетаданных"; Если ЗначениеЗаполнено(ПараметрыРасшифровки.СписокПолей["ИмяРоли"]) Тогда Отбор.Вставить("Роль", ПараметрыРасшифровки.СписокПолей["ИмяРоли"]); ИначеЕсли ТипЗнч(ПараметрыРасшифровкиОбъекта) = Тип("Структура") Тогда НомерСтрокиЭлемента = ПараметрыРасшифровкиОбъекта.СписокПолей["НомерСтрокиЭлемента"]; Если Не ЗначениеЗаполнено(НомерСтрокиЭлемента) Тогда - Возврат; + Возврат Действия; КонецЕсли; ОбластьРоли = Свойства.ОтчетТабличныйДокумент.Область(Элемент.ТекущаяОбласть.Верх - НомерСтрокиЭлемента, Элемент.ТекущаяОбласть.Лево); Если ТипЗнч(ОбластьРоли.Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда - Возврат; + Возврат Действия; КонецЕсли; ПараметрыРасшифровкиРоли = УправлениеДоступомСлужебныйВызовСервера.ПараметрыРасшифровкиОтчетаАнализПравДоступа( ФормаОтчета.ОтчетДанныеРасшифровки, ОбластьРоли.Расшифровка); Если ЗначениеЗаполнено(ПараметрыРасшифровкиРоли.СписокПолей["ИмяРоли"]) Тогда Отбор.Вставить("Роль", ПараметрыРасшифровкиРоли.СписокПолей["ИмяРоли"]); Иначе - Возврат; + Возврат Действия; КонецЕсли; КонецЕсли; ИначеЕсли ТекущийВариант = "ПраваРолей" И ПараметрыРасшифровки.ИмяПоляРасшифровки = "ИмяРоли" Тогда - КлючВарианта = "ПраваРолиНаОбъектыМетаданных"; + КлючВарианта = "ПраваРолиИПрофилейНаОбъектыМетаданных"; - ИмяРоли = ПараметрыРасшифровки.СписокПолей["ИмяРоли"]; - Если Не ЗначениеЗаполнено(ИмяРоли) Тогда - Возврат; - КонецЕсли; - Отбор.Вставить("Роль", ИмяРоли); УстановитьЗначениеПараметра(Отбор, "ОбъектМетаданных", ФормаОтчета); УстановитьЗначениеПараметра(Отбор, "ПраваНаРеквизиты", ФормаОтчета, Истина); УстановитьЗначениеПараметра(Отбор, "ПоказыватьПраваНеинтерфейсныхПодсистем", ФормаОтчета, Истина); УстановитьЗначениеПараметра(Отбор, "НеПредупреждатьОБольшомРазмереОтчета", ФормаОтчета, Истина); + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, + КлючВарианта, Расшифровка, Отбор, Действия); + + ИмяРоли = ПараметрыРасшифровки.СписокПолей["ИмяРоли"]; + Если Не ЗначениеЗаполнено(ИмяРоли) Тогда + Возврат Действия; + КонецЕсли; + Отбор.Вставить("Роль", ИмяРоли); + ИначеЕсли ТекущийВариант = "ПраваРолей" И ПараметрыРасшифровки.ИмяПоляРасшифровки = "Уровень" Тогда - КлючВарианта = "ПраваРолейНаОбъектМетаданных"; + КлючВарианта = "ПраваРолейИПрофилейНаОбъектМетаданных"; ПолноеИмяОбъекта = ПараметрыРасшифровки.СписокПолей["ПолноеИмяОбъекта"]; Если Не ЗначениеЗаполнено(ПолноеИмяОбъекта) Тогда - Возврат; + Возврат Действия; КонецЕсли; Отбор.Вставить("ОбъектМетаданных", ПолноеИмяОбъекта); + ОтборБезРоли = Новый Структура(Новый ФиксированнаяСтруктура(Отбор)); УстановитьЗначениеПараметра(Отбор, "Роль", ФормаОтчета); - ИначеЕсли ТекущийВариант = "ПраваРолейНаОбъектМетаданных" - И ( ПараметрыРасшифровки.ИмяПоляРасшифровки = "ЕстьОграничение" + ОтборБезРоли.Вставить("Профиль"); + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, + "ПодробныеПраваРолейНаОбъектМетаданных", Расшифровка, ОтборБезРоли, Действия); + + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, + "ПодробныеПраваРолейНаОбъектМетаданных", Расшифровка, Отбор, Действия); + + ИначеЕсли ТекущийВариант = "ПраваРолейИПрофилейНаОбъектМетаданных" + И ( ПараметрыРасшифровки.ИмяПоляРасшифровки = "Профиль" Или ПараметрыРасшифровки.ИмяПоляРасшифровки = "ИмяРоли3") Тогда - КлючВарианта = "ПодробныеПраваРолиНаОбъектМетаданных"; + КлючВарианта = "ПодробныеПраваРолейНаОбъектМетаданных"; Отбор.Вставить("ОбъектМетаданных", ЗначениеНачальногоОтбора(ФормаОтчета, "ОбъектМетаданных")); Если Не ЗначениеЗаполнено(Отбор.ОбъектМетаданных) Тогда - Возврат; + Возврат Действия; КонецЕсли; Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "ИмяРоли3" Тогда Отбор.Вставить("Роль", ПараметрыРасшифровки.СписокПолей["ИмяРоли3"]); Иначе Отбор.Вставить("Профиль", ПараметрыРасшифровки.СписокПолей["Профиль3"]); Если Не ЗначениеЗаполнено(Отбор.Профиль) Тогда - Возврат; + Возврат Действия; КонецЕсли; КонецЕсли; - ИначеЕсли ТекущийВариант = "ПраваРолиНаОбъектыМетаданных" Тогда + ИначеЕсли ТекущийВариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда - КлючВарианта = "ПодробныеПраваРолиНаОбъектМетаданных"; + КлючВарианта = "ПодробныеПраваРолейНаОбъектМетаданных"; Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "Уровень" Тогда Отбор.Вставить("ОбъектМетаданных", ПараметрыРасшифровки.СписокПолей["ПолноеИмяОбъекта"]); КонецЕсли; Если Не Отбор.Свойство("ОбъектМетаданных") Или Не ЗначениеЗаполнено(Отбор.ОбъектМетаданных) Тогда - Возврат; + Возврат Действия; КонецЕсли; Если ПараметрыРасшифровки.ИмяПоляРасшифровки = "УровеньДоступа" Тогда Отбор.Вставить("Профиль", ПараметрыРасшифровки.СписокПолей["Профиль4"]); Если Не ЗначениеЗаполнено(Отбор.Профиль) Тогда - Возврат; + Возврат Действия; КонецЕсли; Иначе НачальнаяРоль = ЗначениеНачальногоОтбора(ФормаОтчета, "Роль"); @@ -1012,30 +1156,58 @@ КонецЕсли; КонецЕсли; Иначе - Возврат; + Возврат Действия; КонецЕсли; + ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, КлючВарианта, Расшифровка, Отбор, Действия); + + Возврат Действия; + +КонецФункции + +Процедура ДобавитьОткрытиеВариантаОтчетаПраваРолей(ФормаОтчета, КлючВарианта, Расшифровка, Отбор, + Действия, ПредставлениеДействия = Неопределено) + + СоставОтбора = Новый Структура("Роль, Профиль", Ложь, Ложь); КлючНазначенияИспользования = КлючВарианта; - УточнитьКлючНазначенияИспользования(КлючНазначенияИспользования, Отбор, "Роль"); - УточнитьКлючНазначенияИспользования(КлючНазначенияИспользования, Отбор, "Профиль"); + УточнитьКлючНазначенияИспользования(КлючНазначенияИспользования, Отбор, "Роль", СоставОтбора.Роль); + УточнитьКлючНазначенияИспользования(КлючНазначенияИспользования, Отбор, "Профиль", СоставОтбора.Профиль); УточнитьКлючНазначенияИспользования(КлючНазначенияИспользования, Отбор, "ОбъектМетаданных"); СократитьКлючНазначенияИспользования(КлючНазначенияИспользования); - - ФиксированныйОтбор = Новый Структура; - Если Отбор.Свойство("ОбъектМетаданных") - И ( КлючВарианта = "ПодробныеПраваРолиНаОбъектМетаданных" - Или КлючВарианта = "ПраваРолейНаОбъектМетаданных") Тогда - - ФиксированныйОтбор.Вставить("ОбъектМетаданных", Отбор.ОбъектМетаданных); - Отбор.Удалить("ОбъектМетаданных"); + Если СоставОтбора.Профиль И Отбор.Профиль = Неопределено Тогда + СоставОтбора.Профиль = Неопределено; КонецЕсли; - ФиксированныйОтбор.Вставить("НачальныйОтбор", Отбор); + НачальныйОтбор = Новый Структура(Новый ФиксированнаяСтруктура(Отбор)); + ФиксированныйОтбор = Новый Структура; + Если НачальныйОтбор.Свойство("ОбъектМетаданных") + И ( КлючВарианта = "ПодробныеПраваРолейНаОбъектМетаданных" + Или КлючВарианта = "ПраваРолейИПрофилейНаОбъектМетаданных") Тогда + + ФиксированныйОтбор.Вставить("ОбъектМетаданных", НачальныйОтбор.ОбъектМетаданных); + НачальныйОтбор.Удалить("ОбъектМетаданных"); + КонецЕсли; + ФиксированныйОтбор.Вставить("НачальныйОтбор", НачальныйОтбор); + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); + ПараметрыОтчета.Вставить("Расшифровка", Расшифровка); ПараметрыОтчета.Вставить("Отбор", ФиксированныйОтбор); ПараметрыОтчета.Вставить("КлючВарианта", КлючВарианта); ПараметрыОтчета.Вставить("КлючНазначенияИспользования", КлючНазначенияИспользования); - ОткрытьФорму(ФормаОтчета.НастройкиОтчета.ПолноеИмя + ".Форма", ПараметрыОтчета, ФормаОтчета); + Параметры = НовыеПараметрыВыполненияДействия(); + Параметры.ПолноеИмяФормы = "Отчет.ПраваРолей.Форма"; + Параметры.ПараметрыФормы = ПараметрыОтчета; + Параметры.ВладелецФормы = ФормаОтчета; + + Если ПредставлениеДействия = Неопределено Тогда + Действия.Вставить(0, Параметры, + ПредставлениеВариантаОтчетаПраваРолей(КлючВарианта, СоставОтбора)); + Иначе + Действия.Добавить(Параметры, ?(ЗначениеЗаполнено(ПредставлениеДействия), ПредставлениеДействия, + ПредставлениеВариантаОтчетаПраваРолей(КлючВарианта, СоставОтбора))); + КонецЕсли; КонецПроцедуры @@ -1086,12 +1258,13 @@ // Для процедур ПриОбработкеРасшифровкиОтчетаАнализПравДоступа и // ПриОбработкеРасшифровкиОтчетаПраваРолей. // -Процедура УточнитьКлючНазначенияИспользования(Ключ, Отбор, ИмяСвойства) +Процедура УточнитьКлючНазначенияИспользования(Ключ, Отбор, ИмяСвойства, ЕстьСвойство = Ложь) Если Не Отбор.Свойство(ИмяСвойства) Тогда Возврат; КонецЕсли; + ЕстьСвойство = Истина; Значение = Отбор[ИмяСвойства]; Если Не ЗначениеЗаполнено(Значение) Тогда Возврат; @@ -1128,48 +1301,6 @@ КонецПроцедуры -// Для процедуры ПриОбработкеРасшифровкиОтчетаАнализПравДоступа. -Функция ГруппировкаПоОтчетамВключена(КомпоновщикНастроек) - - Результат = Ложь; - - Элемент = НайтиЭлементГруппировкиПоИмени(КомпоновщикНастроек.Настройки.Структура, "ГруппировкаПоОтчетам"); - Если Элемент <> Неопределено Тогда - Настройка = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Элемент.ИдентификаторПользовательскойНастройки); - Если Настройка <> Неопределено Тогда - Результат = Настройка.Использование; - КонецЕсли; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Для функции ГруппировкаПоОтчетамВключена -Функция НайтиЭлементГруппировкиПоИмени(КоллекцияЭлементов, Имя) - - Результат = Неопределено; - - Для Каждого Элемент Из КоллекцияЭлементов Цикл - Если (ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") - Или ТипЗнч(Элемент) = Тип("ГруппировкаТаблицыКомпоновкиДанных")) - И Элемент.Имя = Имя Тогда - Результат = Элемент; - ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда - Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Строки, Имя); - Если Результат = Неопределено Тогда - Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Колонки, Имя); - КонецЕсли; - КонецЕсли; - Если Результат <> Неопределено Тогда - Возврат Результат; - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Для процедуры ПриОбработкеРасшифровкиОтчетаПраваРолей. Процедура УстановитьЗначениеПараметра(Отбор, ИмяПараметра, ФормаОтчета, ИспользуетсяВсегда = Ложь) @@ -1180,14 +1311,128 @@ КонецПроцедуры - -// Для процедуры ПриНачалеВыбораЗначений -Процедура ПриНачалеВыбораЗначенийОтчетаАнализПравДоступа(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) +Функция НовыеПараметрыВыполненияДействия() - Если УсловияВыбора.ИмяПоля <> "ОбъектМетаданных" Тогда - Возврат; + Результат = Новый Структура; + Результат.Вставить("НавигационнаяСсылка", ""); + Результат.Вставить("Значение"); + Результат.Вставить("Пользователь"); + Результат.Вставить("ПолноеИмяФормы", ""); + Результат.Вставить("ПараметрыФормы", Новый Структура); + Результат.Вставить("ВладелецФормы"); + + Возврат Результат; + +КонецФункции + +Процедура ОткрытьПраваПользователя(Пользователь) + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + Если ПараметрыРаботыКлиента.УпрощенныйИнтерфейсНастройкиПравДоступа Тогда + ИмяФормы = "ОбщаяФорма.ПраваДоступаУпрощенно"; + Иначе + ИмяФормы = "ОбщаяФорма.ПраваДоступа"; КонецЕсли; + Форма = ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", Новый Структура("Ключ", Пользователь)); + ОткрытьФорму(ИмяФормы, Новый Структура("Пользователь", Пользователь), Форма, , Форма.Окно); + +КонецПроцедуры + +Функция ПредставлениеВариантаОтчетаАнализПравДоступа(КлючВарианта) + + Если КлючВарианта = "АнализПравДоступа" Тогда + Возврат НСтр("ru = 'Анализ прав доступа'"); + + ИначеЕсли КлючВарианта = "ПраваПользователейНаТаблицы" Тогда + Возврат НСтр("ru = 'Права пользователей на таблицы'"); + + ИначеЕсли КлючВарианта = "ПраваПользователяНаТаблицы" Тогда + Возврат НСтр("ru = 'Права пользователя на таблицы'"); + + ИначеЕсли КлючВарианта = "ПраваПользователейНаТаблицу" Тогда + Возврат НСтр("ru = 'Права пользователей на таблицу'"); + + ИначеЕсли КлючВарианта = "ПраваПользователяНаТаблицу" Тогда + Возврат НСтр("ru = 'Права пользователя на таблицу'"); + + ИначеЕсли КлючВарианта = "ПраваПользователейНаТаблицыОтчета" Тогда + Возврат НСтр("ru = 'Права пользователей на таблицы отчета'"); + + ИначеЕсли КлючВарианта = "ПраваПользователяНаТаблицыОтчета" Тогда + Возврат НСтр("ru = 'Права пользователя на таблицы отчета'"); + + ИначеЕсли КлючВарианта = "ПраваПользователяНаТаблицыОтчетов" Тогда + Возврат НСтр("ru = 'Права пользователя на таблицы отчетов'"); + + ИначеЕсли КлючВарианта = "ПраваПользователейНаОбъект" Тогда + Возврат НСтр("ru = 'Права пользователей на объект'"); + + ИначеЕсли КлючВарианта = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда + Возврат НСтр("ru = 'Права пользователей в разрезе разрешенного значения'"); + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестное имя варианта отчета ""%1"".'"), КлючВарианта); + + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + +КонецФункции + +Функция ПредставлениеВариантаОтчетаПраваРолей(КлючВарианта, СоставОтбора) + + Если КлючВарианта = "ПраваРолей" Тогда + Возврат НСтр("ru = 'Права ролей'"); + + ИначеЕсли КлючВарианта = "ПодробныеПраваРолейНаОбъектМетаданных" Тогда + Если СоставОтбора.Профиль = Истина Тогда + Возврат НСтр("ru = 'Подробные права профиля на объект метаданных'"); + ИначеЕсли СоставОтбора.Профиль = Неопределено Тогда + Возврат НСтр("ru = 'Подробные права профилей на объект метаданных'"); + ИначеЕсли СоставОтбора.Роль Тогда + Возврат НСтр("ru = 'Подробные права роли на объект метаданных'"); + Иначе + Возврат НСтр("ru = 'Подробные права ролей на объект метаданных'"); + КонецЕсли; + + ИначеЕсли КлючВарианта = "ПраваРолейИПрофилейНаОбъектМетаданных" Тогда + Возврат НСтр("ru = 'Права ролей и профилей на объект метаданных'"); + + ИначеЕсли КлючВарианта = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда + Если СоставОтбора.Роль Тогда + Возврат НСтр("ru = 'Права роли и профилей на объекты метаданных'"); + Иначе + Возврат НСтр("ru = 'Права профилей на объекты метаданных'"); + КонецЕсли; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неизвестное имя варианта отчета ""%1"".'"), КлючВарианта); + + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + +КонецФункции + + +// Для процедуры ПриНачалеВыбораЗначений. +Процедура ПриНачалеВыбораЗначенийОтчетаАнализПравДоступа(ФормаОтчета, + УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) + + Если УсловияВыбора.ИмяПоля = "ОбъектМетаданных" Тогда + ПриНачалеВыбораОбъектаМетаданныхОтчетаАнализПравДоступа(ФормаОтчета, + УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка); + + ИначеЕсли УсловияВыбора.ИмяПоля = "ЭлементДанных" Тогда + ПриНачалеВыбораЭлементаДанныхОтчетаАнализПравДоступа(ФормаОтчета, + УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +// Для процедуры ПриНачалеВыбораЗначенийОтчетаАнализПравДоступа. +Процедура ПриНачалеВыбораОбъектаМетаданныхОтчетаАнализПравДоступа(ФормаОтчета, + УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; Коллекции = Новый СписокЗначений; @@ -1223,7 +1468,74 @@ КонецПроцедуры -// Для процедуры ПриНачалеВыбораЗначений + +// Для процедуры ПриНачалеВыбораЗначенийОтчетаАнализПравДоступа. +Процедура ПриНачалеВыбораЭлементаДанныхОтчетаАнализПравДоступа(ФормаОтчета, + УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Контекст = Новый Структура; + Контекст.Вставить("ОповещениеОЗакрытии", ОповещениеОЗакрытии); + Контекст.Вставить("НачальноеЗначение", ?(ЗначениеЗаполнено(УсловияВыбора.Отмеченные), + УсловияВыбора.Отмеченные[0].Значение, Неопределено)); + + Список = УправлениеДоступомСлужебныйВызовСервера.СписокТиповДляВыбора( + УсловияВыбора.ДоступныеТипы); + + Оповещение = Новый ОписаниеОповещения( + "ПриНачалеВыбораЭлементаДанныхОтчетаАнализПравДоступаПослеВыбораТипа", ЭтотОбъект, Контекст); + + НачальныйЭлемент = ?(ЗначениеЗаполнено(Контекст.НачальноеЗначение), + Список.НайтиПоЗначению(ТипЗнч(Контекст.НачальноеЗначение)), Неопределено); + + Заголовок = НСтр("ru = 'Выбор типа данных'"); + + Список.ПоказатьВыборЭлемента(Оповещение, Заголовок, НачальныйЭлемент); + +КонецПроцедуры + +// Для процедуры ПриНачалеВыбораЗначенийОтчетаАнализПравДоступа. +Процедура ПриНачалеВыбораЭлементаДанныхОтчетаАнализПравДоступаПослеВыбораТипа(Результат, Контекст) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ПолноеИмя = УправлениеДоступомСлужебныйВызовСервера.ПолноеИмяТаблицыСсылочногоТипа( + Результат.Значение); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекущаяСтрока", Контекст.НачальноеЗначение); + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина); + + Оповещение = Новый ОписаниеОповещения( + "ПриНачалеВыбораЭлементаДанныхОтчетаАнализПравДоступаПослеВыбораЗначения", ЭтотОбъект, Контекст); + + Если ЗначениеЗаполнено(ПолноеИмя) Тогда + ОткрытьФорму(ПолноеИмя + ".ФормаВыбора", ПараметрыФормы,,,,,Оповещение); + Иначе + ПараметрыФормы.Вставить("ТипЭлементаДанных", Результат.Значение); + ОткрытьФорму("Отчет.АнализПравДоступа.Форма.ВыборСтрокиРегистра", ПараметрыФормы,,,,,Оповещение); + КонецЕсли; + + +КонецПроцедуры + +// Для процедуры ПриНачалеВыбораЗначенийОтчетаАнализПравДоступа. +Процедура ПриНачалеВыбораЭлементаДанныхОтчетаАнализПравДоступаПослеВыбораЗначения(Результат, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(Результат) Тогда + Возврат; + КонецЕсли; + + ВыбранныеЗначения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Результат); + ВыполнитьОбработкуОповещения(Контекст.ОповещениеОЗакрытии, ВыбранныеЗначения); + +КонецПроцедуры + + +// Для процедуры ПриНачалеВыбораЗначений. Процедура ПриНачалеВыбораЗначенийОтчетаПраваРолей(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) Если УсловияВыбора.ИмяПоля <> "Роль" @@ -1252,7 +1564,7 @@ ПараметрыПодбора.СпособГруппировкиОбъектов = "ПоВидам,ПоРазделам"; ПараметрыПодбора.Заголовок = НСтр("ru = 'Подбор объектов метаданных'"); ПараметрыПодбора.ВыбиратьКоллекцииКогдаВыбраныВсеОбъекты = Истина; - ДобавитьКоллекцииОбъектовМетаданныхСПравами(Коллекции); + УправлениеДоступомСлужебныйКлиентСервер.ДобавитьКоллекцииОбъектовМетаданныхСПравами(Коллекции); КонецЕсли; Контекст = Новый Структура; @@ -1295,36 +1607,4 @@ КонецПроцедуры -// Для процедуры ПриНачалеВыбораЗначений. -Процедура ДобавитьКоллекцииОбъектовМетаданныхСПравами(Коллекции) - - Коллекции.Добавить("Подсистемы"); - Коллекции.Добавить("ПараметрыСеанса"); - Коллекции.Добавить("ОбщиеРеквизиты"); - Коллекции.Добавить("ПланыОбмена"); - Коллекции.Добавить("КритерииОтбора"); - Коллекции.Добавить("ОбщиеФормы"); - Коллекции.Добавить("ОбщиеКоманды"); - Коллекции.Добавить("WebСервисы"); - Коллекции.Добавить("HTTPСервисы"); - Коллекции.Добавить("Константы"); - Коллекции.Добавить("Справочники"); - Коллекции.Добавить("Документы"); - Коллекции.Добавить("ЖурналыДокументов"); - Коллекции.Добавить("Перечисления"); - Коллекции.Добавить("Отчеты"); - Коллекции.Добавить("Обработки"); - Коллекции.Добавить("ПланыВидовХарактеристик"); - Коллекции.Добавить("ПланыСчетов"); - Коллекции.Добавить("ПланыВидовРасчета"); - Коллекции.Добавить("РегистрыСведений"); - Коллекции.Добавить("РегистрыНакопления"); - Коллекции.Добавить("РегистрыБухгалтерии"); - Коллекции.Добавить("РегистрыРасчета"); - Коллекции.Добавить("БизнесПроцессы"); - Коллекции.Добавить("Задачи"); - Коллекции.Добавить("ВнешниеИсточникиДанных"); - -КонецПроцедуры - -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index 65d66151d..15f244ec8 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -79,8 +79,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. +#Область ОбслуживаниеТаблицВидыДоступаИЗначенияДоступаВФормахРедактирования // Только для внутреннего использования. Процедура ЗаполнитьВсеРазрешеныПредставление(Форма, ОписаниеВидаДоступа, ДобавитьКоличествоЗначений = Истина) Экспорт @@ -561,6 +560,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -679,4 +680,36 @@ КонецФункции -#КонецОбласти +// Только для внутреннего использования. +Процедура ДобавитьКоллекцииОбъектовМетаданныхСПравами(Коллекции) Экспорт + + Коллекции.Добавить("Подсистемы", НСтр("ru = 'Подсистемы'")); + Коллекции.Добавить("ПараметрыСеанса", НСтр("ru = 'Параметры сеанса'")); + Коллекции.Добавить("ОбщиеРеквизиты", НСтр("ru = 'Общие реквизиты'")); + Коллекции.Добавить("ПланыОбмена", НСтр("ru = 'Планы обмена'")); + Коллекции.Добавить("КритерииОтбора", НСтр("ru = 'Критерии отбора'")); + Коллекции.Добавить("ОбщиеФормы", НСтр("ru = 'Общие формы'")); + Коллекции.Добавить("ОбщиеКоманды", НСтр("ru = 'Общие команды'")); + Коллекции.Добавить("WebСервисы", НСтр("ru = 'Web-сервисы'")); + Коллекции.Добавить("HTTPСервисы", НСтр("ru = 'HTTP-сервисы'")); + Коллекции.Добавить("Константы", НСтр("ru = 'Константы'")); + Коллекции.Добавить("Справочники", НСтр("ru = 'Справочники'")); + Коллекции.Добавить("Документы", НСтр("ru = 'Документы'")); + Коллекции.Добавить("ЖурналыДокументов", НСтр("ru = 'Журналы документов'")); + Коллекции.Добавить("Перечисления", НСтр("ru = 'Перечисления'")); + Коллекции.Добавить("Отчеты", НСтр("ru = 'Отчеты'")); + Коллекции.Добавить("Обработки", НСтр("ru = 'Обработки'")); + Коллекции.Добавить("ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'")); + Коллекции.Добавить("ПланыСчетов", НСтр("ru = 'Планы счетов'")); + Коллекции.Добавить("ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'")); + Коллекции.Добавить("РегистрыСведений", НСтр("ru = 'Регистры сведений'")); + Коллекции.Добавить("РегистрыНакопления", НСтр("ru = 'Регистры накопления'")); + Коллекции.Добавить("РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'")); + Коллекции.Добавить("РегистрыРасчета", НСтр("ru = 'Регистры расчета'")); + Коллекции.Добавить("БизнесПроцессы", НСтр("ru = 'Бизнес-процессы'")); + Коллекции.Добавить("Задачи", НСтр("ru = 'Задачи'")); + Коллекции.Добавить("ВнешниеИсточникиДанных", НСтр("ru = 'Внешние источники данных'")); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 1f4b42254..9fdec45ec 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -181,38 +181,20 @@ // Только для внутреннего использования. // -// Возвращаемое значение: -// Строка +// Параметры: +// ПолноеИмя - Строка - полное имя объекта метаданных. // -Функция ОписаниеКлючаЗаписи(ТипИлиПолноеИмя) Экспорт +// Возвращаемое значение: +// Строка - список полей через запятую. +// +Функция СписокВсехПолейОграниченияДоступа(ПолноеИмя) Экспорт - ОписаниеКлюча = Новый Структура("МассивПолей, СтрокаПолей", Новый Массив, ""); + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ПолноеИмя); - Если ТипЗнч(ТипИлиПолноеИмя) = Тип("Тип") Тогда - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипИлиПолноеИмя); - Иначе - ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ТипИлиПолноеИмя); - КонецЕсли; - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); + Поля = РегистрыСведений.ПраваРолей.ВсеПоляОграниченияДоступаОбъектаМетаданных(ОбъектМетаданных, + ПолноеИмя,, Истина); - ВсеПоля = Новый Массив; - Для Каждого Колонка Из Менеджер.СоздатьНаборЗаписей().Выгрузить().Колонки Цикл - ВсеПоля.Добавить(Колонка.Имя); - КонецЦикла; - - ПустойКлючЗаписи = Менеджер.СоздатьКлючЗаписи(Новый Структура(СтрСоединить(ВсеПоля, ","))); - Для Каждого Поле Из ВсеПоля Цикл - ОдноПоле = Новый Структура(Поле, Null); - ЗаполнитьЗначенияСвойств(ОдноПоле, ПустойКлючЗаписи); - Если ОдноПоле[Поле] = Null Тогда - Продолжить; - КонецЕсли; - ОписаниеКлюча.МассивПолей.Добавить(Поле); - КонецЦикла; - - ОписаниеКлюча.СтрокаПолей = СтрСоединить(ОписаниеКлюча.МассивПолей, ","); - - Возврат ОбщегоНазначения.ФиксированныеДанные(ОписаниеКлюча); + Возврат СтрСоединить(Поля, ","); КонецФункции @@ -490,6 +472,69 @@ КонецФункции +// Только для внутреннего использования. +Функция СписокОбъектовМетаданныхСПравами() Экспорт + + Список = Новый СписокЗначений; + Коллекции = Новый СписокЗначений; + УправлениеДоступомСлужебныйКлиентСервер.ДобавитьКоллекцииОбъектовМетаданныхСПравами(Коллекции); + + Для Каждого Коллекция Из Коллекции Цикл + КоллекцияОбъектовМетаданных = Метаданные[Коллекция.Значение]; + Если КоллекцияОбъектовМетаданных.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + Список.Добавить(Коллекция.Значение, Коллекция.Представление); + ДобавитьОбъектыКоллекции(Список, КоллекцияОбъектовМетаданных, Коллекция.Значение); + КонецЦикла; + + Возврат Новый ХранилищеЗначения(Список); + +КонецФункции + +// Только для внутреннего использования. +Процедура ДобавитьОбъектыКоллекции(Список, КоллекцияОбъектовМетаданных, ИмяКоллекции) + + Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл + Список.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Представление()); + Если ИмяКоллекции = "Подсистемы" Тогда + ДобавитьОбъектыКоллекции(Список, ОбъектМетаданных.Подсистемы, ИмяКоллекции); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +Функция ТипыЭлементовДанных() Экспорт + + Тип = ПланыОбмена.ТипВсеСсылки(); + Тип = Новый ОписаниеТипов(Тип, Справочники.ТипВсеСсылки().Типы()); + Тип = Новый ОписаниеТипов(Тип, Документы.ТипВсеСсылки().Типы()); + Тип = Новый ОписаниеТипов(Тип, ПланыВидовХарактеристик.ТипВсеСсылки().Типы()); + Тип = Новый ОписаниеТипов(Тип, ПланыСчетов.ТипВсеСсылки().Типы()); + Тип = Новый ОписаниеТипов(Тип, ПланыВидовРасчета.ТипВсеСсылки().Типы()); + Тип = Новый ОписаниеТипов(Тип, ВсеТипыКлючаЗаписи(Метаданные.РегистрыСведений, "РегистрСведенийКлючЗаписи.")); + Тип = Новый ОписаниеТипов(Тип, ВсеТипыКлючаЗаписи(Метаданные.РегистрыНакопления, "РегистрНакопленияКлючЗаписи.")); + Тип = Новый ОписаниеТипов(Тип, ВсеТипыКлючаЗаписи(Метаданные.РегистрыБухгалтерии, "РегистрБухгалтерииКлючЗаписи.")); + Тип = Новый ОписаниеТипов(Тип, ВсеТипыКлючаЗаписи(Метаданные.РегистрыРасчета, "РегистрРасчетаКлючЗаписи.")); + Тип = Новый ОписаниеТипов(Тип, БизнесПроцессы.ТипВсеСсылки().Типы()); + Тип = Новый ОписаниеТипов(Тип, Задачи.ТипВсеСсылки().Типы()); + + Возврат Тип; + +КонецФункции + +Функция ВсеТипыКлючаЗаписи(МетаданныеРегистров, НачалоИмениТипа) + + Типы = Новый Массив; + Для Каждого МетаданныеРегистра Из МетаданныеРегистров Цикл + Типы.Добавить(Тип(НачалоИмениТипа + МетаданныеРегистра.Имя)); + КонецЦикла; + + Возврат Типы; + +КонецФункции + #Область УниверсальноеОграничение // Возвращаемое значение: @@ -1159,8 +1204,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции Процедура ДобавитьПустуюСсылкуТипаЗначений(ПустыеСсылкиПоТипам, ТипГруппИЗначений, ТипЗначений) @@ -1184,6 +1228,8 @@ КонецПроцедуры +#КонецОбласти + #Область УниверсальноеОграничение Функция КоличествоПодобныхЭлементовВКоллекции(Коллекция, НачалоИмени, НачальныйНомер = 1) @@ -1266,4 +1312,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index 0cc6c4046..1e2665e8c 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -15,6 +15,21 @@ РегистрНакопленияПериод = КонецМесяца(ДобавитьМесяц(ДатаСеанса, -1)); // Конец прошлого месяца. РегистрБухгалтерииПериод = КонецМесяца(ДатаСеанса); // Конец текущего месяца. + УстанавливатьМинимальныйПериод = Ложь; + МинимальныйПериодРассчитанныхИтоговРегистровНакопления = Дата(1,1,1); + МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии = Дата(1,1,1); + + КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов = + Константы.КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов.Получить(); + Если ЗначениеЗаполнено(КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов) Тогда + УстанавливатьМинимальныйПериод = Истина; + + МинимальныйПериодРассчитанныхИтоговРегистровНакопления = + НачалоМесяца(ДобавитьМесяц(ДатаСеанса, -(КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов - 1))); + МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии = + НачалоМесяца(ДобавитьМесяц(ДатаСеанса, -(КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов - 2))); + КонецЕсли; + Кэш = КэшПроверкиРазделения(); // Расчет итогов для регистров накопления. @@ -27,10 +42,24 @@ Продолжить; КонецЕсли; РегистрНакопленияМенеджер = РегистрыНакопления[РегистрМетаданные.Имя]; // РегистрНакопленияМенеджер - Если РегистрНакопленияМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() >= РегистрНакопленияПериод Тогда + МаксимальныйПериодРассчитанныхИтогов = РегистрНакопленияМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов(); + МинимальныйПериодРассчитанныхИтогов = РегистрНакопленияМенеджер.ПолучитьМинимальныйПериодРассчитанныхИтогов(); + Если МаксимальныйПериодРассчитанныхИтогов >= РегистрНакопленияПериод + И (НЕ УстанавливатьМинимальныйПериод + ИЛИ МинимальныйПериодРассчитанныхИтогов = МинимальныйПериодРассчитанныхИтоговРегистровНакопления)Тогда Продолжить; КонецЕсли; - РегистрНакопленияМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрНакопленияПериод); + Если МаксимальныйПериодРассчитанныхИтогов < РегистрНакопленияПериод + И (УстанавливатьМинимальныйПериод + И МинимальныйПериодРассчитанныхИтогов <> МинимальныйПериодРассчитанныхИтоговРегистровНакопления) Тогда + РегистрНакопленияМенеджер.УстановитьМинимальныйИМаксимальныйПериодыРассчитанныхИтогов( + МинимальныйПериодРассчитанныхИтоговРегистровНакопления, РегистрНакопленияПериод); + ИначеЕсли МаксимальныйПериодРассчитанныхИтогов < РегистрНакопленияПериод Тогда + РегистрНакопленияМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрНакопленияПериод); + ИначеЕсли УстанавливатьМинимальныйПериод + И МинимальныйПериодРассчитанныхИтогов <> МинимальныйПериодРассчитанныхИтоговРегистровНакопления Тогда + РегистрНакопленияМенеджер.УстановитьМинимальныйПериодРассчитанныхИтогов(МинимальныйПериодРассчитанныхИтоговРегистровНакопления); + КонецЕсли; Если Не РегистрНакопленияМенеджер.ПолучитьИспользованиеИтогов() Или Не РегистрНакопленияМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда Продолжить; @@ -44,10 +73,24 @@ Продолжить; КонецЕсли; РегистрБухгалтерииМенеджер = РегистрыБухгалтерии[РегистрМетаданные.Имя]; // РегистрБухгалтерииМенеджер - Если РегистрБухгалтерииМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() >= РегистрБухгалтерииПериод Тогда + МаксимальныйПериодРассчитанныхИтогов = РегистрБухгалтерииМенеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов(); + МинимальныйПериодРассчитанныхИтогов = РегистрБухгалтерииМенеджер.ПолучитьМинимальныйПериодРассчитанныхИтогов(); + Если МаксимальныйПериодРассчитанныхИтогов >= РегистрБухгалтерииПериод + И (НЕ УстанавливатьМинимальныйПериод + ИЛИ МинимальныйПериодРассчитанныхИтогов = МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии) Тогда Продолжить; КонецЕсли; - РегистрБухгалтерииМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрБухгалтерииПериод); + Если МаксимальныйПериодРассчитанныхИтогов < РегистрБухгалтерииПериод + И (УстанавливатьМинимальныйПериод + И МинимальныйПериодРассчитанныхИтогов <> МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии) Тогда + РегистрБухгалтерииМенеджер.УстановитьМинимальныйИМаксимальныйПериодыРассчитанныхИтогов( + МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии, РегистрБухгалтерииПериод); + ИначеЕсли МаксимальныйПериодРассчитанныхИтогов < РегистрБухгалтерииПериод Тогда + РегистрБухгалтерииМенеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(РегистрБухгалтерииПериод); + ИначеЕсли УстанавливатьМинимальныйПериод + И МинимальныйПериодРассчитанныхИтогов <> МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии Тогда + РегистрБухгалтерииМенеджер.УстановитьМинимальныйПериодРассчитанныхИтогов(МинимальныйПериодРассчитанныхИтоговРегистровБухгалтерии); + КонецЕсли; Если Не РегистрБухгалтерииМенеджер.ПолучитьИспользованиеИтогов() Или Не РегистрБухгалтерииМенеджер.ПолучитьИспользованиеТекущихИтогов() Тогда Продолжить; @@ -63,8 +106,7 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -140,10 +182,11 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Выполнение регламентных заданий. +#Область ВыполнениеРегламентныхЗаданий // Обработчик регламентного задания "УстановкаПериодаРассчитанныхИтогов". Процедура УстановкаПериодаРассчитанныхИтоговОбработчикЗадания() Экспорт @@ -220,8 +263,9 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы в файловом режиме. +#КонецОбласти + +#Область ДляРаботыВФайловомРежиме // Возвращает Истина если ИБ работает в файловом режиме и разделение отключено. Функция РежимРаботыЛокальныйФайловый() @@ -274,8 +318,9 @@ Константы.ПараметрыИтоговИАгрегатов.Установить(Новый ХранилищеЗначения(Параметры)); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // [2.3.4.7] Актуализирует использование регламентных заданий ОбновлениеАгрегатов и ПерестроениеАгрегатов. Процедура ОбновитьИспользованиеРегламентныхЗаданий() Экспорт @@ -288,8 +333,9 @@ ОбновитьРегламентноеЗадание(Метаданные.РегламентныеЗадания.УстановкаПериодаРассчитанныхИтогов, Истина); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Другие +#КонецОбласти + +#Область Другие // Вспомогательная для процедуры ОбновитьИспользованиеРегламентныхЗаданий. Процедура ОбновитьРегламентноеЗадание(МетаданныеРегламентногоЗадания, Использование) @@ -417,3 +463,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl index 3e42bfcd5..2db20d93c 100644 --- a/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКолонтитулами/Module.bsl @@ -53,7 +53,7 @@ // Настройки - Структура - значения настроек колонтитулов, которые необходимо сохранить. // Процедура СохранитьНастройкиКолонтитулов(Настройки) Экспорт - Константы.НастройкиКолонтитулов.Установить(Новый ХранилищеЗначения(Настройки)); + Константы.НастройкиКолонтитулов.Установить(Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(9))); КонецПроцедуры // Устанавливает значения параметров НазваниеОтчета и Пользователь в строке шаблона. diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 4c01c76f0..e5456700d 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Добавление, изменение и получение контактной информации. +#Область ДобавлениеИзменениеИПолучениеКонтактнойИнформации // Возвращает таблицу, содержащую контактную информацию нескольких объектов. // @@ -629,8 +628,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Телефонные номера +#КонецОбласти + +#Область ТелефонныеНомера // Возвращает сведения о телефоне или факсе. // @@ -700,8 +700,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Преобразование контактной информации +#КонецОбласти + +#Область ПреобразованиеКонтактнойИнформации // Преобразует входящие форматы контактной информации во внутренний формат JSON. // @@ -758,15 +759,18 @@ // Строка - контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес. // Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт + + Данные = Новый Структура("ЗначенияПолей, Представление, ВидКонтактнойИнформации", + ЗначенияПолей, Представление, ОжидаемыйВид); + + СтандартнаяОбработка = Истина; + Результат = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриПриведенииКонтактнойИнформацииВXML(Данные, Результат, СтандартнаяОбработка); - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Результат = МодульУправлениеКонтактнойИнформациейЛокализация.ПривестиКонтактнуюИнформациюXML(Новый Структура( - "ЗначенияПолей, Представление, ВидКонтактнойИнформации", - ЗначенияПолей, Представление, ОжидаемыйВид)); + Если Не СтандартнаяОбработка И Результат <> Неопределено Тогда Возврат Результат.ДанныеXML; КонецЕсли; - + Возврат ""; КонецФункции @@ -850,8 +854,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с контактной информацией из других подсистем. +#КонецОбласти + +#Область РаботаСКонтактнойИнформациейИзДругихПодсистем // Возвращает тип контактной информации. // @@ -875,8 +880,11 @@ Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.ТипКонтактнойИнформации(КонтактнаяИнформация); + Тип = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриОпределенииТипаКонтактнойИнформации(КонтактнаяИнформация, Тип); + Если Тип <> Неопределено Тогда + Возврат Тип; + КонецЕсли; КонецЕсли; @@ -996,12 +1004,7 @@ Возврат; КонецЕсли; - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - МодульУправлениеКонтактнойИнформациейЛокализация.УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Комментарий); - - КонецЕсли; + УправлениеКонтактнойИнформациейЛокализация.ПриУстановкеКомментарияКонтактнойИнформации(КонтактнаяИнформация, Комментарий); КонецПроцедуры @@ -1136,12 +1139,9 @@ Результат.Колонки.Добавить("Значение1", ОбщегоНазначения.ОписаниеТипаСтрока(0)); Результат.Колонки.Добавить("Значение2", ОбщегоНазначения.ОписаниеТипаСтрока(0)); - Если Не УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - Возврат Результат; - КонецЕсли; + УправлениеКонтактнойИнформациейЛокализация.ПриОпределенииРазличияКонтактнойИнформации(Данные1, Данные2, Результат); - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.РазличияКонтактнойИнформации(Данные1, Данные2, Результат); + Возврат Результат; КонецФункции @@ -1214,7 +1214,7 @@ | |СГРУППИРОВАТЬ ПО | КонтактнаяИнформация.Вид, КонтактнаяИнформация.Ссылка - |;" // @Query-part-1 + |;" // @Query-part-1, @Query-part-2, @Query-part-3 КонецЕсли; КонецЦикла; @@ -1286,9 +1286,9 @@ |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеГдеТипКонтактнойИнформации", - ?(ТипыКонтактнойИнформации = Неопределено, "ИСТИНА", "КонтактнаяИнформация.Тип В (&ТипыКонтактнойИнформации)")); // @query-part-2 + ?(ТипыКонтактнойИнформации = Неопределено, "ИСТИНА", "КонтактнаяИнформация.Тип В (&ТипыКонтактнойИнформации)")); // @query-part-3 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеГдеВидКонтактнойИнформации", - ?(ВидыКонтактнойИнформации = Неопределено, "ИСТИНА", "КонтактнаяИнформация.Вид В (&ВидыКонтактнойИнформации)")); // @query-part-2 + ?(ВидыКонтактнойИнформации = Неопределено, "ИСТИНА", "КонтактнаяИнформация.Вид В (&ВидыКонтактнойИнформации)")); // @query-part-3 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&МассивОбъектовИмяТаблицы", "&МассивОбъектов" + ИмяТаблицы); @@ -1325,8 +1325,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страны мира +#КонецОбласти + +#Область СтраныМира // Возвращает данные о стране по справочнику стран мира или классификатору. // @@ -1705,8 +1706,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы и модуля объекта вызываемые при внедрении подсистемы. +#КонецОбласти + +#Область ОбработчикиСобытийФормыИМодуляОбъектаВызываемыеПриВнедренииПодсистемы // Обработчик для события формы ПриСозданииНаСервере. // Вызывается из модуля формы объекта-владельца КИ при внедрении подсистемы. @@ -2232,7 +2234,8 @@ ТипИнформации = СтрокаТаблицы.Тип; Комментарий = СтрокаТаблицы.Комментарий; ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; - СвойствоВидаИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидИнформации, "ОбязательноеЗаполнение, ВидРедактирования"); + СвойствоВидаИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидИнформации, + "ОбязательноеЗаполнение, ВидРедактирования"); ОбязательноеЗаполнение = СвойствоВидаИнформации.ОбязательноеЗаполнение; Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда @@ -2250,20 +2253,21 @@ Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл Представление = СтрокаТабличнойЧастиФормы[ИмяРеквизита]; - Поле = "Объект." + ИмяТабличнойЧасти + "[" + XMLСтрока((СтрокаТабличнойЧастиФормы.НомерСтроки - 1)) + "]." + ИмяРеквизита; + Поле = "Объект." + ИмяТабличнойЧасти + "[" + + XMLСтрока((СтрокаТабличнойЧастиФормы.НомерСтроки - 1)) + "]." + ИмяРеквизита; Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) И Не ВидИнформации.ПометкаУдаления Тогда ОбщегоНазначения.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), + ВидИнформации.Наименование),,Поле); ТекущийУровеньОшибок = 2; Иначе Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"]; - - ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, ВидИнформации, - ТипИнформации, ИмяРеквизита, , Поле); + ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, Значение, + ВидИнформации, ТипИнформации, ИмяРеквизита, , Поле); СтрокаТабличнойЧастиФормы[ИмяРеквизита] = Представление; СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"] = Значение; @@ -2294,7 +2298,8 @@ // И нет других строк с данными для видов КИ с множественными значениями. ОбщегоНазначения.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), + ВидИнформации.Наименование),,, ИмяРеквизита); ТекущийУровеньОшибок = 2; Иначе @@ -2338,7 +2343,8 @@ ПараметрыКонтактнойИнформации = Неопределено; СкрываемыеВиды = Новый Массив; - ОпределитьПараметрыКонтактнойИнформацииПоВладельцу(Форма, Объект, ПараметрыКонтактнойИнформации, ЭтоПараметрыОсновногоОбъекта, СкрываемыеВиды); + ОпределитьПараметрыКонтактнойИнформацииПоВладельцу(Форма, Объект, ПараметрыКонтактнойИнформации, + ЭтоПараметрыОсновногоОбъекта, СкрываемыеВиды); Если Объект.Ссылка.Пустая() И ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда @@ -2683,8 +2689,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные функции и конструкторы. +#КонецОбласти + +#Область ВспомогательныеФункцииИКонструкторы // Возвращает используемые виды контактной информации объекта. // @@ -2871,8 +2878,73 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Проверка и сведения об адресе +#КонецОбласти + +#Область ПроверкаИСведенияОбАдресе + +// Возвращает детализированную информацию об адресе в виде отдельных полей, таких как город, улица, регион, индекс и др. +// Если в конфигурации присутствует общий модуль РаботаСАдресами, +// вызов данной функции будет автоматически перенаправлен в этот модуль. +// +// Параметры: +// Адрес - Строка - адрес во внутреннем формате JSON. +// - Неопределено - конструктор для получения пустых полей адреса. +// ДополнительныеПараметры - Структура - для уточнения возвращаемого значения. +// * БезПредставлений - Булево - если Истина, то поле Представление будет отсутствовать. По умолчанию Ложь. +//// +// Возвращаемое значение: +// Структура: +// * Представление - Строка - текстовое представление адреса. Например, "08681, Центральный регион, город +// Лима, ул. Широкая, дом 1". +// * ТипАдреса - Строка - тип адреса. Варианты: "ВСвободнойФорме", "Иностранный". +// * Страна - Строка - текстовое представление страны. Например, "Перу". +// * КодСтраны - Строка - код страны. Например, "604". +// * Индекс - Строка - почтовый индекс. Например, "08681". +// * Регион - Строка - текстовое представление региона или штата. Например, "Центральный". +// * Город - Строка - текстовое представление города. +// * Улица - Строка - текстовое представление улицы включая номер дома, корпус, строения. Например +// "ул. Широкая, дом 1". +// * ДополнительнаяИнформация - Строка - текстовое представление дополнительной информации. Например, когда +// требуется указать детали, такие как квартира, офис, этаж или другие уточнения. +// +Функция СведенияОбАдресе(Адрес = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт + + Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступныМодулиРаботаСАдресами() Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Возврат МодульРаботаСАдресами.СведенияОбАдресе(Адрес, ДополнительныеПараметры); + КонецЕсли; + + Если Адрес = Неопределено Тогда + Возврат УправлениеКонтактнойИнформациейКлиентСервер.ПоляАдреса(); + КонецЕсли; + + Адреса = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Адрес); + Результат = СведенияОбАдресах(Адреса, ДополнительныеПараметры); + Возврат Результат.Получить(0); + +КонецФункции + +// Возвращает детализированную информацию об адресе в виде отдельных полей, таких как город, улица, регион, индекс и др. +// Если в конфигурации присутствует общий модуль РаботаСАдресами, +// вызов данной функции будет автоматически перенаправлен в этот модуль. +// +// Параметры: +// Адреса - Массив из см. СведенияОбАдресе.Адрес +// ДополнительныеПараметры - см. СведенияОбАдресе.ДополнительныеПараметры +// +// Возвращаемое значение: +// Массив из см. СведенияОбАдресе +// +Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт + + Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступныМодулиРаботаСАдресами() Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Возврат МодульРаботаСАдресами.СведенияОбАдресах(Адреса, ДополнительныеПараметры); + КонецЕсли; + + Возврат СведенияОбАдресахВВидеПолей(Адреса, ДополнительныеПараметры); +КонецФункции + // Проверяет контактную информацию. // @@ -2924,8 +2996,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Устанавливает свойства группы контактной информации. // @@ -2960,82 +3033,19 @@ КонецФункции // Устанавливает свойства вида контактной информации. -// Примечание. При использовании параметра Порядок следует внимательно следить за уникальностью назначаемого значения. -// Если после выполнения обновления значения порядка окажутся неуникальными в пределах группы, то настройка порядка -// пользователем будет невозможна. -// В общем случае рекомендуется не использовать этот параметр (порядок не изменится), либо заполнять его значением -// 0 (порядок будет назначен автоматически в подсистеме "Настройка порядка элементов" при выполнении процедуры). -// Для размещения видов КИ в определенной последовательности относительно друг друга без явного размещения в начале -// списка достаточно вызывать данную процедуру в нужной последовательности для каждого вида КИ с указанием порядка 0. -// Если добавляется предопределенный вид КИ к уже существующим в ИБ, не рекомендуется назначать порядок в явном виде. +// +// Примечание. При задании свойства Параметры.Порядок следует следить за уникальностью назначаемого значения. +// Если значения порядка окажутся неуникальными в пределах группы, то настройка +// порядка пользователем будет невозможна. В общем случае рекомендуется не +// использовать этот параметр (порядок не изменится), либо задавать значение 0. +// Для размещения видов КИ в нужной последовательности достаточно вызывать данную процедуру +// в нужной последовательности для каждого вида КИ с указанием порядка 0. +// Если предопределенный вид КИ добавляется к уже существующим в информационной базе, +// не рекомендуется назначать порядок в явном виде. +// // // Параметры: -// Параметры - Структура - свойства вида контактной информации: -// * Имя - Строка - имя предопределенного вида контактной информации; -// * Наименование - Строка - наименование вида контактной информации; -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации -// - Строка - ссылка на вид контактной информации или -// идентификатор предопределенного элемента. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации или его -// идентификатор. -// * Порядок - Число -// - Неопределено - порядок вида контактной информации, положение в -// списке относительно других элементов: -// Неопределено - не переназначать; -// 0 - назначить автоматически; -// Число > 0 - назначить указанный порядок. -// * МожноИзменятьСпособРедактирования - Булево - Истина, если есть возможность изменять способ -// редактирования только в диалоге, Ложь - иначе. -// * ВидРедактирования - Строка - определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". -// Если "Диалог", то форме выводится гиперссылка с представлением контактной -// информации, по нажатию на которую, открывается форма соответствующего типа КИ. -// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. -// Если "ПолеВвода", то на форме выводится поле ввода. -// Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. -// * ОбязательноеЗаполнение - Булево - Истина, если требуется обязательное -// заполнение поля, Ложь - иначе. -// * РазрешитьВводНесколькихЗначений - Булево - признак возможности использования дополнительных -// полей ввода для данного вида. -// * ЗапретитьРедактированиеПользователем - Булево - признак недоступности редактирования -// пользователем свойства вида контактной -// информации. -// * ХранитьИсториюИзменений - Булево - признак хранения истории изменений вида -// контактной информации. -// Значение по умолчанию Ложь. -// * Используется - Булево - признак использования вида контактной информации. -// Значение по умолчанию Истина. -// * ВидПоляДругое - Строка - внешний вид поля типа "Другое". Возможные значения: -// МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. -// Значение по умолчанию - ОднострочноеШирокое. -// * РедактированиеТолькоВДиалоге - Булево - устарело. Следует использовать ВидРедактирования. -// Если Истина, то форме выводится гиперссылка с представлением контактной -// информации по нажатию на которую, открывается форма соответствующего -// типа КИ. Свойство применимо только для контактной информации с типом: -// Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. -// * НастройкиПроверки - Неопределено - для типов Другое, ВебСтраница, Skype. -// - Структура - состав полей зависит от типа контактной информации: -// ** ТолькоНациональныйАдрес - Булево - для типа Адрес. Если Истина, если возможен ввод только национальных адресов. -// ** ПроверятьКорректность - Булево - для типа Адрес. Если Истина, если требуется запрещать пользователю записывать -// некорректные адреса. -// ** СкрыватьНеактуальныеАдреса - Булево - для типа Адрес. Если Истина, если не требуется показывать -// неактуальные адреса при -// вводе (только если ТолькоНациональныйАдрес = Истина). -// ** ВключатьСтрануВПредставление - Булево - для типа Адрес. Если Истина, если требуется включать наименование -// страны в представление адреса. -// ** ПроверятьКорректность - Булево - для типа АдресЭлектроннойПочты .Если Истина, если требуется запрещать -// пользователю записывать некорректный адрес электронной почты. -// ** ТелефонСДобавочнымНомером - Булево - для типа Телефон или Факс. Если Истина, то телефон/факс содержит -// добавочный номер. -// ** ВводитьНомерПоМаске - Булево - для типа Телефон или Факс. Если Истина, если требуется ввод телефона по маске. -// ** МаскаНомераТелефона - Строка - для типа Телефон или Факс. Содержит посимвольную строку маски -// интерактивного ввода текста в поле. Формат маски соответствует -// платформенной маске для поля ввода. -// ** ЗапрещатьВводНекорректного - Булево - устарел. Все переданные значения игнорируются. -// для типа Адрес. Для запрета пользователю записывать некорректные адреса -// следует использовать параметр ПроверятьКорректность. -// ** ЗапрещатьВводНекорректного - Булево - устарел. Все переданные значения игнорируются. -// Для типа АдресЭлектроннойПочты. Для запрета пользователю записывать -// некорректные адреса следует использовать параметр ПроверятьКорректность. +// Параметры - см. ПараметрыВидаКонтактнойИнформации. // Процедура УстановитьСвойстваВидаКонтактнойИнформации(Параметры) Экспорт @@ -3164,8 +3174,10 @@ Результат = ОписаниеОбщихПараметровВидаКонтактнойИнформации(); Если ТипЗнч(ГруппаКонтактнойИнформации ) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ГруппаКонтактнойИнформации, "ИмяПредопределенногоВида, ИмяПредопределенныхДанных, Родитель, Наименование, Используется"); - Результат.Имя = ?(ЗначениеЗаполнено(Значения.ИмяПредопределенногоВида), Значения.ИмяПредопределенногоВида, Значения.ИмяПредопределенныхДанных); + Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ГруппаКонтактнойИнформации, + "ИмяПредопределенногоВида, ИмяПредопределенныхДанных, Родитель, Наименование, Используется"); + Результат.Имя = ?(ЗначениеЗаполнено(Значения.ИмяПредопределенногоВида), Значения.ИмяПредопределенногоВида, + Значения.ИмяПредопределенныхДанных); Результат.Группа = Значения.Родитель; Результат.Наименование = Значения.Наименование; Результат.Используется = Значения.Используется; @@ -3175,44 +3187,39 @@ КонецФункции -// Возвращает структуру параметров вида контактной информации для определенного типа. +// Возвращает параметры вида контактной информации для указанного типа. +// Для совместного использования с процедурами +// УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации +// и УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации. // // Параметры: // ТипИлиВидКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации // - Строка - тип контактной информации, -// - СправочникСсылка.ВидыКонтактнойИнформации- вид контактной информации для -// заполнения свойства НастройкиПроверки. +// - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации для +// заполнения свойства НастройкиПроверки. // // Возвращаемое значение: // Структура: -// * Имя - Строка - уникальное имя вида контактной информации. -// * Наименование - Строка - наименование вида контактной информации. +// * Имя - Строка - уникальное имя вида контактной информации, например "АдресКлиента". +// * Наименование - Строка - наименование вида контактной информации, например "Адрес клиента". // * Вид - СправочникСсылка.ВидыКонтактнойИнформации -// - Строка - ссылка на вид контактной информации или -// идентификатор предопределенного элемента. -// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - ссылка на группу(родителя) элемента справочника. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации или его идентификатор. +// - Строка - вид контактной информации или идентификатор предопределенного элемента. +// * Группа - СправочникСсылка.ВидыКонтактнойИнформации - группа (родитель) вида контактной информации. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. // * Порядок - Число -// - Неопределено - порядок вида контактной информации, положение в списке относительно других элементов. -// Неопределено - не переназначать; -// 0 - назначить автоматически; -// Число > 0 - назначить указанный порядок. -// Примечание. При использовании параметра Порядок следует внимательно следить -// за уникальностью назначаемого значения. Если после выполнения обновления -// значения порядка окажутся неуникальными в пределах группы, то настройка -// порядка пользователем будет невозможна. В общем случае рекомендуется не -// использовать этот параметр (порядок не изменится), либо заполнять его -// значением 0 (порядок будет назначен автоматически в подсистеме "Настройка -// порядка элементов" при выполнении процедуры). Для размещения видов КИ в -// определенной последовательности относительно друг друга без явного -// размещения в начале списка достаточно вызывать данную процедуру в нужной -// последовательности для каждого вида КИ с указанием порядка 0. Если -// добавляется предопределенный вид КИ к уже существующим в ИБ, не -// рекомендуется назначать порядок в явном виде. -// * МожноИзменятьСпособРедактирования - Булево -признак возможности изменения свойств вида контактной информации пользователем. +// - Неопределено - положение в списке относительно других элементов в группе. +// Если Неопределено, то порядок не переназначается; +// 0 - порядок назначается автоматически; +// Число > 0 - указанный порядок (уникальное значение в пределах группы). +// * МожноИзменятьСпособРедактирования - Булево - признак возможности изменения свойств вида контактной информации пользователем. // Если Ложь, то в форме вида контактной информации свойства доступны // только для просмотра. Значение по умолчанию - Ложь. -// * ВидРедактирования - Строка - вид редактирования. +// * ВидРедактирования - Строка - вид редактирования: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". +// Если "Диалог", то форме выводится гиперссылка с представлением контактной +// информации, по нажатию на которую, открывается форма соответствующего типа КИ. +// Свойство применимо только для контактной информации с типом: Адрес, Телефон, Факс. +// Если "ПолеВвода", то на форме выводится поле ввода. +// Если "ПолеВводаИДиалог", то доступен ввод в поле и в форме соответствующего типа КИ. // * ВидРедактирования - Строка - определят вид редактирования значения. Варианты: "ПолеВводаИДиалог", "ПолеВвода", "Диалог". // Если "Диалог", то форме выводится гиперссылка с представлением контактной // информации, по нажатию на которую, открывается форма соответствующего типа КИ. @@ -3223,54 +3230,53 @@ // Хранение истории допускается, если признак ВидРедактирования = "Диалог" // равен Истина. Свойство применимо если табличная часть КонтактнаяИнформация // содержит реквизит ДействуетС. Значение по умолчанию - Ложь. -// * ОбязательноеЗаполнение - Булево - если Истина, то требуется обязательный ввод значения в поле -// контактной информации. Значение по умолчанию - Ложь. -// * РазрешитьВводНесколькихЗначений - Булево - признак возможности ввода нескольких значений для данного вида. -// Значение по умолчанию - Ложь. +// * ОбязательноеЗаполнение - Булево - если Истина, то требуется обязательный ввод значения в поле на форме. +// Значение по умолчанию - Ложь. +// * РазрешитьВводНесколькихЗначений - Булево - признак возможности ввода нескольких значений для данного вида. +// Значение по умолчанию - Ложь. // * ЗапретитьРедактированиеПользователем - Булево - признак недоступности редактирования пользователем // вида контактной информации. Значение по умолчанию - Ложь. // * Используется - Булево - если Ложь, то вид контактной информации недоступен для использования пользователем. // Такой вид не выводится в формах и списке видов контактной информации. // Значение по умолчанию - Истина. -// * МеждународныйФорматАдреса - Булево - признак международного формата адреса. -// Если Истина, то ввода всех адресов только в международном формате. +// * МеждународныйФорматАдреса - Булево - если Истина, то ввод адресов возможен только в международном формате. // Значение по умолчанию - Ложь. -// * ВидПоляДругое - Строка - определяет внешний вид поля с типом Другое на форме. -// Варианты: МногострочноеШирокое, ОднострочноеШирокое, ОднострочноеУзкое. -// Свойство применимо только для контактной информации с типом: Другое. -// Для вида КИ с типом Другое значение по умолчанию - "ОднострочноеШирокое", -// иначе пустая строка. +// * ВидПоляДругое - Строка - определяет внешний вид поля с типом Другое на форме. +// Варианты: "МногострочноеШирокое", "ОднострочноеШирокое", "ОднострочноеУзкое". +// Значение по умолчанию - "ОднострочноеШирокое". // * РедактированиеТолькоВДиалоге - Булево - устарело. Следует использовать ВидРедактирования. // Если Истина, то форме выводится гиперссылка с представлением контактной // информации по нажатию на которую, открывается форма соответствующего // типа КИ. Свойство применимо только для контактной информации с типом - // Адрес, Телефон, Факс, ВебСтраница. Значение по умолчанию - Ложь. // * НастройкиПроверки - Неопределено - для типов Другое, ВебСтраница, Skype. -// - Структура - настройки проверки вида контактной информации: +// - Структура: // ** ТолькоНациональныйАдрес - Булево - для типа Адрес. Если Истина, то разрешается ввод только национальных адресов. -// Изменение страны у адреса не допускается. -// ** ПроверятьКорректность - Булево - для типа Адрес. Если Истина, то для национальных адресов доступен ввод -// только адресов с разбивкой по полям проходящих проверку по адресному классификатору. +// Изменение страны у адреса не допускается. +// ** СкрыватьНеактуальныеАдреса - Булево - для типа Адрес. Если Истина, если не требуется показывать +// неактуальные адреса при вводе (только если ТолькоНациональныйАдрес = Истина). +// ** ПроверятьКорректность - Булево - для типа Адрес значение Истина, означает, что разрешено вводить адреса, +// проходящие проверку по адресному классификатору (ТолькоНациональныйАдрес = Истина). // Допускается ввод адресов других стран в свободной форме, // если свойство ТолькоНациональныйАдрес = Ложь. +// Для типа АдресЭлектроннойПочты при значении Истина запрещен ввод +// некорректных адресов электронной почты. // Значение по умолчанию - Ложь. // ** ВключатьСтрануВПредставление - Булево - для типа Адрес. если Истина, то Наименование страны всегда // добавляется в представление адреса, даже когда другие поля адреса пустые. // Значение по умолчанию - Ложь. // ** УказыватьОКТМО - Булево - для типа Адрес. признак возможности ручного ввода кода ОКМТО в форме ввода адреса. -// ** ПроверятьКорректность - Булево - для типа АдресЭлектроннойПочты. Если Истина, то запрещается пользователю ввод -// некорректный адрес электронной почты. Значение по умолчанию - Ложь. // ** ТелефонСДобавочнымНомером - Булево - для типа Телефон и Факс. Если Истина, то в форме ввода телефона // доступен ввод добавочного номера. Значение по умолчанию - Истина. +// ** ВводитьНомерПоМаске - Булево - для типа Телефон или Факс. Если Истина, требуется ввод телефона по маске. +// ** МаскаНомераТелефона - Строка - для типа Телефон или Факс. Содержит посимвольную строку маски +// ввода текста в поле. // Функция ПараметрыВидаКонтактнойИнформации(ТипИлиВидКонтактнойИнформации = Неопределено) Экспорт Если ТипЗнч(ТипИлиВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ПараметрыВида = ПараметрыИзВидаКонтактнойИнформации(ТипИлиВидКонтактнойИнформации); - Иначе - Если ТипЗнч(ТипИлиВидКонтактнойИнформации) = Тип("Строка") Тогда УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации[ТипИлиВидКонтактнойИнформации]; Иначе @@ -3284,6 +3290,48 @@ КонецФункции +// Возвращает параметры вида контактной информации типа Адрес. +// Для совместного использования с процедурами +// УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации +// и УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации. +// +// Возвращаемое значение: +// см. ПараметрыВидаКонтактнойИнформации +// +Функция ПараметрыАдреса() Экспорт + + Возврат ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); + +КонецФункции + +// Возвращает параметры вида контактной информации типа АдресЭлектроннойПочты. +// Для совместного использования с процедурами +// УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации +// и УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации. +// +// Возвращаемое значение: +// см. ПараметрыВидаКонтактнойИнформации +// +Функция ПараметрыАдресаЭлектроннойПочты() Экспорт + + Возврат ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + +КонецФункции + +// Возвращает параметры вида контактной информации типа Телефон. +// Для совместного использования с процедурами +// УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации +// и УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации. +// +// Возвращаемое значение: +// см. ПараметрыВидаКонтактнойИнформации +// +Функция ПараметрыТелефона() Экспорт + + Возврат ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон); + +КонецФункции + // Записывает контактную информацию из XML в поля табличной части Контактная информация объекта. // // Параметры: @@ -3317,10 +3365,7 @@ НоваяСтрока.Вид = ВидИнформации; НоваяСтрока.Тип = ТипИнформации; - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - НоваяСтрока.ЗначенияПолей = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзJSONВXML(ОбъектКИ, ТипИнформации); - КонецЕсли; + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнуюИнформациюИзJSONВXML(ОбъектКИ, НоваяСтрока.ЗначенияПолей, ТипИнформации); Если ЗначениеЗаполнено(Дата) И УправлениеКонтактнойИнформациейСлужебныйПовтИсп.КонтактнаяИнформацияОбъектаСодержитКолонкуДействуетС(Объект.Ссылка) Тогда @@ -3562,6 +3607,8 @@ КонецПроцедуры +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -3583,15 +3630,14 @@ // Функция КонтактнаяИнформацияXMLПоПредставлению(Представление, ОжидаемыйВид) Экспорт - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияXDTOВXML( - МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияXDTOПоПредставлению(Представление, ОжидаемыйВид)); - + Результат = ""; + XDTOОбъект = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриПреобразованииКонтактнойИнформацииXDTOПоПредставлению(Представление, XDTOОбъект, ОжидаемыйВид); + Если XDTOОбъект <> Неопределено Тогда + УправлениеКонтактнойИнформациейЛокализация.ПриПреобразованииКонтактнойИнформацииXDTOВXML(XDTOОбъект, Результат); КонецЕсли; - Возврат ""; + Возврат Результат; КонецФункции @@ -3635,7 +3681,7 @@ // // Возвращаемое значение: // Структура - состав полей зависит от типа контактной информации. Для типа Адрес: ВвестиКомментарийКАдресу, -// ПоказатьНаКартеЯндекс, ПоказатьНаКартеGoogle, ЗапланироватьВстречу, ПоказатьИсториюИзменений. +// ПоказатьНаКартеGoogle, ЗапланироватьВстречу, ПоказатьИсториюИзменений. // Для типа Телефон: ПозвонитьПоТелефону, ОтправитьSMS, ПоказатьИсториюИзменений. // Для типа Факс: ОтправитьФакс, ПоказатьИсториюИзменений. // Для типа АдресЭлектронной почты: НаписатьЭлектронноеПисьмо. @@ -3644,7 +3690,6 @@ // Для типа Другое: ОткрытьОкноДругое. // Состав полей: // * ВвестиКомментарийКАдресу - см. ОписаниеКомандыПоИмени -// * ПоказатьНаКартеЯндекс - см. ОписаниеКомандыПоИмени // * ПоказатьНаКартеGoogle - см. ОписаниеКомандыПоИмени // * ЗапланироватьВстречу - см. ОписаниеКомандыПоИмени // * ПоказатьИсториюИзменений - см. ОписаниеКомандыПоИмени @@ -3692,18 +3737,13 @@ БиблиотекаКартинок.Комментарий, "УправлениеКонтактнойИнформациейКлиент.ПередВводомКомментария", Истина); - ИначеЕсли ИмяКоманды = "ПоказатьНаКартеЯндекс" Тогда - Возврат СвойстваКоманды( - НСтр("ru = 'Адрес на Яндекс.Картах'"), - НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'"), - БиблиотекаКартинок.ЯндексКарты, - "УправлениеКонтактнойИнформациейКлиент.ПередПоказомАдресаНаКартеЯндекс"); ИначеЕсли ИмяКоманды = "ПоказатьНаКартеGoogle" Тогда - Возврат СвойстваКоманды( + СвойстваКоманды = СвойстваКоманды( НСтр("ru = 'Адрес на Google Maps'"), НСтр("ru = 'Показывает адрес на карте Google Maps'"), БиблиотекаКартинок.GoogleMaps, - "УправлениеКонтактнойИнформациейКлиент.ПередПоказомАдресаНаКартеGoogle"); + "УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКартеGoogle"); + Возврат СвойстваКоманды; ИначеЕсли ИмяКоманды = "ЗапланироватьВстречу" Тогда Возврат СвойстваКоманды("", ""); КонецЕсли; @@ -3765,7 +3805,7 @@ Если ИмяКоманды = "ОткрытьОкноДругое" Тогда Возврат СвойстваКоманды("", ""); КонецЕсли; - + КонецФункции // Возвращает структуру для описания команд контактной информации. @@ -3896,6 +3936,10 @@ Возврат Перечисления.ТипыКонтактнойИнформации[Наименование]; КонецФункции +Функция ТипАдресЭлектроннойПочты() Экспорт + Возврат Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; +КонецФункции + Процедура ПриСкрытииЗначенияРеквизита(ПолноеИмя, Значение, СтандартнаяОбработка) Экспорт ИмяТабличнойЧасти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(".%1.", "КонтактнаяИнформация"); @@ -4118,8 +4162,52 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Инициализация элементов на форме объект-владельца контактной информации. +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР. +// +Функция СведенияОбАдресахВВидеПолей(Адреса, ДополнительныеПараметры) + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СведенияОбАдресах", "Адреса", Адреса, Тип("Массив")); + + Результат = Новый Массив; + + Если Адреса.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Для ИндексАдреса = 0 По Адреса.ВГраница() Цикл + + Адрес = Адреса.Получить(ИндексАдреса); + + АдресИзJSON = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(Адрес, Перечисления.ТипыКонтактнойИнформации.Адрес); + ПоляАдреса = УправлениеКонтактнойИнформациейКлиентСервер.ПоляАдреса(); + + ПоляАдреса.ТипАдреса = АдресИзJSON.addressType; + ПоляАдреса.Комментарий = АдресИзJSON.comment; + ПоляАдреса.Страна = АдресИзJSON.country; + ПоляАдреса.КодСтраны = АдресИзJSON.countryCode; + ПоляАдреса.Регион = АдресИзJSON.area; + ПоляАдреса.Индекс = АдресИзJSON.ZIPcode; + ПоляАдреса.Город = АдресИзJSON.city; + ПоляАдреса.Улица = АдресИзJSON.street; + + ПоляАдреса.ДополнительнаяИнформация = АдресИзJSON.houseNumber; + + Если ДополнительныеПараметры.Свойство("БезПредставлений") + И ДополнительныеПараметры.БезПредставлений Тогда + ПоляАдреса.Удалить("Представление"); + Иначе + ПоляАдреса.Представление = АдресИзJSON.value; + КонецЕсли; + + Результат.Добавить(ПоляАдреса); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#Область ИнициализацияЭлементовНаФормеОбъектВладельцаКонтактнойИнформации Процедура ОпределитьПараметрыКонтактнойИнформацииПоВладельцу(Форма, Объект, ПараметрыКонтактнойИнформации, ЭтоПараметрыОсновногоОбъекта, СкрываемыеВиды) @@ -4467,7 +4555,8 @@ КонецПроцедуры -Процедура ДобавитьСтрокуКонтактнойИнформации(Форма, Результат, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ = Ложь, КоличествоАдресов = Неопределено, СледующаяСтрока = Неопределено) +Процедура ДобавитьСтрокуКонтактнойИнформации(Форма, Результат, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ = Ложь, + КоличествоАдресов = Неопределено, СледующаяСтрока = Неопределено) ДобавлениеНовогоЗначения = ТипЗнч(Результат) = Тип("Структура"); @@ -4476,7 +4565,8 @@ ДобавляемыйВид = Результат.ДобавляемыйВид; Если ТипЗнч(ДобавляемыйВид)= Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, ВидРедактирования, ВидПоляДругое, ВводитьНомерПоМаске, МаскаНомераТелефона"); + ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, + "Тип, Наименование, ВидРедактирования, ВидПоляДругое, ВводитьНомерПоМаске, МаскаНомераТелефона"); Иначе ИнформацияОВидеКИ = ДобавляемыйВид; ДобавляемыйВид = ДобавляемыйВид.Ссылка; @@ -4546,9 +4636,11 @@ КонецЕсли; МассивДобавляемыхРеквизитов = Новый Массив; - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипаРеквизита,, ИнформацияОВидеКИ.Наименование, Истина)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, ОписаниеТипаРеквизита,, + ИнформацияОВидеКИ.Наименование, Истина)); Если ЕстьПолеКомментарий Тогда - МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизитаКомментарий, ОписаниеТипаРеквизита,, ИнформацияОВидеКИ.Наименование, Истина)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизитаКомментарий, + ОписаниеТипаРеквизита,, ИнформацияОВидеКИ.Наименование, Истина)); КонецЕсли; Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); @@ -4566,17 +4658,20 @@ // Отрисовка на форме Если ОбщегоНазначения.ЭтоМобильныйКлиент() И ПараметрыКонтактнойИнформации.ОтображатьИконки Тогда - ГруппаСтрокиЗаголовок = Группа("ГруппаЗаголовок" + ИмяРеквизита, Форма, ДобавляемыйВидНаименование, ИмяЭлементаДляРазмещения, "ГруппаЗначенияКИ" + ИмяЭлементаДляРазмещения, 6); + ГруппаСтрокиЗаголовок = Группа("ГруппаЗаголовок" + ИмяРеквизита, Форма, ДобавляемыйВидНаименование, + ИмяЭлементаДляРазмещения, "ГруппаЗначенияКИ" + ИмяЭлементаДляРазмещения, 6); ГруппаСтрокиЗаголовок.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; ГруппаСтрокиЗаголовок.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; - ГруппаСтрокиЗаголовокКартинка = Группа("ГруппаЗаголовокКартинка" + ИмяРеквизита, Форма, ДобавляемыйВидНаименование, ИмяЭлементаДляРазмещения, "ГруппаЗаголовок" + ИмяРеквизита); + ГруппаСтрокиЗаголовокКартинка = Группа("ГруппаЗаголовокКартинка" + ИмяРеквизита, Форма, + ДобавляемыйВидНаименование, ИмяЭлементаДляРазмещения, "ГруппаЗаголовок" + ИмяРеквизита); Декорация = Форма.Элементы.Добавить("Картинка" + ИмяРеквизита, Тип("ДекорацияФормы"), ГруппаСтрокиЗаголовокКартинка); Декорация.Заголовок = НСтр("ru='Картинка'"); Декорация.Вид = ВидДекорацииФормы.Картинка; Декорация.Ширина = 2; Декорация.Картинка = КартинкаТипаКонтактнойИнформации(ИнформацияОВидеКИ.Тип); ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить("Картинка" + ИмяРеквизита, 2, Ложь); - ДекорацияЗаголовок = Форма.Элементы.Добавить("Заголовок" + ИмяРеквизита, Тип("ДекорацияФормы"), ГруппаСтрокиЗаголовокКартинка); + ДекорацияЗаголовок = Форма.Элементы.Добавить("Заголовок" + ИмяРеквизита, Тип("ДекорацияФормы"), + ГруппаСтрокиЗаголовокКартинка); ДекорацияЗаголовок.Заголовок = ВРег(ДобавляемыйВидНаименование); ДекорацияЗаголовок.Вид = ВидДекорацииФормы.Надпись; ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить("Заголовок" + ИмяРеквизита, 2, Ложь); @@ -4683,7 +4778,8 @@ Форма.Элементы[ИмяЭлементаДляРазмещения].РастягиватьПоГоризонтали = Ложь; КонецЕсли; - ПолеВвода = СоздатьПолеВвода(Форма, ГруппаПолеКомментарий, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); + ПолеВвода = СоздатьПолеВвода(Форма, ГруппаПолеКомментарий, ИнформацияОВидеКИ, ИмяРеквизита, + ИмяЭлементаДляРазмещения, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; @@ -4698,7 +4794,8 @@ ПолеКомментарий.ПропускатьПриВводе = Истина; ПолеКомментарий.ПодсказкаВвода = НСтр("ru='Примечание'"); ПолеКомментарий.АвтоМаксимальнаяШирина = Ложь; - ШиринаПоляКомментарий = ?(ПараметрыКонтактнойИнформации.ГруппаДляРазмещенияОграниченаШириной, ПараметрыКонтактнойИнформации.ШиринаПоляКомментарий, 30); + ШиринаПоляКомментарий = ?(ПараметрыКонтактнойИнформации.ГруппаДляРазмещенияОграниченаШириной, + ПараметрыКонтактнойИнформации.ШиринаПоляКомментарий, 30); ПолеКомментарий.МаксимальнаяШирина = ШиринаПоляКомментарий; ПолеКомментарий.Ширина = ШиринаПоляКомментарий; ПолеКомментарий.РастягиватьПоГоризонтали = Ложь; @@ -4728,7 +4825,8 @@ НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду); Если НайденныеСтроки.Количество() > 1 Тогда ПредыдущаяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 2); - ПунктКонтекстногоМенюПеремещения(Форма.Элементы[ПредыдущаяСтрока.ИмяРеквизита], Форма, - 1, ИмяЭлементаДляРазмещения); + ПунктКонтекстногоМенюПеремещения(Форма.Элементы[ПредыдущаяСтрока.ИмяРеквизита], Форма, - 1, + ИмяЭлементаДляРазмещения); КонецЕсли; КонецЕсли; КонецЕсли; @@ -4743,7 +4841,8 @@ КонецПроцедуры -Функция СоздатьПолеВвода(Форма, Родитель, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения,ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) +Функция СоздатьПолеВвода(Форма, Родитель, ИнформацияОВидеКИ, ИмяРеквизита, ИмяЭлементаДляРазмещения, + ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки; @@ -4768,21 +4867,26 @@ Элемент.Вид = ВидПоляФормы.ПолеНадписи; Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки"); - Если ТипЗнч(ИнформацияОВидеКИ) <> Тип("Структура") И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ИнформацияОВидеКИ.Значение) Тогда - КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ИнформацияОВидеКИ.Значение, Перечисления.ТипыКонтактнойИнформации.ВебСтраница); + Если ТипЗнч(ИнформацияОВидеКИ) <> Тип("Структура") + И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ИнформацияОВидеКИ.Значение) Тогда + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям( + ИнформацияОВидеКИ.Значение, Перечисления.ТипыКонтактнойИнформации.ВебСтраница); АдресСайта = КонтактнаяИнформация.value; - Представление = ?(КонтактнаяИнформация.Свойство("name") И ЗначениеЗаполнено(КонтактнаяИнформация.name), КонтактнаяИнформация.name, ИнформацияОВидеКИ.Представление); + Представление = ?(КонтактнаяИнформация.Свойство("name") И ЗначениеЗаполнено(КонтактнаяИнформация.name), + КонтактнаяИнформация.name, ИнформацияОВидеКИ.Представление); Иначе АдресСайта = ""; Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); КонецЕсли; - Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(Представление, АдресСайта, Форма.ТолькоПросмотр); + Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.АдресСайта(Представление, АдресСайта, + Форма.ТолькоПросмотр); Иначе Элемент.Вид = ВидПоляФормы.ПолеВвода; - Если ИнформацияОВидеКИ.ВидРедактирования = "Диалог" И ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + Если ИнформацияОВидеКИ.ВидРедактирования = "Диалог" + И ИнформацияОВидеКИ.Тип <> Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда Элемент.РедактированиеТекста = Ложь; КонецЕсли; @@ -4877,7 +4981,8 @@ КонецФункции -Процедура ПодготовитьСтатическийЭлемент(Форма, СтрокаКИ, СозданныеЭлементы, СозданныйЭлемент, ОтображатьИконки, ИмяЭлементаДляРазмещения) +Процедура ПодготовитьСтатическийЭлемент(Форма, СтрокаКИ, СозданныеЭлементы, СозданныйЭлемент, ОтображатьИконки, + ИмяЭлементаДляРазмещения) СозданныеЭлементы.Удалить(СозданныйЭлемент); @@ -4905,7 +5010,8 @@ ИЛИ ГруппаСтроки.Родитель = Форма.Элементы["ГруппаЗначенияКИ"+ИмяЭлементаДляРазмещения] Тогда Форма.Элементы.Переместить(ГруппаСтроки, Форма.Элементы["ГруппаЗначенияКИ"+ИмяЭлементаДляРазмещения]); КонецЕсли; - ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); + ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, + ИмяЭлементаДляРазмещения); ИмяКнопки = "Команда" + СтрокаКИ.ИмяРеквизита; Если Форма.Элементы.Найти(ИмяКнопки) <> Неопределено Тогда @@ -4936,19 +5042,21 @@ КонецЕсли; Если ОтображатьИконки Тогда - ГруппаСтрокиЗаголовок = Группа("ГруппаЗаголовок" + СтрокаКИ.ИмяРеквизита, Форма, ГруппаСтроки.Заголовок, ИмяЭлементаДляРазмещения, "ГруппаЗначенияКИ"+ИмяЭлементаДляРазмещения, 6); + ГруппаСтрокиЗаголовок = Группа("ГруппаЗаголовок" + СтрокаКИ.ИмяРеквизита, Форма, + ГруппаСтроки.Заголовок, ИмяЭлементаДляРазмещения, "ГруппаЗначенияКИ"+ИмяЭлементаДляРазмещения, 6); ГруппаСтрокиЗаголовок.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; ГруппаСтрокиЗаголовок.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; - ГруппаСтрокиЗаголовокКартинка = Группа("ГруппаЗаголовокКартинка" + СтрокаКИ.ИмяРеквизита, Форма, ГруппаСтроки.Заголовок, ИмяЭлементаДляРазмещения, "ГруппаЗаголовок" + СтрокаКИ.ИмяРеквизита); + ГруппаСтрокиЗаголовокКартинка = Группа("ГруппаЗаголовокКартинка" + СтрокаКИ.ИмяРеквизита, Форма, + ГруппаСтроки.Заголовок, ИмяЭлементаДляРазмещения, "ГруппаЗаголовок" + СтрокаКИ.ИмяРеквизита); - ИмяЭлементаКартинка = "Картинка" + СтрокаКИ.ИмяРеквизита; Если Форма.Элементы.Найти(ИмяЭлементаКартинка) <> Неопределено Тогда - ЭлементКартинка = Форма.Элементы[ИмяЭлементаКартинка]; - Форма.Элементы.Переместить(ЭлементКартинка, ГруппаСтрокиЗаголовокКартинка); + ЭлементКартинка = Форма.Элементы[ИмяЭлементаКартинка]; + Форма.Элементы.Переместить(ЭлементКартинка, ГруппаСтрокиЗаголовокКартинка); Иначе - ЭлементКартинка = Форма.Элементы.Добавить(ИмяЭлементаКартинка, Тип("ДекорацияФормы"), ГруппаСтрокиЗаголовокКартинка); + ЭлементКартинка = Форма.Элементы.Добавить(ИмяЭлементаКартинка, Тип("ДекорацияФормы"), + ГруппаСтрокиЗаголовокКартинка); ЭлементКартинка.Заголовок = НСтр("ru='Картинка'"); ЭлементКартинка.Вид = ВидДекорацииФормы.Картинка; ЭлементКартинка.Ширина = 2; @@ -4958,10 +5066,11 @@ ИмяЭлементаЗаголовок = "Заголовок" + СтрокаКИ.ИмяРеквизита; Если Форма.Элементы.Найти(ИмяЭлементаЗаголовок) <> Неопределено Тогда - ЭлементЗаголовок = Форма.Элементы[ИмяЭлементаЗаголовок]; - Форма.Элементы.Переместить(ЭлементЗаголовок, ГруппаСтрокиЗаголовокКартинка); + ЭлементЗаголовок = Форма.Элементы[ИмяЭлементаЗаголовок]; + Форма.Элементы.Переместить(ЭлементЗаголовок, ГруппаСтрокиЗаголовокКартинка); Иначе - ДекорацияЗаголовок = Форма.Элементы.Добавить(ИмяЭлементаЗаголовок, Тип("ДекорацияФормы"), ГруппаСтрокиЗаголовокКартинка); + ДекорацияЗаголовок = Форма.Элементы.Добавить(ИмяЭлементаЗаголовок, Тип("ДекорацияФормы"), + ГруппаСтрокиЗаголовокКартинка); ДекорацияЗаголовок.Заголовок = ВРег(ГруппаСтроки.Заголовок); ДекорацияЗаголовок.Вид = ВидДекорацииФормы.Надпись; ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.Добавить("Заголовок" + СтрокаКИ.ИмяРеквизита, 2, Ложь); @@ -4969,7 +5078,7 @@ Форма.Элементы.Переместить(ГруппаСтроки, ГруппаСтрокиЗаголовок); - Иначе + Иначе ГруппаСтроки.ОтображатьЗаголовок = Истина; КонецЕсли; @@ -5045,7 +5154,8 @@ КонецЕсли; Если ИнформацияОВидеКИ.ВводитьНомерПоМаске Тогда - НомерТелефонаСоответствуетМаске = УправлениеКонтактнойИнформациейСлужебный.НомерТелефонаСоответствуетМаске(Форма[ИмяРеквизита], ИнформацияОВидеКИ.МаскаНомераТелефона); + НомерТелефонаСоответствуетМаске = УправлениеКонтактнойИнформациейСлужебный.НомерТелефонаСоответствуетМаске( + Форма[ИмяРеквизита], ИнформацияОВидеКИ.МаскаНомераТелефона); Если ПустаяСтрока(Форма[ИмяРеквизита]) ИЛИ НомерТелефонаСоответствуетМаске Тогда Элемент.Маска = ИнформацияОВидеКИ.МаскаНомераТелефона; КонецЕсли; @@ -5304,11 +5414,13 @@ Форма[СтрокаКонтактнойИнформации.ИмяРеквизита] = СтрокаКонтактнойИнформации.Представление; КонецЕсли; - ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); + ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, + ИмяЭлементаДляРазмещения); ОбработкаНавигационнойСсылки = ПараметрыКонтактнойИнформации.ОбработкаНавигационнойСсылки; Если ДляТипаКонтактнойИнформацииЕстьПолеКомментарий(СтрокаКонтактнойИнформации.Тип, ОбработкаНавигационнойСсылки) Тогда РеквизитыДляЗаполнения = Новый Структура(); - РеквизитыДляЗаполнения.Вставить("Комментарий" + СтрокаКонтактнойИнформации.ИмяРеквизита, СтрокаКонтактнойИнформации.Комментарий); + РеквизитыДляЗаполнения.Вставить("Комментарий" + СтрокаКонтактнойИнформации.ИмяРеквизита, + СтрокаКонтактнойИнформации.Комментарий); ЗаполнитьЗначенияСвойств(Форма, РеквизитыДляЗаполнения); КонецЕсли; @@ -5316,16 +5428,20 @@ ДанныеВидаКонтактнойИнформации.Вставить("Ссылка", СтрокаКонтактнойИнформации.Вид); - Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений И Не ЭтоРеквизитТабличнойЧасти И Не ДанныеВидаКонтактнойИнформации.ПометкаУдаления Тогда + Если ЭтоНовыйВидКИ И ДанныеВидаКонтактнойИнформации.РазрешитьВводНесколькихЗначений + И Не ЭтоРеквизитТабличнойЧасти И Не ДанныеВидаКонтактнойИнформации.ПометкаУдаления Тогда + ПараметрыКонтактнойИнформации = ?(ПараметрыКонтактнойИнформации = Неопределено, ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения), ПараметрыКонтактнойИнформации); Вид = СтрокаКонтактнойИнформации.Вид; // СправочникСсылка.ВидыКонтактнойИнформации Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда - ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, Строка(Вид)); + ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, + Строка(Вид)); Иначе КартинкаТипа = КартинкаТипаКонтактнойИнформации(ДанныеВидаКонтактнойИнформации.Тип); - ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, Строка(Вид),,КартинкаТипа); + ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Добавить(ДанныеВидаКонтактнойИнформации, + Строка(Вид),,КартинкаТипа); КонецЕсли; КонецЕсли; @@ -5333,7 +5449,8 @@ Процедура УдалитьКомандыИЭлементыФормы(Форма, ИмяЭлементаДляРазмещения) - ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); + ПараметрыКонтактнойИнформации = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, + ИмяЭлементаДляРазмещения); ДобавленныеЭлементы = ПараметрыКонтактнойИнформации.ДобавленныеЭлементы; ДобавленныеЭлементы.СортироватьПоПредставлению(); @@ -5405,7 +5522,8 @@ Пока РезультатЗапроса.Следующий() Цикл Если ЗначениеЗаполнено(РезультатЗапроса.ИмяТабличнойЧасти) Тогда - ИмяТабличнойЧасти = Сред(РезультатЗапроса.ИмяТабличнойЧасти, СтрНайти(РезультатЗапроса.ИмяТабличнойЧасти, ИмяОбъекта) + СтрДлина(ИмяОбъекта)); + ИмяТабличнойЧасти = Сред(РезультатЗапроса.ИмяТабличнойЧасти, + СтрНайти(РезультатЗапроса.ИмяТабличнойЧасти, ИмяОбъекта) + СтрДлина(ИмяОбъекта)); Иначе ИмяТабличнойЧасти = ""; КонецЕсли; @@ -5445,9 +5563,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Заполнение дополнительных реквизитов табличной части "Контактная информация". +#КонецОбласти +#Область ЗаполнениеДополнительныхРеквизитовТабличнойЧастиКонтактнаяИнформация Процедура УстановитьНаименованиеВидаКонтактнойИнформации(Знач Объект, Знач Наименование) @@ -5477,7 +5595,8 @@ КонецЕсли; Если ПредопределенныеДанныеОбъекта = Неопределено Или ПустаяСтрока(ИмяКлючевогоРеквизита) Тогда - ПредопределенныеДанныеОбъекта = ПараметрыЗаполнения.ПредопределенныеДанные.Найти(ЗначениеКлючаОбъекта, "ИмяПредопределенныхДанных"); + ПредопределенныеДанныеОбъекта = ПараметрыЗаполнения.ПредопределенныеДанные.Найти(ЗначениеКлючаОбъекта, + "ИмяПредопределенныхДанных"); КонецЕсли; Если ПустаяСтрока(Объект.Наименование) И ПредопределенныеДанныеОбъекта <> Неопределено Тогда @@ -5494,41 +5613,37 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда + МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); - СведенияОбЯзыках = МодульМультиязычностьСервер.СведенияОбЯзыках(); + МодульМультиязычностьКлиентСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьКлиентСервер"); + + ИнформацияОЯзыках = МодульМультиязычностьСервер.СведенияОЯзыках(); - ПредставлениеЯзык1 = ""; - ПредставлениеЯзык2 = ""; - - Если ПредопределенныеДанныеОбъекта <> Неопределено Тогда + Для ПорядковыйНомерЯзыка = 1 По ИнформацияОЯзыках.КоличествоДополнительныхЯзыков Цикл - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык1) Тогда - ПредставлениеЯзык1 = ПредопределенныеДанныеОбъекта["Наименование" + "_" + СведенияОбЯзыках.Язык1]; - КонецЕсли; - Если ЗначениеЗаполнено(СведенияОбЯзыках.Язык2) Тогда - ПредставлениеЯзык2 = ПредопределенныеДанныеОбъекта["Наименование" + "_" + СведенияОбЯзыках.Язык2]; + ПредставлениеНаДополнительномЯзыке = ""; + ИмяСуффиксаЯзыка = МодульМультиязычностьКлиентСервер.СуффиксЯзыка(ПорядковыйНомерЯзыка); + Если ПредопределенныеДанныеОбъекта <> Неопределено Тогда + + Если ЗначениеЗаполнено(ИнформацияОЯзыках[ИмяСуффиксаЯзыка]) Тогда + ПредставлениеНаДополнительномЯзыке = ПредопределенныеДанныеОбъекта["Наименование" + "_" + ИнформацияОЯзыках[ИмяСуффиксаЯзыка]]; + КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(ПредставлениеЯзык1) Тогда - - ПредставленияЯзыка1 = НаименованияНаРазныхЯзыках.Получить(МодульМультиязычностьСервер.КодПервогоДополнительногоЯзыкаИнформационнойБазы()); - Если ТипЗнч(ПредставленияЯзыка1) = Тип("Соответствие") Тогда - ПредставлениеЯзык1 = ПредставленияЯзыка1.Получить(ИмяПредопределенногоВида); + Если ПустаяСтрока(ПредставлениеНаДополнительномЯзыке) Тогда + + ПредставлениеНаДополнительномЯзыке = НаименованияНаРазныхЯзыках.Получить(ИнформацияОЯзыках[ИмяСуффиксаЯзыка]); + Если ТипЗнч(ПредставлениеНаДополнительномЯзыке) = Тип("Соответствие") Тогда + ПредставлениеНаДополнительномЯзыке = ПредставлениеНаДополнительномЯзыке.Получить(ИмяПредопределенногоВида); + КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если ПустаяСтрока(ПредставлениеЯзык2) Тогда - ПредставленияЯзыка2 = НаименованияНаРазныхЯзыках.Получить(МодульМультиязычностьСервер.КодВторогоДополнительногоЯзыкаИнформационнойБазы()); - Если ТипЗнч(ПредставленияЯзыка2) = Тип("Соответствие") Тогда - ПредставлениеЯзык2 = ПредставленияЯзыка2.Получить(ИмяПредопределенногоВида); - КонецЕсли; - КонецЕсли; - - Объект.НаименованиеЯзык1 = ?(ЗначениеЗаполнено(ПредставлениеЯзык1), ПредставлениеЯзык1, Объект.Наименование); - Объект.НаименованиеЯзык2 = ?(ЗначениеЗаполнено(ПредставлениеЯзык2), ПредставлениеЯзык2, Объект.Наименование); + Объект["Наименование" + ИмяСуффиксаЯзыка] = ?(ЗначениеЗаполнено(ПредставлениеНаДополнительномЯзыке), + ПредставлениеНаДополнительномЯзыке, Объект.Наименование); + + КонецЦикла; КонецЕсли; @@ -5546,8 +5661,8 @@ НастройкиКонвертации.ВосстанавливатьКонтактнуюИнформацию = Ложь; НастройкиКонвертации.Представление = СтрокаКИ.Представление; - КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(СтрокаКИ.ЗначенияПолей, - СтрокаКИ.Тип, НастройкиКонвертации); + КонтактнаяИнформацияПоПолям = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON( + СтрокаКИ.ЗначенияПолей, СтрокаКИ.Тип, НастройкиКонвертации); Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(КонтактнаяИнформацияПоПолям.AddressType) Тогда @@ -5691,7 +5806,8 @@ ПараметрыКонтактнойИнформацииЭлемента = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения]; // см. ПараметрыВыводаКонтактнойИнформации ПараметрыКонтактнойИнформацииЭлемента.ДобавленныеЭлементы.Добавить(СтрокаТабличнойЧасти.ИмяРеквизита, 2, Ложь); - ДобавитьРеквизитВОписание(Форма, СтрокаТабличнойЧасти, ДанныеВидовКонтактнойИнформацииТЧ, Ложь, Истина,, ИмяЭлементаДляРазмещения); + ДобавитьРеквизитВОписание(Форма, СтрокаТабличнойЧасти, ДанныеВидовКонтактнойИнформацииТЧ, Ложь, + Истина,, ИмяЭлементаДляРазмещения); ПредыдущийВидТЧ = ВидКонтактнойИнформацииТЧ; КонецЕсли; @@ -5703,8 +5819,8 @@ Если СтрокиТаблицы.Количество() = 1 Тогда СтрокаТаблицы = СтрокиТаблицы[0]; - СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита] = СтрокаТабличнойЧасти.Представление; - СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита + "Значение"] = СтрокаТабличнойЧасти.Значение; + СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита] = СтрокаТабличнойЧасти.Представление; + СтрокаТаблицы[СтрокаТабличнойЧасти.ИмяРеквизита + "Значение"] = СтрокаТабличнойЧасти.Значение; КонецЕсли; КонецЦикла; @@ -5734,7 +5850,8 @@ КонецЕсли; СтрокаОшибки = ""; - ЭлектроннаяПочта = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(АдресЭП, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + ЭлектроннаяПочта = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(АдресЭП, + Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); Попытка Результат = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(ЭлектроннаяПочта.Value); @@ -5770,12 +5887,15 @@ КонецЕсли; ВидРедактирования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидИнформации, "ВидРедактирования"); - Если ВидРедактирования = "Диалог" И СтрСравнить(Представление, УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()) = 0 Тогда + Если ВидРедактирования = "Диалог" + И СтрСравнить(Представление, УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()) = 0 Тогда Возврат 0; КонецЕсли; - КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению(Представление, ВидИнформации); - Значение = ?(ТипЗнч(КонтактнаяИнформация) = Тип("Структура"), УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация), ""); + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияПоПредставлению( + Представление, ВидИнформации); + Значение = ?(ТипЗнч(КонтактнаяИнформация) = Тип("Структура"), + УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(КонтактнаяИнформация), ""); ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Значение) Тогда @@ -5812,37 +5932,7 @@ СтрокаКИ.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеКонтактнойИнформации(СтрокаКИ.ЗначенияПолей); КонецЕсли; - // Локализация - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - - НастройкиКонвертации = НастройкиКонвертацииКонтактнойИнформации(); - НастройкиКонвертации.Представление = СтрокаКИ.Представление; - НастройкиКонвертации.ВосстанавливатьКонтактнуюИнформацию = Ложь; - - Результат = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, - СтрокаКИ.Вид, РезультатПреобразования, НастройкиКонвертации); - СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, ""); - - Если РезультатПреобразования.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда - Возврат; - КонецЕсли; - - Если РезультатПреобразования.СведенияИсправлены Тогда - СтрокаКИ.ЗначенияПолей = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияXDTOВXML(Результат); - КонецЕсли; - - Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда - ОбщегоНазначения.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); - КонецЕсли; - - Форма.Модифицированность = Истина; - КонецЕсли; - // Конец Локализация + УправлениеКонтактнойИнформациейЛокализация.СкорректироватьКонтактнуюИнформацию(Форма, СтрокаКИ, РезультатПреобразования); Иначе @@ -5880,7 +5970,8 @@ КонецЕсли; Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - СписокОшибок = Обработки["РасширенныйВводКонтактнойИнформации"].ОшибкиЗаполненияАдреса(Источник, ВидИнформации); + МодульРасширенныйВводКонтактнойИнформации = ОбщегоНазначения.ОбщийМодуль("Обработки.РасширенныйВводКонтактнойИнформации"); + СписокОшибок = МодульРасширенныйВводКонтактнойИнформации.ОшибкиЗаполненияАдреса(Источник, ВидИнформации); Для Каждого Элемент Из СписокОшибок Цикл ВывестиСообщениеПользователю(Элемент.ТекстОшибки, ИмяРеквизита, ПолеРеквизита); @@ -5926,7 +6017,8 @@ МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); КонецЕсли; - СписокОшибок = УправлениеКонтактнойИнформациейКлиентСервер.ОшибкиЗаполненияТелефона(СведенияОТелефоне, МодульРаботаСАдресами); + СписокОшибок = УправлениеКонтактнойИнформациейКлиентСервер.ОшибкиЗаполненияТелефона(СведенияОТелефоне, + МодульРаботаСАдресами); Для Каждого Элемент Из СписокОшибок Цикл @@ -5991,7 +6083,8 @@ Для Каждого СтрокаКИ Из КонтактнаяИнформация Цикл НоваяСтрокаКИ = Объект.КонтактнаяИнформация.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаКИ, СтрокаКИ, , "ЗначенияПолей"); - НоваяСтрокаКИ.ЗначенияПолей = КонтактнаяИнформацияВXML(СтрокаКИ.ЗначенияПолей, СтрокаКИ.Представление, СтрокаКИ.Вид); + НоваяСтрокаКИ.ЗначенияПолей = КонтактнаяИнформацияВXML(СтрокаКИ.ЗначенияПолей, + СтрокаКИ.Представление, СтрокаКИ.Вид); КонецЦикла; КонецЕсли; @@ -6081,7 +6174,8 @@ ПараметрыКонтактнойИнформации.Вставить("РазрешитьДобавлениеПолей", ДополнительныеПараметры.РазрешитьДобавлениеПолей); ПараметрыКонтактнойИнформации.Вставить("ШиринаПоляКомментарий", ДополнительныеПараметры.ШиринаПоляКомментарий); ПараметрыКонтактнойИнформации.Вставить("ПоложениеКнопкиДобавить", Строка(ДополнительныеПараметры.ПоложениеКнопкиДобавить)); - ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещенияОграниченаШириной", ГруппаДляРазмещенияОграниченаШириной(Форма.Элементы[ИмяЭлементаДляРазмещения])); + ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещенияОграниченаШириной", + ГруппаДляРазмещенияОграниченаШириной(Форма.Элементы[ИмяЭлементаДляРазмещения])); ПараметрыАдреса = Новый Структура("ТипПомещения, Страна, Индекс", "Квартира"); ПараметрыКонтактнойИнформации.Вставить("ПараметрыАдреса", ПараметрыАдреса); @@ -6180,10 +6274,10 @@ КонецФункции -Процедура СоздатьДействие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") +Процедура СоздатьДействие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, + ИмяЭлементаДляРазмещения = "ГруппаКонтактнаяИнформация") Тип = ВидКонтактнойИнформации.Тип; - ПараметрыКИ = ПараметрыКонтактнойИнформацииФормы(Форма.ПараметрыКонтактнойИнформации, ИмяЭлементаДляРазмещения); ОтображатьИсторию = ВидКонтактнойИнформации.ХранитьИсториюИзменений И Не ВидКонтактнойИнформации.ПометкаУдаления; @@ -6310,10 +6404,9 @@ СтрокаКонтактнойИнформации.Представление, СтрокаКонтактнойИнформации.Тип); СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(АдресПоПолям); - Если ЕстьЗначенияПолей И УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - СтрокаКонтактнойИнформации.ЗначенияПолей = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзJSONВXML( - СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.Тип); + Если ЕстьЗначенияПолей Тогда + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнуюИнформациюИзJSONВXML( + СтрокаКонтактнойИнформации.Значение, СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); КонецЕсли; ИначеЕсли Не ПустыеЗначенияПолей Тогда @@ -6510,7 +6603,8 @@ Значение = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "Значение"]; - ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Значение, ИдентификаторСтроки); + ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Значение, + ИдентификаторСтроки); КонецЦикла; @@ -6520,7 +6614,8 @@ Продолжить; КонецЕсли; - ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, СтрокаТаблицы.Значение); + ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, + СтрокаТаблицы.Значение); КонецЕсли; @@ -6530,7 +6625,8 @@ КонецФункции -Процедура ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Знач Значение, Знач ИдентификаторСтроки = Неопределено) +Процедура ПеренестиЗаписьКонтактнойИнформацииИзФормыВТаблицу(КонтактнаяИнформация, СтрокаТаблицы, Знач Значение, + Знач ИдентификаторСтроки = Неопределено) Если ПустаяСтрока(Значение) Тогда Возврат; @@ -6554,10 +6650,7 @@ СтрокаКонтактнойИнформации.Представление = ОбъектКИ.Value; СтрокаКонтактнойИнформации.Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ОбъектКИ); - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - СтрокаКонтактнойИнформации.ЗначенияПолей = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзJSONВXML(ОбъектКИ, СтрокаТаблицы.Тип); - КонецЕсли; + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнуюИнформациюИзJSONВXML(ОбъектКИ, СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаТаблицы.Тип); Если ЗначениеЗаполнено(ДействуетС) Тогда СтрокаКонтактнойИнформации.Дата = ДействуетС; @@ -6902,9 +6995,10 @@ КонецФункции -Функция СформироватьТекстЗапроса(Знач ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти, Знач ТекстЗапросаИсторическаяИнформация, Знач ЭтоОсновнойЯзык) +Функция СформироватьТекстЗапроса(Знач ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти, + Знач ТекстЗапросаИсторическаяИнформация, Знач ЭтоОсновнойЯзык) - ТекстЗапроса = "ВЫБРАТЬ + ТекстЗапроса = "ВЫБРАТЬ | КонтактнаяИнформация.Представление КАК Представление, | КонтактнаяИнформация.Значение КАК Значение, | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, @@ -6977,7 +7071,8 @@ Если ЗначениеЗаполнено(СуффиксТекущегоЯзыка) Тогда МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); - МодульМультиязычностьСервер.ИзменитьПолеЗапросаПодТекущийЯзык(ТекстЗапроса, "ВидыКонтактнойИнформации.Наименование КАК Наименование"); + МодульМультиязычностьСервер.ИзменитьПолеЗапросаПодТекущийЯзык(ТекстЗапроса, + "ВидыКонтактнойИнформации.Наименование КАК Наименование"); КонецЕсли; Иначе @@ -7056,7 +7151,8 @@ Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); КонецЕсли; - ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница И ОбработкаНавигационнойСсылки + И Элемент.Вид = ВидПоляФормы.ПолеНадписи Тогда Если Не ЗначениеЗаполнено(Элемент.ПолучитьДействие("ОбработкаНавигационнойСсылки")) Тогда Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки"); @@ -7110,7 +7206,8 @@ ИмяЭлементаКомментарий = "Комментарий" + СтрокаКИ.ИмяРеквизита; Если Форма.Элементы.Найти(ИмяЭлементаКомментарий) <> Неопределено Тогда Если Не ЗначениеЗаполнено(Форма.Элементы[ИмяЭлементаКомментарий].ПолучитьДействие("ПриИзменении")) Тогда - Форма.Элементы[ИмяЭлементаКомментарий].УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); + Форма.Элементы[ИмяЭлементаКомментарий].УстановитьДействие("ПриИзменении", + "Подключаемый_КонтактнаяИнформацияПриИзменении"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -7276,4 +7373,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index a87b09490..486fdb8e6 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -227,12 +227,12 @@ КонецПроцедуры -// Конструктор для структуры параметров открытия формы контактной информации. +// Конструктор для параметров открытия формы контактной информации в ОткрытьФормуКонтактнойИнформации. // Состав полей может быть расширен в общем модуле РаботаСАдресамиКлиент свойствами с национальной спецификой. // // Параметры: // ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - вид редактируемой контактной информации. -// - Структура - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации +// - см. УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации // Значение - Строка - сериализованное значение полей контактной информации в формате JSON или XML. // Представление - Строка - представление контактной информации. // Комментарий - Строка - комментарий контактной информации. @@ -298,15 +298,15 @@ КонецФункции -// Открывает подходящую форму контактной информации для редактирования или просмотра. +// Открывает соответствующую форму для просмотра и ввода контактной информации. // -// Параметры: -// Параметры - Произвольный - результат функции ПараметрыФормыКонтактнойИнформации. -// Владелец - Произвольный - параметр для открываемой формы. -// Оповещение - ОписаниеОповещения - для обработки закрытия формы. +// Параметры: +// Параметры - см. ПараметрыФормыКонтактнойИнформации +// Владелец - Произвольный - параметр для открываемой формы. +// Оповещение - ОписаниеОповещения - для обработки закрытия формы. // // Возвращаемое значение: -// ФормаКлиентскогоПриложения - необходимая форма. +// ФормаКлиентскогоПриложения // Функция ОткрытьФормуКонтактнойИнформации(Параметры, Владелец = Неопределено, Оповещение = Неопределено) Экспорт Параметры.Вставить("ОткрытаПоСценарию", Истина); @@ -591,23 +591,31 @@ // Процедура ПерейтиПоВебСсылке(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено) Экспорт + ТипВебСтраница = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница"); Если ОжидаемыйВид = Неопределено Тогда - ОжидаемыйВид = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница"); + ОжидаемыйВид = ТипВебСтраница; КонецЕсли; - КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ПривестиКонтактнуюИнформациюXML( - Новый Структура("ЗначенияПолей, Представление, ВидКонтактнойИнформации", ЗначенияПолей, Представление, ОжидаемыйВид)); - ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; - - Если ТипИнформации <> ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Нельзя открыть ссылку по контактной информации с типом ""%1""'"), ТипИнформации); + Если ПустаяСтрока(ЗначенияПолей) И Не ПустаяСтрока(Представление) И ОжидаемыйВид = ТипВебСтраница Тогда + АдресСсылки = Представление; + Иначе + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.ПривестиКонтактнуюИнформациюXML( + Новый Структура("ЗначенияПолей, Представление, ВидКонтактнойИнформации", ЗначенияПолей, Представление, + ОжидаемыйВид)); + ТипИнформации = КонтактнаяИнформация.ТипКонтактнойИнформации; + + Если ТипИнформации <> ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( + "ru = 'Нельзя открыть ссылку по контактной информации с типом ""%1""'"), ТипИнформации); + КонецЕсли; + + XMLДанные = КонтактнаяИнформация.ДанныеXML; + + АдресСсылки = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.СтрокаСоставаКонтактнойИнформации(XMLДанные); КонецЕсли; - XMLДанные = КонтактнаяИнформация.ДанныеXML; - - АдресСсылки = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.СтрокаСоставаКонтактнойИнформации(XMLДанные); Если ТипЗнч(АдресСсылки) <> Тип("Строка") Тогда - ВызватьИсключение НСтр("ru = 'Ошибка получения ссылки, неверный тип контактной информации'"); + ВызватьИсключение НСтр("ru = 'Невозможно перейти по ссылке, неверный тип контактной информации.'"); КонецЕсли; Если СтрНайти(АдресСсылки, "://") > 0 Тогда @@ -617,22 +625,30 @@ КонецЕсли; КонецПроцедуры -// Показывает адрес в браузере на картах Яндекс или Google. +// Отображает адрес в браузере с помощью интерактивных карт. Например на Google Maps. // // Параметры: // Адрес - Строка - текстовое представление адреса. -// ИмяКартографическогоСервиса - Строка - имя картографического сервиса, в котором необходимо показать адрес: -// Яндекс.Карты или GoogleMaps. +// ИмяКартографическогоСервиса - Строка - имя картографического сервиса, в котором необходимо показать адрес. +// Например, GoogleMaps. // Процедура ПоказатьАдресНаКарте(Адрес, ИмяКартографическогоСервиса) Экспорт + АдресКодированный = ДекодированиеСтроки(Адрес); Если ИмяКартографическогоСервиса = "GoogleMaps" Тогда СтрокаЗапуска = "https://maps.google.com/?q=" + АдресКодированный; Иначе - СтрокаЗапуска = "https://maps.yandex.com/?text=" + АдресКодированный; + Ресурс = ""; + УправлениеКонтактнойИнформациейКлиентЛокализация.ПриОпределенииURLКартографическогоСервиса(ИмяКартографическогоСервиса, Ресурс); + Если ЗначениеЗаполнено(Ресурс) Тогда + СтрокаЗапуска = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Ресурс, АдресКодированный) + КонецЕсли; + + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаЗапуска) Тогда + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); КонецЕсли; - - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); КонецПроцедуры @@ -719,6 +735,7 @@ КонецПроцедуры + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать АвтоПодборАдреса. @@ -1048,6 +1065,33 @@ ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат, ДополнительныеПараметры.АсинхронныйВызов); КонецПроцедуры +// Конструктор параметра КонтактнаяИнформация для выполнения команд контактной информации +// +// Параметры: +// Представление - Строка - представление контактной информации. +// Значение - Строка - значение полей контактной информации в формате JSON или XML. +// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации +// Вид - СправочникСсылка.ВидыКонтактнойИнформации +// +// Возвращаемое значение: +// Структура: +// * Представление - Строка - представление контактной информации. +// * Значение - Строка - значение полей контактной информации в формате JSON или XML. +// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации +// * Вид - СправочникСсылка.ВидыКонтактнойИнформации +// +Функция ПараметрКонтактнаяИнформацияДляВыполненияКоманд(Представление, Значение, Тип, Вид) Экспорт + + КонтактнаяИнформация = Новый Структура; + КонтактнаяИнформация.Вставить("Представление", Представление); + КонтактнаяИнформация.Вставить("Значение", Значение); + КонтактнаяИнформация.Вставить("Тип", Тип); + КонтактнаяИнформация.Вставить("Вид", Вид); + + Возврат КонтактнаяИнформация; + +КонецФункции + Процедура ПослеЗапускаПриложения(ПриложениеЗапущено, Параметры) Экспорт Если Не ПриложениеЗапущено Тогда @@ -1063,6 +1107,20 @@ #Область СлужебныеПроцедурыИФункции +Асинх Функция ПоместитьТекстВБуфераОбмена(Текст) Экспорт + + Если СредстваБуфераОбмена.ИспользованиеДоступно() Тогда + ФорматДанных = СтандартныйФорматДанныхБуфераОбмена.Текст; + Если Ждать СредстваБуфераОбмена.ПоддерживаетсяФорматДанных(ФорматДанных) Тогда + ПомещаемыеДанные = Новый ЭлементБуфераОбмена(ФорматДанных, Текст); + Возврат Ждать СредстваБуфераОбмена.ПоместитьДанныеАсинх(ПомещаемыеДанные); + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Обработчики событий Процедура ПриНачалеВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка, ПараметрыОткрытия, АсинхронныйВызов) @@ -1916,33 +1974,6 @@ КонецПроцедуры -// Конструктор параметра КонтактнаяИнформация для выполнения команд контактной информации -// -// Параметры: -// Представление - Строка - представление контактной информации. -// Значение - Строка - значение полей контактной информации в формате JSON или XML. -// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации -// Вид - СправочникСсылка.ВидыКонтактнойИнформации -// -// Возвращаемое значение: -// Структура: -// * Представление - Строка - представление контактной информации. -// * Значение - Строка - значение полей контактной информации в формате JSON или XML. -// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации -// * Вид - СправочникСсылка.ВидыКонтактнойИнформации -// -Функция ПараметрКонтактнаяИнформацияДляВыполненияКоманд(Представление, Значение, Тип, Вид) - - КонтактнаяИнформация = Новый Структура; - КонтактнаяИнформация.Вставить("Представление", Представление); - КонтактнаяИнформация.Вставить("Значение", Значение); - КонтактнаяИнформация.Вставить("Тип", Тип); - КонтактнаяИнформация.Вставить("Вид", Вид); - - Возврат КонтактнаяИнформация; - -КонецФункции - // Конструктор дополнительных параметров для выполнения команд контактной информации // // Параметры: @@ -1957,7 +1988,7 @@ // * ИмяРеквизита - Строка - служебный параметр, не предназначен для использования // * АсинхронныйВызов - Булево - служебный параметр, не предназначен для использования // -Функция ДополнительныеПараметрыДляВыполненияКоманд(ВладелецКонтактнойИнформации, Форма, ИмяРеквизита = "", АсинхронныйВызов = Ложь) +Функция ДополнительныеПараметрыДляВыполненияКоманд(ВладелецКонтактнойИнформации, Форма, ИмяРеквизита = "", АсинхронныйВызов = Ложь) Экспорт ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ВладелецКонтактнойИнформации", ВладелецКонтактнойИнформации); @@ -2048,19 +2079,9 @@ КонецПроцедуры -Процедура ПередПоказомАдресаНаКартеGoogle(КонтактнаяИнформация, ДополнительныеПараметры) Экспорт +Процедура ПоказатьАдресНаКартеGoogle(КонтактнаяИнформация, ДополнительныеПараметры) Экспорт - АдресКодированный = ДекодированиеСтроки(КонтактнаяИнформация.Представление); - СтрокаЗапуска = "https://maps.google.com/?q=" + АдресКодированный; - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); - -КонецПроцедуры - -Процедура ПередПоказомАдресаНаКартеЯндекс(КонтактнаяИнформация, ДополнительныеПараметры) Экспорт - - АдресКодированный = ДекодированиеСтроки(КонтактнаяИнформация.Представление); - СтрокаЗапуска = "https://maps.yandex.com/?text=" + АдресКодированный; - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(СтрокаЗапуска); + ПоказатьАдресНаКарте(КонтактнаяИнформация.Представление, "GoogleMaps"); КонецПроцедуры @@ -2120,14 +2141,30 @@ Параметры = Новый Структура("КонтактнаяИнформация, ДополнительныеПараметры", КонтактнаяИнформация, ДополнительныеПараметры); - Если ИмяКоманды = "ПоказатьНаКарте" Тогда + Если СтрСравнить(ИмяКоманды, "ПоказатьНаКарте") = 0 Тогда Список = Новый СписокЗначений; - ПоказатьНаКартеЯндекс = КомандыДляВывода.ПоказатьНаКартеЯндекс; - Список.Добавить(ПоказатьНаКартеЯндекс.Действие, ПоказатьНаКартеЯндекс.Заголовок, , - ПоказатьНаКартеЯндекс.Картинка); - ПоказатьНаКартеGoogle = КомандыДляВывода.ПоказатьНаКартеGoogle; - Список.Добавить(ПоказатьНаКартеGoogle.Действие, ПоказатьНаКартеGoogle.Заголовок, , - ПоказатьНаКартеGoogle.Картинка); + + Для каждого КомандаДляВывода Из КомандыДляВывода Цикл + + ВидДействия = УправлениеКонтактнойИнформациейКлиентСервер.ВидДействияКомандыТипаКонтактнойИнформации( + КомандаДляВывода.Значение.Действие); + + Если ПустаяСтрока(ВидДействия) Тогда + УправлениеКонтактнойИнформациейКлиентСерверЛокализация.ПриОпределенияДействияКомандыТипаКонтактнойИнформации( + КомандаДляВывода.Значение.Действие, ВидДействия); + КонецЕсли; + + Если СтрСравнить(ВидДействия, "ПоказатьНаКарте") = 0 Тогда + Список.Добавить(КомандаДляВывода.Значение.Действие, КомандаДляВывода.Значение.Заголовок,, + КомандаДляВывода.Значение.Картинка); + КонецЕсли; + КонецЦикла; + + Если Список.Количество() = 1 Тогда + ВыполнитьКомандуКонтактнойИнформации(Список.Получить(0).Значение, Параметры); + Возврат; + КонецЕсли; + ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМеню", ЭтотОбъект, Параметры); Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Элемент); Иначе diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентЛокализация/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентЛокализация/Module.bsl new file mode 100644 index 000000000..b438903b2 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентЛокализация/Module.bsl @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// При определении адрес ресурса(URL) картографического сервиса. +// +// Параметры: +// ИмяКартографическогоСервиса - Строка - Имя картографического сервиса; +// АдресРесурса - Строка - адрес ресурса в интернете, ведущий на картографический сайт. В АдресРесурса необходимо обязательно +// указать параметр %1, куда будет подставлен искомый адрес для отображения на карте. +// Например: https://www.openstreetmap.org/search?query=%1. +// +Процедура ПриОпределенииURLКартографическогоСервиса(ИмяКартографическогоСервиса, АдресРесурса) Экспорт + + // Локализация + Если ИмяКартографическогоСервиса = "Яндекс.Карты" Тогда + АдресРесурса = "https://maps.yandex.com/?text=%1"; + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// Показать адрес на карте Яндекс. +// +// Параметры: +// КонтактнаяИнформация - см. УправлениеКонтактнойИнформациейКлиент.ПараметрКонтактнаяИнформацияДляВыполненияКоманд +// ДополнительныеПараметры - см. УправлениеКонтактнойИнформациейКлиент.ДополнительныеПараметрыДляВыполненияКоманд +// +Процедура ПоказатьАдресНаКартеЯндекс(КонтактнаяИнформация, ДополнительныеПараметры) Экспорт + + // Локализация + УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(КонтактнаяИнформация.Представление, "Яндекс.Карты"); + // Конец Локализация + +КонецПроцедуры + +// Определяет очередность полей в представлении адреса. +// Вызывается только в международной поставке. +// +// Параметры: +// ПорядокПолей - Массив - набор полей в нужном порядке. Например, "area", "ZIPcode", "city". +// Страна - СправочникСсылка.СтраныМира - ссылка на справочник стран мира +// ВключатьСтрануВПредставление - Булево - Истина, если в настройках вида контактной информации установлен признак +// включения страны в представление адреса. +// +Процедура ПриОпределенииПорядкаПолейАдреса(ПорядокПолей, Страна, ВключатьСтрануВПредставление) Экспорт + + // Локализация + Если СтрСравнить(Страна, "Перу") = 0 Тогда + + ПорядокПолей.Добавить("street"); + ПорядокПолей.Добавить("houseNumber"); + ПорядокПолей.Добавить("city"); + ПорядокПолей.Добавить("area"); + ПорядокПолей.Добавить("zipCode"); + Если ВключатьСтрануВПредставление Тогда + ПорядокПолей.Добавить("country"); + КонецЕсли; + + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентЛокализация/УправлениеКонтактнойИнформациейКлиентЛокализация.mdo b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентЛокализация/УправлениеКонтактнойИнформациейКлиентЛокализация.mdo new file mode 100644 index 000000000..fbb34240b --- /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 0b213ac68..fd71a7941 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -97,6 +97,9 @@ Возврат СокрЛП(Значение) <> ТекстПустогоАдресаВВидеГиперссылки(); КонецФункции + + + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации @@ -204,19 +207,24 @@ // // Возвращаемое значение: // Структура - поля контактной информации: -// * Value - Строка - представление контактной информации. -// * Comment - Строка - комментарий. -// * Type - Строка - тип контактной информации. См. значение в Перечисление.ТипыКонтактнойИнформации.Адрес. +// * value - Строка - представление контактной информации. +// * comment - Строка - комментарий. +// * type - Строка - тип контактной информации. См. значение в Перечисление.ТипыКонтактнойИнформации.Адрес. // Расширенный состав полей для типа контактной информации адрес: -// * Country - Строка - наименование страны, например "Россия". -// * CountryCode - Строка -код страны. +// * country - Строка - наименование страны, например "Уругвай". +// * countryCode - Строка -код страны. // * ZIPcode- Строка - почтовый индекс. -// * Area - Строка - наименование региона. -// * AreaType - Строка - сокращение(тип) региона. -// * City - Строка - наименование города. -// * CityType - Строка - сокращение (тип) города, например "г". -// * Street - Строка - наименование улицы. -// * StreetType - Строка - сокращение (тип) улицы, например "ул". +// * area - Строка - наименование региона. +// * areaType - Строка - сокращение(тип) региона. +// * city - Строка - наименование города. +// * cityType - Строка - сокращение (тип) города, например "г". +// * street - Строка - название улицы, проспекта, переулка и т.д.. Но также может содержать номер дома, квартиры или +// офиса. +// * streetType - Строка - сокращение (тип) улицы, например "ул". +// * houseNumber - Строка - дополнительное поле, которое используется для уточнения или добавления информации. +// Например, номер дома, Название здания, номер подъезда или этаж +// * admLevels - Строка - порядок вывода полей при формировании представления адреса. Например, "ZIPcode,Area,Street" +// * addressType - Строка - тип адреса: в свободной форме или с разбивкой по полям. // Расширенный состав полей для типа контактной информации телефон: // * CountryCode - Строка - код страны. // * AreaCode - Строка - региональный код. @@ -248,6 +256,8 @@ Результат.Вставить("cityType", ""); Результат.Вставить("street", ""); Результат.Вставить("streetType", ""); + Результат.Вставить("houseNumber", ""); + Результат.Вставить("admLevels", ""); ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда @@ -313,6 +323,49 @@ КонецФункции +// Возвращает структуру полей адреса для программного формирования международного адреса. +// При наличии общего модуля РаботаСАдресами следует вызывать функция из этого модуля. +// +// Возвращаемое значение: +// Структура: +// * Представление - Строка - текстовое представление адреса по административно-территориальному делению. +// Например, "08681, Центральный регион, город Лима, ул. Широкая, дом 1". +// * ТипАдреса - Строка - основной тип адреса (только для адресов РФ). +// Варианты: "ВСвободнойФорме", "Иностранный". +// * Страна - Строка - текстовое представление страны. Например, "Перу". +// * КодСтраны - Строка - код страны. Например, "604". +// * Индекс - Строка - почтовый индекс. Например, "08681". +// * Регион - Строка - текстовое представление региона или штата. Например, "Центральный регион". +// * Город - Строка - текстовое представление города у адресов. +// * Улица - Строка - текстовое представление улицы. Например "Широкая". +// * ДополнительнаяИнформация - Строка - текстовое представление дополнительной информации. Например, когда +// требуется указать детали, такие как квартира, офис, этаж или другие уточнения. +// * Комментарий - Строка - комментарий к адресу. +// +Функция ПоляАдреса() Экспорт + + Результат = Новый Структура; + + Результат.Вставить("ТипАдреса" , ""); + Результат.Вставить("Комментарий" , ""); + + Результат.Вставить("Представление" , ""); + + Результат.Вставить("Страна" , ""); + Результат.Вставить("КодСтраны", ""); + Результат.Вставить("Индекс" , ""); + + Результат.Вставить("Регион" , ""); + Результат.Вставить("Район" , ""); + Результат.Вставить("Город" , ""); + Результат.Вставить("Улица" , ""); + + Результат.Вставить("ДополнительнаяИнформация", ""); + + Возврат Результат; + +КонецФункции + Функция ТипКонтактнойИнформацииВСтроку(Знач ТипКонтактнойИнформации) Результат = Новый Соответствие; @@ -463,7 +516,6 @@ // Параметры: // КомандыДляВывода - Структура: // * ВвестиКомментарийКАдресу - см. УправлениеКонтактнойИнформацией.СвойстваКоманды -// * ПоказатьНаКартеЯндекс - см. УправлениеКонтактнойИнформацией.СвойстваКоманды // * ПоказатьНаКартеGoogle - см. УправлениеКонтактнойИнформацией.СвойстваКоманды // * ЗапланироватьВстречу - см. УправлениеКонтактнойИнформацией.СвойстваКоманды // * ПоказатьИсториюИзменений - см. УправлениеКонтактнойИнформацией.СвойстваКоманды @@ -481,17 +533,20 @@ Иначе ИзменитьКомментарий = ""; КонецЕсли; - - Если КомандыДляВывода.Свойство("ПоказатьНаКартеЯндекс") И КомандыДляВывода.Свойство("ПоказатьНаКартеGoogle") Тогда - ПоказатьНаКарте = Новый ФорматированнаяСтрока(НСтр("ru='На карте'"),,WebЦвета.Серый, , "ПоказатьНаКарте"); - ИначеЕсли КомандыДляВывода.Свойство("ПоказатьНаКартеЯндекс") Тогда - ПоказатьНаКарте = Новый ФорматированнаяСтрока(КомандыДляВывода.ПоказатьНаКартеЯндекс.Заголовок, ,WebЦвета.Серый, , "ПоказатьНаКартеЯндекс"); - ИначеЕсли КомандыДляВывода.Свойство("ПоказатьНаКартеGoogle") Тогда - ПоказатьНаКарте = Новый ФорматированнаяСтрока(КомандыДляВывода.ПоказатьНаКартеGoogle.Заголовок, ,WebЦвета.Серый, , "ПоказатьНаКартеGoogle"); - Иначе - ПоказатьНаКарте = ""; - КонецЕсли; - + + ПоказатьНаКарте = ""; + Для каждого КомандаДляВывода Из КомандыДляВывода Цикл + ВидДействия = ВидДействияКомандыТипаКонтактнойИнформации(КомандаДляВывода.Значение.Действие); + Если СтрСравнить(ВидДействия, "ПоказатьНаКарте") = 0 Тогда + Если ПустаяСтрока(ПоказатьНаКарте) Тогда + ПоказатьНаКарте = Новый ФорматированнаяСтрока(КомандаДляВывода.Значение.Заголовок,, WebЦвета.Серый,, ВидДействия); + Иначе + ПоказатьНаКарте = Новый ФорматированнаяСтрока(НСтр("ru = 'На карте'"),, WebЦвета.Серый,, ВидДействия); + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если КомандыДляВывода.Свойство("ПоказатьИсториюИзменений") Тогда ПоказатьИсторию = Новый ФорматированнаяСтрока("История", ,WebЦвета.Серый, , "ПоказатьИсториюИзменений"); Иначе @@ -524,6 +579,18 @@ КонецФункции +Функция ВидДействияКомандыТипаКонтактнойИнформации(Действие) Экспорт + + Если Действие = "УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКартеGoogle" Тогда + ВидДействия = "ПоказатьНаКарте"; + Иначе + ВидДействия = ""; + УправлениеКонтактнойИнформациейКлиентСерверЛокализация.ПриОпределенияДействияКомандыТипаКонтактнойИнформации(Действие, ВидДействия); + КонецЕсли; + Возврат ВидДействия; + +КонецФункции + #Область СлужебныеПроцедурыИФункцииПоРаботеСXMLАдресами // Возвращает структуру с наименованием и сокращением от значения. @@ -850,4 +917,5 @@ #КонецОбласти -#КонецОбласти \ 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..731c55dce --- /dev/null +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСерверЛокализация/Module.bsl @@ -0,0 +1,27 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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..0f6b242ec --- /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 0eec44ece..3b721815d 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейЛокализация/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейЛокализация/Module.bsl @@ -6,6 +6,350 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Возвращает описание команд, предназначенные для типа контактной информации, переданного в качестве параметра. +// Полученное соответствие используется в УправлениеКонтактнойИнформациейПереопределяемый.ПриОпределенииНастроек. +// КомандыТипа - выходной параметр. +// +// Параметры: +// КомандыТипа - Структура: +// * Ключ - Строка - имя команды, например "ПоказатьНаКарте". +// * Значение - см. УправлениеКонтактнойИнформацией.СвойстваКоманды +// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. +// +Процедура ПриОпределениеКомандТипаКонтактнойИнформации(КомандыТипа, Тип) Экспорт + + // Локализация + Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + СвойстваКоманды = УправлениеКонтактнойИнформацией.СвойстваКоманды( + НСтр("ru = 'Адрес на Яндекс.Картах'"), + НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'"), + БиблиотекаКартинок.ЯндексКарты, + "УправлениеКонтактнойИнформациейКлиентЛокализация.ПоказатьАдресНаКартеЯндекс"); + + КомандыТипа.Вставить("ПоказатьНаКартеЯндекс", СвойстваКоманды); + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// Преобразует контактную информацию из формата JSON в формат XML. +// +// Параметры: +// КонтактнаяИнформацияВJSON - Строка - контактная информация во внутреннем формате JSON. +// КонтактнаяИнформацияВXML - Строка - выходной параметр. Контактная информация в формате XML. +// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - используется для определения типа, +// если его невозможно вычислить автоматически по данным JSON. +// +Процедура ПриКонвертированииКонтактнуюИнформациюИзJSONВXML(Знач КонтактнаяИнформацияВJSON, КонтактнаяИнформацияВXML, ОжидаемыйТип = Неопределено) Экспорт + + // Локализация + КонтактнаяИнформацияВXML = КонтактнаяИнформацияИзJSONВXML(КонтактнаяИнформацияВJSON, ОжидаемыйТип); + // Конец Локализация + +КонецПроцедуры + +// При конвертировании контактной информации из XML в объекта XDTO. +// +// Параметры: +// Текст - Строка - контактная информация во формате XML +// КонтактнаяИнформация - ОбъектXDTO - выходной параметр. Контактная информация в формате объекта XDTO. +// ОжидаемыйВид - ПеречислениеСсылка.ТипыКонтактнойИнформации - ожидаемый вид типа контактной информации. +// РезультатПреобразования - Структура: +// * СведенияИсправлены - Булево - Истина, если сведения были скорректированы +// - Неопределено - преобразование не выполнялось. +// НастройкиКонвертации - см. УправлениеКонтактнойИнформацией.НастройкиКонвертацииКонтактнойИнформации +// +Процедура ПриКонвертированииКонтактнойИнформацииИзXML(Знач Текст, КонтактнаяИнформация, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, НастройкиКонвертации = Неопределено) Экспорт + + // Локализация + КонтактнаяИнформация = КонтактнаяИнформацияИзXML(Текст, ОжидаемыйВид,РезультатПреобразования, НастройкиКонвертации); + // Конец Локализация + +КонецПроцедуры + +// При конвертировании контактной информации в структуру JSON. +// +// Параметры: +// КонтактнаяИнформация - Строка - контактная информация во формате XML +// КонтактнаяИнформацияJSON - Строка - выходной параметр. Контактная информация в формате JSON +// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - ожидаемый вид типа контактной информации. +// НастройкиКонвертации - Структура +// +Процедура ПриКонвертированииКонтактнойИнформацииВСтруктуруJSON(КонтактнаяИнформация, КонтактнаяИнформацияJSON, Тип, НастройкиКонвертации) Экспорт + + // Локализация + КонтактнаяИнформацияJSON = КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Тип, НастройкиКонвертации); + // Конец Локализация + +КонецПроцедуры + +// Преобразует входные данные контактной информации в формат XML. +// +// Параметры: +// Данные - см. УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеКонтактнойИнформации +// Результат - см. УправлениеКонтактнойИнформацией.ПоляКонтактнойИнформацииДляПреобразования +// СтандартнаяОбработка - Булево - выходной параметр. Установить Ложь, если реализовано собственное преобразование. +// +Процедура ПриПриведенииКонтактнойИнформацииВXML(Знач Данные, Результат, СтандартнаяОбработка) Экспорт + + // Локализация + СтандартнаяОбработка = Ложь; + Результат = ПривестиКонтактнуюИнформациюXML(Данные); + // Конец Локализация + +КонецПроцедуры + +// Выполняет преобразование контактной информации, включающей номер телефона, в объект типа XDTO. +// +// Параметры: +// ЗначенияПолей - Строка - контактная информация +// Результат - ОбъектXDTO - выходной параметр. Результат преобразования контактной информации в ОбъектXDTO +// Представление - Строка - представление контактной информации +// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации +// +Процедура ПриКонвертацииТелефонаВОбъектXDTO(ЗначенияПолей, Результат, Представление = "", ОжидаемыйТип = Неопределено) Экспорт + + // Локализация + Результат = ДесериализацияТелефонаФакса(ЗначенияПолей, Представление, ОжидаемыйТип); + // Конец Локализация + +КонецПроцедуры + +// Выполняет преобразование контактной информации, включающей номер факса, в объект типа XDTO. +// +// Параметры: +// ЗначенияПолей - Строка - контактная информация +// Результат - ОбъектXDTO - выходной параметр. Результат преобразования контактной информации в ОбъектXDTO +// Представление - Строка - представление контактной информации +// ОжидаемыйТип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации +// +Процедура ПриКонвертацииФаксаВОбъектXDTO(ЗначенияПолей, Результат, Представление = "", ОжидаемыйТип = Неопределено) Экспорт + + // Локализация + Результат = ДесериализацияТелефонаФакса(ЗначенияПолей, Представление, ОжидаемыйТип); + // Конец Локализация + +КонецПроцедуры + +// Добавление комментария к контактной информации. +// +// Параметры: +// КонтактнаяИнформация - Строка - контактная информация, для которой будет добавлен комментарий. +// Комментарий - Строка - комментарий контактной информации +// +Процедура ПриУстановкеКомментарияКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт + + // Локализация + ЭтоСтрока = ТипЗнч(КонтактнаяИнформация) = Тип("Строка"); + Если ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + // Предыдущий формат значений полей, комментарий отсутствует. + Возврат; + КонецЕсли; + + ОбъектXDTO = ?(ЭтоСтрока, КонтактнаяИнформацияИзXML(КонтактнаяИнформация), КонтактнаяИнформация); + ОбъектXDTO.Комментарий = Комментарий; + Если ЭтоСтрока Тогда + КонтактнаяИнформация = КонтактнаяИнформацияXDTOВXML(ОбъектXDTO); + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// Определяет тип контактной информации. +// +// Параметры: +// XMLСтрока - Строка - контактная информация в формате XML. +// Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - выходной параметр. Тип контактной информации. +// +Процедура ПриОпределенииТипаКонтактнойИнформации(Знач XMLСтрока, Тип) Экспорт + // Локализация + Тип = ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); + // Конец Локализация +КонецПроцедуры + +// При преобразовании представления контактной информации в XDTO объект. +// +// Параметры: +// Текст - Строка - представление контактной информации. +// Результат - ОбъектXDTO - выходной параметр. Результат преобразования +// ОжидаемыйВид - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации. +// +Процедура ПриПреобразованииКонтактнойИнформацииXDTOПоПредставлению(Текст, Результат, ОжидаемыйВид) Экспорт + + // Локализация + Результат = КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид); + // Конец Локализация + +КонецПроцедуры + +// Преобразует контактную информацию из XDTO в XML. +// +// Параметры: +// ОбъектXDTOИнформации - ОбъектXDTO - контактная информация в формате объекта XDTO +// КонтактнаяИнформацияВXML - Строка - выходной параметр. Контактная информация в формате XML. +// +Процедура ПриПреобразованииКонтактнойИнформацииXDTOВXML(ОбъектXDTOИнформации, КонтактнаяИнформацияВXML) Экспорт + + // Локализация + КонтактнаяИнформацияВXML = КонтактнаяИнформацияXDTOВXML(ОбъектXDTOИнформации); + // Конец Локализация + +КонецПроцедуры + +// При получении строки состава контактной информации. +// +// Параметры: +// XMLДанные - Строка - контактная информация в формате XMLДанные; +// СтрокаСостава - Строка - выходной параметр. Строка состава из XML данных. +// +Процедура ПриПолученииСтрокиСоставаКонтактнойИнформации(XMLДанные, СтрокаСостава) Экспорт + + // Локализация + СтрокаСостава = СтрокаСоставаКонтактнойИнформации(XMLДанные); + // Конец Локализация + +КонецПроцедуры + +// При заполнение реквизитов табличной части для веб страницы. +// +// Параметры: +// Источник - ОбъектXDTO - источник контактной информации +// Результат - Строка - результат заполнения +// +Процедура ПриЗаполненииРеквизитовТабличнойЧастиДляВебСтраницы(Источник, Результат) Экспорт + + // Локализация + Результат = ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(Источник); + // Конец Локализация + +КонецПроцедуры + +// Сравнивает два экземпляра контактной информации. +// +// Параметры: +// Данные1 - ОбъектXDTO - объект с контактной информацией. +// - Строка - контактная информация в формате XML. +// - Структура - описание контактной информацию. Ожидаются поля: +// * ЗначенияПолей - Строка +// - Структура +// - СписокЗначений +// - Соответствие - поля контактной информации. +// * Представление - Строка - представление. Используется в случае, если не удалось вычислить +// представление из ЗначенияПолей (отсутствие в них поля Представление). +// * Комментарий - Строка - комментарий. Используется в том случае, если не удалось вычислить комментарий +// из ЗначенияПолей. +// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации +// - ПеречислениеСсылка.ТипыКонтактнойИнформации +// - Структура - +// используется в том случае, если не удалось вычислить тип из ЗначенияПолей. +// Данные2 - ОбъектXDTO +// - Строка +// - Структура - смотри описание параметра Данные1. +// Результат - ТаблицаЗначений: +// * Путь - Строка - XPath, идентифицирующий отличающееся значение. Значение "ТипКонтактнойИнформации" +// означает, что переданные экземпляры контактной информации различаются типом. +// * Описание - Строка - описание отличающегося реквизита в терминах предметной области. +// * Значение1 - Строка - значение, соответствующая объекту, переданному в параметре Данные1. +// * Значение2 - Строка - значение, соответствующая объекту, переданному в параметре Данные2. +// +// +// Возвращаемое значение: +// ТаблицаЗначений: - таблица отличающихся полей со следующими колонками: +// * Путь - Строка - XPath, идентифицирующий отличающееся значение. Значение "ТипКонтактнойИнформации" +// означает, что переданные экземпляры контактной информации различаются типом. +// * Описание - Строка - описание отличающегося реквизита в терминах предметной области. +// * Значение1 - Строка - значение, соответствующая объекту, переданному в параметре Данные1. +// * Значение2 - Строка - значение, соответствующая объекту, переданному в параметре Данные2. +// +Процедура ПриОпределенииРазличияКонтактнойИнформации(Знач Данные1, Знач Данные2, Результат) Экспорт + + // Локализация + ДанныеКИ1 = ПривестиКонтактнуюИнформациюXML(Данные1); + ДанныеКИ2 = ПривестиКонтактнуюИнформациюXML(Данные2); + + ТипКонтактнойИнформации = ДанныеКИ1.ТипКонтактнойИнформации; + Если ТипКонтактнойИнформации <> ДанныеКИ2.ТипКонтактнойИнформации Тогда + // Различные типы, дальше не сравниваем. + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата.Путь = "ТипКонтактнойИнформации"; + СтрокаРезультата.Значение1 = ДанныеКИ1.ТипКонтактнойИнформации; + СтрокаРезультата.Значение2 = ДанныеКИ2.ТипКонтактнойИнформации; + СтрокаРезультата.Описание = НСтр("ru = 'Различные типы контактной информации'"); + Возврат; + КонецЕсли; + + ТекстРазличияXML = XSLT_ТаблицаЗначенийРазличияXML(ДанныеКИ1.ДанныеXML, ДанныеКИ2.ДанныеXML); + + // Отдаем интерпретацию в зависимости от типа. + Результат = ЗначениеИзСтрокиXML( XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( + ТекстРазличияXML, ТипКонтактнойИнформации)); + // Конец Локализация + +КонецПроцедуры + +// Позволяет выполнить дополнительную проверку и обработку данных о стране, найденной по классификатору. +// +// Параметры: +// СтранаПоКлассификатору - СтрокаТаблицыЗначений: +// * Код - Строка - данные страны. +// * Наименование - Строка - данные страны. +// * НаименованиеПолное - Строка - данные страны. +// * КодАльфа2 - Строка - данные страны. +// * КодАльфа3 - Строка - данные страны. +// +Процедура ПриПроверкеСтраныПослеПоискаСтраныПоКлассификатору(СтранаПоКлассификатору) Экспорт + + // Локализация + Если СтранаПоКлассификатору <> Неопределено + И (СтранаПоКлассификатору.Код = "897" Или СтранаПоКлассификатору.Код = "898") Тогда + СтранаПоКлассификатору = Неопределено; + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура СкорректироватьКонтактнуюИнформацию(Форма, СтрокаКИ, РезультатПреобразования) Экспорт + + // Локализация + НастройкиКонвертации = УправлениеКонтактнойИнформацией.НастройкиКонвертацииКонтактнойИнформации(); + НастройкиКонвертации.Представление = СтрокаКИ.Представление; + НастройкиКонвертации.ВосстанавливатьКонтактнуюИнформацию = Ложь; + + Результат = КонтактнаяИнформацияИзXML(СтрокаКИ.ЗначенияПолей, + СтрокаКИ.Вид, РезультатПреобразования, НастройкиКонвертации); + СтрокаКИ.Комментарий = ?(ЗначениеЗаполнено(Результат.Комментарий), Результат.Комментарий, ""); + + Если РезультатПреобразования.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Не РезультатПреобразования.Свойство("СведенияИсправлены") ИЛИ РезультатПреобразования.СведенияИсправлены = Ложь Тогда + Возврат; + КонецЕсли; + + Если РезультатПреобразования.СведенияИсправлены Тогда + ПриПреобразованииКонтактнойИнформацииXDTOВXML(Результат, СтрокаКИ.ЗначенияПолей); + КонецЕсли; + + Если РезультатПреобразования.Свойство("ТекстОшибки") Тогда + ОбщегоНазначения.СообщитьПользователю(РезультатПреобразования.ТекстОшибки, , СтрокаКИ.ИмяРеквизита); + КонецЕсли; + + Форма.Модифицированность = Истина; + // Конец Локализация + +КонецПроцедуры + +#КонецОбласти + +// Локализация + #Область СлужебныеПроцедурыИФункции // Параметры: @@ -18,7 +362,7 @@ // см. XDTOПакет.КонтактнаяИнформация.КонтактнаяИнформация // Функция КонтактнаяИнформацияИзXML(Знач Текст, Знач ОжидаемыйВид = Неопределено, РезультатПреобразования = Неопределено, НастройкиКонвертации = Неопределено) Экспорт - + ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); Если РезультатПреобразования = Неопределено Или ТипЗнч(РезультатПреобразования) <> Тип("Структура") Тогда @@ -157,14 +501,14 @@ Если ЭтоНовый Тогда Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); Иначе - Результат = ДесериализацияТелефона(Текст, Представление, ОжидаемыйТип) + Результат = ДесериализацияТелефонаФакса(Текст, Представление, ОжидаемыйТип) КонецЕсли; ИначеЕсли ОжидаемыйТип = ПеречислениеФакс Тогда Если ЭтоНовый Тогда Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); Иначе - Результат = ДесериализацияФакса(Текст, Представление, ОжидаемыйТип) + Результат = ДесериализацияТелефонаФакса(Текст, Представление, ОжидаемыйТип) КонецЕсли; ИначеЕсли ОжидаемыйТип = ПеречислениеАдресЭлектроннойПочты Тогда @@ -204,93 +548,149 @@ КонецФункции -Функция КонтактнаяИнформацияИзJSONВXML(Знач КонтактнаяИнформация, ОжидаемыйТип = Неопределено) Экспорт +Функция ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(Источник) - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда - КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, ОжидаемыйТип); + АдресСтраницы = Источник.Состав; + ПространствоИмен = ПространствоИмен(); + Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда + АдресСтрокой = АдресСтраницы.Значение; КонецЕсли; - Если ОжидаемыйТип = Неопределено Тогда + Возврат АдресСтрокой; + +КонецФункции + +Функция АдресXMLВXDTO(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйТип = Неопределено) Экспорт + + Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда + МодульРасширенныйВводКонтактнойИнформации = ОбщегоНазначения.ОбщийМодуль("Обработки.РасширенныйВводКонтактнойИнформации"); + Возврат МодульРасширенныйВводКонтактнойИнформации.АдресXMLВXDTO(ЗначенияПолей, Представление, ОжидаемыйТип); + КонецЕсли; + + // Пустой объект с представлением. + ПространствоИмен = ПространствоИмен(); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); + Результат.Состав.Состав = Представление; + Результат.Представление = Представление; + Возврат Результат; + +КонецФункции + +Функция НомерТелефонаВСтарыйСписокПолей(XDTOТелефон) Экспорт + Результат = Новый СписокЗначений; + + Результат.Добавить(XDTOТелефон.КодСтраны, "КодСтраны"); + Результат.Добавить(XDTOТелефон.КодГорода, "КодГорода"); + Результат.Добавить(XDTOТелефон.Номер, "НомерТелефона"); + Результат.Добавить(XDTOТелефон.Добавочный, "Добавочный"); + + Возврат Результат; +КонецФункции + +Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) + + ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); + Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Возврат АдресXMLВXDTO("", Текст, ОжидаемыйТип); - Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") И КонтактнаяИнформация.Свойство("type") Тогда + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты + Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница + Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype + Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Возврат ДесериализацияТелефонаФакса("", Текст, ОжидаемыйТип); + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + Возврат ДесериализацияТелефонаФакса("", Текст, ОжидаемыйТип); + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция СоответствиеXDTOТиповКонтактнойИнформации(НайденТип) Экспорт + + ПространствоИмен = ПространствоИмен(); + + СоответствиеТипов = Новый Соответствие; + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"), Перечисления.ТипыКонтактнойИнформации.Адрес); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта"), Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт"), Перечисления.ТипыКонтактнойИнформации.ВебСтраница); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"), Перечисления.ТипыКонтактнойИнформации.Телефон); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"), Перечисления.ТипыКонтактнойИнформации.Факс); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Skype"), Перечисления.ТипыКонтактнойИнформации.Skype); + СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее"), Перечисления.ТипыКонтактнойИнформации.Другое); + + Возврат СоответствиеТипов[НайденТип]; + +КонецФункции + +Функция ПространствоИмен() Экспорт + Возврат "http://www.v8.1c.ru/ssl/contactinfo"; // @Non-NLS +КонецФункции + +Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Тип, НастройкиКонвертации) Экспорт + + Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебный.ТипКонтактнойИнформацииИзСтроки(КонтактнаяИнформация.type); + РезультатПреобразования = Новый Структура; - ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - КонтактнаяИнформацияXML = ПривестиКонтактнуюИнформациюXML(КонтактнаяИнформация); - ОжидаемыйТип = КонтактнаяИнформацияXML.ТипКонтактнойИнформации; + XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип, РезультатПреобразования, НастройкиКонвертации); Иначе - ТекстОшибки = НСтр("ru = 'Ошибка конвертации контактной информации из формата JSON в XML.'"); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, - ТекстОшибки + Символы.ПС + Строка(КонтактнаяИнформация)); - ВызватьИсключение НСтр("ru = 'Не удалось определить тип контактной информации. Подробнее см. в журнале регистрации.'"); + Если СтрЧислоВхождений(КонтактнаяИнформация, ",") = 9 Тогда + + Результат.Value = КонтактнаяИнформация; + Возврат Результат; + + Иначе + XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, НастройкиКонвертации); + КонецЕсли; КонецЕсли; - + Иначе + XDTOКонтактнаяИнформация = КонтактнаяИнформация; + Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; + КонецЕсли; + + Результат.Value = Строка(XDTOКонтактнаяИнформация.Представление); + Результат.Comment = Строка(XDTOКонтактнаяИнформация.Комментарий); + + Если Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес И Тип <> Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Возврат Результат; КонецЕсли; ПространствоИмен = ПространствоИмен(); - - ЭтоНовый = ПустаяСтрока(КонтактнаяИнформация); - Представление = ""; + Состав = XDTOКонтактнаяИнформация.Состав; // см. XDTOПакет.КонтактнаяИнформация.Адрес - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - - // Разбор - Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Иначе - Результат = КонвертироватьАдресИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип); - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); - Иначе - Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); - Иначе - Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта")); - Иначе - Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) - КонецЕсли; - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); - Иначе - Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) - КонецЕсли; - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); - Иначе - Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) - КонецЕсли; - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда - Если ЭтоНовый Тогда - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); - Иначе - Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) - КонецЕсли; - - Иначе - ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, - |т.к. обязательное поле тип не заполнено.'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйТип), """" + СокрЛП(ОжидаемыйТип) + """", "")); + Если Состав = Неопределено Тогда + Возврат Результат; КонецЕсли; - Возврат КонтактнаяИнформацияXDTOВXML(Результат); + XDTOТип = Состав.Тип(); + + Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда + + Результат.Вставить("Country", Строка(Состав.Страна)); + Страна = Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина); + Результат.Вставить("CountryCode", СокрЛП(Страна.Код)); + + ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "НомерТелефона") + Или XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "НомерФакса") Тогда + + Результат.CountryCode = Состав.КодСтраны; + Результат.AreaCode = Состав.КодГорода; + Результат.Number = Состав.Номер; + Результат.ExtNumber = Состав.Добавочный; + + КонецЕсли; + + Возврат Результат; КонецФункции @@ -362,7 +762,7 @@ ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); Иначе - ВызватьИсключение НСтр("ru = 'Ошибка преобразования контактной информации, ожидается телефон или факс.'"); + ВызватьИсключение НСтр("ru = 'Некорректная контактная информация, ожидается телефон или факс.'"); КонецЕсли; Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -439,7 +839,7 @@ Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); ИначеЕсли ОжидаемыйТип <> Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается другой тип'"); + ВызватьИсключение НСтр("ru = 'Некорректная контактная информация, ожидается другой тип.'"); КонецЕсли; @@ -471,7 +871,7 @@ ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда Данные = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); Иначе - ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается телефон или факс.'"); + ВызватьИсключение НСтр("ru = 'Некорректная контактная информация, ожидается телефон или факс.'"); КонецЕсли; Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); @@ -563,14 +963,6 @@ Возврат Результат; КонецФункции -Функция ДесериализацияТелефона(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Экспорт - Возврат ДесериализацияТелефонаФакса(ЗначенияПолей, Представление, ОжидаемыйТип); -КонецФункции - -Функция ДесериализацияФакса(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Экспорт - Возврат ДесериализацияТелефонаФакса(ЗначенияПолей, Представление, ОжидаемыйТип); -КонецФункции - Функция ДесериализацияПрочейКонтактнойИнформации(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда @@ -595,156 +987,15 @@ Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); ИначеЕсли ОжидаемыйТип <> Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается другой тип'"); + ВызватьИсключение НСтр("ru = 'Некорректная контактная информация, ожидается другой тип'"); КонецЕсли; Результат.Состав.Значение = Представление; - Возврат Результат; КонецФункции -Функция КонтактнаяИнформацияXDTOПоПредставлению(Текст, ОжидаемыйВид) Экспорт - - ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ОжидаемыйВид); - Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Возврат АдресXMLВXDTO("", Текст, ОжидаемыйТип); - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты - Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница - Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype - Или ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда - Возврат ДесериализацияПрочейКонтактнойИнформации("", Текст, ОжидаемыйТип); - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - Возврат ДесериализацияТелефона("", Текст, ОжидаемыйТип); - - ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда - Возврат ДесериализацияФакса("", Текст, ОжидаемыйТип); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -Процедура УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнформация, Знач Комментарий) Экспорт - - ЭтоСтрока = ТипЗнч(КонтактнаяИнформация) = Тип("Строка"); - Если ЭтоСтрока И Не УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - // Предыдущий формат значений полей, комментарий отсутствует. - Возврат; - КонецЕсли; - - ОбъектXDTO = ?(ЭтоСтрока, КонтактнаяИнформацияИзXML(КонтактнаяИнформация), КонтактнаяИнформация); - ОбъектXDTO.Комментарий = Комментарий; - Если ЭтоСтрока Тогда - КонтактнаяИнформация = КонтактнаяИнформацияXDTOВXML(ОбъектXDTO); - КонецЕсли; - -КонецПроцедуры - -Функция ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(Источник) Экспорт - - АдресСтраницы = Источник.Состав; - ПространствоИмен = ПространствоИмен(); - Если АдресСтраницы <> Неопределено И АдресСтраницы.Тип() = ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт") Тогда - АдресСтрокой = АдресСтраницы.Значение; - КонецЕсли; - - Возврат АдресСтрокой; - -КонецФункции - -Функция АдресXMLВXDTO(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйТип = Неопределено) Экспорт - - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - Возврат Обработки["РасширенныйВводКонтактнойИнформации"].АдресXMLВXDTO(ЗначенияПолей, Представление, ОжидаемыйТип); - КонецЕсли; - - // Пустой объект с представлением. - ПространствоИмен = ПространствоИмен(); - Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); - Результат.Состав.Состав = Представление; - Результат.Представление = Представление; - Возврат Результат; - -КонецФункции - -Функция НомерТелефонаВСтарыйСписокПолей(XDTOТелефон) Экспорт - Результат = Новый СписокЗначений; - - Результат.Добавить(XDTOТелефон.КодСтраны, "КодСтраны"); - Результат.Добавить(XDTOТелефон.КодГорода, "КодГорода"); - Результат.Добавить(XDTOТелефон.Номер, "НомерТелефона"); - Результат.Добавить(XDTOТелефон.Добавочный, "Добавочный"); - - Возврат Результат; -КонецФункции - -Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Тип, НастройкиКонвертации) Экспорт - - Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); - - Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда - - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда - - РезультатПреобразования = Новый Структура; - - XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип, РезультатПреобразования, НастройкиКонвертации); - Иначе - Если СтрЧислоВхождений(КонтактнаяИнформация, ",") = 9 Тогда - - Результат.Value = КонтактнаяИнформация; - Возврат Результат; - - Иначе - XDTOКонтактнаяИнформация = КонтактнаяИнформацияИзXML(КонтактнаяИнформация, Тип,, НастройкиКонвертации); - КонецЕсли; - КонецЕсли; - Иначе - XDTOКонтактнаяИнформация = КонтактнаяИнформация; - Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; - КонецЕсли; - - Результат.Value = Строка(XDTOКонтактнаяИнформация.Представление); - Результат.Comment = Строка(XDTOКонтактнаяИнформация.Комментарий); - - Если Тип <> Перечисления.ТипыКонтактнойИнформации.Адрес И Тип <> Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - Возврат Результат; - КонецЕсли; - - ПространствоИмен = ПространствоИмен(); - Состав = XDTOКонтактнаяИнформация.Состав; // см. XDTOПакет.КонтактнаяИнформация.Адрес - - Если Состав = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - XDTOТип = Состав.Тип(); - - Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес") Тогда - - Результат.Вставить("Country", Строка(Состав.Страна)); - Страна = Справочники.СтраныМира.НайтиПоНаименованию(Состав.Страна, Истина); - Результат.Вставить("CountryCode", СокрЛП(Страна.Код)); - - ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "НомерТелефона") - Или XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "НомерФакса") Тогда - - Результат.CountryCode = Состав.КодСтраны; - Результат.AreaCode = Состав.КодГорода; - Результат.Number = Состав.Номер; - Результат.ExtNumber = Состав.Добавочный; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - Функция КонтактнаяИнформацияXDTOПустая(Знач Результат) Состав = Результат.Свойства().Получить("Состав"); @@ -776,65 +1027,103 @@ КонецФункции -Функция ТипКонтактнойИнформацииИзОбъектаXDTO(КонтактнаяИнформация) Экспорт +#Область СлужебныеПроцедурыИФункцииПоРаботеСXML + +Функция КонтактнаяИнформацияИзJSONВXML(Знач КонтактнаяИнформация, ОжидаемыйТип = Неопределено) - Если ТипЗнч(КонтактнаяИнформация) = Тип("ОбъектXDTO") Тогда - НайденТип = ?(КонтактнаяИнформация.Состав = Неопределено, Неопределено, КонтактнаяИнформация.Состав.Тип()); - Возврат СоответствиеXDTOТиповКонтактнойИнформации(НайденТип); + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда + КонтактнаяИнформация = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, ОжидаемыйТип); КонецЕсли; - Возврат Неопределено; - -КонецФункции - -Функция ТипКонтактнойИнформации(Знач XMLСтрока) Экспорт - Возврат ЗначениеИзСтрокиXML(XSLT_ТипКонтактнойИнформацииПоСтрокеXML(XMLСтрока)); -КонецФункции - -Функция СоответствиеXDTOТиповКонтактнойИнформации(НайденТип) Экспорт + Если ОжидаемыйТип = Неопределено Тогда + + Если ТипЗнч(КонтактнаяИнформация) = Тип("Структура") И КонтактнаяИнформация.Свойство("type") Тогда + + ОжидаемыйТип = УправлениеКонтактнойИнформациейСлужебный.ТипКонтактнойИнформацииИзСтроки(КонтактнаяИнформация.type); + + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + + СтандартнаяОбработка = Истина; + КонтактнаяИнформацияXML = Неопределено; + + ПриПриведенииКонтактнойИнформацииВXML(КонтактнаяИнформация, КонтактнаяИнформацияXML, СтандартнаяОбработка); + Если Не СтандартнаяОбработка И КонтактнаяИнформацияXML <> Неопределено Тогда + ОжидаемыйТип = КонтактнаяИнформацияXML.ТипКонтактнойИнформации; + КонецЕсли; + Иначе + ТекстОшибки = НСтр("ru = 'Некорректная контактная информация.'"); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки + Символы.ПС + Строка(КонтактнаяИнформация)); + ВызватьИсключение НСтр("ru = 'Не удалось определить тип контактной информации. Подробнее см. в журнале регистрации.'"); + КонецЕсли; + + КонецЕсли; ПространствоИмен = ПространствоИмен(); + + ЭтоНовый = ПустаяСтрока(КонтактнаяИнформация); + Представление = ""; - СоответствиеТипов = Новый Соответствие; - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес"), Перечисления.ТипыКонтактнойИнформации.Адрес); - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта"), Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт"), Перечисления.ТипыКонтактнойИнформации.ВебСтраница); - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона"), Перечисления.ТипыКонтактнойИнформации.Телефон); - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса"), Перечисления.ТипыКонтактнойИнформации.Факс); - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Skype"), Перечисления.ТипыКонтактнойИнформации.Skype); - СоответствиеТипов.Вставить(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее"), Перечисления.ТипыКонтактнойИнформации.Другое); + Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "КонтактнаяИнформация")); - Возврат СоответствиеТипов[НайденТип]; - -КонецФункции - -Функция ПространствоИмен() Экспорт - Возврат "http://www.v8.1c.ru/ssl/contactinfo"; // @Non-NLS -КонецФункции - - -// При проверке страны после поиска страны по классификатору -// -// Параметры: -// СтранаПоКлассификатору - СтрокаТаблицыЗначений: -// * Код - Строка - данные страны. -// * Наименование - Строка - данные страны. -// * НаименованиеПолное - Строка - данные страны. -// * КодАльфа2 - Строка - данные страны. -// * КодАльфа3 - Строка - данные страны. -// -Процедура ПриПроверкеСтраныПослеПоискаСтраныПоКлассификатору(СтранаПоКлассификатору) Экспорт - - // Локализация - Если СтранаПоКлассификатору <> Неопределено - И (СтранаПоКлассификатору.Код = "897" Или СтранаПоКлассификатору.Код = "898") Тогда - СтранаПоКлассификатору = Неопределено; + // Разбор + Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")); + Иначе + Результат = КонвертироватьАдресИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип); + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерТелефона")); + Иначе + Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "НомерФакса")); + Иначе + Результат = КонвертироватьТелефонФаксИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ЭлектроннаяПочта")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Skype Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Skype")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "ВебСайт")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Если ЭтоНовый Тогда + Результат.Состав = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "Прочее")); + Иначе + Результат = КонвертироватьПрочуюКонтактнуюИнформациюИзJSONВXML(КонтактнаяИнформация, Представление, ОжидаемыйТип) + КонецЕсли; + + Иначе + ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, + |т.к. обязательное поле тип не заполнено.'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйТип), """" + СокрЛП(ОжидаемыйТип) + """", "")); КонецЕсли; - // Конец Локализация -КонецПроцедуры - -#Область СлужебныеПроцедурыИФункцииПоРаботеСXML + Возврат КонтактнаяИнформацияXDTOВXML(Результат); + +КонецФункции Функция СтрокаСоставаКонтактнойИнформации(Знач Текст, Знач НовоеЗначение = Неопределено) Экспорт Чтение = Новый ЧтениеXML; @@ -852,67 +1141,6 @@ Возврат Неопределено; КонецФункции -// Сравнивает два экземпляра контактной информации. -// -// Параметры: -// Данные1 - ОбъектXDTO - объект с контактной информацией. -// - Строка - контактная информация в формате XML. -// - Структура - описание контактной информацию. Ожидаются поля: -// * ЗначенияПолей - Строка -// - Структура -// - СписокЗначений -// - Соответствие - поля контактной информации. -// * Представление - Строка - представление. Используется в случае, если не удалось вычислить -// представление из ЗначенияПолей (отсутствие в них поля Представление). -// * Комментарий - Строка - комментарий. Используется в том случае, если не удалось вычислить комментарий -// из ЗначенияПолей. -// * ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации -// - ПеречислениеСсылка.ТипыКонтактнойИнформации -// - Структура - -// используется в том случае, если не удалось вычислить тип из ЗначенияПолей. -// Данные2 - ОбъектXDTO -// - Строка -// - Структура - смотри описание параметра Данные1. -// Результат - ТаблицаЗначений: -// * Путь - Строка - XPath, идентифицирующий отличающееся значение. Значение "ТипКонтактнойИнформации" -// означает, что переданные экземпляры контактной информации различаются типом. -// * Описание - Строка - описание отличающегося реквизита в терминах предметной области. -// * Значение1 - Строка - значение, соответствующая объекту, переданному в параметре Данные1. -// * Значение2 - Строка - значение, соответствующая объекту, переданному в параметре Данные2. -// -// -// Возвращаемое значение: -// ТаблицаЗначений: - таблица отличающихся полей со следующими колонками: -// * Путь - Строка - XPath, идентифицирующий отличающееся значение. Значение "ТипКонтактнойИнформации" -// означает, что переданные экземпляры контактной информации различаются типом. -// * Описание - Строка - описание отличающегося реквизита в терминах предметной области. -// * Значение1 - Строка - значение, соответствующая объекту, переданному в параметре Данные1. -// * Значение2 - Строка - значение, соответствующая объекту, переданному в параметре Данные2. -// -Функция РазличияКонтактнойИнформации(Знач Данные1, Знач Данные2, Результат) Экспорт - - ДанныеКИ1 = ПривестиКонтактнуюИнформациюXML(Данные1); - ДанныеКИ2 = ПривестиКонтактнуюИнформациюXML(Данные2); - - ТипКонтактнойИнформации = ДанныеКИ1.ТипКонтактнойИнформации; - Если ТипКонтактнойИнформации <> ДанныеКИ2.ТипКонтактнойИнформации Тогда - // Различные типы, дальше не сравниваем. - СтрокаРезультата = Результат.Добавить(); - СтрокаРезультата.Путь = "ТипКонтактнойИнформации"; - СтрокаРезультата.Значение1 = ДанныеКИ1.ТипКонтактнойИнформации; - СтрокаРезультата.Значение2 = ДанныеКИ2.ТипКонтактнойИнформации; - СтрокаРезультата.Описание = НСтр("ru = 'Различные типы контактной информации'"); - Возврат Результат; - КонецЕсли; - - ТекстРазличияXML = XSLT_ТаблицаЗначенийРазличияXML(ДанныеКИ1.ДанныеXML, ДанныеКИ2.ДанныеXML); - - // Отдаем интерпретацию в зависимости от типа. - Возврат ЗначениеИзСтрокиXML( XSLT_ИнтерпретацияРазличияXMLКонтактнойИнформации( - ТекстРазличияXML, ТипКонтактнойИнформации)); - -КонецФункции - // Параметры: // Данные - см. УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеКонтактнойИнформации // @@ -1034,8 +1262,7 @@ Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); Иначе - ВызватьИсключение НСтр("ru = 'Ошибка параметров преобразования, не определен тип контактной информации'"); - + ВызватьИсключение НСтр("ru = 'Некорректная контактная информация, не определен тип контактной информации.'"); КонецЕсли; Возврат Результат; @@ -1063,47 +1290,6 @@ КонецФункции -// Параметры: -// ЗначенияПолей - Строка -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации -// Параметры - Структура -// ОсновнаяСтрана - СправочникСсылка.СтраныМира -// -// Возвращаемое значение: -// ОбъектXDTO, ЗначениеXDTO, Неопределено -// -Функция ИзвлечьСтарыйФорматАдреса(Знач ЗначенияПолей, Знач ТипКонтактнойИнформации, Параметры, ОсновнаяСтрана) Экспорт - - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) - И ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - РезультатыЧтения = Новый Структура; - XDTOКонтактная = КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда - // Распознали с ошибками, сообщим при открытии. - XDTOКонтактная.Представление = Параметры.Представление; - XDTOКонтактная.Состав.Страна = Строка(ОсновнаяСтрана); - КонецЕсли; - Иначе - XDTOКонтактная = АдресXMLВXDTO(ЗначенияПолей, Параметры.Представление, ); - Если Параметры.Свойство("Страна") И ЗначениеЗаполнено(Параметры.Страна) Тогда - Если ТипЗнч(Параметры.Страна) = ТипЗнч(Справочники.СтраныМира.ПустаяСсылка()) Тогда - XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Страна, "Наименование"); - Иначе - XDTOКонтактная.Состав.Страна = Строка(Параметры.Страна); - КонецЕсли; - Иначе - XDTOКонтактная.Состав.Страна = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнаяСтрана, "Наименование"); - КонецЕсли; - КонецЕсли; - Если Параметры.Комментарий <> Неопределено Тогда - // Ставим новый комментарий, иначе он придет из информации. - XDTOКонтактная.Комментарий = Параметры.Комментарий; - КонецЕсли; - - Возврат XDTOКонтактная; - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункцииПоРаботеСXSLT @@ -2184,3 +2370,5 @@ #КонецОбласти #КонецОбласти + +// Конец Локализация diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 8e1b42573..971c1c868 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -19,7 +19,8 @@ КонецЕсли; Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - Обработки["РасширенныйВводКонтактнойИнформации"].ПроверитьАдрес(Адрес, РезультатПроверки, ПараметрыПроверкиАдреса); + МодульРасширенныйВводКонтактнойИнформации = ОбщегоНазначения.ОбщийМодуль("Обработки.РасширенныйВводКонтактнойИнформации"); + МодульРасширенныйВводКонтактнойИнформации.ПроверитьАдрес(Адрес, РезультатПроверки, ПараметрыПроверкиАдреса); КонецЕсли; Возврат РезультатПроверки; @@ -169,8 +170,19 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +Функция КодыСтран() Экспорт + + Возврат Справочники.СтраныМира.КодыСтран(); + +КонецФункции + +Функция ПустаяСсылкаСправочникаСтраныМира() Экспорт + + Возврат Справочники.СтраныМира.ПустаяСсылка(); + +КонецФункции + +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта. Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт @@ -353,6 +365,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция СодержитПустыеПоляJSON(ПроверяемыйОбъект) @@ -468,7 +482,8 @@ ДополнительныеПараметры.ТолькоВебСервис = Истина; ДополнительныеПараметры.ПрямойПорядок = Истина; - Результат = Обработки["РасширенныйВводКонтактнойИнформации"].СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры); + МодульРасширенныйВводКонтактнойИнформации = ОбщегоНазначения.ОбщийМодуль("Обработки.РасширенныйВводКонтактнойИнформации"); + Результат = МодульРасширенныйВводКонтактнойИнформации.СписокАвтоподбораНаселенногоПункта(Текст, ДополнительныеПараметры); Если Результат.Отказ Тогда Возврат; КонецЕсли; @@ -641,7 +656,8 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Продолжить; КонецПопытки; @@ -706,17 +722,21 @@ Возврат; КонецЕсли; + ПараметрыВыборки = МодульКонтрольВеденияУчета.ПараметрыВыборкиПроблемныхОбъектов(); ПроблемныеОбъекты = МодульКонтрольВеденияУчета.ПроблемныеОбъекты(Проверка); ВсегоОбъектов = 0; ИсправленоОбъектов = 0; Пока ПроблемныеОбъекты.Количество() > 0 Цикл - ПоследнийПроблемныйОбъект = ПроблемныеОбъекты.Получить(ПроблемныеОбъекты.Количество() - 1).ПроблемныйОбъект; + НачальныйПроблемныйОбъект = ПроблемныеОбъекты.Получить(ПроблемныеОбъекты.Количество() - 1).ПроблемныйОбъект; ВсегоОбъектов = ВсегоОбъектов + ПроблемныеОбъекты.Количество(); // @skip-check query-in-loop - Порционная обработка больших объемов данных. ИсправленоОбъектов = ИсправленоОбъектов + ИсправитьПорциюВидовКонтактнойИнформации(ПроблемныеОбъекты, Проверка); - ПроблемныеОбъекты = МодульКонтрольВеденияУчета.ПроблемныеОбъекты(Проверка, ПоследнийПроблемныйОбъект); + + ПараметрыВыборки.НачальныйПроблемныйОбъект = НачальныйПроблемныйОбъект; + // @skip-check query-in-loop - Порционная обработка больших объемов данных. + ПроблемныеОбъекты = МодульКонтрольВеденияУчета.ПроблемныеОбъекты(Проверка, ПараметрыВыборки); КонецЦикла; Результат = Новый Структура; @@ -769,7 +789,8 @@ СтрокаИзЗапроса = РезультатЗапроса.Выбрать(); - ПараметрыВыполненияПроверки = МодульКонтрольВеденияУчета.ПараметрыВыполненияПроверки("КонтактнаяИнформация", НСтр("ru='Виды контактной информации'", ОбщегоНазначения.КодОсновногоЯзыка())); + ПараметрыВыполненияПроверки = МодульКонтрольВеденияУчета.ПараметрыВыполненияПроверки("КонтактнаяИнформация", + НСтр("ru='Виды контактной информации'", ОбщегоНазначения.КодОсновногоЯзыка())); МодульКонтрольВеденияУчета.ОчиститьРезультатыПредыдущихПроверок(Проверка, ПараметрыВыполненияПроверки); ВидПроверки = МодульКонтрольВеденияУчета.ВидПроверки(ПараметрыВыполненияПроверки); @@ -847,7 +868,9 @@ Исключение ОтменитьТранзакцию(); Инфо = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно записать страну мира %1 (код %2) при обновлении классификатора по причине: + |%3'"), Выборка.Код, Выборка.Наименование, ОбработкаОшибок.КраткоеПредставлениеОшибки(Инфо)); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, @@ -1111,7 +1134,7 @@ Если ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Возврат СформироватьАдресПоПредставлению(Представление, РазбиватьНаПоля, РаспознатьАдрес); + Возврат СформироватьАдресПоПредставлению(Представление, ОжидаемыйВид, РазбиватьНаПоля, РаспознатьАдрес); ИначеЕсли ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Телефон ИЛИ ОжидаемыйТип = Перечисления.ТипыКонтактнойИнформации.Факс Тогда @@ -1127,7 +1150,7 @@ КонецФункции -Функция СформироватьАдресПоПредставлению(Представление, РазбиватьНаПоля = Ложь, РаспознатьАдрес = Истина) +Функция СформироватьАдресПоПредставлению(Представление, ОжидаемыйВид, РазбиватьНаПоля = Ложь, РаспознатьАдрес = Истина) ЕстьРаботаСАдресамиКлиентСервер = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступныМодулиРаботаСАдресами(); @@ -1140,11 +1163,6 @@ НаименованиеОсновнаяСтрана = ""; КонецЕсли; - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Адрес.Value = Представление; - Возврат Адрес; - КонецЕсли; - ДанныеАнализа = ЧастиАдресаТаблицей(Представление); Если ДанныеАнализа.Количество() = 0 Тогда Адрес.Value = Представление; @@ -1170,51 +1188,48 @@ МодульРаботаСАдресами.ОбработкаЧастыхСокращенийВАдресах(ДанныеАнализа); КонецЕсли; - Если Адрес.Country = НаименованиеОсновнаяСтрана Тогда + Если Адрес.Country = НаименованиеОсновнаяСтрана + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Если РаспознатьАдрес Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + ВариантыАдреса = МодульАдресныйКлассификаторСлужебный.РаспознатьАдрес(ДанныеАнализа, Представление, РазбиватьНаПоля); + Иначе + ВариантыАдреса = Неопределено; + КонецЕсли; + + Если ВариантыАдреса = Неопределено Тогда - Если РаспознатьАдрес Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ВариантыАдреса = МодульАдресныйКлассификаторСлужебный.РаспознатьАдрес(ДанныеАнализа, Представление, РазбиватьНаПоля); + Если РазбиватьНаПоля Тогда + + МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); + Если МодульРаботаСАдресамиКлиентСервер <> Неопределено Тогда + Адрес.AddressType = МодульРаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); + КонецЕсли; + + Адрес.Value = Представление; + РаспределитьАдресПоПолямБезКлассификатора(Адрес, ДанныеАнализа); + Иначе - ВариантыАдреса = Неопределено; + + Адрес.Value = Представление; + Адрес.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + КонецЕсли; + Иначе - Если ВариантыАдреса = Неопределено Тогда - - Если РазбиватьНаПоля Тогда - - МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); - Если МодульРаботаСАдресамиКлиентСервер <> Неопределено Тогда - Адрес.AddressType = МодульРаботаСАдресамиКлиентСервер.МуниципальныйАдрес(); - КонецЕсли; - - Адрес.Value = Представление; - РаспределитьАдресПоПолямБезКлассификатора(Адрес, ДанныеАнализа); - - Иначе - - Адрес.Value = Представление; - Адрес.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); - + ЗаполнитьЗначенияСвойств(Адрес, ВариантыАдреса); + Если ЕстьРаботаСАдресамиКлиентСервер Тогда + МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); + Если МодульРаботаСАдресами <> Неопределено Тогда + МодульРаботаСАдресами.ОбновитьПредставлениеАдреса(Адрес, Ложь); КонецЕсли; Иначе - - ЗаполнитьЗначенияСвойств(Адрес, ВариантыАдреса); - Если ЕстьРаботаСАдресамиКлиентСервер Тогда - МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); - Если МодульРаботаСАдресами <> Неопределено Тогда - МодульРаботаСАдресами.ОбновитьПредставлениеАдреса(Адрес, Ложь); - КонецЕсли; - Иначе - ОбновитьПредставлениеАдреса(Адрес, Ложь); - КонецЕсли; - + ОбновитьПредставлениеАдреса(Адрес, Ложь); КонецЕсли; КонецЕсли; - + Иначе Если ЕстьРаботаСАдресамиКлиентСервер Тогда @@ -1226,16 +1241,29 @@ Адрес.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); КонецЕсли; + ВключатьСтрануВПредставление = Ложь; + Если ТипЗнч(ОжидаемыйВид) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + ВключатьСтрануВПредставление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОжидаемыйВид, "ВключатьСтрануВПредставление"); + КонецЕсли; + НовоеПредставление = Новый Массив; + НовоеПредставлениеДляУлицы = Новый Массив; ДанныеАнализа.Сортировать("Позиция"); Для каждого ЧастьАдрес Из ДанныеАнализа Цикл Если ЧастьАдрес.Уровень >=0 Тогда - НовоеПредставление.Добавить(ЧастьАдрес.Значение); + НовоеПредставлениеДляУлицы.Добавить(ЧастьАдрес.Значение); КонецЕсли; + + Если Не ВключатьСтрануВПредставление И ЧастьАдрес.Уровень = -2 Тогда + Продолжить + КонецЕсли; + + НовоеПредставление.Добавить(ЧастьАдрес.Значение); + КонецЦикла; - Адрес.value = СтрСоединить(НовоеПредставление, ", "); - Адрес.street = Адрес.value; + Адрес.value = СтрСоединить(НовоеПредставление, ", "); + Адрес.street = СтрСоединить(НовоеПредставлениеДляУлицы, ", "); КонецЕсли; @@ -1353,7 +1381,6 @@ КонецЦикла; - // Локализация Если КодРегиона = Неопределено И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор"); @@ -1364,13 +1391,11 @@ КодРегиона = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(Значение); КонецЕсли; - Если КодРегиона <> Неопределено Тогда Строка.Значение = МодульАдресныйКлассификатор.НаименованиеРегионаПоКоду(КодРегиона); Строка.Уровень = 1; КонецЕсли; КонецЕсли; - // Конец Локализация Если ЗначениеЗаполнено(Строка.Значение) Тогда Продолжить; @@ -1506,9 +1531,18 @@ КонецФункции -Процедура ОпределитьСтрануИИндекс(ДанныеАдреса) Экспорт +Процедура ОпределитьСтрануИИндекс(АдресПоПолям) Экспорт Если Не УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступныМодулиРаботаСАдресами() Тогда + НаборПолей = АдресПоПолям.ВыгрузитьКолонку("Значение"); + ДанныеОСтране = ОпределитьСтрануМира(НаборПолей); + Если ЗначениеЗаполнено(ДанныеОСтране.Наименование) Тогда + Для каждого ЭлементАдреса Из АдресПоПолям Цикл + Если СтрСравнить(ДанныеОСтране.Наименование, ЭлементАдреса.Значение) = 0 Тогда + ЭлементАдреса.Уровень = -2; + КонецЕсли; + КонецЦикла; + КонецЕсли; Возврат; КонецЕсли; @@ -1516,16 +1550,13 @@ МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); Классификатор = МодульРаботаСАдресами.ТаблицаКлассификатора(); - Для каждого ЭлементАдреса Из ДанныеАдреса Цикл + Для каждого ЭлементАдреса Из АдресПоПолям Цикл Индекс = ОписаниеТипаЧисло.ПривестиЗначение(ЭлементАдреса.Наименование); Если Индекс >= 100000 И Индекс < 1000000 Тогда ЭлементАдреса.Уровень = -1; Иначе СтранаПоКлассификатору = Классификатор.Найти(ВРег(ЭлементАдреса.Значение), "Наименование"); - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - МодульУправлениеКонтактнойИнформациейЛокализация.ПриПроверкеСтраныПослеПоискаСтраныПоКлассификатору(СтранаПоКлассификатору); - КонецЕсли; + УправлениеКонтактнойИнформациейЛокализация.ПриПроверкеСтраныПослеПоискаСтраныПоКлассификатору(СтранаПоКлассификатору); Если СтранаПоКлассификатору <> Неопределено Тогда ЭлементАдреса.Уровень = -2; КонецЕсли; @@ -1534,6 +1565,41 @@ КонецПроцедуры +Функция ОпределитьСтрануМира(АдресПоПолям) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Ссылка", Неопределено); + Результат.Вставить("Наименование", ""); + Результат.Вставить("КодСтраны", ""); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СтраныМира.Ссылка КАК Ссылка, + | СтраныМира.Наименование КАК Наименование, + | СтраныМира.Код КАК КодСтраны + |ИЗ + | Справочник.СтраныМира КАК СтраныМира + |ГДЕ + | СтраныМира.Наименование В(&НаборПолей)"; + + Запрос.УстановитьПараметр("НаборПолей", АдресПоПолям); + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Результат; + КонецЕсли; + СведенияОСтране = РезультатЗапроса.Выбрать(); + + Если СведенияОСтране.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, СведенияОСтране); + Возврат Результат; + КонецЕсли; + + Возврат Результат; + +КонецФункции + Функция ПредставлениеКонтактнойИнформации(Знач КонтактнаяИнформация, ПеревестиВТранслит = Ложь) Экспорт Если ПустаяСтрока(КонтактнаяИнформация) Тогда @@ -2050,7 +2116,8 @@ Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.Наименование) Тогда Результат.ЕстьОшибки = Истина; - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено обязательное поле Наименование у вида контактной информации ""%1"".'"), + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не заполнено обязательное поле Наименование у вида контактной информации ""%1"".'"), Строка(ВидКонтактнойИнформации.ИмяПредопределенногоВида)); Возврат Результат; КонецЕсли; @@ -2061,7 +2128,8 @@ Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.Тип) Тогда Результат.ЕстьОшибки = Истина; - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено обязательное поле Тип у вида контактной информации ""%1"".'"), + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не заполнено обязательное поле Тип у вида контактной информации ""%1"".'"), Строка(ВидКонтактнойИнформации.Наименование)); Возврат Результат; КонецЕсли; @@ -2072,15 +2140,19 @@ Если НЕ ВидКонтактнойИнформации.ТолькоНациональныйАдрес И (ВидКонтактнойИнформации.ПроверятьКорректность ИЛИ ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса) Тогда - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректно заполнены настройки проверки адреса у вида контактной информации %1. - | Проверка корректности адреса доступна только для российских адресов'"), Строка(ВидКонтактнойИнформации.Наименование)); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректно заполнены настройки проверки адреса у вида контактной информации %1. + | Проверка корректности адреса доступна только для российских адресов'"), + Строка(ВидКонтактнойИнформации.Наименование)); Разделитель = Символы.ПС; КонецЕсли; Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений И ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда - Результат.ТекстОшибки = Результат.ТекстОшибки + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректно заполнены настройки адреса у вида контактной информации %1. - | Не допускается возможность ввода нескольких значений контактной информации при включенной истории хранения изменений.'"), + Результат.ТекстОшибки = Результат.ТекстОшибки + Разделитель + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Некорректно заполнены настройки адреса у вида контактной информации %1. + | Не допускается возможность ввода нескольких значений контактной информации при включенной истории хранения изменений.'"), Строка(ВидКонтактнойИнформации.Наименование)); КонецЕсли; КонецЕсли; @@ -2094,7 +2166,8 @@ Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); КонецФункции -Процедура ДобавитьКонтактнуюИнформациюДляСсылки(Ссылка, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата = Неопределено, Замещать = Истина, РаспознатьАдрес = Истина) Экспорт +Процедура ДобавитьКонтактнуюИнформациюДляСсылки(Ссылка, ЗначениеИлиПредставление, ВидКонтактнойИнформации, + Дата = Неопределено, Замещать = Истина, РаспознатьАдрес = Истина) Экспорт ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); @@ -2108,7 +2181,8 @@ Блокировка.Заблокировать(); Объект = Ссылка.ПолучитьОбъект(); Объект.Заблокировать(); - ДобавитьКонтактнуюИнформацию(Объект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата, Замещать, РаспознатьАдрес); + ДобавитьКонтактнуюИнформацию(Объект, ЗначениеИлиПредставление, ВидКонтактнойИнформации, Дата, Замещать, + РаспознатьАдрес); Объект.Записать(); ЗафиксироватьТранзакцию(); @@ -2132,7 +2206,8 @@ ЭтоКонтактнаяИнформацияВXML = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеИлиПредставление); ЭтоКонтактнаяИнформацияВJSON = УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначениеИлиПредставление); ЭтоКонтактнаяИнформацияВСтруктуреJSON = ТипЗнч(ЗначениеИлиПредставление) = Тип("Структура"); - СвойстваВидаКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, "Тип, ХранитьИсториюИзменений"); + СвойстваВидаКонтактнойИнформации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидКонтактнойИнформации, + "Тип, ХранитьИсториюИзменений"); МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); Если МетаданныеОбъекта = Неопределено @@ -2152,19 +2227,24 @@ Если ЭтоКонтактнаяИнформацияВXML Тогда ЗначенияПолей = ЗначениеИлиПредставление; - Значение = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип); - ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип); + Значение = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(ЗначениеИлиПредставление, + СвойстваВидаКонтактнойИнформации.Тип); + ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(Значение, + СвойстваВидаКонтактнойИнформации.Тип); Представление = ОбъектКонтактнойИнформации.Value; ИначеЕсли ЭтоКонтактнаяИнформацияВJSON Тогда Значение = ЗначениеИлиПредставление; - ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Значение,, СвойстваВидаКонтактнойИнформации.Тип); - ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(Значение, СвойстваВидаКонтактнойИнформации.Тип); + ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Значение,, + СвойстваВидаКонтактнойИнформации.Тип); + ОбъектКонтактнойИнформации = JSONВКонтактнуюИнформациюПоПолям(Значение, + СвойстваВидаКонтактнойИнформации.Тип); Представление = ПредставлениеКонтактнойИнформации(ЗначениеИлиПредставление); Иначе - ОбъектКонтактнойИнформации = КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, СвойстваВидаКонтактнойИнформации.Тип, ,РаспознатьАдрес); + ОбъектКонтактнойИнформации = КонтактнаяИнформацияПоПредставлению(ЗначениеИлиПредставление, + СвойстваВидаКонтактнойИнформации.Тип, ,РаспознатьАдрес); Значение = СтруктураВСтрокуJSON(ОбъектКонтактнойИнформации); ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(Значение); Представление = ЗначениеИлиПредставление; @@ -2205,7 +2285,8 @@ СтрокаКонтактнойИнформации.ДействуетС = Дата; КонецЕсли; - ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, СвойстваВидаКонтактнойИнформации.Тип); + ЗаполнитьТехническиеПоляКонтактнойИнформации(СтрокаКонтактнойИнформации, ОбъектКонтактнойИнформации, + СвойстваВидаКонтактнойИнформации.Тип); КонецПроцедуры @@ -2244,8 +2325,10 @@ Если Замещать Тогда - ИдентификаторСтрокиТабличнойЧасти = ?(БезИдентификатораТабличнойЧасти, Неопределено, СтрокаКонтактнойИнформацииОбъекта.ИдентификаторСтрокиТабличнойЧасти); - Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений, ИдентификаторСтрокиТабличнойЧасти) Тогда + ИдентификаторСтрокиТабличнойЧасти = ?(БезИдентификатораТабличнойЧасти, Неопределено, + СтрокаКонтактнойИнформацииОбъекта.ИдентификаторСтрокиТабличнойЧасти); + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, + СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений, ИдентификаторСтрокиТабличнойЧасти) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); @@ -2267,7 +2350,8 @@ КонецЕсли; Если НЕ ХранитьИсториюИзменений - И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений) + И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, + СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений) ИЛИ СтрокиКонтактнойИнформации.Количество() > 0 Тогда Продолжить; КонецЕсли; @@ -2276,13 +2360,15 @@ КонецЕсли; - ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, СтрокаКонтактнойИнформации); + ЗаполнитьКонтактнуюИнформациюОбъектаИзСтроки(СтрокаКонтактнойИнформацииОбъекта, ХранитьИсториюИзменений, + СтрокаКонтактнойИнформации); КонецЦикла; КонецПроцедуры -Процедура УстановитьКонтактнуюИнформациюОбъектаДляСсылки(Ссылка, Знач КонтактнаяИнформация, ОбъектМетаданных, Замещать = Истина) Экспорт +Процедура УстановитьКонтактнуюИнформациюОбъектаДляСсылки(Ссылка, Знач КонтактнаяИнформация, ОбъектМетаданных, + Замещать = Истина) Экспорт Если КонтактнаяИнформация.Количество() = 0 И Не Замещать Тогда Возврат; @@ -2315,7 +2401,8 @@ КонецПроцедуры -Процедура УстановитьКонтактнуюИнформациюОбъектовДляСсылки(ВладелецКонтактнойИнформации, СтрокиКонтактнойИнформацииОбъекта, Знач Замещать) Экспорт +Процедура УстановитьКонтактнуюИнформациюОбъектовДляСсылки(ВладелецКонтактнойИнформации, + СтрокиКонтактнойИнформацииОбъекта, Знач Замещать) Экспорт Ссылка = ВладелецКонтактнойИнформации.Ключ; ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); @@ -2331,7 +2418,8 @@ Объект = Ссылка.ПолучитьОбъект(); Объект.Заблокировать(); - УстановитьКонтактнуюИнформациюОбъектов(ВладелецКонтактнойИнформации, Объект, СтрокиКонтактнойИнформацииОбъекта, Замещать); + УстановитьКонтактнуюИнформациюОбъектов(ВладелецКонтактнойИнформации, Объект, + СтрокиКонтактнойИнформацииОбъекта, Замещать); Объект.Записать(); ЗафиксироватьТранзакцию(); @@ -2350,11 +2438,13 @@ Для каждого СтрокаКонтактнойИнформацииОбъекта Из СтрокиКонтактнойИнформацииОбъекта Цикл // СтрокаТаблицыЗначений из см. УправлениеКонтактнойИнформацией.НоваяКонтактнаяИнформация - ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; + ХранитьИсториюИзменений = ВладелецКонтактнойИнформации.Значение["Периодическая"] + И СтрокаКонтактнойИнформацииОбъекта.Вид.ХранитьИсториюИзменений; Если Замещать Тогда - Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений) Тогда + Если ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, + СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений) Тогда Продолжить; КонецЕсли; СтрокаКонтактнойИнформации = Объект.КонтактнаяИнформация.Добавить(); @@ -2376,7 +2466,8 @@ КонецЕсли; Если НЕ ХранитьИсториюИзменений - И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений) + И ЗапрещенВводНесколькихЗначений(СтрокаКонтактнойИнформацииОбъекта.Вид, Объект.КонтактнаяИнформация, + СтрокаКонтактнойИнформацииОбъекта.Дата, ХранитьИсториюИзменений) ИЛИ НайденныеСтроки.Количество() > 0 Тогда Продолжить; КонецЕсли; @@ -2471,7 +2562,8 @@ СтрокаТабличнойЧасти.Страна = Адрес.Country; Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - Обработки["РасширенныйВводКонтактнойИнформации"].ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Адрес, СтрокаТабличнойЧасти); + МодульРасширенныйВводКонтактнойИнформации = ОбщегоНазначения.ОбщийМодуль("Обработки.РасширенныйВводКонтактнойИнформации"); + МодульРасширенныйВводКонтактнойИнформации.ЗаполнитьРасширенныеРеквизитыТабличнойЧастиДляАдреса(Адрес, СтрокаТабличнойЧасти); КонецЕсли; КонецЕсли; @@ -2558,10 +2650,9 @@ Иначе - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - АдресСтрокой = МодульУправлениеКонтактнойИнформациейЛокализация.ЗаполнитьРеквизитыТабличнойЧастиДляВебСтраницы(Источник); - Иначе + АдресСтрокой = ""; + УправлениеКонтактнойИнформациейЛокализация.ПриЗаполненииРеквизитовТабличнойЧастиДляВебСтраницы(Источник, АдресСтрокой); + Если ПустаяСтрока(АдресСтрокой) Тогда Возврат; КонецЕсли; @@ -2628,7 +2719,8 @@ СписокПолейДляПроверки.Добавить("Country"); МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокПолейДляПроверки, МодульРаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Владелец, Истина)); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокПолейДляПроверки, + МодульРаботаСАдресамиКлиентСервер.ИменаУровнейАдреса(Владелец, Истина)); Для каждого ИмяПоля Из СписокПолейДляПроверки Цикл Если Владелец.Свойство(ИмяПоля) И ЗначениеЗаполнено(Владелец[ИмяПоля]) Тогда @@ -2725,12 +2817,13 @@ Функция ДесериализацияТелефонаФаксаВJSON(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() - И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда - // Общий формат контактной информации. - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); + Результат = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнойИнформацииИзXML(ЗначенияПолей, Результат, ОжидаемыйТип); + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; КонецЕсли; @@ -2738,7 +2831,7 @@ // Из пар ключ-значение СписокЗначенийПолей = Неопределено; - Если ТипЗнч(ЗначенияПолей)=Тип("СписокЗначений") Тогда + Если ТипЗнч(ЗначенияПолей) = Тип("СписокЗначений") Тогда СписокЗначенийПолей = ЗначенияПолей; ИначеЕсли Не ПустаяСтрока(ЗначенияПолей) Тогда СписокЗначенийПолей = ПреобразоватьСтрокуВСписокПолей(ЗначенияПолей); @@ -2805,7 +2898,7 @@ // Корректируем возможные ошибки. Если ПустаяСтрока(Данные.Number) Тогда - Если СтрНачинаетсяС(СокрЛ(Представление), "+") Тогда + Если СтрНачинаетсяС(СокрЛ(Представление), "+") И СтрДлина(Представление) > НачалоГорода Тогда // Была попытка явно указать код страны, оставляем страну в покое. Данные.AreaCode = ""; Данные.Number = СократитьНеЦифры(Сред(Представление, НачалоГорода)); @@ -2904,32 +2997,20 @@ КонецЕсли; Если Тип = Неопределено Тогда - Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда - - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() - И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда + Если ТипЗнч(КонтактнаяИнформация) <> Тип("Строка") + Или (ТипЗнч(КонтактнаяИнформация) = Тип("Строка") + И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация)) Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Тип = МодульУправлениеКонтактнойИнформациейЛокализация.ТипКонтактнойИнформации(КонтактнаяИнформация); - - КонецЕсли; - - Иначе - // Локализация - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Тип = МодульУправлениеКонтактнойИнформациейЛокализация.ТипКонтактнойИнформацииИзОбъектаXDTO(КонтактнаяИнформация); - КонецЕсли; - // Конец Локализация - + Тип = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриОпределенииТипаКонтактнойИнформации(КонтактнаяИнформация, Тип); КонецЕсли; КонецЕсли; - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступныМодулиРаботаСАдресами() И Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступныМодулиРаботаСАдресами() + И Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами"); Возврат МодульРаботаСАдресами.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Тип, НастройкиКонвертации); - КонецЕсли; Результат = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(Тип); @@ -2965,9 +3046,12 @@ Возврат JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация, Тип); КонецЕсли; - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Результат = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Тип, НастройкиКонвертации); + КонтактнаяИнформацияВJSON = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнойИнформацииВСтруктуруJSON(КонтактнаяИнформация, + КонтактнаяИнформацияВJSON, Тип, НастройкиКонвертации); + + Если КонтактнаяИнформацияВJSON <> Неопределено Тогда + Возврат КонтактнаяИнформацияВJSON; КонецЕсли; Возврат Результат; @@ -3027,7 +3111,8 @@ КонецЕсли; - ЗаписатьJSON(ЗаписьJSON, КонтактнаяИнформацияПоПолям,, "АдаптацияПолейКонтактнойИнформации", УправлениеКонтактнойИнформациейСлужебный); + ЗаписатьJSON(ЗаписьJSON, КонтактнаяИнформацияПоПолям,, "АдаптацияПолейКонтактнойИнформации", + УправлениеКонтактнойИнформациейСлужебный); Возврат ЗаписьJSON.Закрыть(); @@ -3105,9 +3190,10 @@ ЧтениеJSON.УстановитьСтроку(Значение); Попытка - Результат = ПрочитатьJSON(ЧтениеJSON,,,, "ВосстановлениеПолейКонтактнойИнформации", УправлениеКонтактнойИнформациейСлужебный); + Результат = ПрочитатьJSON(ЧтениеJSON,,,, "ВосстановлениеПолейКонтактнойИнформации", + УправлениеКонтактнойИнформациейСлужебный); Исключение - ТекстОшибки = НСтр("ru = 'Ошибка конвертации контактной информации из формата JSON.'"); + ТекстОшибки = НСтр("ru = 'Некорректная контактная информация.'"); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки + Символы.ПС + Строка(Значение)); @@ -3116,7 +3202,6 @@ КонецПопытки; ЧтениеJSON.Закрыть(); - Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl index 58d0ce2e7..2adaf4c41 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйВызовСервера/Module.bsl @@ -39,12 +39,10 @@ // Функция СтрокаСоставаКонтактнойИнформации(Знач XMLДанные) Экспорт; - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.СтрокаСоставаКонтактнойИнформации(XMLДанные); - КонецЕсли; + Результат = ""; + УправлениеКонтактнойИнформациейЛокализация.ПриПолученииСтрокиСоставаКонтактнойИнформации(XMLДанные, Результат); - Возврат ""; + Возврат Результат; КонецФункции @@ -61,11 +59,12 @@ Результат = УправлениеКонтактнойИнформацией.ПоляКонтактнойИнформацииДляПреобразования(); - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.ПривестиКонтактнуюИнформациюXML(Данные); + СтандартнаяОбработка = Истина; + УправлениеКонтактнойИнформациейЛокализация.ПриПриведенииКонтактнойИнформацииВXML(Данные, Результат, СтандартнаяОбработка); + Если Не СтандартнаяОбработка И Результат <> Неопределено Тогда + Возврат Результат; КонецЕсли; - + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(Данные.ЗначенияПолей) Тогда ПоляКонтактнойИнформации = УправлениеКонтактнойИнформацией.БазовыеСведенияКонтактнойИнформации(Данные.ЗначенияПолей); ЗаполнитьЗначенияСвойств(Результат, ПоляКонтактнойИнформации); diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index e522f1c44..3c008927d 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -165,7 +165,6 @@ Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда КомандыТипа.Вставить("ВвестиКомментарийКАдресу", УправлениеКонтактнойИнформацией.ОписаниеКомандыПоИмени("ВвестиКомментарийКАдресу")); - КомандыТипа.Вставить("ПоказатьНаКартеЯндекс", УправлениеКонтактнойИнформацией.ОписаниеКомандыПоИмени("ПоказатьНаКартеЯндекс")); КомандыТипа.Вставить("ПоказатьНаКартеGoogle", УправлениеКонтактнойИнформацией.ОписаниеКомандыПоИмени("ПоказатьНаКартеGoogle")); КомандыТипа.Вставить("ЗапланироватьВстречу", УправлениеКонтактнойИнформацией.ОписаниеКомандыПоИмени("ЗапланироватьВстречу")); КомандыТипа.Вставить("ПоказатьИсториюИзменений", УправлениеКонтактнойИнформацией.ОписаниеКомандыПоИмени("ПоказатьИсториюИзменений")); @@ -200,6 +199,8 @@ КонецЕсли; + УправлениеКонтактнойИнформациейЛокализация.ПриОпределениеКомандТипаКонтактнойИнформации(КомандыТипа, Тип); + Возврат КомандыТипа; КонецФункции diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index f6318ba34..aa7c9849c 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -181,6 +181,12 @@ НомерСтрокиОкончание = ТабличныйДокумент.ВысотаТаблицы; ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти; + Для Каждого ОбластьПечати Из ТабличныйДокумент.Области Цикл + Если СтрНачинаетсяС(ОбластьПечати.Имя, "ШтампЭП") И СтрНайти(ОбластьПечати.Имя, "_Документ_") = 0 Тогда + ОбластьПечати.Имя = ОбластьПечати.Имя + "_" + ИмяОбласти; + КонецЕсли; + КонецЦикла; + Если Не НастройкиПечати().ИспользоватьПодписиИПечати Тогда Возврат; КонецЕсли; @@ -480,6 +486,13 @@ // с 1С:Предприятием перед выполнением команды. Если параметр не указан, расширение // подключаться не будет. // +// * ОсновнаяПечатнаяФорма - Булево - (необязательный) Признак определяющий возможность запоминания +// наименований сформированных печатных форм. +// +// * НаименованиеПечатнойФормы - Строка - (необязательный) Наименование, которое будет сохранено при установленном +// признаке "ОсновнаяПечатнаяФорма". Если не заполнено, будет запоминаться значение +// из поля "Представление". +// Функция СоздатьКоллекциюКомандПечати() Экспорт Результат = Новый ТаблицаЗначений; @@ -533,6 +546,10 @@ // Для использования макетов офисных документов в веб-клиенте. Результат.Колонки.Добавить("ТребуетсяРасширениеРаботыСФайлами", Новый ОписаниеТипов("Булево")); + // Механизм хранения наименований для основных печатных форм + Результат.Колонки.Добавить("ОсновнаяПечатнаяФорма", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("НаименованиеПечатнойФормы", Новый ОписаниеТипов("Строка")); + // Для служебного использования. Результат.Колонки.Добавить("СкрытаФункциональнымиОпциями", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("УникальныйИдентификатор", Новый ОписаниеТипов("Строка")); @@ -540,6 +557,9 @@ Результат.Колонки.Добавить("ИмяКомандыНаФорме", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("УсловияВидимостиПоТипамОбъектов", Новый ОписаниеТипов("Соответствие")); Результат.Колонки.Добавить("ВыполнятьВФоновомЗадании"); + Результат.Колонки.Добавить("КомандаПоУмолчанию", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ЗаменитьОсновнуюПечатнуюФорму", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ИдентификаторИзКомплекта", Новый ОписаниеТипов("Строка")); Возврат Результат; @@ -967,12 +987,16 @@ Результат.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("ДвоичныеДанные", Новый ОписаниеТипов("ДвоичныеДанные")); + ОписаниеКоманды = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СоздатьКоллекциюКомандПечати().Добавить()); + СписокКоманд = КомандыПечати; Если ТипЗнч(КомандыПечати) <> Тип("Массив") Тогда СписокКоманд = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КомандыПечати); КонецЕсли; - Для Каждого КомандаПечати Из СписокКоманд Цикл + Для Каждого Команда Из СписокКоманд Цикл + КомандаПечати = ОбщегоНазначения.СкопироватьРекурсивно(ОписаниеКоманды); + ЗаполнитьЗначенияСвойств(КомандаПечати, Команда); //@skip-check query-in-loop - запрос используется внутри обработки исключения для заранее неизвестных данных. ВыполнитьКомандуПечатиВФайл(КомандаПечати, НастройкиСохранения, СписокОбъектов, Результат); КонецЦикла; @@ -987,7 +1011,7 @@ Возврат Результат; -КонецФункции +КонецФункции // Конструктор параметра НастройкиСохранения функции УправлениеПечатью.НапечататьВФайл. // Определяет формат и другие настройки записи табличного документа в файл. @@ -1049,6 +1073,44 @@ КонецФункции +// Возвращает наименования основных печатных форм, которые были сформированы по объектам. +// +// Параметры: +// Ссылки - Массив из ЛюбаяСсылка +// - ФиксированныйМассив из ЛюбаяСсылка - документы, для которых необходимо получить наименование. +// +// Возвращаемое значение: +// Соответствие из КлючИЗначение: +// * Ключ - ЛюбаяСсылка - документ, для которого получено наименование. +// * Значение - Строка - наименование сформированной основной печатной формы. +// - Неопределено - если документ еще не был напечатан. +// +Функция НаименованияСформированныхОсновныхПечатныхФорм(Ссылки) Экспорт + + УстановитьПривилегированныйРежим(Истина); + НаименованияПечатныхФорм = РегистрыСведений.ОсновныеПечатныеФормыОбъектов.НаименованияПечатныхФорм(Ссылки); + УстановитьПривилегированныйРежим(Ложь); + + Возврат НаименованияПечатныхФорм; + +КонецФункции + +// Возвращает наименование основной печатной формы, которая была сформирована по объекту. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - документ, для которого необходимо получить наименование. +// +// Возвращаемое значение: +// Строка - наименование сформированной основной печатной формы. +// Неопределено - если документ еще не был напечатан. +// +Функция НаименованиеСформированнойОсновнойПечатнойФормы(Ссылка) Экспорт + + Ссылки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Ссылка); + Результат = НаименованияСформированныхОсновныхПечатныхФорм(Ссылки); + Возврат Результат[Ссылка]; + +КонецФункции #Область РаботаСМакетамиОфисныхДокументов @@ -1267,7 +1329,7 @@ СообщениеОбОшибке = СокрЛП(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщениеОбОшибке = ?(Прав(СообщениеОбОшибке, 1) = ".", СообщениеОбОшибке, СообщениеОбОшибке + "."); СообщениеОбОшибке = СообщениеОбОшибке + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при попытке вывести область ""%1"" из макета.'"), + НСтр("ru = 'Невозможно вывести в печатную форму область ""%1"" из макета.'"), ОбластьМакета.ОписаниеОбласти.ИмяОбласти); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; @@ -1555,14 +1617,14 @@ // // Параметры: // АдресДокумента - Строка - адрес документа во временном хранилище -// ЭлектронныеПодписи - см. ЭлектроннаяПодпись.УстановленныеПодписи +// ЭлектронныеПодписи - см. ЭлектроннаяПодпись.ПодписиОбъекта // Процедура ДобавитьШтампыВОфисныйДокумент(АдресДокумента, ЭлектронныеПодписи) Экспорт ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресДокумента); ДеревоМакета = ИнициализироватьМакетОфисногоДокументаСКД(ДвоичныеДанные); СтруктураДокумента = ДеревоМакета.СтруктураДокумента; - МакетШтампа = ПолучитьОбщийМакет("МакетШтемпеляЭЦПOfficeOpen"); + МакетШтампа = ПолучитьОбщийМакет("ШтампЭлектроннойПодписиOfficeOpen"); ТекстМакетаШтампа = МакетШтампа.ПолучитьТекст(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ИгнорироватьПробелы = Истина; @@ -1599,11 +1661,13 @@ ЗначенияДляЗаполнения.Вставить("[ЗаголовокВладелец]", "Владелец"); ЗначенияДляЗаполнения.Вставить("[ЗаголовокПериодДействия]", "Действителен"); - Для Каждого Подпись Из ЭлектронныеПодписи Цикл - Сертификат = Подпись.Сертификат; - СертификатКриптографии = Новый СертификатКриптографии(Сертификат.Получить()); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + + Для Каждого ДанныеПодписи Из ЭлектронныеПодписи Цикл - ЗначенияДляЗаполнения.Вставить("[Владелец]", Подпись.КомуВыданСертификат); + СертификатКриптографии = Новый СертификатКриптографии(ДанныеПодписи.Сертификат); + + ЗначенияДляЗаполнения.Вставить("[Владелец]", ДанныеПодписи.КомуВыданСертификат); ЗначенияДляЗаполнения.Вставить("[Сертификат]", СертификатКриптографии.СерийныйНомер); ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1617,6 +1681,14 @@ УзелРазмещенияШтампа = УправлениеПечатьюСлужебный.СкопироватьУзел(РодительУзлаШтампа, ИндексРазмещения, УзелШтампа); УправлениеПечатьюСлужебный.СоздатьПоследующие(УзелРазмещенияШтампа, УзелШтампа); УстановитьПараметрыВДереве(ЗначенияДляЗаполнения, УзелРазмещенияШтампа, ДеревоМакета); + + УзелОтступ = Новый Структура; + УзелОтступ.Вставить("Атрибуты", Новый Структура); + УзелОтступ.Вставить("Строки", Новый Массив); + УзелОтступ.Вставить("ИмяТега", "w:t"); + УзелОтступ.Вставить("Текст", ""); + УзелОтступ.Вставить("ПолныйТекст", ""); + УправлениеПечатьюСлужебный.ДобавитьУзелОписанияРаздела(УзелРазмещенияШтампа, ИндексРазмещения, УзелОтступ); КонецЦикла; ПутьКДокументу = УправлениеПечатьюСлужебный.СобратьФайлОфисногоДокумента(ДеревоМакета); ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКДокументу); @@ -1976,6 +2048,12 @@ ОбъектыПечати = ПечатныеФормы.ОбъектыПечати; ПараметрыВывода = ПечатныеФормы.ПараметрыВывода; Результат = ПечатныеФормы.КоллекцияПечатныхФорм; + + ОсновнаяПечатнаяФорма = Неопределено; + ПараметрыПечати.Свойство("ОсновнаяПечатнаяФорма", ОсновнаяПечатнаяФорма); + Если ОсновнаяПечатнаяФорма <> Неопределено Тогда + ПриВыполненииКомандыПечати(ПараметрыФоновойПечати.ПараметрКоманды, ПараметрыПечати, Результат); + КонецЕсли; КонецЕсли; // Установка признака сохранения печатной формы в файл (не открывать форму, сразу сохранять в файл). @@ -2107,11 +2185,25 @@ СписокОбъектов = Неопределено; КонецЕсли; - КомандыПечати = КомандыПечатиФормы(НастройкиФормы.ИмяФормы, СписокОбъектов); + ИмяФормы = НастройкиФормы.ИмяФормы; + КомандыПечати = КомандыПечатиФормы(ИмяФормы, СписокОбъектов); + УстанавливатьПометки = УстанавливатьПометки(КомандыПечати); + + Если ПоказыватьПечатьПоУмолчанию(ИмяФормы, СписокОбъектов) Тогда; + КомандаПечатиПоУмолчанию = КомандыПечати.Добавить(); + КомандаПечатиПоУмолчанию.МенеджерПечати = "УправлениеПечатью"; + КомандаПечатиПоУмолчанию.Идентификатор = "ПечатьПоУмолчанию"; + КомандаПечатиПоУмолчанию.Представление = НСтр("ru = 'Печать по умолчанию'"); + КомандаПечатиПоУмолчанию.КомандаПоУмолчанию = Истина; + КомандаПечатиПоУмолчанию.Картинка = БиблиотекаКартинок.Печать; + КомандаПечатиПоУмолчанию.ПроверкаПроведенияПередПечатью = Ложь; + КомандаПечатиПоУмолчанию.УсловияВидимости = Новый Массив(1); + КонецЕсли; КлючиПараметровОбработчика = "Обработчик, МенеджерПечати, ЗаголовокФормы, СразуНаПринтер, ФорматСохранения, |ПереопределитьПользовательскиеНастройкиКоличества, ДополнитьКомплектВнешнимиПечатнымиФормами, - |ФиксированныйКомплект, ДополнительныеПараметры, ВыполнятьВФоновомЗадании"; + |ФиксированныйКомплект, ДополнительныеПараметры, ВыполнятьВФоновомЗадании, + |ОсновнаяПечатнаяФорма,НаименованиеПечатнойФормы,ЗаменитьОсновнуюПечатнуюФорму,ИдентификаторИзКомплекта"; Для Каждого КомандаПечати Из КомандыПечати Цикл Если КомандаПечати.Отключена Тогда Продолжить; @@ -2132,6 +2224,16 @@ Иначе Команда.РежимЗаписи = "Записывать"; КонецЕсли; + Если КомандаПечати.ОсновнаяПечатнаяФорма Тогда + Команда.Важность = "Важное"; + Если НастройкиФормы.ЭтоФормаОбъекта И УстанавливатьПометки Тогда + ИдентификаторДляПометки = УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(КомандаПечати.Идентификатор); + Команда.ЗначениеПометки = "ПараметрыУправленияПечатью.%ИСТОЧНИК%.ЗначениеПометки" + ИдентификаторДляПометки; + КонецЕсли; + КонецЕсли; + Если КомандаПечати.КомандаПоУмолчанию Тогда + Команда.ОтображениеКнопки = ОтображениеКнопки.Картинка; + КонецЕсли; Команда.ТребуетсяРаботаСФайлами = КомандаПечати.ТребуетсяРасширениеРаботыСФайлами; Команда.Обработчик = "УправлениеПечатьюСлужебныйКлиент.ОбработчикКоманды"; @@ -2139,6 +2241,22 @@ ЗаполнитьЗначенияСвойств(Команда.ДополнительныеПараметры, КомандаПечати); КонецЦикла; + Если СписокОбъектов = Неопределено Тогда + + ИмяФормы = НастройкиФормы.ИмяФормы; + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяФормы); + Если ОбъектМетаданных <> Неопределено И Не Метаданные.ОбщиеФормы.Содержит(ОбъектМетаданных) Тогда + ОбъектМетаданных = ОбъектМетаданных.Родитель(); + Иначе + ОбъектМетаданных = Неопределено; + КонецЕсли; + + Если ОбъектМетаданных <> Неопределено Тогда + СписокОбъектов = ОбъектМетаданных.РегистрируемыеДокументы; + КонецЕсли; + + КонецЕсли; + КонецПроцедуры // См. ПользователиПереопределяемый.ПриОпределенииНазначенияРолей @@ -2603,6 +2721,7 @@ ОписаниеПолей.Колонки.Добавить("Таблица", Новый ОписаниеТипов("Булево")); ТребуемыеПоля = Новый Соответствие; + ТипыПолейПараметров = Новый Соответствие; Для Каждого ПутьКДанным Из Поля Цикл Пока ЗначениеЗаполнено(ПутьКДанным) Цикл @@ -2620,6 +2739,8 @@ ТребуемыеПоля.Вставить(ПутьКДанным, ОписаниеПоля); КонецЕсли; КонецЕсли; + ИмяПоляТаблицы = ИмяПоляВТаблицу(ПутьКДанным); + ТипыПолейПараметров[ИмяПоляТаблицы] = ОписаниеПоля.Тип; КонецЕсли; ЧастиПути = СтрРазделить(ПутьКДанным, "."); @@ -2653,6 +2774,7 @@ КонецЦикла; ЗаполнитьДанныеПечати(ДанныеПечати, ОписаниеПолей, ИерархияПолей, Объекты, КодЯзыка); + ДанныеПечати["ТипыПолейПараметров"] = ТипыПолейПараметров; Возврат ДанныеПечати; @@ -2952,6 +3074,10 @@ // * Наименование - Строка // * ТипМакета - Строка // * ИсточникиДанных - Строка +// * ОсновнаяПечатнаяФорма - Булево +// * НаименованиеПечатнойФормы - Строка +// * МакетДляВыгрузкиОбъекта - Булево +// * ФорматСохраненияВыгрузки - ПеречислениеСсылка.ФорматыВыгрузкиОбъектов // Функция ОписаниеМакета() Экспорт @@ -2964,6 +3090,10 @@ Результат.Вставить("Наименование"); Результат.Вставить("ТипМакета"); Результат.Вставить("ИсточникиДанных"); + Результат.Вставить("ОсновнаяПечатнаяФорма"); + Результат.Вставить("НаименованиеПечатнойФормы"); + Результат.Вставить("МакетДляВыгрузкиОбъекта", Ложь); + Результат.Вставить("ФорматСохраненияВыгрузки", Перечисления.ФорматыВыгрузкиОбъектов.ПустаяСсылка()); Возврат Результат; @@ -3202,6 +3332,851 @@ Возврат РегистрыСведений.ПользовательскиеМакетыПечати.ПолучитьКлючЗаписиМакета(ИдентификаторМакета); КонецФункции +Процедура ПриСозданииНаСервере(Форма, ТаблицаПодключаемыхКоманд, ЭтоФормаОбъекта) Экспорт + + СоздатьРеквизитХраненияНастроек(Форма, ТаблицаПодключаемыхКоманд); + +КонецПроцедуры + +Процедура ПриОбновленииПометкиОсновныхКоманд(Ссылка, КомандыСПометкой, Результат) Экспорт + + УстановитьПривилегированныйРежим(Истина); + СохраненныйИдентификатор = РегистрыСведений.ОсновныеПечатныеФормыОбъектов.ИдентификаторКоманды(Ссылка); + УстановитьПривилегированныйРежим(Ложь); + + ПараметрыУправленияПечатью = Новый Структура; + + Для Каждого Команда Из КомандыСПометкой Цикл + Идентификатор = УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(Команда.Идентификатор); + + Если ПустаяСтрока(СохраненныйИдентификатор) Тогда + ПараметрыУправленияПечатью.Вставить("ЗначениеПометки" + Идентификатор, Ложь); + Иначе + ЗначениеПометки = (Идентификатор = СохраненныйИдентификатор); + ПараметрыУправленияПечатью.Вставить("ЗначениеПометки" + Идентификатор, ЗначениеПометки); + КонецЕсли; + КонецЦикла; + + Результат.Вставить("ПараметрыУправленияПечатью", ПараметрыУправленияПечатью); + +КонецПроцедуры + +Процедура ПриВыводеКоманд(Форма, ПодключенныеКоманды) Экспорт + + ПараметрыУправленияПечатью = Форма.ПолучитьРеквизиты().Найти("ПараметрыУправленияПечатью"); + Если ПараметрыУправленияПечатью <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПодключенныеКоманды, Форма.ПараметрыУправленияПечатью); + КонецЕсли; + +КонецПроцедуры + +// Записывает данные основной печатной формы, которая была сформирована по объекту +// +// Параметры: +// Объекты - ЛюбаяСсылка +// - Массив из ЛюбаяСсылка - документы, для которых необходимо сохранить наименование. +// ОписаниеКоманды - Структура - строка из таблицы см. УправлениеПечатью.СоздатьКоллекциюКомандПечати. +// КоллекцияПечатныхФорм - ТаблицаЗначений - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм. +// Параметр передается, если печать сформирована в табличный документ. +// +Процедура ПриВыполненииКомандыПечати(Объекты, ОписаниеКоманды, КоллекцияПечатныхФорм = Неопределено) Экспорт + + Если Не ОписаниеКоманды.ОсновнаяПечатнаяФорма Или Не ОписаниеКоманды.ЗаменитьОсновнуюПечатнуюФорму Тогда + Возврат; + КонецЕсли; + + Идентификатор = ОписаниеКоманды.ИдентификаторИзКомплекта; + Если ПустаяСтрока(Идентификатор) Тогда + Идентификатор = ОписаниеКоманды.Идентификатор; + КонецЕсли; + + ДокументСформирован = Ложь; + Если КоллекцияПечатныхФорм = Неопределено Тогда + ДокументСформирован = Истина; + Иначе + ПечатнаяФорма = КоллекцияПечатныхФорм.Найти(Идентификатор, "ИмяМакета"); + Если ПечатнаяФорма <> Неопределено Тогда + ДокументСформирован = ПечатнаяФорма.ТабличныйДокумент.ВысотаТаблицы > 0; + КонецЕсли; + КонецЕсли; + + Если Не ДокументСформирован Тогда + Возврат; + КонецЕсли; + + РегистрыСведений.ОсновныеПечатныеФормыОбъектов.СохранитьНаименованиеОсновнойПечатнойФормы( + Объекты, ОписаниеКоманды.НаименованиеПечатнойФормы, Идентификатор); + + Если ТипЗнч(Объекты) <> Тип("Массив") Тогда + Массив = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объекты); + Иначе + Массив = Объекты; + КонецЕсли; + + Для Каждого Объект Из Массив Цикл + РегистрыСведений.ОсновныеПечатныеФормыКонтрагентов.ЗаписатьИдентификаторПечатнойФормы(Объект, Идентификатор); + КонецЦикла; + +КонецПроцедуры + +Функция ЗаменитьВСтроке(Знач Строка, ПараметрыЗамены) Экспорт + + Для Каждого Элемент Из ПараметрыЗамены Цикл + ПодстрокаПоиска = Элемент.Ключ; + ПодстрокаЗамены = Элемент.Значение; + Строка = СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены); + КонецЦикла; + + Возврат Строка; + +КонецФункции + +Функция ЗаменитьВФорматированнойСтроке(Строка, ПараметрыЗамены) Экспорт + + ФорматированныйДокумент = Новый ФорматированныйДокумент; + ФорматированныйДокумент.УстановитьФорматированнуюСтроку(Строка); + + Для Каждого Элемент Из ПараметрыЗамены Цикл + ПодстрокаПоиска = Элемент.Ключ; + ПодстрокаЗамены = Элемент.Значение; + + НайденнаяОбласть = ФорматированныйДокумент.НайтиТекст(ПодстрокаПоиска); + Пока НайденнаяОбласть <> Неопределено Цикл + Фрагменты = ФорматированныйДокумент.СформироватьЭлементы(НайденнаяОбласть.ЗакладкаНачала, НайденнаяОбласть.ЗакладкаКонца); + Для Индекс = 1 По Фрагменты.ВГраница() Цикл + Фрагменты[0].Текст = Фрагменты[0].Текст + Фрагменты[Индекс].Текст; + Фрагменты[Индекс].Текст = ""; + КонецЦикла; + Фрагменты[0].Текст = СтрЗаменить(Фрагменты[0].Текст, ПодстрокаПоиска, ПодстрокаЗамены); + + НайденнаяОбласть = ФорматированныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть.ЗакладкаКонца); + КонецЦикла; + КонецЦикла; + + Возврат ФорматированныйДокумент.ПолучитьФорматированнуюСтроку(); + +КонецФункции + +Функция ЗначенияПараметров(Параметры, ДанныеПечати, НастройкиФорматаПолей, КодЯзыка) Экспорт + + Результат = Новый Соответствие; + + Для Каждого Параметр Из Параметры Цикл + Значение = ВычислитьВыражение(Параметр, ДанныеПечати, НастройкиФорматаПолей, КодЯзыка); + Результат.Вставить(Параметр, Значение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ВычислитьВыражение(Знач ИсходноеВыражение, ДанныеПечати, НастройкиФорматаПолей, КодЯзыка, ПрименятьФорматирование = Неопределено) Экспорт + + Выражение = ИсходноеВыражение; + Выражение = Сред(Выражение, 2, СтрДлина(Выражение) - 2); + + ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение); + ВыделитьИмяКолонкиТабличнойЧасти(Выражение, ЭлементыФормулы); + + Параметры = Новый Массив; + + Если ПрименятьФорматирование = Неопределено Тогда + ПрименятьФорматирование = Ложь; + + Если ЭлементыФормулы.ОперандыИФункции.Количество() = 1 Тогда + Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл + ЭтоФункция = ОписаниеЭлемента.Значение; + Если ЭтоФункция Тогда + Прервать; + КонецЕсли; + Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; + ПрименятьФорматирование = Операнд = Выражение; + Прервать; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл + Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; + ЭтоФункция = ОписаниеЭлемента.Значение; + КоллекцияДанных = ДанныеПечати; + + Если Не ЭтоФункция Тогда + Если СтрНайти(ВРег("И,ИЛИ,НЕ,ИСТИНА,ЛОЖЬ"), ВРег(Операнд)) Тогда + Продолжить; + КонецЕсли; + + Значение = КоллекцияДанных[ОчиститьКвадратныеСкобки(Операнд) + "." + СтрРазделить(КодЯзыка, "_")[0]]; + Если Не ЗначениеЗаполнено(Значение) Тогда + Значение = КоллекцияДанных[ОчиститьКвадратныеСкобки(Операнд)]; + КонецЕсли; + + Формат = ""; + Если ПрименятьФорматирование Тогда + Формат = НастройкиФорматаПолей[Операнд]; + КонецЕсли; + + Если ЗначениеЗаполнено(Формат) И ЭлементыФормулы.ОперандыИФункции.Количество() = 1 Тогда + Если ЗначениеЗаполнено(КодЯзыка) Тогда + Формат = СтрШаблон("Л=%1;", КодЯзыка) + Формат; + КонецЕсли; + Значение = Формат(Значение, Формат); + КонецЕсли; + + Параметры.Добавить(Значение); + ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ] = "Параметры[" + Параметры.ВГраница() + "]"; + КонецЕсли; + КонецЦикла; + + Выражение = СтрСоединить(ЭлементыФормулы.ВсеЭлементы); + Выражение = СтрЗаменить(Выражение, ИмяМодуляПечати() + РазделительКоманды(), ИмяМодуляПечати() + "."); + + Попытка + Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме(Выражение, Параметры); + Исключение + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выражение ""%1"" содержит ошибки: + |%2'"), ИсходноеВыражение, ТекстОшибки)); + Результат = ""; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +Функция ОчиститьКвадратныеСкобки(Строка) Экспорт + + Если СтрНачинаетсяС(Строка, "[") И СтрЗаканчиваетсяНа(Строка, "]") Тогда + Возврат Сред(Строка, 2, СтрДлина(Строка) - 2); + КонецЕсли; + + Возврат Строка; + +КонецФункции + +// Возвращаемое значение: +// ТабличныйДокумент, ДвоичныеДанные - макет. +// +Функция ПредставлениеМакета(ПутьКМакету, КодЯзыка) Экспорт + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету); + ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); + + НайденныйМакет = Справочники.МакетыПечатныхФорм.СсылкаМакета(ПутьКМакету); + Если НайденныйМакет <> Неопределено Тогда + Возврат Строка(НайденныйМакет); + КонецЕсли; + + Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; + ЧастиПути.Удалить(ЧастиПути.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиПути, "."); + + ИменаПоиска = ИменаМакета(ИмяМакета, КодЯзыка); + ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1; + КоллекцияМакетов = Метаданные.ОбщиеМакеты; + + Если Не ЭтоОбщийМакет Тогда + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяОбъекта); + Если ОбъектМетаданных = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КоллекцияМакетов = ОбъектМетаданных.Макеты; + КонецЕсли; + + Для Каждого ИмяПоиска Из ИменаПоиска Цикл + НайденныйМакет = КоллекцияМакетов.Найти(ИмяПоиска); + Если НайденныйМакет <> Неопределено Тогда + Возврат НайденныйМакет.Представление(); + КонецЕсли; + КонецЦикла; + + ВызватьИсключение ТекстОшибки; + +КонецФункции + +Функция МакетСуществует(ПутьКМакету) Экспорт + + ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); + + Идентификатор = ЧастиПути[ЧастиПути.ВГраница()]; + Если СтрНачинаетсяС(Идентификатор, "ПФ_") Тогда + Идентификатор = Сред(Идентификатор, 4); + Если СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(Идентификатор) Тогда + МакетСуществует = Справочники.МакетыПечатныхФорм.МакетСуществует(Новый УникальныйИдентификатор(Идентификатор)); + Если МакетСуществует Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда + Возврат Ложь; + КонецЕсли; + + ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; + ЧастиПути.Удалить(ЧастиПути.ВГраница()); + ИмяОбъекта = СтрСоединить(ЧастиПути, "."); + + ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1; + КоллекцияМакетов = Метаданные.ОбщиеМакеты; + + Если Не ЭтоОбщийМакет Тогда + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяОбъекта); + Если ОбъектМетаданных = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КоллекцияМакетов = ОбъектМетаданных.Макеты; + КонецЕсли; + + Возврат КоллекцияМакетов.Найти(ИмяМакета) <> Неопределено; + +КонецФункции + +// Формирует печатные формы. +// +// Параметры: +// МассивОбъектов - см. УправлениеПечатьюПереопределяемый.ПриПечати.МассивОбъектов +// ПараметрыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыПечати +// КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм +// ОбъектыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати +// ПараметрыВывода - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыВывода +// +Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт + + КодЯзыка = ПараметрыВывода.КодЯзыка; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(МассивОбъектов[0]); + Если НастройкиПечатиОбъекта(МенеджерОбъекта).ПриОпределенииПолучателей Тогда + МенеджерОбъекта.ПриОпределенииПолучателей(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм); + КонецЕсли; + + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + ПечатнаяФорма.ДоступенВыводНаДругихЯзыках = Истина; + ПечатнаяФорма.ПолныйПутьКМакету = ПечатнаяФорма.ИмяМакета; + ПечатнаяФорма.СинонимМакета = ПредставлениеМакета(ПечатнаяФорма.ПолныйПутьКМакету, КодЯзыка); + // @skip-check query-in-loop - Небольшое количество итераций цикла с запросом к таблице РегистрСведений.ПользовательскиеМакетыПечати + // с заведомо небольшим количеством записей + Макет = МакетПечатнойФормы(ПечатнаяФорма.ПолныйПутьКМакету, КодЯзыка); + + Если ТипЗнч(Макет) = Тип("ДвоичныеДанные") Тогда + ПечатнаяФорма.ОфисныеДокументы = СформироватьОфисныйДокумент(Макет, МассивОбъектов, ОбъектыПечати, КодЯзыка, ПараметрыПечати); + Иначе + ТабличныйДокумент = СформироватьТабличныйДокумент(Макет, МассивОбъектов, ОбъектыПечати, КодЯзыка); // ТабличныйДокумент + ТабличныйДокумент.КлючПараметровПечати = ПечатнаяФорма.ПолныйПутьКМакету + ?(ЗначениеЗаполнено(КодЯзыка), "." + КодЯзыка, ""); + ПечатнаяФорма.ТабличныйДокумент = ТабличныйДокумент; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ОбластиМакета(Макет, ДанныеПечати) Экспорт + + Таблицы = ДанныеПечати["ИменаТабличныхЧастейОбъекта"]; + ВсеОбласти = Новый СписокЗначений; + ОбластиТаблиц = Новый Соответствие; + + ОбластиСУсловиями = Новый Соответствие; + Для Каждого Область Из Макет.Области Цикл + Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + ОбластиСУсловиями.Вставить(Область.Верх, Область); + КонецЕсли; + КонецЦикла; + + ОбластиДляОбработки = Новый Массив; + + НачалоОбласти = 1; + Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл + Если ОбластиСУсловиями[НомерСтроки] <> Неопределено Тогда + Если НачалоОбласти < НомерСтроки Тогда + Область = Макет.Область(НачалоОбласти, , НомерСтроки-1); + ОбластиДляОбработки.Добавить(Область); + КонецЕсли; + ОбластиДляОбработки.Добавить(ОбластиСУсловиями[НомерСтроки]); + НомерСтроки = ОбластиСУсловиями[НомерСтроки].Низ; + НачалоОбласти = НомерСтроки + 1; + КонецЕсли; + КонецЦикла; + + Если Макет.ВысотаТаблицы >= НачалоОбласти Тогда + Область = Макет.Область(НачалоОбласти, , Макет.ВысотаТаблицы); + ОбластиДляОбработки.Добавить(Область); + КонецЕсли; + + Для Каждого Область Из ОбластиДляОбработки Цикл // ОбластьЯчеекТабличногоДокумента + ОписаниеОбластей = РазделитьНаОбласти(Макет, Область, Таблицы); + ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ОбластиТаблиц, ОписаниеОбластей.ОбластиТаблиц); + УсловиеВывода = ""; + Если Макет.Области.Найти(Область.Имя) <> Неопределено Тогда + УсловиеВывода = Область.ПараметрРасшифровки; + КонецЕсли; + Для Каждого ИдентификаторОбласти Из ОписаниеОбластей.ВсеОбласти Цикл + ВсеОбласти.Добавить(ИдентификаторОбласти, УсловиеВывода); + КонецЦикла; + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("ВсеОбласти", ВсеОбласти); + Результат.Вставить("ОбластиТаблиц", ОбластиТаблиц); + + Возврат Результат; + +КонецФункции + +Функция ПоляМакета(Макет) Экспорт + + Тексты = Новый Соответствие; + + ОбработанныеЯчейки = Новый Соответствие; + Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл + Для НомерСтолбца = 1 По Макет.ШиринаТаблицы Цикл + ОбластьЯчейки = Макет.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца); + + ИдентификаторОбласти = ИдентификаторОбласти(ОбластьЯчейки); + Если ОбработанныеЯчейки[ИдентификаторОбласти] <> Неопределено Тогда + Продолжить; + КонецЕсли; + ОбработанныеЯчейки[ИдентификаторОбласти] = Истина; + + Если Не ЗначениеЗаполнено(ОбластьЯчейки.Текст) Тогда + Продолжить; + КонецЕсли; + + Тексты.Вставить(ОбластьЯчейки.Текст, Истина); + КонецЦикла; + КонецЦикла; + + Тексты.Вставить(Строка(Макет.ВерхнийКолонтитул.ТекстСлева), Истина); + Тексты.Вставить(Строка(Макет.ВерхнийКолонтитул.ТекстВЦентре), Истина); + Тексты.Вставить(Строка(Макет.ВерхнийКолонтитул.ТекстСправа), Истина); + + Тексты.Вставить(Строка(Макет.НижнийКолонтитул.ТекстСлева), Истина); + Тексты.Вставить(Строка(Макет.НижнийКолонтитул.ТекстВЦентре), Истина); + Тексты.Вставить(Строка(Макет.НижнийКолонтитул.ТекстСправа), Истина); + + Для Каждого Рисунок Из Макет.Рисунки Цикл + Если Рисунок.ТипРисунка <> ТипРисункаТабличногоДокумента.Группа Тогда + Тексты.Вставить(Рисунок.ПараметрРасшифровки, Истина); + КонецЕсли; + КонецЦикла; + + Выражения = Новый Массив; + + Для Каждого Область Из Макет.Области Цикл + Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") + И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда + УсловиеВывода = Область.ПараметрРасшифровки; + Если ЗначениеЗаполнено(УсловиеВывода) Тогда + Выражения.Добавить(Область.ПараметрРасшифровки); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого Элемент Из Тексты Цикл + Текст = Элемент.Ключ; + ПараметрыТекста = НайтиПараметрыВТексте(Текст); + Для Каждого Выражение Из ПараметрыТекста Цикл + Выражение = Сред(Выражение, 2, СтрДлина(Выражение) - 2); + Выражения.Добавить(Выражение); + КонецЦикла; + КонецЦикла; + + Результат = Новый Массив; + + Для Каждого Выражение Из Выражения Цикл + ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение); + Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл + ЭтоФункция = ОписаниеЭлемента.Значение; + Если ЭтоФункция Тогда + Продолжить; + КонецЕсли; + + Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; + Операнд = ОчиститьКвадратныеСкобки(Операнд); + Если ЗначениеЗаполнено(Операнд) Тогда + Результат.Добавить(Операнд); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Результат = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат); + + Возврат Результат; + +КонецФункции + +// Фильтрует список команд печати в соответствии с установленными функциональными опциями. +Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма = Неопределено) Экспорт + Для каждого ОписаниеКомандыПечати Из КомандыПечати Цикл + ФункциональныеОпцииКомандыПечати = СтрРазделить(ОписаниеКомандыПечати.ФункциональныеОпции, ", ", Ложь); + ВидимостьКоманды = ФункциональныеОпцииКомандыПечати.Количество() = 0; + Для Каждого ФункциональнаяОпция Из ФункциональныеОпцииКомандыПечати Цикл + Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") Тогда + ВидимостьКоманды = ВидимостьКоманды Или Форма.ПолучитьФункциональнуюОпциюФормы(ФункциональнаяОпция); + Иначе + ВидимостьКоманды = ВидимостьКоманды Или ПолучитьФункциональнуюОпцию(ФункциональнаяОпция); + КонецЕсли; + + Если ВидимостьКоманды Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ОписаниеКомандыПечати.СкрытаФункциональнымиОпциями = Не ВидимостьКоманды; + КонецЦикла; +КонецПроцедуры + +Процедура ИсправитьПризнакПроверкаПроведенияПередПечатью(КомандыПечати, ОбъектМетаданных) Экспорт + + Если Не Метаданные.Документы.Содержит(ОбъектМетаданных) + Или ОбъектМетаданных.Проведение = Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда + КомандыПечати.ЗаполнитьЗначения(Ложь, "ПроверкаПроведенияПередПечатью"); + КонецЕсли; + +КонецПроцедуры + +Функция ИмяФайла(ПутьКФайлу) Экспорт + Файл = Новый Файл(ПутьКФайлу); + Возврат Файл.Имя; +КонецФункции + +Функция УпаковатьВАрхив(СписокФайлов) Экспорт + + Если СписокФайлов.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + ПотокВПамяти = Новый ПотокВПамяти; + ЗаписьZipФайла = Новый ЗаписьZipФайла(ПотокВПамяти); + + ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); + СоздатьКаталог(ИмяВременногоКаталога); + + Для Каждого Файл Из СписокФайлов Цикл + ИмяФайла = ИмяВременногоКаталога + Файл.ИмяФайла; + ИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ИмяФайла); + Файл.ДвоичныеДанные.Записать(ИмяФайла); + ЗаписьZipФайла.Добавить(ИмяФайла); + КонецЦикла; + + ЗаписьZipФайла.Записать(); + ПотокВПамяти.Перейти(0, ПозицияВПотоке.Начало); + + ЧтениеДанных = Новый ЧтениеДанных(ПотокВПамяти); + РезультатЧтенияДанных = ЧтениеДанных.Прочитать(); + ДвоичныеДанные = РезультатЧтенияДанных.ПолучитьДвоичныеДанные(); + + ЧтениеДанных.Закрыть(); + ПотокВПамяти.Закрыть(); + + ФайловаяСистема.УдалитьВременныйКаталог(ИмяВременногоКаталога); + + Возврат ДвоичныеДанные; + +КонецФункции + +// Параметры: +// ПутьКДанным - Строка +// ИмяТаблицы - Неопределено, Строка - имя таблицы +// +// Возвращаемое значение: +// Строка - имя поля в таблицу +// +Функция ИмяПоляВТаблицу(ПутьКДанным, ИмяТаблицы = Неопределено) Экспорт + + Если ИмяТаблицы = Неопределено Тогда + Возврат СтрЗаменить(ПутьКДанным, ".", "_"); + Иначе + Возврат СтрЗаменить(ПутьКДанным, ИмяТаблицы + ".", ""); + КонецЕсли; + +КонецФункции + +Функция ПечатныеФормыПоОбъектам(ПечатнаяФорма, ОбъектыПечати) Экспорт + + Если ОбъектыПечати.Количество() = 0 Тогда + Возврат Новый Структура("ОбъектыПечатиНеЗаданы", ПечатнаяФорма); + КонецЕсли; + + Результат = Новый Соответствие; + + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + ИмяОбласти = ОбъектПечати.Представление; + Область = ПечатнаяФорма.Области.Найти(ИмяОбласти); + Если Область = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ОбъектыПечати.Количество() = 1 Тогда + ТабличныйДокумент = ПечатнаяФорма; + Иначе + ТабличныйДокумент = ПечатнаяФорма.ПолучитьОбласть(Область.Верх, , Область.Низ); + ПоследняяСтрока = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, , ТабличныйДокумент.ВысотаТаблицы, ); + ПоследняяСтрока.КонецСтраницы = Ложь; + СкопироватьСвойстваТабличногоДокумента(ТабличныйДокумент, ПечатнаяФорма); + КонецЕсли; + + Результат.Вставить(ОбъектПечати.Значение, ТабличныйДокумент); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Конструктор для параметра КоллекцияПечатныхФорм процедуры Печать. +// +// Возвращаемое значение: +// ТаблицаЗначений - пустая коллекция печатных форм: +// * ИмяМакета - Строка - идентификатор печатной формы; +// * ИмяВРЕГ - Строка - идентификатор в верхнем регистре символов для быстрого поиска; +// * СинонимМакета - Строка - представление печатной формы; +// * ТабличныйДокумент - ТабличныйДокумент - печатная форма; +// * Экземпляров - Число - количество копий, которое необходимо вывести на печать; +// * Картинка - Картинка - (не используется); +// * ПолныйПутьКМакету - Строка - используется для быстрого перехода к редактированию макета печатной формы; +// * ИмяФайлаПечатнойФормы - Строка - имя файла; +// - Соответствие из КлючИЗначение - имена файлов для каждого объекта: +// ** Ключ - ЛюбаяСсылка - ссылка на объект печати; +// ** Значение - Строка - имя файла; +// * ОфисныеДокументы - Соответствие из КлючИЗначение - коллекция печатных форм в формате офисных документов: +// ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы; +// ** Значение - Строка - имя файла печатной формы. +// +Функция ПодготовитьКоллекциюПечатныхФорм(Знач Идентификаторы) Экспорт + + Результат = Новый ТаблицаЗначений; + Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл + Результат.Колонки.Добавить(ИмяКолонки); + КонецЦикла; + + Если ТипЗнч(Идентификаторы) = Тип("Строка") Тогда + Идентификаторы = СтрРазделить(Идентификаторы, ","); + КонецЕсли; + + Для Каждого Идентификатор Из Идентификаторы Цикл + ПечатнаяФорма = Результат.Найти(Идентификатор, "ИмяМакета"); + Если ПечатнаяФорма = Неопределено Тогда + ПечатнаяФорма = Результат.Добавить(); + ПечатнаяФорма.ИмяМакета = Идентификатор; + ПечатнаяФорма.ИмяВРЕГ = ВРег(Идентификатор); + ПечатнаяФорма.Экземпляров = 1; + Иначе + ПечатнаяФорма.Экземпляров = ПечатнаяФорма.Экземпляров + 1; + КонецЕсли; + КонецЦикла; + + Результат.Индексы.Добавить("ИмяВРЕГ"); + Возврат Результат; + +КонецФункции + +// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы. +// +// Возвращаемое значение: +// Структура: +// * ПараметрыОтправки - Структура: +// ** Получатель - Неопределено, Произвольный +// ** Тема - Строка +// ** Текст - Строка +// * КодЯзыка - Строка +// * ДоступнаПечатьПоКомплектно - Булево +// * ЗаголовокФормы - Строка +// +Функция ПодготовитьСтруктуруПараметровВывода() Экспорт + + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ЗаголовокФормы", ""); + ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется + ПараметрыВывода.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); + + СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); + ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); + + Возврат ПараметрыВывода; + +КонецФункции + +// Параметры: +// ОбъектыПечати - СписокЗначений +// ТабличныйДокумент - ТабличныйДокумент +// +Функция ПодписиИПечатиОбластей(ОбъектыПечати) Экспорт + + ПодписиИПечати = ПодписиИПечатиОбъектов(ОбъектыПечати); + + ПодписиИПечатиОбластей = Новый Соответствие; + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + СсылкаНаОбъект = ОбъектПечати.Значение; + КомплектПодписейИПечатей = ПодписиИПечати[СсылкаНаОбъект]; + ПодписиИПечатиОбластей.Вставить(ОбъектПечати.Представление, КомплектПодписейИПечатей); + КонецЦикла; + + Возврат ПодписиИПечатиОбластей; + +КонецФункции + +Функция ПодписиИПечатиТабличногоДокумента(ОбъектыПечати, Макет, КодЯзыка) Экспорт + + Поля = Новый Массив; + + Тексты = Новый Соответствие; + Для Каждого Рисунок Из Макет.Рисунки Цикл + Если Рисунок.ТипРисунка <> ТипРисункаТабличногоДокумента.Группа Тогда + Тексты.Вставить(Рисунок.ПараметрРасшифровки, Истина); + КонецЕсли; + КонецЦикла; + + Для Каждого Элемент Из Тексты Цикл + Текст = Элемент.Ключ; + ПараметрыТекста = НайтиПараметрыВТексте(Текст); + Для Каждого Выражение Из ПараметрыТекста Цикл + Выражение = Сред(Выражение, 2, СтрДлина(Выражение) - 2); + ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение); + Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл + ЭтоФункция = ОписаниеЭлемента.Значение; + Если ЭтоФункция Тогда + Продолжить; + КонецЕсли; + + Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; + Операнд = ОчиститьКвадратныеСкобки(Операнд); + Если ЗначениеЗаполнено(Операнд) Тогда + Поля.Добавить(Операнд); + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + Объекты = ОбъектыПечати.ВыгрузитьЗначения(); + ДанныеПечати = ДанныеПечати(Объекты, Поля, КодЯзыка); + + Результат = Новый Соответствие; + + Для Каждого ОписаниеОбласти Из ОбъектыПечати Цикл + Объект = ОписаниеОбласти.Значение; + ИмяОбласти = ОписаниеОбласти.Представление; + + Картинки = Новый Соответствие; + Для Каждого Поле Из Поля Цикл + Если Картинки[Поле] <> Неопределено Тогда + Продолжить; + КонецЕсли; + СсылкаНаКартинку = ДанныеПечати[Объект][Поле]; + Картинка = КартинкаИзФайла(СсылкаНаКартинку); + Картинки.Вставить("[" + Поле + "]", Картинка); + КонецЦикла; + + Результат.Вставить(ИмяОбласти, Картинки); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ДобавитьПодписьИПечать(ТабличныйДокумент, ПодписиИПечатиОбластей) Экспорт + + Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + Позиция = СтрНайти(Рисунок.Имя, "_Документ_"); + Если Позиция > 0 Тогда + ИмяОбластиОбъекта = Сред(Рисунок.Имя, Позиция + 1); + + КомплектПодписейИПечатей = ПодписиИПечатиОбластей[ИмяОбластиОбъекта]; + Если КомплектПодписейИПечатей = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Группа Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Рисунок.ПараметрРасшифровки) Тогда + ИмяКартинки = Рисунок.ПараметрРасшифровки; + Иначе + ИмяКартинки = Лев(Рисунок.Имя, Позиция - 1); + КонецЕсли; + + Картинка = Неопределено; + Если ТипЗнч(КомплектПодписейИПечатей) = Тип("Соответствие") + Или ТипЗнч(КомплектПодписейИПечатей) = Тип("Структура") И КомплектПодписейИПечатей.Свойство(ИмяКартинки) Тогда + Картинка = КомплектПодписейИПечатей[ИмяКартинки]; + КонецЕсли; + + Если Картинка <> Неопределено Тогда + Рисунок.Картинка = Картинка; + КонецЕсли; + Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура УбратьПодписьИПечать(ТабличныйДокумент, СкрыватьПодписиИПечати = Ложь) Экспорт + + УдаляемыеРисунки = Новый Массив; + Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + Если ЭтоПодписьИлиПечать(Рисунок) Тогда + Рисунок.Картинка = Новый Картинка; + Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии); + Если СкрыватьПодписиИПечати Тогда + УдаляемыеРисунки.Добавить(Рисунок); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого Рисунок Из УдаляемыеРисунки Цикл + ТабличныйДокумент.Рисунки.Удалить(Рисунок); + КонецЦикла; + +КонецПроцедуры + +Функция ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ИмяФайлаПечатнойФормы, НазваниеПечатнойФормы) Экспорт + + Если ОбъектПечати = Неопределено Или ОбъектПечати = "ОбъектыПечатиНеЗаданы" Тогда + Если ЗначениеЗаполнено(НазваниеПечатнойФормы) Тогда + Возврат НазваниеПечатнойФормы; + КонецЕсли; + Возврат НСтр("ru = 'Документ'"); + КонецЕсли; + + Если ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Соответствие") Тогда + Возврат Строка(ИмяФайлаПечатнойФормы[ОбъектПечати]); + ИначеЕсли ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Строка") И Не ПустаяСтрока(ИмяФайлаПечатнойФормы) Тогда + Возврат ИмяФайлаПечатнойФормы; + КонецЕсли; + + Возврат ИмяФайлаПечатнойФормыПоУмолчанию(ОбъектПечати, НазваниеПечатнойФормы); + +КонецФункции + +Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) Экспорт + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.Прочитать(ИмяФайлаHTML, КодировкаТекста.UTF8); + ТекстHTML = ТекстовыйДокумент.ПолучитьТекст(); + + ФайлHTML = Новый Файл(ИмяФайлаHTML); + + ИмяКаталогаКартинок = ФайлHTML.ИмяБезРасширения + "_files"; + ПутьКаталогаКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяКаталогаКартинок); + + // Ожидается, что в каталоге будут только картинки. + ФайлыКартинок = НайтиФайлы(ПутьКаталогаКартинок, "*"); + + Для Каждого ФайлКартинки Из ФайлыКартинок Цикл + КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); + КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; + + ТекстHTML = СтрЗаменить(ТекстHTML, ИмяКаталогаКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); + КонецЦикла; + + ТекстовыйДокумент.УстановитьТекст(ТекстHTML); + ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -3499,7 +4474,7 @@ КонецЕсли; ПечатныеФормы = СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати); - + ТабличныеДокументы = Новый СписокЗначений; Для Каждого ПечатнаяФорма Из ПечатныеФормы.КоллекцияПечатныхФорм Цикл Если (ТипЗнч(ПечатнаяФорма.ТабличныйДокумент) = Тип("ТабличныйДокумент")) И (ПечатнаяФорма.ТабличныйДокумент.ВысотаТаблицы <> 0) Тогда @@ -3543,26 +4518,6 @@ КонецФункции -// Фильтрует список команд печати в соответствии с установленными функциональными опциями. -Процедура ОпределитьВидимостьКомандПечатиПоФункциональнымОпциям(КомандыПечати, Форма = Неопределено) - Для каждого ОписаниеКомандыПечати Из КомандыПечати Цикл - ФункциональныеОпцииКомандыПечати = СтрРазделить(ОписаниеКомандыПечати.ФункциональныеОпции, ", ", Ложь); - ВидимостьКоманды = ФункциональныеОпцииКомандыПечати.Количество() = 0; - Для Каждого ФункциональнаяОпция Из ФункциональныеОпцииКомандыПечати Цикл - Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") Тогда - ВидимостьКоманды = ВидимостьКоманды Или Форма.ПолучитьФункциональнуюОпциюФормы(ФункциональнаяОпция); - Иначе - ВидимостьКоманды = ВидимостьКоманды Или ПолучитьФункциональнуюОпцию(ФункциональнаяОпция); - КонецЕсли; - - Если ВидимостьКоманды Тогда - Прервать; - КонецЕсли; - КонецЦикла; - ОписаниеКомандыПечати.СкрытаФункциональнымиОпциями = Не ВидимостьКоманды; - КонецЦикла; -КонецПроцедуры - Функция КомпонентаФормированияQRКода() ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода. Подробности в журнале регистрации.'"); @@ -3724,17 +4679,6 @@ КонецПроцедуры -Процедура ИсправитьПризнакПроверкаПроведенияПередПечатью(КомандыПечати, ОбъектМетаданных) - - Если Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда - Если ОбъектМетаданных.Проведение = Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда - КомандыПечати.ЗаполнитьЗначения(Ложь, "ПроверкаПроведенияПередПечатью"); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - - Функция УникальныйИдентификаторКомандыПечати(КомандаПечати) Параметры = Новый Массив; @@ -3819,6 +4763,13 @@ КонецЕсли; КонецЦикла; + ОсновныеКомандыПечати = КомандыПечати.НайтиСтроки(Новый Структура("ОсновнаяПечатнаяФорма", Истина)); + Для Каждого КомандаПечати Из ОсновныеКомандыПечати Цикл + Если Не ЗначениеЗаполнено(КомандаПечати.НаименованиеПечатнойФормы) Тогда + КомандаПечати.НаименованиеПечатнойФормы = КомандаПечати.Представление; + КонецЕсли; + КонецЦикла; + КомандыПечати.Сортировать("Порядок Возр, Представление Возр"); ИсправитьПризнакПроверкаПроведенияПередПечатью(КомандыПечати, ОбъектМетаданных); УстановитьНастройкиКомандПечати(КомандыПечати, Источник.СсылкаМетаданных); @@ -3828,7 +4779,6 @@ Возврат КомандыПечати; КонецФункции - // Параметры: // ТабличныйДокумент - ТабличныйДокумент // ОбъектыПечати - СписокЗначений @@ -3907,83 +4857,6 @@ Возврат НСтр("ru = 'Тип области не указан или указан некорректно.'"); КонецФункции -// Параметры: -// ОбъектыПечати - СписокЗначений -// ТабличныйДокумент - ТабличныйДокумент -// -Функция ПодписиИПечатиОбластей(ОбъектыПечати) Экспорт - - ПодписиИПечати = ПодписиИПечатиОбъектов(ОбъектыПечати); - - ПодписиИПечатиОбластей = Новый Соответствие; - Для Каждого ОбъектПечати Из ОбъектыПечати Цикл - СсылкаНаОбъект = ОбъектПечати.Значение; - КомплектПодписейИПечатей = ПодписиИПечати[СсылкаНаОбъект]; - ПодписиИПечатиОбластей.Вставить(ОбъектПечати.Представление, КомплектПодписейИПечатей); - КонецЦикла; - - Возврат ПодписиИПечатиОбластей; - -КонецФункции - -Функция ПодписиИПечатиТабличногоДокумента(ОбъектыПечати, Макет, КодЯзыка) Экспорт - - Поля = Новый Массив; - - Тексты = Новый Соответствие; - Для Каждого Рисунок Из Макет.Рисунки Цикл - Если Рисунок.ТипРисунка <> ТипРисункаТабличногоДокумента.Группа Тогда - Тексты.Вставить(Рисунок.ПараметрРасшифровки, Истина); - КонецЕсли; - КонецЦикла; - - Для Каждого Элемент Из Тексты Цикл - Текст = Элемент.Ключ; - ПараметрыТекста = НайтиПараметрыВТексте(Текст); - Для Каждого Выражение Из ПараметрыТекста Цикл - Выражение = Сред(Выражение, 2, СтрДлина(Выражение) - 2); - ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение); - Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл - ЭтоФункция = ОписаниеЭлемента.Значение; - Если ЭтоФункция Тогда - Продолжить; - КонецЕсли; - - Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; - Операнд = ОчиститьКвадратныеСкобки(Операнд); - Если ЗначениеЗаполнено(Операнд) Тогда - Поля.Добавить(Операнд); - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЦикла; - - Объекты = ОбъектыПечати.ВыгрузитьЗначения(); - ДанныеПечати = ДанныеПечати(Объекты, Поля, КодЯзыка); - - Результат = Новый Соответствие; - - Для Каждого ОписаниеОбласти Из ОбъектыПечати Цикл - Объект = ОписаниеОбласти.Значение; - ИмяОбласти = ОписаниеОбласти.Представление; - - Картинки = Новый Соответствие; - Для Каждого Поле Из Поля Цикл - Если Картинки[Поле] <> Неопределено Тогда - Продолжить; - КонецЕсли; - СсылкаНаКартинку = ДанныеПечати[Объект][Поле]; - Картинка = КартинкаИзФайла(СсылкаНаКартинку); - Картинки.Вставить("[" + Поле + "]", Картинка); - КонецЦикла; - - Результат.Вставить(ИмяОбласти, Картинки); - КонецЦикла; - - Возврат Результат; - -КонецФункции - Функция ПодписиИПечатиОбъектов(Знач ОбъектыПечати) Экспорт СписокОбъектов = ОбъектыПечати.ВыгрузитьЗначения(); @@ -3995,62 +4868,6 @@ КонецФункции -Процедура ДобавитьПодписьИПечать(ТабличныйДокумент, ПодписиИПечатиОбластей) Экспорт - - Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл - Позиция = СтрНайти(Рисунок.Имя, "_Документ_"); - Если Позиция > 0 Тогда - ИмяОбластиОбъекта = Сред(Рисунок.Имя, Позиция + 1); - - КомплектПодписейИПечатей = ПодписиИПечатиОбластей[ИмяОбластиОбъекта]; - Если КомплектПодписейИПечатей = Неопределено Тогда - Продолжить; - КонецЕсли; - - Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Группа Тогда - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(Рисунок.ПараметрРасшифровки) Тогда - ИмяКартинки = Рисунок.ПараметрРасшифровки; - Иначе - ИмяКартинки = Лев(Рисунок.Имя, Позиция - 1); - КонецЕсли; - - Картинка = Неопределено; - Если ТипЗнч(КомплектПодписейИПечатей) = Тип("Соответствие") - Или ТипЗнч(КомплектПодписейИПечатей) = Тип("Структура") И КомплектПодписейИПечатей.Свойство(ИмяКартинки) Тогда - Картинка = КомплектПодписейИПечатей[ИмяКартинки]; - КонецЕсли; - - Если Картинка <> Неопределено Тогда - Рисунок.Картинка = Картинка; - КонецЕсли; - Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура УбратьПодписьИПечать(ТабличныйДокумент, СкрыватьПодписиИПечати = Ложь) Экспорт - - УдаляемыеРисунки = Новый Массив; - Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл - Если ЭтоПодписьИлиПечать(Рисунок) Тогда - Рисунок.Картинка = Новый Картинка; - Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии); - Если СкрыватьПодписиИПечати Тогда - УдаляемыеРисунки.Добавить(Рисунок); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Для Каждого Рисунок Из УдаляемыеРисунки Цикл - ТабличныйДокумент.Рисунки.Удалить(Рисунок); - КонецЦикла; - -КонецПроцедуры - Функция ЭтоПодписьИлиПечать(Рисунок) Экспорт Возврат Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Картинка И СтрНайти(Рисунок.Имя, "_Документ_") > 0; @@ -4090,72 +4907,6 @@ КонецФункции -Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) Экспорт - - ТекстовыйДокумент = Новый ТекстовыйДокумент(); - ТекстовыйДокумент.Прочитать(ИмяФайлаHTML, КодировкаТекста.UTF8); - ТекстHTML = ТекстовыйДокумент.ПолучитьТекст(); - - ФайлHTML = Новый Файл(ИмяФайлаHTML); - - ИмяКаталогаКартинок = ФайлHTML.ИмяБезРасширения + "_files"; - ПутьКаталогаКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяКаталогаКартинок); - - // Ожидается, что в каталоге будут только картинки. - ФайлыКартинок = НайтиФайлы(ПутьКаталогаКартинок, "*"); - - Для Каждого ФайлКартинки Из ФайлыКартинок Цикл - КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); - КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; - - ТекстHTML = СтрЗаменить(ТекстHTML, ИмяКаталогаКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); - КонецЦикла; - - ТекстовыйДокумент.УстановитьТекст(ТекстHTML); - ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); - -КонецПроцедуры - -Функция ИмяФайла(ПутьКФайлу) - Файл = Новый Файл(ПутьКФайлу); - Возврат Файл.Имя; -КонецФункции - -Функция УпаковатьВАрхив(СписокФайлов) - - Если СписокФайлов.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - ПотокВПамяти = Новый ПотокВПамяти; - ЗаписьZipФайла = Новый ЗаписьZipФайла(ПотокВПамяти); - - ИмяВременногоКаталога = ФайловаяСистема.СоздатьВременныйКаталог(); - СоздатьКаталог(ИмяВременногоКаталога); - - Для Каждого Файл Из СписокФайлов Цикл - ИмяФайла = ИмяВременногоКаталога + Файл.ИмяФайла; - ИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ИмяФайла); - Файл.ДвоичныеДанные.Записать(ИмяФайла); - ЗаписьZipФайла.Добавить(ИмяФайла); - КонецЦикла; - - ЗаписьZipФайла.Записать(); - ПотокВПамяти.Перейти(0, ПозицияВПотоке.Начало); - - ЧтениеДанных = Новый ЧтениеДанных(ПотокВПамяти); - РезультатЧтенияДанных = ЧтениеДанных.Прочитать(); - ДвоичныеДанные = РезультатЧтенияДанных.ПолучитьДвоичныеДанные(); - - ЧтениеДанных.Закрыть(); - ПотокВПамяти.Закрыть(); - - ФайловаяСистема.УдалитьВременныйКаталог(ИмяВременногоКаталога); - - Возврат ДвоичныеДанные; - -КонецФункции - // Параметры: // ТабличныйДокумент - ТабличныйДокумент // Формат - ТипФайлаТабличногоДокумента @@ -4178,56 +4929,6 @@ КонецФункции -Функция ПечатныеФормыПоОбъектам(ПечатнаяФорма, ОбъектыПечати) Экспорт - - Если ОбъектыПечати.Количество() = 0 Тогда - Возврат Новый Структура("ОбъектыПечатиНеЗаданы", ПечатнаяФорма); - КонецЕсли; - - Результат = Новый Соответствие; - - Для Каждого ОбъектПечати Из ОбъектыПечати Цикл - ИмяОбласти = ОбъектПечати.Представление; - Область = ПечатнаяФорма.Области.Найти(ИмяОбласти); - Если Область = Неопределено Тогда - Продолжить; - КонецЕсли; - - Если ОбъектыПечати.Количество() = 1 Тогда - ТабличныйДокумент = ПечатнаяФорма; - Иначе - ТабличныйДокумент = ПечатнаяФорма.ПолучитьОбласть(Область.Верх, , Область.Низ); - ПоследняяСтрока = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, , ТабличныйДокумент.ВысотаТаблицы, ); - ПоследняяСтрока.КонецСтраницы = Ложь; - СкопироватьСвойстваТабличногоДокумента(ТабличныйДокумент, ПечатнаяФорма); - КонецЕсли; - - Результат.Вставить(ОбъектПечати.Значение, ТабличныйДокумент); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ИмяФайлаПечатнойФормы, НазваниеПечатнойФормы) Экспорт - - Если ОбъектПечати = Неопределено Или ОбъектПечати = "ОбъектыПечатиНеЗаданы" Тогда - Если ЗначениеЗаполнено(НазваниеПечатнойФормы) Тогда - Возврат НазваниеПечатнойФормы; - КонецЕсли; - Возврат НСтр("ru = 'Документ'"); - КонецЕсли; - - Если ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Соответствие") Тогда - Возврат Строка(ИмяФайлаПечатнойФормы[ОбъектПечати]); - ИначеЕсли ТипЗнч(ИмяФайлаПечатнойФормы) = Тип("Строка") И Не ПустаяСтрока(ИмяФайлаПечатнойФормы) Тогда - Возврат ИмяФайлаПечатнойФормы; - КонецЕсли; - - Возврат ИмяФайлаПечатнойФормыПоУмолчанию(ОбъектПечати, НазваниеПечатнойФормы); - -КонецФункции - Функция ИмяФайлаПечатнойФормыПоУмолчанию(ОбъектПечати, НазваниеПечатнойФормы) ЭтоДокумент = ОбщегоНазначения.ЭтоДокумент(Метаданные.НайтиПоТипу(ТипЗнч(ОбъектПечати))); @@ -4326,79 +5027,6 @@ КонецФункции -// Конструктор для параметра КоллекцияПечатныхФорм процедуры Печать. -// -// Возвращаемое значение: -// ТаблицаЗначений - пустая коллекция печатных форм: -// * ИмяМакета - Строка - идентификатор печатной формы; -// * ИмяВРЕГ - Строка - идентификатор в верхнем регистре символов для быстрого поиска; -// * СинонимМакета - Строка - представление печатной формы; -// * ТабличныйДокумент - ТабличныйДокумент - печатная форма; -// * Экземпляров - Число - количество копий, которое необходимо вывести на печать; -// * Картинка - Картинка - (не используется); -// * ПолныйПутьКМакету - Строка - используется для быстрого перехода к редактированию макета печатной формы; -// * ИмяФайлаПечатнойФормы - Строка - имя файла; -// - Соответствие из КлючИЗначение - имена файлов для каждого объекта: -// ** Ключ - ЛюбаяСсылка - ссылка на объект печати; -// ** Значение - Строка - имя файла; -// * ОфисныеДокументы - Соответствие из КлючИЗначение - коллекция печатных форм в формате офисных документов: -// ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы; -// ** Значение - Строка - имя файла печатной формы. -// -Функция ПодготовитьКоллекциюПечатныхФорм(Знач Идентификаторы) Экспорт - - Результат = Новый ТаблицаЗначений; - Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл - Результат.Колонки.Добавить(ИмяКолонки); - КонецЦикла; - - Если ТипЗнч(Идентификаторы) = Тип("Строка") Тогда - Идентификаторы = СтрРазделить(Идентификаторы, ","); - КонецЕсли; - - Для Каждого Идентификатор Из Идентификаторы Цикл - ПечатнаяФорма = Результат.Найти(Идентификатор, "ИмяМакета"); - Если ПечатнаяФорма = Неопределено Тогда - ПечатнаяФорма = Результат.Добавить(); - ПечатнаяФорма.ИмяМакета = Идентификатор; - ПечатнаяФорма.ИмяВРЕГ = ВРег(Идентификатор); - ПечатнаяФорма.Экземпляров = 1; - Иначе - ПечатнаяФорма.Экземпляров = ПечатнаяФорма.Экземпляров + 1; - КонецЕсли; - КонецЦикла; - - Результат.Индексы.Добавить("ИмяВРЕГ"); - Возврат Результат; - -КонецФункции - -// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы. -// -// Возвращаемое значение: -// Структура: -// * ПараметрыОтправки - Структура: -// ** Получатель - Неопределено, Произвольный -// ** Тема - Строка -// ** Текст - Строка -// * КодЯзыка - Строка -// * ДоступнаПечатьПоКомплектно - Булево -// * ЗаголовокФормы - Строка -// -Функция ПодготовитьСтруктуруПараметровВывода() Экспорт - - ПараметрыВывода = Новый Структура; - ПараметрыВывода.Вставить("ЗаголовокФормы", ""); - ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется - ПараметрыВывода.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка()); - - СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); - ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); - - Возврат ПараметрыВывода; - -КонецФункции - // Параметры: // КомандаПечати - СтрокаТаблицыЗначений из см. СоздатьКоллекциюКомандПечати // НастройкиСохранения - см. УправлениеПечатью.НастройкиСохранения @@ -4422,6 +5050,8 @@ СписокОбъектов, КомандаПечати.ДополнительныеПараметры); КонецЕсли; + ПриВыполненииКомандыПечати(СписокОбъектов, КомандаПечати, ДанныеПечати.КоллекцияПечатныхФорм); + КоллекцияПечатныхФорм = ДанныеПечати.КоллекцияПечатныхФорм; ОбъектыПечати = ДанныеПечати.ОбъектыПечати; @@ -4669,43 +5299,6 @@ КонецПроцедуры -// Формирует печатные формы. -// -// Параметры: -// МассивОбъектов - см. УправлениеПечатьюПереопределяемый.ПриПечати.МассивОбъектов -// ПараметрыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыПечати -// КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм -// ОбъектыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати -// ПараметрыВывода - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыВывода -// -Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) - - КодЯзыка = ПараметрыВывода.КодЯзыка; - - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(МассивОбъектов[0]); - Если НастройкиПечатиОбъекта(МенеджерОбъекта).ПриОпределенииПолучателей Тогда - МенеджерОбъекта.ПриОпределенииПолучателей(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм); - КонецЕсли; - - Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл - ПечатнаяФорма.ДоступенВыводНаДругихЯзыках = Истина; - ПечатнаяФорма.ПолныйПутьКМакету = ПечатнаяФорма.ИмяМакета; - ПечатнаяФорма.СинонимМакета = ПредставлениеМакета(ПечатнаяФорма.ПолныйПутьКМакету, КодЯзыка); - // @skip-check query-in-loop - Небольшое количество итераций цикла с запросом к таблице РегистрСведений.ПользовательскиеМакетыПечати - // с заведомо небольшим количеством записей - Макет = МакетПечатнойФормы(ПечатнаяФорма.ПолныйПутьКМакету, КодЯзыка); - - Если ТипЗнч(Макет) = Тип("ДвоичныеДанные") Тогда - ПечатнаяФорма.ОфисныеДокументы = СформироватьОфисныйДокумент(Макет, МассивОбъектов, ОбъектыПечати, КодЯзыка, ПараметрыПечати); - Иначе - ТабличныйДокумент = СформироватьТабличныйДокумент(Макет, МассивОбъектов, ОбъектыПечати, КодЯзыка); // ТабличныйДокумент - ТабличныйДокумент.КлючПараметровПечати = ПечатнаяФорма.ПолныйПутьКМакету + ?(ЗначениеЗаполнено(КодЯзыка), "." + КодЯзыка, ""); - ПечатнаяФорма.ТабличныйДокумент = ТабличныйДокумент; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - Функция ЗаменитьПараметрыЗначениями(Знач Строка, ИсточникДанных, НастройкиФорматаПолей, КодЯзыка) ПараметрыТекста = НайтиПараметрыВТексте(Строка(Строка)); @@ -4721,44 +5314,6 @@ КонецФункции -Функция ЗаменитьВСтроке(Знач Строка, ПараметрыЗамены) - - Для Каждого Элемент Из ПараметрыЗамены Цикл - ПодстрокаПоиска = Элемент.Ключ; - ПодстрокаЗамены = Элемент.Значение; - Строка = СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены); - КонецЦикла; - - Возврат Строка; - -КонецФункции - -Функция ЗаменитьВФорматированнойСтроке(Строка, ПараметрыЗамены) - - ФорматированныйДокумент = Новый ФорматированныйДокумент; - ФорматированныйДокумент.УстановитьФорматированнуюСтроку(Строка); - - Для Каждого Элемент Из ПараметрыЗамены Цикл - ПодстрокаПоиска = Элемент.Ключ; - ПодстрокаЗамены = Элемент.Значение; - - НайденнаяОбласть = ФорматированныйДокумент.НайтиТекст(ПодстрокаПоиска); - Пока НайденнаяОбласть <> Неопределено Цикл - Фрагменты = ФорматированныйДокумент.СформироватьЭлементы(НайденнаяОбласть.ЗакладкаНачала, НайденнаяОбласть.ЗакладкаКонца); - Для Индекс = 1 По Фрагменты.ВГраница() Цикл - Фрагменты[0].Текст = Фрагменты[0].Текст + Фрагменты[Индекс].Текст; - Фрагменты[Индекс].Текст = ""; - КонецЦикла; - Фрагменты[0].Текст = СтрЗаменить(Фрагменты[0].Текст, ПодстрокаПоиска, ПодстрокаЗамены); - - НайденнаяОбласть = ФорматированныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть.ЗакладкаКонца); - КонецЦикла; - КонецЦикла; - - Возврат ФорматированныйДокумент.ПолучитьФорматированнуюСтроку(); - -КонецФункции - Процедура ЗаполнитьДанныеПечати(ДанныеПечати, ОписаниеПолей, ИерархияПолей, Объекты, КодЯзыка) Если ДанныеПечати["ИменаТабличныхЧастейОбъекта"] = Неопределено Тогда @@ -5510,44 +6065,6 @@ КонецФункции -Функция МакетСуществует(ПутьКМакету) - - ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); - - Идентификатор = ЧастиПути[ЧастиПути.ВГраница()]; - Если СтрНачинаетсяС(Идентификатор, "ПФ_") Тогда - Идентификатор = Сред(Идентификатор, 4); - Если СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(Идентификатор) Тогда - МакетСуществует = Справочники.МакетыПечатныхФорм.МакетСуществует(Новый УникальныйИдентификатор(Идентификатор)); - Если МакетСуществует Тогда - Возврат Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда - Возврат Ложь; - КонецЕсли; - - ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; - ЧастиПути.Удалить(ЧастиПути.ВГраница()); - ИмяОбъекта = СтрСоединить(ЧастиПути, "."); - - ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1; - КоллекцияМакетов = Метаданные.ОбщиеМакеты; - - Если Не ЭтоОбщийМакет Тогда - ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяОбъекта); - Если ОбъектМетаданных = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - КоллекцияМакетов = ОбъектМетаданных.Макеты; - КонецЕсли; - - Возврат КоллекцияМакетов.Найти(ИмяМакета) <> Неопределено; - -КонецФункции - // Параметры: // ДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных // Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - элемент расшифровки. @@ -5601,93 +6118,6 @@ КонецПроцедуры -Функция ЗначенияПараметров(Параметры, ДанныеПечати, НастройкиФорматаПолей, КодЯзыка) - - Результат = Новый Соответствие; - - Для Каждого Параметр Из Параметры Цикл - Значение = ВычислитьВыражение(Параметр, ДанныеПечати, НастройкиФорматаПолей, КодЯзыка); - Результат.Вставить(Параметр, Значение); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция ВычислитьВыражение(Знач ИсходноеВыражение, ДанныеПечати, НастройкиФорматаПолей, КодЯзыка, ПрименятьФорматирование = Неопределено) - - Выражение = ИсходноеВыражение; - Выражение = Сред(Выражение, 2, СтрДлина(Выражение) - 2); - - ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение); - ВыделитьИмяКолонкиТабличнойЧасти(Выражение, ЭлементыФормулы); - - Параметры = Новый Массив; - - Если ПрименятьФорматирование = Неопределено Тогда - ПрименятьФорматирование = Ложь; - - Если ЭлементыФормулы.ОперандыИФункции.Количество() = 1 Тогда - Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл - ЭтоФункция = ОписаниеЭлемента.Значение; - Если ЭтоФункция Тогда - Прервать; - КонецЕсли; - Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; - ПрименятьФорматирование = Операнд = Выражение; - Прервать; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл - Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; - ЭтоФункция = ОписаниеЭлемента.Значение; - КоллекцияДанных = ДанныеПечати; - - Если Не ЭтоФункция Тогда - Если СтрНайти(ВРег("И,ИЛИ,НЕ,ИСТИНА,ЛОЖЬ"), ВРег(Операнд)) Тогда - Продолжить; - КонецЕсли; - - Значение = КоллекцияДанных[ОчиститьКвадратныеСкобки(Операнд) + "." + СтрРазделить(КодЯзыка, "_")[0]]; - Если Не ЗначениеЗаполнено(Значение) Тогда - Значение = КоллекцияДанных[ОчиститьКвадратныеСкобки(Операнд)]; - КонецЕсли; - - Формат = ""; - Если ПрименятьФорматирование Тогда - Формат = НастройкиФорматаПолей[Операнд]; - КонецЕсли; - - Если ЗначениеЗаполнено(Формат) И ЭлементыФормулы.ОперандыИФункции.Количество() = 1 Тогда - Если ЗначениеЗаполнено(КодЯзыка) Тогда - Формат = СтрШаблон("Л=%1;", КодЯзыка) + Формат; - КонецЕсли; - Значение = Формат(Значение, Формат); - КонецЕсли; - - Параметры.Добавить(Значение); - ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ] = "Параметры[" + Параметры.ВГраница() + "]"; - КонецЕсли; - КонецЦикла; - - Выражение = СтрСоединить(ЭлементыФормулы.ВсеЭлементы); - Выражение = СтрЗаменить(Выражение, ИмяМодуляПечати() + РазделительКоманды(), ИмяМодуляПечати() + "."); - - Попытка - Результат = ОбщегоНазначения.ВычислитьВБезопасномРежиме(Выражение, Параметры); - Исключение - ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выражение ""%1"" содержит ошибки: - |%2'"), ИсходноеВыражение, ТекстОшибки)); - Результат = ""; - КонецПопытки; - - Возврат Результат; - -КонецФункции - Процедура ВыделитьИмяКолонкиТабличнойЧасти(Выражение, ЭлементыФормулы) ФункцииСРазделениемПараметров = ФункцииСРазделениемПараметров(); @@ -5751,69 +6181,6 @@ Возврат "_"; КонецФункции -Функция ОчиститьКвадратныеСкобки(Строка) - - Если СтрНачинаетсяС(Строка, "[") И СтрЗаканчиваетсяНа(Строка, "]") Тогда - Возврат Сред(Строка, 2, СтрДлина(Строка) - 2); - КонецЕсли; - - Возврат Строка; - -КонецФункции - -Функция ОбластиМакета(Макет, ДанныеПечати) - - Таблицы = ДанныеПечати["ИменаТабличныхЧастейОбъекта"]; - ВсеОбласти = Новый СписокЗначений; - ОбластиТаблиц = Новый Соответствие; - - ОбластиСУсловиями = Новый Соответствие; - Для Каждого Область Из Макет.Области Цикл - Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда - ОбластиСУсловиями.Вставить(Область.Верх, Область); - КонецЕсли; - КонецЦикла; - - ОбластиДляОбработки = Новый Массив; - - НачалоОбласти = 1; - Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл - Если ОбластиСУсловиями[НомерСтроки] <> Неопределено Тогда - Если НачалоОбласти < НомерСтроки Тогда - Область = Макет.Область(НачалоОбласти, , НомерСтроки-1); - ОбластиДляОбработки.Добавить(Область); - КонецЕсли; - ОбластиДляОбработки.Добавить(ОбластиСУсловиями[НомерСтроки]); - НомерСтроки = ОбластиСУсловиями[НомерСтроки].Низ; - НачалоОбласти = НомерСтроки + 1; - КонецЕсли; - КонецЦикла; - - Если Макет.ВысотаТаблицы >= НачалоОбласти Тогда - Область = Макет.Область(НачалоОбласти, , Макет.ВысотаТаблицы); - ОбластиДляОбработки.Добавить(Область); - КонецЕсли; - - Для Каждого Область Из ОбластиДляОбработки Цикл // ОбластьЯчеекТабличногоДокумента - ОписаниеОбластей = РазделитьНаОбласти(Макет, Область, Таблицы); - ОбщегоНазначенияКлиентСервер.ДополнитьСоответствие(ОбластиТаблиц, ОписаниеОбластей.ОбластиТаблиц); - УсловиеВывода = ""; - Если Макет.Области.Найти(Область.Имя) <> Неопределено Тогда - УсловиеВывода = Область.ПараметрРасшифровки; - КонецЕсли; - Для Каждого ИдентификаторОбласти Из ОписаниеОбластей.ВсеОбласти Цикл - ВсеОбласти.Добавить(ИдентификаторОбласти, УсловиеВывода); - КонецЦикла; - КонецЦикла; - - Результат = Новый Структура; - Результат.Вставить("ВсеОбласти", ВсеОбласти); - Результат.Вставить("ОбластиТаблиц", ОбластиТаблиц); - - Возврат Результат; - -КонецФункции - Функция РазделитьНаОбласти(Макет, Область, Таблицы) ВсеОбласти = Новый Массив; @@ -5915,88 +6282,6 @@ КонецФункции -Функция ПоляМакета(Макет) - - Тексты = Новый Соответствие; - - ОбработанныеЯчейки = Новый Соответствие; - Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл - Для НомерСтолбца = 1 По Макет.ШиринаТаблицы Цикл - ОбластьЯчейки = Макет.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца); - - ИдентификаторОбласти = ИдентификаторОбласти(ОбластьЯчейки); - Если ОбработанныеЯчейки[ИдентификаторОбласти] <> Неопределено Тогда - Продолжить; - КонецЕсли; - ОбработанныеЯчейки[ИдентификаторОбласти] = Истина; - - Если Не ЗначениеЗаполнено(ОбластьЯчейки.Текст) Тогда - Продолжить; - КонецЕсли; - - Тексты.Вставить(ОбластьЯчейки.Текст, Истина); - КонецЦикла; - КонецЦикла; - - Тексты.Вставить(Строка(Макет.ВерхнийКолонтитул.ТекстСлева), Истина); - Тексты.Вставить(Строка(Макет.ВерхнийКолонтитул.ТекстВЦентре), Истина); - Тексты.Вставить(Строка(Макет.ВерхнийКолонтитул.ТекстСправа), Истина); - - Тексты.Вставить(Строка(Макет.НижнийКолонтитул.ТекстСлева), Истина); - Тексты.Вставить(Строка(Макет.НижнийКолонтитул.ТекстВЦентре), Истина); - Тексты.Вставить(Строка(Макет.НижнийКолонтитул.ТекстСправа), Истина); - - Для Каждого Рисунок Из Макет.Рисунки Цикл - Если Рисунок.ТипРисунка <> ТипРисункаТабличногоДокумента.Группа Тогда - Тексты.Вставить(Рисунок.ПараметрРасшифровки, Истина); - КонецЕсли; - КонецЦикла; - - Выражения = Новый Массив; - - Для Каждого Область Из Макет.Области Цикл - Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") - И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда - УсловиеВывода = Область.ПараметрРасшифровки; - Если ЗначениеЗаполнено(УсловиеВывода) Тогда - Выражения.Добавить(Область.ПараметрРасшифровки); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Для Каждого Элемент Из Тексты Цикл - Текст = Элемент.Ключ; - ПараметрыТекста = НайтиПараметрыВТексте(Текст); - Для Каждого Выражение Из ПараметрыТекста Цикл - Выражение = Сред(Выражение, 2, СтрДлина(Выражение) - 2); - Выражения.Добавить(Выражение); - КонецЦикла; - КонецЦикла; - - Результат = Новый Массив; - - Для Каждого Выражение Из Выражения Цикл - ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение); - Для Каждого ОписаниеЭлемента Из ЭлементыФормулы.ОперандыИФункции Цикл - ЭтоФункция = ОписаниеЭлемента.Значение; - Если ЭтоФункция Тогда - Продолжить; - КонецЕсли; - - Операнд = ЭлементыФормулы.ВсеЭлементы[ОписаниеЭлемента.Ключ]; - Операнд = ОчиститьКвадратныеСкобки(Операнд); - Если ЗначениеЗаполнено(Операнд) Тогда - Результат.Добавить(Операнд); - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Результат = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат); - - Возврат Результат; - -КонецФункции - Функция КоличествоСтрок(Таблица, ИмяКолонки = Неопределено) Экспорт Если ТипЗнч(Таблица) = Тип("Соответствие") Тогда @@ -6484,6 +6769,8 @@ "ВЫБРАТЬ | МакетыПечатныхФорм.Идентификатор, | МакетыПечатныхФорм.Представление КАК Представление, + | МакетыПечатныхФорм.ОсновнаяПечатнаяФорма КАК ОсновнаяПечатнаяФорма, + | МакетыПечатныхФорм.НаименованиеПечатнойФормы КАК НаименованиеПечатнойФормы, | МакетыПечатныхФорм.УсловиеВидимости КАК УсловияВидимости |ИЗ | Справочник.МакетыПечатныхФорм.ИсточникиДанных КАК МакетыПечатныхФормИсточникиДанных @@ -6492,6 +6779,7 @@ |ГДЕ | МакетыПечатныхФормИсточникиДанных.ИсточникДанных = &Владелец | И МакетыПечатныхФорм.Используется + | И НЕ МакетыПечатныхФорм.МакетДляВыгрузкиОбъекта | И НЕ МакетыПечатныхФорм.ПометкаУдаления"; Запрос = Новый Запрос(ТекстЗапроса); @@ -6574,51 +6862,6 @@ КонецФункции -// Возвращаемое значение: -// ТабличныйДокумент, ДвоичныеДанные - макет. -// -Функция ПредставлениеМакета(ПутьКМакету, КодЯзыка) - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету); - ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина); - - НайденныйМакет = Справочники.МакетыПечатныхФорм.СсылкаМакета(ПутьКМакету); - Если НайденныйМакет <> Неопределено Тогда - Возврат Строка(НайденныйМакет); - КонецЕсли; - - Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()]; - ЧастиПути.Удалить(ЧастиПути.ВГраница()); - ИмяОбъекта = СтрСоединить(ЧастиПути, "."); - - ИменаПоиска = ИменаМакета(ИмяМакета, КодЯзыка); - ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1; - КоллекцияМакетов = Метаданные.ОбщиеМакеты; - - Если Не ЭтоОбщийМакет Тогда - ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяОбъекта); - Если ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение ТекстОшибки; - КонецЕсли; - КоллекцияМакетов = ОбъектМетаданных.Макеты; - КонецЕсли; - - Для Каждого ИмяПоиска Из ИменаПоиска Цикл - НайденныйМакет = КоллекцияМакетов.Найти(ИмяПоиска); - Если НайденныйМакет <> Неопределено Тогда - Возврат НайденныйМакет.Представление(); - КонецЕсли; - КонецЦикла; - - ВызватьИсключение ТекстОшибки; - -КонецФункции - Функция ДоступныеДляПереводаМакеты() Экспорт ДоступныеДляПереводаМакеты = Новый Соответствие; @@ -7427,6 +7670,277 @@ КонецПроцедуры +// Группирует ссылки по одинаковым идентификаторам команд печати +Функция ПараметрыВыполненияДляПечатиПоУмолчанию(Ссылки) Экспорт + + // поиск по объектам + СсылкиПоИдентификаторам = РегистрыСведений.ОсновныеПечатныеФормыОбъектов.ИдентификаторыКоманд(Ссылки); + + СсылкиСИдентификаторами = Новый Массив; + Для Каждого ИдентификаторСсылки Из СсылкиПоИдентификаторам Цикл + Для Каждого Ссылка Из ИдентификаторСсылки.Значение Цикл + Если Ссылки.Найти(Ссылка) <> Неопределено Тогда + СсылкиСИдентификаторами.Добавить(Ссылка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + // поиск оставшихся по контрагентам + СсылкиБезИдентификаторов = ОбщегоНазначенияКлиентСервер.РазностьМассивов(Ссылки, СсылкиСИдентификаторами); + ИдентификаторыБезОбъектов = Новый Массив; + + Если ЗначениеЗаполнено(СсылкиБезИдентификаторов) Тогда + Для Каждого Ссылка Из СсылкиБезИдентификаторов Цикл + КлючевыеРеквизиты = РегистрыСведений.ОсновныеПечатныеФормыКонтрагентов.КлючевыеРеквизиты(); + УправлениеПечатьюПереопределяемый.ПриОпределенииКлючевыхРеквизитовОсновныхПечатныхФорм(Ссылка, КлючевыеРеквизиты); + + Идентификатор = РегистрыСведений.ОсновныеПечатныеФормыКонтрагентов.ИдентификаторКоманды( + Ссылка, КлючевыеРеквизиты.Организация, КлючевыеРеквизиты.Получатель); + + Если Не ПустаяСтрока(Идентификатор) Тогда + Если СсылкиПоИдентификаторам.Свойство(Идентификатор) Тогда // АПК:1416 структура является хранилищем списка вместо массива + СсылкиПоИдентификаторам[Идентификатор].Добавить(Ссылка); + Иначе + Массив = Новый Массив; + Массив.Добавить(Ссылка); + СсылкиПоИдентификаторам.Вставить(Идентификатор, Массив); + ИдентификаторыБезОбъектов.Добавить(Идентификатор); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + МетаданныеМассив = Новый Массив; + Для Каждого Ссылка Из Ссылки Цикл + МетаданныеМассив.Добавить(Ссылка.Метаданные()); + КонецЦикла; + МетаданныеМассив = ОбщегоНазначенияКлиентСервер.СвернутьМассив(МетаданныеМассив); + + ВсеКомандыПечати = СоздатьКоллекциюКомандПечати(); + ВсеКомандыПечати.Колонки.Добавить("ИдентификаторБезСпецСимволов"); + + Для Каждого МетаданныеСсылки Из МетаданныеМассив Цикл + КомандыПечатиОбъекта = КомандыПечатиОбъекта(МетаданныеСсылки); // @skip-check query-in-loop - Малый цикл + + Для Каждого КомандаПечати Из КомандыПечатиОбъекта Цикл + НоваяКоманда = ВсеКомандыПечати.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКоманда, КомандаПечати); + НоваяКоманда.ИдентификаторБезСпецСимволов = УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(КомандаПечати.Идентификатор); + КонецЦикла; + КонецЦикла; + + НовыеПараметрыВыполнения = Новый Массив; + + // основной позитивный сценарий + ПоляОписанияДляЗамены = "Идентификатор,МенеджерПечати,Обработчик,ОбъектыПечати,СразуНаПринтер,ФорматСохранения, + |ФиксированныйКомплект,ДополнительныеПараметры,ОсновнаяПечатнаяФорма,ЗаменитьОсновнуюПечатнуюФорму, + |НаименованиеПечатнойФормы,КомандаПоУмолчанию,ИдентификаторИзКомплекта,ПроверкаПроведенияПередПечатью"; + Для Каждого ИдентификаторСсылки Из СсылкиПоИдентификаторам Цикл + КомандаПечати = ВсеКомандыПечати.Найти(ИдентификаторСсылки.Ключ, "ИдентификаторБезСпецСимволов"); + ОписаниеКоманды = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(КомандаПечати); + + ПараметрыВыполнения = Новый Структура("ОбъектыПечати,МассивСсылок,ОписаниеКоманды"); + ПараметрыВыполнения.ОбъектыПечати = ИдентификаторСсылки.Значение; + ПараметрыВыполнения.МассивСсылок = ИдентификаторСсылки.Значение; + + НовоеОписание = Новый Структура(ПоляОписанияДляЗамены); + ЗаполнитьЗначенияСвойств(НовоеОписание, ОписаниеКоманды); + ЗаменитьОсновнуюПечатнуюФорму = ИдентификаторыБезОбъектов.Найти(ИдентификаторСсылки.Ключ) <> Неопределено; + НовоеОписание.ЗаменитьОсновнуюПечатнуюФорму = ЗаменитьОсновнуюПечатнуюФорму; + НовоеОписание.КомандаПоУмолчанию = Истина; + + ПараметрыВыполнения.ОписаниеКоманды = НовоеОписание; + + НовыеПараметрыВыполнения.Добавить(ПараметрыВыполнения); + КонецЦикла; + + ЕстьПараметрыВыполнения = Истина; + + // печать в первый раз нужно предоставить выбор команды + Если Не НовыеПараметрыВыполнения.Количество() И Ссылки.Количество() = 1 Тогда + ЕстьПараметрыВыполнения = Ложь; + + ОписанияКоманд = Новый Структура; + ОсновныеКоманды = ВсеКомандыПечати.НайтиСтроки(Новый Структура("ОсновнаяПечатнаяФорма", Истина)); + + КомандыДляВыбора = Новый СписокЗначений(); + Для Каждого ОписаниеКоманды Из ОсновныеКоманды Цикл + Идентификатор = УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(ОписаниеКоманды.Идентификатор); + + КомандыДляВыбора.Добавить(Идентификатор, ОписаниеКоманды.Представление); + + НовоеОписание = Новый Структура(ПоляОписанияДляЗамены); + ЗаполнитьЗначенияСвойств(НовоеОписание, ОписаниеКоманды); + НовоеОписание.ЗаменитьОсновнуюПечатнуюФорму = Истина; + ОписанияКоманд.Вставить(Идентификатор, НовоеОписание); + КонецЦикла; + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("КомандыДляВыбора", КомандыДляВыбора); + ПараметрыВыполнения.Вставить("ОписанияКоманд", ОписанияКоманд); + + НовыеПараметрыВыполнения.Добавить(ПараметрыВыполнения); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ЕстьПараметрыВыполнения", ЕстьПараметрыВыполнения); + Результат.Вставить("НовыеПараметрыВыполнения", НовыеПараметрыВыполнения); + + Возврат Результат; + +КонецФункции + +Процедура СоздатьРеквизитХраненияНастроек(Форма, ТаблицаПодключаемыхКоманд) + + ИмяРеквизита = "ПараметрыУправленияПечатью"; + ЗначенияСвойств = Новый Структура(ИмяРеквизита, Null); + ЗаполнитьЗначенияСвойств(ЗначенияСвойств, Форма); + + Результат = ЗначенияСвойств.ПараметрыУправленияПечатью; + + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Если Результат = Null Тогда + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов)); + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + КонецЕсли; + + Отбор = Новый Структура("Вид, Важность", "Печать", "Важное"); + ОсновныеКоманды = ТаблицаПодключаемыхКоманд.НайтиСтроки(Отбор); + + Результат = Новый Структура; + Для Каждого КомандаСПометкой Из ОсновныеКоманды Цикл + КлючПометки = "ЗначениеПометки" + УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(КомандаСПометкой.Идентификатор); + Результат.Вставить(КлючПометки, Ложь); + КонецЦикла; + + Форма.ПараметрыУправленияПечатью = Результат; + КонецЕсли; + +КонецПроцедуры + +Функция ВходитВСоставОбъектовСОсновнымиПечатнымиФормами(Тип) Экспорт + + Результат = Ложь; + + ТипПараметра = ТипЗнч(Тип); + ТипПолучатель = Метаданные.ОпределяемыеТипы.ОбъектСОсновнымиПечатнымиФормами.Тип; + + Если ТипПараметра = Тип("Тип") Тогда + + Результат = ТипПолучатель.СодержитТип(Тип); + + ИначеЕсли ТипПараметра = Тип("Строка") Тогда + + Для Каждого Элемент Из ТипПолучатель.Типы() Цикл + Если Элемент = Тип("Строка") Тогда // рудимент остается после встраивания, нужно пропустить + Продолжить; + КонецЕсли; + Если ОбщегоНазначения.СтроковоеПредставлениеТипа(Элемент) = Тип Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ОсновнаяПечатнаяФормаВКомплекте(МассивОбъектов, КомандаПечати) Экспорт + + Результат = Новый Массив; + + Если ТипЗнч(МассивОбъектов) <> Тип("Массив") Тогда + Объекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МассивОбъектов); + Иначе + Объекты = МассивОбъектов; + КонецЕсли; + + МассивМетаданных = Новый Массив; + Для Каждого Элемент Из Объекты Цикл + МассивМетаданных.Добавить(Элемент.Метаданные()); + КонецЦикла; + МассивМетаданных = ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивМетаданных); + + Команды = СоздатьКоллекциюКомандПечати(); + ЗаполнитьКомандыПечатиДляСпискаОбъектов(МассивМетаданных, Команды); + + ИдентификаторыКомплекта = СтрРазделить(КомандаПечати.Идентификатор, ","); + Для Каждого Элемент Из ИдентификаторыКомплекта Цикл + + Если СтрНайти(Элемент, ".") Тогда + ЧастиСтроки = СтрРазделить(Элемент, "."); + Идентификатор = ЧастиСтроки[ЧастиСтроки.ВГраница()]; + Иначе + Идентификатор = Элемент; + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("Идентификатор", Идентификатор); + Отбор.Вставить("ОсновнаяПечатнаяФорма", Истина); + + КомандыПоиск = Команды.НайтиСтроки(Отбор); + Для Каждого Команда Из КомандыПоиск Цикл + Структура = Новый Структура; + Структура.Вставить("НаименованиеПечатнойФормы", Команда.НаименованиеПечатнойФормы); + Структура.Вставить("Идентификатор", Идентификатор); + Структура.Вставить("ОсновнаяПечатнаяФорма", Истина); + Результат.Добавить(Структура); + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция УстанавливатьПометки(КомандыПечати) + + Результат = Истина; + + Если КомандыПечати.Количество() = 2 Тогда + КомандаПечатьПоУмолчанию = КомандыПечати.Найти("ПечатьПоУмолчанию", "Идентификатор"); + Если КомандаПечатьПоУмолчанию <> Неопределено Тогда + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПоказыватьПечатьПоУмолчанию(ИмяФормы, СписокОбъектов) + + Результат = Ложь; + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяФормы); + Если ОбъектМетаданных <> Неопределено И Не Метаданные.ОбщиеФормы.Содержит(ОбъектМетаданных) Тогда + ОбъектМетаданных = ОбъектМетаданных.Родитель(); + КонецЕсли; + Если ОбщегоНазначения.ЭтоЖурналДокументов(ОбъектМетаданных) Тогда + КоллекцияКПроверке = ОбъектМетаданных.РегистрируемыеДокументы + Иначе + КоллекцияКПроверке = СписокОбъектов; + КонецЕсли; + Если КоллекцияКПроверке <> Неопределено Тогда + Для Каждого ЭлементКоллекции Из КоллекцияКПроверке Цикл + ПолноеИмяОбъектаМетаданных = ЭлементКоллекции.ПолноеИмя(); + ЧастиИмениОбъектаМетаданных = СтрРазделить(ПолноеИмяОбъектаМетаданных, "."); + ПолноеИмяТипаСсылки = ЧастиИмениОбъектаМетаданных[0] + "Ссылка." + ЧастиИмениОбъектаМетаданных[1]; + + Если ВходитВСоставОбъектовСОсновнымиПечатнымиФормами(ПолноеИмяТипаСсылки) Тогда + Результат = Истина; + Прервать + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + Процедура УдалитьАбзацыСОчищеннымТекстом(ДеревоПечатнойФормы, ДеревоМакета) АбзацыМакета = АбзацыДокумента(ДеревоМакета); @@ -7483,19 +7997,19 @@ КонецФункции Функция АбзацСодержитКартинку(Знач Абзац) - + Для Каждого Элемент Из Абзац.Строки Цикл Если ФрагментСодержитКартинку(Элемент) Тогда Возврат Истина; КонецЕсли; КонецЦикла; - + Возврат Ложь; - + КонецФункции Функция ФрагментСодержитКартинку(Знач Фрагмент) - + Для Каждого Элемент Из Фрагмент.Строки Цикл Если Элемент.ИмяТега = "w:drawing" Тогда Возврат Истина; @@ -7506,4 +8020,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 9eebaf577..a7e300647 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -172,8 +172,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функции для получения областей из макета. +#Область ФункцииДляПолученияОбластейИзМакета // Получает область из макета. // @@ -238,8 +237,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для добавления областей к печатной форме. +#КонецОбласти + +#Область ФункцииДляДобавленияОбластейКПечатнойФорме // Начало: функции работы с колонтитулами документа MS Word. @@ -511,8 +511,9 @@ ActiveDocument.Range(ПозицияОкончанияДокумента-1, ПозицияОкончанияДокумента-1).InsertParagraphAfter(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции Функция ПолучитьПозициюНачалаОбласти(Знач COMСоединение, Знач ИдентификаторОбласти) @@ -644,3 +645,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 259d2f9f0..3b3182ec1 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -204,8 +204,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с макетом +#Область РаботаСМакетом // Получает область из макета. // Параметры: @@ -246,8 +245,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с печатной формой +#КонецОбласти + +#Область РаботаСПечатнойФормой // Вставляет разрыв на следующую строку. // Параметры: @@ -443,8 +443,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Получает специальную структуру, через которую объектам UNO устанавливаются // параметры. @@ -552,4 +553,6 @@ Возврат "file:/" + "/localhost/" + ИмяФайла; КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index eabad714e..bd6b8fc42 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -8,9 +8,10 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Работа с шаблонами офисных документов. +#Область УстаревшиеПроцедурыИФункции +// Устарела. Следует использовать УправлениеПечатью.МакетыИДанныеОбъектовДляПечати и серверный механизм +// формирования печатных форм по макетам офисных документов. // Получает за один вызов всю необходимую информацию для печати: данные объектов по макетам, двоичные // данные макетов, описание областей макетов. // Для вызова из клиентских модулей печати форм по макетам офисных документов. @@ -35,6 +36,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Сформировать печатные формы для непосредственного вывода на принтер. @@ -59,9 +62,41 @@ КонецФункции -// Возвращает истину, если есть право проведения хотя бы для одного документа. -Функция ДоступноПравоПроведения(СписокДокументов) Экспорт - Возврат СтандартныеПодсистемыСервер.ДоступноПравоПроведения(СписокДокументов); +// Сформировать печатные формы по командам печати. +// +// Подробнее - см. описание УправлениеПечатью.СформироватьПечатныеФормы(). +// +Функция СформироватьПечатныеФормы(МассивОбъектов, Команды) Экспорт + + КоллекцияПечатныхФорм = Новый ТаблицаЗначений; + Для Каждого ИмяКолонки Из УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм() Цикл + КоллекцияПечатныхФорм.Колонки.Добавить(ИмяКолонки); + КонецЦикла; + + Для Каждого КомандаПечати Из Команды Цикл + Результат = УправлениеПечатью.СформироватьПечатныеФормы( + КомандаПечати.МенеджерПечати, + КомандаПечати.Идентификатор, + МассивОбъектов, + КомандаПечати.ДополнительныеПараметры); + + ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результат.КоллекцияПечатныхФорм, КоллекцияПечатныхФорм); + УправлениеПечатью.ПриВыполненииКомандыПечати(МассивОбъектов, КомандаПечати, КоллекцияПечатныхФорм); + КонецЦикла; + + Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм); + +КонецФункции + +// Формирует печатные формы в требуемом формате и записывает в файлы. +// +// Подробнее - см. описание УправлениеПечатью.НапечататьВФайл(). +// +Функция НапечататьВФайл(КомандыПечати, СписокОбъектов, НастройкиСохранения) Экспорт + + Результат = УправлениеПечатью.НапечататьВФайл(КомандыПечати, СписокОбъектов, НастройкиСохранения); + Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(Результат); + КонецФункции // См. УправлениеПечатью.ПакетДокументов. @@ -72,6 +107,23 @@ КонецФункции +Функция ПараметрыВыполненияДляПечатиПоУмолчанию(Знач Ссылки) Экспорт + Возврат УправлениеПечатью.ПараметрыВыполненияДляПечатиПоУмолчанию(Ссылки); +КонецФункции + +Функция СохраненныеНаименования(Знач Объекты) Экспорт + Возврат РегистрыСведений.ОсновныеПечатныеФормыОбъектов.СохраненныеНаименования(Объекты); +КонецФункции + +Функция ОсновнаяПечатнаяФормаВКомплекте(Знач МассивОбъектов, Знач КомандаПечати) Экспорт + Возврат УправлениеПечатью.ОсновнаяПечатнаяФормаВКомплекте(МассивОбъектов, КомандаПечати); +КонецФункции + +Функция СоздатьКомандуПечати() Экспорт + КоллекцияКомандПечати = УправлениеПечатью.СоздатьКоллекциюКомандПечати(); + Возврат ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(КоллекцияКомандПечати.Добавить()); +КонецФункции + #Область ПечатьВФоновомЗадании Функция НачатьФормированиеПечатныхФорм(ПараметрыОткрытияВходящий) Экспорт diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 62be88aa6..40241114e 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -146,10 +146,12 @@ ДополнительныеПараметры.Вставить("СписокДокументов", СписокДокументов); ДополнительныеПараметры.Вставить("Форма", Форма); - НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(СписокДокументов); - ЕстьНепроведенныеДокументы = НепроведенныеДокументы.Количество() > 0; + ОчиститьСообщения(); + СведенияОПроведенииДокументов = ПодключаемыеКомандыКлиент.СведенияОПроведенииДокументов(СписокДокументов); + ЕстьНепроведенныеДокументы = СведенияОПроведенииДокументов.НепроведенныеДокументы.Количество() > 0; Если ЕстьНепроведенныеДокументы Тогда - ДополнительныеПараметры.Вставить("НепроведенныеДокументы", НепроведенныеДокументы); + ДополнительныеПараметры.Вставить("НепроведенныеДокументы", СведенияОПроведенииДокументов.НепроведенныеДокументы); + ДополнительныеПараметры.Вставить("ЕстьПравоПроведения", СведенияОПроведенииДокументов.ЕстьПравоПроведения); УправлениеПечатьюСлужебныйКлиент.ПроверитьПроведенностьДокументовДиалогПроведения(ДополнительныеПараметры); Иначе ВыполнитьОбработкуОповещения(ОписаниеПроцедурыЗавершения, СписокДокументов); @@ -442,6 +444,12 @@ Результат.Вставить("ФиксированныйКомплект"); Результат.Вставить("ДополнительныеПараметры"); + Результат.Вставить("ОсновнаяПечатнаяФорма"); + Результат.Вставить("ЗаменитьОсновнуюПечатнуюФорму"); + Результат.Вставить("ИдентификаторИзКомплекта"); + Результат.Вставить("Идентификатор"); + Результат.Вставить("НаименованиеПечатнойФормы"); + Возврат Результат; КонецФункции @@ -474,8 +482,7 @@ // Список // -//////////////////////////////////////////////////////////////////////////////// -// Функции инициализации и закрытия ссылок. +#Область ФункцииИнициализацииИЗакрытияСсылок // Устарела. Следует использовать УправлениеПечатью.ИнициализироватьПечатнуюФорму. // @@ -579,8 +586,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функция отображения печатной формы пользователю. +#КонецОбласти + +#Область ФункцияОтображенияПечатнойФормыПользователю // Устарела. Более не требуется. // @@ -731,7 +739,8 @@ Исключение СообщениеОбОшибке = СокрЛП(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщениеОбОшибке = ?(Прав(СообщениеОбОшибке, 1) = ".", СообщениеОбОшибке, СообщениеОбОшибке + "."); - СообщениеОбОшибке = СообщениеОбОшибке + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при попытке вывести область ""%1"" из макета.'"), + СообщениеОбОшибке = СообщениеОбОшибке + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно вывести в печатную форму область ""%1"" из макета.'"), ОбластьМакета.ОписаниеОбласти.ИмяОбласти); ВызватьИсключение СообщениеОбОшибке; КонецПопытки; @@ -861,6 +870,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Открывает форму диалога загрузки файла макета для редактирования во внешней программе. @@ -980,6 +991,140 @@ КонецПроцедуры +Процедура ПриИзмененииНастроекМакета(Параметры, ОписаниеОповещения) Экспорт + + ОткрытьФорму("Справочник.МакетыПечатныхФорм.Форма.НастройкиМакета", + Параметры, + ЭтотОбъект,,,, + ОписаниеОповещения, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +// Перед формированием печатной формы проверяет необходимость сохранения наименования основной печатной формы, +// показывает диалог для подтверждения. В зависимости от ответа пользователя модифицирует возвращаемый параметр +// "ОписаниеКоманды". После формирования печатной формы "ОписаниеКоманды" необходимо в неизменном виде передать в +// процедуру УправлениеПечатью.ПриВыполненииКомандыПечати для сохранения наименования. +// +// Параметры: +// Объекты - ЛюбаяСсылка +// - Массив из ЛюбаяСсылка - объекты печати. +// ОписаниеКоманды - Структура +// - Массив из Структура - возвращаемый параметр, ключи структуры соответствуют колонкам +// из таблицы см. УправлениеПечатью.СоздатьКоллекциюКомандПечати. +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// закрытия диалога о подтверждении замены наименования с параметрами: +// * Результат - Структура +// - Массив из Структура - модифицированный параметр ОписаниеКоманды +// * ДополнительныеПараметры - Произвольный - дополнительные параметры оповещения. +// Пример: +// Процедура ВызывающийКод() +// ОбработчикЗавершения = Новый ОписаниеОповещения("ПродолжитьВызывающийКод", ЭтотОбъект, ПараметрыОповещения); +// УправлениеПечатьюКлиент.ПередНачаломВыполненияКомандыПечати(Объекты, ОписаниеКоманды, ОбработчикЗавершения); +// КонецПроцедуры +// Процедура ПродолжитьВызывающийКод(Результат, ДополнительныеПараметры) Экспорт +// ОписаниеКоманды = Результат; +// КонецПроцедуры +// +Процедура ПередНачаломВыполненияКомандыПечати(Объекты, ОписаниеКоманды, ОбработчикЗавершения) Экспорт + + Если ТипЗнч(Объекты) <> Тип("Массив") Тогда + МассивОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объекты); + Иначе + МассивОбъектов = Объекты; + КонецЕсли; + + Если ТипЗнч(ОписаниеКоманды) = Тип("Массив") Тогда + + КоличествоОсновныхПечатныхФорм = 0; + Для Каждого Команда Из ОписаниеКоманды Цикл + Если Команда.ОсновнаяПечатнаяФорма Тогда + КоличествоОсновныхПечатныхФорм = КоличествоОсновныхПечатныхФорм + 1; + ИндексЕдинственнойОсновнойПечатнойФормы = ОписаниеКоманды.Найти(Команда); + КонецЕсли; + КонецЦикла; + + Если КоличествоОсновныхПечатныхФорм > 1 Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КомандыПечати", ОписаниеКоманды); + ПараметрыФормы.Вставить("МассивОбъектов", МассивОбъектов); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("МассивОбъектов", МассивОбъектов); + ДополнительныеПараметры.Вставить("ОписаниеОповещения", ОбработчикЗавершения); + ДополнительныеПараметры.Вставить("КомандыПечати", ОписаниеКоманды); + ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения( + "ПослеВыбораКомандыОсновнойПечатнойФормы", ЭтотОбъект, ДополнительныеПараметры); + + ОткрытьФорму("ОбщаяФорма.ВыборОсновнойПечатнойФормы", + ПараметрыФормы, , , , , ОписаниеОповещенияОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + ИначеЕсли КоличествоОсновныхПечатныхФорм = 1 Тогда + ПередНачаломВыполненияКомандыПечатиПродолжение(МассивОбъектов, ОписаниеКоманды, ОбработчикЗавершения, ИндексЕдинственнойОсновнойПечатнойФормы); + + Иначе + ВыполнитьОбработкуОповещения(ОбработчикЗавершения, ОписаниеКоманды); + + КонецЕсли; + + Иначе + КомандаВМассиве = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеКоманды); + ПередНачаломВыполненияКомандыПечатиПродолжение(МассивОбъектов, КомандаВМассиве, ОбработчикЗавершения) + КонецЕсли; + +КонецПроцедуры + +// Формирует и выводит на экран или на принтер печатные формы по командам печати. +// +// Параметры: +// МассивОбъектов - Массив из ЛюбаяСсылка - объекты печати. +// Команды - Массив из Структура - см. СоздатьКомандуПечати. +// ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана перед формированием +// печатных форм, если пользователь не отказался от печати. Параметры: +// * Результат - Булево - всегда возвращает Истина. +// * ДополнительныеПараметры - Произвольный - дополнительные параметры оповещения. +// НаПринтер - Булево - не Если Истина, то вывод печатных форм будет произведен на принтер, иначе - на экран. +// +Процедура ВыполнитьКомандыПечати(МассивОбъектов, Команды, ОбработчикЗавершения, НаПринтер = Ложь) Экспорт + + Если Не ПроверитьКоличествоПереданныхОбъектов(МассивОбъектов) Тогда + Возврат; + КонецЕсли; + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + ПараметрыОповещения.Вставить("МассивОбъектов", МассивОбъектов); + ПараметрыОповещения.Вставить("НаПринтер", НаПринтер); + + ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьВыполнениеКомандПечати", ЭтотОбъект, ПараметрыОповещения); + ПередНачаломВыполненияКомандыПечати(МассивОбъектов, Команды, ОписаниеОповещения); + +КонецПроцедуры + +// см. УправлениеПечатью.НапечататьВФайл() +Процедура НапечататьВФайл(КомандыПечати, СписокОбъектов, НастройкиСохранения, ОбработчикЗавершения) Экспорт + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + ПараметрыОповещения.Вставить("КомандыПечати", КомандыПечати); + ПараметрыОповещения.Вставить("СписокОбъектов", СписокОбъектов); + ПараметрыОповещения.Вставить("НастройкиСохранения", НастройкиСохранения); + + ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьПечататьВФайл", ЭтотОбъект, ПараметрыОповещения); + ПередНачаломВыполненияКомандыПечати(СписокОбъектов, КомандыПечати, ОписаниеОповещения); + +КонецПроцедуры + +// Конструктор элемента массива для второго параметра процедуры ВыполнитьКомандыПечати. +// +// Возвращаемое значение: +// Структура - содержит необходимые поля для выполнения процедуры ВыполнитьКомандыПечати. +// +Функция СоздатьКомандуПечати() Экспорт + ШаблонКоманды = УправлениеПечатьюВызовСервера.СоздатьКомандуПечати(); + Возврат ШаблонКоманды; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1146,4 +1291,144 @@ КонецПроцедуры -#КонецОбласти +Процедура ПослеВыбораКомандыОсновнойПечатнойФормы(ИндексКоманды, ДополнительныеПараметры) Экспорт + + Если ИндексКоманды <> Неопределено Тогда + + ВыбраннаяКоманда = ДополнительныеПараметры.КомандыПечати[ИндексКоманды]; + ВыбраннаяКоманда.ЗаменитьОсновнуюПечатнуюФорму = Истина; + ВыбраннаяКоманда.ОсновнаяПечатнаяФорма = Ложь; + + ПередНачаломВыполненияКомандыПечатиПродолжение( + ДополнительныеПараметры.МассивОбъектов, + ДополнительныеПараметры.КомандыПечати, + ДополнительныеПараметры.ОписаниеОповещения, + ИндексКоманды); + КонецЕсли; + +КонецПроцедуры + +Асинх Процедура ПередНачаломВыполненияКомандыПечатиПродолжение(МассивОбъектов, Команды, ОписаниеОповещения, ИндексКоманды = Неопределено) + + Если ИндексКоманды = Неопределено Тогда + ОписаниеКоманды = Команды[0]; + Иначе + ОписаниеКоманды = Команды[ИндексКоманды]; + КонецЕсли; + + Если Не ОписаниеКоманды.ОсновнаяПечатнаяФорма Тогда //это комплект + + ОсновныеПечатныеФормыВКомплекте = УправлениеПечатьюВызовСервера.ОсновнаяПечатнаяФормаВКомплекте( + МассивОбъектов, ОписаниеКоманды); + + КоличествоОсновныхВКомплекте = ОсновныеПечатныеФормыВКомплекте.Количество(); + Если КоличествоОсновныхВКомплекте > 0 Тогда + ОписаниеКоманды.ОсновнаяПечатнаяФорма = Истина; + ПерваяОсновная = ОсновныеПечатныеФормыВКомплекте[0]; + ОписаниеКоманды.ИдентификаторИзКомплекта = ПерваяОсновная.Идентификатор; + ОписаниеКоманды.НаименованиеПечатнойФормы = ПерваяОсновная.НаименованиеПечатнойФормы; + КонецЕсли; + + КонецЕсли; + + Если ОписаниеКоманды.ОсновнаяПечатнаяФорма И Не ОписаниеКоманды.ЗаменитьОсновнуюПечатнуюФорму Тогда + СохраненныеНаименования = УправлениеПечатьюВызовСервера.СохраненныеНаименования(МассивОбъектов); + ЕстьСохраненныеНаименования = СохраненныеНаименования.Количество(); + ТекстВопроса = ""; + ЗадаватьВопрос = Ложь; + + Для Каждого СохраненноеНаименование Из СохраненныеНаименования Цикл + Если ЗначениеЗаполнено(СохраненноеНаименование.Идентификатор) + И СохраненноеНаименование.Идентификатор <> УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(ОписаниеКоманды.Идентификатор) Тогда + ЗадаватьВопрос = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЗадаватьВопрос Тогда + Если СохраненныеНаименования.Количество() = 1 Тогда + ПервоеНаименование = СохраненныеНаименования[0]; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'По документу ранее уже была сформирована основная печатная форма ""%1"", пользователь ""%2"", дата формирования ""%3"". Заменить сохраненную основную печатную форму для документа?'"), + ПервоеНаименование.НаименованиеПечатнойФормы, + ПервоеНаименование.Пользователь, + Формат(ПервоеНаименование.Дата, "ДЛФ=;")); + Иначе + ТекстВопроса = НСтр("ru = 'По одному или нескольким из выбранных документов уже печаталась основная форма. Заменить сохраненную основную печатную форму для документов?'"); + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(ТекстВопроса) Тогда + + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить("Заменить", НСтр("ru = 'Заменить'")); + КнопкиВопроса.Добавить("НеЗаменять", НСтр("ru = 'Не заменять'")); + + Ответ = Ждать ВопросАсинх(ТекстВопроса, КнопкиВопроса); + Если Ответ = "Заменить" Тогда + ОписаниеКоманды.ЗаменитьОсновнуюПечатнуюФорму = Истина; + ИначеЕсли Ответ = Неопределено Тогда + Возврат; + КонецЕсли; + + Иначе + Если Не ЕстьСохраненныеНаименования Тогда + ОписаниеКоманды.ЗаменитьОсновнуюПечатнуюФорму = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ИндексКоманды = Неопределено Тогда + ВыполнитьОбработкуОповещения(ОписаниеОповещения, Команды[0]); + Иначе + ВыполнитьОбработкуОповещения(ОписаниеОповещения, Команды); + КонецЕсли; + +КонецПроцедуры + +Процедура ПродолжитьВыполнениеКомандПечати(Команды, ДополнительныеПараметры) Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.Печать.ВыполнитьКомандуПечати"; + СписокПереданныхПараметров = ПараметрыПриложения[ИмяПараметра]; + + Если СписокПереданныхПараметров = Неопределено Тогда + СписокПереданныхПараметров = Новый Массив; + ПараметрыПриложения[ИмяПараметра] = СписокПереданныхПараметров; + КонецЕсли; + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикЗавершения, Истина); + + МассивОбъектов = ДополнительныеПараметры.МассивОбъектов; + КоллекцияПечатныхФорм = УправлениеПечатьюВызовСервера.СформироватьПечатныеФормы(МассивОбъектов, Команды); + + Если ДополнительныеПараметры.НаПринтер Тогда + + СписокПечатныхФорм = Новый СписокЗначений; + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + ТабличныйДокумент = ПечатнаяФорма.ТабличныйДокумент; + Если (ТипЗнч(ТабличныйДокумент) = Тип("ТабличныйДокумент")) И (ТабличныйДокумент.ВысотаТаблицы <> 0) Тогда + СписокПечатныхФорм.Добавить(ТабличныйДокумент, ПечатнаяФорма.СинонимМакета); + КонецЕсли; + КонецЦикла; + + РаспечататьТабличныеДокументы(СписокПечатныхФорм, МассивОбъектов); + Иначе + ПараметрыОткрытия = УправлениеПечатьюСлужебныйКлиент.ПараметрыОткрытияФормыПечати(); + ПараметрыОткрытия.ПараметрКоманды = МассивОбъектов; + ПараметрыОткрытия.КоллекцияПечатныхФорм = КоллекцияПечатныхФорм; + СписокПереданныхПараметров.Добавить(ПараметрыОткрытия); + + ПодключитьОбработчикОжидания("ПродолжитьВыполнениеКомандыПечатиСПереданнымиПараметрами", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +Процедура ПродолжитьПечататьВФайл(Команды, ДополнительныеПараметры) Экспорт + + Результат = УправлениеПечатьюВызовСервера.НапечататьВФайл( + Команды, ДополнительныеПараметры.СписокОбъектов, ДополнительныеПараметры.НастройкиСохранения); + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикЗавершения, Результат); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl index 629e7a045..fa05d5b9a 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиентСервер/Module.bsl @@ -63,4 +63,9 @@ КонецФункции +Функция ИдентификаторБезСпецСимволов(Строка) Экспорт + СпецСимволы = "() -+=_,.!№;%:?*@#$^&"; + Возврат СтрСоединить(СтрРазделить(Строка, СпецСимволы)); +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюМультиязычность/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюМультиязычность/Module.bsl index f31031c02..271d3c401 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюМультиязычность/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюМультиязычность/Module.bsl @@ -340,7 +340,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда МодульПереводТекстаНаДругиеЯзыки = ОбщегоНазначения.ОбщийМодуль("ПереводТекстаНаДругиеЯзыки"); - Возврат ЭтоДополнительныйЯзыкПечатныхФорм(КодЯзыка) И МодульПереводТекстаНаДругиеЯзыки.ДоступенПереводТекста(); + Возврат ЭтоДополнительныйЯзыкПечатныхФорм(КодЯзыка) + И (МодульПереводТекстаНаДругиеЯзыки.ДоступенПереводТекста() + Или МодульПереводТекстаНаДругиеЯзыки.ДоступнаНастройкаСервисаПереводаТекста()); КонецЕсли; Возврат Ложь; diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 8f2ac040d..0de59160d 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -314,7 +314,11 @@ // присутствовать поле Ссылка, даже если оно фактически не ссылочного типа, // а, например, Строка. // -// * Представление - Строка - идентификатор схемы, используется при получении данных. +// * Представление - Строка - идентификатор схемы, используется в процедуре ПриПодготовкеДанныхПечати. +// Если в качестве идентификатора схемы используется полное имя объекта метаданных, то +// при подготовке данных печати будет вызываться процедура ПриПодготовкеДанныхПечати +// модуля менеджера объекта. Иначе будет вызвана аналогичная процедура этого модуля. +// // * Пометка -Булево - Истина, если в качестве дополнительного ключевого поля выступает владелец источника данных. // Процедура ПриОпределенииИсточниковДанныхПечати(Объект, ИсточникиДанныхПечати) Экспорт @@ -323,7 +327,10 @@ КонецПроцедуры -// Подготавливает данные печати. +// Подготавливает данные печати. Вызывается в случае, если используемая схема компоновки данных содержит набор +// данных Объект. +// В случае, если в качестве идентификатора схемы используется имя объекта метаданных, то вместо этой процедуры +// вызывается аналогичная процедура модуля менеджера объекта. // // Параметры: // ИсточникиДанных - Массив - объекты, для которых формируются данные печати. @@ -352,6 +359,21 @@ +КонецПроцедуры + + +// Позволяет переопределить значения реквизитов для обращения к регистру сведений ОсновныеПечатныеФормыКонтрагентов. +// +// Параметры: +// Ссылка - ЛюбаяСсылка - объект, для которого необходимо переопределить значения реквизитов. +// КлючевыеРеквизиты - Структура: +// * Организация - ЛюбаяСсылка - значение реквизита Организация переданной ссылки. +// * Получатель - ЛюбаяСсылка - значение реквизита Контрагент переданной ссылки. +// +Процедура ПриОпределенииКлючевыхРеквизитовОсновныхПечатныхФорм(Ссылка, КлючевыеРеквизиты) Экспорт + + + КонецПроцедуры #Область УстаревшиеПроцедурыИФункции diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl index 3a3cf2183..4fa9e3cac 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебный/Module.bsl @@ -35,7 +35,7 @@ КонецЦикла; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка: Не удалось сформировать %1'"), СтрокаПечатнойФормы.Представление); + НСтр("ru = 'Не удалось сформировать %1.'"), СтрокаПечатнойФормы.Представление); КонецЕсли; КонецЕсли; @@ -72,9 +72,8 @@ Возврат СтруктураЕдиногоДокумента; КонецФункции -////////////////////////////////////////////////////////////////////////////////// -// Печать с использованием макетов в формате Office Open XML. -// +#Область ПечатьСИспользованиемМакетовВФорматеOfficeOpenXML + // Описание структур данных: // // Макет - структура, используемая для хранения областей, разделов и колонтитулов из исходного шаблона. @@ -197,6 +196,8 @@ КонецФункции +#КонецОбласти + #Область СКД // Параметры: @@ -258,7 +259,7 @@ Результат.Вставить("Колонтитулы", Новый Соответствие); Результат.Вставить("ТипыКонтента", Новый ДеревоЗначений); Результат.Вставить("СвязиКонтента", Новый ДеревоЗначений); - Результат.Вставить("МаксимальныйИдентификаторСвязи", 0); + Результат.Вставить("МаксимальныйИдентификаторСвязи"); Результат.Вставить("Гиперссылки", Новый Соответствие); Результат.Вставить("КаталогКартинок", ""); Результат.Вставить("РасширенияКартинок", Новый Массив); @@ -414,8 +415,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для получения областей из макета. +#Область ФункцииДляПолученияОбластейИзМакета // Получает область из макета. // @@ -484,8 +484,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для добавления областей к печатной форме. +#КонецОбласти + +#Область ФункцииДляДобавленияОбластейКПечатнойФорме // Добавляет нижний колонтитул в печатную форму из макета. // @@ -665,6 +666,8 @@ КонецПроцедуры +#КонецОбласти + #Область РаботаСоСтруктуройДокумента // Возвращаемое значение: @@ -1129,7 +1132,7 @@ // Индекс - Число // Узел - см. ДеревоДокумента // -Процедура ДобавитьУзелОписанияРаздела(УзелРодителя, Индекс, Узел) +Процедура ДобавитьУзелОписанияРаздела(УзелРодителя, Индекс, Узел) Экспорт Если УзелРодителя.Строки.Количество() <= Индекс Тогда НовыйАбзац = УзелРодителя.Строки.Добавить(); Иначе @@ -1270,17 +1273,51 @@ ИдентификаторСсылки = УзелГиперссылки.Атрибуты["Id"]; СоответствиеГиперссылок.Вставить(ИдентификаторСсылки, ТекстСсылки); КонецЦикла; - МаксимальныйИдентификатор = 0; + МассивУзлов = Новый Массив; НайтиУзлыПоСодержимому(ДеревоXML, "Relationship", МассивУзлов); + + МаксимальныйИдентификатор = Новый Соответствие; + ПервыйИдентификатор = Неопределено; + Для Каждого Узел Из МассивУзлов Цикл Идентификатор = Узел.Атрибуты["Id"]; МассивЧастейИдентификатора = СтрРазделить(Идентификатор, "0123456789", Ложь); - Идентификатор = Число(СтрЗаменить(Идентификатор, МассивЧастейИдентификатора[0], "")); - МаксимальныйИдентификатор = Макс(Идентификатор, МаксимальныйИдентификатор); + + Если МассивЧастейИдентификатора.Количество() = 0 Тогда + ИмяИдентификатора = ""; + Идентификатор = Число(Идентификатор); + Иначе + ИмяИдентификатора = МассивЧастейИдентификатора[0]; + СтрокаЛишнихСимволов = СтрСоединить(МассивЧастейИдентификатора); + Идентификатор = СтрСоединить(СтрРазделить(Идентификатор, СтрокаЛишнихСимволов)); + Если Не ПустаяСтрока(Идентификатор) Тогда + Идентификатор = Число(Идентификатор); + Иначе + Идентификатор = 0; + КонецЕсли; + КонецЕсли; + + Если ПервыйИдентификатор = Неопределено Тогда + ПервыйИдентификатор = ИмяИдентификатора; + КонецЕсли; + + Максимальный = МаксимальныйИдентификатор.Получить(ИмяИдентификатора); + Если Максимальный <> Неопределено Тогда + МаксимальныйИдентификатор.Вставить(ИмяИдентификатора, Макс(Идентификатор, Максимальный)); + Иначе + МаксимальныйИдентификатор.Вставить(ИмяИдентификатора, Идентификатор); + КонецЕсли; КонецЦикла; - СтруктураДокумента.МаксимальныйИдентификаторСвязи = МаксимальныйИдентификатор; + + Если ПервыйИдентификатор <> Неопределено Тогда + МаксимальныйИдентификаторСвязи = Новый Структура("Идентификатор, Номер", ПервыйИдентификатор, + МаксимальныйИдентификатор.Получить(ПервыйИдентификатор)); + СтруктураДокумента.МаксимальныйИдентификаторСвязи = МаксимальныйИдентификаторСвязи; + КонецЕсли; + СтруктураДокумента.СвязиКонтента = ДеревоXML; + КонецЕсли; @@ -2268,9 +2305,10 @@ КонецЕсли; ТекстГиперссылки = СтрЗаменить(ТекстГиперссылки, СоответствиеЗамены.Ключ, СоответствиеЗамены.Значение); Если ДобавлятьСвязи Тогда - ИдРесурса = ДеревоМакета.СтруктураДокумента.МаксимальныйИдентификаторСвязи + 1; - ДеревоМакета.СтруктураДокумента.МаксимальныйИдентификаторСвязи = ИдРесурса; - ПолныйИдентификатор = "rId" + Формат(ИдРесурса, "ЧГ=0"); + + НовыйИдентификаторСвязи = НовыйИдентификаторСвязи(ДеревоМакета.СтруктураДокумента); + + ПолныйИдентификатор = НовыйИдентификаторСвязи.Идентификатор + Формат(НовыйИдентификаторСвязи.Номер, "ЧГ=0"); Узел.Атрибуты["r:id"] = ПолныйИдентификатор; Гиперссылки.Вставить(ПолныйИдентификатор, ТекстГиперссылки); @@ -2496,6 +2534,24 @@ КонецПроцедуры +Функция НовыйИдентификаторСвязи(СтруктураДокумента) + + МаксимальныйИдентификаторСвязи = СтруктураДокумента.МаксимальныйИдентификаторСвязи; + Если МаксимальныйИдентификаторСвязи = Неопределено Тогда + Идентификатор = "rId"; + Номер = 1; + Иначе + Идентификатор = МаксимальныйИдентификаторСвязи.Идентификатор; + Номер = МаксимальныйИдентификаторСвязи.Номер + 1; + КонецЕсли; + + НовыйИдентификаторСвязи = Новый Структура("Идентификатор, Номер", Идентификатор, Номер); + СтруктураДокумента.МаксимальныйИдентификаторСвязи = НовыйИдентификаторСвязи; + + Возврат НовыйИдентификаторСвязи; + +КонецФункции + Процедура ПодготовитьШаблонКЧтениюXML(ШаблонКартинкиXML) ШаблонКартинкиXML = " |" @@ -2517,18 +2573,21 @@ УзелСвязей = ДеревоМакета.СтруктураДокумента.СвязиКонтента.Строки[0]; РасширениеКартинки = СтруктураКартинка.РасширениеКартинки; - ИдРесурса = ДеревоМакета.СтруктураДокумента.МаксимальныйИдентификаторСвязи + 1; УзелСвязейКартинки = УзелСвязей.Строки.Добавить(); УзелСвязейКартинки.ИмяТега = "Relationship"; - УзелСвязейКартинки.Атрибуты.Вставить("Id", "rId" + Формат(ИдРесурса, "ЧГ=0")); - ДеревоМакета.СтруктураДокумента.МаксимальныйИдентификаторСвязи = ИдРесурса; + + НовыйИдентификаторСвязи = НовыйИдентификаторСвязи(ДеревоМакета.СтруктураДокумента); + + ИдентификаторКартинки = НовыйИдентификаторСвязи.Идентификатор + Формат(НовыйИдентификаторСвязи.Номер, "ЧГ=0"); + + УзелСвязейКартинки.Атрибуты.Вставить("Id", ИдентификаторКартинки); УзелСвязейКартинки.Атрибуты.Вставить("Type", ТипКартинка); - ИмяКартинки = СтруктураКартинка.ИмяКартинки + Формат(ИдРесурса, "ЧГ=0"); + ИмяКартинки = СтруктураКартинка.ИмяКартинки + Формат(НовыйИдентификаторСвязи.Номер, "ЧГ=0"); ИмяРесурса = "media/" + ИмяКартинки + "." + РасширениеКартинки; УзелСвязейКартинки.Атрибуты.Вставить("Target", ИмяРесурса); - СтруктураКартинка.Вставить("rId", "rId" + Формат(ИдРесурса, "ЧГ=0")); + СтруктураКартинка.Вставить(НовыйИдентификаторСвязи.Идентификатор, ИдентификаторКартинки); СтруктураКартинка.ИмяКартинки = ИмяКартинки; ТипыКонтента = ДеревоМакета.СтруктураДокумента.ТипыКонтента; @@ -5331,8 +5390,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции +#Область ПрочиеПроцедурыИФункции Функция СобытиеЖурналаРегистрации() @@ -5468,3 +5526,5 @@ #КонецОбласти #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index f9b07299c..2c97f78c3 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -16,8 +16,31 @@ // Процедура ОбработчикКоманды(Знач МассивСсылок, Знач ПараметрыВыполнения) Экспорт ПараметрыВыполнения.Вставить("ОбъектыПечати", МассивСсылок); - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыВыполнения.ОписаниеКоманды, ПараметрыВыполнения.ОписаниеКоманды.ДополнительныеПараметры, Истина); - ВыполнитьПодключаемуюКомандуПечатиЗавершение(Истина, ПараметрыВыполнения); + ОписаниеКоманды = ПараметрыВыполнения.ОписаниеКоманды; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ОписаниеКоманды, ОписаниеКоманды.ДополнительныеПараметры, Истина); + + Если ОписаниеКоманды.КомандаПоУмолчанию Тогда + ПараметрыПечатиПоУмолчанию = УправлениеПечатьюВызовСервера.ПараметрыВыполненияДляПечатиПоУмолчанию(МассивСсылок); + Если ПараметрыПечатиПоУмолчанию.ЕстьПараметрыВыполнения Тогда + Для Каждого НовыеПараметры Из ПараметрыПечатиПоУмолчанию.НовыеПараметрыВыполнения Цикл + ЗаполнитьЗначенияСвойств(ПараметрыВыполнения, НовыеПараметры); + ВыполнитьПодключаемуюКомандуПечатиЗавершение(Истина, ПараметрыВыполнения); + КонецЦикла; + Иначе + НовыеПараметры = ПараметрыПечатиПоУмолчанию.НовыеПараметрыВыполнения[0]; + СписокКоманд = НовыеПараметры.КомандыДляВыбора; + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ОписанияКоманд", НовыеПараметры.ОписанияКоманд); + ПараметрыОповещения.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); + + Оповещение = Новый ОписаниеОповещения("ПослеВыбораКомандыПоУмолчанию", ЭтотОбъект, ПараметрыОповещения); + СписокКоманд.ПоказатьВыборЭлемента(Оповещение, НСтр("ru = 'Выбор печатной формы'")); + КонецЕсли; + Иначе + Оповещение = Новый ОписаниеОповещения("ПродолжитьВыполнениеОбработчикКоманды", ЭтотОбъект, ПараметрыВыполнения); + УправлениеПечатьюКлиент.ПередНачаломВыполненияКомандыПечати(МассивСсылок, ПараметрыВыполнения.ОписаниеКоманды, Оповещение); + КонецЕсли; КонецПроцедуры // Формирует табличный документ в форме подсистемы "Печать". @@ -27,12 +50,8 @@ Параметры.Вставить("Форма", Форма); Параметры.Вставить("ИсточникДанных", ИсточникДанных); Параметры.Вставить("ИдентификаторКоманды", ИдентификаторКоманды); - Если СтандартнаяОбработка Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьОткрытиеПечатнойФормыЗавершение", ЭтотОбъект, Параметры); - УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов(ОписаниеОповещения, ОбъектыНазначения, Форма); - Иначе - ВыполнитьОткрытиеПечатнойФормыЗавершение(ОбъектыНазначения, Параметры); - КонецЕсли; + + ВыполнитьОткрытиеПечатнойФормыЗавершение(ОбъектыНазначения, Параметры); КонецПроцедуры @@ -77,6 +96,13 @@ ОткрытьФорму("ОбщаяФорма.ПодготовкаНовогоПисьма", ПараметрыФормы, ФормаВладелец,,,, ОписаниеОповещенияОЗавершении); КонецПроцедуры +Функция ПараметрыОткрытияФормыПечати() Экспорт + ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати,УникальныйИдентификаторХранилища, + |ИсточникДанных,КоллекцияПечатныхФорм,ПараметрыИсточника,ТекущийЯзык,ВладелецФормы,ПараметрыВывода"); + ПараметрыОткрытия.Вставить("ОбъектыПечати", Новый СписокЗначений); + Возврат ПараметрыОткрытия; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -127,10 +153,18 @@ ЗаполнитьЗначенияСвойств(ПараметрыПечати, ОписаниеКоманды); Обработчик = ИмяОбработчика + "(ПараметрыПечати)"; Результат = Вычислить(Обработчик); + + ОписаниеКоманды.Удалить("Форма"); + ОбновитьКоманды(Форма, ОписаниеКоманды); + Возврат; КонецЕсли; Если ОписаниеКоманды.СразуНаПринтер Тогда + ОписаниеКомандыНаПринтер = Новый Структура("Идентификатор,ОсновнаяПечатнаяФорма,НаименованиеПечатнойФормы, + |ЗаменитьОсновнуюПечатнуюФорму,ИдентификаторИзКомплекта"); + ЗаполнитьЗначенияСвойств(ОписаниеКомандыНаПринтер, ОписаниеКоманды); + ОписаниеКоманды.ДополнительныеПараметры.Вставить("ОписаниеКоманды", ОписаниеКомандыНаПринтер); УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(ОписаниеКоманды.МенеджерПечати, ОписаниеКоманды.Идентификатор, ОбъектыПечати, ОписаниеКоманды.ДополнительныеПараметры); Иначе @@ -142,7 +176,7 @@ Процедура ПроверитьПроведенностьДокументовДиалогПроведения(Параметры) Экспорт - Если Не УправлениеПечатьюВызовСервера.ДоступноПравоПроведения(Параметры.НепроведенныеДокументы) Тогда + Если Не Параметры.ЕстьПравоПроведения Тогда Если Параметры.НепроведенныеДокументы.Количество() = 1 Тогда ТекстПредупреждения = НСтр("ru = 'Для того чтобы распечатать документ, его необходимо предварительно провести. Недостаточно прав для проведения документа, печать невозможна.'"); Иначе @@ -156,7 +190,8 @@ Иначе ТекстВопроса = НСтр("ru = 'Для того чтобы распечатать документы, их необходимо предварительно провести. Выполнить проведение документов и продолжить?'"); КонецЕсли; - ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьПроведенностьДокументовПроведениеДокументов", ЭтотОбъект, Параметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьПроведенностьДокументовПроведениеДокументов", + ЭтотОбъект, Параметры); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры @@ -168,18 +203,21 @@ КонецЕсли; ОчиститьСообщения(); - ДанныеОНепроведенныхДокументах = ОбщегоНазначенияВызовСервера.ПровестиДокументы(ДополнительныеПараметры.НепроведенныеДокументы); + ДанныеОНепроведенныхДокументах = ОбщегоНазначенияКлиент.ПровестиДокументы(ДополнительныеПараметры.НепроведенныеДокументы); ШаблонСообщения = НСтр("ru = 'Документ %1 не проведен: %2'"); НепроведенныеДокументы = Новый Массив; Для Каждого ИнформацияОДокументе Из ДанныеОНепроведенныхДокументах Цикл ОбщегоНазначенияКлиент.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(ИнформацияОДокументе.Ссылка), ИнформацияОДокументе.ОписаниеОшибки), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + Строка(ИнформацияОДокументе.Ссылка), ИнформацияОДокументе.ОписаниеОшибки), ИнформацияОДокументе.Ссылка); НепроведенныеДокументы.Добавить(ИнформацияОДокументе.Ссылка); КонецЦикла; - ПроведенныеДокументы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ДополнительныеПараметры.СписокДокументов, НепроведенныеДокументы); - ИзмененныеДокументы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ДополнительныеПараметры.НепроведенныеДокументы, НепроведенныеДокументы); + ПроведенныеДокументы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ДополнительныеПараметры.СписокДокументов, + НепроведенныеДокументы); + ИзмененныеДокументы = ОбщегоНазначенияКлиентСервер.РазностьМассивов(ДополнительныеПараметры.НепроведенныеДокументы, + НепроведенныеДокументы); ДополнительныеПараметры.Вставить("НепроведенныеДокументы", НепроведенныеДокументы); ДополнительныеПараметры.Вставить("ПроведенныеДокументы", ПроведенныеДокументы); @@ -239,7 +277,7 @@ Возврат Вид = "ОТЧЕТ" Или Вид = "ОБРАБОТКА"; КонецФункции -Процедура ВыполнитьОткрытиеПечатнойФормыЗавершение(ОбъектыНазначения, ДополнительныеПараметры) Экспорт +Процедура ВыполнитьОткрытиеПечатнойФормыЗавершение(ОбъектыНазначения, ДополнительныеПараметры) Форма = ДополнительныеПараметры.Форма; @@ -272,13 +310,6 @@ КонецПроцедуры -Функция ПараметрыОткрытияФормыПечати() Экспорт - ПараметрыОткрытия = Новый Структура("ИмяМенеджераПечати,ИменаМакетов,ПараметрКоманды,ПараметрыПечати,УникальныйИдентификаторХранилища, - |ИсточникДанных,КоллекцияПечатныхФорм,ПараметрыИсточника,ТекущийЯзык,ВладелецФормы,ПараметрыВывода"); - ПараметрыОткрытия.Вставить("ОбъектыПечати", Новый СписокЗначений); - Возврат ПараметрыОткрытия; -КонецФункции - Процедура ПродолжитьВыполнениеКомандыПечати() Экспорт ИмяПараметра = "СтандартныеПодсистемы.Печать.ВыполнитьКомандуПечати"; @@ -308,6 +339,7 @@ ВыполнитьКомандуПечатиВФоне(ВладелецФормы, ПараметрыОткрытия); Иначе ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, Строка(Новый УникальныйИдентификатор)); + ОбновитьКоманды(ВладелецФормы, ПараметрыПечати); КонецЕсли; КонецПроцедуры @@ -382,6 +414,8 @@ ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, Строка(Новый УникальныйИдентификатор)); + ОбновитьКоманды(ВладелецФормы, СтруктураРезультата.ПараметрыПечати); + КонецПроцедуры Функция ПараметрыОжидания(ВладелецФормы) Экспорт @@ -408,4 +442,35 @@ КонецФункции +Процедура ПослеВыбораКомандыПоУмолчанию(Результат, ПараметрыВыполнения) Экспорт + + Если Результат <> Неопределено Тогда + ПараметрыКоманды = Новый Структура("ОписаниеКоманды", ПараметрыВыполнения.ОписанияКоманд[Результат.Значение]); + ПараметрыВыполнения = ПараметрыВыполнения.ПараметрыВыполнения; + + ЗаполнитьЗначенияСвойств(ПараметрыВыполнения, ПараметрыКоманды); + ВыполнитьПодключаемуюКомандуПечатиЗавершение(Истина, ПараметрыВыполнения); + КонецЕсли; + +КонецПроцедуры + +Процедура ПродолжитьВыполнениеОбработчикКоманды(Результат, ПараметрыВыполнения) Экспорт + ПараметрыВыполнения.ОписаниеКоманды = Результат; + ВыполнитьПодключаемуюКомандуПечатиЗавершение(Истина, ПараметрыВыполнения); +КонецПроцедуры + +Процедура ОбновитьКоманды(Форма, ОписаниеКоманды) + + Если ТипЗнч(ОписаниеКоманды) = Тип("Структура") Тогда + ТребуетсяОбновление = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеКоманды, "ЗаменитьОсновнуюПечатнуюФорму", Ложь) + Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеКоманды, "КомандаПоУмолчанию", Ложь); + + Если ТребуетсяОбновление Тогда + Форма.ОтключитьОбработчикОжидания("Подключаемый_ОбновитьКоманды"); + Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбновитьКоманды", 0.2, Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index fc6a0a7e0..a2ff5b768 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -8,8 +8,7 @@ #Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для стандартной обработки свойств. +#Область ПроцедурыИФункцииДляСтандартнойОбработкиСвойств // Создает основные реквизиты и поля формы, необходимые для работы. // Заполняет дополнительные реквизиты, если используются. @@ -426,6 +425,10 @@ Возврат; КонецЕсли; + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений) Тогда + Возврат; + КонецЕсли; + Ключи = Строки.ПолучитьКлючи(); Если Ключи.Количество() = 0 Тогда Возврат; @@ -449,7 +452,7 @@ КонецЕсли; Метки = СписокСвойствДляВидаОбъектов.ВыгрузитьКолонку("Свойство"); - РеквизитыМеток = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Метки, "ЦветСвойств, ПометкаУдаления"); + РеквизитыМеток = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Метки, "ЦветСвойства, ПометкаУдаления"); Для каждого СтрокаСписка Из Строки Цикл КлючСтроки = СтрокаСписка.Ключ; @@ -473,7 +476,7 @@ ИмяСвойства = СтрШаблон("Метка%1", НомерМетки); Если ДанныеСтроки.Данные.Свойство(ИмяСвойства) Тогда ДанныеСтроки.Данные[ИмяСвойства] = - Перечисления.ЦветаСвойств.Индекс(РеквизитыМетки.ЦветСвойств) + 1; + Перечисления.ЦветаСвойств.Индекс(РеквизитыМетки.ЦветСвойства) + 1; НомерМетки = НомерМетки + 1; Иначе Прервать; @@ -483,27 +486,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для программной работы со свойствами +#КонецОбласти -// Добавляет дополнительное свойство к переданному объекту. +#Область ПроцедурыИФункцииДляПрограммнойРаботыСоСвойствами + +// Добавляет дополнительный реквизит, сведение или метку к переданному объекту или набору свойств. // // Параметры: // Владелец - ОбъектМетаданных // - Строка - полное имя объекта метаданных или имя набора свойств. -// - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - ссылка на набор свойств. +// - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений - набор свойств. // Параметры - см. ПараметрыДобавленияСвойства. -// ЭтоСведение - Булево - если Истина, будет добавлено дополнительное сведение. -// Значение по умолчанию Ложь - добавляется дополнительный реквизит. +// ВидСвойства - ПеречислениеСсылка.ВидыСвойств - вид добавляемого свойства. +// - Булево - для обратной совместимости. +// +// Возвращаемое значение: +// ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения // -Процедура ДобавитьСвойство(Владелец, Параметры, ЭтоСведение = Ложь) Экспорт +Функция ДобавитьСвойство(Знач Владелец, Знач Параметры, Знач ВидСвойства = Неопределено) Экспорт Если ТипЗнч(Владелец) = Тип("ОбъектМетаданных") Тогда ИмяПредопределенного = СтрЗаменить(Владелец.ПолноеИмя(), ".", "_"); ИначеЕсли ТипЗнч(Владелец) = Тип("Строка") Тогда Если СтрНайти(Владелец, ".") = 0 Тогда - // Это набор свойств. - ИмяПредопределенного = Владелец; + ИмяПредопределенного = Владелец; // Это набор свойств. Иначе ИмяПредопределенного = СтрЗаменить(Владелец, ".", "_"); КонецЕсли; @@ -527,45 +533,55 @@ КонецЕсли; КонецЕсли; - ОтсутствующиеПараметры = Новый Массив; - Если Не Параметры.Свойство("Наименование") - Или Не ЗначениеЗаполнено(Параметры.Наименование) Тогда - ОтсутствующиеПараметры.Добавить("Наименование"); + ПараметрыДобавленияСвойства = ПараметрыДобавленияСвойства(); + ЗаполнитьЗначенияСвойств(ПараметрыДобавленияСвойства, Параметры); + + НезаполненныеПараметры = Новый Массив; + Если Не ЗначениеЗаполнено(ПараметрыДобавленияСвойства.Наименование) Тогда + НезаполненныеПараметры.Добавить("Наименование"); КонецЕсли; - Если Не Параметры.Свойство("ТипЗначения") - Или Не ЗначениеЗаполнено(Параметры.ТипЗначения) Тогда - Если Параметры.Свойство("Тип") И ЗначениеЗаполнено(Параметры.Тип) Тогда - Параметры.ТипЗначения = Параметры.Тип; + Если Не ЗначениеЗаполнено(ПараметрыДобавленияСвойства.ТипЗначения) Тогда + Если ЗначениеЗаполнено(ПараметрыДобавленияСвойства.Тип) Тогда + ПараметрыДобавленияСвойства.ТипЗначения = ПараметрыДобавленияСвойства.Тип; Иначе - ОтсутствующиеПараметры.Добавить("ТипЗначения"); + НезаполненныеПараметры.Добавить("ТипЗначения"); КонецЕсли; КонецЕсли; - Если ОтсутствующиеПараметры.Количество() > 0 Тогда - ОтсутствующиеПараметры = СтрСоединить(ОтсутствующиеПараметры, ", "); - ТекстИсключения = НСтр("ru = 'Не переданы обязательные параметры: - |%1.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ОтсутствующиеПараметры); + Если ТипЗнч(ВидСвойства) = Тип("Булево") Или ВидСвойства = Неопределено Тогда + ВидСвойства = ?(ВидСвойства = Истина, Перечисления.ВидыСвойств.ДополнительныеСведения, + Перечисления.ВидыСвойств.ДополнительныеРеквизиты); // Для обратной совместимости + ИначеЕсли ВидСвойства = Перечисления.ВидыСвойств.Метки + И (Не ЗначениеЗаполнено(ПараметрыДобавленияСвойства.ЦветСвойства)) Тогда + НезаполненныеПараметры.Добавить("ЦветСвойства"); + КонецЕсли; + ЭтоСведение = (ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения); + + Если НезаполненныеПараметры.Количество() > 0 Тогда + НезаполненныеПараметры = СтрСоединить(НезаполненныеПараметры, ", "); + ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не заданы обязательные свойства в параметре %1 при вызове %2: + |%3.'"), "Параметры", "УправлениеСвойствами.ДобавитьСвойство", НезаполненныеПараметры); + ВызватьИсключение(ТекстИсключения, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ПустаяСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); // 1. Проверка, что наименование используется. - Результат = УправлениеСвойствамиСлужебный.НаименованиеУжеИспользуется(ПустаяСсылка, НаборСвойств, Параметры.Наименование); + Результат = УправлениеСвойствамиСлужебный.НаименованиеУжеИспользуется(ПустаяСсылка, НаборСвойств, ПараметрыДобавленияСвойства.Наименование); Если ЗначениеЗаполнено(Результат) Тогда ВызватьИсключение Результат; КонецЕсли; // 2. Проверка, что имя уже используется. - Если Параметры.Свойство("Имя") - И ЗначениеЗаполнено(Параметры.Имя) Тогда - Результат = УправлениеСвойствамиСлужебный.ИмяУжеИспользуется(Параметры.Имя, ПустаяСсылка); + Если ЗначениеЗаполнено(ПараметрыДобавленияСвойства.Имя) Тогда + Результат = УправлениеСвойствамиСлужебный.ИмяУжеИспользуется(ПараметрыДобавленияСвойства.Имя, ПустаяСсылка); Если ЗначениеЗаполнено(Результат) Тогда ВызватьИсключение Результат; КонецЕсли; Иначе Имя = ""; - ЗаголовокОбъекта = Параметры.Наименование; + ЗаголовокОбъекта = ПараметрыДобавленияСвойства.Наименование; УправлениеСвойствамиСлужебный.УдалитьНедопустимыеСимволы(ЗаголовокОбъекта); ЗаголовокОбъектаЧастями = СтрРазделить(ЗаголовокОбъекта, " ", Ложь); Для Каждого ЧастьЗаголовка Из ЗаголовокОбъектаЧастями Цикл @@ -583,13 +599,12 @@ Имя = Имя + "_" + СтрокаУИД; КонецЕсли; - Параметры.Вставить("Имя", Имя); + ПараметрыДобавленияСвойства.Вставить("Имя", Имя); КонецЕсли; // 3. Проверка, что идентификатор для формул уже используется. - Если Параметры.Свойство("ИдентификаторДляФормул") - И ЗначениеЗаполнено(Параметры.ИдентификаторДляФормул) Тогда - Результат = УправлениеСвойствамиСлужебный.ИдентификаторДляФормулУжеИспользуется(Параметры.ИдентификаторДляФормул, ПустаяСсылка); + Если ЗначениеЗаполнено(ПараметрыДобавленияСвойства.ИдентификаторДляФормул) Тогда + Результат = УправлениеСвойствамиСлужебный.ИдентификаторДляФормулУжеИспользуется(ПараметрыДобавленияСвойства.ИдентификаторДляФормул, ПустаяСсылка); Если ЗначениеЗаполнено(Результат) Тогда ВызватьИсключение Результат; КонецЕсли; @@ -603,15 +618,22 @@ Блокировка.Заблокировать(); НовоеСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(НовоеСвойство, Параметры); + ЗаполнитьЗначенияСвойств(НовоеСвойство, ПараметрыДобавленияСвойства); - НовоеСвойство.Заголовок = Параметры.Наименование; + НовоеСвойство.ВидСвойства = ВидСвойства; + НовоеСвойство.Заголовок = ПараметрыДобавленияСвойства.Наименование; НовоеСвойство.ЭтоДополнительноеСведение = ЭтоСведение; НовоеСвойство.НаборСвойств = НаборСвойств; // Для мультиязычной. - НовоеСвойство.ЗаголовокЯзык1 = Параметры.Наименование; - НовоеСвойство.ЗаголовокЯзык2 = Параметры.Наименование; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда + МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер"); + + СведенияОЯзыках = МодульМультиязычностьСервер.СведенияОЯзыках(); + Для Каждого СведенияОЯзыке Из СведенияОЯзыках.Используется Цикл + НовоеСвойство["Заголовок" + СведенияОЯзыке.Ключ] = ПараметрыДобавленияСвойства.Наименование; + КонецЦикла; + КонецЕсли; НовоеСвойство.Записать(); @@ -629,12 +651,15 @@ КонецЕсли; ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; -КонецПроцедуры + Возврат НовоеСвойство.Ссылка; + +КонецФункции // Добавляет доступное значение для реквизита с типом ЗначенияСвойствОбъектов // или ЗначенияСвойствОбъектовИерархия. @@ -688,7 +713,8 @@ КонецЕсли; ЭтоГруппа = Параметры.Свойство("ЭтоГруппа") И Параметры.ЭтоГруппа; - Если Иерархия Тогда + ОписаниеТипаЗначенийИерархия = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектовИерархия"); + Если ТипРеквизита = ОписаниеТипаЗначенийИерархия Тогда Если ЭтоГруппа Тогда ЗначениеРеквизита = Справочники.ЗначенияСвойствОбъектовИерархия.СоздатьГруппу(); Иначе @@ -724,6 +750,7 @@ // * ИдентификаторДляФормул - Строка // * МногострочноеПолеВвода - Булево // * Подсказка - Строка +// * ЦветСвойства - Перечисления.ЦветаСвойств, обязательный для вида свойств Метка // Функция ПараметрыДобавленияСвойства() Экспорт @@ -738,6 +765,7 @@ Параметры.Вставить("МногострочноеПолеВвода", Ложь); Параметры.Вставить("Подсказка", ""); Параметры.Вставить("Тип"); // Для обратной совместимости. + Параметры.Вставить("ЦветСвойства"); Возврат Параметры; @@ -765,8 +793,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для нестандартной обработки дополнительных свойств. +#КонецОбласти + +#Область ПроцедурыИФункцииДляНестандартнойОбработкиДополнительныхСвойств // Возвращает ссылку на предопределенный набор свойств по имени набора. // Предназначена для наборов, указанных в процедуре @@ -843,11 +872,11 @@ ОбновитьКлючНазначенияФормы(Форма, КлючНазначения); - ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеРеквизиты; + ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеРеквизиты; ОписаниеСвойств = УправлениеСвойствамиСлужебный.ЗначенияСвойств( ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(), Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, - ВидСвойств); + ВидСвойства); ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение"); ОписаниеСвойств.Колонки.Добавить("СтрокаСсылочногоТипа"); @@ -1687,6 +1716,72 @@ КонецПроцедуры +// Добавляет дополнительные реквизиты и метки в переданный объект Владелец. Подходит для случаев, +// когда необходимо установить свойства для нового еще незаписанного объекта. +// При попытке добавить дополнительные сведения будет вызвано исключение. +// +// Параметры: +// Владелец - СправочникОбъектИмяСправочника +// - ДокументОбъектИмяДокумента +// - ПланВидовХарактеристикОбъект +// - БизнесПроцессОбъектИмяБизнесПроцесса +// - ЗадачаОбъект +// - ПланВидовРасчетаОбъект +// - ПланСчетовОбъект +// Свойства - Массив из Соответствие: +// * Ключ - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство, которое необходимо установить. +// * Значение - Произвольный - новое значение свойства. +// +Процедура УстановитьСвойстваУОбъекта(Владелец, Свойства) Экспорт + + ТаблицаДопРеквизитов = Новый ТаблицаЗначений; + ТаблицаДопРеквизитов.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения")); + ТаблицаДопРеквизитов.Колонки.Добавить("Значение"); + ТаблицаДопРеквизитов.Колонки.Добавить("ТекстоваяСтрока"); + + СсылкиСвойств = Новый Массив; + Для каждого СвойствоКлючЗначение Из Свойства Цикл + СсылкиСвойств.Добавить(СвойствоКлючЗначение.Ключ); + КонецЦикла; + + ТипыСвойствСведение = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(СсылкиСвойств, "ЭтоДополнительноеСведение"); + Для каждого СвойствоКлючЗначение Из Свойства Цикл + Если ТипыСвойствСведение[СвойствоКлючЗначение.Ключ] = Истина Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в процедуре %2. Допустима установка только дополнительных реквизитов.'"), + "Свойства", + "УправлениеСвойствами.УстановитьСвойстваУОбъекта"); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + + НоваяСтрока = ТаблицаДопРеквизитов.Добавить(); + Если ТипЗнч(СвойствоКлючЗначение.Значение) = Тип("Строка") + И СтрДлина(СвойствоКлючЗначение.Значение) > 1024 Тогда + НоваяСтрока.ТекстоваяСтрока = СвойствоКлючЗначение.Значение; + КонецЕсли; + + НоваяСтрока.Свойство = СвойствоКлючЗначение.Ключ; + НоваяСтрока.Значение = СвойствоКлючЗначение.Значение + + КонецЦикла; + + МассивДопРеквизитовВладельца = СвойстваОбъекта(Владелец, Истина, Ложь); + Для Каждого ДопРеквизит Из ТаблицаДопРеквизитов Цикл + Если МассивДопРеквизитовВладельца.Найти(ДопРеквизит.Свойство) = Неопределено Тогда + Продолжить; + КонецЕсли; + МассивСтрок = Владелец.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизит.Свойство)); + Если МассивСтрок.Количество() > 0 Тогда + СтрокаСвойства = МассивСтрок[0]; + ЗаполнитьЗначенияСвойств(СтрокаСвойства, ДопРеквизит, "Свойство,Значение,ТекстоваяСтрока"); + Иначе + СтрокаСвойства = Владелец.ДополнительныеРеквизиты.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаСвойства, ДопРеквизит, "Свойство,Значение,ТекстоваяСтрока"); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + // Проверяет, используются ли дополнительные реквизиты с объектом. // // Параметры: @@ -1795,8 +1890,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Метки +#КонецОбласти + +#Область Метки // Устанавливает видимость легенды меток в рамках сеанса работы. // @@ -1904,7 +2000,7 @@ ОтображеноМеток = 0; РеквизитыМеток = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Метки, - "Имя, ЦветСвойств, Наименование, ПометкаУдаления, Подсказка"); + "Имя, ЦветСвойства, Наименование, ПометкаУдаления, Подсказка"); Если ВариантОтображенияМеток = Перечисления.ВариантыОтображенияМеток.Надпись Тогда Для Индекс = 0 По КоличествоМеток - 1 Цикл Метка = РеквизитыМеток.Получить(Метки[Индекс]); @@ -1917,7 +2013,7 @@ НовыйЭлемент.Высота = 1; НовыйЭлемент.Заголовок = Метка.Наименование; НовыйЭлемент.ЦветТекста = Метаданные.ЭлементыСтиля.ЦветТекстаМетки.Значение; - НовыйЭлемент.ЦветФона = ЭлементСтиляПоЦвету(Метка.ЦветСвойств); + НовыйЭлемент.ЦветФона = ЭлементСтиляПоЦвету(Метка.ЦветСвойства); НовыйЭлемент.Шрифт = Метаданные.ЭлементыСтиля.ШрифтМеток.Значение; НовыйЭлемент.Подсказка = Метка.Подсказка; Если Не ПроизвольныйОбъект Тогда @@ -1943,7 +2039,7 @@ Если Не ПроизвольныйОбъект Тогда НовыйЭлемент.Гиперссылка = Истина; КонецЕсли; - НовыйЭлемент.Картинка = КартинкаМеткиПоЦвету(Метка.ЦветСвойств); + НовыйЭлемент.Картинка = КартинкаМеткиПоЦвету(Метка.ЦветСвойства); НовыйЭлемент.УстановитьДействие("Нажатие", "Подключаемый_СвойстваВыполнитьКоманду"); НовыйЭлемент.Подсказка = Метка.Наименование; НовыйЭлемент.Заголовок = Метка.Наименование; @@ -2008,34 +2104,34 @@ // Параметры: // Свойства - ТаблицаЗначений - таблица свойств. // -// ВидСвойств - ПеречислениеСсылка.ВидыСвойств - вид свойств, дополнительные реквизиты или метки. +// ВидСвойства - ПеречислениеСсылка.ВидыСвойств - вид свойств, дополнительные реквизиты или метки. // // Возвращаемое значение: // Массив - массив свойств определенного вида. // -Функция СвойстваПоВидуДополнительныхРеквизитов(Свойства, ВидСвойств) Экспорт +Функция СвойстваПоВидуДополнительныхРеквизитов(Свойства, ВидСвойства) Экспорт СвойстваПоВиду = Новый Массив; СписокСвойств = Свойства.ВыгрузитьКолонку("Свойство"); - ВидыСвойствОбъектов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(СписокСвойств, "ВидСвойств"); - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеРеквизиты Тогда + ВидыСвойствОбъектов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(СписокСвойств, "ВидСвойства"); + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеРеквизиты Тогда Для Каждого Свойство Из СписокСвойств Цикл - ВидСвойствОбъекта = ВидыСвойствОбъектов.Получить(Свойство); - Если Не ЗначениеЗаполнено(ВидСвойствОбъекта) Тогда + ВидСвойстваОбъекта = ВидыСвойствОбъектов.Получить(Свойство); + Если Не ЗначениеЗаполнено(ВидСвойстваОбъекта) Тогда Продолжить; КонецЕсли; - Если Не ЗначениеЗаполнено(ВидСвойствОбъекта.ВидСвойств) - Или ВидСвойствОбъекта.ВидСвойств = ВидСвойств Тогда + Если Не ЗначениеЗаполнено(ВидСвойстваОбъекта.ВидСвойства) + Или ВидСвойстваОбъекта.ВидСвойства = ВидСвойства Тогда СвойстваПоВиду.Добавить(Свойство); КонецЕсли; КонецЦикла; - ИначеЕсли ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Для Каждого Свойство Из СписокСвойств Цикл - ВидСвойствОбъекта = ВидыСвойствОбъектов.Получить(Свойство); - Если Не ЗначениеЗаполнено(ВидСвойствОбъекта) Тогда + ВидСвойстваОбъекта = ВидыСвойствОбъектов.Получить(Свойство); + Если Не ЗначениеЗаполнено(ВидСвойстваОбъекта) Тогда Продолжить; КонецЕсли; - Если ВидСвойствОбъекта.ВидСвойств = ВидСвойств Тогда + Если ВидСвойстваОбъекта.ВидСвойства = ВидСвойства Тогда СвойстваПоВиду.Добавить(Свойство); КонецЕсли; КонецЦикла; @@ -2061,8 +2157,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // 1. Обновляет наименования предопределенных наборов свойств, // если они отличаются от текущих представлений соответствующих @@ -2329,6 +2426,8 @@ КонецПроцедуры +#КонецОбласти + #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать ЗначенияСвойств или ЗначенияСвойства. @@ -2752,7 +2851,7 @@ ОтборМеток = Форма.ПараметрыСвойств.ОтборМеток; РеквизитыМеток = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Метки, - "Ссылка, Имя, Наименование, ЦветСвойств, ПометкаУдаления"); + "Ссылка, Имя, Наименование, ЦветСвойства, ПометкаУдаления"); Если ОтборМеток Тогда Реквизиты = Новый Массив; Для Каждого Метка Из Метки Цикл @@ -2791,7 +2890,7 @@ НовыйЭлемент = Форма.Элементы.Добавить("Легенда_" + Метка.Имя, Тип("ДекорацияФормы"), Группа); НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка; - НовыйЭлемент.Картинка = КартинкаМеткиПоЦвету(Метка.ЦветСвойств); + НовыйЭлемент.Картинка = КартинкаМеткиПоЦвету(Метка.ЦветСвойства); НовыйЭлемент.Подсказка = Метка.Наименование; НовыйЭлемент.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСправа; КонецЦикла; @@ -3095,25 +3194,25 @@ КонецПроцедуры -Функция КартинкаМеткиПоЦвету(ЦветСвойств) +Функция КартинкаМеткиПоЦвету(ЦветСвойства) - Если ЦветСвойств = Перечисления.ЦветаСвойств.Голубой Тогда + Если ЦветСвойства = Перечисления.ЦветаСвойств.Голубой Тогда Картинка = БиблиотекаКартинок.МеткаГолубая; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Желтый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Желтый Тогда Картинка = БиблиотекаКартинок.МеткаЖелтая; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Зеленый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Зеленый Тогда Картинка = БиблиотекаКартинок.МеткаЗеленая; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Лаймовый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Лаймовый Тогда Картинка = БиблиотекаКартинок.МеткаЛаймовая; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Красный Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Красный Тогда Картинка = БиблиотекаКартинок.МеткаКрасная; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Оранжевый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Оранжевый Тогда Картинка = БиблиотекаКартинок.МеткаОранжевая; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Розовый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Розовый Тогда Картинка = БиблиотекаКартинок.МеткаРозовая; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Синий Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Синий Тогда Картинка = БиблиотекаКартинок.МеткаСиняя; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Фиолетовый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Фиолетовый Тогда Картинка = БиблиотекаКартинок.МеткаФиолетовая; Иначе Картинка = БиблиотекаКартинок.МеткаСерая; @@ -3123,25 +3222,25 @@ КонецФункции -Функция ЭлементСтиляПоЦвету(ЦветСвойств) +Функция ЭлементСтиляПоЦвету(ЦветСвойства) - Если ЦветСвойств = Перечисления.ЦветаСвойств.Лаймовый Тогда + Если ЦветСвойства = Перечисления.ЦветаСвойств.Лаймовый Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиЛаймовый.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Красный Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Красный Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиКрасный.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Оранжевый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Оранжевый Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиОранжевый.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Желтый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Желтый Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиЖелтый.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Зеленый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Зеленый Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиЗеленый.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Синий Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Синий Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиСиний.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Голубой Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Голубой Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиГолубой.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Фиолетовый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Фиолетовый Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиФиолетовый.Значение; - ИначеЕсли ЦветСвойств = Перечисления.ЦветаСвойств.Розовый Тогда + ИначеЕсли ЦветСвойства = Перечисления.ЦветаСвойств.Розовый Тогда ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиРозовый.Значение; Иначе ЭлементСтиля = Метаданные.ЭлементыСтиля.ЦветМеткиСерый.Значение; @@ -3151,4 +3250,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index ec4eeb76c..9e0cc9d49 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -12,7 +12,7 @@ // // Параметры: // ВидОбъектов - Строка - полное имя объекта метаданных; -// ВидСвойств - Строка - "ДополнительныеРеквизиты" или "ДополнительныеСведения" или "Метки". +// ВидСвойства - Строка - "ДополнительныеРеквизиты" или "ДополнительныеСведения" или "Метки". // // Возвращаемое значение: // ТаблицаЗначений - свойство, Наименование, ТипЗначения, ФорматСвойства. @@ -62,7 +62,7 @@ | &ТаблицаСвойств КАК ТаблицаСвойств |ГДЕ | ТаблицаСвойств.Ссылка В ИЕРАРХИИ (&Ссылка) - | И ТаблицаСвойств.Свойство.ВидСвойств В (&ВидыСвойств)"; + | И ТаблицаСвойств.Свойство.ВидСвойства В (&ВидыСвойств)"; ВидыСвойств = Новый Массив; Если ВидСвойств = "ДополнительныеРеквизиты" Тогда @@ -248,8 +248,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -562,6 +561,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ДополнительныеРеквизитыОбработкаПроверкиЗаполнения(Источник, Отказ, ПроверяемыеРеквизиты) Экспорт @@ -1012,13 +1013,13 @@ // Параметры: // ДополнительныеСвойстваОбъекта - ТаблицаЗначений // Наборы - ТаблицаЗначений -// ВидСвойств - ПеречислениеСсылка.ВидыСвойств +// ВидСвойства - ПеречислениеСсылка.ВидыСвойств // -Функция ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ВидСвойств) Экспорт +Функция ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ВидСвойства) Экспорт Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда // Предварительная быстрая проверка использования дополнительных свойств. - СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ВидСвойств); + СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ВидСвойства); Если СвойстваНеНайдены Тогда ОписаниеСвойств = Новый ТаблицаЗначений; @@ -1058,7 +1059,7 @@ Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств); Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык()); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); - Запрос.УстановитьПараметр("ВидСвойств", ВидСвойств); + Запрос.УстановитьПараметр("ВидСвойства", ВидСвойства); Запрос.Текст = "ВЫБРАТЬ @@ -1150,8 +1151,8 @@ | ВЫБОР | КОГДА ДополнительныеРеквизитыИСведения.ПометкаУдаления = ИСТИНА | ТОГДА 12 - | КОГДА ДополнительныеРеквизитыИСведения.ВидСвойств = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) - | ТОГДА ДополнительныеРеквизитыИСведения.ЦветСвойств.Порядок + 1 + | КОГДА ДополнительныеРеквизитыИСведения.ВидСвойства = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) + | ТОГДА ДополнительныеРеквизитыИСведения.ЦветСвойства.Порядок + 1 | ИНАЧЕ 11 | КОНЕЦ КАК НомерКартинки |ИЗ @@ -1160,22 +1161,22 @@ | ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка |ГДЕ | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение = &ЭтоНаборыДополнительныхСведений - | И ДополнительныеРеквизитыИСведения.ВидСвойств В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойств) + | И ДополнительныеРеквизитыИСведения.ВидСвойства В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойства) |УПОРЯДОЧИТЬ ПО | Удалено, | ВсеСвойства.ПорядокНабора, | ВсеСвойства.ПорядокСвойства"; - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеСведения Тогда Запрос.Текст = СтрЗаменить( Запрос.Текст, "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); ЭтоНаборыДополнительныхСведений = Истина; - ИначеЕсли ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда + ИначеЕсли ВидСвойства = Перечисления.ВидыСвойств.Метки Тогда Запрос.Текст = СтрЗаменить( Запрос.Текст, - "В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойств)", + "В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойства)", "= ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки)"); ЭтоНаборыДополнительныхСведений = Ложь; Иначе @@ -1239,7 +1240,7 @@ ОписаниеСвойства = ОписаниеСвойств.Найти(Описание.Свойство, "Свойство"); Если ОписаниеСвойства <> Неопределено Тогда // Поддержка строк неограниченной длины. - Если ВидСвойств = Перечисления.ВидыСвойств.ДополнительныеРеквизиты Тогда + Если ВидСвойства = Перечисления.ВидыСвойств.ДополнительныеРеквизиты Тогда ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки( ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.ВыводитьВВидеГиперссылки, @@ -2050,9 +2051,11 @@ КонецПроцедуры -Функция НаименованияНаборовСвойств() Экспорт +Функция НаименованияНаборовСвойств(ПредопределенныеДанные = Неопределено) Экспорт - ПредопределенныеДанные = ПредопределенныеНаборыСвойств(); + Если ПредопределенныеДанные = Неопределено Тогда + ПредопределенныеДанные = ПредопределенныеНаборыСвойств(); + КонецЕсли; Результат = Новый Соответствие; Для Каждого Язык Из Метаданные.Языки Цикл @@ -2324,8 +2327,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции // Возвращает основной набор свойств владельца. // @@ -2412,7 +2414,7 @@ Запрос.УстановитьПараметр("Набор", Набор); Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык()); Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка); - Запрос.УстановитьПараметр("ВидСвойств", ВидСвойств); + Запрос.УстановитьПараметр("ВидСвойства", ВидСвойств); Если Не Форма.ПоказатьНеиспользуемыеРеквизиты Тогда Запрос.Текст = @@ -2428,8 +2430,8 @@ | ВЫБОР | КОГДА Свойства.ПометкаУдаления = ИСТИНА | ТОГДА 12 - | КОГДА Свойства.ВидСвойств = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) - | ТОГДА Свойства.ЦветСвойств.Порядок + 1 + | КОГДА Свойства.ВидСвойства = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) + | ТОГДА Свойства.ЦветСвойства.Порядок + 1 | ИНАЧЕ 11 | КОНЕЦ КАК НомерКартинки, | Свойства.Подсказка КАК Подсказка, @@ -2441,7 +2443,7 @@ | ПО СвойстваНаборов.Свойство = Свойства.Ссылка |ГДЕ | СвойстваНаборов.Свойство.ЭтоДополнительноеСведение = &ЭтоНаборыДополнительныхСведений - | И СвойстваНаборов.Свойство.ВидСвойств В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойств) + | И СвойстваНаборов.Свойство.ВидСвойства В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойства) | И СвойстваНаборов.Ссылка = &Набор | |УПОРЯДОЧИТЬ ПО @@ -2467,8 +2469,8 @@ | ВЫБОР | КОГДА Свойства.ПометкаУдаления = ИСТИНА | ТОГДА 12 - | КОГДА Свойства.ВидСвойств = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) - | ТОГДА Свойства.ЦветСвойств.Порядок + 1 + | КОГДА Свойства.ВидСвойства = ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки) + | ТОГДА Свойства.ЦветСвойства.Порядок + 1 | ИНАЧЕ 11 | КОНЕЦ КАК НомерКартинки, | Свойства.Подсказка КАК Подсказка, @@ -2483,7 +2485,7 @@ | ПО Свойства.Ссылка = СоставНабора.Свойство |ГДЕ | Свойства.ЭтоДополнительноеСведение = &ЭтоНаборыДополнительныхСведений - | И Свойства.ВидСвойств В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойств) + | И Свойства.ВидСвойства В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойства) | И СоставНабора.Свойство ЕСТЬ NULL |; | @@ -2501,7 +2503,7 @@ ИначеЕсли ВидСвойств = Перечисления.ВидыСвойств.Метки Тогда Запрос.Текст = СтрЗаменить( Запрос.Текст, - "В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойств)", + "В (ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.ПустаяСсылка), &ВидСвойства)", "= ЗНАЧЕНИЕ(Перечисление.ВидыСвойств.Метки)"); ЭтоНаборыДополнительныхСведений = Ложь; Иначе @@ -2701,8 +2703,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Заполняет обработчик разделенных данных, зависимый от изменения неразделенных данных. // @@ -2822,3 +2825,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 40125ce47..703cf38d3 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -50,8 +50,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Получение и отправка писем +#Область ПолучениеИОтправкаПисем Процедура ПолучениеИОтправкаЭлектронныхПисем() Экспорт @@ -989,40 +988,30 @@ ДобавлятьВМассивПисемДляПолученияПапки = Ложь; - Блокировка = Новый БлокировкаДанных; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ЭлементБлокировки = Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - ЭлементБлокировки = Блокировка.Добавить("Справочник.ПапкиЭлектронныхПисем"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - Блокировка.Добавить("РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем"); - Блокировка.Добавить("РегистрСведений.УведомленияОПрочтении"); - Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее"); - Блокировка.Добавить("Документ.ЭлектронноеПисьмоВходящее"); - КонецЕсли; - - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); + ЭтоИсходящееПисьмо = ПочтовыеАдресаРавны(ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, + АдресОтправителяИнтернетПочтовогоСообщения(Сообщение.Отправитель)); + // @skip-check query-in-loop - По-объектная запись данных. + РезультатЗаписи = РезультатЗаписиЭлектронногоПисьма(ДанныеУчетнойЗаписи, Сообщение, + ОтветственныйЗаОбработкуПисем, ДанныеУчетнойЗаписи.ПомещатьПисьмоВПапкуПисьмаОснования, + ДобавлятьВМассивПисемДляПолученияПапки, ЭтоИсходящееПисьмо); - ЭтоИсходящееПисьмо = ПочтовыеАдресаРавны(ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, - АдресОтправителяИнтернетПочтовогоСообщения(Сообщение.Отправитель)); - // @skip-check query-in-loop - По-объектная запись данных. - СозданноеПисьмо = ЗаписатьЭлектронноеПисьмо(ДанныеУчетнойЗаписи, Сообщение, - ОтветственныйЗаОбработкуПисем, ДанныеУчетнойЗаписи.ПомещатьПисьмоВПапкуПисьмаОснования, - ДобавлятьВМассивПисемДляПолученияПапки, ЭтоИсходящееПисьмо); + Если РезультатЗаписи.Успешно Тогда ПолученоПисем = ПолученоПисем + 1; - ЗафиксироватьТранзакцию(); - Исключение + ПолученныеПисьма.ВсеПолученныеПисьма.Добавить(РезультатЗаписи.СозданноеПисьмо); + ПолученныеПисьма.ПолученныеПисьмаПоУчетнойЗаписи.Добавить(РезультатЗаписи.СозданноеПисьмо); + Если ДобавлятьВМассивПисемДляПолученияПапки Тогда + ПолученныеПисьма.ПисьмаДляОпределенияПапок.Добавить(РезультатЗаписи.СозданноеПисьмо); + КонецЕсли; + + Иначе - ОтменитьТранзакцию(); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить письмо %1 от %2, отправленное c адреса %3, по причине: |%4'", ОбщегоНазначения.КодОсновногоЯзыка()), Сообщение.Тема, Сообщение.ДатаОтправления, Сообщение.Отправитель.Адрес, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + РезультатЗаписи.ТекстОшибки); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); @@ -1038,12 +1027,6 @@ КонецЦикла; КонецЕсли; - КонецПопытки; - - ПолученныеПисьма.ВсеПолученныеПисьма.Добавить(СозданноеПисьмо); - ПолученныеПисьма.ПолученныеПисьмаПоУчетнойЗаписи.Добавить(СозданноеПисьмо); - Если ДобавлятьВМассивПисемДляПолученияПапки Тогда - ПолученныеПисьма.ПисьмаДляОпределенияПапок.Добавить(СозданноеПисьмо); КонецЕсли; КонецЦикла; @@ -1132,7 +1115,8 @@ ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить заголовки писем для папки ""%1"" учетной записи ""%2"", по причине: %3'"), ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, - РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки(ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка(), Ложь)); + РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки(ИнформацияОбОшибке(), + ОбщегоНазначения.КодОсновногоЯзыка(), Ложь)); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ПапкиЭлектронныхПисем,, ТекстСообщения); Продолжить; @@ -1143,8 +1127,9 @@ Продолжить; КонецЕсли; - ТекстСообщения = СтрШаблон(НСтр("ru = 'Начало получения писем из папки ""%1"" учетной записи ""%2"". Писем к загрузке: %3'"), - ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, КоличествоПисемКЗагрузке); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начало получения писем из папки ""%1"" учетной записи ""%2"". Писем к загрузке: %3'"), + ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, КоличествоПисемКЗагрузке); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ПапкиЭлектронныхПисем,, ТекстСообщения); @@ -1236,18 +1221,16 @@ ИдентификаторыПисемКЗагрузке = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ИдентификаторНаСервере"); ПолученоПисемПоИдентификаторам = ПолучитьПисьмаПоИдентификаторам(Почта, ДанныеУчетнойЗаписи, - ИдентификаторыПисемКЗагрузке, ПолученныеПисьма); + ИдентификаторыПисемКЗагрузке, ПолученныеПисьма); ПолученоПисем = ПолученоПисем + ПолученоПисемПоИдентификаторам; - ТекстСообщения = СтрШаблон(НСтр("ru = 'Получено писем из папки ""%1"" учетной записи ""%2"": %3'"), - ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, ПолученоПисемПоИдентификаторам); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Получено писем из папки ""%1"" учетной записи ""%2"": %3'"), + ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, ПолученоПисемПоИдентификаторам); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, - Метаданные.Справочники.ПапкиЭлектронныхПисем, - , - ТекстСообщения); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.ПапкиЭлектронныхПисем,, ТекстСообщения); КонецЕсли; КонецЦикла; @@ -1680,11 +1663,31 @@ КонецФункции -Функция ЗаписатьЭлектронноеПисьмо(ДанныеУчетнойЗаписи, Сообщение, ОтветственныйЗаОбработкуПисем, +Функция РезультатЗаписиЭлектронногоПисьма(ДанныеУчетнойЗаписи, Сообщение, ОтветственныйЗаОбработкуПисем, ПомещатьПисьмоВПапкуПисьмаОснования, ДобавлятьВМассивПисемДляПолученияПапки, ЭтоИсходящееПисьмо); + Результат = Новый Структура; + Результат.Вставить("Успешно", Ложь); + Результат.Вставить("СозданноеПисьмо", Неопределено); + Результат.Вставить("ТексОшибки", ""); + + Блокировка = Новый БлокировкаДанных; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ЭлементБлокировки = Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПапкиЭлектронныхПисем"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Добавить("РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем"); + Блокировка.Добавить("РегистрСведений.УведомленияОПрочтении"); + Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее"); + Блокировка.Добавить("Документ.ЭлектронноеПисьмоВходящее"); + КонецЕсли; + НачатьТранзакцию(); Попытка + + Блокировка.Заблокировать(); + Если ЭтоИсходящееПисьмо Тогда Письмо = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент(); Иначе @@ -1721,10 +1724,14 @@ ЗаписатьНеобходимостьОбработкиУведомленияОПрочтении(Письмо.Ссылка); КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение + ЗафиксироватьТранзакцию(); + + Исключение + ОтменитьТранзакцию(); - ВызватьИсключение; + Результат.ТексОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Результат; + КонецПопытки; // Запишем вложения вне транзакции записи письма @@ -1788,7 +1795,10 @@ ДобавлятьВМассивПисемДляПолученияПапки = Истина; КонецЕсли; - Возврат Письмо.Ссылка; + Результат.Успешно = Истина; + Результат.СозданноеПисьмо = Письмо.Ссылка; + + Возврат Результат; КонецФункции @@ -2606,8 +2616,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с вложения электронных писем. +#КонецОбласти + +#Область РаботаСВложенияЭлектронныхПисем Функция ИнтернетПочтовоеСообщениеИзДвоичныхДанных(ДвоичныеДанные) @@ -3010,8 +3021,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Уведомления о прочтении +#КонецОбласти + +#Область УведомленияОПрочтении // Возвращаемое значение: // СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись для отправки по умолчанию. @@ -3071,8 +3083,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее Функция ПолучитьВажностьЭлектронногоПисьма(Важность) @@ -3453,3 +3466,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl index d60464cff..97cf44554 100644 --- a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументов/Module.bsl @@ -21,7 +21,7 @@ Процедура ПриСозданииНаСервере_ФормаДокумента(Форма, Расположение = Неопределено) Экспорт Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") = Ложь - Или Не ПравоДоступа("Чтение",Метаданные.РегистрыСведений.СостоянияОригиналовПервичныхДокументов) Тогда + Или Не ПравоДоступа("Чтение", Метаданные.РегистрыСведений.СостоянияОригиналовПервичныхДокументов) Тогда ОтключаемаяДекорация = Форма.Элементы.Найти("ДекорацияСостояниеОригинала"); Если Не ОтключаемаяДекорация = Неопределено Тогда ОтключаемаяДекорация.Видимость = Ложь; @@ -29,44 +29,17 @@ Возврат; КонецЕсли; - Реквизиты = Новый Массив; - Реквизиты.Добавить(Новый РеквизитФормы("СписокВыбораСостоянийОригинала", Новый ОписаниеТипов("СписокЗначений"))); + Настройки = НастройкиПодсистемы(); - Форма.ИзменитьРеквизиты(Реквизиты); - - СостоянияОригиналов = ИспользуемыеСостояния(); - - ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); - - Если Расположение = Неопределено Тогда - Родитель = Форма; - Иначе - Родитель = Расположение; - КонецЕсли; - - ДекорацияСостояниеОригинала = Форма.Элементы.Добавить("ДекорацияСостояниеОригинала", Тип("ДекорацияФормы"), Родитель); - ДекорацияСостояниеОригинала.Вид = ВидДекорацииФормы.Надпись; - ДекорацияСостояниеОригинала.Гиперссылка = Истина; - Если Расположение = Неопределено Тогда - ДекорацияСостояниеОригинала.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Право; - КонецЕсли; - ДекорацияСостояниеОригинала.УстановитьДействие("Нажатие", "Подключаемый_ДекорацияСостояниеОригиналаНажатие"); - - Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда - ТекущиеСостояниеОригинала = СведенияОСостоянииОригиналаПоСсылке(Форма.Объект.Ссылка); - Если ТекущиеСостояниеОригинала.Количество() = 0 Тогда - ТекущиеСостояниеОригинала=НСтр("ru='<Состояние оригинала неизвестно>'"); - ДекорацияСостояниеОригинала.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; - Иначе - ТекущиеСостояниеОригинала = ТекущиеСостояниеОригинала.СостояниеОригиналаПервичногоДокумента; + Если Настройки.ВыводитьКнопкиНаФормеДокумента Тогда + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда + ВывестиНаФормуКомандыСостоянияОригинала(Форма, Неопределено, ИспользуемыеСостояния()); КонецЕсли; + НастроитьКнопкиНаФормеДокумента(Форма); Иначе - ТекущиеСостояниеОригинала=НСтр("ru='<Состояние оригинала неизвестно>'"); - ДекорацияСостояниеОригинала.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + НастроитьГиперссылкуНаФормеДокумента(Форма, Расположение); КонецЕсли; - ДекорацияСостояниеОригинала.Заголовок = ТекущиеСостояниеОригинала; - КонецПроцедуры // Обработчик события "ПриСозданииНаСервере" формы списка. @@ -79,7 +52,7 @@ // Процедура ПриСозданииНаСервере_ФормаСписка(Форма, Список, Расположение = Неопределено) Экспорт - Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") = Ложь + Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") = Ложь Или Не ПравоДоступа("Чтение",Метаданные.РегистрыСведений.СостоянияОригиналовПервичныхДокументов) Тогда ОтключаемаяКолонка = Форма.Элементы.Найти("СостояниеОригиналПолучен"); Если Не ОтключаемаяКолонка = Неопределено Тогда @@ -99,7 +72,7 @@ РеквизитСписокСостояние = Форма.Элементы.Вставить("СостояниеОригиналаПервичногоДокумента",Тип("ПолеФормы"),Список,Расположение); РеквизитСписокСостояние.Вид = ВидПоляФормы.ПолеНадписи; - РеквизитСписокСостояние.ГиперссылкаЯчейки = Истина; + РеквизитСписокСостояние.ГиперссылкаЯчейки = Истина; РеквизитСписокСостояние.Заголовок = НСтр("ru='Состояние оригинала'"); РеквизитСписокСостояние.ПутьКДанным = Список.Имя + ".СостояниеОригиналаПервичногоДокумента"; @@ -111,7 +84,7 @@ // Создание списка Реквизиты = Новый Массив; - Реквизиты.Добавить(Новый РеквизитФормы("СписокВыбораСостоянийОригинала", Новый ОписаниеТипов("СписокЗначений"))); + Реквизиты.Добавить(Новый РеквизитФормы("СписокВыбораСостоянийОригинала", Новый ОписаниеТипов("СписокЗначений"))); Форма.ИзменитьРеквизиты(Реквизиты); СостоянияОригиналов = ИспользуемыеСостояния(); @@ -200,31 +173,140 @@ #КонецОбласти -// Обновляет команды установки состояния оригинала на форме списка. +// Вызывается для записи новых или изменении текущих состояний оригиналов первичных документов. +// +// Параметры: +// ОбъектыЗаписи - Массив из Структура - массив данных об изменяемом состоянии оригинала, в случае множественного +// изменения состояний документов: +// * ОбщееСостояние - Булево - Истина, если текущее состояние является общим. +// * Ссылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - документ, +// для которого необходимо изменить состояние оригинала. +// * СостояниеОригиналаПервичногоДокумента - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - +// текущие состояние оригинала первичного документа. +// * ПервичныйДокумент - Строка - идентификатор первичного документа. +// Задается, если данное состояние не является общим. +// * Извне - Булево - Истина, если первичный документ был добавлен пользователем вручную. +// Задается, если данное состояние не является общим. +// - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, для которого +// необходимо изменить состояние оригинала, в случае единичного изменения. +// СостояниеОригинала - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на устанавливаемое состояние. +// +// Возвращаемое значение: +// Строка - "Изменено", если состояние оригинала документа не повторяется и было записано; +// "НеИзменено"; +// "НеПроведено". +// +Функция УстановитьНовоеСостояниеОригинала(Знач ОбъектыЗаписи, Знач СостояниеОригинала) Экспорт + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") Тогда + Возврат "НеИзменено"; + КонецЕсли; + + ВыполнитьПроверкуПравДоступа("Редактирование", Метаданные.РегистрыСведений.СостоянияОригиналовПервичныхДокументов); + + МассивЗаписи = Новый Массив; + МассивСсылок = Новый Массив; + Если ТипЗнч(ОбъектыЗаписи) = Тип("Массив") Тогда + Для Каждого Объект Из ОбъектыЗаписи Цикл + Ссылка = Объект.Ссылка; + Если ЭтоОбъектУчета(Ссылка) Тогда + МассивСсылок.Добавить(Ссылка); + МассивЗаписи.Добавить(Объект); + КонецЕсли; + КонецЦикла; + Иначе + МассивСсылок.Добавить(ОбъектыЗаписи); + МассивЗаписи = ОбъектыЗаписи; + КонецЕсли; + + НепроведенныеДокументы = ОбщегоНазначения.ПроверитьПроведенностьДокументов(МассивСсылок); + Если НепроведенныеДокументы.Количество() > 0 Тогда + Возврат "НеПроведено"; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Если ТипЗнч(ОбъектыЗаписи) = Тип("Массив") Тогда + Результат = УстановитьНовоеСостояниеОригиналаМассив(МассивЗаписи, СостояниеОригинала); + Иначе + Результат = УстановитьНовоеСостояниеОригиналаДокумента(МассивЗаписи, СостояниеОригинала); + КонецЕсли; + Возврат ?(Результат, "Изменено", "НеИзменено"); + +КонецФункции + +// Возвращает данные о текущем общем состоянии оригинала документа по ссылке. +// +// Параметры: +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, для которого необходимо +// получить сведения об общем состоянии. +// +// Возвращаемое значение: +// Структура: +// * Ссылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ. +// * СостояниеОригиналаПервичногоДокумента - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - текущее общее +// состояние оригинала документа. +// +Функция СведенияОСостоянииОригиналаПоСсылке(Документ) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | СостоянияОригиналовПервичныхДокументов.Состояние КАК Состояние + |ИЗ + | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов + |ГДЕ + | СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка + | И СостоянияОригиналовПервичныхДокументов.ОбщееСостояние = ИСТИНА"; + + Запрос.УстановитьПараметр("Ссылка", Документ); + + СведенияОСостоянии = Новый Структура; + + Если Не Запрос.Выполнить().Пустой() Тогда + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + СведенияОСостоянии.Вставить("Ссылка", Документ); + СведенияОСостоянии.Вставить("СостояниеОригиналаПервичногоДокумента", Выборка.Состояние); + КонецЕсли; + + Возврат СведенияОСостоянии; + +КонецФункции + +// Вызывается для записи состояний оригиналов печатных форм в регистр, после печати формы. +// +// Параметры: +// ОбъектыПечати - СписокЗначений - список ссылок на объекты печати. +// СписокПечати - СписокЗначений - список с именами макетов и представлениями печатных форм. +// Записано - Булево - признак того, что состояние документа записано в регистр. +// +Процедура ЗаписатьСостоянияОригиналовПослеПечати(ОбъектыПечати, СписокПечати, Записано = Ложь) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") И Не Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + ПриОпределенииСпискаПечатныхФорм(ОбъектыПечати, СписокПечати); + Если СписокПечати.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, СписокПечати, Записано); + КонецЕсли; + +КонецПроцедуры + +// Обновляет команды установки состояния оригинала на форме. // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма списка документа. -// Список - ТаблицаФормы - основной список формы. +// Список - ТаблицаФормы - основной список формы. Если процедура вызывается для формы документа, то Неопределено. // -Процедура ОбновитьКомандыСостоянияОригинала(Форма, Список) Экспорт +Процедура ОбновитьКомандыСостоянияОригинала(Форма, Список = Неопределено) Экспорт СостоянияОригиналов = ИспользуемыеСостояния(); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда - ПодменюУстановитьНастроитьСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригиналаОбычное"); - Если Не ПодменюУстановитьНастроитьСостояниеОригинала = Неопределено Тогда - Форма.Элементы.Удалить(ПодменюУстановитьНастроитьСостояниеОригинала); - КонецЕсли; - - ПодменюУстановитьНастроитьСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригиналаСмТакже"); - Если Не ПодменюУстановитьНастроитьСостояниеОригинала = Неопределено Тогда - Форма.Элементы.Удалить(ПодменюУстановитьНастроитьСостояниеОригинала); - КонецЕсли; - КонецЕсли; ВывестиНаФормуКомандыСостоянияОригинала(Форма, Список, СостоянияОригиналов); - - ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); + + Если Не Список = Неопределено Тогда + ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); + КонецЕсли; КонецПроцедуры @@ -239,7 +321,7 @@ ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить(); ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Список.Имя+".СостояниеОригиналаПервичногоДокумента"); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Список.Имя+".СостояниеОригиналаПервичногоДокумента"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; ЭлементОтбора.Использование = Истина; @@ -254,7 +336,7 @@ ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить(); ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Список.Имя+".СостояниеОригиналаПервичногоДокумента"); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Список.Имя+".СостояниеОригиналаПервичногоДокумента"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; ЭлементОтбора.Использование = Истина; @@ -282,7 +364,7 @@ // // Параметры: // ОписаниеПрофиля - см. УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа. -// +// Процедура ДополнитьПрофильРольюДляНастройкиСостоянийОригиналовДокументов(ОписаниеПрофиля) Экспорт ОписаниеПрофиля.Роли.Добавить("ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов"); @@ -329,25 +411,27 @@ // // Параметры: // Форма - ФормаКлиентскогоПриложения - форма списка документа. -// Список - ТаблицаФормы - основной список формы. +// Список - ТаблицаФормы - основной список формы. Если процедура вызывается для формы документа, то Неопределено. // СостоянияОригиналов - ТаблицаЗначений - состояния оригинала, разрешенные пользователям, и используемые при смене // состояния оригинала: -// * Наименование - Строка - наименование состояния оригинала. -// * Ссылка - СправочникСсылка.СостоянияОригиналовПервичныхДокументов +// * Наименование - Строка - наименование состояния оригинала; +// * Ссылка - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на элемент справочника СостоянияОригиналовПервичныхДокументов. // Процедура ВывестиНаФормуКомандыСостоянияОригинала(Форма, Список, СостоянияОригиналов) Экспорт - + // Проверка и создание подменю и групп кнопок на командной панели списка Элементы = Форма.Элементы; + Родитель = ?(ТипЗнч(Список) = Тип("ТаблицаФормы"), Список.КоманднаяПанель, Форма.КоманднаяПанель); + Картинка = ?(ТипЗнч(Список) = Тип("ТаблицаФормы"), БиблиотекаКартинок.УстановитьСостояниеОригиналаПервичногоДокумента, + БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен); Если Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала") = Неопределено Тогда - ПодменюУстановитьНастроитьСостояниеОригинала = Элементы.Добавить("ПодменюУстановитьНастроитьСостояниеОригинала", - Тип("ГруппаФормы"), Список.КоманднаяПанель); + ПодменюУстановитьНастроитьСостояниеОригинала = Элементы.Добавить("ПодменюУстановитьНастроитьСостояниеОригинала", Тип("ГруппаФормы"), Родитель); ПодменюУстановитьНастроитьСостояниеОригинала.Вид = ВидГруппыФормы.Подменю; ПодменюУстановитьНастроитьСостояниеОригинала.Отображение = ОтображениеКнопки.Картинка; - ПодменюУстановитьНастроитьСостояниеОригинала.Картинка = БиблиотекаКартинок.УстановитьСостояниеОригиналаПервичногоДокумента; - ПодменюУстановитьНастроитьСостояниеОригинала.Заголовок = НСтр("ru='Установить состояние оригинала'"); - ПодменюУстановитьНастроитьСостояниеОригинала.Подсказка = НСтр("ru='Подменю команд для установки и изменения состояния оригиналов первичных документов.'"); + ПодменюУстановитьНастроитьСостояниеОригинала.Картинка = Картинка; + ПодменюУстановитьНастроитьСостояниеОригинала.Заголовок = НСтр("ru = 'Установить состояние оригинала'"); + ПодменюУстановитьНастроитьСостояниеОригинала.Подсказка = НСтр("ru = 'Подменю команд для установки и изменения состояния оригиналов первичных документов.'"); КонецЕсли; ПодменюУстановитьНастроитьСостояниеОригинала = Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала"); @@ -363,38 +447,31 @@ ПодменюУстановитьНастроитьСостояниеОригинала); ГруппаНастроитьСостоянияОригинала.Вид = ВидГруппыФормы.ГруппаКнопок; КонецЕсли; - ГруппаНастроитьСостоянияОригинала = Элементы.Найти("ГруппаНастроитьСостоянияОригинала"); - - Если Элементы.Найти("ГруппаУстановитьОригиналПолучен") = Неопределено Тогда + ГруппаНастроитьСостоянияОригинала = Элементы.Найти("ГруппаНастроитьСостоянияОригинала"); + + Если Элементы.Найти("ГруппаУстановитьОригиналПолучен") = Неопределено И Не ТипЗнч(Список) = Тип("Булево") Тогда ГруппаУстановитьОригиналПолучен = Элементы.Добавить("ГруппаУстановитьОригиналПолучен", Тип("ГруппаФормы"), Список.КоманднаяПанель); ГруппаУстановитьОригиналПолучен.Вид = ВидГруппыФормы.ГруппаКнопок; - ГруппаУстановитьОригиналПолучен.Подсказка = НСтр("ru='Установить конечное состояние оригинала первичного документа ""Оригинал получен"".'"); + ГруппаУстановитьОригиналПолучен.Подсказка = НСтр("ru = 'Установить конечное состояние оригинала первичного документа ""Оригинал получен"".'"); КонецЕсли; ГруппаУстановитьОригиналПолучен = Элементы.Найти("ГруппаУстановитьОригиналПолучен"); - Для Каждого Состояние Из ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы Цикл - НайденнаяКоманда = Форма.Команды.Найти(Состояние.ИмяКоманды); - НайденнаяКнопка = Форма.Элементы.Найти(Состояние.ИмяКоманды); + МассивИменКоманд = Новый Массив; + Для Каждого Команда Из ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы Цикл + МассивИменКоманд.Добавить(Команда.ИмяКоманды); + КонецЦикла; + + Для Каждого Команда Из МассивИменКоманд Цикл + НайденнаяКоманда = Форма.Команды.Найти(Команда); + НайденнаяКнопка = Форма.Элементы.Найти(Команда); Если Не НайденнаяКоманда = Неопределено Тогда Форма.Команды.Удалить(НайденнаяКоманда); Форма.Элементы.Удалить(НайденнаяКнопка); - КонецЕсли; + КонецЕсли; КонецЦикла; - // Удаляем последнюю кнопку - Если ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы.Количество() > 0 Тогда - Состояние = ГруппаУстановитьСостояниеОригинала.ПодчиненныеЭлементы[0]; - НайденнаяКоманда = Форма.Команды.Найти(Состояние.ИмяКоманды); - НайденнаяКнопка = Форма.Элементы.Найти(Состояние.ИмяКоманды); - КонецЕсли; - - Если Не НайденнаяКоманда = Неопределено Тогда - Форма.Команды.Удалить(НайденнаяКоманда); - Форма.Элементы.Удалить(НайденнаяКнопка); - КонецЕсли; - Для Каждого Состояние Из СостоянияОригиналов Цикл ИмяКоманды = "Команда" + СтрЗаменить(Состояние.Ссылка.УникальныйИдентификатор(),"-","_"); ИмяКнопки = Состояние.Наименование; @@ -416,14 +493,30 @@ КонецЕсли; КонецЕсли; - КонецЦикла; + + // Добавляет кнопку для уточнения состояния оригинала по печатным формам. + Если ТипЗнч(Список) = Тип("Булево") Тогда + ИмяКоманды = "УточнитьПоПечатнымФормам"; + ИмяКнопки = НСтр("ru = 'Уточнить по печатным формам...'"); + Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда + КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); + КомандаФормы.Действие = "Подключаемый_УстановитьСостояниеОригинала"; + КомандаФормы.Заголовок = ИмяКнопки; + + КнопкаНастроитьСостояния = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"),ГруппаУстановитьСостояниеОригинала); + КнопкаНастроитьСостояния.Заголовок = ИмяКнопки; + КнопкаНастроитьСостояния.ИмяКоманды = ИмяКоманды; + КнопкаНастроитьСостояния.Картинка = БиблиотекаКартинок.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам; + КонецЕсли; + + КонецЕсли; + // Добавляет кнопку для перехода к настройкам состояний в подменю командой панели списка "Установить состояние". - Если ПравоДоступа("Добавление",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) - И ПравоДоступа("Изменение",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) Тогда + Если ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) Тогда ИмяКоманды = "НастройкаСостояний"; - ИмяКнопки = НСтр("ru='Настроить...'"); + ИмяКнопки = НСтр("ru = 'Настроить...'"); Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); @@ -439,8 +532,8 @@ КонецЕсли; // Добавляет кнопку "Установить оригинал получен" на командой панели списка - ИмяКоманды = "УстановитьОригиналПолучен"; - Если Форма.Команды.Найти(ИмяКоманды) = Неопределено Тогда + ИмяКоманды = "УстановкаСостоянияОригиналПолучен"; + Если Форма.Команды.Найти(ИмяКоманды) = Неопределено И Не ТипЗнч(Список) = Тип("Булево") Тогда КомандаФормы = Форма.Команды.Добавить(ИмяКоманды); КомандаФормы.Действие = "Подключаемый_УстановитьСостояниеОригинала"; КомандаФормы.Заголовок = НСтр("ru='Установить ""Оригинал получен""'"); @@ -453,6 +546,194 @@ КонецПроцедуры +// Возвращает представление гиперссылки состояния оригинала документа по ссылке. +// +// Параметры: +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, для которого необходимо +// получить представление гиперссылки состояния. +// Возвращаемое значение: +// Строка - представление гиперссылки состояния оригинала документа. +// +Функция ПредставлениеГиперссылкиСостояния(Документ) Экспорт + + МассивСсылок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Документ); + НепроведенныеДокументы = ОбщегоНазначения.ПроверитьПроведенностьДокументов(МассивСсылок); + Если НепроведенныеДокументы.Количество() > 0 Тогда + ТекущиеСостояниеОригинала = НСтр("ru = '<Состояние оригинала неизвестно>'"); + Возврат ТекущиеСостояниеОригинала; + КонецЕсли; + + ТекущиеСостояниеОригинала = СведенияОСостоянииОригиналаПоСсылке(Документ); + Если ТекущиеСостояниеОригинала.Количество() = 0 Тогда + ТекущиеСостояниеОригинала=НСтр("ru = '<Состояние оригинала неизвестно>'"); + Иначе + ТекущиеСостояниеОригинала = ТекущиеСостояниеОригинала.СостояниеОригиналаПервичногоДокумента; + КонецЕсли; + + Возврат ТекущиеСостояниеОригинала; + +КонецФункции + +// Устанавливает состояния оригиналов печатных форм. Вызывается после печати формы. +// +// Параметры: +// ОбъектыПечати - СписокЗначений - список документов. +// ПечатныеФормы - СписокЗначений - наименование макетов и представление печатных форм. +// Записано - Булево - выходной параметр. Признак того, что состояние документа записано. +// +Процедура ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, ПечатныеФормы, Записано = Ложь) Экспорт + + ИнтеграцияПодсистемБСП.ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, ПечатныеФормы); + УчетОригиналовПервичныхДокументовПереопределяемый.ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, ПечатныеФормы); + + Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана"); + Если Не ЗначениеЗаполнено(ОбъектыПечати) Тогда + Возврат; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных(); + + НачатьТранзакцию(); + Попытка + + Для Каждого Документ Из ОбъектыПечати Цикл + Если ЭтоОбъектУчета(Документ.Значение) Тогда + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияОригиналовПервичныхДокументов"); + ЭлементБлокировки.УстановитьЗначение("Владелец", Документ.Значение); + КонецЕсли; + КонецЦикла; + Блокировка.Заблокировать(); + + Для Каждого Документ Из ОбъектыПечати Цикл + Если ЭтоОбъектУчета(Документ.Значение) Тогда + ТЧ = ТабличнаяЧастьССотрудниками(Документ.Значение); + Если ТЧ <> "" Тогда + Для Каждого Сотрудник Из Документ.Значение[ТЧ] Цикл + Для Каждого Форма Из ПечатныеФормы Цикл + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, + Форма.Значение, Форма.Представление, Состояние, Ложь, Сотрудник.Сотрудник); + КонецЦикла; + КонецЦикла; + Иначе + Для Каждого Форма Из ПечатныеФормы Цикл + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, Форма.Значение, + Форма.Представление, Состояние, Ложь); + КонецЦикла; + КонецЕсли; + ЗаписатьОбщееСостояниеОригиналаДокумента(Документ.Значение, Состояние); + Записано = Истина; + КонецЕсли; + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Устанавливает состояние оригинала печатной формы. Вызывается после печати формы. +// +// Параметры: +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - документ. +// ПечатнаяФорма - Строка - имя макета печатной формы. +// Представление - Строка - наименование печатной формы. +// Состояние - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - состояние оригинала печатной формы. +// Извне - Булево - признак, показывающий принадлежит ли форма системе 1С. +// Сотрудник - СправочникСсылка - сотрудник, если в оригинале документа есть сведения о сотрудниках. +// +Процедура ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, ПечатнаяФорма, Представление, Состояние, + Извне, Сотрудник = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи(); + ЗаписьСостоянияОригинала.Владелец = Документ; + ЗаписьСостоянияОригинала.ПервичныйДокумент = ПечатнаяФорма; + Если ЗначениеЗаполнено(Сотрудник) Тогда + ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(Сотрудник.Наименование); + ПредставлениеСотрудник = СтрНайти(Представление, ФИО); + Если ПредставлениеСотрудник = 0 Тогда + ЗаписьСостоянияОригинала.ПервичныйДокументПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2'"), Представление, ФИО); + Иначе + ЗаписьСостоянияОригинала.ПервичныйДокументПредставление = Представление; + КонецЕсли; + Иначе + ЗаписьСостоянияОригинала.ПервичныйДокументПредставление = Представление; + КонецЕсли; + Если ТипЗнч(Состояние) = Тип("Строка") Тогда + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + Иначе + ЗаписьСостоянияОригинала.Состояние = Состояние; + КонецЕсли; + ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); + ЗаписьСостоянияОригинала.ОбщееСостояние = Ложь; + ЗаписьСостоянияОригинала.ФормаИзвне = Извне; + ЗаписьСостоянияОригинала.ДатаПоследнегоИзменения = ТекущаяДатаСеанса(); + ЗаписьСостоянияОригинала.Сотрудник = Сотрудник; + ЗаписьСостоянияОригинала.Записать(); + +КонецПроцедуры + +// Записывает общее состояния оригинала документа. +// +// Параметры: +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - документ. +// Состояние - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - состояние оригинала. +// +Процедура ЗаписатьОбщееСостояниеОригиналаДокумента(Документ, Состояние) Экспорт + + Если ТипЗнч(Состояние) = Тип("Строка") Тогда + СостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + Иначе + СостояниеОригинала = Состояние; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьМенеджерЗаписи(); + ЗаписьСостоянияОригинала.Владелец = Документ; + ЗаписьСостоянияОригинала.ПервичныйДокумент = ""; + + ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); + ПроверкаЗаписьСостоянияОригинала.Отбор.Владелец.Установить(Документ); + ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Ложь); + ПроверкаЗаписьСостоянияОригинала.Прочитать(); + Если ПроверкаЗаписьСостоянияОригинала.Количество() Тогда + СостояниеФормОдинаково = Истина; + Для Каждого Запись Из ПроверкаЗаписьСостоянияОригинала Цикл + Если Запись.АвторИзменения <> Пользователи.ТекущийПользователь() Тогда + ЗаписьСостоянияОригинала.АвторИзменения = Неопределено; + Иначе + ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); + КонецЕсли; + Если Запись.Состояние = СостояниеОригинала Тогда + Продолжить; + КонецЕсли; + СостояниеФормОдинаково = Ложь; + КонецЦикла; + Если СостояниеФормОдинаково Тогда + ЗаписьСостоянияОригинала.Состояние = СостояниеОригинала; + Иначе + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе; + КонецЕсли; + Иначе + ЗаписьСостоянияОригинала.Состояние = СостояниеОригинала; + КонецЕсли; + + ЗаписьСостоянияОригинала.ОбщееСостояние = Истина; + ЗаписьСостоянияОригинала.ДатаПоследнегоИзменения = ТекущаяДатаСеанса(); + ЗаписьСостоянияОригинала.Записать(); + + ИнтеграцияПодсистемБСП.ПриИзмененииОбщегоСостоянияОригинала(Документ, СостояниеОригинала); + УчетОригиналовПервичныхДокументовПереопределяемый.ПриИзмененииОбщегоСостоянияОригинала(Документ, СостояниеОригинала); + +КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -541,16 +822,22 @@ КонецЕсли; ОбъектыСУчетомОригиналовПервичныхДокументов = Новый Массив; + + Настройки = НастройкиПодсистемы(); + + ИнтеграцияПодсистемБСП.ПриОпределенииОбъектовСКомандамиУчетаОригиналов(ОбъектыСУчетомОригиналовПервичныхДокументов); УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииОбъектовСКомандамиУчетаОригиналов(ОбъектыСУчетомОригиналовПервичныхДокументов); + ВыводитьКоманды = Ложь; - Для Каждого Объект Из ОбъектыСУчетомОригиналовПервичныхДокументов Цикл + Для Каждого Объект Из ОбъектыСУчетомОригиналовПервичныхДокументов Цикл Если СтрНайти(НастройкиФормы.ИмяФормы, Объект) Тогда ВыводитьКоманды = Истина; Прервать; КонецЕсли; КонецЦикла; - Если Не ВыводитьКоманды Тогда + + Если Не ВыводитьКоманды И Не (НастройкиФормы.ЭтоФормаОбъекта И Настройки.ВыводитьКнопкиНаФормеДокумента) Тогда Возврат; КонецЕсли; @@ -579,7 +866,7 @@ Порядок = 0; // Команды по состояниям оригинала - Для Каждого Состояние Из СостоянияОригиналов Цикл + Для Каждого Состояние Из СостоянияОригиналов Цикл Команда = Команды.Добавить(); Команда.Вид = "УстановкаСостоянияОригинала"; Команда.Представление = Состояние.Наименование; @@ -591,18 +878,30 @@ Команда.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен; КонецЕсли; Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; - Команда.Назначение = "ДляСписка"; Команда.РежимЗаписи = "Проводить"; Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; + Команда.ДополнительныеПараметры.Вставить("СсылкаНаСостояние", Состояние.Ссылка); Порядок = Порядок + 1; КонецЦикла; + // Команда для уточнения состояния оригинала по печатным формам + Команда = Команды.Добавить(); + Команда.Вид = "УстановкаСостоянияОригинала"; + Команда.Порядок = Порядок; + Команда.Идентификатор = "УточнитьПоПечатнымФормам"; + Команда.Представление = НСтр("ru = 'Уточнить по печатным формам...'"); + Команда.Картинка = БиблиотекаКартинок.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам; + Команда.Назначение = "ДляОбъекта"; + Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; + Команда.РежимЗаписи = "Проводить"; + Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; + Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; + // Команда для перехода к настройкам состояний в подменю командой панели списка "Установить состояние", если у польз. // есть соответствующая роль - Если ПравоДоступа("Добавление",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) - И ПравоДоступа("Изменение",Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) Тогда + Если ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Справочники.СостоянияОригиналовПервичныхДокументов) Тогда Команда = Команды.Добавить(); Команда.Вид = "УстановкаСостоянияОригинала"; Команда.Идентификатор = "НастройкаСостояний"; @@ -610,7 +909,6 @@ Команда.Важность = "СмТакже"; Команда.Картинка = БиблиотекаКартинок.НастроитьСостоянияОригиналаПервичногоДокумента; Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; - Команда.Назначение = "ДляСписка"; Команда.РежимЗаписи = "НеЗаписывать"; Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; @@ -621,9 +919,9 @@ // Команда "Установить оригинал получен" на командой панели списка Команда = Команды.Добавить(); Команда.Вид = "УстановкаСостоянияОригиналПолучен"; - Команда.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку( - НСтр("ru='Установить состояние ""[Наименование]""'"), - Новый Структура("Наименование", Наименование)); + Команда.Идентификатор = "УстановкаСостоянияОригиналПолучен"; + Команда.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru = 'Установить состояние ""[Наименование]""'"), + Новый Структура("Наименование",Наименование)); Команда.ОтображениеКнопки = ОтображениеКнопки.Картинка; Команда.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен; Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ОбъектСУчетомОригиналовПервичныхДокументов.Тип; @@ -631,9 +929,25 @@ Команда.РежимЗаписи = "Проводить"; Команда.ФункциональныеОпции = "ИспользоватьУчетОригиналовПервичныхДокументов"; Команда.Обработчик = "УчетОригиналовПервичныхДокументовКлиент.Подключаемый_УстановитьСостояниеОригинала"; + Команда.ДополнительныеПараметры.Вставить("СсылкаНаСостояние", Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен); КонецПроцедуры +// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента. +Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт + + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") + Или Не ПравоДоступа("Чтение", Метаданные.РегистрыСведений.СостоянияОригиналовПервичныхДокументов) Тогда + Возврат; + КонецЕсли; + + НастройкиПодсистемы = НастройкиПодсистемы(); + + Параметры.Вставить("УчетОригиналовПервичныхДокументов", Новый ФиксированнаяСтруктура( + НастройкиПодсистемы)); + +КонецПроцедуры + Процедура ПередПеремещениемЭлемента(ПеремещаемыйЭлемент, СоседнийЭлемент, Направление, ТекстОшибки, СтандартнаяОбработка) Экспорт @@ -665,6 +979,20 @@ КонецПроцедуры +Функция НастройкиПодсистемы() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("ВыводитьКнопкиНаФормеДокумента", Ложь); + Настройки.Вставить("ОтображатьПодсказкуВФормеИзмененияСостояний", Истина); + Настройки.Вставить("ОткрыватьВыпадающиеМенюПоГиперссылке", Истина); + + ИнтеграцияПодсистемБСП.ПриОпределенииНастроекУчетаОригиналов(Настройки); + УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииНастроек(Настройки); + + Возврат Настройки; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -675,70 +1003,90 @@ КонецФункции -// Параметры: -// ДанныеЗаписи - Массив из см. УстановитьНовоеСостояниеОригиналаМассив.ДанныеЗаписи -// - ДокументСсылка - документ, для которого необходимо изменить состояние оригинала. -// ИмяСостояния - Строка - устанавливаемое состояние. -// -// Возвращаемое значение: -// Строка - "Изменено", если состояние оригинала документа не повторяется и было записано; -// "НеИзменено" -// "НеПроведено" -// -Функция УстановитьНовоеСостояниеОригинала(Знач ДанныеЗаписи, Знач ИмяСостояния) Экспорт - - Если Не ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") Тогда - Возврат "НеИзменено"; - КонецЕсли; +Процедура НастроитьГиперссылкуНаФормеДокумента(Форма, Расположение) - ВыполнитьПроверкуПравДоступа("Редактирование", Метаданные.РегистрыСведений.СостоянияОригиналовПервичныхДокументов); + Реквизиты = Новый Массив; + Реквизиты.Добавить(Новый РеквизитФормы("СписокВыбораСостоянийОригинала", Новый ОписаниеТипов("СписокЗначений"))); + + Форма.ИзменитьРеквизиты(Реквизиты); - ОбъектыЗаписи = Новый Массив; - ДокументыДляПроверки = Новый Массив; - Если ТипЗнч(ДанныеЗаписи) = Тип("Массив") Тогда - Для Каждого СтрокаСписка Из ДанныеЗаписи Цикл - Ссылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаСписка, "Ссылка"); - Если ЭтоОбъектУчета(Ссылка) Тогда - ДокументыДляПроверки.Добавить(Ссылка); - ОбъектыЗаписи.Добавить(СтрокаСписка); - КонецЕсли; - КонецЦикла; + СостоянияОригиналов = ИспользуемыеСостояния(); + + ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов); + + Если Расположение = Неопределено Тогда + Родитель = Форма; Иначе - ДокументыДляПроверки.Добавить(ДанныеЗаписи); - ОбъектыЗаписи.Добавить(ДанныеЗаписи); - КонецЕсли; - - НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(ДокументыДляПроверки); - Если НепроведенныеДокументы.Количество() > 0 Тогда - Возврат "НеПроведено"; + Родитель = Расположение; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - Если ТипЗнч(ДанныеЗаписи) = Тип("Массив") Тогда - Результат = УстановитьНовоеСостояниеОригиналаМассив(ДанныеЗаписи, ИмяСостояния); - Иначе - Результат = УстановитьНовоеСостояниеОригиналаДокумента(ДанныеЗаписи, ИмяСостояния); + ДекорацияСостояниеОригинала = Форма.Элементы.Добавить("ДекорацияСостояниеОригинала", Тип("ДекорацияФормы"), Родитель); + ДекорацияСостояниеОригинала.Вид = ВидДекорацииФормы.Надпись; + ДекорацияСостояниеОригинала.Гиперссылка = Истина; + Если Расположение = Неопределено Тогда + ДекорацияСостояниеОригинала.ГоризонтальноеПоложениеВГруппе = ГоризонтальноеПоложениеЭлемента.Право; КонецЕсли; - Возврат ?(Результат, "Изменено", "НеИзменено"); + ДекорацияСостояниеОригинала.УстановитьДействие("Нажатие", "Подключаемый_ДекорацияСостояниеОригиналаНажатие"); + + Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда + ТекущиеСостояниеОригинала = СведенияОСостоянииОригиналаПоСсылке(Форма.Объект.Ссылка); + Если ТекущиеСостояниеОригинала.Количество() = 0 Тогда + ТекущиеСостояниеОригинала=НСтр("ru = '<Состояние оригинала неизвестно>'"); + ДекорацияСостояниеОригинала.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + Иначе + ТекущиеСостояниеОригинала = ТекущиеСостояниеОригинала.СостояниеОригиналаПервичногоДокумента; + КонецЕсли; + Иначе + ТекущиеСостояниеОригинала=НСтр("ru = '<Состояние оригинала неизвестно>'"); + ДекорацияСостояниеОригинала.ЦветТекста = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + КонецЕсли; + + ДекорацияСостояниеОригинала.Заголовок = ТекущиеСостояниеОригинала; + +КонецПроцедуры + +Процедура НастроитьКнопкиНаФормеДокумента(Форма) -КонецФункции + ПодменюСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала"); + Если ПодменюСостояниеОригинала = Неопределено Тогда + Возврат; + КонецЕсли; + + ПодменюСостояниеОригинала.Отображение = ОтображениеКнопки.Картинка; + ПодменюСостояниеОригинала.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен; + + Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда + Сведения = СведенияОСостоянииОригиналаПоСсылке(Форма.Объект.Ссылка); + Если Не Сведения.Количество() = 0 Тогда + ТекущиеСостояниеОригинала = Сведения.СостояниеОригиналаПервичногоДокумента; + Картинка = ?(ТекущиеСостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен, + БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен, + БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен); + ПодменюСостояниеОригинала.Отображение = ОтображениеКнопки.КартинкаИТекст; + ПодменюСостояниеОригинала.Заголовок = ТекущиеСостояниеОригинала; + ПодменюСостояниеОригинала.Картинка = Картинка; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры // Параметры: -// ДанныеЗаписи - Массив из Структура - данные об изменяемом состоянии оригинала: +// ОбъектыЗаписи - Массив из Структура - данные об изменяемом состоянии оригинала: // * ОбщееСостояние - Булево - Истина, если текущее состояние является общим. -// * Ссылка - ДокументСсылка - документ, для которого необходимо изменить состояние оригинала. +// * Ссылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - документ, для +// которого необходимо изменить состояние оригинала. // * СостояниеОригиналаПервичногоДокумента - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - // текущие состояние оригинала первичного документа. // * ПервичныйДокумент - Строка - идентификатор первичного документа. // Задается, если данное состояние не является общим. -// * Извне - Булево - Истина, если первичный документ был добавлен пользователем вручную. +// * Извне - Булево - Истина, если первичный документ был добавлен пользователем вручную. // Задается, если данное состояние не является общим. -// ИмяСостояния - Строка - устанавливаемое состояние. +// СостояниеОригинала - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на устанавливаемое состояние. // // Возвращаемое значение: // Булево - Истина, если состояние оригинала документа не повторяется и было записано. // -Функция УстановитьНовоеСостояниеОригиналаМассив(Знач ДанныеЗаписи, Знач ИмяСостояния) +Функция УстановитьНовоеСостояниеОригиналаМассив(Знач ОбъектыЗаписи, Знач СостояниеОригинала) Изменено = Ложь; @@ -747,15 +1095,15 @@ НачатьТранзакцию(); Попытка - Для Каждого Запись Из ДанныеЗаписи Цикл + Для Каждого Запись Из ОбъектыЗаписи Цикл ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияОригиналовПервичныхДокументов"); ЭлементБлокировки.УстановитьЗначение("Владелец", Запись.Ссылка); КонецЦикла; Блокировка.Заблокировать(); - Для Каждого Запись Из ДанныеЗаписи Цикл + Для Каждого Запись Из ОбъектыЗаписи Цикл - Если СокрЛП(Запись.СостояниеОригиналаПервичногоДокумента) = СокрЛП(ИмяСостояния) Тогда + Если Запись.СостояниеОригиналаПервичногоДокумента = СостояниеОригинала Тогда Продолжить; КонецЕсли; @@ -767,26 +1115,24 @@ Если НаборЗаписей.Количество() = 0 Тогда Изменено = Истина; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, - ИмяСостояния); + ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, СостояниеОригинала); Продолжить; КонецЕсли; Для Каждого ПрошлаяЗапись Из НаборЗаписей Цикл - Если СокрЛП(ПрошлаяЗапись.Состояние) = ИмяСостояния Тогда + Если ПрошлаяЗапись.Состояние = СостояниеОригинала Тогда Продолжить; КонецЕсли; Изменено = Истина; ТабличнаяЧасть = ТабличнаяЧастьССотрудниками(Запись.Ссылка); ПрошлаяЗаписьСотрудник = ?(ТабличнаяЧасть <> "", ПрошлаяЗапись.Сотрудник, Неопределено); - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Ссылка, - ПрошлаяЗапись.ПервичныйДокумент, ПрошлаяЗапись.ПервичныйДокументПредставление, ИмяСостояния, + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Ссылка, + ПрошлаяЗапись.ПервичныйДокумент, ПрошлаяЗапись.ПервичныйДокументПредставление, СостояниеОригинала, ПрошлаяЗапись.ФормаИзвне, ПрошлаяЗаписьСотрудник); КонецЦикла; Изменено = Истина; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, - ИмяСостояния); + ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, СостояниеОригинала); Продолжить; КонецЕсли; @@ -795,8 +1141,7 @@ НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда Изменено = Истина; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, - ИмяСостояния); + ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, СостояниеОригинала); Продолжить; КонецЕсли; @@ -804,16 +1149,15 @@ НаборЗаписей.Прочитать(); ТабличнаяЧасть = ТабличнаяЧастьССотрудниками(Запись.Ссылка); Если ТабличнаяЧасть <> "" Тогда - ИзмененыСостояния = ЗаписатьСостояниеОригиналаДокументаПоСотрудникам(НаборЗаписей, Запись.Ссылка, - ТабличнаяЧасть, ИмяСостояния); + ИзмененыСостояния = ЗаписатьСостояниеОригиналаПоСотрудникам(НаборЗаписей, Запись.Ссылка, + ТабличнаяЧасть, СостояниеОригинала); Иначе - ИзмененыСостояния = ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(НаборЗаписей, Запись.Ссылка, - ИмяСостояния); + ИзмененыСостояния = ЗаписатьСостояниеОригиналаПоПечатнымФормам(НаборЗаписей, Запись.Ссылка, + СостояниеОригинала); КонецЕсли; Изменено = Изменено Или ИзмененыСостояния; Если Изменено Тогда - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, - ИмяСостояния); + ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Ссылка, СостояниеОригинала); КонецЕсли; КонецЦикла; @@ -830,13 +1174,14 @@ КонецФункции // Параметры: -// Документ - ДокументСсылка - документ, для которого необходимо изменить состояние оригинала. -// ИмяСостояния - Строка - устанавливаемое состояние. +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - документ, для которого необходимо изменить +// состояние оригинала. +// СостояниеОригинала - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на устанавливаемое состояние. // // Возвращаемое значение: // Булево - Истина, если состояние оригинала документа не повторяется и было записано. // -Функция УстановитьНовоеСостояниеОригиналаДокумента(Знач Документ, Знач ИмяСостояния) +Функция УстановитьНовоеСостояниеОригиналаДокумента(Знач Документ, Знач СостояниеОригинала) Блокировка = Новый БлокировкаДанных(); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияОригиналовПервичныхДокументов"); @@ -844,14 +1189,14 @@ НачатьТранзакцию(); Попытка - + Блокировка.Заблокировать(); НаборЗаписей = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Владелец.Установить(Документ); НаборЗаписей.Отбор.ОбщееСостояние.Установить(Истина); НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() И СокрЛП(НаборЗаписей[0].Состояние) = ИмяСостояния Тогда + Если НаборЗаписей.Количество() И НаборЗаписей[0].Состояние = СостояниеОригинала Тогда ЗафиксироватьТранзакцию(); Возврат Ложь; КонецЕсли; @@ -860,21 +1205,21 @@ НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда - ТабличнаяЧасть = ТабличнаяЧастьССотрудниками(Документ); + ТабличнаяЧасть = ТабличнаяЧастьССотрудниками(Документ); Если ТабличнаяЧасть <> "" Тогда - ЗаписатьСостояниеОригиналаДокументаПоСотрудникам(НаборЗаписей, Документ, ТабличнаяЧасть, ИмяСостояния); + ЗаписатьСостояниеОригиналаПоСотрудникам(НаборЗаписей, Документ, ТабличнаяЧасть, СостояниеОригинала); Иначе - ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(НаборЗаписей, Документ, ИмяСостояния); + ЗаписатьСостояниеОригиналаПоПечатнымФормам(НаборЗаписей, Документ, СостояниеОригинала); КонецЕсли; - КонецЕсли; + КонецЕсли; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Документ, - ИмяСостояния); + ЗаписатьОбщееСостояниеОригиналаДокумента(Документ, + СостояниеОригинала); ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); + ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; @@ -882,41 +1227,39 @@ КонецФункции -Функция ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(НаборЗаписей, Документ, ИмяСостояния) +Функция ЗаписатьСостояниеОригиналаПоПечатнымФормам(НаборЗаписей, Документ, СостояниеОригинала) Изменено = Ложь; Для Каждого ПрошлаяЗапись Из НаборЗаписей Цикл - Если СокрЛП(ПрошлаяЗапись.Состояние) = ИмяСостояния Тогда + Если ПрошлаяЗапись.Состояние = СостояниеОригинала Тогда Продолжить; КонецЕсли; Изменено = Истина; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, - ПрошлаяЗапись.ПервичныйДокумент, ПрошлаяЗапись.ПервичныйДокументПредставление, - ИмяСостояния, ПрошлаяЗапись.ФормаИзвне); + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, ПрошлаяЗапись.ПервичныйДокумент, + ПрошлаяЗапись.ПервичныйДокументПредставление, СостояниеОригинала, ПрошлаяЗапись.ФормаИзвне); КонецЦикла; Возврат Изменено; КонецФункции -Функция ЗаписатьСостояниеОригиналаДокументаПоСотрудникам(НаборЗаписей, Документ, ТабличнаяЧасть, ИмяСостояния) +Функция ЗаписатьСостояниеОригиналаПоСотрудникам(НаборЗаписей, Документ, ТабличнаяЧасть, СостояниеОригинала) Изменено = Ложь; Для Каждого Сотрудник Из Документ[ТабличнаяЧасть] Цикл НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник.Сотрудник); - НаборЗаписей.Прочитать(); + НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда Продолжить; КонецЕсли; Для Каждого ПрошлаяЗапись Из НаборЗаписей Цикл - Если СокрЛП(ПрошлаяЗапись.Состояние) = ИмяСостояния Тогда + Если ПрошлаяЗапись.Состояние = СостояниеОригинала Тогда Продолжить; КонецЕсли; Изменено = Истина; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, - ПрошлаяЗапись.ПервичныйДокумент, ПрошлаяЗапись.ПервичныйДокументПредставление, - ИмяСостояния, ПрошлаяЗапись.ФормаИзвне, Сотрудник.Сотрудник); - КонецЦикла; + ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ, ПрошлаяЗапись.ПервичныйДокумент, + ПрошлаяЗапись.ПервичныйДокументПредставление, СостояниеОригинала, ПрошлаяЗапись.ФормаИзвне, Сотрудник.Сотрудник); + КонецЦикла; КонецЦикла; Возврат Изменено; @@ -930,7 +1273,7 @@ Процедура ЗаполнитьСписокВыбораСостоянийОригинала(Форма, СостоянияОригиналов) СписокВыбораСостоянийОригинала = Форма.СписокВыбораСостоянийОригинала; - СписокВыбораСостоянийОригинала.Очистить(); + СписокВыбораСостоянийОригинала.Очистить(); Для каждого Состояние Из СостоянияОригиналов Цикл @@ -983,7 +1326,8 @@ // Возвращает ключ записи регистра общего состояния оригинала документа по ссылке. // // Параметры: -// ДокументСсылка - ДокументСсылка - ссылка на документ, для которого необходимо получить ключ записи общего состояния. +// ДокументСсылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, для которого +// необходимо получить ключ записи общего состояния. // // Возвращаемое значение: // РегистрСведенийКлючЗаписи.СостоянияОригиналовПервичныхДокументов @@ -1001,7 +1345,7 @@ | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов |ГДЕ | СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка - | И СостоянияОригиналовПервичныхДокументов.ОбщееСостояние" ; + | И СостоянияОригиналовПервичныхДокументов.ОбщееСостояние"; Запрос.УстановитьПараметр("Ссылка",ДокументСсылка); @@ -1024,7 +1368,8 @@ // Проверяет и возвращает признак того, является ли документ по ссылке документом с учетом оригиналов. // // Параметры: -// ДокументСсылка - ДокументСсылка - ссылка на документ, который необходимо проверить. +// ДокументСсылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, который необходимо +// проверить. // // Возвращаемое значение: // Булево @@ -1042,7 +1387,8 @@ // Проверяет, хранятся ли в документе сведения о сотрудниках и возвращает наименование соответствующей табличной части. // // Параметры: -// ДокументСсылка - ДокументСсылка - ссылка на документ, который необходимо проверить. +// ДокументСсылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, который необходимо +// проверить. // // Возвращаемое значение: // Строка - наименование табличной части документа, в которой хранятся сотрудники. Пустая, если это не @@ -1052,6 +1398,7 @@ СписокОбъектов = Новый Соответствие(); Результат = ""; + ИнтеграцияПодсистемБСП.ПриОпределенииМногосотрудниковыхДокументов(СписокОбъектов); УчетОригиналовПервичныхДокументовПереопределяемый.ПриОпределенииМногосотрудниковыхДокументов(СписокОбъектов); ТипДокумента = ОбщегоНазначения.ИмяТаблицыПоСсылке(ДокументСсылка); Если СписокОбъектов[ТипДокумента] <> Неопределено Тогда @@ -1133,7 +1480,7 @@ МенеджерыОбъектов.Добавить(ПланыВидовХарактеристик[ПустаяСсылка.Метаданные().Имя]); Иначе - ТекстИсключения = НСтр("ru = 'Ошибка распознавания штрихкода: тип ""%Тип%"" не поддерживается.'"); + ТекстИсключения = НСтр("ru = 'Неизвестный тип штрихкода ""%Тип%"".'"); ТекстИсключения = СтрЗаменить(ТекстИсключения, "%Тип%", ТипСсылки); ВызватьИсключение ТекстИсключения; КонецЕсли; @@ -1206,76 +1553,34 @@ // Проверяет после записи состояний печатных форм документа в регистр, имеют ли они одинаковые состояния. // // Параметры: -// ДокументСсылка - ДокументСсылка - ссылка на документ,у которого необходимо проверить состояния печатных форм. -// ИмяСостояния - Строка - имя состояния, которое было установлено. +// ДокументСсылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, у которого +// необходимо проверить состояния печатных форм. +// СостояниеОригинала - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на проверяемое состояние. // // Возвращаемое значение: // Булево - Истина, если все печатные формы документа имеют одинаковое состояние. // -Функция СостояниеПечатныхФормОдинаково(ДокументСсылка,ИмяСостояния) Экспорт +Функция СостояниеПечатныхФормОдинаково(ДокументСсылка, СостояниеОригинала) Экспорт СостояниеФормОдинаково = Ложь; Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | СостоянияОригиналовПервичныхДокументов.Состояние.Наименование КАК СостояниеОригинала + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина |ИЗ | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов |ГДЕ | СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка + | И СостоянияОригиналовПервичныхДокументов.Состояние <> &СостояниеОригинала | И НЕ СостоянияОригиналовПервичныхДокументов.ОбщееСостояние"; Запрос.УстановитьПараметр("Ссылка", ДокументСсылка); - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - СостояниеФормОдинаково = (Выборка.СостояниеОригинала = СокрЛП(ИмяСостояния)); - Если Не СостояниеФормОдинаково Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Возврат СостояниеФормОдинаково; - -КонецФункции - -// Возвращает данные о текущим общем состоянии оригинала документа по ссылке. -// -// Параметры: -// ДокументСсылка - ДокументСсылка - ссылка на документ, для которого необходимо получить сведения о общем состоянии. -// -// Возвращаемое значение: -// Структура: -// * Ссылка - ДокументСсылка - ссылка на документ. -// * СостояниеОригиналаПервичногоДокумента - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - текущее -// состояние оригинала документа. -// -Функция СведенияОСостоянииОригиналаПоСсылке(ДокументСсылка) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | СостоянияОригиналовПервичныхДокументов.Состояние КАК Состояние, - | СостоянияОригиналовПервичныхДокументов.ОбщееСостояние КАК ОбщееСостояние - |ИЗ - | РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов - |ГДЕ - | СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка - | И СостоянияОригиналовПервичныхДокументов.ОбщееСостояние = ИСТИНА"; - - Запрос.УстановитьПараметр("Ссылка",ДокументСсылка); - - СведенияОСостоянии = Новый Структура; - - Если Не Запрос.Выполнить().Пустой() Тогда - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); + Запрос.УстановитьПараметр("СостояниеОригинала", СостояниеОригинала); - СведенияОСостоянии.Вставить("Ссылка",ДокументСсылка); - СведенияОСостоянии.Вставить("СостояниеОригиналаПервичногоДокумента",Выборка.Состояние); + Если Запрос.Выполнить().Пустой() Тогда + Возврат Истина; КонецЕсли; - Возврат СведенияОСостоянии; + Возврат СостояниеФормОдинаково; КонецФункции @@ -1375,6 +1680,7 @@ Таблица.Колонки.Добавить("ОбъектМетаданных", Новый ОписаниеТипов("ОбъектМетаданных")); Таблица.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + ИнтеграцияПодсистемБСП.ПриЗаполненииТаблицыУчетаОригиналов(Таблица); УчетОригиналовПервичныхДокументовПереопределяемый.ЗаполнитьТаблицуУчетаОригиналов(Таблица); Возврат Таблица; diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовВызовСервера/Module.bsl b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовВызовСервера/Module.bsl index 3cbce0128..ff425133b 100644 --- a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовВызовСервера/Module.bsl @@ -8,6 +8,9 @@ #Область ПрограммныйИнтерфейс +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать УчетОригиналовПервичныхДокументовКлиент.ЗаписатьСостоянияОригиналовПослеПечати. // Вызывается для записи состояний оригиналов печатных форм в регистр, после печати формы. // // Параметры: @@ -22,19 +25,21 @@ Если СписокПечати.Количество() = 0 Тогда Возврат; КонецЕсли; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, СписокПечати, Записано); + УчетОригиналовПервичныхДокументов.ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, СписокПечати, Записано); КонецЕсли; КонецПроцедуры #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Записывает новое состояние оригинала документа. // // Параметры: -// ДанныеЗаписи - Массив из Структура - данные об изменяемом состоянии оригинала: +// ОбъектыЗаписи - Массив из Структура - данные об изменяемом состоянии оригинала: // * ОбщееСостояние - Булево - Истина, если текущее состояние является общим; // * Ссылка - ДокументСсылка - ссылка на документ, для которого необходимо изменить состояние оригинала; // * СостояниеОригиналаПервичногоДокумента - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - @@ -42,16 +47,16 @@ // * ПервичныйДокумент - Строка - идентификатор первичного документа. Задается, если данное состояние не является общим; // * Извне - Булево - Истина, если первичный документ был добавлен пользователем вручную. Задается, если данное состояние не является общим. // - ДокументСсылка - ссылка на документ, для которого необходимо изменить состояние оригинала. -// ИмяСостояния - Строка - устанавливаемое состояние. +// СостояниеОригинала - Строка - устанавливаемое состояние. // // Возвращаемое значение: // Строка - "Изменено", если состояние оригинала документа не повторяется и было записано; // "НеИзменено" // "НеПроведено" // -Функция УстановитьНовоеСостояниеОригинала(Знач ДанныеЗаписи, Знач ИмяСостояния) Экспорт +Функция УстановитьНовоеСостояниеОригинала(Знач ОбъектыЗаписи, Знач СостояниеОригинала) Экспорт - Возврат УчетОригиналовПервичныхДокументов.УстановитьНовоеСостояниеОригинала(ДанныеЗаписи, ИмяСостояния); + Возврат УчетОригиналовПервичныхДокументов.УстановитьНовоеСостояниеОригинала(ОбъектыЗаписи, СостояниеОригинала); КонецФункции @@ -135,4 +140,39 @@ КонецФункции +// Возвращает ссылку на состояние оригинала первичного документа по справочнику по УИД. +// +// Параметры: +// ИмяКоманды - Строка- имя выполняемой команды формы. +// +// Возвращаемое значение: +// СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на состояние оригинала документа. +// +Функция СостояниеОригиналаПервичногоДокументаПоИмениКоманды(Знач ИмяКоманды) Экспорт + + УИДСостояния = СтрЗаменить(СтрЗаменить(ИмяКоманды, "Команда", ""), "_", "-"); + УИДСостояния = Новый УникальныйИдентификатор(УИДСостояния); + Возврат Справочники.СостоянияОригиналовПервичныхДокументов.ПолучитьСсылку(УИДСостояния); + +КонецФункции + +// Вызывается для записи состояний оригиналов печатных форм в регистр, после печати формы. +// +// Параметры: +// ОбъектыПечати - СписокЗначений - список ссылок на объекты печати. +// СписокПечати - СписокЗначений - список с именами макетов и представлениями печатных форм. +// Записано - Булево - признак того, что состояние документа записано в регистр. +// +Процедура ЗаписатьСостоянияОригиналовПослеПечатиФорм(ОбъектыПечати, СписокПечати, Записано = Ложь) Экспорт + + Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетОригиналовПервичныхДокументов") И Не Пользователи.ЭтоСеансВнешнегоПользователя() Тогда + УчетОригиналовПервичныхДокументов.ПриОпределенииСпискаПечатныхФорм(ОбъектыПечати, СписокПечати); + Если СписокПечати.Количество() = 0 Тогда + Возврат; + КонецЕсли; + УчетОригиналовПервичныхДокументов.ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, СписокПечати, Записано); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/Module.bsl b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/Module.bsl index 8e1552e73..5114e8106 100644 --- a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/Module.bsl +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовКлиент/Module.bsl @@ -11,50 +11,16 @@ // Устанавливает состояние оригинала для выделенных документов. Вызывается через подсистему "Подключаемые команды". // // Параметры: -// Ссылка - ДокументСсылка - ссылка на документ. +// МассивСсылок - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ. // Параметры -см. ПодключаемыеКоманды.ПараметрыВыполненияКоманды. // -Процедура Подключаемый_УстановитьСостояниеОригинала(Ссылка, Параметры) Экспорт +Процедура Подключаемый_УстановитьСостояниеОригинала(МассивСсылок, Параметры) Экспорт - Список = Параметры.Источник; - Если Список.ВыделенныеСтроки.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одного документа, для которого можно установить выбранное состояние.'")); - Возврат; - КонецЕсли; - - Если Параметры.ОписаниеКоманды.Вид = "УстановкаСостоянияОригиналПолучен" Тогда - ИмяСостояния = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"); + Если ТипЗнч(Параметры.Источник) = Тип("ТаблицаФормы") Тогда + УстановитьСостояниеОригиналаФормаСписка(Параметры, Параметры.Источник); Иначе - ИмяСостояния = Параметры.ОписаниеКоманды.Представление; - КонецЕсли; - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Список",Список); - - Если Параметры.ОписаниеКоманды.Идентификатор = "НастройкаСостояний" Тогда - ОткрытьФормуНастройкиСостояний(); - Возврат; - ИначеЕсли Параметры.ОписаниеКоманды.Вид = "УстановкаСостоянияОригиналПолучен" И Список.ВыделенныеСтроки.Количество() = 1 Тогда - ДополнительныеПараметры.Вставить("ИмяСостояния", ИмяСостояния); - УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); - Возврат; - КонецЕсли; - - ДополнительныеПараметры.Вставить("ИмяСостояния", ИмяСостояния); - - Если Список.ВыделенныеСтроки.Количество() > 1 Тогда - ТекстВопроса = НСтр("ru='У выделенных в списке документов будет установлено состояние оригинала ""%ИмяСостояния%"". Продолжить?'"); - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%ИмяСостояния%", ИмяСостояния); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да,НСтр("ru='Установить'")); - Кнопки.Добавить(КодВозвратаДиалога.Нет,НСтр("ru='Не устанавливать'")); - - ПоказатьВопрос(Новый ОписаниеОповещения("УстановитьСостояниеОригиналаЗавершение", ЭтотОбъект, ДополнительныеПараметры), ТекстВопроса, Кнопки); - ИначеЕсли УчетОригиналовПервичныхДокументовВызовСервера.ЭтоОбъектУчета(Список.ТекущиеДанные.Ссылка) Тогда - УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); - Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); + Ссылка = МассивСсылок[0]; + УстановитьСостояниеОригиналаФормаДокумента(Ссылка, Параметры); КонецЕсли; КонецПроцедуры @@ -62,64 +28,42 @@ // Устанавливает состояние оригинала для выделенных документов. Вызывается без подключения подсистемы "Подключаемые команды". // // Параметры: -// Команда - Строка- имя выполняемой команды формы. +// ИмяКоманды - Строка- имя выполняемой команды формы. // Форма - ФормаКлиентскогоПриложения - форма списка или документа. -// Список - ТаблицаФормы - список формы, в котором будет происходить изменение состояния. +// Список - ТаблицаФормы - список формы, в котором будет происходить изменение состояния. Если состояние устанавливается +// из формы документа, то Неопределено. // -Процедура УстановитьСостояниеОригинала(Команда, Форма, Список) Экспорт +Процедура УстановитьСостояниеОригинала(ИмяКоманды, Форма, Список = Неопределено) Экспорт + + Параметры = ПодключаемыеКомандыКлиент.ПараметрыВыполненияКоманды(); + + Параметры.ОписаниеКоманды = Новый Структура("Идентификатор", ИмяКоманды); + + Если ИмяКоманды = "УстановкаСостоянияОригиналПолучен" Тогда + СостояниеОригинала = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"); + ДополнительныеПараметры = Новый Структура("СсылкаНаСостояние", СостояниеОригинала); + Параметры.ОписаниеКоманды.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + ИначеЕсли Не ИмяКоманды = "НастройкаСостояний" И Не ИмяКоманды = "УточнитьПоПечатнымФормам" Тогда + СостояниеОригинала = УчетОригиналовПервичныхДокументовВызовСервера.СостояниеОригиналаПервичногоДокументаПоИмениКоманды(ИмяКоманды); + ДополнительныеПараметры = Новый Структура("СсылкаНаСостояние", СостояниеОригинала); + Параметры.ОписаниеКоманды.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонецЕсли; - Если Список.ВыделенныеСтроки.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одного документа, для которого можно установить выбранное состояние'")); + Если Список = Неопределено Тогда + УстановитьСостояниеОригиналаФормаДокумента(Форма.Объект.Ссылка, Параметры); Возврат; КонецЕсли; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Список",Список); - - Если Команда = "НастройкаСостояний" Тогда - ОткрытьФормуНастройкиСостояний(); - Возврат; - ИначеЕсли Команда = "УстановитьОригиналПолучен" И Список.ВыделенныеСтроки.Количество()= 1 Тогда - ДополнительныеПараметры.Вставить("ИмяСостояния", ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен")); - УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); - Возврат; - КонецЕсли; - - НайденноеСостояние = Форма.Элементы.Найти(Команда); - - Если Не НайденноеСостояние = Неопределено Тогда - ИмяСостояния = НайденноеСостояние.Заголовок; - ИначеЕсли Команда = "УстановитьОригиналПолучен" Тогда - ИмяСостояния = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"); - КонецЕсли; - - ДополнительныеПараметры.Вставить("ИмяСостояния", ИмяСостояния); - - Если Список.ВыделенныеСтроки.Количество() > 1 Тогда - ТекстВопроса = НСтр("ru='У выделенных в списке документов будет установлено состояние оригинала ""%ИмяСостояния%"". Продолжить?'"); - ТекстВопроса = СтрЗаменить(ТекстВопроса, "%ИмяСостояния%", ИмяСостояния); - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Установить'")); - Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru='Не устанавливать'")); - - ПоказатьВопрос(Новый ОписаниеОповещения("УстановитьСостояниеОригиналаЗавершение", ЭтотОбъект, ДополнительныеПараметры), - ТекстВопроса, Кнопки); - ИначеЕсли УчетОригиналовПервичныхДокументовВызовСервера.ЭтоОбъектУчета(Список.ТекущиеДанные.Ссылка) Тогда - УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); - Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); - КонецЕсли; + УстановитьСостояниеОригиналаФормаСписка(Параметры, Список); КонецПроцедуры // Открывает на форме списка или документа выпадающие меню выбора состояния оригинала. // // Параметры: -// Форма - ФормаКлиентскогоПриложения: -// * Объект - ДанныеФормыСтруктура, ДокументОбъект - основной реквизит формы. +// Форма - ФормаКлиентскогоПриложения - основной реквизит формы. // Источник - ТаблицаФормы - список или декорация формы, у которого будет открыт выпадающий список. -// Если не задан, то элемент с именем "ДекорацияСостояниеОригинала". +// Если не задан, то элемент с именем "ДекорацияСостояниеОригинала". // Процедура ОткрытьМенюВыбораСостояния(Знач Форма, Знач Источник = Неопределено) Экспорт @@ -128,72 +72,84 @@ КонецЕсли; Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда - ДанныеЗаписи = Источник.ТекущиеДанные; - НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеЗаписи.Ссылка)); - Если НепроведенныеДокументы.Количество() = 1 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Для выполнения команды предварительно проведите документ.'")); - Возврат; - КонецЕсли; - - МассивЗаписей = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеЗаписи); - ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьМенюВыбораСостоянияЗавершение", ЭтотОбъект, МассивЗаписей); - УточнитьПоПечатнымФормам = Форма.СписокВыбораСостоянийОригинала.НайтиПоЗначению("УточнитьПоПечатнымФормам"); - - Если ДанныеЗаписи.ОбщееСостояние Или Не ЗначениеЗаполнено(ДанныеЗаписи.СостояниеОригиналаПервичногоДокумента) Тогда - Если УточнитьПоПечатнымФормам = Неопределено Тогда - Форма.СписокВыбораСостоянийОригинала.Добавить("УточнитьПоПечатнымФормам", - НСтр("ru = 'Уточнить по печатным формам...'"),, - БиблиотекаКартинок.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам); - КонецЕсли; - Иначе - Если УточнитьПоПечатнымФормам <> Неопределено Тогда - Форма.СписокВыбораСостоянийОригинала.Удалить(УточнитьПоПечатнымФормам); - КонецЕсли; - КонецЕсли; - Форма.ПоказатьВыборИзМеню(ОписаниеОповещения, Форма.СписокВыбораСостоянийОригинала, - Форма.Элементы.СостояниеОригиналаПервичногоДокумента); + Документ = ДанныеЗаписи.Ссылка; + НеобходимоУточнитьПоПечатнымФормам = ДанныеЗаписи.ОбщееСостояние + Или Не ЗначениеЗаполнено(ДанныеЗаписи.СостояниеОригиналаПервичногоДокумента); + ЭлементФормыИсточник = Форма.Элементы.СостояниеОригиналаПервичногоДокумента; Иначе - Если Форма.Объект.Ссылка.Пустая() Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Для выполнения команды предварительно проведите документ.'")); - Возврат; - КонецЕсли; - НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов( - ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Форма.Объект.Ссылка)); + ДанныеЗаписи = Новый Структура("Ссылка", Форма.Объект.Ссылка); + Документ = Форма.Объект.Ссылка; + НеобходимоУточнитьПоПечатнымФормам = Истина; + ЭлементФормыИсточник = Источник; + КонецЕсли; + + Если Документ.Пустая() Тогда + ПоказатьПредупреждение(,НСтр("ru = 'Для установки состояния оригинала предварительно проведите документ.'")); + Возврат; + КонецЕсли; - Если НепроведенныеДокументы.Количество() = 1 Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Для выполнения команды предварительно проведите документ.'")); - Возврат; - КонецЕсли; + Результат = ПодключаемыеКомандыКлиент.СведенияОПроведенииДокументов( + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Документ)); + Если Результат.НепроведенныеДокументы.Количество() = 1 Тогда + ТекстСообщения = ?(Результат.ЕстьПравоПроведения, + НСтр("ru = 'Для установки состояния оригинала предварительно проведите документ.'"), + НСтр("ru = 'Невозможно установить состояние оригинала, т.к. нет прав на проведение документа.'")); + ПоказатьПредупреждение(, ТекстСообщения); + Возврат; + КонецЕсли; + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); + ОткрытьФорму = Не ПараметрыРаботыКлиента.УчетОригиналовПервичныхДокументов.ОткрыватьВыпадающиеМенюПоГиперссылке; + Если ОткрытьФорму Тогда + ОткрытьФормуИзмененияСостоянийПечатныхФорм(Документ); + Возврат; + КонецЕсли; - ДополнительныеПараметры = Новый Структура("Ссылка", Форма.Объект.Ссылка); - ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьМенюВыбораСостоянияЗавершение", ЭтотОбъект, - ДополнительныеПараметры); - - УточнитьПоПечатнымФормам = Форма.СписокВыбораСостоянийОригинала.НайтиПоЗначению("УточнитьПоПечатнымФормам"); + УточнитьПоПечатнымФормам = Форма.СписокВыбораСостоянийОригинала.НайтиПоЗначению("УточнитьПоПечатнымФормам"); + Если НеобходимоУточнитьПоПечатнымФормам Тогда Если УточнитьПоПечатнымФормам = Неопределено Тогда Форма.СписокВыбораСостоянийОригинала.Добавить("УточнитьПоПечатнымФормам", НСтр("ru = 'Уточнить по печатным формам...'"),, БиблиотекаКартинок.УточнитьСостояниеОригиналаПервичногоДокументаПоПечатнымФормам); КонецЕсли; - - Форма.ПоказатьВыборИзМеню(ОписаниеОповещения, Форма.СписокВыбораСостоянийОригинала, Источник); + ИначеЕсли УточнитьПоПечатнымФормам <> Неопределено Тогда + Форма.СписокВыбораСостоянийОригинала.Удалить(УточнитьПоПечатнымФормам); КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьМенюВыбораСостоянияЗавершение", ЭтотОбъект, ДанныеЗаписи); + Форма.ПоказатьВыборИзМеню(ОписаниеОповещения, Форма.СписокВыбораСостоянийОригинала, ЭлементФормыИсточник); + КонецПроцедуры // Обработчик оповещения событий подсистемы "Учет оригиналов первичных документов" для формы документа. // // Параметры: // ИмяСобытия - Строка - имя произошедшего события. -// Форма - ФормаКлиентскогоПриложения - форма документа. +// Форма - ФормаКлиентскогоПриложения - форма документа. +// Источник - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, источник события. +// - Массив из ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов: +// * Ссылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, источник события. // -Процедура ОбработчикОповещенияФормаДокумента(ИмяСобытия, Форма) Экспорт +Процедура ОбработчикОповещенияФормаДокумента(ИмяСобытия, Форма, Источник = Неопределено) Экспорт - Если ИмяСобытия = "ИзменениеСостоянияОригиналаПервичногоДокумента" Тогда - СформироватьНадписьТекущегоСостоянияОригинала(Форма); - ИначеЕсли ИмяСобытия = "ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента" Тогда + Если ИмяСобытия = "Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов" + И ((ТипЗнч(Источник) = Тип("Массив") И Источник.Найти(Форма.Объект.Ссылка) <> Неопределено) + Или Источник = Неопределено Или Источник = Форма.Объект.Ссылка) Тогда + ОбновитьТекущееСостоянияОригиналаНаФормеДокумента(Форма); + ИначеЕсли ИмяСобытия = "Запись_СостоянияОригиналовПервичныхДокументов" Тогда + ПодменюСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала"); + Если ПодменюСостояниеОригинала <> Неопределено Тогда + Форма.ОтключитьОбработчикОжидания("Подключаемый_ОбновитьКомандыСостоянияОригинала"); + Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбновитьКомандыСостоянияОригинала", 0.2, Истина); + НастроитьКнопкиНаФормеДокумента(Форма); + КонецЕсли; + СтруктураПоиска = Новый Структура; + СтруктураПоиска.Вставить("СписокВыбораСостоянийОригинала", Неопределено); + ЗаполнитьЗначенияСвойств(СтруктураПоиска, Форма); + Если СтруктураПоиска.СписокВыбораСостоянийОригинала <> Неопределено Тогда + УчетОригиналовПервичныхДокументовВызовСервера.ЗаполнитьСписокВыбораСостоянийОригинала(Форма.СписокВыбораСостоянийОригинала); + КонецЕсли; Форма.ОбновитьОтображениеДанных(); КонецЕсли; @@ -205,10 +161,13 @@ // ИмяСобытия - Строка - имя произошедшего события. // Форма - ФормаКлиентскогоПриложения - форма списка документов. // Список - ТаблицаФормы - основной список формы. +// Источник - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, источник события. +// - Массив из ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов: +// * Ссылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, источник события. // -Процедура ОбработчикОповещенияФормаСписка(ИмяСобытия, Форма, Список) Экспорт +Процедура ОбработчикОповещенияФормаСписка(ИмяСобытия, Форма, Список, Источник = Неопределено) Экспорт - Если ИмяСобытия = "ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента" Тогда + Если ИмяСобытия = "Запись_СостоянияОригиналовПервичныхДокументов" Тогда СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("СписокВыбораСостоянийОригинала", Неопределено); ЗаполнитьЗначенияСвойств(СтруктураПоиска, Форма); @@ -220,7 +179,7 @@ Иначе Возврат; КонецЕсли; - ИначеЕсли ИмяСобытия = "ИзменениеСостоянияОригиналаПервичногоДокумента" Тогда + ИначеЕсли ИмяСобытия = "Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов" Тогда Список.Обновить(); КонецЕсли; @@ -242,7 +201,7 @@ Если ИмяПоля = "СостояниеОригиналаПервичногоДокумента" Тогда ОткрытьМенюВыбораСостояния(Форма, Список); ИначеЕсли ИмяПоля = "СостояниеОригиналПолучен" Тогда - УстановитьСостояниеОригинала("УстановитьОригиналПолучен", Форма, Список); + УстановитьСостояниеОригинала("УстановкаСостоянияОригиналПолучен", Форма, Список); КонецЕсли; Иначе ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); @@ -270,23 +229,26 @@ // // Параметры: // КоличествоОбработанных - Число - количество успешно обработанных документов. -// ДокументСсылка - ДокументСсылка - ссылка на документ для обработки нажатия на оповещение пользователя -// в случае единичной установки состояния. Необязательный параметр. -// ИмяСостояния - Строка - устанавливаемое состояние. +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ для обработки нажатия +// на оповещение пользователя в случае единичной установки состояния. Необязательный параметр. +// СостояниеОригинала - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на устанавливаемое состояние. // -Процедура ОповеститьПользователяОбУстановкеСостояний(КоличествоОбработанных, ДокументСсылка = Неопределено, ИмяСостояния = Неопределено) Экспорт +Процедура ОповеститьПользователяОбУстановкеСостояний(КоличествоОбработанных, Документ = Неопределено, СостояниеОригинала = Неопределено) Экспорт Если КоличествоОбработанных > 1 Тогда - ТекстСообщения = НСтр("ru='Для всех выделенных в списке документов установлено состояние оригинала ""%ИмяСостояния%""'"); - ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ИмяСостояния%", ИмяСостояния); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Состояние оригинала ""%1"" установлено для всех выделенных в списке документов.'"), Строка(СостояниеОригинала)); - ТекстЗаголовка = НСтр("ru='Состояние оригинала ""%ИмяСостояния%"" установлено'"); - ТекстЗаголовка = СтрЗаменить(ТекстЗаголовка, "%ИмяСостояния%", ИмяСостояния); + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='""%1"" установлено'"), Строка(СостояниеОригинала)); - ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.ДиалогИнформация,СтатусОповещенияПользователя.Важное); + ПоказатьОповещениеПользователя(ТекстЗаголовка,, ТекстСообщения, БиблиотекаКартинок.ДиалогИнформация, СтатусОповещенияПользователя.Информация); Иначе - ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьНажатиеНаОповещение",ЭтотОбъект,ДокументСсылка); - ПоказатьОповещениеПользователя(НСтр("ru = 'Изменение состояния оригинала:'"),ОписаниеОповещения,ДокументСсылка,БиблиотекаКартинок.ДиалогИнформация,СтатусОповещенияПользователя.Важное); + ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьНажатиеНаОповещение", ЭтотОбъект, Документ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='""%1"" установлено:'"), Строка(СостояниеОригинала)); + ПоказатьОповещениеПользователя(ТекстСообщения, ОписаниеОповещения, Документ, БиблиотекаКартинок.ДиалогИнформация, + СтатусОповещенияПользователя.Информация); КонецЕсли; КонецПроцедуры @@ -307,12 +269,12 @@ // Процедура ЗаписатьСостоянияОригиналовПослеПечати(ОбъектыПечати, СписокПечати, Записано = Ложь) Экспорт - УчетОригиналовПервичныхДокументовВызовСервера.ЗаписатьСостоянияОригиналовПослеПечати(ОбъектыПечати, СписокПечати, Записано); + УчетОригиналовПервичныхДокументовВызовСервера.ЗаписатьСостоянияОригиналовПослеПечатиФорм(ОбъектыПечати, СписокПечати, Записано); Если СписокПечати.Количество() = 0 Или Записано = Ложь Тогда Возврат; КонецЕсли; - - Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + + Оповестить("Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов",, ОбъектыПечати.ВыгрузитьЗначения()); Если ОбъектыПечати.Количество() > 1 Тогда ОповеститьПользователяОбУстановкеСостояний(ОбъектыПечати.Количество(),,ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана")); @@ -325,7 +287,8 @@ // Открывает форму уточнения состояний печатных форм документа. // // Параметры: -// ДокументСсылка - ДокументСсылка - ссылка на документ,для которого необходимо получить ключ записи общего состояния. +// ДокументСсылка - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ,для которого +// необходимо получить ключ записи общего состояния. // Процедура ОткрытьФормуИзмененияСостоянийПечатныхФорм(ДокументСсылка) Экспорт @@ -349,7 +312,8 @@ // Форма - ФормаКлиентскогоПриложения - форма списка документа. // Процедура ПриПодключенииСканераШтрихкода(Форма) Экспорт - + + ИнтеграцияПодсистемБСПКлиент.ПриПодключенииСканераШтрихкодаКЖурналуУчетаОригиналов(Форма); УчетОригиналовПервичныхДокументовКлиентПереопределяемый.ПриПодключенииСканераШтрихкода(Форма); КонецПроцедуры @@ -358,14 +322,70 @@ #Область СлужебныеПроцедурыИФункции +Процедура УстановитьСостояниеОригиналаФормаСписка(Параметры, Список) + + МассивСтрок = Новый Массив; // см. УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала.ОбъектыЗаписи + Для Каждого СтрокаСписка Из Список.ВыделенныеСтроки Цикл + ДанныеСтроки = Список.ДанныеСтроки(СтрокаСписка); + МассивСтрок.Добавить(ДанныеСтроки); + КонецЦикла; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("МассивСтрок", МассивСтрок); + ДополнительныеПараметры.Вставить("МножественноеИзменение", Истина); + + Если Параметры.ОписаниеКоманды.Идентификатор = "НастройкаСостояний" Тогда + ОткрытьФормуНастройкиСостояний(); + Возврат; + КонецЕсли; + + СостояниеОригинала = Параметры.ОписаниеКоманды.ДополнительныеПараметры.СсылкаНаСостояние; + + ДополнительныеПараметры.Вставить("СостояниеОригинала", СостояниеОригинала); + + Если МассивСтрок.Количество() > 1 Тогда + ТекстВопроса = НСтр("ru = 'У выделенных в списке документов будет установлено состояние оригинала ""%ИмяСостояния%"". Продолжить?'"); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "%ИмяСостояния%", Строка(СостояниеОригинала)); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(КодВозвратаДиалога.Да,НСтр("ru = 'Установить'")); + Кнопки.Добавить(КодВозвратаДиалога.Нет,НСтр("ru = 'Не устанавливать'")); + ПоказатьВопрос(Новый ОписаниеОповещения("УстановитьСостояниеОригиналаЗавершение", ЭтотОбъект, ДополнительныеПараметры), ТекстВопроса, Кнопки); + + ИначеЕсли УчетОригиналовПервичныхДокументовВызовСервера.ЭтоОбъектУчета(МассивСтрок[0].Ссылка) Тогда + УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); + Иначе + ПоказатьПредупреждение(, НСтр("ru = 'Для данного документа учет оригиналов не ведется.'")); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьСостояниеОригиналаФормаДокумента(Ссылка, Параметры) + + Если Параметры.ОписаниеКоманды.Идентификатор = "НастройкаСостояний" Тогда + ОткрытьФормуНастройкиСостояний(); + ИначеЕсли Параметры.ОписаниеКоманды.Идентификатор = "УточнитьПоПечатнымФормам" Тогда + ОткрытьФормуИзмененияСостоянийПечатныхФорм(Ссылка); + Иначе + СостояниеОригинала = Параметры.ОписаниеКоманды.ДополнительныеПараметры.СсылкаНаСостояние; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("СостояниеОригинала", СостояниеОригинала); + ДополнительныеПараметры.Вставить("Ссылка", Ссылка); + ДополнительныеПараметры.Вставить("МножественноеИзменение", Ложь); + УстановитьСостояниеОригиналаЗавершение(КодВозвратаДиалога.Да, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + // Формирует надпись для вывода информации о текущем состоянии на форму документа. // // Параметры: -// Форма - ФормаКлиентскогоПриложения: -// * Объект - ДанныеФормыСтруктура, ДокументОбъект - основной реквизит формы. +// Форма - ФормаКлиентскогоПриложения - форма документа. // -Процедура СформироватьНадписьТекущегоСостоянияОригинала(Форма) +Процедура ОбновитьТекущееСостоянияОригиналаНаФормеДокумента(Форма) + НастроитьКнопкиНаФормеДокумента(Форма); + ДекорацияСостояниеОригинала = Форма.Элементы.Найти("ДекорацияСостояниеОригинала"); Если ДекорацияСостояниеОригинала = Неопределено Тогда Возврат; @@ -388,6 +408,31 @@ КонецПроцедуры +Процедура НастроитьКнопкиНаФормеДокумента(Форма) + + ПодменюСостояниеОригинала = Форма.Элементы.Найти("ПодменюУстановитьНастроитьСостояниеОригинала"); + Если ПодменюСостояниеОригинала = Неопределено Тогда + Возврат; + КонецЕсли; + + ПодменюСостояниеОригинала.Отображение = ОтображениеКнопки.Картинка; + ПодменюСостояниеОригинала.Картинка = БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен; + + Если ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда + Сведения = УчетОригиналовПервичныхДокументовВызовСервера.СведенияОСостоянииОригиналаПоСсылке(Форма.Объект.Ссылка); + Если Не Сведения.Количество() = 0 Тогда + ТекущиеСостояниеОригинала = Сведения.СостояниеОригиналаПервичногоДокумента; + Картинка = ?(ТекущиеСостояниеОригинала = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"), + БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналПолучен, + БиблиотекаКартинок.СостояниеОригиналаПервичногоДокументаОригиналНеПолучен); + ПодменюСостояниеОригинала.Отображение = ОтображениеКнопки.КартинкаИТекст; + ПодменюСостояниеОригинала.Заголовок = ТекущиеСостояниеОригинала; + ПодменюСостояниеОригинала.Картинка = Картинка; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + // Обработчик оповещения, вызванного после завершения работы процедуры УстановитьСостояниеОригинала(...). Процедура УстановитьСостояниеОригиналаЗавершение(Ответ, ДополнительныеПараметры) Экспорт @@ -395,24 +440,20 @@ Возврат; КонецЕсли; - Список = ДополнительныеПараметры.Список; - ИмяСостояния = ДополнительныеПараметры.ИмяСостояния; - - Если Список.ВыделенныеСтроки.Количество() = 0 Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не выделено ни одного документа, для которого можно установить выбранное состояние.'")); - Возврат; - КонецЕсли; - - ОбъектыЗаписи = Новый Массив; // см. УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала.ОбъектыЗаписи - Для Каждого СтрокаСписка Из Список.ВыделенныеСтроки Цикл - ДанныеСтроки = Список.ДанныеСтроки(СтрокаСписка); - Ссылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеСтроки, "Ссылка"); - Если ЗначениеЗаполнено(Ссылка) Тогда - ОбъектыЗаписи.Добавить(ДанныеСтроки); - КонецЕсли; - КонецЦикла; + СостояниеОригинала = ДополнительныеПараметры.СостояниеОригинала; - Изменено = УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(ОбъектыЗаписи, ИмяСостояния); + МассивСсылок = Новый Массив; + Если ДополнительныеПараметры.МножественноеИзменение Тогда + ОбъектыЗаписи = ДополнительныеПараметры.МассивСтрок; + Для Каждого Объект Из ОбъектыЗаписи Цикл + МассивСсылок.Добавить(Объект.Ссылка); + КонецЦикла; + Иначе + ОбъектыЗаписи = ДополнительныеПараметры.Ссылка; + МассивСсылок.Добавить(ДополнительныеПараметры.Ссылка); + КонецЕсли; + + Изменено = УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(ОбъектыЗаписи, СостояниеОригинала); Если Изменено = "НеПроведено" Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для установки состояния оригиналов предварительно проведите выделенные документы.'")); Возврат; @@ -420,12 +461,15 @@ Возврат; КонецЕсли; - Если ОбъектыЗаписи.Количество() = 1 Тогда - ОповеститьПользователяОбУстановкеСостояний(1, ОбъектыЗаписи[0].Ссылка); + Если Не ТипЗнч(ОбъектыЗаписи) = Тип("Массив") Тогда + ОповеститьПользователяОбУстановкеСостояний(1, ОбъектыЗаписи, СостояниеОригинала); + ИначеЕсли ОбъектыЗаписи.Количество() = 1 Тогда + ОповеститьПользователяОбУстановкеСостояний(1, ОбъектыЗаписи[0].Ссылка, СостояниеОригинала); Иначе - ОповеститьПользователяОбУстановкеСостояний(ОбъектыЗаписи.Количество(),, ИмяСостояния); - КонецЕсли; - Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + ОповеститьПользователяОбУстановкеСостояний(ОбъектыЗаписи.Количество(), , СостояниеОригинала); + КонецЕсли; + + Оповестить("Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов",, МассивСсылок); КонецПроцедуры @@ -443,25 +487,25 @@ Если ВыбранноеСостояниеИзСписка = Неопределено Тогда Возврат; КонецЕсли; - - Если ТипЗнч(ДополнительныеПараметры) = Тип("Массив")Тогда - Ссылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры[0], "Ссылка"); - Значение = ДополнительныеПараметры; - Иначе - Ссылка = ДополнительныеПараметры.Ссылка; - Значение = Ссылка; - КонецЕсли; + Ссылка = ДополнительныеПараметры.Ссылка; + Если ТипЗнч(ДополнительныеПараметры) = Тип("ДанныеФормыСтруктура") Тогда + ДанныеЗаписи = Новый Массив; + ДанныеЗаписи.Добавить(ДополнительныеПараметры); + Иначе + ДанныеЗаписи = ДополнительныеПараметры.Ссылка; + КонецЕсли; + Если ВыбранноеСостояниеИзСписка.Значение = "УточнитьПоПечатнымФормам" Тогда ОткрытьФормуИзмененияСостоянийПечатныхФорм(Ссылка); Возврат; КонецЕсли; - Изменено = УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(Значение, + Изменено = УчетОригиналовПервичныхДокументовВызовСервера.УстановитьНовоеСостояниеОригинала(ДанныеЗаписи, ВыбранноеСостояниеИзСписка.Значение); Если Изменено = "Изменено" Тогда ОповеститьПользователяОбУстановкеСостояний(1, Ссылка, ВыбранноеСостояниеИзСписка.Значение); - Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + Оповестить("Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов",, Ссылка); ИначеЕсли Изменено = "НеПроведено" Тогда ПоказатьПредупреждение(, НСтр("ru = 'Для установки состояния оригиналов предварительно проведите выделенные документы.'")); КонецЕсли; diff --git a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовПереопределяемый/Module.bsl b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовПереопределяемый/Module.bsl index cdf698d03..cef152748 100644 --- a/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УчетОригиналовПервичныхДокументовПереопределяемый/Module.bsl @@ -8,6 +8,46 @@ #Область ПрограммныйИнтерфейс +// Переопределяет настройки учета оригиналов первичных документов +// +// Параметры: +// Настройки - Структура: +// * ВыводитьКнопкиНаФормеДокумента - Булево - Истина, если необходимо отображение внешнего командного интерфейса +// по учету оригиналов первичных документов на формах документов в виде кнопок, +// Ложь - если в виде гиперссылки. Значение по умолчанию: Ложь. +// * ОтображатьПодсказкуВФормеИзмененияСостояний - Булево - Ложь, если необходимо убрать информационную надпись +// с формы "Изменение состояния оригинала документа" при уточнении состояния по печатным +// формам. Значение по умолчанию: Истина. +// * ОткрыватьВыпадающиеМенюПоГиперссылке - Булево - Ложь, если при нажатии на гиперссылку с состоянием оригинала +// первичного документа в форме списка или документа, необходимо сразу открывать форму +// "Изменение состояния оригинала документа" для уточнения состояния по печатным формам. +// Значение по умолчанию: Истина. +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + +КонецПроцедуры + +// Позволяет доопределить действия при записи общего состояния оригинала. +// +// Параметры: +// Документ - ОпределяемыйТип.ОбъектСУчетомОригиналовПервичныхДокументов - ссылка на документ, для которого +// записывается новое общее состояние. +// СостояниеОригинала - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на устанавливаемое состояние. +// +Процедура ПриИзмененииОбщегоСостоянияОригинала(Документ, СостояниеОригинала) Экспорт + +КонецПроцедуры + +// Позволяет переопределить список объектов печати и печатных форм, перед записью состояний после печати. +// +// Параметры: +// ОбъектыПечати - СписокЗначений - список ссылок на объекты печати. +// СписокПечати - СписокЗначений - список с именами макетов и представлениями печатных форм. +// +Процедура ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, СписокПечати) Экспорт + +КонецПроцедуры + // Определяет объекты конфигурации, в формах списках которых размещены команды учета оригиналов первичных документов, // // Параметры: diff --git a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl index 153f7bca4..562e971cf 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистемаКлиент/Module.bsl @@ -18,20 +18,20 @@ // // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после -// загрузки файла со следующими параметрами: -// * ПомещенныйФайл - Неопределено - пользователь отказался от выбора или файл занят другой программой. -// - Структура - пользователь выбрал файл: -// ** Хранение - Строка - расположение данных во временном хранилище. -// ** Имя - Строка - в тонком клиенте и в веб-клиенте с установленным -// расширением работы с файлами - локальный путь, по которому +// загрузки файла со следующими параметрами: +// # ПомещенныйФайл - Структура - пользователь выбрал файл: +// ## Хранение - Строка - адрес временного хранилища с двоичными данными файла. +// ## Имя - Строка - в тонком клиенте и в веб-клиенте с установленным +// расширением работы с 1С:Предприятием - локальный путь, по которому // был получен файл. В веб-клиенте без расширения для работы с 1С:Предприятием // передается имя файла с расширением. -// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта -// ОписаниеОповещения. +// - Неопределено - пользователь отказался от выбора или файл занят другой программой. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// ОписаниеОповещения. // ПараметрыЗагрузки - см. ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла. // ИмяФайла - Строка - полный путь к файлу, который будет предложен пользователю в начале -// интерактивного выбора или помещен во временное хранилище в неинтерактивном. Если -// выбран неинтерактивный режим и параметр не заполнен, будет вызвано исключение. +// интерактивного выбора или помещен во временное хранилище в неинтерактивном. +// Если выбран неинтерактивный режим и параметр не заполнен, будет вызвано исключение. // АдресВоВременномХранилище - Строка - адрес, по которому будет сохранен файл. // // Пример: @@ -40,16 +40,12 @@ // ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; // ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); // -Процедура ЗагрузитьФайл( - ОбработчикЗавершения, - ПараметрыЗагрузки = Неопределено, - ИмяФайла = "", - АдресВоВременномХранилище = "") Экспорт +Процедура ЗагрузитьФайл(ОбработчикЗавершения, ПараметрыЗагрузки = Неопределено, ИмяФайла = "", + АдресВоВременномХранилище = "") Экспорт Если ПараметрыЗагрузки = Неопределено Тогда ПараметрыЗагрузки = ПараметрыЗагрузкиФайла(); - ИначеЕсли Не ПараметрыЗагрузки.Интерактивно - И ПустаяСтрока(ИмяФайла) Тогда + ИначеЕсли Не ПараметрыЗагрузки.Интерактивно И ПустаяСтрока(ИмяФайла) Тогда ВызватьИсключение НСтр("ru = 'Не указано имя файла для загрузки в неинтерактивном режиме.'"); КонецЕсли; @@ -76,27 +72,27 @@ // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // загрузки файлов со следующими параметрами: -// * ПомещенныеФайлы - Неопределено - пользователь отказался от выбора или файл занят другой программой. -// - Массив - содержит объекты типа Структура. Пользователь выбрал файл: -// ** Хранение - Строка - расположение данных во временном хранилище. -// ** Имя - Строка - в тонком клиенте и в веб-клиенте с установленным -// расширением работы с файлами - локальный путь, по которому +// # ПомещенныеФайлы - Неопределено - пользователь отказался от выбора или файл занят другой программой. +// - Массив из Структура - пользователь выбрал файл: +// ## Хранение - Строка - адрес временного хранилища с двоичными данными файла. +// ## Имя - Строка - в тонком клиенте и в веб-клиенте с установленным +// расширением работы с 1С:Предприятием - локальный путь, по которому // был получен файл. В веб-клиенте без расширения для работы с 1С:Предприятием // передается имя файла с расширением. -// ** ПолноеИмя - Строка - в тонком клиенте и в веб-клиенте с установленным -// расширением работы с файлами - локальный путь, по которому +// ## ПолноеИмя - Строка - в тонком клиенте и в веб-клиенте с установленным +// расширением работы с 1С:Предприятием - локальный путь, по которому // был получен файл. В веб-клиенте без расширения для работы с 1С:Предприятием // принимает значение "". -// ** ИмяФайла - Строка - имя файла с расширением. -// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// ## ИмяФайла - Строка - имя файла с расширением. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // ПараметрыЗагрузки - см. ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла. // ЗагружаемыеФайлы - Массив - содержит объекты типа ОписаниеПередаваемогоФайла. Может быть заполнен полностью, // в этом случае загружаемые файлы будут сохранены по указанным адресам. Может быть заполнен // частично - у элементов массива заполнены только имена. В этом случае, загружаемые файлы будут // размещены в новых временных хранилищах. Массив может быть не заполнен. В этом случае набор // помещаемых файлов определяется по значениям, указанным в параметре ПараметрыЗагрузки. Если в -// параметрах загрузки выбран неинтерактивный режим и параметр ЗагружаемыеФайлы не заполнен, будет -// вызвано исключение. +// параметрах загрузки выбран неинтерактивный режим и параметр ЗагружаемыеФайлы не заполнен, +// будет вызвано исключение. // // Пример: // Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПомещенияФайлов", ЭтотОбъект, Контекст); @@ -104,10 +100,7 @@ // ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; // ФайловаяСистемаКлиент.ЗагрузитьФайлы(Оповещение, ПараметрыЗагрузки); // -Процедура ЗагрузитьФайлы( - ОбработчикЗавершения, - ПараметрыЗагрузки = Неопределено, - ЗагружаемыеФайлы = Неопределено) Экспорт +Процедура ЗагрузитьФайлы(ОбработчикЗавершения, ПараметрыЗагрузки = Неопределено, ЗагружаемыеФайлы = Неопределено) Экспорт Если ПараметрыЗагрузки = Неопределено Тогда ПараметрыЗагрузки = ПараметрыЗагрузкиФайла(); @@ -143,13 +136,14 @@ // Получает файл и сохраняет его в локальную файловую систему пользователя. // // Параметры: -// ОбработчикЗавершения - ОписаниеОповещения -// - Неопределено - содержит описание процедуры, которая будет вызвана после завершения -// со следующими параметрами: -// * ПолученныеФайлы - Неопределено - файлы не были получены. -// - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. -// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. -// АдресВоВременномХранилище - Строка - расположение данных во временном хранилище. +// ОбработчикЗавершения - Неопределено +// - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после +// завершения со следующими параметрами: +// # ПолученныеФайлы - Массив из ОписаниеПереданногоФайла - сохраненные файлы. +// - Неопределено - файлы не были получены. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// РасположениеФайла - Строка - адрес временного хранилища или навигационная ссылка на +// реквизит типа ХранилищеЗначения, содержащий двоичные данные файла. // ИмяФайла - Строка - полный путь, по которому должен быть сохранен получаемый файл или имя файла // с расширением. // ПараметрыСохранения - см. ФайловаяСистемаКлиент.ПараметрыСохраненияФайла @@ -159,14 +153,14 @@ // ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); // ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, Контекст.АдресСертификата, ИмяФайла, ПараметрыСохранения); // -Процедура СохранитьФайл(ОбработчикЗавершения, АдресВоВременномХранилище, ИмяФайла = "", +Процедура СохранитьФайл(ОбработчикЗавершения, РасположениеФайла, ИмяФайла = "", ПараметрыСохранения = Неопределено) Экспорт Если ПараметрыСохранения = Неопределено Тогда ПараметрыСохранения = ПараметрыСохраненияФайла(); КонецЕсли; - ДанныеФайла = Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресВоВременномХранилище); + ДанныеФайла = Новый ОписаниеПередаваемогоФайла(ИмяФайла, РасположениеФайла); СохраняемыеФайлы = Новый Массив; СохраняемыеФайлы.Добавить(ДанныеФайла); @@ -182,13 +176,13 @@ // исключение. // // Параметры: -// ОбработчикЗавершения - ОписаниеОповещения -// - Неопределено - содержит описание процедуры, которая -// будет вызвана после завершения со следующими параметрами: -// * ПолученныеФайлы - Неопределено - файлы не были получены. -// - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы. +// ОбработчикЗавершения - Неопределено +// - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана +// после завершения со следующими параметрами: +// * ПолученныеФайлы - Массив из ОписаниеПереданногоФайла - сохраненные файлы. +// - Неопределено - файлы не были получены. // * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта -// ОписаниеОповещения. +// ОписаниеОповещения. // СохраняемыеФайлы - Массив из ОписаниеПередаваемогоФайла // ПараметрыСохранения - см. ФайловаяСистемаКлиент.ПараметрыСохраненияФайла // @@ -236,12 +230,12 @@ // во временное хранилище.Если параметр принимает значение Неопределено, // перед помещением файла никакая процедура вызываться не будет. Значение // по умолчанию - Неопределено. Параметры вызываемой процедуры: -// ** ПомещаемыеФайлы - СсылкаНаФайл -// - Массив - ссылка на файл, готовый к помещению во временное хранилище. -// Если загружалось несколько файлов, содержит массив ссылок. -// ** ОтказОтПомещенияФайла - Булево - признак отказа от дальнейшего помещения файла. Если в теле процедуры-обработчика -// установить данному параметру значение Истина, то помещение файла будет отменено. -// ** ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. +// # ПомещаемыеФайлы - СсылкаНаФайл +// - Массив из СсылкаНаФайл - ссылка на файл, готовый к помещению во временное хранилище. +// Если загружалось несколько файлов, содержит массив ссылок. +// # ОтказОтПомещенияФайла - Булево - признак отказа от дальнейшего помещения файла. Если в теле процедуры-обработчика +// установить данному параметру значение Истина, то помещение файла будет отменено. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // // Пример: // ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); @@ -286,7 +280,7 @@ КонецФункции // Инициализирует структуру параметров для сохранения файла в файловую систему. -// Для использования в ФайловаяСистемаКлиент.СохранитьФайлы +// Для использования в ФайловаяСистемаКлиент.СохранитьФайлы. // // Возвращаемое значение: // Структура: @@ -312,7 +306,7 @@ КонецФункции // Инициализирует структуру параметров для открытия файла. -// Для использования в ФайловаяСистемаКлиент.ОткрытьФайл +// Для использования в ФайловаяСистемаКлиент.ОткрытьФайл. // // Возвращаемое значение: // Структура: @@ -342,55 +336,53 @@ // его во временный каталог. // // Параметры: -// РасположениеФайла - Строка - полный путь к файлу в файловой системе или расположение данных файла -// во временном хранилище. +// РасположениеФайла - Строка - полный путь к файлу в файловой системе, адрес временного хранилища +// или навигационная ссылка на реквизит типа ХранилищеЗначения с двоичными данными файла. // ОбработчикЗавершения - ОписаниеОповещения -// - Неопределено - описание процедуры, принимающей результат работы -// метода, с параметрами: -// * ФайлИзменен - Булево - изменен файл на компьютере или двоичные данные во временном хранилище. -// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта +// - Неопределено - описание процедуры, принимающей результат работы процедуры +// с параметрами: +// # ФайлИзменен - Булево - изменен файл на компьютере или двоичные данные во временном хранилище. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта // ОписаниеОповещения. // ИмяФайла - Строка - имя файла с расширением или расширение файла без точки. Если -// параметр РасположениеФайла содержит адрес во временном хранилище и параметр -// ИмяФайла не заполнен, будет вызвано исключение. +// параметр РасположениеФайла содержит адрес во временном хранилище и параметр +// ИмяФайла не заполнен, будет вызвано исключение. // ПараметрыОткрытия - см. ФайловаяСистемаКлиент.ПараметрыОткрытияФайла. // -Процедура ОткрытьФайл( - РасположениеФайла, - ОбработчикЗавершения = Неопределено, - ИмяФайла = "", - ПараметрыОткрытия = Неопределено) Экспорт +Процедура ОткрытьФайл(РасположениеФайла, ОбработчикЗавершения = Неопределено, ИмяФайла = "", + ПараметрыОткрытия = Неопределено) Экспорт Если ПараметрыОткрытия = Неопределено Тогда ПараметрыОткрытия = ПараметрыОткрытияФайла(); КонецЕсли; ПараметрыОткрытия.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - Если ЭтоАдресВременногоХранилища(РасположениеФайла) Тогда - - Если ПустаяСтрока(ИмяФайла) Тогда - ВызватьИсключение НСтр("ru = 'Не указано имя файла.'"); - КонецЕсли; - - ПутьКФайлу = ПолноеИмяВременногоФайла(ИмяФайла); - СократитьПолноеИмяФайлаДоДопустимойДлиныNTFS(ПутьКФайлу); - - ПараметрыОткрытия.Вставить("ПутьКФайлу", ПутьКФайлу); - ПараметрыОткрытия.Вставить("АдресДвоичныхДанныхДляОбновления", РасположениеФайла); - ПараметрыОткрытия.Вставить("УдалятьПослеОбновленияДанных", Истина); - - ПараметрыСохранения = ПараметрыСохраненияФайла(); - ПараметрыСохранения.Интерактивно = Ложь; - - ОписаниеОповещения = Новый ОписаниеОповещения( - "ОткрытьФайлПослеСохранения", ФайловаяСистемаСлужебныйКлиент, ПараметрыОткрытия); - - СохранитьФайл(ОписаниеОповещения, РасположениеФайла, ПутьКФайлу, ПараметрыСохранения); - - Иначе + Если Не ЭтоАдресВременногоХранилища(РасположениеФайла) + И Не ОбщегоНазначенияСлужебныйКлиент.ЭтоНавигационнаяСсылка(РасположениеФайла) Тогда + ФайловаяСистемаСлужебныйКлиент.ОткрытьФайлПослеСохранения( Новый Структура("ПолноеИмя", РасположениеФайла), ПараметрыОткрытия); + Возврат; КонецЕсли; + + Если ПустаяСтрока(ИмяФайла) Тогда + ВызватьИсключение НСтр("ru = 'Не указано имя файла.'"); + КонецЕсли; + + ПутьКФайлу = ПолноеИмяВременногоФайла(ИмяФайла); + СократитьПолноеИмяФайлаДоДопустимойДлиныNTFS(ПутьКФайлу); + + ПараметрыОткрытия.Вставить("ПутьКФайлу", ПутьКФайлу); + ПараметрыОткрытия.Вставить("АдресДвоичныхДанныхДляОбновления", РасположениеФайла); + ПараметрыОткрытия.Вставить("УдалятьПослеОбновленияДанных", Истина); + + ПараметрыСохранения = ПараметрыСохраненияФайла(); + ПараметрыСохранения.Интерактивно = Ложь; + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ОткрытьФайлПослеСохранения", ФайловаяСистемаСлужебныйКлиент, ПараметрыОткрытия); + + СохранитьФайл(ОписаниеОповещения, РасположениеФайла, ПутьКФайлу, ПараметрыСохранения); КонецПроцедуры @@ -416,15 +408,14 @@ Контекст.Вставить("ФайлИнфо", ФайлИнфо); Оповещение = Новый ОписаниеОповещения( - "ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + "ОткрытьПроводникПослеПроверкиРасширенияРаботы1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); ТекстПредложения = НСтр("ru = 'Для открытия папки установите расширение для работы с 1С:Предприятием.'"); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры // Открывает навигационную ссылку в программе, которая ассоциирована с протоколом навигационной ссылки. -// // Допустимые протоколы: http, https, e1c, v8help, mailto, tel, skype. // // Для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file:// @@ -494,12 +485,12 @@ Иначе Оповещение = Новый ОписаниеОповещения( - "ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); + "ОткрытьНавигационнуюСсылкуПослеПроверкиРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); ТекстПредложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для открытия ссылки ""%1"" установите расширение для работы с 1С:Предприятием.'"), НавигационнаяСсылка); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения, Ложь); КонецЕсли; @@ -514,15 +505,15 @@ // * ТекущийКаталог - Строка - задает текущий каталог запускаемого приложения. // * Оповещение - ОписаниеОповещения - оповещение о результате завершения запущенного приложения, // если оповещение не задано в случае ошибки будет показано предупреждение. Параметры обработчика завершения: -// Результат - Структура - результат работы программы: -// -- ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. -// -- ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. -// -- КодВозврата - Число - код возврата программы. -// -- ПотокВывода - Строка - результат работы программы, направленный в поток stdout. +// # Результат - Структура - результат работы программы: +// ## ПриложениеЗапущено - Булево - Истина, если внешнее приложение не вызвало ошибок при открытии. +// ## ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка. +// ## КодВозврата - Число - код возврата программы. +// ## ПотокВывода - Строка - результат работы программы, направленный в поток stdout. // В веб-клиенте всегда принимает значение "". -// -- ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. +// ## ПотокОшибок - Строка - ошибки исполнения программы, направленные в поток stderr. // В веб-клиенте всегда принимает значение "". -// ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения: +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // * ДождатьсяЗавершения - Булево - Истина, дожидаться завершения запущенного приложения перед продолжением работы. // * ПолучитьПотокВывода - Булево - Ложь - результат, направленный в поток stdout, // если не указан ДождатьсяЗавершения - игнорируется. @@ -577,9 +568,8 @@ // // Параметры: // КомандаЗапуска - Строка - командная строка для запуска программы. -// - Массив - первый элемент массива, путь к исполняемому приложению, -// если Массив, то первый элемент массива - путь к исполняемому приложению, остальные - передаваемые параметры, -// массив соответствует тому, который получит вызываемая программа в argv. +// - Массив из Строка - первый элемент массива - путь к исполняемому приложению, остальные - +// передаваемые параметры, массив соответствует тому, который получит вызываемая программа в argv. // ПараметрыЗапускаПрограммы - см. ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы. // // Пример: @@ -656,9 +646,9 @@ Контекст.Вставить("ИмяФайлаПотокаОшибок", ИмяФайлаПотокаОшибок); Контекст.Вставить("ВыполнитьСНаивысшимиПравами", ПараметрыЗапускаПрограммы.ВыполнитьСНаивысшимиПравами); - Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами", + Оповещение = Новый ОписаниеОповещения("ЗапуститьПрограммуПослеПроверкиРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, + ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, НСтр("ru = 'Для создания временной папки необходимо установить расширение для работы с 1С:Предприятием.'"), Ложь); КонецПроцедуры @@ -701,9 +691,9 @@ // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // закрытия диалога выбора со следующими параметрами: -// -- ПутьККаталогу - Строка - полный путь к каталогу. Если не установлено расширение для работы с 1С:Предприятием +// # ПутьККаталогу - Строка - полный путь к каталогу. Если не установлено расширение для работы с 1С:Предприятием // или пользователь отказался от выбора, возвращает пустую строку. -// -- ДополнительныеПараметры - значение, которое было указано при создании объекта ОписаниеОповещения. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // Заголовок - Строка - заголовок диалога выбора каталога. // Каталог - Строка - начальное значение каталога, предлагаемое по умолчанию. // @@ -715,22 +705,22 @@ Контекст.Вставить("Каталог", Каталог); ОписаниеОповещения = Новый ОписаниеОповещения( - "ВыбратьКаталогПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); - ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + "ВыбратьКаталогПриПодключенииРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); + ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения); КонецПроцедуры // Показывает диалог выбора файла. -// При работе в веб-клиенте пользователю будет показан диалог установки расширения -// для работы с файлами, если требуется. +// В веб-клиенте пользователю будет показан диалог установки расширения для работы с 1С:Предприятием, +// если требуется. // // Параметры: // ОбработчикЗавершения - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана после // закрытия диалога выбора с параметрами: -// * Результат - Массив из Строка - выбранные имена файлов. -// - Строка - пустая строка, если пользователь отказался от установки расширения. -// - Неопределено - если пользователь отказался от выбора файла. -// * ДополнительныеПараметры - Структура - дополнительные параметры оповещения. +// # Результат - Массив из Строка - выбранные имена файлов. +// - Строка - пустая строка, если пользователь отказался от установки расширения. +// - Неопределено - если пользователь отказался от выбора файла. +// # ДополнительныеПараметры - Произвольный - дополнительные параметры оповещения. // Диалог - ДиалогВыбораФайла - свойства см. в синтакс-помощнике. // Процедура ПоказатьДиалогВыбора(ОбработчикЗавершения, Диалог) Экспорт @@ -740,17 +730,17 @@ Контекст.Вставить("Диалог", Диалог); ОписаниеОповещения = Новый ОписаниеОповещения( - "ПоказатьДиалогВыбораПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, Контекст); - ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + "ПоказатьДиалогВыбораПриПодключенииРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); + ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения); КонецПроцедуры // Получение имени временного каталога. // // Параметры: -// Оповещение - ОписаниеОповещения - оповещение о результате получения со следующими параметрами. -// -- ИмяКаталога - Строка - путь к созданному каталогу. -// -- ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Оповещение - ОписаниеОповещения - оповещение о результате получения со следующими параметрами: +// # ИмяКаталога - Строка - путь к созданному каталогу. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // Расширение - Строка - суффикс в имени каталога, который поможет идентифицировать каталог при анализе. // Процедура СоздатьВременныйКаталог(Знач Оповещение, Расширение = "") Экспорт @@ -759,9 +749,9 @@ Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("Расширение", Расширение); - Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами", + Оповещение = Новый ОписаниеОповещения("СоздатьВременныйКаталогПослеПроверкиРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, + ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, НСтр("ru = 'Для создания временной папки установите расширение для работы с 1С:Предприятием.'"), Ложь); КонецПроцедуры @@ -771,9 +761,80 @@ // // Параметры: // ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана после закрытия -// формы со следующими параметрами: -// -- РасширениеПодключено - Булево - Истина, если расширение было подключено. -// -- ДополнительныеПараметры - Произвольный - параметры, заданные в ОписаниеОповещенияОЗакрытии. +// формы со следующими параметрами: +// # РасширениеПодключено - Булево - Истина, если расширение было подключено. +// # ДополнительныеПараметры - Произвольный - параметры, заданные в ОписаниеОповещенияОЗакрытии. +// ТекстПредложения - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. +// ВозможноПродолжениеБезУстановки - Булево - если Истина, будет показана кнопка ПродолжитьБезУстановки, +// если Ложь, будет показана кнопка Отмена. +// +// Пример: +// +// Оповещение = Новый ОписаниеОповещения("ПечатьДокументаЗавершение", ЭтотОбъект); +// ТекстСообщения = НСтр("ru = 'Для печати документа необходимо установить расширение для работы с 1С:Предприятием.'"); +// ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстСообщения); +// +// Процедура ПечатьДокументаЗавершение(РасширениеПодключено, ДополнительныеПараметры) Экспорт +// Если РасширениеПодключено Тогда +// // код печати документа, рассчитывающий на то, что расширение подключено. +// // ... +// Иначе +// // код печати документа, который работает без подключенного расширения. +// // ... +// КонецЕсли; +// +Процедура ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещенияОЗакрытии, ТекстПредложения = "", + ВозможноПродолжениеБезУстановки = Истина) Экспорт + + ОписаниеОповещенияЗавершение = Новый ОписаниеОповещения( + "НачатьПодключениеРасширения1СПредприятияПриОтветеНаВопросОбУстановке", ФайловаяСистемаСлужебныйКлиент, + ОписаниеОповещенияОЗакрытии); + +#Если Не ВебКлиент Тогда + // В мобильном, тонком и толстом клиентах расширение подключено всегда. + ВыполнитьОбработкуОповещения(ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); + Возврат; +#КонецЕсли + + Контекст = Новый Структура; + Контекст.Вставить("ОписаниеОповещенияЗавершение", ОписаниеОповещенияЗавершение); + Контекст.Вставить("ТекстПредложения", ТекстПредложения); + Контекст.Вставить("ВозможноПродолжениеБезУстановки", ВозможноПродолжениеБезУстановки); + + Оповещение = Новый ОписаниеОповещения( + "НачатьПодключениеРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); + НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + +КонецПроцедуры + +// Формирует уникальное имя файла в указанной папке, при необходимости добавляя к имени файла порядковый номер, +// например: "файл (2).txt", "файл (3).txt" и т.п. +// +// Параметры: +// ИмяФайла - Строка - полное имя файла с папкой, например, "C:\Документы\файл.txt". +// +// Возвращаемое значение: +// Строка - например, "C:\Документы\файл (2).txt", если "файл.txt" уже существует в указанной папке. +// +Функция УникальноеИмяФайла(Знач ИмяФайла) Экспорт + + Возврат ФайловаяСистемаСлужебныйКлиентСервер.УникальноеИмяФайла(ИмяФайла); + +КонецФункции + +#КонецОбласти + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать ПодключитьРасширениеДляРаботы1СПредприятия. +// Предлагает пользователю установить расширение для работы с 1С:Предприятием в веб-клиенте. +// Предназначена для использования в начале участков кода, в которых ведется работа с файлами. +// +// Параметры: +// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - описание процедуры, которая будет вызвана после закрытия +// формы со следующими параметрами: +// # РасширениеПодключено - Булево - Истина, если расширение было подключено. +// # ДополнительныеПараметры - Произвольный - параметры, заданные в ОписаниеОповещенияОЗакрытии. // ТекстПредложения - Строка - текст сообщения. Если не указан, то выводится текст по умолчанию. // ВозможноПродолжениеБезУстановки - Булево - если Истина, будет показана кнопка ПродолжитьБезУстановки, // если Ложь, будет показана кнопка Отмена. @@ -793,13 +854,11 @@ // // ... // КонецЕсли; // -Процедура ПодключитьРасширениеДляРаботыСФайлами( - ОписаниеОповещенияОЗакрытии, - ТекстПредложения = "", - ВозможноПродолжениеБезУстановки = Истина) Экспорт +Процедура ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещенияОЗакрытии, ТекстПредложения = "", + ВозможноПродолжениеБезУстановки = Истина) Экспорт ОписаниеОповещенияЗавершение = Новый ОписаниеОповещения( - "НачатьПодключениеРасширенияРаботыСФайламиПриОтветеНаВопросОбУстановке", ФайловаяСистемаСлужебныйКлиент, + "НачатьПодключениеРасширения1СПредприятияПриОтветеНаВопросОбУстановке", ФайловаяСистемаСлужебныйКлиент, ОписаниеОповещенияОЗакрытии); #Если Не ВебКлиент Тогда @@ -814,26 +873,11 @@ Контекст.Вставить("ВозможноПродолжениеБезУстановки", ВозможноПродолжениеБезУстановки); Оповещение = Новый ОписаниеОповещения( - "НачатьПодключениеРасширенияРаботыСФайламиПриУстановкеРасширения", ФайловаяСистемаСлужебныйКлиент, Контекст); + "НачатьПодключениеРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, Контекст); НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); КонецПроцедуры -// Формирует уникальное имя файла в указанной папке, при необходимости добавляя к имени файла порядковый номер, -// например: "файл (2).txt", "файл (3).txt" и т.п. -// -// Параметры: -// ИмяФайла - Строка - полное имя файла с папкой, например, "C:\Документы\файл.txt". -// -// Возвращаемое значение: -// Строка - например, "C:\Документы\файл (2).txt", если "файл.txt" уже существует в указанной папке. -// -Функция УникальноеИмяФайла(Знач ИмяФайла) Экспорт - - Возврат ФайловаяСистемаСлужебныйКлиентСервер.УникальноеИмяФайла(ИмяФайла); - -КонецФункции - #КонецОбласти #КонецОбласти @@ -869,8 +913,8 @@ ПараметрыПомещения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); ОписаниеОповещения = Новый ОписаниеОповещения( - "ПоказатьПомещениеФайлаПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, ПараметрыПомещения); - ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения, ПараметрыПомещения.ТекстПредложения); + "ПоказатьПомещениеФайлаПриПодключенииРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, ПараметрыПомещения); + ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения, ПараметрыПомещения.ТекстПредложения); КонецПроцедуры @@ -883,8 +927,8 @@ ПараметрыПолучения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); ОписаниеОповещения = Новый ОписаниеОповещения( - "ПоказатьПолучениеФайловПриПодключенииРасширенияРаботыСФайлами", ФайловаяСистемаСлужебныйКлиент, ПараметрыПолучения); - ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения, ПараметрыПолучения.ТекстПредложения); + "ПоказатьПолучениеФайловПриПодключенииРасширения1СПредприятия", ФайловаяСистемаСлужебныйКлиент, ПараметрыПолучения); + ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения, ПараметрыПолучения.ТекстПредложения); КонецПроцедуры @@ -1101,9 +1145,9 @@ // Получение имени временного файла. // // Параметры: -// Оповещение - ОписаниеОповещения - оповещение о результате получения со следующими параметрами. -// -- ИмяВременногоФайла - Строка - путь к временному файлу. -// -- ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения. +// Оповещение - ОписаниеОповещения - оповещение о результате получения со следующими параметрами: +// # ИмяВременногоФайла - Строка - путь к временному файлу. +// # ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения. // Расширение - Строка - расширение временного файла. // Процедура ПолучитьПолноеИмяВременногоФайла(Знач Оповещение, Расширение = "") @@ -1114,7 +1158,7 @@ Оповещение = Новый ОписаниеОповещения("ПолучитьИмяВременногоФайлаПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); - ПодключитьРасширениеДляРаботыСФайлами(Оповещение, + ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, НСтр("ru = 'Для получения имени временного файла установите расширение для работы с 1С:Предприятием.'"), Ложь); КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl index 2ae565e00..d817d9000 100644 --- a/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловаяСистемаСлужебныйКлиент/Module.bsl @@ -11,9 +11,9 @@ #Область ЗагрузкаФайловИзФайловойСистемы // Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьПомещениеФайла. -Процедура ПоказатьПомещениеФайлаПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ПоказатьПомещениеФайлаПриПодключенииРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт - Интерактивно = Контекст.Интерактивно; + Интерактивно = Контекст.Интерактивно; Если Не РасширениеПодключено И Не Интерактивно Тогда @@ -23,7 +23,7 @@ Попытка НачатьОбработкуПомещениеФайлов(Контекст); Исключение - Диалог = Контекст.Диалог; // ДиалогВыбораФайла - + Диалог = Контекст.Диалог; // ДиалогВыбораФайла Интерактивно = Контекст.Интерактивно; ОбработчикЗавершения = Контекст.ОбработчикЗавершения; @@ -36,10 +36,12 @@ ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибки = ИнформацияОбОшибке.Причина.Описание; Если СтрНайти(ОписаниеОшибки, "32(0x00000020)") Тогда - ПоказатьПредупреждение(ОписаниеОповещения, НСтр("ru = 'Завершите работу с файлом в другом приложении.'"), , НСтр("ru = 'Файл открыт в другом приложении'")); - Иначе - ВызватьИсключение ОписаниеОшибки; + ПоказатьПредупреждение(ОписаниеОповещения, НСтр("ru = 'Завершите работу с файлом в другом приложении.'"),, + НСтр("ru = 'Файл открыт в другом приложении'")); + Возврат; КонецЕсли; + + ВызватьИсключение; КонецПопытки; @@ -54,11 +56,11 @@ // Процедура ПослеПредупрежденияОНедоступностиФайла(ПараметрыОбработкиРезультата) Экспорт - Если ПараметрыОбработкиРезультата.МножественныйВыбор Тогда - ОбработатьРезультатПомещенияФайлов(Неопределено, ПараметрыОбработкиРезультата); - Иначе - ОбработатьРезультатПомещенияФайла(Ложь, Неопределено, Неопределено, ПараметрыОбработкиРезультата); - КонецЕсли; + Если ПараметрыОбработкиРезультата.МножественныйВыбор Тогда + ОбработатьРезультатПомещенияФайлов(Неопределено, ПараметрыОбработкиРезультата); + Иначе + ОбработатьРезультатПомещенияФайла(Ложь, Неопределено, Неопределено, ПараметрыОбработкиРезультата); + КонецЕсли; КонецПроцедуры @@ -157,7 +159,7 @@ #Область СохранениеФайловВФайловуюСистему // Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьПолучениеФайлов. -Процедура ПоказатьПолучениеФайловПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ПоказатьПолучениеФайловПриПодключенииРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт Если РасширениеПодключено Тогда @@ -263,15 +265,15 @@ Контекст.Вставить("ДляРедактирования", ДляРедактирования); Оповещение = Новый ОписаниеОповещения( - "ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); + "ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширения1СПредприятия", ЭтотОбъект, Контекст); ТекстПредложения = НСтр("ru = 'Для открытия файла установите расширение для работы с 1С:Предприятием.'"); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры // Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьФайл. -Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ОткрытьФайлВПрограммеПросмотраПослеПроверкиРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт ФайлИнфо = Контекст.ФайлИнфо; Если РасширениеПодключено Тогда @@ -518,7 +520,7 @@ #Область ОткрытьПроводник // Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьПроводник. -Процедура ОткрытьПроводникПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ОткрытьПроводникПослеПроверкиРасширенияРаботы1СПредприятия(РасширениеПодключено, Контекст) Экспорт ФайлИнфо = Контекст.ФайлИнфо; @@ -598,7 +600,7 @@ #Область ОткрытьНавигационнуюСсылку // Продолжение процедуры ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку. -Процедура ОткрытьНавигационнуюСсылкуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ОткрытьНавигационнуюСсылкуПослеПроверкиРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт // АПК:534-выкл методы безопасного запуска обеспечиваются этой функцией @@ -719,7 +721,7 @@ #Область ЗапуститьПрограмму // Продолжение процедуры ФайловаяСистемаКлиент.ЗапуститьПрограмму. -Процедура ЗапуститьПрограммуПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ЗапуститьПрограммуПослеПроверкиРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт Если РасширениеПодключено Тогда @@ -1051,7 +1053,8 @@ ДождатьсяЗавершения = Ложь; - СтрокаКоманды = ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЗапускаКомандыWindows(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения); + СтрокаКоманды = ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЗапускаКомандыWindows(СтрокаКоманды, + ТекущийКаталог, ДождатьсяЗавершения, КодировкаИсполнения); Попытка Оболочка = Новый COMОбъект("Shell.Application"); @@ -1104,7 +1107,7 @@ #Область ВыборКаталога // Продолжение процедуры ФайловаяСистемаКлиент.ВыбратьКаталог. -Процедура ВыбратьКаталогПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ВыбратьКаталогПриПодключенииРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт Если Не РасширениеПодключено Тогда ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, ""); @@ -1145,7 +1148,7 @@ // Продолжение процедуры ФайловаяСистемаКлиент.ПоказатьДиалогВыбора // -Процедура ПоказатьДиалогВыбораПриПодключенииРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ПоказатьДиалогВыбораПриПодключенииРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт Если Не РасширениеПодключено Тогда ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, ""); @@ -1158,19 +1161,18 @@ #КонецОбласти -#Область РасширениеРаботыСФайлами +#Область РасширениеДляРаботы1СПредприятие -Процедура НачатьПодключениеРасширенияРаботыСФайламиПриУстановкеРасширения(Подключено, Контекст) Экспорт +Процедура НачатьПодключениеРасширения1СПредприятия(Подключено, Контекст) Экспорт - // Если расширение и так уже подключено, незачем про него спрашивать. Если Подключено Тогда ВыполнитьОбработкуОповещения(Контекст.ОписаниеОповещенияЗавершение, "ПодключениеНеТребуется"); Возврат; КонецЕсли; - // В веб клиенте под macOS расширение доступно только в браузере Chrome. + // В веб-клиенте в macOS расширение доступно только в браузере Chrome. Если ОбщегоНазначенияКлиент.ЭтоMacOSКлиент() - И НЕ ДоступноРасширениеРаботыСФайлами() Тогда + И НЕ ДоступноРасширение1СПредприятия() Тогда ВыполнитьОбработкуОповещения(Контекст.ОписаниеОповещенияЗавершение); Возврат; КонецЕсли; @@ -1178,29 +1180,24 @@ ИмяПараметра = "СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"; ПервоеОбращениеЗаСеанс = ПараметрыПриложения[ИмяПараметра] = Неопределено; Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, ПредлагатьУстановкуРасширенияРаботыСФайлами()); + ПараметрыПриложения.Вставить(ИмяПараметра, ПредлагатьУстановкуРасширения1СПредприятия()); КонецЕсли; - ПредлагатьУстановкуРасширенияРаботыСФайлами = ПараметрыПриложения[ИмяПараметра] Или ПервоеОбращениеЗаСеанс; - Если Контекст.ВозможноПродолжениеБезУстановки И Не ПредлагатьУстановкуРасширенияРаботыСФайлами Тогда - + ПредлагатьУстановкуРасширения = ПараметрыПриложения[ИмяПараметра] Или ПервоеОбращениеЗаСеанс; + Если Контекст.ВозможноПродолжениеБезУстановки И Не ПредлагатьУстановкуРасширения Тогда ВыполнитьОбработкуОповещения(Контекст.ОписаниеОповещенияЗавершение); - - Иначе - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ТекстПредложения", Контекст.ТекстПредложения); - ПараметрыФормы.Вставить("ВозможноПродолжениеБезУстановки", Контекст.ВозможноПродолжениеБезУстановки); - ОткрытьФорму( - "ОбщаяФорма.ВопросОбУстановкеРасширенияРаботыСФайлами", - ПараметрыФормы,,,,, - Контекст.ОписаниеОповещенияЗавершение); - + Возврат; КонецЕсли; - + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекстПредложения", Контекст.ТекстПредложения); + ПараметрыФормы.Вставить("ВозможноПродолжениеБезУстановки", Контекст.ВозможноПродолжениеБезУстановки); + ОткрытьФорму("ОбщаяФорма.ВопросОбУстановкеРасширения1СПредприятия", ПараметрыФормы,,,,, + Контекст.ОписаниеОповещенияЗавершение); + КонецПроцедуры -Процедура НачатьПодключениеРасширенияРаботыСФайламиПриОтветеНаВопросОбУстановке(Действие, ОповещениеОЗакрытии) Экспорт +Процедура НачатьПодключениеРасширения1СПредприятияПриОтветеНаВопросОбУстановке(Действие, ОповещениеОЗакрытии) Экспорт РасширениеПодключено = (Действие = "РасширениеПодключено" Или Действие = "ПодключениеНеТребуется"); @@ -1211,7 +1208,7 @@ СистемнаяИнформация = Новый СистемнаяИнформация(); ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; ПараметрыПриложения["СтандартныеПодсистемы.ПредлагатьУстановкуРасширенияРаботыСФайлами"] = Ложь; - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Ложь); КонецЕсли; @@ -1221,16 +1218,16 @@ КонецПроцедуры -Функция ПредлагатьУстановкуРасширенияРаботыСФайлами() +Функция ПредлагатьУстановкуРасширения1СПредприятия() СистемнаяИнформация = Новый СистемнаяИнформация(); ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - Возврат ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + Возврат ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить( "НастройкиПрограммы/ПредлагатьУстановкуРасширенияРаботыСФайлами", ИдентификаторКлиента, Истина); КонецФункции -Функция ДоступноРасширениеРаботыСФайлами() +Функция ДоступноРасширение1СПредприятия() СистемнаяИнформация = Новый СистемнаяИнформация; Возврат СтрНайти(СистемнаяИнформация.ИнформацияПрограммыПросмотра, "Chrome") > 0; @@ -1251,7 +1248,7 @@ // * Оповещение - ОписаниеОповещения // * Расширение - Строка // -Процедура СоздатьВременныйКаталогПослеПроверкиРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура СоздатьВременныйКаталогПослеПроверкиРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт Если РасширениеПодключено Тогда Оповещение = Новый ОписаниеОповещения( @@ -1259,7 +1256,8 @@ "СоздатьВременныйКаталогПриОбработкеОшибки", ЭтотОбъект); НачатьПолучениеКаталогаВременныхФайлов(Оповещение); Иначе - СоздатьВременныйКаталогОповеститьОбОшибке(НСтр("ru = 'Не удалось установить расширение для работы с 1С:Предприятием.'"), Контекст); + СоздатьВременныйКаталогОповеститьОбОшибке(НСтр("ru = 'Не удалось установить расширение для работы с 1С:Предприятием.'"), + Контекст); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl index 5ddcd6388..375a88189 100644 --- a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl @@ -25,13 +25,18 @@ // Включает подсистему ЦентрМониторинга. // Процедура ВключитьПодсистему() Экспорт - + + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + Возврат; + КонецЕсли; + ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(); ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга = Истина; ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме = Ложь; ЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторинга); + РегЗадание = ЦентрМониторингаСлужебный.ПолучитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики", Истина); ЦентрМониторингаСлужебный.УстановитьРасписаниеПоУмолчаниюВнешнийВызов(РегЗадание); diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index ea4aeff5b..488a6daf4 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -86,8 +86,7 @@ Возврат РезультатЗапуска; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт @@ -399,6 +398,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции #Область РаботаСРегламентнымиЗаданиями @@ -1347,6 +1348,9 @@ КонецЕсли; Попытка + + ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(Истина); + Если Параметры.Метод = "POST" Тогда HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); ИначеЕсли Параметры.Метод = "GET" Тогда @@ -2135,7 +2139,7 @@ Параметры[ТекПараметр.Ключ] = ТекПараметр.Значение; КонецЦикла; - Хранилище = Новый ХранилищеЗначения(Параметры); + Хранилище = Новый ХранилищеЗначения(Параметры, Новый СжатиеДанных(9)); Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); ЗафиксироватьТранзакцию(); @@ -2150,9 +2154,9 @@ КонецПроцедуры Процедура УдалитьПараметрыЦентраМониторинга() + Параметры = Новый Структура; + Хранилище = Новый ХранилищеЗначения(Параметры, Новый СжатиеДанных(9)); Попытка - Параметры = Новый Структура; - Хранилище = Новый ХранилищеЗначения(Параметры); Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Удалить параметры центра мониторинга'", @@ -2177,7 +2181,7 @@ КонецЕсли; Параметры[Параметр] = Значение; - Хранилище = Новый ХранилищеЗначения(Параметры); + Хранилище = Новый ХранилищеЗначения(Параметры, Новый СжатиеДанных(9)); Константы.ПараметрыЦентраМониторинга.Установить(Хранилище); ЗафиксироватьТранзакцию(); @@ -2347,7 +2351,7 @@ ЧтениеXML.Закрыть(); Если ДокументDOM.ЕстьДочерниеУзлы() Тогда ПервыйДочерний = ДокументDOM.ПервыйДочерний; - Если ВРЕГ(ПервыйДочерний.ИмяУзла) = "CONFIG" Тогда + Если ВРЕГ(ПервыйДочерний.ИмяУзла) = "DESIGNER" Тогда ПутьПоУмолчанию = СтрНайти(КаталогДампов.Путь, Идентификатор) > 0; Если ПустаяСтрока(КаталогДампов.Путь) ИЛИ ПутьПоУмолчанию Тогда КаталогДампов.Путь = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + Идентификатор); @@ -3953,49 +3957,34 @@ Иначе ОбластьДанных = 0; КонецЕсли; - Параметры = Новый Структура("КодВыполнен,ОбработкаОшибок", Ложь, Неопределено); - КодДляВыполнения = "Параметры.ОбработкаОшибок = ОбработкаОшибок; - |Параметры.КодВыполнен = Истина;"; - // Инициализируем менеджер обработки ошибок. - // АПК:280-выкл обработка исключения не требуется - Попытка - ОбщегоНазначения.ВыполнитьВБезопасномРежиме(КодДляВыполнения, Параметры); - Исключение - // Исключение не выбрасываем. - КонецПопытки; - Если Параметры.КодВыполнен Тогда - Попытка - Если БезопасныйРежим() = Истина Тогда - УстановитьОтключениеБезопасногоРежима(Истина); - КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - ОбщиеНастройки = Параметры.ОбработкаОшибок.ПолучитьОбщиеНастройки(); - УстановитьПривилегированныйРежим(Ложь); - ДополнительнаяИнформация = Новый Структура; - Если ЗначениеЗаполнено(ОбщиеНастройки.ДополнительнаяИнформацияОтчета) Тогда - // Считаем, что внутри json. Если нет, то кто-то установил руками. Тогда ничего не меняем - так и должно быть. - ДополнительнаяИнформация = ОбщегоНазначения.JSONВЗначение(ОбщиеНастройки.ДополнительнаяИнформацияОтчета, , Ложь); - КонецЕсли; - Если ДополнительнаяИнформация.Свойство("guid") - И ДополнительнаяИнформация.guid = ИдентификаторИнформационнойБазы Тогда - Возврат; - КонецЕсли; - ДополнительнаяИнформация.Вставить("guid", ИдентификаторИнформационнойБазы); - ДополнительнаяИнформация.Вставить("region", ОбластьДанных); - ЗаписьJSON = Новый ЗаписьJSON; - ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); - ЗаписатьJSON(ЗаписьJSON, ДополнительнаяИнформация); - ОбщиеНастройки.ДополнительнаяИнформацияОтчета = ЗаписьJSON.Закрыть(); - - УстановитьПривилегированныйРежим(Истина); - Параметры.ОбработкаОшибок.УстановитьОбщиеНастройки(ОбщиеНастройки); - УстановитьПривилегированныйРежим(Ложь); - Исключение - // Исключение не выбрасываем. - КонецПопытки; + Если БезопасныйРежим() = Истина Тогда + УстановитьОтключениеБезопасногоРежима(Истина); КонецЕсли; - // АПК:280-вкл + УстановитьПривилегированныйРежим(Истина); + ОбщиеНастройки = ОбработкаОшибок.ПолучитьОбщиеНастройки(); + УстановитьПривилегированныйРежим(Ложь); + + ДополнительнаяИнформация = Новый Структура; + Если ЗначениеЗаполнено(ОбщиеНастройки.ДополнительнаяИнформацияОтчета) Тогда + // Считаем, что внутри json. Если нет, то кто-то установил руками. Тогда ничего не меняем - так и должно быть. + ДополнительнаяИнформация = ОбщегоНазначения.JSONВЗначение(ОбщиеНастройки.ДополнительнаяИнформацияОтчета, , Ложь); + КонецЕсли; + Если ДополнительнаяИнформация.Свойство("guid") + И ДополнительнаяИнформация.guid = ИдентификаторИнформационнойБазы Тогда + Возврат; + КонецЕсли; + ДополнительнаяИнформация.Вставить("guid", ИдентификаторИнформационнойБазы); + ДополнительнаяИнформация.Вставить("region", ОбластьДанных); + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); + ЗаписатьJSON(ЗаписьJSON, ДополнительнаяИнформация); + ОбщиеНастройки.ДополнительнаяИнформацияОтчета = ЗаписьJSON.Закрыть(); + + УстановитьПривилегированныйРежим(Истина); + ОбработкаОшибок.УстановитьОбщиеНастройки(ОбщиеНастройки); + УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры Функция УстановкаНастроекОбработкиОшибок(СохраненныеПараметры, ПолученныеПараметры) @@ -4069,15 +4058,11 @@ Возврат; КонецЕсли; ЧасовАктуальностиИндекса = Окр((ТекущаяДатаСеанса() - ПолнотекстовыйПоиск.ДатаАктуальности())/3600); - МинимальнаяВерсияПлатформы = "8.3.22.1000"; - СистемнаяИнформация = Новый СистемнаяИнформация; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, МинимальнаяВерсияПлатформы) > 0 Тогда - УстановленнаяВерсияПолнотекстовогоПоиска = ОбщегоНазначения.ВычислитьВБезопасномРежиме("?(ПолнотекстовыйПоиск.ПолучитьВерсиюПолнотекстовогоПоиска() = ВерсияПолнотекстовогоПоиска.Версия1,1,2)"); - ЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ПолнотекстовыйПоиск.Версия", УстановленнаяВерсияПолнотекстовогоПоиска); - КонецЕсли; + УстановленнаяВерсияПолнотекстовогоПоиска = ?(ПолнотекстовыйПоиск.ПолучитьВерсиюПолнотекстовогоПоиска() = ВерсияПолнотекстовогоПоиска.Версия1,1,2); + ЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ПолнотекстовыйПоиск.Версия", УстановленнаяВерсияПолнотекстовогоПоиска); ЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ПолнотекстовыйПоиск.ЧасовАктуальностиИндекса", ЧасовАктуальностиИндекса); КонецПроцедуры #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl index f6df3b32e..c6a56c5ed 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийКлиентСервер/Module.bsl @@ -111,7 +111,9 @@ Результат.Вставить("ВладелецШаблона", Неопределено); Результат.Вставить("Ссылка", Неопределено); Результат.Вставить("Вложения", Новый Соответствие); + Результат.Вставить("МакетыВыгрузки", Новый Соответствие); Результат.Вставить("КомандыПечати", Новый Массив); + Результат.Вставить("КомандыВыгрузки", Новый Массив); Результат.Вставить("Наименование", ""); Результат.Вставить("ПараметрыСообщения", Новый Структура); Результат.Вставить("ДобавлятьПрисоединенныеФайлы", Ложь); @@ -157,6 +159,7 @@ // ** ОтправитьСразу - Булево // ** УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты // ** ПечатныеФормы - Массив +// ** МакетыВыгрузки - Массив // ** НастройкиСохранения - Произвольный // ** ПроизвольныеПараметры - Соответствие // ** ЗначенияПараметровСКД - Структура @@ -175,6 +178,7 @@ ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПараметрыСообщения", Новый Структура); ПараметрыОтправки.ДополнительныеПараметры.Вставить("УчетнаяЗапись", Неопределено); ПараметрыОтправки.ДополнительныеПараметры.Вставить("ПечатныеФормы", Новый Массив); + ПараметрыОтправки.ДополнительныеПараметры.Вставить("МакетыВыгрузки", Новый Массив); ПараметрыОтправки.ДополнительныеПараметры.Вставить("НастройкиСохранения"); ПараметрыОтправки.ДополнительныеПараметры.Вставить("ЗначенияПараметровСКД", Новый Структура); diff --git a/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl index 566e69bbe..c26664705 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийПереопределяемый/Module.bsl @@ -84,7 +84,7 @@ // * ДополнительныеПараметры - Структура: // ** ВидСообщения - Строка - вид шаблона: "Письмо", "SMS", "Произвольный". // ** ЗначенияПараметровСКД - Структура - значения параметров СКД. Состав реквизитов определяется средствами СКД. -// ** ОтправитьСразу - Булево - Если истина, то письмо или сообщение будет отправлено адресату сразу после создания. +// ** ОтправитьСразу - Булево - если истина, то письмо или сообщение будет отправлено адресату сразу после создания. // ** ПараметрыСообщения - Структура - дополнительные параметры переданные в функциях СформироватьСообщение // или СформироватьСообщениеИОтправить программного интерфейса общего модуля ШаблоныСообщений. // ** УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты, Неопределено - учетная запись diff --git a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl index a723f7fcc..6adcb42b9 100644 --- a/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ШаблоныСообщенийСлужебный/Module.bsl @@ -91,7 +91,10 @@ // Вложения Если ПараметрыШаблона.ТипШаблона = "Письмо" И СведенияОШаблоне <> Неопределено Тогда + ДобавитьВыбранныеПечатныеФормыВоВложения(ПараметрыОтправки, СведенияОШаблоне, Сообщение.Вложения, ПараметрыШаблона); + ДобавитьВыбранныеМакетыВыгрузкиВоВложения(ПараметрыОтправки, СведенияОШаблоне, Сообщение.Вложения, ПараметрыШаблона); + КонецЕсли; ДобавитьПрисоединенныеФайлыВоВложения(ПараметрыОтправки, Сообщение); @@ -182,39 +185,34 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда МодульОтправкаSMS = ОбщегоНазначения.ОбщийМодуль("ОтправкаSMS"); - Если МодульОтправкаSMS.ДоступнаОтправкаSMS() Тогда - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - - МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - Если МодульВзаимодействия.ИспользуютсяПрочиеВзаимодействия() Тогда - - МодульВзаимодействия.СоздатьИОтправитьСообщениеSMS(Сообщение); - Результат.Отправлено = Истина; - Возврат Результат; - - КонецЕсли; - КонецЕсли; - - НомераПолучателей = Новый Массив; - Для каждого Получатель Из Сообщение.Получатель Цикл - Если ТипЗнч(Получатель) = Тип("Структура") Тогда - НомераПолучателей.Добавить(Получатель.НомерТелефона); - Иначе - НомераПолучателей.Добавить(Получатель.Значение); - КонецЕсли; - КонецЦикла; - - РезультатОтправкаSMS = МодульОтправкаSMS.ОтправитьSMS(НомераПолучателей, Сообщение.Текст, Сообщение.ДополнительныеПараметры.Отправитель, Сообщение.ДополнительныеПараметры.ПеревестиВТранслит); - Результат.Отправлено = ПустаяСтрока(РезультатОтправкаSMS.ОписаниеОшибки); - Результат.ОписаниеОшибки = РезультатОтправкаSMS.ОписаниеОшибки; - - Иначе - + Если Не МодульОтправкаSMS.ДоступнаОтправкаSMS() Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Сообщение SMS не может быть отправлено сразу.'"); + Возврат Результат; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + Если МодульВзаимодействия.ИспользуютсяПрочиеВзаимодействия() Тогда + МодульВзаимодействия.СоздатьИОтправитьСообщениеSMS(Сообщение); + Результат.Отправлено = Истина; + Возврат Результат; + КонецЕсли; КонецЕсли; + НомераПолучателей = Новый Массив; + Для каждого Получатель Из Сообщение.Получатель Цикл + Если ТипЗнч(Получатель) = Тип("Структура") Тогда + НомераПолучателей.Добавить(Получатель.НомерТелефона); + Иначе + НомераПолучателей.Добавить(Получатель.Значение); + КонецЕсли; + КонецЦикла; + + РезультатОтправкаSMS = МодульОтправкаSMS.ОтправитьSMS(НомераПолучателей, Сообщение.Текст, + Сообщение.ДополнительныеПараметры.Отправитель, Сообщение.ДополнительныеПараметры.ПеревестиВТранслит); + Результат.Отправлено = ПустаяСтрока(РезультатОтправкаSMS.ОписаниеОшибки); + Результат.ОписаниеОшибки = РезультатОтправкаSMS.ОписаниеОшибки; Возврат Результат; КонецЕсли; @@ -256,57 +254,51 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); - Если МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда - - Если ПараметрыОтправки.ДополнительныеПараметры.УчетнаяЗапись = Неопределено Тогда - УчетнаяЗапись = МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); - Иначе - УчетнаяЗапись = ПараметрыОтправки.ДополнительныеПараметры.УчетнаяЗапись; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда - - МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - Если МодульВзаимодействия.ИспользуетсяПочтовыйКлиент() Тогда - - ПараметрыПисьма = МодульВзаимодействия.ПараметрыПисьма(); - ЗаполнитьЗначенияСвойств(ПараметрыПисьма, Сообщение, , "ДополнительныеПараметры"); - - СписокПолучателейСпискомЗначений =(ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений")); - Для Каждого ПолучательПисьма Из Сообщение.Получатель Цикл - НоваяСтрока = ПараметрыПисьма.Получатели.Добавить(); - Если СписокПолучателейСпискомЗначений Тогда - НоваяСтрока.Адрес = ПолучательПисьма.Значение; - НоваяСтрока.Представление = ПолучательПисьма.Представление; - Иначе - НоваяСтрока.Адрес = ПолучательПисьма.Адрес; - НоваяСтрока.Представление = ПолучательПисьма.Представление; - НоваяСтрока.ИсточникКонтактнойИнформации = ПолучательПисьма.ИсточникКонтактнойИнформации; - КонецЕсли; - КонецЦикла; - - ЗаполнитьЗначенияСвойств(ПараметрыПисьма.ДополнительныеПараметры, Сообщение.ДополнительныеПараметры); - ПараметрыПисьма.ДополнительныеПараметры.Комментарий = КомментарийПоНаименованиюШаблона(Сообщение.ДополнительныеПараметры.Наименование); - - РезультатОтправки = МодульВзаимодействия.СоздатьПисьмо(ПараметрыПисьма, УчетнаяЗапись, ПараметрыОтправки.ДополнительныеПараметры.ОтправитьСразу); - ЗаполнитьЗначенияСвойств(Результат, РезультатОтправки); - Возврат Результат; - - КонецЕсли; - - КонецЕсли; - - Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); - МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); - - Результат.Отправлено = Истина; - - Иначе - + Если Не МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда Результат.ОписаниеОшибки = НСтр("ru = 'Сообщение не может быть отправлено сразу.'"); Возврат Результат; + КонецЕсли; + + УчетнаяЗапись = ?( ПараметрыОтправки.ДополнительныеПараметры.УчетнаяЗапись <> Неопределено, + ПараметрыОтправки.ДополнительныеПараметры.УчетнаяЗапись, МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись()); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда + + МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); + Если МодульВзаимодействия.ИспользуетсяПочтовыйКлиент() Тогда + + ПараметрыПисьма = МодульВзаимодействия.ПараметрыПисьма(); + ЗаполнитьЗначенияСвойств(ПараметрыПисьма, Сообщение, , "ДополнительныеПараметры"); + + СписокПолучателейСпискомЗначений =(ТипЗнч(Сообщение.Получатель) = Тип("СписокЗначений")); + Для Каждого ПолучательПисьма Из Сообщение.Получатель Цикл + НоваяСтрока = ПараметрыПисьма.Получатели.Добавить(); + Если СписокПолучателейСпискомЗначений Тогда + НоваяСтрока.Адрес = ПолучательПисьма.Значение; + НоваяСтрока.Представление = ПолучательПисьма.Представление; + Иначе + НоваяСтрока.Адрес = ПолучательПисьма.Адрес; + НоваяСтрока.Представление = ПолучательПисьма.Представление; + НоваяСтрока.ИсточникКонтактнойИнформации = ПолучательПисьма.ИсточникКонтактнойИнформации; + КонецЕсли; + КонецЦикла; + + ЗаполнитьЗначенияСвойств(ПараметрыПисьма.ДополнительныеПараметры, Сообщение.ДополнительныеПараметры); + ПараметрыПисьма.ДополнительныеПараметры.Комментарий = КомментарийПоНаименованиюШаблона( + Сообщение.ДополнительныеПараметры.Наименование); + + РезультатОтправки = МодульВзаимодействия.СоздатьПисьмо(ПараметрыПисьма, УчетнаяЗапись, + ПараметрыОтправки.ДополнительныеПараметры.ОтправитьСразу); + ЗаполнитьЗначенияСвойств(Результат, РезультатОтправки); + Возврат Результат; + + КонецЕсли; КонецЕсли; + + Письмо = МодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + МодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); + Результат.Отправлено = Истина; КонецЕсли КонецЕсли; @@ -348,8 +340,7 @@ Возврат ПолучитьФункциональнуюОпцию("ИспользоватьШаблоныСообщений"); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем конфигурации. +#Область ОбработчикиСобытийПодсистемКонфигурации // См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления. Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт @@ -488,6 +479,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает сведения о доступных вариантах отправки шаблонов сообщений. @@ -720,6 +713,8 @@ КонецЕсли; ОпределитьСписокПечатныхФорм(МетаданныеОбъект, СведенияОШаблоне); + ОпределитьСписокМакетовВыгрузки(МетаданныеОбъект, СведенияОШаблоне); + Представление = МетаданныеОбъект.Представление(); СсылкаНаОбъект = РеквизитыОбъектаНазначения.Добавить(); СсылкаНаОбъект.Представление = НСтр("ru = 'Ссылка на'") + " """ + Представление + """"; @@ -965,18 +960,51 @@ ЗаполнитьПолучателейСообщения(ПараметрыОтправки, ПараметрыШаблона, СформированноеСообщение, МенеджерОбъекта); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); - Если ПараметрыШаблона.ТипШаблона = "Письмо" И ЗначениеЗаполнено(ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы) Тогда - ПечатныеФормы = ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы; + + Если ПараметрыШаблона.ТипШаблона = "Письмо" Тогда + СписокОбъектов = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПараметрыОтправки.Предмет); НастройкиСохранения = ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения; - Файлы = МодульУправлениеПечатью.НапечататьВФайл(ПечатныеФормы, СписокОбъектов, НастройкиСохранения); - Для Каждого Файл Из Файлы Цикл - Вложение = СформированноеСообщение.Вложения.Добавить(); - Вложение.АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, ПараметрыОтправки.УникальныйИдентификатор); - Вложение.Представление = Файл.ИмяФайла; - КонецЦикла; + + Если ЗначениеЗаполнено(ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы) Тогда + + ПечатныеФормы = ПараметрыОтправки.ДополнительныеПараметры.ПечатныеФормы; + + Файлы = МодульУправлениеПечатью.НапечататьВФайл(ПечатныеФормы, СписокОбъектов, НастройкиСохранения); + Для Каждого Файл Из Файлы Цикл + Вложение = СформированноеСообщение.Вложения.Добавить(); + Вложение.АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, ПараметрыОтправки.УникальныйИдентификатор); + Вложение.Представление = Файл.ИмяФайла; + КонецЦикла; + + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") + И ЗначениеЗаполнено(ПараметрыОтправки.ДополнительныеПараметры.МакетыВыгрузки) Тогда + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + МакетыВыгрузки = ПараметрыОтправки.ДополнительныеПараметры.МакетыВыгрузки; + Файлы = МодульВыгрузкаОбъектовВФайлы.СохранитьПоФорматуВФайл( + МакетыВыгрузки, + СписокОбъектов, + НастройкиСохранения); + Для Каждого Файл Из Файлы Цикл + + Вложение = СформированноеСообщение.Вложения.Добавить(); + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище( + Файл.ДвоичныеДанные, + ПараметрыОтправки.УникальныйИдентификатор); + Вложение.АдресВоВременномХранилище = АдресВоВременномХранилище; + Вложение.Представление = Файл.ИмяФайла; + + КонецЦикла; + + КонецЕсли; + КонецЕсли; + КонецЕсли; СформированноеСообщение.СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); @@ -1242,6 +1270,60 @@ КонецПроцедуры +Процедура ОпределитьСписокМакетовВыгрузки(МетаданныеОбъект, Знач ПараметрыШаблона, ИмяПараметра = "") + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + Возврат; + КонецЕсли; + + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + + ИсточникиКомандПечати = МодульУправлениеПечатью.ИсточникиКомандПечати(); + Если ИсточникиКомандПечати.Найти(МетаданныеОбъект) <> Неопределено Тогда + + КомандыВыгрузкиОбъекта = + МодульВыгрузкаОбъектовВФайлы.КомандыВыгрузкиОбъектаДоступныеДляВложений(МетаданныеОбъект); + СоответствиеФорматаВыгрузкиРасширению = + МодульВыгрузкаОбъектовВФайлы.СоответствиеФорматаВыгрузкиФорматуСохранения(); + ПроверкаНаДубли = Новый Соответствие; + + Для Каждого Вложение Из КомандыВыгрузкиОбъекта Цикл + + Если ДобавлятьКомандуВыгрузкиВоВложение(Вложение, ПроверкаНаДубли) Тогда + + ФорматСохраненияОбъекта = Вложение.ДополнительныеПараметры.ФорматСохранения; + + НоваяСтрока = ПараметрыШаблона.Вложения.Добавить(); + НоваяСтрока.Имя = Вложение.ИдентификаторМакета; + НоваяСтрока.Идентификатор = Вложение.Идентификатор; + НоваяСтрока.Представление = Вложение.Представление; + НоваяСтрока.МенеджерПечати = Вложение.МенеджерПечати; + НоваяСтрока.ТипФайла = СоответствиеФорматаВыгрузкиРасширению[ФорматСохраненияОбъекта]; + НоваяСтрока.Статус = "МакетВыгрузки"; + НоваяСтрока.ИмяПараметра = ИмяПараметра; + НоваяСтрока.ПараметрыПечати = Вложение.ДополнительныеПараметры; + ПроверкаНаДубли.Вставить(Вложение.УникальныйИдентификатор, Истина); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Функция ДобавлятьКомандуВыгрузкиВоВложение(Вложение, ПроверкаНаДубли) + + Возврат НЕ Вложение.Отключена + И СтрНайти(Вложение.Идентификатор, ",") = 0 + И НЕ ПустаяСтрока(Вложение.МенеджерПечати) + И НЕ Вложение.СкрытаФункциональнымиОпциями + И ПроверкаНаДубли[Вложение.УникальныйИдентификатор] = Неопределено + И ЗначениеЗаполнено(Вложение.ФорматСохранения); + +КонецФункции + // Записывает вложение электронного письма, расположенное во временном хранилище в файл. // // Параметры: @@ -1282,13 +1364,13 @@ КонецФункции -// Процедура - Добавить вложение печатную форму -// // Параметры: -// ПараметрыОтправки -// СведенияОШаблоне -// Вложения -// ПараметрыШаблоны +// ПараметрыОтправки - см. ШаблоныСообщений.СформироватьПараметрыОтправки +// СведенияОШаблоне - см. КонструкторСведенийОШаблоне +// Вложения - Соответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// ПараметрыШаблона - см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона // Процедура ДобавитьВыбранныеПечатныеФормыВоВложения(ПараметрыОтправки, СведенияОШаблоне, Вложения, ПараметрыШаблона) @@ -1367,6 +1449,92 @@ КонецПроцедуры +// Параметры: +// ПараметрыОтправки - см. ШаблоныСообщений.СформироватьПараметрыОтправки +// СведенияОШаблоне - см. КонструкторСведенийОШаблоне +// Вложения - Соответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - Строка +// ПараметрыШаблона - см. ШаблоныСообщенийКлиентСервер.ОписаниеПараметровШаблона +// +Процедура ДобавитьВыбранныеМакетыВыгрузкиВоВложения(ПараметрыОтправки, СведенияОШаблоне, Вложения, ПараметрыШаблона) + + Если СведенияОШаблоне.Вложения.Количество() = 0 + ИЛИ НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + Возврат; + КонецЕсли; + + МассивОбъектов = Новый Массив; + МассивОбъектов.Добавить(ПараметрыОтправки.Предмет); + + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + + НастройкиСохранения = МодульУправлениеПечатью.НастройкиСохранения(); + НастройкиСохранения.УпаковатьВАрхив = ПараметрыШаблона.УпаковатьВАрхив; + НастройкиСохранения.ПереводитьИменаФайловВТранслит = ПараметрыШаблона.ТранслитерироватьИменаФайлов; + НастройкиСохранения.ПодписьИПечать = ПараметрыШаблона.ПодписьИПечать; + + КомандыВыгрузки = Новый Массив; // Массив Из Структура + + Для Каждого ВложениеМакетВыгрузки Из СведенияОШаблоне.Вложения Цикл + + ИмяПараметраСМакетомВыгрузкиВШаблоне = ПараметрыШаблона.ВыбранныеВложения[ВложениеМакетВыгрузки.Идентификатор]; + + Если ВложениеМакетВыгрузки.Статус = "МакетВыгрузки" И ИмяПараметраСМакетомВыгрузкиВШаблоне <> Неопределено Тогда + + ИмяМенеджераПечати = ВложениеМакетВыгрузки.МенеджерПечати; + ПараметрыПечати = ВложениеМакетВыгрузки.ПараметрыПечати; + ИменаМакетов = ВложениеМакетВыгрузки.Идентификатор; + + КомандаВыгрузки = Новый Структура; + КомандаВыгрузки.Вставить("Идентификатор", ИменаМакетов); + КомандаВыгрузки.Вставить("МенеджерПечати", ИмяМенеджераПечати); + КомандаВыгрузки.Вставить("ДополнительныеПараметры", ПараметрыПечати); + + КомандыВыгрузки.Добавить(КомандаВыгрузки); + + КонецЕсли; + + КонецЦикла; + + Если КомандыВыгрузки.Количество() > 0 Тогда + + Попытка + + Файлы = МодульВыгрузкаОбъектовВФайлы.СохранитьПоФорматуВФайл( + КомандыВыгрузки, + МассивОбъектов, + НастройкиСохранения); + + Исключение + + // Ошибка при создании выгрузки. Создаем дальше письмо, без этой выгрузки. + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ШаблонСообщения = НСтр("ru = 'Ошибка при создании файла выгрузки. По причине: + |%1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПредставлениеОшибки); + ЗаписьЖурналаРегистрации( + ИмяСобытияЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения); + ОбщегоНазначения.СообщитьПользователю(ИнформацияОбОшибке.Описание); // сообщения обрабатываются в СформироватьСообщение + + КонецПопытки; + + Для Каждого Файл Из Файлы Цикл + + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище( + Файл.ДвоичныеДанные, + ПараметрыОтправки.УникальныйИдентификатор); + Вложения.Вставить(Файл.ИмяФайла, АдресВоВременномХранилище); + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + // Функция-конструктор таблицы вложений // // Возвращаемое значение: @@ -3108,5 +3276,4 @@ КонецПроцедуры -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index d36c475d8..53dab625f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -19,17 +19,6 @@ КонецФункции -// Возвращает текущую настройку доступности усовершенствования подписей. -// -// Возвращаемое значение: -// Булево - если Истина, электронные подписи используются. -// -Функция ДоступнаУсовершенствованнаяПодпись() Экспорт - - Возврат ЭлектроннаяПодписьСлужебныйПовтИсп.ДоступнаУсовершенствованнаяПодпись(); - -КонецФункции - // Возвращает текущую настройку использования шифрования. // // Возвращаемое значение: @@ -64,22 +53,49 @@ КонецФункции +// Проверяет, что разрешена работа с Интернет-сервисами электронной подписи из приложения. +// Параметры: +// ПоказатьОшибку - Булево - вызвать исключение. +// +// Возвращаемое значение: +// Булево +// +Функция РазрешенДоступКИнтернетСервисам(ПоказатьОшибку = Ложь) Экспорт + + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(ПоказатьОшибку); + + УстановитьПривилегированныйРежим(Истина); + РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи = Константы.РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи.Получить(); + УстановитьПривилегированныйРежим(Ложь); + + РазрешенаЗагрузкаИзИнтернета = РазрешенДоступКИнтернетСервисам И РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи; + + Если Не РазрешенаЗагрузкаИзИнтернета И ПоказатьОшибку Тогда + ВызватьИсключение ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗапрещенДоступКИнтернетСервисамТекстСообщения(); + КонецЕсли; + + Возврат РазрешенаЗагрузкаИзИнтернета; + +КонецФункции + // Получает подписи объекта и возвращает их. // // Параметры: // Объект - ОпределяемыйТип.ПодписанныйОбъект - ссылка на подписанный объект. // Объект должен иметь реквизит ПодписанЭП. // -// ПорядковыйНомер - Число -// - Массив из Число -// ВозвращатьДанныеМЧД - Булево - если Истина и для подписи есть МЧД будет заполнено свойство РезультатПроверкиПодписиПоМЧД +// ДополнительныеПараметры - см. НовыйПараметрыПолученияПодписейОбъекта // // Возвращаемое значение: // Массив из см. ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи // -Функция УстановленныеПодписи(Объект, ПорядковыйНомер = Неопределено, ВозвращатьДанныеМЧД = Ложь) Экспорт +Функция ПодписиОбъекта(Объект, ДополнительныеПараметры = Неопределено) Экспорт - ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.УстановленныеПодписи", Истина); + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = НовыйПараметрыПолученияПодписейОбъекта(); + КонецЕсли; + + ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.ПодписиОбъекта", Истина); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПроверитьЧтениеРазрешено(Объект); @@ -100,11 +116,9 @@ | ЭлектронныеПодписи.ПорядковыйНомер КАК ПорядковыйНомер, | ЭлектронныеПодписи.УстановившийПодпись КАК УстановившийПодпись, | ЭлектронныеПодписи.Комментарий КАК Комментарий, - | ЭлектронныеПодписи.ИмяФайлаПодписи КАК ИмяФайлаПодписи, | ЭлектронныеПодписи.ДатаПодписи КАК ДатаПодписи, | ЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи, | ЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна, - | ЭлектронныеПодписи.Сертификат КАК Сертификат, | ЭлектронныеПодписи.Отпечаток КАК Отпечаток, | ЭлектронныеПодписи.КомуВыданСертификат КАК КомуВыданСертификат, | ЭлектронныеПодписи.ТипПодписи КАК ТипПодписи, @@ -128,20 +142,19 @@ Запрос.УстановитьПараметр("ПодписанныйОбъект", ОбъектСсылка); - Если ПорядковыйНомер = Неопределено Тогда + Если ДополнительныеПараметры.ПорядковыйНомер = Неопределено Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ЭлектронныеПодписи.ПорядковыйНомер В (&ПорядковыйНомер)", ""); Иначе - Запрос.УстановитьПараметр("ПорядковыйНомер", ПорядковыйНомер); + Запрос.УстановитьПараметр("ПорядковыйНомер", ДополнительныеПараметры.ПорядковыйНомер); КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - // Локализация - + // СтандартныеПодсистемы.МашиночитаемыеДоверенности ВыборкаДетальныеЗаписиМЧД = Неопределено; - Если Не РезультатЗапроса.Пустой() И ВозвращатьДанныеМЧД + Если Не РезультатЗапроса.Пустой() И ДополнительныеПараметры.ВозвращатьДанныеМЧД И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда ИдентификаторыПодписей = Новый Массив; @@ -154,28 +167,63 @@ ВыборкаДетальныеЗаписиМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.МЧДПодписей(ОбъектСсылка, ИдентификаторыПодписей); КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности - // Конец Локализация - - МассивЭлектронныхПодписей = Новый Массив; + РасширениеДляФайловПодписи = ПерсональныеНастройки().РасширениеДляФайловПодписи; + Результат = Новый Массив; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + СвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи(); СвойстваПодписи.ПодписанныйОбъект = Объект; ЗаполнитьЗначенияСвойств(СвойстваПодписи, ВыборкаДетальныеЗаписи); СвойстваПодписи.Подпись = СвойстваПодписи.Подпись.Получить(); - // Локализация + ИмяПодписанногоОбъекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "Наименование"); + СвойстваПодписи.ИмяФайлаПодписи = ЭлектроннаяПодписьКлиентСервер.ИмяФайлаПодписи(ИмяПодписанногоОбъекта, + ВыборкаДетальныеЗаписи.КомуВыданСертификат, РасширениеДляФайловПодписи); + Если ДополнительныеПараметры.ВозвращатьСертификатыИзПодписей Тогда + СвойстваПодписи.Сертификат = ЭлектроннаяПодписьСлужебный.СертификатИзДвоичныхДанныхПодписи(СвойстваПодписи.Подпись); + Если СвойстваПодписи.Сертификат = Неопределено И ЭлектроннаяПодписьСлужебный.КриптографияДоступна() Тогда + // Если подпись оказалась без сертификата, то пробуем получить сертификат из контейнера подписи. + ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии(); + ПараметрыСоздания.АлгоритмПодписи = + ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(СвойстваПодписи.Подпись); + + МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("ЧтениеПодписи", ПараметрыСоздания); + Если МенеджерКриптографии <> Неопределено Тогда + КонтейнерПолучен = Ложь; + Попытка + КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(СвойстваПодписи.Подпись); + КонтейнерПолучен = Истина; + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Электронная подпись.Получение контейнера подписи'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Если КонтейнерПолучен Тогда + Сертификат = КонтейнерПодписи.Подписи[0].СертификатПодписи; + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатСуществует(Сертификат) Тогда + СвойстваПодписи.Сертификат = Сертификат.Выгрузить(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ВыборкаДетальныеЗаписиМЧД <> Неопределено Тогда МодульМашиночитаемыеДоверенностиФНССлужебный.ЗаполнитьДанныеМЧДПодписи(СвойстваПодписи, ВыборкаДетальныеЗаписиМЧД); КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности - // Конец Локализация + Результат.Добавить(СвойстваПодписи); - МассивЭлектронныхПодписей.Добавить(СвойстваПодписи); КонецЦикла; - Возврат МассивЭлектронныхПодписей; + Возврат Результат; КонецФункции @@ -309,21 +357,23 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЭлектронныеПодписи"); ЭлементБлокировки.УстановитьЗначение("ПодписанныйОбъект", Объект); - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль( - "МашиночитаемыеДоверенностиФНССлужебный"); + "МашиночитаемыеДоверенностиФНССлужебный"); МодульМашиночитаемыеДоверенностиФНССлужебный.ДобавитьБлокировку(Блокировка, Объект); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Если ОбновитьПоПорядковомуНомеру Тогда - ПодписиОбъекта = УстановленныеПодписи(Объект, СвойстваПодписи.ПорядковыйНомер); + ПараметрыПолученияПодписей = НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ПорядковыйНомер = СвойстваПодписи.ПорядковыйНомер; + ПодписиОбъекта = ПодписиОбъекта(Объект, ПараметрыПолученияПодписей); Иначе - ПодписиОбъекта = УстановленныеПодписи(Объект); + ПодписиОбъекта = ПодписиОбъекта(Объект); КонецЕсли; Для Каждого ПодписьОбъекта Из ПодписиОбъекта Цикл ДвоичныеДанныеПодписи = ПодписьОбъекта.Подпись; @@ -347,7 +397,8 @@ Или КлючИЗначение.Ключ = "ДатаПодписи" Или КлючИЗначение.Ключ = "ПорядковыйНомер" Или КлючИЗначение.Ключ = "ОписаниеСертификата" - Или КлючИЗначение.Ключ = "ИдентификаторПодписи" Тогда + Или КлючИЗначение.Ключ = "ИдентификаторПодписи" + Или КлючИЗначение.Ключ = "ИмяФайлаПодписи" Тогда Продолжить; КонецЕсли; @@ -373,6 +424,7 @@ Если КлючИЗначение.Ключ = "Сертификат" Или КлючИЗначение.Ключ = "Подпись" Или КлючИЗначение.Ключ = "ОписаниеСертификата" + Или КлючИЗначение.Ключ = "ИмяФайлаПодписи" Или КлючИЗначение.Ключ = "ИдентификаторПодписи" И ЗначениеЗаполнено(ОбновляемаяПодпись.ИдентификаторПодписи) Тогда Продолжить; @@ -392,22 +444,10 @@ КонецЕсли; - Если ЗначениеЗаполнено(СвойстваПодписи.Сертификат) И Не ЗначениеЗаполнено( - ОбновляемаяПодпись.Сертификат.Получить()) Тогда - - Если ТипЗнч(СвойстваПодписи.Сертификат) = Тип("ХранилищеЗначения") Тогда - ОбновляемаяПодпись.Сертификат = СвойстваПодписи.Сертификат; - Иначе - ОбновляемаяПодпись.Сертификат = Новый ХранилищеЗначения(СвойстваПодписи.Сертификат, - Новый СжатиеДанных(9)); - КонецЕсли; - - КонецЕсли; - НаборЗаписей.Записать(Истина); КонецЕсли; - - // Локализация + + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(РезультатПроверкиПодписиПоМЧД) И ОбщегоНазначения.ПодсистемаСуществует( "СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда @@ -415,7 +455,7 @@ Объект, ОбновляемаяПодпись.ИдентификаторПодписи, РезультатПроверкиПодписиПоМЧД); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности КонецЦикла; ЗафиксироватьТранзакцию(); @@ -504,12 +544,17 @@ КонецПроцедуры -// Получает массив сертификатов шифрования. +// Возвращает сертификаты шифрования для указанного объекта. +// // Параметры: // Объект - ОпределяемыйТип.ПодписанныйОбъект - ссылка на зашифрованный объект. // // Возвращаемое значение: -// Массив - массив структур. +// Массив из Структура: +// * Отпечаток - Строка +// * Представление - Строка +// * Сертификат - ДвоичныеДанные +// * ПорядковыйНомер - Число // Функция СертификатыШифрования(Объект) Экспорт @@ -538,21 +583,18 @@ Запрос.УстановитьПараметр("ЗашифрованныйОбъект", Объект); - РезультатЗапроса = Запрос.Выполнить(); - - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - - МассивСертификатовШифрования = Новый Массив; - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Выборка = Запрос.Выполнить().Выбрать(); + Результат = Новый Массив; + Пока Выборка.Следующий() Цикл ОтпечатокСтруктура = Новый Структура; - ОтпечатокСтруктура.Вставить("Отпечаток", ВыборкаДетальныеЗаписи.Отпечаток); - ОтпечатокСтруктура.Вставить("Представление", ВыборкаДетальныеЗаписи.Представление); - ОтпечатокСтруктура.Вставить("Сертификат", ВыборкаДетальныеЗаписи.Сертификат.Получить()); - ОтпечатокСтруктура.Вставить("ПорядковыйНомер", ВыборкаДетальныеЗаписи.ПорядковыйНомер); - МассивСертификатовШифрования.Добавить(ОтпечатокСтруктура); + ОтпечатокСтруктура.Вставить("Отпечаток", Выборка.Отпечаток); + ОтпечатокСтруктура.Вставить("Представление", Выборка.Представление); + ОтпечатокСтруктура.Вставить("Сертификат", Выборка.Сертификат.Получить()); + ОтпечатокСтруктура.Вставить("ПорядковыйНомер", Выборка.ПорядковыйНомер); + Результат.Добавить(ОтпечатокСтруктура); КонецЦикла; - Возврат МассивСертификатовШифрования; + Возврат Результат; КонецФункции @@ -615,7 +657,7 @@ НовыйСертификат = НаборЗаписей.Добавить(); НовыйСертификат.ЗашифрованныйОбъект = ОбъектДанных.Ссылка; ЗаполнитьЗначенияСвойств(НовыйСертификат, СертификатШифрования); - НовыйСертификат.Сертификат = Новый ХранилищеЗначения(СертификатШифрования.Сертификат); + НовыйСертификат.Сертификат = Новый ХранилищеЗначения(СертификатШифрования.Сертификат, Новый СжатиеДанных(9)); НовыйСертификат.ПорядковыйНомер = ПорядковыйНомер; ПорядковыйНомер = ПорядковыйНомер + 1; КонецЦикла; @@ -662,46 +704,31 @@ КонецФункции -// Выполняет поиск сертификата в справочнике, возвращает ссылку, если сертификат найден. +// Возвращает ссылку на сертификат по его двоичным данным или отпечатку. // // Параметры: // Сертификат - СертификатКриптографии - сертификат. // - ДвоичныеДанные - двоичные данные сертификата. -// - Строка - строка (28) - отпечаток сертификата в формате Base64. -// - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. +// - Строка - строка (28), отпечаток сертификата в формате Base64. +// - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. // // Возвращаемое значение: +// СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования // Неопределено - сертификат не существует в справочнике. -// СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на найденный сертификат. // Функция СсылкаНаСертификат(Знач Сертификат) Экспорт - Если ТипЗнч(Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Сертификат) Тогда - Сертификат = ПолучитьИзВременногоХранилища(Сертификат); - КонецЕсли; - - Если ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда - Сертификат = Новый СертификатКриптографии(Сертификат); - КонецЕсли; - - Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда - ОтпечатокСтрокой = Base64Строка(Сертификат.Отпечаток); - Иначе - ОтпечатокСтрокой = Строка(Сертификат); - КонецЕсли; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Отпечаток", ОтпечатокСтрокой); Запрос.Текст = - "ВЫБРАТЬ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Сертификаты.Ссылка КАК Ссылка |ИЗ | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты |ГДЕ | Сертификаты.Отпечаток = &Отпечаток"; + Запрос.УстановитьПараметр("Отпечаток", ОтпечатокСертификата(Сертификат)); Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда Возврат Выборка.Ссылка; КонецЕсли; @@ -710,6 +737,58 @@ КонецФункции +// Возвращает ссылки на сертификаты по их двоичным данным или отпечатку. +// +// Параметры: +// Сертификаты - Массив из СертификатКриптографии +// - Массив из ДвоичныеДанные - двоичные данные сертификатов. +// - Массив из Строка - строка (28), отпечатки сертификатов в формате Base64. +// - Массив из Строка - адреса временных хранилищ, содержащих двоичные данные сертификатов. +// ВозвращатьНесуществующие - Булево - если указать Истина, то в возвращаемое значение будут включены пустые +// ссылки для сертификатов, отсутствующих в справочнике СертификатыКлючейЭлектроннойПодписиИШифрования. +// +// Возвращаемое значение: +// Массив из СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования +// +Функция СсылкиНаСертификаты(Знач Сертификаты, Знач ВозвращатьНесуществующие = Ложь) Экспорт + + Если Сертификаты.Количество() = 0 Тогда + Возврат Новый Массив; + КонецЕсли; + + Отпечатки = Новый Массив; + Для каждого Сертификат Из Сертификаты Цикл + Отпечатки.Добавить(ОтпечатокСертификата(Сертификат)); + КонецЦикла; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ОтпечаткиСертификатов", Отпечатки); + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Сертификаты.Ссылка КАК Ссылка, + | Сертификаты.Отпечаток КАК Отпечаток + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + |ГДЕ + | Сертификаты.Отпечаток В (&ОтпечаткиСертификатов)"; + + ОтпечаткиСертификатов = Запрос.Выполнить().Выгрузить(); + Если ВозвращатьНесуществующие Тогда + Результат = Новый Массив; + Отбор = Новый Структура("Отпечаток", ""); + Для каждого Отпечаток Из Отпечатки Цикл + Отбор.Отпечаток = Отпечаток; + Сертификат = ОтпечаткиСертификатов.НайтиСтроки(Отбор); + Результат.Добавить(?(Сертификат.Количество() > 0, Сертификат[0].Ссылка, + Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПустаяСсылка())); + КонецЦикла; + Возврат Результат; + КонецЕсли; + + Результат = ОтпечаткиСертификатов.ВыгрузитьКолонку("Ссылка"); + Возврат ОбщегоНазначенияКлиентСервер.СвернутьМассив(Результат); + +КонецФункции + // Позволяет создать и обновить элемент справочника СертификатыКлючейЭлектроннойПодписиИШифрования по // указанному сертификату криптографии. // Для добавления сертификата на клиенте см. ЭлектроннаяПодписьКлиент.ДобавитьСертификат. @@ -801,7 +880,7 @@ Иначе СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент(); - СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); + СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата, Новый СжатиеДанных(9)); СертификатОбъект.Отпечаток = Base64Строка(СертификатКриптографии.Отпечаток); СертификатОбъект.Добавил = Пользователи.АвторизованныйПользователь(); @@ -812,7 +891,7 @@ ОтменитьТранзакцию(); ВызватьИсключение(НСтр("ru = 'Недостаточно прав для изменения данных сертификата.'"), КатегорияОшибки.НарушениеПравДоступа); КонецЕсли; - СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); + СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата, Новый СжатиеДанных(9)); КонецЕсли; СвойстваСертификата = Неопределено; @@ -905,73 +984,207 @@ // Возвращает табличный документ, содержащий штамп визуализации электронной подписи. // // Параметры: -// Сертификат - СертификатКриптографии - сертификат, которым подписан документ. -// ДатаПодписи - Дата - дата подписания документа. -// ТекстОтметки - Строка - текст, выводящийся непосредственно под штампом и описывающий +// Подпись - см. ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи +// ДатаПодписи - Дата - дата подписания документа. +// ТекстОтметки - Строка - текст, выводящийся непосредственно под штампом и описывающий // расположение подлинника документа. // ЛоготипОрганизации - Картинка - если не указан, то будет использована стандартная картинка. // // Возвращаемое значение: // ТабличныйДокумент - табличный документ, содержащий готовый штамп электронной подписи. // -Функция ШтампВизуализацииЭлектроннойПодписи(Сертификат, ДатаПодписи = Неопределено, - ТекстОтметки = "", ЛоготипОрганизации = Неопределено) Экспорт - - Если ЛоготипОрганизации = Неопределено И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда - МодульОрганизацииСервер = ОбщегоНазначения.ОбщийМодуль("ОрганизацииСервер"); - СертификатСсылка = СсылкаНаСертификат(Сертификат); - Если ЗначениеЗаполнено(СертификатСсылка) Тогда - Организация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СертификатСсылка, "Организация"); - Если ЗначениеЗаполнено(Организация) Тогда - ДополнительныеСведения = МодульОрганизацииСервер.ДополнительныеСведенияОрганизации( - Организация, , ДатаПодписи); - Если ДополнительныеСведения.Свойство("ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи") Тогда - ЛоготипОрганизации = ДополнительныеСведения.ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - СвойстваСертификата = СвойстваСертификата(Сертификат); - - ПериодДействия = НСтр("ru = 'с %1 по %2'"); - ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПериодДействия, - Формат(СвойстваСертификата.ДатаНачала, "ДЛФ=D"), - Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D")); - - ПараметрыШтампа = Новый Структура; - ПараметрыШтампа.Вставить("ДатаПодписи", ДатаПодписи); - ПараметрыШтампа.Вставить("НомерСертификата", СтрЗаменить(СвойстваСертификата.СерийныйНомер, " ", "")); - ПараметрыШтампа.Вставить("ВыдалСертификат", СвойстваСертификата.КемВыдан); - ПараметрыШтампа.Вставить("ВладелецСертификата", СвойстваСертификата.КомуВыдан); - ПараметрыШтампа.Вставить("СрокДействия", ПериодДействия); - ПараметрыШтампа.Вставить("ТекстОтметки", ТекстОтметки); - - Штамп = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет("Штамп"); - ЗаполнитьЗначенияСвойств(Штамп.Параметры, ПараметрыШтампа); - Если ЛоготипОрганизации <> Неопределено Тогда - Штамп.Области.Картинка.Картинка = ЛоготипОрганизации; +Функция ШтампВизуализацииЭлектроннойПодписи(Знач Подпись, Знач ДатаПодписи = Неопределено, + Знач ТекстОтметки = "", Знач ЛоготипОрганизации = Неопределено) Экспорт + + Если ТипЗнч(Подпись) = Тип("СертификатКриптографии") Тогда + НоваяПодпись = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи(); + //@skip-check bsl-legacy-check-expression-type - для обратной совместимости + НоваяПодпись.Сертификат = Подпись; + НоваяПодпись.ДатаПодписи = ?(ДатаПодписи = Неопределено, Дата(1,1,1), ДатаПодписи); + Подпись = НоваяПодпись; + Иначе + Подпись.ДатаПодписи = ?(ДатаПодписи = Неопределено, Подпись.ДатаПодписи, ДатаПодписи); КонецЕсли; - Возврат Штамп; + Результат = ШтампыВизуализацииЭлектронныхПодписей(Неопределено, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Подпись), + ?(Не ПустаяСтрока(ТекстОтметки), ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТекстОтметки), Неопределено)); + Возврат Результат[0]; КонецФункции +// Возвращает табличные документы со штампами электронных подписей, которыми подписан указанный документ. +// +// Параметры: +// ПодписанныйФайл - ОпределяемыйТип.ПодписанныйОбъект - подписанный документ. +// Должен иметь реквизит ПодписанЭП. +// ЭлектронныеПодписи - Массив из см. ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи - если указан, то +// штампы будут сформированы по указанным электронным подписям, а не по тем, +// которым подписан ПодписанныйФайл. +// ТекстыОтметок - Массив из Строка - текст, выводящийся непосредственно под штампом и описывающий +// расположение подлинника документа. +// +// Возвращаемое значение: +// Массив из ТабличныйДокумент +// +Функция ШтампыВизуализацииЭлектронныхПодписей(Знач ПодписанныйФайл, Знач ЭлектронныеПодписи = Неопределено, + Знач ТекстыОтметок = Неопределено) Экспорт + + Если ЭлектронныеПодписи = Неопределено Тогда + ПараметрыПолученияПодписей = НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ВозвращатьДанныеМЧД = Истина; + ПараметрыПолученияПодписей.ВозвращатьСертификатыИзПодписей = Истина; + ЭлектронныеПодписи = ПодписиОбъекта(ПодписанныйФайл, ПараметрыПолученияПодписей); + КонецЕсли; + + ПериодДействияШаблон = НСтр("ru = 'с %1 по %2'"); + Индекс = 0; + ПараметрыШтампов = Новый Массив; + Сертификаты = Новый Массив; + + МодульМашиночитаемыеДоверенностиФНССлужебный = Неопределено; + МодульРаботаСФайламиПереопределяемый = Неопределено; + МодульОрганизацииСервер = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда + МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиПереопределяемый = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиПереопределяемый"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда + МодульОрганизацииСервер = ОбщегоНазначения.ОбщийМодуль("ОрганизацииСервер"); + КонецЕсли; + + Для Каждого Подпись Из ЭлектронныеПодписи Цикл + + Если Подпись.Сертификат = Неопределено Тогда + ТекстОшибки = ?(Подпись.ИмяФайлаПодписи = "", + НСтр("ru = 'Сертификат подписанта отсутствует в подписи и не найден в локальном хранилище.'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сертификат подписанта отсутствует в подписи ""%1"" и не найден в локальном хранилище.'"), + Подпись.ИмяФайлаПодписи)); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Электронная подпись.Получение штампов визуализации электронных подписей'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , + ТекстОшибки); + Продолжить; + КонецЕсли; + + Сертификат = ?(ТипЗнч(Подпись.Сертификат) = Тип("СертификатКриптографии"), // для обратной совместимости + Подпись.Сертификат, Новый СертификатКриптографии(Подпись.Сертификат)); + СвойстваСертификата = СвойстваСертификата(Сертификат); + + ПериодДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПериодДействияШаблон, + Формат(СвойстваСертификата.ДатаНачала, "ДЛФ=D"), + Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D")); + + ПараметрыШтампа = Новый Структура; + ПараметрыШтампа.Вставить("ДатаПодписи", Подпись.ДатаПодписи); + ПараметрыШтампа.Вставить("НомерСертификата", СтрЗаменить(СвойстваСертификата.СерийныйНомер, " ", "")); + ПараметрыШтампа.Вставить("ВыдалСертификат", СвойстваСертификата.КемВыдан); + ПараметрыШтампа.Вставить("ВладелецСертификата", СвойстваСертификата.КомуВыдан); + ПараметрыШтампа.Вставить("СрокДействия", ПериодДействия); + + ПараметрыШтампа.Вставить("ТекстОтметки", ?(ТекстыОтметок <> Неопределено, ТекстыОтметок[Индекс], Неопределено)); + ПараметрыШтампа.Вставить("ЛоготипОрганизации", Неопределено); + + Если МодульРаботаСФайламиПереопределяемый <> Неопределено Тогда + + ПараметрыШтампаПереопределение = Новый Структура; + ПараметрыШтампаПереопределение.Вставить("ТекстОтметки", ПараметрыШтампа.ТекстОтметки); + ПараметрыШтампаПереопределение.Вставить("Логотип", ПараметрыШтампа.ЛоготипОрганизации); + + МодульРаботаСФайламиПереопределяемый.ПриПечатиФайлаСоШтампом(ПараметрыШтампа, Сертификат); // АПК: 222 для обратной совместимости + + Если ПараметрыШтампаПереопределение.Логотип <> Неопределено И ПараметрыШтампа.ЛоготипОрганизации = Неопределено Тогда + ПараметрыШтампа.ЛоготипОрганизации = ПараметрыШтампаПереопределение.Логотип; + КонецЕсли; + Если ПараметрыШтампаПереопределение.ТекстОтметки <> Неопределено И ПараметрыШтампа.ТекстОтметки = Неопределено Тогда + ПараметрыШтампа.ТекстОтметки = ПараметрыШтампаПереопределение.ТекстОтметки; + КонецЕсли; + + КонецЕсли; + + Если МодульМашиночитаемыеДоверенностиФНССлужебный <> Неопределено + И ЗначениеЗаполнено(Подпись.РезультатПроверкиПодписиПоМЧД) + И Подпись.РезультатПроверкиПодписиПоМЧД.Количество() > 0 Тогда + + ДанныеДоверенностиДляПечати = МодульМашиночитаемыеДоверенностиФНССлужебный.ДанныеДоверенностиДляПечати( + Подпись.РезультатПроверкиПодписиПоМЧД[0].МашиночитаемаяДоверенность, ПараметрыШтампа.ДатаПодписи); + + ДоверенностьСтрокой = ДанныеДоверенностиДляПечати.ПредставлениеДоверенности; + Если ПараметрыШтампа.ЛоготипОрганизации = Неопределено Тогда + ПараметрыШтампа.ЛоготипОрганизации = ДанныеДоверенностиДляПечати.ЛоготипОрганизации; + КонецЕсли; + Иначе + ДоверенностьСтрокой = ""; + КонецЕсли; + ПараметрыШтампа.Вставить("Доверенность", ДоверенностьСтрокой); + + Если МодульОрганизацииСервер <> Неопределено И ПараметрыШтампа.ЛоготипОрганизации = Неопределено Тогда + Сертификаты.Добавить(Сертификат); + КонецЕсли; + + ПараметрыШтампов.Добавить(ПараметрыШтампа); + Индекс = Индекс + 1; + КонецЦикла; + + Если МодульОрганизацииСервер <> Неопределено И Сертификаты.Количество() > 0 Тогда + СертификатыСсылки = СсылкиНаСертификаты(Сертификаты, Истина); + ОрганизацииСсылки = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(СертификатыСсылки, "Организация"); + Индекс = 0; + Для каждого ПараметрыШтампа Из ПараметрыШтампов Цикл + СертификатСсылка = СертификатыСсылки[Индекс]; + Если Не ЗначениеЗаполнено(СертификатСсылка) Тогда + Продолжить; + КонецЕсли; + Организация = ОрганизацииСсылки[СертификатСсылка]; + Если Не ЗначениеЗаполнено(Организация) Тогда + Продолжить; + КонецЕсли; + + ДополнительныеСведения = МодульОрганизацииСервер.ДополнительныеСведенияОрганизации(Организация, + "ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи", ЭлектронныеПодписи[Индекс].ДатаПодписи); + Если ДополнительныеСведения.Свойство("ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи") Тогда + ПараметрыШтампа.ЛоготипОрганизации = ДополнительныеСведения.ЭмблемаОрганизацииДляШтампаЭлектроннойПодписи; + КонецЕсли; + + Индекс = Индекс + 1; + КонецЦикла; + КонецЕсли; + + Результат = Новый Массив; + Индекс = 0; + Для Каждого ПараметрыШтампа Из ПараметрыШтампов Цикл + ИмяМакета = ?(Не ПустаяСтрока(ПараметрыШтампа.Доверенность), "ШтампРасширенный", "Штамп"); + Штамп = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет(ИмяМакета); + ПараметрыШтампа.ДатаПодписи = Формат(ПараметрыШтампа.ДатаПодписи, "ДЛФ=DT;"); + ЗаполнитьЗначенияСвойств(Штамп.Параметры, ПараметрыШтампа); + Если ПараметрыШтампа.ЛоготипОрганизации <> Неопределено Тогда + Штамп.Области.Картинка.Картинка = ПараметрыШтампа.ЛоготипОрганизации; + КонецЕсли; + Результат.Добавить(Штамп); + Индекс = Индекс + 1; + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Размещает штампы в переданном табличном документе. // // Параметры: // Документ - ТабличныйДокумент - табличный документ, в который требуется добавить штампы. -// ОписаниеШтампов - Массив - массив табличных документов, содержащих штампы, полученные -// функцией ЭлектроннаяПодпись.ШтампВизуализацииЭлектроннойПодписи. -// В данном случае переданные штампы будут выведены в конец документа, -// если в макете подписываемого табличного документа не определены области -// для размещения штампов, которые удовлетворяют следующим условиям: -// а) область вывода штампа размером две колонки и семь строк, с -// произвольной шириной колонок; -// б) имя области задано как ШтампЭП + порядковый номер штампа, -// например: ШтампЭП1 и т.д. -// В таком случае штампы будут выведены в заданные области в том -// порядке, в котором документ был подписан. +// ОписаниеШтампов - Массив из ТабличныйДокумент - штампы, полученные функцией +// ЭлектроннаяПодпись.ШтампВизуализацииЭлектроннойПодписи. +// Переданные штампы будут выведены в конец документа, либо в области для размещения +// штампов, если они определены в макете табличного документа: +// а) имя области задано как "ШтампЭП" + порядковый номер штампа, +// например: "ШтампЭП1" и т.д. +// б) область вывода штампа размером в две колонки и семь строк, с произвольной +// шириной колонок. +// В таком случае штампы будут выведены в заданные области в порядке +// их следования в параметре ОписаниеШтампов. // - Соответствие из КлючИЗначение - описывает места вывода штампов, где: // * Ключ - Строка - имя области, куда выводить штамп. Для такой области должна // быть установлена произвольная ширина колонок, @@ -1003,12 +1216,22 @@ Для Каждого Штамп Из ОписаниеШтампов Цикл ИмяОбласти = "ШтампЭП" + Строка(ИндексШтампа); - ОбластьНайдена = Документ.Области.Найти(ИмяОбласти) <> Неопределено; + ОбластьНайдена = Ложь; + Для Каждого ОчереднаяОбласть Из Документ.Области Цикл + Если СтрНачинаетсяС(ОчереднаяОбласть.Имя, ИмяОбласти) Тогда + ОбластьНайдена = Истина; + ИмяОбласти = ОчереднаяОбласть.Имя; + Прервать; + КонецЕсли; + КонецЦикла; Если ОбластьНайдена Тогда - Документ.ВставитьОбласть(Штамп.Области.Штамп, Документ.Области[ИмяОбласти],, Истина); - Документ.Области.ШтампЛеваяКолонка.ШиринаКолонки = Размеры.ЛеваяКолонка; - Документ.Области.ШтампПраваяКолонка.ШиринаКолонки = Размеры.ПраваяКолонка; + ОбластьШтампа = Документ.Области[ИмяОбласти]; + Документ.ВставитьОбласть(Штамп.Области.Штамп, ОбластьШтампа,, Истина); + Документ.Область(ОбластьШтампа.Верх, ОбластьШтампа.Лево, ОбластьШтампа.Верх, ОбластьШтампа.Лево).ШиринаКолонки = Размеры.ЛеваяКолонка; + Документ.Область(ОбластьШтампа.Верх, ОбластьШтампа.Право, ОбластьШтампа.Верх, ОбластьШтампа.Право).ШиринаКолонки = Размеры.ПраваяКолонка; + Документ.Область(ОбластьШтампа.Верх, , ОбластьШтампа.Низ).ВысотаСтроки = 0; + Документ.Область(ОбластьШтампа.Верх, , ОбластьШтампа.Низ).АвтоВысотаСтроки = Истина; Иначе НомерШтампаВСтроке = НомерШтампаВСтроке + 1; @@ -1098,6 +1321,10 @@ ОстатокШирины = ШиринаСтрокиШтампов; + Иначе + + ВысотаКонец = ВысотаНачало + ВысотаШтампа; + КонецЕсли; ШиринаКонец = ШиринаНачало - 1 + ШиринаШтампа; @@ -1107,6 +1334,15 @@ ОбластьПриемник = Документ.Область(ВысотаНачало, ШиринаНачало, ВысотаКонец, ШиринаКонец); Документ.ВставитьОбласть(ИсходнаяОбласть, ОбластьПриемник, , Истина); + Для Каждого ОчереднаяОбласть Из Документ.Области Цикл + ИмяОбласти = ОчереднаяОбласть.Имя; + Если СтрНачинаетсяС(ИмяОбласти, "Документ") И СтрНайти(ИмяОбласти, "Устарела") = 0 Тогда + ОчереднаяОбласть.Имя = ИмяОбласти+"_Устарела_"+ИндексШтампа; + Документ.Область().Имя = ИмяОбласти; + Прервать; + КонецЕсли; + КонецЦикла; + Документ.Области.ШтампЛеваяКолонка.ШиринаКолонки = Размеры.ЛеваяКолонка; Документ.Области.ШтампПраваяКолонка.ШиринаКолонки = Размеры.ПраваяКолонка; Документ.Области.ОтступШтампа.ШиринаКолонки = 3; @@ -1167,7 +1403,7 @@ КонецФункции -// Возвращает основные свойства сертификата в виде структуры. +// Возвращает основные свойства сертификата. // // Параметры: // Сертификат - СертификатКриптографии - сертификат криптографии. @@ -1188,6 +1424,11 @@ // * Назначение - Строка - описание расширенного свойства сертификата EKU. // * Подписание - Булево - свойство сертификата ИспользоватьДляПодписи. // * Шифрование - Булево - свойство сертификата ИспользоватьДляШифрования. +// На платформе 8.3.27 и выше структура содержит свойства: +// * ИдентификаторКлючаУдостоверяющегоЦентра - Строка - идентификатор ключа издателя. +// * АлгоритмПодписи - Строка - OID алгоритма подписи сертификата. +// * АлгоритмОткрытогоКлюча - Строка - OID алгоритма открытого ключа сертификата. +// * АдресаСписковОтзыва - Массив из Строка // Функция СвойстваСертификата(Сертификат) Экспорт @@ -1222,20 +1463,21 @@ КонецФункции -// Ищет текст ошибки в классификаторе типовых проблем при работе с электронной подписью и, -// если находит, возвращает причины ее возникновения и способы устранения. +// Возвращает причины возникновения и способы устранения проблемы по классификатору типовых проблем +// при работе с электронной подписью. +// Рекомендуется вызывать после всех неудачных криптографических операций на сервере для записи в журнал регистрации. // // Параметры: -// ТекстДляПоискаВКлассификаторе - Строка - текст, по которому осуществляется поиск в классификаторе. -// ОшибкаНаСервере - Булево - (по умолчанию Ложь) контекст возникновения ошибки (причины и решения -// на клиенте и сервере могут отличаться). +// ТекстДляПоискаВКлассификаторе - Строка - описание проблемы, по которому осуществляется поиск в классификаторе. +// ОшибкаНаСервере - Булево - место возникновения проблемы, т.к. причины и решения +// на клиенте и сервере могут отличаться. По умолчанию Ложь. // // Возвращаемое значение: -// Неопределено - ошибка не существует в классификаторе. +// Неопределено - проблема не описана в классификаторе. // Структура: -// * Причина - Строка - возможные причины возникновения ошибки. -// * Решение - Строка - возможные способы решения возникшей ошибки. -// * СпособУстранения - Строка - идентификатор способа автоматического устранения ошибки. +// * Причина - Строка - возможные причины возникновения проблемы. +// * Решение - Строка - возможные способы решения возникшей проблемы. +// * СпособУстранения - Строка - идентификатор способа автоматического устранения проблемы. // * Ссылка - Строка - идентификатора якоря в статье на сайте ИТС. // Функция ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере = Ложь) Экспорт @@ -1474,29 +1716,31 @@ Иначе ПараметрыУсовершенствования.МенеджерКриптографии = ДополнительныеПараметры; КонецЕсли; - + Результат = Новый Структура("Успех, ТекстОшибки, СвойстваПодписи", Ложь); - УстановленныеПодписи = УстановленныеПодписи(ПодписанныйОбъект, ПорядковыйНомер); + ПараметрыПолученияПодписей = НовыйПараметрыПолученияПодписейОбъекта(); + ПараметрыПолученияПодписей.ПорядковыйНомер = ПорядковыйНомер; + ПодписиОбъекта = ПодписиОбъекта(ПодписанныйОбъект, ПараметрыПолученияПодписей); - Если УстановленныеПодписи.Количество() = 0 Тогда + Если ПодписиОбъекта.Количество() = 0 Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось найти подпись с порядковым номером %1 у %2'"), ПорядковыйНомер, ПодписанныйОбъект); Возврат Результат; КонецЕсли; - - СвойстваПодписи = УстановленныеПодписи[0]; + + СвойстваПодписи = ПодписиОбъекта[0]; Подпись = СвойстваПодписи.Подпись; Результат = УсовершенствоватьПодпись(Подпись, ТипПодписи, ДобавитьАрхивнуюМеткуВремени, ПараметрыУсовершенствования); - + Если Результат.СвойстваПодписи = Неопределено Тогда Возврат Результат; КонецЕсли; Результат.СвойстваПодписи.ПодписанныйОбъект = ПодписанныйОбъект; Результат.СвойстваПодписи.ПорядковыйНомер = ПорядковыйНомер; - + Если Результат.СвойстваПодписи.Подпись = Неопределено Тогда // Подпись не была усовершенствована, но, возможно, требуется обновление данных. Если СвойстваПодписи.ТипПодписи = Результат.СвойстваПодписи.ТипПодписи @@ -1523,9 +1767,46 @@ КонецФункции +// Конструктор для описания дополнительных параметров получения электронных подписей объекта. +// +// Возвращаемое значение: +// Структура: +// * ПорядковыйНомер - Число - порядковый номер подписи для отбора. +// - Массив из Число - массив из порядковых номеров подписи для отбора. +// * ВозвращатьДанныеМЧД - Булево - если Истина и для подписи есть МЧД, будет заполнено свойство РезультатПроверкиПодписиПоМЧД +// * ВозвращатьСертификатыИзПодписей - Булево - если Истина, будет выполнено получение сертификатов из двоичных +// данных подписей. +// +Функция НовыйПараметрыПолученияПодписейОбъекта() Экспорт + + Структура = Новый Структура; + Структура.Вставить("ПорядковыйНомер", Неопределено); + Структура.Вставить("ВозвращатьДанныеМЧД", Ложь); + Структура.Вставить("ВозвращатьСертификатыИзПодписей", Ложь); + + Возврат Структура; + +КонецФункции + +// Извлекает сертификат из двоичных данных подписи. +// +// Параметры: +// Подпись - ДвоичныеДанные - результат подписания +// +// Возвращаемое значение: +// ДвоичныеДанные - двоичные данные сертификата. +// Неопределено - подпись не содержит сертификатов криптографии. +// +Функция СертификатИзДвоичныхДанныхПодписи(Подпись) Экспорт + + Возврат ЭлектроннаяПодписьСлужебный.СертификатИзДвоичныхДанныхПодписи(Подпись); + +КонецФункции + #Область ДляВызоваИзДругихПодсистем -// Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека электронных документов. +// Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека электронных документов +// и 1С:Библиотека регламентированной отчетности. // Возвращает менеджер криптографии (на сервере) для указанной программы. // @@ -1601,7 +1882,7 @@ // Параметры: // ПараметрыПроверки - Неопределено, Структура: // * ПроверяемыеПрограммы - Неопределено - (по умолчанию) возвращаются все установленные программы. -// - Булево - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.АктуальныеАлгоритмыПрограмм +// - Булево - см. ЭлектроннаяПодписьКлиентСерверЛокализация.АктуальныеАлгоритмыПрограмм // - ДвоичныеДанные - данные подписи или сертификата, для проверки наличия подходящих программ. // - Строка - адрес во временном хранилище данных подписи или сертификата, // для проверки наличия подходящих программ. @@ -1727,6 +2008,7 @@ РезультатПроверки = Ложь; НеверныйХеш = Неопределено; + ДатаПодписиИзМетки = Неопределено; СвойстваПодписи = Неопределено; ВызыватьИсключение = ОписаниеОшибки = Null; @@ -1934,25 +2216,22 @@ ОшибкаПроверкиПодписи = ""; Попытка МенеджерКриптографииДляПроверки.ПроверитьПодпись(ИсходныеДанныеДляПроверки, ПодписьДляПроверки, Сертификат, Ложь); + НеверныйХеш = Ложь; Исключение НеверныйХеш = Истина; ОшибкаПроверкиПодписи = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; - Если ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда - СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии( + СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии( ПодписьДляПроверки, МенеджерКриптографииДляПроверки, Сертификат = Неопределено); - Если ПустаяСтрока(ОшибкаПроверкиПодписи) И СвойстваПодписи.ТипПодписи <> Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS - И СвойстваПодписи.ТипПодписи <> Перечисления.ТипыПодписиКриптографии.БазоваяCAdESBES Тогда - Попытка - МенеджерКриптографииДляПроверки.ПроверитьПодпись(ИсходныеДанныеДляПроверки, ПодписьДляПроверки, - Сертификат, Истина); - Исключение - ОшибкаПроверкиПодписи = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; - Иначе - СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиИзДвоичныхДанных(ПодписьДляПроверки, Сертификат = Неопределено); + Если ПустаяСтрока(ОшибкаПроверкиПодписи) И СвойстваПодписи.ТипПодписи <> Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS + И СвойстваПодписи.ТипПодписи <> Перечисления.ТипыПодписиКриптографии.БазоваяCAdESBES Тогда + Попытка + МенеджерКриптографииДляПроверки.ПроверитьПодпись(ИсходныеДанныеДляПроверки, ПодписьДляПроверки, + Сертификат, Истина); + Исключение + ОшибкаПроверкиПодписи = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; КонецЕсли; СвойстваСертификата = Неопределено; @@ -1992,6 +2271,9 @@ ДополнительныеПараметры = ЭлектроннаяПодписьСлужебный.ДополнительныеПараметрыПроверкиСертификата(); ДополнительныеПараметры.ДляПроверкиПодписи = Истина; + Если СвойстваПодписи <> Неопределено И ЗначениеЗаполнено(СвойстваПодписи.ДатаПодписиИзМетки) Тогда + ДополнительныеПараметры.УказанаДатаМеткиВремени = Истина; + КонецЕсли; Если РезультатСтруктура = Неопределено Тогда ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные(); Иначе @@ -2034,7 +2316,7 @@ // ОписаниеОшибки - Null - вызвать исключение при ошибке проверки. // - Строка - содержит описание ошибки, если произошла ошибка. // -// НаДату - Дата - проверить сертификат на указанную дату. +// НаДату - Дата - проверить сертификат на указанную дату в часовом поясе информационной базы. // Если параметр не указан или указана пустая дата, // тогда проверять на текущую дату сеанса. // ПараметрыПроверки - см. ЭлектроннаяПодписьКлиент.ПараметрыПроверкиСертификата @@ -2189,7 +2471,7 @@ ОбновитьЗначение(ПрограммаОбъект.ПометкаУдаления, Ложь); Если Не ЗначениеЗаполнено(ПрограммаОбъект.РежимИспользования) Тогда - ОбновитьЗначение(ПрограммаОбъект.РежимИспользования, Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроена); + ОбновитьЗначение(ПрограммаОбъект.РежимИспользования, Перечисления.РежимыИспользованияПрограммыЭлектроннойПодписи.Настроено); КонецЕсли; Строки = ПоставляемыеНастройки.НайтиСтроки(Отбор); @@ -2307,7 +2589,16 @@ КонецФункции -// Локализация +// Сохраняет настройки текущего пользователя для работы с электронной подписью. +// +// Параметры: +// ПерсональныеНастройки - см. ПерсональныеНастройки +// +Процедура СохранитьПерсональныеНастройки(ПерсональныеНастройки) Экспорт + + ЭлектроннаяПодписьСлужебный.СохранитьПерсональныеНастройки(ПерсональныеНастройки); + +КонецПроцедуры // Проверяет, завершил ли сервис УЦ обработку отправленного заявления, // обновляет состояние заявления, получает сертификат из сервиса УЦ, если доступен. @@ -2324,15 +2615,16 @@ // Функция СостояниеЗаявленияНаВыпускСертификата(Сертификат) Экспорт - ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( - "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); - Возврат ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.СостояниеЗаявленияНаВыпускСертификата( - Сертификат); + Результат = Новый Структура; + Результат.Вставить("ЗаявлениеОбработано", Ложь); + Результат.Вставить("ЗаявлениеОтклонено", Ложь); + + ЭлектроннаяПодписьЛокализация.ПриПолученииСостоянияЗаявленияНаВыпускСертификата(Сертификат, Результат); + + Возврат Результат; КонецФункции -// Конец Локализация - #КонецОбласти // Возвращает доступность создания заявления на выпуск @@ -2350,21 +2642,151 @@ // Функция ДоступностьСозданияЗаявления() Экспорт - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда - ЗаявлениеДоступно = ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно; - ДоступностьСозданияЗаявления = Новый Структура; - ДоступностьСозданияЗаявления.Вставить("ДляФизическихЛиц", ЗаявлениеДоступно); - ДоступностьСозданияЗаявления.Вставить("ДляРуководителейЮридическихЛиц", ЗаявлениеДоступно); - ДоступностьСозданияЗаявления.Вставить("ДляСотрудниковЮридическихЛиц", ЗаявлениеДоступно); - ДоступностьСозданияЗаявления.Вставить("ДляИндивидуальныхПредпринимателей", ЗаявлениеДоступно); - Возврат ДоступностьСозданияЗаявления; - КонецЕсли; + ЗаявлениеДоступно = ОбщиеНастройки().ЗаявлениеНаВыпускСертификатаДоступно; - МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация"); - Возврат МодульЭлектроннаяПодписьСлужебныйЛокализация.ДоступностьСозданияЗаявления(); + ДоступностьСозданияЗаявления = Новый Структура; + ДоступностьСозданияЗаявления.Вставить("ДляФизическихЛиц", ЗаявлениеДоступно); + ДоступностьСозданияЗаявления.Вставить("ДляРуководителейЮридическихЛиц", ЗаявлениеДоступно); + ДоступностьСозданияЗаявления.Вставить("ДляСотрудниковЮридическихЛиц", ЗаявлениеДоступно); + ДоступностьСозданияЗаявления.Вставить("ДляИндивидуальныхПредпринимателей", ЗаявлениеДоступно); + + ЭлектроннаяПодписьЛокализация.ПриОпределенииДоступностиСозданияЗаявления(ДоступностьСозданияЗаявления); + + Возврат ДоступностьСозданияЗаявления; КонецФункции +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Всегда возвращает Истина. +// +// Возвращаемое значение: +// Булево - если Истина, электронные подписи используются. +// +Функция ДоступнаУсовершенствованнаяПодпись() Экспорт + + Возврат Истина; + +КонецФункции + +// Устарела. Следует использовать ПодписиОбъекта. +// Получает подписи объекта и возвращает их. +// +// Параметры: +// Объект - ОпределяемыйТип.ПодписанныйОбъект - ссылка на подписанный объект. +// Объект должен иметь реквизит ПодписанЭП. +// +// ПорядковыйНомер - Число +// - Массив из Число +// ВозвращатьДанныеМЧД - Булево - если Истина и для подписи есть МЧД будет заполнено свойство РезультатПроверкиПодписиПоМЧД +// +// Возвращаемое значение: +// Массив из см. ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи +// +Функция УстановленныеПодписи(Объект, ПорядковыйНомер = Неопределено, ВозвращатьДанныеМЧД = Ложь) Экспорт + + ПроверитьПараметрОбъект(Объект, "ЭлектроннаяПодпись.УстановленныеПодписи", Истина); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьЧтениеРазрешено(Объект); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Объект)) Тогда + ОбъектСсылка = Объект; + Иначе + ОбъектСсылка = Объект.Ссылка; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЭлектронныеПодписи.Подпись КАК Подпись, + | ЭлектронныеПодписи.ПорядковыйНомер КАК ПорядковыйНомер, + | ЭлектронныеПодписи.УстановившийПодпись КАК УстановившийПодпись, + | ЭлектронныеПодписи.Комментарий КАК Комментарий, + | ЭлектронныеПодписи.ДатаПодписи КАК ДатаПодписи, + | ЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи, + | ЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна, + | ЭлектронныеПодписи.Отпечаток КАК Отпечаток, + | ЭлектронныеПодписи.КомуВыданСертификат КАК КомуВыданСертификат, + | ЭлектронныеПодписи.ТипПодписи КАК ТипПодписи, + | ЭлектронныеПодписи.ТребуетсяПроверка КАК ТребуетсяПроверка, + | ЭлектронныеПодписи.СрокДействияПоследнейМеткиВремени КАК СрокДействияПоследнейМеткиВремени, + | ЭлектронныеПодписи.ИдентификаторПодписи КАК ИдентификаторПодписи, + | ЭлектронныеПодписи.ПодписьМатематическиВерна, + | ЭлектронныеПодписи.ОшибкаМатематическойПроверкиПодписи, + | ЭлектронныеПодписи.ОшибкаПроверкиДополнительныхАтрибутов, + | ЭлектронныеПодписи.ДополнительныеАтрибутыПровереныВручную, + | ЭлектронныеПодписи.АвторРучнойПроверкиДополнительныхАтрибутов, + | ЭлектронныеПодписи.ОбоснованиеРучнойПроверкиДополнительныхАтрибутов + |ИЗ + | РегистрСведений.ЭлектронныеПодписи КАК ЭлектронныеПодписи + |ГДЕ + | ЭлектронныеПодписи.ПодписанныйОбъект = &ПодписанныйОбъект + | И ЭлектронныеПодписи.ПорядковыйНомер В (&ПорядковыйНомер) + | + |УПОРЯДОЧИТЬ ПО + | ПорядковыйНомер"; + + Запрос.УстановитьПараметр("ПодписанныйОбъект", ОбъектСсылка); + + Если ПорядковыйНомер = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ЭлектронныеПодписи.ПорядковыйНомер В (&ПорядковыйНомер)", ""); + Иначе + Запрос.УстановитьПараметр("ПорядковыйНомер", ПорядковыйНомер); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + // СтандартныеПодсистемы.МашиночитаемыеДоверенности + ВыборкаДетальныеЗаписиМЧД = Неопределено; + + Если Не РезультатЗапроса.Пустой() И ВозвращатьДанныеМЧД + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда + + ИдентификаторыПодписей = Новый Массив; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ИдентификаторыПодписей.Добавить(ВыборкаДетальныеЗаписи.ИдентификаторПодписи); + КонецЦикла; + ВыборкаДетальныеЗаписи.Сбросить(); + + МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный"); + ВыборкаДетальныеЗаписиМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.МЧДПодписей(ОбъектСсылка, ИдентификаторыПодписей); + + КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности + + РасширениеДляФайловПодписи = ПерсональныеНастройки().РасширениеДляФайловПодписи; + МассивЭлектронныхПодписей = Новый Массив; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + СвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи(); + СвойстваПодписи.ПодписанныйОбъект = Объект; + ЗаполнитьЗначенияСвойств(СвойстваПодписи, ВыборкаДетальныеЗаписи); + СвойстваПодписи.Подпись = СвойстваПодписи.Подпись.Получить(); + СвойстваПодписи.Сертификат = ЭлектроннаяПодписьСлужебный.СертификатИзДвоичныхДанныхПодписи(СвойстваПодписи.Подпись, Истина); + + ИмяПодписанногоОбъекта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "Наименование"); + СвойстваПодписи.ИмяФайлаПодписи = ЭлектроннаяПодписьКлиентСервер.ИмяФайлаПодписи(ИмяПодписанногоОбъекта, + ВыборкаДетальныеЗаписи.КомуВыданСертификат, РасширениеДляФайловПодписи); + + // СтандартныеПодсистемы.МашиночитаемыеДоверенности + Если ВыборкаДетальныеЗаписиМЧД <> Неопределено Тогда + МодульМашиночитаемыеДоверенностиФНССлужебный.ЗаполнитьДанныеМЧДПодписи(СвойстваПодписи, ВыборкаДетальныеЗаписиМЧД); + КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности + + МассивЭлектронныхПодписей.Добавить(СвойстваПодписи); + КонецЦикла; + + Возврат МассивЭлектронныхПодписей; + +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -2486,6 +2908,10 @@ // ** Значение - Строка - путь к программе на компьютере пользователя. // * РасширениеДляФайловПодписи - Строка - расширение для файлов ЭП. // * РасширениеДляЗашифрованныхФайлов - Строка - расширение для зашифрованных файлов. +// * СохранятьСертификатВместеСПодписью - Булево +// * ПутьККаталогуДиагностики - Соответствие из КлючИЗначение: +// ** Ключ - УникальныйИдентификатор - идентификатор клиента. +// ** Значение - Строка - путь к каталогу. // // См. также: // ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования - место определения данных параметров и @@ -2500,6 +2926,7 @@ ПерсональныеНастройки.Вставить("РасширениеДляФайловПодписи", "p7s"); ПерсональныеНастройки.Вставить("РасширениеДляЗашифрованныхФайлов", "p7m"); ПерсональныеНастройки.Вставить("СохранятьСертификатВместеСПодписью", Ложь); + ПерсональныеНастройки.Вставить("ПутьККаталогуДиагностики", Новый Соответствие); КлючПодсистемы = ЭлектроннаяПодписьСлужебный.КлючХраненияНастроек(); @@ -2523,7 +2950,7 @@ // Параметры: // Данные - ДвоичныеДанные // Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования -// АлгоритмШифрования - Строка - (необязательный) - содержит явное название ("Магма", "Кузнечик", "ГОСТ 28147-89"), +// АлгоритмШифрования - Строка - содержит явное название ("Магма", "Кузнечик", "ГОСТ 28147-89"), // OID или представление алгоритма шифрования,которым будет переопределен алгоритм шифрования по умолчанию. // Например, если передается представление "Магма", то это наименование будет преобразовано в название // алгоритма шифрования той программы, которой выполняется шифрование. @@ -2571,9 +2998,7 @@ Возврат ЭлектроннаяПодписьСлужебный.ЗашифроватьВстроеннымКриптопровайдером( Данные, ДвоичныеДанныеСертификата); - ИначеЕсли Не ОбщегоНазначения.РазделениеВключено() - И (ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Или ОбщегоНазначения.ИнформационнаяБазаФайловая()) - Тогда + ИначеЕсли ЭлектроннаяПодписьСлужебный.КриптографияДоступна() Тогда ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии(); ПараметрыСоздания.Программа = ЗначенияРеквизитов.Программа; @@ -2615,8 +3040,7 @@ АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДвоичныеДанныеСертификата); - Если Не ОбщегоНазначения.РазделениеВключено() И (ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере - Или ОбщегоНазначения.ИнформационнаяБазаФайловая()) Тогда + Если ЭлектроннаяПодписьСлужебный.КриптографияДоступна() Тогда ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии(); ПараметрыСоздания.ОписаниеОшибки = ""; @@ -2688,29 +3112,13 @@ #Область ОбработчикиРегламентныхЗаданий -// Локализация - -// Регламентное задание. -Процедура ОбновлениеСостоянияЗаявленияНаВыпускСертификата(Сертификат) Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( - Метаданные.РегламентныеЗадания.ОбновлениеСостоянияЗаявленияНаВыпускСертификата); - ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( - "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); - ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ОбновлениеСостоянияЗаявленияРегламентноеЗадание( - Сертификат); - -КонецПроцедуры - -// Конец Локализация - // Регламентное задание. Процедура ПродлениеДостоверностиПодписей() Экспорт ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( Метаданные.РегламентныеЗадания.ПродлениеДостоверностиПодписей); - Если Не ИспользоватьЭлектронныеПодписи() Или Не ДоступнаУсовершенствованнаяПодпись() Тогда + Если Не ИспользоватьЭлектронныеПодписи() Тогда Возврат; КонецЕсли; @@ -2833,8 +3241,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции // Для процедуры ДобавитьПодпись. Процедура ДобавитьСтрокиПодписи(ОбъектДанных, СвойстваПодписей, СообщениеЖурналаРегистрации) @@ -2874,15 +3281,10 @@ НовыеСвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи(); ЗаполнитьЗначенияСвойств(НовыеСвойстваПодписи, СвойстваПодписи); - ЗаполнитьЗначенияСвойств(НоваяЗапись, СвойстваПодписи, , "Подпись, Сертификат"); + ЗаполнитьЗначенияСвойств(НоваяЗапись, СвойстваПодписи, , "Подпись"); НоваяЗапись.ПодписанныйОбъект = ОбъектДанных.Ссылка; НоваяЗапись.Подпись = Новый ХранилищеЗначения(СвойстваПодписи.Подпись, Новый СжатиеДанных(9)); - Если ТипЗнч(СвойстваПодписи.Сертификат) = Тип("ХранилищеЗначения") Тогда - НоваяЗапись.Сертификат = СвойстваПодписи.Сертификат; - Иначе - НоваяЗапись.Сертификат = Новый ХранилищеЗначения(СвойстваПодписи.Сертификат, Новый СжатиеДанных(9)); - КонецЕсли; НоваяЗапись.ПорядковыйНомер = ПорядковыйНомер; @@ -2921,7 +3323,7 @@ НоваяЗапись.Записать(); - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(НовыеСвойстваПодписи.РезультатПроверкиПодписиПоМЧД) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда @@ -2930,13 +3332,13 @@ ОбъектДанных.Ссылка, НоваяЗапись.ИдентификаторПодписи, НовыеСвойстваПодписи.РезультатПроверкиПодписиПоМЧД); КонецЕсли; - // Конец Локализация - + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности + ЗаписьЖурналаРегистрации( НСтр("ru = 'Электронная подпись.Добавление подписи'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, ОбъектДанных.Метаданные(), ОбъектДанных.Ссылка, СообщениеЖурналаРегистрации, РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - + ПорядковыйНомер = ПорядковыйНомер + 1; КонецЦикла; @@ -2957,25 +3359,26 @@ КонецЕсли; Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЭлектронныеПодписи.ПорядковыйНомер КАК ПорядковыйНомер, + | ЭлектронныеПодписи.ПодписанныйОбъект КАК ПодписанныйОбъект, + | 0 КАК ЕстьПодписиПоМЧД + |ИЗ + | РегистрСведений.ЭлектронныеПодписи КАК ЭлектронныеПодписи + |ГДЕ + | ЭлектронныеПодписи.ПорядковыйНомер В(&МассивПорядковыхНомеров) + | И ЭлектронныеПодписи.ПодписанныйОбъект = &ПодписанныйОбъект + | + |УПОРЯДОЧИТЬ ПО + | ПорядковыйНомер УБЫВ"; + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный"); Запрос.Текст = МодульМашиночитаемыеДоверенностиФНССлужебный.ТекстЗапросаДляУдаленияЭлектронныхПодписей(); - Иначе - Запрос.Текст = - "ВЫБРАТЬ - | ЭлектронныеПодписи.ПорядковыйНомер КАК ПорядковыйНомер, - | ЭлектронныеПодписи.ПодписанныйОбъект КАК ПодписанныйОбъект, - | 0 КАК ЕстьПодписиПоМЧД - |ИЗ - | РегистрСведений.ЭлектронныеПодписи КАК ЭлектронныеПодписи - |ГДЕ - | ЭлектронныеПодписи.ПорядковыйНомер В(&МассивПорядковыхНомеров) - | И ЭлектронныеПодписи.ПодписанныйОбъект = &ПодписанныйОбъект - | - |УПОРЯДОЧИТЬ ПО - | ПорядковыйНомер УБЫВ"; КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Запрос.УстановитьПараметр("МассивПорядковыхНомеров", МассивПорядковыхНомеров); Запрос.УстановитьПараметр("ПодписанныйОбъект", ПодписанныйОбъект.Ссылка); @@ -2988,9 +3391,7 @@ ЭлементБлокировки.УстановитьЗначение("ПодписанныйОбъект", ПодписанныйОбъект.Ссылка); Блокировка.Заблокировать(); - РезультатЗапроса = Запрос.Выполнить(); - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - + ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Если ВыборкаДетальныеЗаписи.Количество() <> МассивПорядковыхНомеров.Количество() Тогда ВызватьИсключение НСтр("ru = 'Строка с подписью не существует.'"); КонецЕсли; @@ -3004,8 +3405,9 @@ ЕстьПрава = ЕстьПраваНаУдалениеЧужихПодписей Или МенеджерЗаписи.УстановившийПодпись = Пользователи.АвторизованныйПользователь(); + Сертификат = ЭлектроннаяПодписьСлужебный.СертификатИзДвоичныхДанныхПодписи(МенеджерЗаписи.Подпись.Получить()); СвойстваПодписи = Новый Структура; - СвойстваПодписи.Вставить("Сертификат", МенеджерЗаписи.Сертификат.Получить()); + СвойстваПодписи.Вставить("Сертификат", Сертификат); СвойстваПодписи.Вставить("КомуВыданСертификат", МенеджерЗаписи.КомуВыданСертификат); СообщениеЖурналаРегистрации = ЭлектроннаяПодписьСлужебный.СведенияОПодписиДляЖурналаРегистрации( @@ -3016,10 +3418,12 @@ КонецЕсли; МенеджерЗаписи.Удалить(); + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ВыборкаДетальныеЗаписи.ЕстьПодписиПоМЧД > 0 Тогда МодульМашиночитаемыеДоверенностиФНССлужебный.УдалитьМашиночитаемуюДоверенностьПодписи( ПодписанныйОбъект.Ссылка, ВыборкаДетальныеЗаписи.ИдентификаторПодписи); КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности ЗаписьЖурналаРегистрации(НСтр("ru = 'Электронная подпись.Удаление подписи'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Информация, ПодписанныйОбъект.Метаданные(), ПодписанныйОбъект.Ссылка, @@ -3136,7 +3540,7 @@ КонецЕсли; СертификатОтозван = Ложь; - ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(Результат, Истина); + ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(Результат, Истина, Истина); Если ОшибкаПоКлассификатору <> Неопределено Тогда СертификатОтозван = ОшибкаПоКлассификатору.СертификатОтозван; Если НеверныйХеш = Неопределено Тогда @@ -3171,10 +3575,27 @@ РезультатСтруктура.ТребуетсяПроверка = Ложь; КонецЕсли; - РезультатСтруктура.ПодписьМатематическиВерна = Не РезультатСтруктура.ТребуетсяПроверка; + РезультатСтруктура.ПодписьМатематическиВерна = Не РезультатСтруктура.ТребуетсяПроверка Или НеверныйХеш = Ложь; РезультатСтруктура.ОшибкаПроверкиДополнительныхАтрибутов = Результат; КонецПроцедуры +Функция ОтпечатокСертификата(Знач Сертификат) + + Если ТипЗнч(Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Сертификат) Тогда + Сертификат = ПолучитьИзВременногоХранилища(Сертификат); + КонецЕсли; + + Если ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда + Сертификат = Новый СертификатКриптографии(Сертификат); + КонецЕсли; + + Возврат ?(ТипЗнч(Сертификат) = Тип("СертификатКриптографии"), Base64Строка(Сертификат.Отпечаток), + Строка(Сертификат)); + +КонецФункции + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index 6e5b56802..77f16b869 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -371,7 +371,7 @@ Контекст = Новый Структура; Контекст.Вставить("ОбработкаРезультата", ОбработкаРезультата); Контекст.Вставить("ФормаДобавления", ФормаДобавления); - Контекст.Вставить("ПроверитьМенеджерКриптографииНаКлиенте", Истина); + Контекст.Вставить("ПроверитьМенеджерКриптографииНаКлиенте", Ложь); Контекст.Вставить("ОписаниеДанных", ОписаниеДанных); Если (ПроверятьЭлектронныеПодписиНаСервере() @@ -962,7 +962,7 @@ // - МенеджерКриптографии - использовать указанный менеджер криптографии // (проверка на сервере не будет выполнена). // -// НаДату - Дата - проверить сертификат на указанную дату. +// НаДату - Дата - проверить сертификат на указанную дату в часовом поясе информационной базы. // Если параметр не указан или указана пустая дата, // тогда проверять на текущую дату сеанса. // ПараметрыПроверки - см. ПараметрыПроверкиСертификата. @@ -984,12 +984,15 @@ // неаккредитованных УЦ. // "НеПроверятьСертификат" - не выполнять проверку удостоверяющего центра сертификата. // * ИгнорироватьПроверкуВСпискеОтозванныхСертификатов - Булево - не проверять сертификат в списке отзыва. +// * УказанаДатаМеткиВремени - Булево - в параметре НаДату указана дата, на которую будет выполнена проверка отзыва и +// цепочки сертификатов. // Функция ПараметрыПроверкиСертификата() Экспорт Структура = Новый Структура; - Структура.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь); Структура.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); + Структура.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь); + Структура.Вставить("УказанаДатаМеткиВремени", Ложь); Возврат Структура; КонецФункции @@ -1116,6 +1119,82 @@ КонецПроцедуры +// Открывает форму диагностики с причинами и вариантами решения известных проблем при работе с электронной подписью. +// Эти рекомендации автоматически загружаются из классификатора через Интернет. Также в форме можно отправить информацию +// в службу технической поддержки. Рекомендуется вызывать эту функцию вместо вывода пользователю технологического +// сообщения об ошибке во всех случаях после неуспешной операции с электронной подписью. +// +// Параметры: +// ПараметрыФормы - см. ПараметрыФормыРасширенногоПредставленияОшибки. +// ФормаВладелец - ФормаКлиентскогоПриложения - владелец формы. +// ОповещениеОЗавершении - ОписаниеОповещения - оповещение о закрытии формы ошибки. +// +// Пример: +// ПараметрыФормы = ПараметрыФормыРасширенногоПредставленияОшибки(); +// ПараметрыФормы.ЗаголовокПредупреждения = НСтр("ru = 'Не удалось выполнить рассылку отчетов'"); +// ПараметрыФормы.ТекстОшибкиСервер = ТекстОшибкиШифрованияНаСервере; +// ПараметрыФормы.ДополнительныеДанные.Вставить("Сертификат", Результат.СертификатДляШифрования); +// ПараметрыФормы.ПоказатьТребуетсяПомощь = Истина; +// ПараметрыФормы.ПоказатьИнструкцию = Истина; +// МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); +// МодульЭлектроннаяПодписьКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы); +// +Процедура ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ФормаВладелец = Неопределено, ОповещениеОЗавершении = Неопределено) Экспорт + + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ФормаВладелец, ОповещениеОЗавершении); + +КонецПроцедуры + +// Конструктор параметров формы расширенного представления ошибки. +// +// Возвращаемое значение: +// Структура - параметры формы расширенного представления ошибки: +// * ЗаголовокПредупреждения - Строка - заголовок формы ошибки. +// * ИнформацияДляПоддержки - ФорматированнаяСтрока - заголовок элемента для обращения в техподдержку. +// * ТекстОшибкиКлиент - Строка - текст, по которому будет производиться поиск причин и решений на клиенте, +// заполняется в случае, если важен контекст возникновения ошибки +// или текст общей ошибки, если она одна. +// * ТекстОшибкиСервер - Строка - текст, по которому будет производиться поиск причин и решений на сервере +// заполняется в случае, если важен контекст возникновения ошибки. +// * ДополнительныеДанные - Структура: +// ** ДанныеПодписи - Строка - (необязательный) адрес данных подписи во временном хранилище, если ошибка подписи. +// ** Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - (необязательный) ссылка +// на сертификат, с которым связана ошибка. +// ** ДанныеСертификата - Строка - (необязательный) адрес данных сертификата во временном хранилище. +// * ПоказатьТребуетсяПомощь - Булево - показать группу Требуется помощь и кнопки установки расширения и настройки приложений. +// * ПоказатьПереходКНастройкеПрограмм - Булево - если ПоказатьТребуетсяПомощь = Истина, +// показать кнопку для перехода к настройке приложений для работы с электронной подписью. +// * ПоказатьУстановкуРасширения - Булево - если ПоказатьТребуетсяПомощь = Истина, +// показать кнопку для установки расширения криптографии. +// * ПоказатьИнструкцию - Булево - если ПоказатьТребуетсяПомощь = Истина, показывать гиперссылку Требуется помощь. +// * ТекстДополнительнойСсылки - Строка - заголовок дополнительной ссылки, по которой будет запускаться +// обработчик оповещения ОбработчикДополнительнойСсылки, с результатом типа Структура: +// # НавигационнаяСсылка - Строка - ссылка, указанная в ТекстДополнительнойСсылки. +// # ПараметрОбработчикаДополнительнойСсылки - описан ниже. +// * ОбработчикДополнительнойСсылки - Строка - имя обработчика оповещения из общего модуля, +// например, "ОбработкаНеисправностейБЭД.ОткрытьМастерДиагностики". +// * ПараметрОбработчикаДополнительнойСсылки - Произвольный - параметр обработчика ОбработчикДополнительнойСсылки. +// +Функция ПараметрыФормыРасширенногоПредставленияОшибки() Экспорт + + Структура = Новый Структура; + Структура.Вставить("ЗаголовокПредупреждения", ""); + Структура.Вставить("ИнформацияДляПоддержки", ""); + Структура.Вставить("ТекстОшибкиКлиент", ""); + Структура.Вставить("ТекстОшибкиСервер", ""); + Структура.Вставить("ДополнительныеДанные"); + Структура.Вставить("ПоказатьТребуетсяПомощь", Ложь); + Структура.Вставить("ПоказатьПереходКНастройкеПрограмм", Ложь); + Структура.Вставить("ПоказатьУстановкуРасширения", Ложь); + Структура.Вставить("ПоказатьИнструкцию", Ложь); + Структура.Вставить("ТекстДополнительнойСсылки", ""); + Структура.Вставить("ОбработчикДополнительнойСсылки", ""); + Структура.Вставить("ПараметрОбработчикаДополнительнойСсылки"); + + Возврат Структура; + +КонецФункции + // Открывает ссылку на раздел ИТС "Инструкции по работе с программами электронной подписи и шифрования". // Процедура ОткрытьИнструкциюПоРаботеСПрограммами() Экспорт @@ -1124,24 +1203,6 @@ КонецПроцедуры -// Открывает инструкцию с описанием типичных проблем при работе с программами -// электронной подписи и вариантами их решения. -// -// Параметры: -// ИмяРаздела - Строка - ссылка на ошибку в инструкции. -// -Процедура ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(ИмяРаздела = "") Экспорт - - НавигационнаяСсылка = ""; - ЭлектроннаяПодписьКлиентСерверЛокализация.ПриОпределенииСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами( - НавигационнаяСсылка, ИмяРаздела); - - Если Не ПустаяСтрока(НавигационнаяСсылка) Тогда - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка); - КонецЕсли; - -КонецПроцедуры - // Возвращает дату, извлеченную из двоичных данных подписи, или Неопределено. // // Параметры: @@ -1237,6 +1298,14 @@ // * Назначение - Строка - описание расширенного свойства сертификата EKU. // * Подписание - Булево - свойство сертификата ИспользоватьДляПодписи. // * Шифрование - Булево - свойство сертификата ИспользоватьДляШифрования. +// На платформах 8.3.27 и выше структура содержит свойства: +// * ДействителенДо - Дата - минимальная дата из ДатаОкончания и ДатаОкончанияЗакрытогоКлюча (если указана в сертификате). +// * ДатаНачалаЗакрытогоКлюча - Дата - свойство сертификата, указанное в OID 2.5.29.16 в часовом поясе сеанса. +// * ДатаОкончанияЗакрытогоКлюча - Дата - свойство сертификата, указанное в OID 2.5.29.16 в часовом поясе сеанса. +// * ИдентификаторКлючаУдостоверяющегоЦентра - Строка - идентификатор ключа издателя. +// * АлгоритмПодписи - Строка - OID алгоритма подписи сертификата. +// * АлгоритмОткрытогоКлюча - Строка - OID алгоритма открытого ключа сертификата. +// * АдресаСписковОтзыва - Массив из Строка // Функция СвойстваСертификата(Сертификат) Экспорт @@ -1767,83 +1836,6 @@ #Область ДляВызоваИзДругихПодсистем -// Открывает форму диагностики с причинами и вариантами решения известных проблем при работе с электронной подписью. -// Эти рекомендации автоматически загружаются из классификатора через Интернет. Также в форме можно отправить информацию -// в службу технической поддержки. Рекомендуется вызывать эту функцию вместо вывода пользователю технологического -// сообщения об ошибке во всех случаях после неуспешной операции с электронной подписью. -// -// Параметры: -// ПараметрыФормы - см. ПараметрыФормыРасширенногоПредставленияОшибки. -// ФормаВладелец - ФормаКлиентскогоПриложения - владелец формы. -// ОповещениеОЗавершении - ОписаниеОповещения - оповещение о закрытии формы ошибки. -// -// Пример: -// ПараметрыФормы = ПараметрыФормыРасширенногоПредставленияОшибки(); -// ПараметрыФормы.ЗаголовокПредупреждения = НСтр("ru = 'Не удалось выполнить рассылку отчетов'"); -// ПараметрыФормы.ТекстОшибкиСервер = ТекстОшибкиШифрованияНаСервере; -// ПараметрыФормы.ДополнительныеДанные.Вставить("Сертификат", Результат.СертификатДляШифрования); -// ПараметрыФормы.ПоказатьТребуетсяПомощь = Истина; -// ПараметрыФормы.ПоказатьИнструкцию = Истина; -// МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); -// МодульЭлектроннаяПодписьКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы); -// -Процедура ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ФормаВладелец = Неопределено, ОповещениеОЗавершении = Неопределено) Экспорт - - ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ФормаВладелец, ОповещениеОЗавершении); - -КонецПроцедуры - -// Конструктор параметров формы расширенного представления ошибки. -// -// Возвращаемое значение: -// Структура - параметры формы расширенного представления ошибки: -// * ЗаголовокПредупреждения - Строка - заголовок формы ошибки. -// * ИнформацияДляПоддержки - ФорматированнаяСтрока - заголовок элемента для обращения в техподдержку. -// * ТекстОшибкиКлиент - Строка - текст, по которому будет производиться поиск причин и решений на клиенте, -// заполняется в случае, если важен контекст возникновения ошибки -// или текст общей ошибки, если она одна. -// * ТекстОшибкиСервер - Строка - текст, по которому будет производиться поиск причин и решений на сервере -// заполняется в случае, если важен контекст возникновения ошибки. -// * ДополнительныеДанные - Структура: -// ** ДанныеПодписи - Строка - (необязательный) адрес данных подписи во временном хранилище, если ошибка подписи. -// ** Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - (необязательный) ссылка -// на сертификат, с которым связана ошибка. -// ** ДанныеСертификата - Строка - (необязательный) адрес данных сертификата во временном хранилище. -// * ПоказатьТребуетсяПомощь - Булево - показать группу Требуется помощь и кнопки установки расширения и настройки приложений. -// * ПоказатьПереходКНастройкеПрограмм - Булево - если ПоказатьТребуетсяПомощь = Истина, -// показать кнопку для перехода к настройке приложений для работы с электронной подписью. -// * ПоказатьУстановкуРасширения - Булево - если ПоказатьТребуетсяПомощь = Истина, -// показать кнопку для установки расширения криптографии. -// * ПоказатьИнструкцию - Булево - если ПоказатьТребуетсяПомощь = Истина, показывать гиперссылку Требуется помощь. -// * ТекстДополнительнойСсылки - Строка - заголовок дополнительной ссылки, по которой будет запускаться -// обработчик оповещения ОбработчикДополнительнойСсылки, с результатом типа Структура: -// # НавигационнаяСсылка - Строка - ссылка, указанная в ТекстДополнительнойСсылки. -// # ПараметрОбработчикаДополнительнойСсылки - описан ниже. -// * ОбработчикДополнительнойСсылки - Строка - имя обработчика оповещения из общего модуля, -// например, "ОбработкаНеисправностейБЭД.ОткрытьМастерДиагностики". -// * ПараметрОбработчикаДополнительнойСсылки - Произвольный - параметр обработчика ОбработчикДополнительнойСсылки. -// -Функция ПараметрыФормыРасширенногоПредставленияОшибки() Экспорт - - Структура = Новый Структура; - Структура.Вставить("ЗаголовокПредупреждения", ""); - Структура.Вставить("ИнформацияДляПоддержки", ""); - Структура.Вставить("ТекстОшибкиКлиент", ""); - Структура.Вставить("ТекстОшибкиСервер", ""); - Структура.Вставить("ДополнительныеДанные"); - Структура.Вставить("ПоказатьТребуетсяПомощь", Ложь); - Структура.Вставить("ПоказатьПереходКНастройкеПрограмм", Ложь); - Структура.Вставить("ПоказатьУстановкуРасширения", Ложь); - Структура.Вставить("ПоказатьИнструкцию", Ложь); - - Структура.Вставить("ТекстДополнительнойСсылки", ""); - Структура.Вставить("ОбработчикДополнительнойСсылки", ""); - Структура.Вставить("ПараметрОбработчикаДополнительнойСсылки"); - - Возврат Структура; - -КонецФункции - // Следующие процедуры и функции предназначены для интеграции с 1С:Библиотека электронных документов. // Создает и возвращает менеджер криптографии (на клиенте) для указанной программы или данных. @@ -2056,11 +2048,11 @@ // Форма - ФормаКлиентскогоПриложения. // ПараметрыПроверки - Неопределено, Структура: // * ПредлагатьУстановитьПрограмму - Булево - если Истина, будет открыта форма обработки -// см. Обработка.ПрограммыЭлектроннойПодписиИШифрования.УстановкаПрограммКриптопровайдеров, +// см. Обработка.ПрограммыЭлектроннойПодписиИШифрования.УстановкаПриложенийДляРаботыСЭлектроннойПодписью, // если она существует и если список установленных программ пуст. По умолчанию, если ПроверяемыеПрограммы = Истина // и не используется облачная подпись и криптографические операции на сервере - Истина, иначе - Ложь. // * ПроверяемыеПрограммы - Неопределено - (по умолчанию) возвращаются все установленные программы. -// - Булево - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.АктуальныеАлгоритмыПрограмм +// - Булево - см. ЭлектроннаяПодписьКлиентСерверЛокализация.АктуальныеАлгоритмыПрограмм // - ДвоичныеДанные - данные подписи или сертификата, для проверки наличия подходящих программ. // - Строка - адрес во временном хранилище данных подписи или сертификата, для проверки наличия подходящих программ. // - Массив - со значениями, как возвращает функция ЭлектроннаяПодпись.НовоеОписаниеПрограммы. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентЛокализация/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентЛокализация/Module.bsl index 85ccba108..23d11e415 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентЛокализация/Module.bsl @@ -6,8 +6,13 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс +// Код линии технической поддержки. +// +// Параметры: +// Получатель - Строка +// Процедура ПриОпределенииПолучателяОбращенияВТехническуюПоддержку(Получатель) Экспорт // Локализация @@ -16,6 +21,11 @@ КонецПроцедуры +// Фильтр для выбора подписей. +// +// Параметры: +// Фильтр - Строка +// Процедура ПриПолученииФильтраДляВыбораПодписей(Фильтр) Экспорт // Локализация @@ -26,6 +36,13 @@ КонецПроцедуры +// При получении списка выбора машиночитаемых доверенностей в форме добавления подписей из файла. +// +// Параметры: +// Форма - см. ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// ТекущиеДанные - ДанныеФормыЭлементКоллекции - строка подписи в форме ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// СписокВыбора - СписокЗначений +// Процедура ПриПолученииСпискаВыбораМашиночитаемыхДоверенностей(Форма, ТекущиеДанные, СписокВыбора) Экспорт // Локализация @@ -48,6 +65,12 @@ КонецПроцедуры +// При выборе машиночитаемой доверенности в форме добавления подписей из файла. +// +// Параметры: +// ОбработчикЗавершения - ОписаниеОповещения +// ТекущиеДанные - ДанныеФормыЭлементКоллекции - строка подписи в форме ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// Процедура ПриВыбореМашиночитаемойДоверенности(ОбработчикЗавершения, ТекущиеДанные) Экспорт // Локализация @@ -71,6 +94,12 @@ КонецПроцедуры +// Добавляет в список сохраняемых файлы машиночитаемых доверенностей при сохранении подписей. +// +// Параметры: +// ФайлыМашиночитаемыхДоверенностей - Соответствие +// КоллекцияПодписей - ДанныеФормыКоллекция +// Процедура ПриОпределенииФайловМашиночитаемыхДоверенностей(ФайлыМашиночитаемыхДоверенностей, КоллекцияПодписей) Экспорт @@ -101,6 +130,73 @@ КонецПроцедуры +// При проверке конфликта программ криптографии. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// РезультатПроверки - Структура +// +Процедура ПриПроверкеКонфликтаПрограммКриптографии(Форма, РезультатПроверки) Экспорт + + // Локализация + Элементы = Форма.Элементы; + МассивПрограмм = Новый Массив; + Для Каждого Программа Из РезультатПроверки.Программы Цикл + Если ЗначениеЗаполнено(Программа.Программа) И МассивПрограмм.Найти(Программа.Программа) = Неопределено Тогда + МассивПрограмм.Добавить(Программа.Программа); + КонецЕсли; + КонецЦикла; + + Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина; + Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'На вашем компьютере установлено несколько приложений с алгоритмами ГОСТ: %1. + |Возможна некорректная работа из-за конфликта между ними. В этом случае следует удалить приложения и после перезагрузки установить только одно из них.'"), + СтрСоединить(МассивПрограмм, ", ")); + Элементы.ДекорацияИнформацияКриптопровайдеры.Картинка = БиблиотекаКартинок.Предупреждение; + // Конец Локализация + +КонецПроцедуры + +// При проверке установленных программ криптографии. +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения +// РезультатПроверки - Структура +// ЕстьПроверяемыеПрограммы - Булево +// +Процедура ПриПроверкеУстановленныхПрограммКриптографии(Форма, РезультатПроверки, ЕстьПроверяемыеПрограммы) Экспорт + + // Локализация + + Элементы = Форма.Элементы; + Если Не ЕстьПроверяемыеПрограммы Тогда + Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина; + Если РезультатПроверки.Токены.Количество() > 0 Тогда + Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Для работы с усиленной квалифицированной электронной подписью на компьютере должно быть установлено сертифицированное приложение (средство криптографической защиты информации). Установить. + |Подробнее о работе с токенами без установки приложения.'"), + "ПроверитьУстановкуПрограммКриптографии", + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДействиеУстановитьБиблиотекиДляТокенов()); + Иначе + Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Для работы с усиленной квалифицированной электронной подписью на компьютере должно быть установлено сертифицированное приложение (средство криптографической защиты информации). + |Установить.'"), "ПроверитьУстановкуПрограммКриптографии"); + КонецЕсли; + КонецЕсли; + + // Конец Локализация + +КонецПроцедуры + +// Определяет подключенные токены к устройству. +// +// Параметры: +// ОбъектКомпоненты - Неопределено, ОбъектВнешнейКомпоненты. +// ПредложитьУстановить - Булево - Предложить установить компоненту, если не установлена. +// +// Возвращаемое значение: +// Обещание - Структура +// Асинх Функция УстановленныеТокены(ОбъектКомпоненты = Неопределено, ПредложитьУстановить = Ложь) Экспорт Результат = Новый Структура; @@ -109,22 +205,24 @@ Результат.Вставить("Ошибка", ""); // Локализация - - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр( - "ru = 'Для получения данных о токенах требуется установка внешней компоненты %1.'"), - "ExtraCryptoAPI"); - - Попытка - ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(ПредложитьУстановить, ТекстПояснения); - Исключение - Результат.Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат Результат; - КонецПопытки; + + Если ОбъектКомпоненты = Неопределено Тогда + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для получения данных о токенах требуется установка внешней компоненты %1.'"), + "ExtraCryptoAPI"); + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(ПредложитьУстановить, ТекстПояснения); + Исключение + Результат.Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Результат; + КонецПопытки; + КонецЕсли; + + Ждать ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); Попытка ТипыУстройств = Ждать ОбъектКомпоненты.PKCS11ПолучитьПоддерживаемыеБэкендыАсинх(); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); ТипыУстройств = СтрРазделить(ТипыУстройств.Значение, "; "); Исключение Результат.Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -133,6 +231,7 @@ СтрокиУстройств = Новый Соответствие; СтрокиТокенов = Новый Соответствие; + Библиотеки = Новый Соответствие; Для Каждого ТипУстройства Из ТипыУстройств Цикл @@ -157,10 +256,24 @@ БиблиотекиТокена = ""; Попытка НастройкиТокена = Ждать ОбъектКомпоненты.PKCS11ПолучитьНастройкиБэкендаПоУмолчаниюАсинх(ТипУстройства); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); БиблиотекиТокена = НастройкиТокена.Значение; - Ждать ОбъектКомпоненты.PKCS11ИнициализацияАсинх(БиблиотекиТокена); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Если ЗначениеЗаполнено(БиблиотекиТокена) Тогда + СвойстваТокена.Библиотеки = ПрочитатьЗначениеJSON(БиблиотекиТокена); + Библиотеки.Вставить(ТипУстройства, СвойстваТокена.Библиотеки); + КонецЕсли; + + Если Не ЗначениеЗаполнено(СвойстваТокена.Библиотеки.pkcs11_library_path) Тогда + Если ТипУстройства = Рутокен() Тогда + ОшибкаИнициализацииТокена = ЭлектроннаяПодписьКлиентСерверЛокализация.НеУстановленаПанельРутокен(); + Иначе + ОшибкаИнициализацииТокена = ЭлектроннаяПодписьКлиентСерверЛокализация.НеУстановленЕдиныйКлиентДжакарта(); + КонецЕсли; + Иначе + Ждать ОбъектКомпоненты.PKCS11ИнициализацияАсинх(БиблиотекиТокена); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); + КонецЕсли; + Исключение ОшибкаИнициализацииТокена = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; @@ -168,14 +281,17 @@ Если ЗначениеЗаполнено(ОшибкаИнициализацииТокена) Тогда Если ЭтоОшибкаЗагрузкиБиблиотеки(ОшибкаИнициализацииТокена) Тогда - СвойстваТокена.Ошибка = РекомендацииДляУстановкиБиблиотекТокена(ТипУстройства, БиблиотекиТокена); + Если ТипУстройства = Рутокен() Тогда + СвойстваТокена.Ошибка = ЭлектроннаяПодписьКлиентСерверЛокализация.НеУстановленаПанельРутокен(); + Иначе + СвойстваТокена.Ошибка = ЭлектроннаяПодписьКлиентСерверЛокализация.НеУстановленЕдиныйКлиентДжакарта(); + КонецЕсли; ИначеЕсли Не ЗначениеЗаполнено(БиблиотекиТокена) Тогда СвойстваТокена.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1: Не удалось получить настройки для работы с токеном: %2'"), СвойстваТокена.Представление, ОшибкаИнициализацииТокена); Иначе - СвойстваТокена.Ошибка = ОшибкаИнициализацииТокена + Символы.ПС - + РекомендацииДляУстановкиБиблиотекТокена(ТипУстройства, БиблиотекиТокена); + СвойстваТокена.Ошибка = ОшибкаИнициализацииТокена; КонецЕсли; Иначе СвойстваТокена.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -194,7 +310,7 @@ Попытка СписокСлотов = Ждать ОбъектКомпоненты.PKCS11ПолучитьСписокСлотовАсинх(Истина); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); Исключение ОшибкаПолученияСлотов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить список токенов. %1'"), @@ -219,7 +335,8 @@ СвойстваТокена = ЭлектроннаяПодписьСлужебныйКлиент.НовыеСвойстваТокена(); СвойстваТокена.Слот = ЗначениеСлота; СвойстваТокена.Токен = ТипУстройства; - СвойстваТокена.Представление = СтрШаблон("%1 %2", МодельТокена(ТипУстройства), СвойстваТокена.Слот); + СвойстваТокена.Представление = СтрШаблон("%1 %2", МодельТокена(ТипУстройства), СвойстваТокена.Слот); + СвойстваТокена.Библиотеки = Библиотеки.Получить(ТипУстройства); Если СтрокиУстройств.Получить(ТипУстройства) <> Неопределено Тогда СтрокиУстройств.Удалить(ТипУстройства); @@ -227,7 +344,7 @@ Попытка ИнформацияОТокене = Ждать ОбъектКомпоненты.PKCS11ПолучитьИнформациюОТокенеАсинх(ЗначениеСлота); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); Исключение СвойстваТокена.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось получить информацию о токене в слоте %1. %2'"), @@ -246,7 +363,7 @@ Попытка СписокМеханизмов = Ждать ОбъектКомпоненты.PKCS11ПолучитьСписокПоддерживаемыхМеханизмовАсинх(ЗначениеСлота); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); Исключение ОшибкаПолученияМеханизмовТокена = ОбработкаОшибок.КраткоеПредставлениеОшибки( ИнформацияОбОшибке()); @@ -281,10 +398,155 @@ // Конец Локализация - Возврат Результат; + Возврат Результат; КонецФункции +// Получить свойства сертификатов на токенах. +// +// Параметры: +// Контекст - Структура: +// * МассивСертификатов - Массив +// ПредложитьУстановить - Булево - Предложить установить компоненту, если не установлена. +// +// Возвращаемое значение: +// Обещание - Контекст +// +Асинх Функция ПолучитьСвойстваСертификатовНаТокенах(Контекст, ПредложитьУстановить) Экспорт + + // Локализация + Токены = Ждать СертификатыНаТокенах(ПредложитьУстановить); + + Для Каждого Токен Из Токены Цикл + Если Токен.Сертификаты = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого СвойстваСертификата Из Токен.Сертификаты Цикл + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(СвойстваСертификата.Значение); + Контекст.МассивСертификатов.Добавить(СертификатКриптографии); + КонецЦикла; + КонецЦикла; + // Конец Локализация + + Возврат Контекст; + +КонецФункции + +// Возвращает отпечатки сертификатов на токенах. +// +// Параметры: +// ПредложитьУстановить - Булево - Предложить установить компоненту, если не установлена. +// ВключаяПросроченные - Булево - если Ложь, возвращаются только отпечатки действующих сертификатов. +// +// Возвращаемое значение: +// Обещание - Массив +// +Асинх Функция ПолучитьОтпечаткиСертификатовНаТокенах(ПредложитьУстановить, ВключаяПросроченные = Ложь) Экспорт + + МассивОтпечатков = Новый Массив; + + // Локализация + Токены = Ждать СертификатыНаТокенах(ПредложитьУстановить); + + Для Каждого Токен Из Токены Цикл + Если Токен.Сертификаты = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого СвойстваСертификата Из Токен.Сертификаты Цикл + Если ВключаяПросроченные Тогда + МассивОтпечатков.Добавить(СвойстваСертификата.Ключ); + Иначе + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(СвойстваСертификата.Значение); + ДатыСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатыСертификата(СертификатКриптографии, + ЭлектроннаяПодписьСлужебныйКлиент.РазницаСУниверсальнымВременем()); + Если ДатыСертификата.ДействителенДо >= ОбщегоНазначенияКлиент.ДатаСеанса() Тогда + МассивОтпечатков.Добавить(СвойстваСертификата.Ключ); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + // Конец Локализация + + Возврат МассивОтпечатков; + +КонецФункции + +// Сертификаты на токенах. +// +// Параметры: +// ПредложитьУстановить - Булево - Предложить установить. +// Обновить - Булево - Обновить список сертификатов на токене в кэше. +// +// Возвращаемое значение: +// Обещание - Массив Из Структура - Токены +// +Асинх Функция СертификатыНаТокенах(ПредложитьУстановить, Обновить = Ложь) Экспорт + + УстановленныеКриптопровайдеры = Ждать ЭлектроннаяПодписьСлужебныйКлиент.УстановленныеКриптопровайдерыИзКэша(ПредложитьУстановить); + Токены = УстановленныеКриптопровайдеры.Токены; + ЗаписатьТокеныВКэш = Ложь; + + // Локализация + + Для Каждого Токен Из Токены Цикл + + Если Не ЗначениеЗаполнено(Токен.Слот) Тогда + Продолжить; + КонецЕсли; + + Если Токен.Сертификаты <> Неопределено И Не Обновить Тогда + Продолжить; + КонецЕсли; + + Сертификаты = Новый Соответствие; + Результат = Ждать СертификатыНаТокене(Токен, Неопределено, ПредложитьУстановить); + Если Результат.ПроверкаВыполнена Тогда + + Ошибки = Новый Массив; + Для Каждого Сертификат Из Результат.Сертификаты Цикл + СертификатКриптографии = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СертификатИзСтроки(Сертификат); + Если ТипЗнч(СертификатКриптографии) = Тип("Строка") Тогда + Ошибки.Добавить(СертификатКриптографии); + Продолжить; + КонецЕсли; + Сертификаты.Вставить(Base64Строка(СертификатКриптографии.Отпечаток), Ждать СертификатКриптографии.ВыгрузитьАсинх()); + КонецЦикла; + + Если Ошибки.Количество() > 0 Тогда + Токен.Ошибка = СтрСоединить(Ошибки, Символы.ПС); + КонецЕсли; + Иначе + Токен.Ошибка = Результат.Ошибка; + КонецЕсли; + + ЗаписатьТокеныВКэш = Истина; + Токен.Сертификаты = Сертификаты; + + КонецЦикла; + + // Конец Локализация + + Если ЗаписатьТокеныВКэш Тогда + УстановленныеКриптопровайдеры.Токены = Токены; + ЭлектроннаяПодписьСлужебныйКлиент.ЗаписатьВКэшУстановленныеКриптопровайдеры(УстановленныеКриптопровайдеры) + КонецЕсли; + + Возврат Токены; + +КонецФункции + +// Сертификаты на токене. +// +// Параметры: +// Токен - Структура +// ОбъектКомпоненты - Неопределено, ОбъектВнешнейКомпоненты +// ПредложитьУстановить - Булево - Предложить установить +// +// Возвращаемое значение: +// Обещание - Структура +// Асинх Функция СертификатыНаТокене(Токен, ОбъектКомпоненты = Неопределено, ПредложитьУстановить = Ложь) Экспорт Результат = Новый Структура; @@ -303,13 +565,20 @@ КонецПопытки; КонецЕсли; + Ждать ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); + Попытка - СертификатыНаТокене = Ждать ОбъектКомпоненты.PKCS11ПолучитьСписокСертификатовАсинх(Токен.Слот, Токен.ЗначениеПароля); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + СертификатыНаТокене = Ждать ОбъектКомпоненты.PKCS11ПолучитьСписокСертификатовАсинх(Токен.Слот); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); Результат.ПроверкаВыполнена = Истина; Результат.Сертификаты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПрочитатьОтветКомпоненты(СертификатыНаТокене.Значение); Исключение - Результат.Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ЭтоОшибкаИнициализацииСлота(ТекстОшибки) Тогда + Возврат ОшибкаИнициализацииСлота(Токен); + Иначе + Результат.Ошибка = ТекстОшибки; + КонецЕсли; Возврат Результат; КонецПопытки; @@ -319,6 +588,71 @@ КонецФункции +// Токен для шифрования. +// +// Параметры: +// Сертификат - СертификатКриптографии +// АлгоритмШифрования - Строка - OID или см. ЭлектроннаяПодписьКлиент.Зашифровать.ОписаниеДанных.АлгоритмШифрования +// СвойстваСертификата - Структура +// * АлгоритмОткрытогоКлюча - Строка - OID +// +// Возвращаемое значение: +// Обещание - Структура +// +Асинх Функция ТокенДляШифрования(Сертификат, АлгоритмШифрования = Неопределено, СвойстваСертификата = Неопределено) Экспорт + Результат = Неопределено; + + // Локализация + УстановленныеКриптопровайдеры = Ждать ЭлектроннаяПодписьСлужебныйКлиент.УстановленныеКриптопровайдерыИзКэша(Истина); + Токены = УстановленныеКриптопровайдеры.Токены; + + Если Токены.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Если СвойстваСертификата = Неопределено Или Не ЗначениеЗаполнено(СвойстваСертификата.АлгоритмОткрытогоКлюча) Тогда + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина); + Исключение + Возврат Неопределено; + КонецПопытки; + СвойстваСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСвойстваСертификатаАсинх(Сертификат, ОбъектКомпоненты); + Если ЗначениеЗаполнено(СвойстваСертификата.Ошибка) Тогда + Возврат Неопределено; + КонецЕсли; + АлгоритмОткрытогоКлюча = СвойстваСертификата.СвойстваСертификата.АлгоритмОткрытогоКлюча; + Иначе + АлгоритмОткрытогоКлюча = СвойстваСертификата.АлгоритмОткрытогоКлюча; + КонецЕсли; + + Если АлгоритмОткрытогоКлюча <> "1.2.643.7.1.1.1.1" И АлгоритмОткрытогоКлюча <> "1.2.643.7.1.1.1.2" Тогда + Возврат Неопределено; + КонецЕсли; + + Если ЗначениеЗаполнено(АлгоритмШифрования) Тогда + АлгоритмШифрования = ЭлектроннаяПодписьКлиентСерверЛокализация.ПреобразованныйАлгоритмШифрования(АлгоритмШифрования); + Иначе + АлгоритмШифрования = "1.2.643.2.2.21"; + КонецЕсли; + + Для Каждого Токен Из Токены Цикл + Если ПоддержкаШифрования(Токен, АлгоритмШифрования) Тогда + Возврат Токен; + КонецЕсли; + КонецЦикла; + + // Конец Локализация + Возврат Результат; +КонецФункции + +// Текст ошибки содержит информацию, что введен неправильный пин-код токена. +// +// Параметры: +// ТекстОшибки - Строка - текст ошибки +// +// Возвращаемое значение: +// Булево +// Функция ЭтоОшибкаНеправильныйПинКод(ТекстОшибки) Экспорт // Локализация Если СтрНачинаетсяС(ТекстОшибки, "[pkcs11:160]") Тогда @@ -326,19 +660,626 @@ КонецЕсли; // Конец Локализация Возврат Ложь; -КонецФункции +КонецФункции + +// Подпись на токене. +// +// Параметры: +// ПараметрыПодписи - Структура: +// * Токен - Структура +// * Сертификат - СертификатКриптографии +// * Пароль - Строка +// * ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии +// * Открепленная - Булево +// * ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии +// * ОбъектКомпоненты - ОбъектВнешнейКомпоненты +// * ВключатьСертификатВПодпись - Булево +// Данные - ДвоичныеДанные +// +// Возвращаемое значение: +// Обещание - ДвоичныеДанные, Строка +// +Асинх Функция ПодписьНаТокене(ПараметрыПодписи, Данные) Экспорт + + НедоступноСозданиеПодписиТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru= 'Недоступно создание подписи с типом %1 на токене.'"), ПараметрыПодписи.ТипПодписи); + + // Локализация + + Если Не ЗначениеЗаполнено(ПараметрыПодписи.Токен.Пароль) Тогда + Возврат НСтр("ru = 'Укажите пин-код токена.'") + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыПодписи.ТипПодписи) + И ПараметрыПодписи.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда + Возврат НедоступноСозданиеПодписиТекст; + КонецЕсли; + + ОбъектКомпоненты = ПараметрыПодписи.ОбъектКомпоненты; + Если ОбъектКомпоненты = Неопределено Тогда + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + КонецЕсли; + + Ждать ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); + + Попытка + ДанныеСертификата = Ждать ПараметрыПодписи.Сертификат.ВыгрузитьАсинх(); + СертификатСтрокой = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(ДанныеСертификата); + + Результат = Ждать ОбъектКомпоненты.PKCS11CMSSignАсинх(ПараметрыПодписи.Токен.Слот, ПараметрыПодписи.Токен.Пароль, + СертификатСтрокой, Данные, 0, ПараметрыПодписи.Открепленная, 0); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); + ПодписьCMS = Результат.Значение; + Если Не ЗначениеЗаполнено(ПодписьCMS) Тогда + ВызватьИсключение НСтр("ru = 'Не удалось создать подпись.'"); + КонецЕсли; + ДвоичныеДанныеПодписи = СтрЗаменить(ПодписьCMS, "-----BEGIN CMS-----", ""); + ДвоичныеДанныеПодписи = СтрЗаменить(ДвоичныеДанныеПодписи, "-----END CMS-----", ""); + ДвоичныеДанныеПодписи = СтрЗаменить(ДвоичныеДанныеПодписи, Символы.ВК, ""); + ДвоичныеДанныеПодписи = СтрЗаменить(ДвоичныеДанныеПодписи, Символы.ПС, ""); + ДвоичныеДанныеПодписи = Base64Значение(ДвоичныеДанныеПодписи); + Возврат ДвоичныеДанныеПодписи; + Исключение + НедоступноСозданиеПодписиТекст = ТекстОшибки(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + ПараметрыПодписи.Токен); + Если ЭтоОшибкаПомещенияПодписиВБуфер(НедоступноСозданиеПодписиТекст) Тогда + Возврат НСтр("ru= 'Не удалось создать подпись при взаимодействии библиотеки rtengine.dll с OpenSSL.'"); + КонецЕсли; + + КонецПопытки; + + // Конец Локализация + + Возврат НедоступноСозданиеПодписиТекст; + +КонецФункции + +// Проверяет подпись с помощью токена. +// +// Параметры: +// Данные - ДвоичныеДанные, Неопределено - если Неопределено, подпись будет проверяться как присоединенная. +// Подпись - ДвоичныеДанные +// ПараметрыПроверки - Структура: +// * АлгоритмПодписи - Строка +// * ОбъектКомпоненты - ОбъектВнешнейКомпоненты +// * ВернутьСертификатыДляПроверки - Булево +// +// Возвращаемое значение: +// Обещание - Проверить подпись +// +Асинх Функция ПроверитьПодпись(Данные, Подпись, ПараметрыПроверки) Экспорт + + Результат = Неопределено; + + // Локализация + + УстановленныеКриптопровайдеры = Ждать ЭлектроннаяПодписьСлужебныйКлиент.УстановленныеКриптопровайдерыИзКэша(Ложь); + Токены = УстановленныеКриптопровайдеры.Токены; + + Если Токены.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ОбъектКомпоненты = ПараметрыПроверки.ОбъектКомпоненты; + Если ОбъектКомпоненты = Неопределено Тогда + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Ложь); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + КонецЕсли; + + Если ПараметрыПроверки.АлгоритмПодписи = Неопределено Тогда + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(Подпись); + Иначе + АлгоритмПодписи = ПараметрыПроверки.АлгоритмПодписи; + КонецЕсли; + + АлгоритмПодписи = СтрРазделить(АлгоритмПодписи, ",", Ложь); + АлгоритмПодписи = АлгоритмПодписи[0]; + + МеханизмПроверки = МеханизмПроверкиПодписи(АлгоритмПодписи); + IDТокена = Неопределено; + ЕстьАктивныеТокены = Ложь; + Если ЗначениеЗаполнено(МеханизмПроверки) Тогда + Для Каждого Токен Из Токены Цикл + Если Не ЗначениеЗаполнено(Токен.Механизмы) Тогда + Продолжить; + КонецЕсли; + ЕстьАктивныеТокены = Истина; + ПоддерживаетсяМеханизмПроверки = ПоддерживаетсяМеханизм(Токен, МеханизмПроверки); + Если ПоддерживаетсяМеханизмПроверки Тогда + IDТокена = Токены[0].Слот; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если IDТокена = Неопределено Тогда + Если ЕстьАктивныеТокены Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не найдено токенов, поддерживающих проверку подписи с алгоритмом %1'"), АлгоритмПодписи); + Иначе + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Ждать ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); + + Попытка + ПодписьСтрока = "-----BEGIN CMS-----" + Символы.ПС + ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(Подпись) + + Символы.ПС + "-----END CMS-----"; + + Если ПараметрыПроверки.ВернутьСертификатыДляПроверки Тогда + + РезультатПроверки = Ждать ОбъектКомпоненты.PKCS11CMSVerifySignАсинх(IDТокена, ПодписьСтрока, Данные, ""); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); + + Сертификаты = Новый Массив; + СертификатыПодписи = ПрочитатьЗначениеJSON(РезультатПроверки.Параметры[3]); + Для Каждого Сертификат Из СертификатыПодписи Цикл + СертификатИзСтроки = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СертификатИзСтроки(Сертификат); + Сертификаты.Добавить(СертификатИзСтроки); + КонецЦикла; + + Возврат Сертификаты; + + Иначе + РезультатПроверки = Ждать ОбъектКомпоненты.PKCS11CMSVerifySignАсинх(IDТокена, ПодписьСтрока, Данные); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); + КонецЕсли; + + Результат = РезультатПроверки.Значение; + Исключение + + ТекстОшибки = ТекстОшибки(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), Токены[0]); + + Если СтрНайти(ТекстОшибки, "error:1700009E") <> 0 Тогда + Возврат Нстр("ru = 'Хеш-значение неправильное'"); + КонецЕсли; + + Результат = СтрЗаменить(ТекстОшибки, Символы.ПС, ""); + + КонецПопытки; + + // Конец Локализация + + Возврат Результат; + +КонецФункции + +// Шифрование на токене. +// +// Параметры: +// ПараметрыШифрования - Структура +// Данные - ДвоичныеДанные +// +// Возвращаемое значение: +// Обещание - ДвоичныеДанные, Строка +// +Асинх Функция ШифрованиеНаТокене(ПараметрыШифрования, Данные) Экспорт + + Результат = НСтр("ru= 'Недоступно шифрование на токене.'"); + + // Локализация + + Если ПараметрыШифрования.Токен.Токен = Джакарта() Тогда + Возврат НСтр("ru = 'Шифрование средствами токена JaCarta недоступно, используйте Рутокен или приложения для работы с электронной подписью и шифрованием.'"); + КонецЕсли; + + Если ПараметрыШифрования.ОбъектКомпоненты = Неопределено Тогда + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + КонецЕсли; + + Ждать ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); + + Если ТипЗнч(ПараметрыШифрования.Сертификат) = Тип("Массив") Тогда + СертификатыДляШифрования = ПараметрыШифрования.Сертификат; + Иначе + СертификатыДляШифрования = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПараметрыШифрования.Сертификат); + КонецЕсли; + + СертификатыДляШифрованияСтрокой = Новый Массив; + Попытка + Для Каждого Сертификат Из СертификатыДляШифрования Цикл + ДанныеСертификата = Ждать Сертификат.ВыгрузитьАсинх(); + СертификатыДляШифрованияСтрокой.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(ДанныеСертификата)); + КонецЦикла; + СертификатыДляШифрованияСтрокой = ЗаписатьЗначениеJSON(СертификатыДляШифрованияСтрокой); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Попытка + Результат = Ждать ОбъектКомпоненты.PKCS11CMSEncryptАсинх( + ПараметрыШифрования.Токен.Слот, Данные, СертификатыДляШифрованияСтрокой, + АлгоритмШифрованияЧисло(ПараметрыШифрования.АлгоритмШифрования)); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); + Если Не ЗначениеЗаполнено(Результат.Значение) Тогда + ВызватьИсключение НСтр("ru = 'Не удалось зашифровать данные.'"); + КонецЕсли; + ЗашифрованныеДанныеСтрокой = СтрЗаменить(Результат.Значение, "-----BEGIN CMS-----", ""); + ЗашифрованныеДанныеСтрокой = СтрЗаменить(ЗашифрованныеДанныеСтрокой, "-----END CMS-----", ""); + ЗашифрованныеДанныеСтрокой = СтрЗаменить(ЗашифрованныеДанныеСтрокой, Символы.ВК, ""); + ЗашифрованныеДанныеСтрокой = СтрЗаменить(ЗашифрованныеДанныеСтрокой, Символы.ПС, ""); + Результат = Base64Значение(ЗашифрованныеДанныеСтрокой); + + Исключение + Результат = ТекстОшибки(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыШифрования.Токен); + КонецПопытки; + + // Конец Локализация + + Возврат Результат; +КонецФункции + +// Шифрование на токене. +// +// Параметры: +// ПараметрыРасшифровки - Структура +// Данные - ДвоичныеДанные +// +// Возвращаемое значение: +// Обещание - ДвоичныеДанные, Строка +// +Асинх Функция РасшифровкаНаТокене(ПараметрыРасшифровки, Данные) Экспорт + + Результат = НСтр("ru= 'Недоступна расшифровка на токене.'"); + + // Локализация + + Если ПараметрыРасшифровки.Токен.Токен = Джакарта() Тогда + Возврат НСтр("ru = 'Расшифровка средствами токена JaCarta недоступна, используйте Рутокен или приложения для работы с электронной подписью и шифрованием.'"); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ПараметрыРасшифровки.Токен.Пароль) Тогда + Возврат НСтр("ru = 'Укажите пин-код токена.'") + КонецЕсли; + + Если ПараметрыРасшифровки.ОбъектКомпоненты = Неопределено Тогда + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + КонецЕсли; + + Ждать ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); + + Попытка + ДанныеСертификата = Ждать ПараметрыРасшифровки.Сертификат.ВыгрузитьАсинх(); + СертификатСтрокой = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(ДанныеСертификата); + ДанныеСтрока = "-----BEGIN CMS-----" + Символы.ПС + ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(Данные) + + Символы.ПС + "-----END CMS-----"; + + Результат = Ждать ОбъектКомпоненты.PKCS11CMSDecryptАсинх(ПараметрыРасшифровки.Токен.Слот, ПараметрыРасшифровки.Токен.Пароль, ДанныеСтрока, СертификатСтрокой); + Ждать ОшибкаКомпоненты(ОбъектКомпоненты); + Если Не ЗначениеЗаполнено(Результат.Значение) Тогда + ВызватьИсключение НСтр("ru = 'Не удалось расшифровать данные.'"); + КонецЕсли; + Возврат Результат.Значение; + Исключение + Результат = ТекстОшибки(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ПараметрыРасшифровки.Токен); + КонецПопытки; + + // Конец Локализация + + Возврат Результат; +КонецФункции + +// Открывает форму установки программ криптопровайдеров. +// +// Параметры: +// Параметры - Структура +// Владелец - ФормаКлиентскогоПриложения +// Оповещение - ОписаниеОповещения +// СтандартнаяОбработка - Булево +// +Процедура ПриОткрытииФормыУстановкиПрограммКриптопровайдеров(Параметры, Владелец, Оповещение, СтандартнаяОбработка) Экспорт + + // Локализация + СтандартнаяОбработка = Ложь; + ОткрытьФорму("Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаПриложенийДляРаботыСЭлектроннойПодписью", + Параметры, Владелец,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + Возврат; + // Конец Локализация + +КонецПроцедуры + +// При заполнении результата проверки удостоверяющего центра. +// +// Параметры: +// Результат - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию +// СертификатКриптографии - СертификатКриптографии +// НаДату - Дата +// ПараметрыПроверки - Структура +// СвойстваСертификата - см. ЭлектроннаяПодпись.СвойстваСертификата +// +// Возвращаемое значение: +// Обещание - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию +// +Асинх Функция ПриЗаполненииРезультатаПроверкиУдостоверяющегоЦентра( + Результат, СертификатКриптографии, НаДату, ПараметрыПроверки, СвойстваСертификата) Экспорт + + // Локализация + + Если Не ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаПроверкаПоСпискуУЦ Тогда + Возврат Результат; + КонецЕсли; + + Если ПараметрыПроверки = Неопределено Или ПараметрыПроверки = Ложь Или ПараметрыПроверки = Истина Тогда + НовыеПараметрыПроверки = Новый Структура; + НовыеПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", ?(ПараметрыПроверки = Неопределено, Ложь, ПараметрыПроверки)); + НовыеПараметрыПроверки.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); + ПараметрыПроверки = НовыеПараметрыПроверки; + КонецЕсли; + + Если ПараметрыПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда + Возврат Результат; + КонецЕсли; + + ДанныеДляПроверкиУдостоверяющегоЦентра = ЭлектроннаяПодписьКлиентСерверЛокализация.ДанныеДляПроверкиУдостоверяющегоЦентра( + СертификатКриптографии); + + Если ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска = Неопределено Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); + Возврат Результат; + КонецЕсли; + + ДанныеУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.ДанныеУдостоверяющегоЦентра( + ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска); + + Если ДанныеУдостоверяющегоЦентра = Неопределено Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); + Возврат Результат; + КонецЕсли; + + КонтекстПроверки = ЭлектроннаяПодписьКлиентСерверЛокализация.КонтекстПроверкиУдостоверяющегоЦентраСертификата(); + КонтекстПроверки.ДанныеУдостоверяющегоЦентра = ДанныеУдостоверяющегоЦентра; + КонтекстПроверки.НаименованиеУдостоверяющегоЦентра = ДанныеДляПроверкиУдостоверяющегоЦентра.НаименованиеУдостоверяющегоЦентра; + КонтекстПроверки.ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска; + КонтекстПроверки.НаДату = ?(НаДату = Неопределено, ОбщегоНазначенияКлиент.ДатаСеанса(), НаДату); + КонтекстПроверки.РазницаСУниверсальнымВременем = ЭлектроннаяПодписьСлужебныйКлиент.РазницаСУниверсальнымВременем(); + КонтекстПроверки.ЭтоПроверкаПодписи = ПараметрыПроверки.ЭтоПроверкаПодписи; + КонтекстПроверки.ПроверятьСертификат = ПараметрыПроверки.ПроверятьСертификат; + + Если СвойстваСертификата = Неопределено Тогда + КонтекстПроверки.СвойстваСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваСертификата(СертификатКриптографии); + Иначе + КонтекстПроверки.СвойстваСертификата = СвойстваСертификата; + КонецЕсли; + + Результат = ЭлектроннаяПодписьКлиентСерверЛокализация.РезультатПроверкиУдостоверяющегоЦентраСертификата( + СертификатКриптографии, КонтекстПроверки); + + Если ЗначениеЗаполнено(Результат.Предупреждение.Причина) Тогда + Результат.Предупреждение.Причина = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + Результат.Предупреждение.Причина); + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.Предупреждение.Решение) Тогда + Результат.Предупреждение.Решение = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + Результат.Предупреждение.Решение); + КонецЕсли; + + // Конец Локализация + + Возврат Результат; + +КонецФункции + +// Только для внутреннего использования. +// Проверяет установку программ криптографии в рамках проверки установки компонент для работы с электронной подписью. +// +// Параметры: +// Результат - Булево - если Истина, то требуется установка дополнительных компонент. +// Компоненты - см. ЭлектроннаяПодписьСлужебныйКлиент.НовыйКомпонентыРаботыСКриптографией. +// +Процедура ПриПроверкеУстановкиПрограммКриптографии(Результат, Компоненты) Экспорт + + // Локализация + // Проверка установки криптопровайдера + Если Компоненты.КриптопровайдерУстановлен + И Не ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере() + И Не ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() + И Не ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() + И Не ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + + // В веб-клиенте выполнить проверку установки криптопровайдера можно только с установленной компонентой и расширением. + Если Компоненты.РасширениеРаботыСКриптографиейУстановлено И Компоненты.КомпонентаExtraCryptoAPIУстановлена Тогда + + ПараметрыПроверки = Новый Структура; + ПараметрыПроверки.Вставить("ПредлагатьУстановитьПрограмму", Ложь); + + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьУстановкуПрограммКриптографии(Неопределено, ПараметрыПроверки, + Новый ОписаниеОповещения("ПослеПроверкиУстановкиПрограммКриптографии", ЭлектроннаяПодписьСлужебныйКлиент, Компоненты)); + + КонецЕсли; + + Результат = Результат Или Не Компоненты.КриптопровайдерУстановлен; + + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// При продолжении проверки установленных программ криптографии. +// +// Параметры: +// Контекст - Структура - +// РезультатПроверки - Структура - +// ЕстьПроверяемыеПрограммы - Булево - +// +// Возвращаемое значение: +// Обещание - Булево +// +Асинх Функция ПриПродолженииПроверкиУстановленныхПрограммКриптографии( + Контекст, РезультатПроверки, ЕстьПроверяемыеПрограммы) Экспорт + + // Локализация + + Если Контекст.ПредлагатьУстановитьПрограмму + И РезультатПроверки.ПроверкаВыполнена + И Не ЕстьПроверяемыеПрограммы + И Не Контекст.ЭтоПовторнаяПроверка Тогда + + Оповещение = Новый ОписаниеОповещения("ПослеУстановкиКриптопровайдера", ЭтотОбъект, Контекст); + +#Если ВебКлиент Тогда + Компоненты = ЭлектроннаяПодписьСлужебныйКлиент.НовыйКомпонентыРаботыСКриптографией(); + Компоненты.КриптопровайдерУстановлен = Ложь; + + ТребуетсяУстановкаДополнительныхКомпонент = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ТребуетсяУстановкаДополнительныхКомпонент(Компоненты); + + Если ТребуетсяУстановкаДополнительныхКомпонент Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Компоненты", Компоненты); + ПараметрыФормы.Вставить("ИмяТребуемойКомпоненты", "ПрограммаКриптографии"); + ОткрытьФорму("ОбщаяФорма.НачалоРаботыСЭлектроннойПодписью", ПараметрыФормы, + Контекст.Форма, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат Ложь; + КонецЕсли; +#КонецЕсли + + ОткрытьФорму("Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаПриложенийДляРаботыСЭлектроннойПодписью",, + Контекст.Форма,,,,Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + Возврат Ложь; + КонецЕсли; + + // Конец Локализация + + Возврат Истина; + +КонецФункции + +// При обработке навигационной ссылки классификатора. +// +// Параметры: +// Элемент - ДекорацияФормы +// НавигационнаяСсылкаФорматированнойСтроки - Строка +// Параметры - Структура +// +// Возвращаемое значение: +// Обещание - Булево +// +Асинх Функция ПриОбработкеНавигационнойСсылкиКлассификатора(Элемент, НавигационнаяСсылкаФорматированнойСтроки, Параметры) Экспорт + + // Локализация + Если НавигационнаяСсылкаФорматированнойСтроки = "ДобавитьУдостоверяющийЦентрВСписокРазрешенныхНеаккредитованных" Тогда + + Если ЗначениеЗаполнено(Параметры.Сертификат) + И ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаПроверкаПоСпискуУЦ Тогда + ПараметрыСоздания = Новый Структура; + ПараметрыСоздания.Вставить("Сертификат", Параметры.Сертификат); + ОткрытьФорму("ОбщаяФорма.РазрешенныеНеаккредитованныеУЦ", ПараметрыСоздания, Элемент); + КонецЕсли; + + Возврат Ложь; + КонецЕсли; + // Конец Локализация + Возврат Истина; + +КонецФункции + + +#КонецОбласти // Локализация +#Область СлужебныеПроцедурыИФункции + +Функция ТекстОшибки(ТекстОшибки, Токен) + + Если Токен.Токен = Рутокен() Тогда + Если ЭтоОшибкаЗагрузкиБиблиотекиOpenSSL(ТекстОшибки) Тогда + Возврат ЭлектроннаяПодписьКлиентСерверЛокализация.НеУстановленаOpenSSL(); + КонецЕсли; + + Если ЭтоОшибкаЗагрузкиБиблиотекиИнтеграции(ТекстОшибки) Тогда + Возврат ЭлектроннаяПодписьКлиентСерверЛокализация.НеУстановленБиблиотекаИнтеграцииСOpenSSL(); + КонецЕсли; + + КонецЕсли; + + Если ЭтоОшибкаНеправильныйПинКод(ТекстОшибки) Тогда + Возврат НСтр("ru= 'Указан неправильный пин-код токена.'"); + КонецЕсли; + + Если ЭтоОшибкаНеНайденКлючИлиСертификат(ТекстОшибки) Тогда + Возврат НСтр("ru= 'Не найден сертификат на токене.'"); + КонецЕсли; + + Если ЭтоОшибкаИнициализацииСлота(ТекстОшибки) Тогда + Возврат ОшибкаИнициализацииСлота(Токен); + КонецЕсли; + + Возврат ТекстОшибки; + +КонецФункции + +Функция ПоддержкаШифрования(Токен, АлгоритмШифрования) + + МеханизмШифрования = МеханизмШифрования(АлгоритмШифрования); + Если Не ЗначениеЗаполнено(МеханизмШифрования) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ПоддерживаетсяМеханизм(Токен, МеханизмШифрования); + +КонецФункции Функция ЭтоОшибкаЗагрузкиБиблиотеки(ТекстОшибки) - Если СтрНачинаетсяС(ТекстОшибки, "[token:10102]") Тогда + Если СтрНайти(ТекстОшибки, "[token:10102]") <> 0 Тогда Возврат Истина; КонецЕсли; Возврат Ложь; КонецФункции +Функция ЭтоОшибкаЗагрузкиБиблиотекиOpenSSL(ТекстОшибки) + + Если СтрНайти(ТекстОшибки, "[token:10105]") <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +Функция ЭтоОшибкаЗагрузкиБиблиотекиИнтеграции(ТекстОшибки) + + Если СтрНайти(ТекстОшибки, "[token:10104]") <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +Функция ЭтоОшибкаИнициализацииСлота(ТекстОшибки) + + Если СтрНайти(ТекстОшибки, "[token:10203]") <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +Функция ОшибкаИнициализацииСлота(Токен) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось инициализировать слот %1 на токене %2'"), Токен.Слот, Токен.Представление); + +КонецФункции + Функция ЭтоОшибкаПолученияМеханизмовТокена(ТекстОшибки) Если СтрНайти(ТекстОшибки, "[token:10301]") <> 0 Тогда @@ -348,17 +1289,45 @@ Возврат Ложь; КонецФункции -Асинх Функция ПолучитьОшибкуКомпоненты(ОбъектКомпоненты) +Функция ЭтоОшибкаНеНайденКлючИлиСертификат(ТекстОшибки) + + Если СтрНайти(ТекстОшибки, "[token:10401]") <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЭтоОшибкаПомещенияПодписиВБуфер(ТекстОшибки) + + Если СтрНайти(ТекстОшибки, "[token:10601]") <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Асинх Функция ОшибкаКомпоненты(ОбъектКомпоненты, ВызыватьИсключение = Истина) Экспорт Ошибка = Ждать ОбъектКомпоненты.ПолучитьСписокОшибокАсинх(); Если Не ЗначениеЗаполнено(Ошибка) Тогда Возврат Истина; КонецЕсли; - ВызватьИсключение Ошибка; + Если ВызыватьИсключение Тогда + ВызватьИсключение Ошибка; + Иначе + Возврат Ложь; + КонецЕсли; КонецФункции +Асинх Функция ОчиститьОшибкиКомпоненты(ОбъектКомпоненты) Экспорт + Возврат Ждать ОшибкаКомпоненты(ОбъектКомпоненты, Ложь); +КонецФункции + Функция МодельТокена(Модель, ТипУстройства = Неопределено) Если СтрНачинаетсяС(НРег(Модель), "rutokenecp") Тогда @@ -398,10 +1367,14 @@ КонецФункции -Функция Рутокен() +Функция Рутокен() Экспорт Возврат "rutoken" КонецФункции +Функция Джакарта() Экспорт + Возврат "jacarta" +КонецФункции + Функция ПредставлениеСерийногоНомера(ТипУстройства, СерийныйНомер) Если ТипУстройства = Рутокен() Тогда @@ -411,20 +1384,412 @@ КонецФункции -Функция РекомендацииДляУстановкиБиблиотекТокена(ТипУстройства, Библиотеки) +Функция МеханизмПроверкиПодписи(АлгоритмПодписи) + Если АлгоритмПодписи = "ГОСТ 34.10-2012 256" Тогда + Возврат "CKM_GOSTR3410_WITH_GOSTR3411_12_256" + ИначеЕсли АлгоритмПодписи = "ГОСТ 34.10-2012 512" Тогда + Возврат "CKM_GOSTR3410_WITH_GOSTR3411_12_512" + ИначеЕсли АлгоритмПодписи = "ГОСТ 34.10-2001" Тогда + Возврат "CKM_GOSTR3410" + ИначеЕсли АлгоритмПодписи = "RSA_SIGN" Тогда + Возврат "CKM_RSA_PKCS"; + КонецЕсли; + Возврат ""; +КонецФункции + +Функция МеханизмШифрования(АлгоритмШифрования) + Если АлгоритмШифрования = "1.2.643.2.2.21" Тогда + Возврат "CKM_GOST28147_ECB" + ИначеЕсли АлгоритмШифрования = "1.2.643.7.1.1.5.2.1" Тогда + Возврат "CKM_KUZNECHIK_ECB" + ИначеЕсли АлгоритмШифрования = "1.2.643.7.1.1.5.1.1" Тогда + Возврат "CKM_MAGMA_ECB" + КонецЕсли; + Возврат ""; +КонецФункции + +Функция АлгоритмШифрованияЧисло(АлгоритмШифрования) + АлгоритмШифрования = ЭлектроннаяПодписьКлиентСерверЛокализация.ПреобразованныйАлгоритмШифрования(АлгоритмШифрования); + Если АлгоритмШифрования = "1.2.643.7.1.1.5.2.1" Тогда + Возврат 1177; // id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm + ИначеЕсли АлгоритмШифрования = "1.2.643.7.1.1.5.1.1" Тогда + Возврат 1174; // id-tc26-cipher-gostr3412-2015-magma + КонецЕсли; + Возврат 813; // id-tc26-gost-28147-param-Z +КонецФункции + +Функция ПоддерживаетсяМеханизм(Токен, Механизм) - Если НРег(ТипУстройства) = Рутокен() Тогда - Возврат НСтр("ru = 'Для работы с Рутокеном скачайте и установите библиотеку с сайта производителя https://www.rutoken.ru/support/download/pkcs/, вставьте токен в компьютер, обновите список токенов и повторите попытку.'"); - ИначеЕсли НРег(ТипУстройства) = "jacarta" Тогда - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для работы с %1 скачайте и установите библиотеку с сайта производителя https://aladdin-rd.ru/support/downloads/jacarta/, вставьте токен в компьютер, обновите список токенов и повторите попытку.'"), - "JaСarta"); + Если Не ЗначениеЗаполнено(Токен.Механизмы) Тогда + Возврат Ложь; КонецЕсли; - Возврат ""; + Попытка + СписокМеханизмов = ПрочитатьЗначениеJSON(Токен.Механизмы); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось прочитать список механизмов токена %1 (%2): + |%3'"), + Токен.Представление, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + Токен.Механизмы); + + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Электронная подпись.Работа с токенами'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), + "Ошибка", ТекстОшибки,, Истина); + Возврат Ложь; + КонецПопытки; + + Если Не ТипЗнч(СписокМеханизмов) = Тип("Структура") + Или Не СписокМеханизмов.Свойство("support_mechanisms") Тогда + Возврат Ложь; + КонецЕсли; + + СписокМеханизмов = СписокМеханизмов["support_mechanisms"]; + + Для Каждого Элемент Из СписокМеханизмов Цикл + Если СокрЛП(Элемент.name) = Механизм Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; КонецФункции -// Конец Локализация +#Область УстановкаКриптопровайдеровЛокализация + +#Область УстановитьCryptoPRO + +Процедура УстановитьКриптоПро(Форма, ОповещениеОЗавершении, ВходящийКонтекст) Экспорт + + Если ЗначениеЗаполнено(ВходящийКонтекст) Тогда + ПослеСохраненияФайловДистрибутива(Истина, ВходящийКонтекст); + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + Контекст = Новый Структура; + Контекст.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении); + Контекст.Вставить("ВладелецФормы", Форма.ВладелецФормы); + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ИмяПрограммы", ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро()); + Оповещение = Новый ОписаниеОповещения("УстановитьCryptoProCSPПослеВводаРегистрационныхДанных", + ЭтотОбъект, Контекст); + + ОткрытьФорму("Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаCryptoProCSPРегистрационныеДанные",, + Форма,,,, Оповещение); + Иначе + + ОписаниеОшибки = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Автоматическая установка приложения %1 возможна только на операционных системах Microsoft Windows. + |Для самостоятельной установки перейдите на официальный сайт КриптоПро, выберите и скачайте дистрибутив нужной операционной системы. + |Распакуйте скачанный архив и выполните запуск исполняемого файла.'"), + ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро(), + "https://cryptopro.ru/products/csp/downloads"); + + ОбработатьОшибкуУстановкиПрограммыКриптографии(ОписаниеОшибки, ОповещениеОЗавершении); + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьCryptoProCSPПослеВводаРегистрационныхДанных(РегистрационныеДанные, ВходящийКонтекст) Экспорт + + ОповещениеПослеСозданияКаталога = Новый ОписаниеОповещения( + "УстановитьКриптопровайдерПослеСозданияВременногоКаталога", ЭтотОбъект, ВходящийКонтекст); + + ВходящийКонтекст.Вставить("ПослеСозданияВременногоКаталога", ОповещениеПослеСозданияКаталога); + + Если ЗначениеЗаполнено(РегистрационныеДанные) И ТипЗнч(РегистрационныеДанные) = Тип("Структура") Тогда + + ВходящийКонтекст.Вставить("РегистрационныеДанные", РегистрационныеДанные); + Оповещение = Новый ОписаниеОповещения( + "УстановитьКриптопровайдерПослеПолученияДистрибутива", ЭтотОбъект, ВходящийКонтекст); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ВходящийКонтекст.Форма); + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + + ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.ПолучитьДистрибутив( + ВходящийКонтекст.РегистрационныеДанные, "CryptoProCSP"); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + Иначе + ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Пользователь прервал операцию'"), ВходящийКонтекст); + КонецЕсли; + +КонецПроцедуры #КонецОбласти + +#Область УстановитьVipNet + +Процедура УстановитьVipNet(Форма, ОповещениеОЗавершении, ВходящийКонтекст) Экспорт + + Если ЗначениеЗаполнено(ВходящийКонтекст) Тогда + ПослеСохраненияФайловДистрибутива(Истина, ВходящийКонтекст); + Возврат; + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация; + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Контекст = Новый Структура; + Контекст.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении); + Контекст.Вставить("ВладелецФормы", Форма.ВладелецФормы); + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ИмяПрограммы", ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); + + Оповещение = Новый ОписаниеОповещения("УстановитьViPNetCSPПослеВводаРегистрационныхДанных", + ЭтотОбъект, Контекст); + + ОткрытьФорму( + "Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаViPNetCSPРегистрационныеДанные",, + Форма,,,, Оповещение); + Иначе + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка %1 возможна только на операционных системах Microsoft Windows.'"), + ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); + ОбработатьОшибкуУстановкиПрограммыКриптографии(ОписаниеОшибки, ОповещениеОЗавершении); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьViPNetCSPПослеВводаРегистрационныхДанных(РегистрационныеДанные, ВходящийКонтекст) Экспорт + + Если РегистрационныеДанные = КодВозвратаДиалога.Отмена + Или РегистрационныеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация; + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда + РегистрационныеДанные.Вставить("Разрядность", 32); + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + РегистрационныеДанные.Вставить("Разрядность", 64); + Иначе + Возврат; + КонецЕсли; + + ОповещениеПослеСозданияКаталога = Новый ОписаниеОповещения( + "УстановитьКриптопровайдерПослеСозданияВременногоКаталога", ЭтотОбъект, ВходящийКонтекст); + + ВходящийКонтекст.Вставить("ПослеСозданияВременногоКаталога", ОповещениеПослеСозданияКаталога); + + Если ЗначениеЗаполнено(РегистрационныеДанные) И ТипЗнч(РегистрационныеДанные) = Тип("Структура") Тогда + ВходящийКонтекст.Вставить("РегистрационныеДанные", РегистрационныеДанные); + Оповещение = Новый ОписаниеОповещения( + "УстановитьКриптопровайдерПослеПолученияДистрибутива", ЭтотОбъект, ВходящийКонтекст); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ВходящийКонтекст.Форма); + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + + ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.ПолучитьДистрибутив(ВходящийКонтекст.РегистрационныеДанные, "ViPNetCSP"); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + Иначе + ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Пользователь прервал операцию'"), ВходящийКонтекст); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +Процедура УстановитьSignalCOM() Экспорт + + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://www.signal-com.ru/products/crypt/signal-com-csp/"); + +КонецПроцедуры + +// Параметры: +// ДлительнаяОперация - см. ДлительныеОперацииКлиент.НовыйРезультатДлительнойОперации +// ВходящийКонтекст - Структура +// +Процедура УстановитьКриптопровайдерПослеПолученияДистрибутива(ДлительнаяОперация, ВходящийКонтекст) Экспорт + + Если ДлительнаяОперация = Неопределено Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вызов API сервиса выдачи дистрибутивов %1 не был завершен штатно.'"), ВходящийКонтекст.ИмяПрограммы); + ОбработатьОшибкуУстановкиПрограммыКриптографии(ОписаниеОшибки, ВходящийКонтекст); + Возврат; + КонецЕсли; + + Если ДлительнаяОперация.Статус = "Ошибка" Тогда + СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(ДлительнаяОперация.ИнформацияОбОшибке); + Возврат; + КонецЕсли; + + РезультатПолученияДистрибутива = ЭлектроннаяПодписьСлужебныйВызовСервера.РезультатПолученияДистрибутиваКриптопровайдера( + ДлительнаяОперация, ВходящийКонтекст.Форма.УникальныйИдентификатор); + Если ЗначениеЗаполнено(РезультатПолученияДистрибутива.Ошибка) Тогда + ОбработатьОшибкуУстановкиПрограммыКриптографии(РезультатПолученияДистрибутива.Ошибка, ВходящийКонтекст); + Возврат; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ВходящийКонтекст, РезультатПолученияДистрибутива.ДанныеДистрибутива); + ФайловаяСистемаКлиент.СоздатьВременныйКаталог(ВходящийКонтекст.ПослеСозданияВременногоКаталога); + +КонецПроцедуры + +Процедура УстановитьКриптопровайдерПослеСозданияВременногоКаталога(ИмяКаталогаВременныхФайлов, ВходящийКонтекст) Экспорт + + ИмяКаталогаВременныхФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталогаВременныхФайлов); + ВходящийКонтекст.Вставить("ВременныйКаталог", ИмяКаталогаВременныхФайлов); + + Оповещение = Новый ОписаниеОповещения("ПослеСохраненияФайловДистрибутива", ЭтотОбъект, ВходящийКонтекст); + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Интерактивно = Ложь; + ПараметрыСохранения.Диалог.Каталог = ИмяКаталогаВременныхФайлов; + ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, ВходящийКонтекст.Дистрибутив, ПараметрыСохранения); + +КонецПроцедуры + +Процедура ПослеСохраненияФайловДистрибутива(ПолученныеФайлы, ВходящийКонтекст) Экспорт + + Если ПолученныеФайлы = Неопределено Тогда + ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Не удалось сохранить на компьютер файлы дистрибутива'"), + ВходящийКонтекст); + Возврат; + КонецЕсли; + + ВходящийКонтекст.Вставить("ФайлыДистрибутиваПолучены", Истина); + + Если ВходящийКонтекст.РегистрационныеДанные.ВыполнятьКонтрольЦелостности Тогда + ПараметрыФормы = Новый Структура; + + ПараметрыФормы.Вставить("Дистрибутив", ВходящийКонтекст.ВременныйКаталог + ВходящийКонтекст.ИмяФайлаДистрибутива); + ПараметрыФормы.Вставить("Версия", ВходящийКонтекст.Версия); + ПараметрыФормы.Вставить("ИмяПрограммы", ВходящийКонтекст.ИмяПрограммы); + ПараметрыФормы.Вставить("КонтрольнаяСумма", ВходящийКонтекст.КонтрольнаяСумма); + ПараметрыФормы.Вставить("КомандаЗапуска", ВходящийКонтекст.КомандаЗапуска); + + ОткрытьФорму( + "Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаКриптопровайдераИнформацияОДистрибутиве", + ПараметрыФормы, , , , , + Новый ОписаниеОповещения("УстановитьКриптопровайдерПослеПолученияПодтвержденияНаУстановку", ЭтотОбъект, + ВходящийКонтекст)); + Иначе + УстановитьКриптопровайдерПослеПолученияПодтвержденияНаУстановку(Истина, ВходящийКонтекст); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьКриптопровайдерПослеПолученияПодтвержденияНаУстановку(Результат, ВходящийКонтекст) Экспорт + + Если Результат = Истина Тогда + + ЗапуститьПриложениеНаКлиенте(ВходящийКонтекст.КомандаЗапуска, ВходящийКонтекст.ВременныйКаталог, + Истина, Ложь, ВходящийКонтекст); + Иначе + + ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Пользователь прервал операцию'"), ВходящийКонтекст); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьОшибкуУстановкиПрограммыКриптографии(Ошибка, ВходящийКонтекст) + + Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда + СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Ошибка); + Возврат; + КонецЕсли; + + РезультатВыполнения = Новый Структура("Выполнено", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", Ошибка); + + Если ТипЗнч(ВходящийКонтекст) = Тип("Структура") + И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ВходящийКонтекст,"ФайлыДистрибутиваПолучены", Ложь) Тогда + РезультатВыполнения.Вставить("ВходящийКонтекст", ВходящийКонтекст); + КонецЕсли; + + Если ТипЗнч(ВходящийКонтекст) = Тип("Структура") И ВходящийКонтекст.ОповещениеОЗавершении <> Неопределено Тогда + + ВыполнитьОбработкуОповещения(ВходящийКонтекст.ОповещениеОЗавершении, РезультатВыполнения); + + ИначеЕсли ТипЗнч(ВходящийКонтекст) = Тип("ОписаниеОповещения") Тогда + + РезультатВыполнения = Новый Структура("Выполнено", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", Ошибка); + ВыполнитьОбработкуОповещения(ВходящийКонтекст, РезультатВыполнения); + + Иначе + + ПоказатьПредупреждение(Неопределено, Ошибка,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установка %1'"), ВходящийКонтекст.ИмяПрограммы)); + + КонецЕсли; + +КонецПроцедуры + +#Область ЗапуститьПриложениеНаКлиенте + +Процедура ЗапуститьПриложениеНаКлиенте(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, ВыводитьСообщения, ВходящийКонтекст) + + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения", ЭтотОбъект, ВходящийКонтекст, + "ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения", ЭтотОбъект); + + ПараметрыЗапуска = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); + ПараметрыЗапуска.Оповещение = Оповещение; + ПараметрыЗапуска.ТекущийКаталог = ТекущийКаталог; + ПараметрыЗапуска.ДождатьсяЗавершения = ДождатьсяЗавершения; + +#Если ВебКлиент Или МобильныйКлиент Тогда + ВходящийКонтекст.КомандаЗапуска = ВходящийКонтекст.ВременныйКаталог + ВходящийКонтекст.ИмяФайлаДистрибутива; +#Иначе + ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Истина; +#КонецЕсли + + ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапуска); + +КонецПроцедуры + +Процедура ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения(КодВозврата, ВходящийКонтекст) Экспорт + + Если ТипЗнч(ВходящийКонтекст.ОповещениеОЗавершении) = Тип("ОписаниеОповещения") Тогда + РезультатВыполнения = Новый Структура; + РезультатВыполнения.Вставить("Выполнено", Истина); + РезультатВыполнения.Вставить("ОписаниеОшибки", ""); + + ВыполнитьОбработкуОповещения( + ВходящийКонтекст.ОповещениеОЗавершении, + РезультатВыполнения); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения(ИнформацияОбОшибке, СтандартнаяОбработка, ВходящийКонтекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ОписаниеОшибки = НСтр("ru = 'Не удалось открыть файл %1. + |Возможно файл уже открыт.'"); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, ВходящийКонтекст.СтрокаКоманды); + ОбщегоНазначенияКлиент.СообщитьПользователю(ОписаниеОшибки); + + РезультатВыполнения = Новый Структура; + РезультатВыполнения.Вставить("Выполнено", Ложь); + РезультатВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки); + РезультатВыполнения.Вставить("ВходящийКонтекст", ВходящийКонтекст); + + ВыполнитьОбработкуОповещения( + ВходящийКонтекст.ОповещениеОЗавершении, + РезультатВыполнения); + +КонецПроцедуры + +#КонецОбласти + +Процедура ПослеУстановкиКриптопровайдера(Результат, Контекст) Экспорт + + Контекст.Вставить("ЭтоПовторнаяПроверка", Истина); + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьУстановкуПрограммКриптографии(Контекст.Форма, Контекст, Контекст.Оповещение); + +КонецПроцедуры + +#КонецОбласти + + +#КонецОбласти + +// Конец Локализация diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl index eccecf955..dfa4e4f79 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентПереопределяемый/Module.bsl @@ -82,7 +82,7 @@ // // Параметры: // Параметры - Структура: -// * Сертификаты - Массив Из Структура: +// * Сертификаты - Массив из Структура: // ** НовыйСертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - добавленный сертификат. // ** СтарыйСертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования, Неопределено - найденный сертификат // с аналогичными свойствами субъекта, подлежащий замене. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl index 951b30f4d..7559e7033 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl @@ -318,7 +318,10 @@ НСтр("ru = '%1. Документ изменен. %2'"), Статус, РезультатПроверки.ОшибкаМатематическойПроверкиПодписи); ИначеЕсли ЗначениеЗаполнено(РезультатПроверки.ОшибкаПроверкиДополнительныхАтрибутов) Тогда - Если СвойстваПодписи.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") + Если РезультатПроверки.ПодписьМатематическиВерна = Ложь Тогда + СвойстваПодписи.РезультатПроверкиКраткий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1. %2'"), Статус, РезультатПроверки.ОшибкаПроверкиДополнительныхАтрибутов); + ИначеЕсли СвойстваПодписи.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Или СвойстваПодписи.ТипПодписи = ПредопределенноеЗначение( "Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда @@ -327,7 +330,7 @@ РезультатПроверки.ОшибкаПроверкиДополнительныхАтрибутов); Иначе СвойстваПодписи.РезультатПроверкиКраткий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1. Документ не изменен, но один из сертификатов не прошел проверку. %2'"), Статус, + НСтр("ru = '%1. Документ не изменен, но один из сертификатов или дополнительные атрибуты подписи не прошли проверку. %2'"), Статус, РезультатПроверки.ОшибкаПроверкиДополнительныхАтрибутов); КонецЕсли; Иначе @@ -337,6 +340,24 @@ КонецПроцедуры +// Формирует имя файла подписи по шаблону. +// +// Параметры: +// ИмяБезРасширения - Строка - исходное имя файла без расширения. Например, ПодписанныйОбъект.Наименование. +// КомуВыданСертификат - Строка - владелец сертификата (фамилия, имя, организация, должность). +// РасширениеДляФайловПодписи - Строка - расширение для файлов подписи, добавляемое к имени файла. +// ТребуетсяРазделитель - Булево - признак дополнительной установки разделителя в имени файла. +// +// Возвращаемое значение: +// Строка +// +Функция ИмяФайлаПодписи(ИмяБезРасширения, КомуВыданСертификат, РасширениеДляФайловПодписи, ТребуетсяРазделитель = Истина) Экспорт + + Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(ИмяБезРасширения, + КомуВыданСертификат, РасширениеДляФайловПодписи, ТребуетсяРазделитель); + +КонецФункции + #Область УстаревшиеПроцедурыИФункции // Устарела. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl index c77f3ff2d..a818e7565 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСерверЛокализация/Module.bsl @@ -6,8 +6,15 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс +// Переопределяет представление сертификата. +// +// Параметры: +// Сертификат - СертификатКриптографии +// РазницаСУниверсальнымВременем - Число +// Представление - Строка +// Процедура ПриПолученииПредставленияСертификата(Знач Сертификат, Знач РазницаСУниверсальнымВременем, Представление) Экспорт // Локализация @@ -23,6 +30,12 @@ КонецПроцедуры +// Переопределяет представление субъекта сертификата. +// +// Параметры: +// Сертификат - СертификатКриптографии +// Представление - Строка +// Процедура ПриПолученииПредставленияСубъекта(Знач Сертификат, Представление) Экспорт // Локализация @@ -31,6 +44,12 @@ КонецПроцедуры +// Переопределяет структуру расширенных свойств субъекта сертификата. +// +// Параметры: +// Субъект - ФиксированнаяСтруктура +// Свойства - Структура +// Процедура ПриПолученииРасширенныхСвойствСубъектаСертификата(Знач Субъект, Свойства) Экспорт // Локализация @@ -135,6 +154,12 @@ КонецПроцедуры +// Переопределяет структуру расширенных свойств издателя сертификата. +// +// Параметры: +// Издатель - ФиксированнаяСтруктура +// Свойства - Структура +// Процедура ПриПолученииРасширенныхСвойствИздателяСертификата(Знач Издатель, Свойства) Экспорт // Локализация @@ -155,6 +180,13 @@ КонецПроцедуры +// Переопределяет результат сравнения сертификатов по свойствам субъекта. +// +// Параметры: +// СвойстваНового - Структура +// СвойстваСтарого - Структура +// Результат - Булево +// Процедура ПриСравненииСертификатов(СвойстваНового, СвойстваСтарого, Результат) Экспорт // Локализация @@ -174,6 +206,12 @@ КонецПроцедуры +// При получении конверта XML. +// +// Параметры: +// Параметры - Структура +// КонвертXML - Строка +// Процедура ПриПолученииКонвертаXML(Параметры, КонвертXML) Экспорт // Локализация @@ -186,6 +224,11 @@ КонецПроцедуры +// При получении варианта конверта по умолчанию. +// +// Параметры: +// КонвертXML - Строка +// Процедура ПриПолученииВариантаКонвертаПоУмолчанию(КонвертXML) Экспорт // Локализация @@ -198,15 +241,18 @@ // // Параметры: // ИмяИздателя - Строка - имя издателя латиницей в нижнем регистре -// Сертификат - ДвоичныеДанные -// - Строка +// СвойстваСертификата - ДвоичныеДанные - данные сертификата. +// - Строка - адрес данных сертификата. +// - Структура - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата +// КаталогиСписковОтзываУЦ - Строка - имена каталогов для кэширования списков отзыва на собственном ресурсе +// из настроек классификатора аккредитованных УЦ, совпадают с именами издателя сертификата. // // Возвращаемое значение: // Структура: // * АдресВнутренний - Строка - идентификатор для поиска в базе // * АдресВнешний - Строка - адрес ресурса для скачивания // -Функция АдресСпискаОтзываВнутренний(ИмяИздателя, Сертификат, КаталогиСписковОтзываУЦ) Экспорт +Функция АдресСпискаОтзываВнутренний(ИмяИздателя, СвойстваСертификата, КаталогиСписковОтзываУЦ) Экспорт Результат = Новый Структура("АдресВнешний, АдресВнутренний"); @@ -219,14 +265,16 @@ Возврат Результат; КонецЕсли; - ДополнительныеСвойстваСертификата = - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(Сертификат, 0); + Если ТипЗнч(СвойстваСертификата) <> Тип("Структура") Тогда + СвойстваСертификата = + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(СвойстваСертификата, 0); + КонецЕсли; - Если Не ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра) Тогда + Если Не ЗначениеЗаполнено(СвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра) Тогда Возврат Результат; КонецЕсли; - Результат.АдресВнутренний = СтрШаблон("%1/%2", ИмяИздателя, НРег(ДополнительныеСвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра)); + Результат.АдресВнутренний = СтрШаблон("%1/%2", ИмяИздателя, НРег(СвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра)); // Локализация @@ -241,6 +289,14 @@ КонецФункции +// Каталоги списков отзыва УЦ. +// +// Параметры: +// АккредитованныеУдостоверяющиеЦентры - Структура +// +// Возвращаемое значение: +// Строка - каталоги списков отзыва УЦ +// Функция КаталогиСписковОтзываУЦ(АккредитованныеУдостоверяющиеЦентры) Экспорт // Локализация @@ -263,8 +319,15 @@ КонецФункции +// Возвращает данные для проверки удостоверяющего центра. +// +// Параметры: +// ЗначенияПоиска - Строка +// АккредитованныеУдостоверяющиеЦентры - Структура +// // Возвращаемое значение: -// Неопределено, Структура - данные удостоверяющего центра: +// Неопределено +// Структура: // * Государственный - Булево // * РазрешенныйНеаккредитованный - Булево // * ПериодыДействия - Неопределено, Массив из Структура: @@ -329,6 +392,12 @@ КонецФункции +// При определении ссылки на инструкцию по работе с программами. +// +// Параметры: +// Раздел - Строка +// НавигационнаяСсылка - Строка +// Процедура ПриОпределенииСсылкиНаИнструкциюПоРаботеСПрограммами(Раздел, НавигационнаяСсылка) Экспорт // Локализация @@ -343,16 +412,12 @@ КонецПроцедуры -Процедура ПриОпределенииСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(НавигационнаяСсылка, ИмяРаздела = "") Экспорт - - // Локализация - - НавигационнаяСсылка = ""; - - // Конец Локализация - -КонецПроцедуры - +// При определении ссылки на поиск по ошибкам при работе с электронной подписью. +// +// Параметры: +// НавигационнаяСсылка - Строка +// СтрокаПоиска - Строка - строка поиска +// Процедура ПриОпределенииСсылкиНаПоискПоОшибкамПриРаботеСЭлектроннойПодписью(НавигационнаяСсылка, СтрокаПоиска = "") Экспорт // Локализация @@ -400,6 +465,15 @@ КонецФункции +// Реализует альтернативную установку параметров менеджера криптографии. +// Например, если требуется учесть специфику программы электронной подписи и шифрования. +// +// Параметры: +// ОписаниеПрограммы - см. ЭлектроннаяПодписьСлужебныйПовтИсп.ОписаниеПрограммы +// Менеджер - МенеджерКриптографии +// АлгоритмШифрования - Строка +// Результат - Булево +// Процедура ПриУстановкеПараметровМенеджераКриптографии(ОписаниеПрограммы, Менеджер, АлгоритмШифрования, Результат) Экспорт // Локализация @@ -408,6 +482,11 @@ КонецПроцедуры +// Добавляет наборы алгоритмов для создания подписи с национальной спецификой. +// +// Параметры: +// Наборы - Массив +// Процедура ПриУстановкеНаборовАлгоритмовДляСозданияПодписи(Наборы) Экспорт // Локализация @@ -462,6 +541,11 @@ КонецПроцедуры +// Добавляет наборы алгоритмов шифрования с национальной спецификой. +// +// Параметры: +// Наборы - Массив +// Процедура ПриУстановкеНаборовАлгоритмовШифрования(Наборы) Экспорт // Локализация @@ -488,6 +572,11 @@ КонецПроцедуры +// Добавляет национальные алгоритмы подписи в список актуальных алгоритмов. +// +// Возвращаемое значение: +// Массив +// Функция АктуальныеАлгоритмыПрограмм() Экспорт Результат = Новый Массив; @@ -500,341 +589,6 @@ КонецФункции -// Локализация - -#Область ШаблоныКонвертаXML - -Функция КонвертПоУмолчанию() - - Возврат "furs.mark.crpt.ru_v1"; - -КонецФункции - -// Вариант "furs.mark.crpt.ru_v1". -Функция КонвертXML1() - - Возврат - " - | - | - | - | - | - | - | - | - | - | - | - | - | %DigestValue% - | - | - | - | %SignatureValue% - | - | - | - | - | - | - | - | - | %BinarySecurityToken% - | - | - | - | - | %MessageXML% - | - |"; - -КонецФункции - -// Вариант "dmdk.goznak.ru_v1". -Функция КонвертXML2() - - Возврат - " - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | %DigestValue% - | - | - | %SignatureValue% - | - | - | %BinarySecurityToken% - | - | - | - | - | - | %MessageXML% - | - | - | - |"; - -КонецФункции - -#КонецОбласти - -// Конец Локализация - -// Локализация - -Функция ПредставлениеСубъекта(Знач Сертификат, Знач Отчество) - - Субъект = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат); - - Если ЗначениеЗаполнено(Субъект.Фамилия) - И ЗначениеЗаполнено(Субъект.Имя) Тогда - - Представление = Субъект.Фамилия + " " + Субъект.Имя; - - ИначеЕсли ЗначениеЗаполнено(Субъект.Фамилия) Тогда - Представление = Субъект.Фамилия; - - ИначеЕсли ЗначениеЗаполнено(Субъект.Имя) Тогда - Представление = Субъект.Имя; - КонецЕсли; - - Если Отчество И ЗначениеЗаполнено(Субъект.Отчество) Тогда - Представление = Представление + " " + Субъект.Отчество; - КонецЕсли; - - Если ЗначениеЗаполнено(Представление) Тогда - Если ЗначениеЗаполнено(Субъект.Организация) Тогда - Представление = Представление + ", " + Субъект.Организация; - КонецЕсли; - Если ЗначениеЗаполнено(Субъект.Подразделение) Тогда - Представление = Представление + ", " + Субъект.Подразделение; - КонецЕсли; - Если ЗначениеЗаполнено(Субъект.Должность) Тогда - Представление = Представление + ", " + Субъект.Должность; - КонецЕсли; - - ИначеЕсли ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда - Представление = Субъект.ОбщееИмя; - КонецЕсли; - Возврат Представление; - -КонецФункции - -Функция ПодготовитьСтроку(СтрокаИзСертификата) - Возврат СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтрокаИзСертификата)); -КонецФункции - -Функция ЭтоИННФизЛица(ИНН) - - Если СтрДлина(ИНН) <> 12 Тогда - Возврат Ложь; - КонецЕсли; - - Для НомерСимвола = 1 По 12 Цикл - Если СтрНайти("0123456789", Сред(ИНН,НомерСимвола,1)) = 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - - Если СтрНачинаетсяС(ИНН, "00") Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -Процедура ЗаполнитьИНН(Свойства, Данные) - - ИННЮЛ = Неопределено; - ИНН = Неопределено; - - Если Данные.Свойство("INN") Тогда - ИНН = Данные.INN; - ИначеЕсли Данные.Свойство("OID1_2_643_3_131_1_1") Тогда - ИНН = ПодготовитьСтроку(Данные.OID1_2_643_3_131_1_1); - КонецЕсли; - - Если Данные.Свойство("INNLE") Тогда - ИННЮЛ = Данные.INNLE; - ИначеЕсли Данные.Свойство("OID1_2_643_100_4") - И СтрДлина(Данные.OID1_2_643_100_4) = 10 Тогда - ИННЮЛ = ПодготовитьСтроку(Данные.OID1_2_643_100_4); - ИначеЕсли Данные.Свойство("_1_2_643_100_4") Тогда - ИННЮЛ = ПодготовитьСтроку(Данные._1_2_643_100_4); - КонецЕсли; - - Свойства.ИННЮЛ = ИННЮЛ; - Свойства.ИНН = ИНН; - -КонецПроцедуры - -Функция КонтекстПроверкиУдостоверяющегоЦентраСертификата() Экспорт - - Структура = Новый Структура; - Структура.Вставить("ДанныеУдостоверяющегоЦентра"); - Структура.Вставить("ЗначенияПоиска"); - Структура.Вставить("НаименованиеУдостоверяющегоЦентра", ""); - Структура.Вставить("РазницаСУниверсальнымВременем"); - Структура.Вставить("НаДату"); - Структура.Вставить("ЭтоПроверкаПодписи", Ложь); - Структура.Вставить("СвойстваСертификата"); - Структура.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); - - Возврат Структура; - -КонецФункции - -Функция ДанныеДляПроверкиУдостоверяющегоЦентра(Сертификат) Экспорт - - Результат = Новый Структура("ЗначенияПоиска, НаименованиеУдостоверяющегоЦентра"); - - СвойстваИздателя = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат); - - Результат.НаименованиеУдостоверяющегоЦентра = СвойстваИздателя.ОбщееИмя; - - ЗначенияПоиска = Новый Массив; - - Если СвойстваИздателя.Свойство("ОГРН") И ЗначениеЗаполнено(СвойстваИздателя.ОГРН) Тогда - ЗначенияПоиска.Добавить(СвойстваИздателя.ОГРН); - КонецЕсли; - - Если ЗначениеЗаполнено(СвойстваИздателя.ОбщееИмя) Тогда - ЗначенияПоиска.Добавить(СвойстваИздателя.ОбщееИмя); - КонецЕсли; - - Если ЗначенияПоиска.Количество() > 0 Тогда - Результат.ЗначенияПоиска = СтрСоединить(ЗначенияПоиска, ","); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция ПодготовитьЗначениеПоиска(Знач ЗначениеПоиска) Экспорт - - ЗначениеПоиска = ВРег(ЗначениеПоиска); - ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, """", ""); - ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "«", ""); - ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "»", ""); - ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "“", ""); - ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "”", ""); - - Возврат ЗначениеПоиска; - -КонецФункции - -// Для функции МенеджерКриптографииАлгоритмыУстановлены. -Функция ВыполненОбходНарушенияОбратнойСовместимостиВVipNetCSP_4_4(ОписаниеПрограммы, Менеджер, АлгоритмШифрования = "") - - АлгоритмПодписи = Строка(ОписаниеПрограммы.АлгоритмПодписи); - АлгоритмХеширования = Строка(ОписаниеПрограммы.АлгоритмХеширования); - Если ПустаяСтрока(АлгоритмШифрования) Тогда - АлгоритмШифрования = ПреобразованныйАлгоритмШифрования(Строка(ОписаниеПрограммы.АлгоритмШифрования)); - Иначе - АлгоритмШифрования = ПреобразованныйАлгоритмШифрования(АлгоритмШифрования); - КонецЕсли; - -#Если ВебКлиент Тогда - - Если ИменаАлгоритмовПодписиГОСТ_34_10_2012_256().Найти(АлгоритмПодписи) <> Неопределено Тогда - АлгоритмПодписи = "1.2.643.7.1.1.1.1"; // ГОСТ 34.10-2012 256 - ИначеЕсли ИменаАлгоритмовПодписиГОСТ_34_10_2012_512().Найти(АлгоритмПодписи) <> Неопределено Тогда - АлгоритмПодписи = "1.2.643.7.1.1.1.2"; // ГОСТ 34.10-2012 512 - КонецЕсли; - - Если ИменаАлгоритмовХешированияГОСТ_34_11_2012_256().Найти(АлгоритмХеширования) <> Неопределено Тогда - АлгоритмХеширования = "1.2.643.7.1.1.2.2"; // ГОСТ 34.11-2012 256 - ИначеЕсли ИменаАлгоритмовХешированияГОСТ_34_11_2012_512().Найти(АлгоритмХеширования) <> Неопределено Тогда - АлгоритмХеширования = "1.2.643.7.1.1.2.3"; // ГОСТ 34.11-2012 512 - КонецЕсли; - -#Иначе - Если Не (ОписаниеПрограммы.ИмяПрограммы = "Infotecs GOST 2012/512 Cryptographic Service Provider" - И ОписаниеПрограммы.ТипПрограммы = 77) И Не (ОписаниеПрограммы.ИмяПрограммы = "Infotecs GOST 2012/1024 Cryptographic Service Provider" - И ОписаниеПрограммы.ТипПрограммы = 78) Тогда - Возврат Ложь; - КонецЕсли; -#КонецЕсли - - АлгоритмыУстановлены = Истина; - Попытка - Менеджер.АлгоритмПодписи = АлгоритмПодписи; - Менеджер.АлгоритмХеширования = АлгоритмХеширования; - Менеджер.АлгоритмШифрования = АлгоритмШифрования; - Исключение - АлгоритмыУстановлены = Ложь; - КонецПопытки; - - Если АлгоритмыУстановлены Тогда - Возврат Истина; - КонецЕсли; - - Если АлгоритмПодписи = "GOST 34.10-2012 256" - И АлгоритмХеширования = "GOST 34.11-2012 256" Тогда - - АлгоритмПодписи = "GR 34.10-2012 256"; - АлгоритмХеширования = "GR 34.11-2012 256"; - - ИначеЕсли АлгоритмПодписи = "GR 34.10-2012 256" - И АлгоритмХеширования = "GR 34.11-2012 256" Тогда - - АлгоритмПодписи = "GOST 34.10-2012 256"; - АлгоритмХеширования = "GOST 34.11-2012 256"; - - ИначеЕсли АлгоритмПодписи = "GOST 34.10-2012 512" - И АлгоритмХеширования = "GOST 34.11-2012 512" Тогда - - АлгоритмПодписи = "GR 34.10-2012 512"; - АлгоритмХеширования = "GR 34.11-2012 512"; - - ИначеЕсли АлгоритмПодписи = "GR 34.10-2012 512" - И АлгоритмХеширования = "GR 34.11-2012 512" Тогда - - АлгоритмПодписи = "GOST 34.10-2012 512"; - АлгоритмХеширования = "GOST 34.11-2012 512"; - - Иначе - Возврат Ложь; - КонецЕсли; - - АлгоритмыУстановлены = Истина; - Попытка - Менеджер.АлгоритмПодписи = АлгоритмПодписи; - Менеджер.АлгоритмХеширования = АлгоритмХеширования; - Менеджер.АлгоритмШифрования = АлгоритмШифрования; - Исключение - АлгоритмыУстановлены = Ложь; - КонецПопытки; - - Возврат АлгоритмыУстановлены; - -КонецФункции // Только для внутреннего использования. // @@ -849,6 +603,8 @@ РезультатПроверкиУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию(); + // Локализация + ДанныеУдостоверяющегоЦентра = КонтекстПроверки.ДанныеУдостоверяющегоЦентра; Если ДанныеУдостоверяющегоЦентра = Неопределено Тогда @@ -1138,34 +894,243 @@ КонецЕсли; КонецЕсли; + // Конец Локализация + Возврат РезультатПроверкиУдостоверяющегоЦентра; КонецФункции -Функция КоличествоДнейДляОповещенияОбОкончанииСрокаДействия() +// При получении имени программы электронной подписи. +// +// Параметры: +// Криптопровайдер - Структура +// Результат - Строка +// +Процедура ПриПолученииИмениПрограммыЭлектроннойПодписи(Криптопровайдер, Результат) Экспорт - Возврат 30; + // Локализация -КонецФункции + Если ПустаяСтрока(Криптопровайдер.Идентификатор) Тогда + Возврат; + КонецЕсли; + + Если СтрНайти(Криптопровайдер.Идентификатор, "CryptoPro") <> 0 Тогда + Результат = ИмяПрограммыКриптоПро(); + Возврат; + КонецЕсли; + + Если СтрНайти(Криптопровайдер.Идентификатор, "VipNet") <> 0 Тогда + Результат = ИмяПрограммыVipNet(); + Возврат; + КонецЕсли; + + Если СтрНайти(Криптопровайдер.Идентификатор, "Lissi") <> 0 Тогда + Результат = НСтр("ru = 'ЛИССИ CSP'"); + Возврат; + КонецЕсли; + + Если СтрНайти(Криптопровайдер.Идентификатор, "SignalCom") <> 0 Тогда + Результат = НСтр("ru = 'Сигнал-КОМ CSP'"); + Возврат; + КонецЕсли; + + // Конец Локализация + +КонецПроцедуры -Функция ДатаОкончанияВыдачиСертификатовСотрудниковКоммерческимиУЦ() - - Возврат Дата(2023, 08, 31, 21, 0, 0); // Универсальная дата от московского времени. - -КонецФункции +// Это ошибка из-за не установленных библиотек токена. +// +// Параметры: +// ТекстОшибки - Строка +// Результат - Булево +// +Процедура ПриОпределенииОшибкиЗагрузкиБиблиотекТокена(ТекстОшибки, Результат) Экспорт + + // Локализация + Если ТекстОшибки = НеУстановленаПанельРутокен() + Или ТекстОшибки = НеУстановленЕдиныйКлиентДжакарта() + Или ТекстОшибки = НеУстановленаOpenSSL() + Или ТекстОшибки = НеУстановленБиблиотекаИнтеграцииСOpenSSL() Тогда + Результат = Истина; + КонецЕсли; + // Конец Локализация + +КонецПроцедуры +// Ссылка на статью об удостоверяющих центрах. +// +// Возвращаемое значение: +// Строка - ссылка на статью об удостоверяющих центрах +// Функция СсылкаНаСтатьюОбУдостоверяющихЦентрах() Экспорт - Возврат "https://its.1c.ru/bmk/esig_uc"; + Ссылка = ""; + // Локализация + Ссылка = "https://its.1c.ru/bmk/esig_uc"; + // Конец Локализация + Возврат Ссылка; + +КонецФункции + +#КонецОбласти + +// Локализация + +#Область СлужебныеПроцедурыИФункции + +// Контекст проверки удостоверяющего центра сертификата. +// +// Возвращаемое значение: +// Структура +// +Функция КонтекстПроверкиУдостоверяющегоЦентраСертификата() Экспорт + + Структура = Новый Структура; + + Структура.Вставить("ДанныеУдостоверяющегоЦентра"); + Структура.Вставить("ЗначенияПоиска"); + Структура.Вставить("НаименованиеУдостоверяющегоЦентра", ""); + Структура.Вставить("РазницаСУниверсальнымВременем"); + Структура.Вставить("НаДату"); + Структура.Вставить("ЭтоПроверкаПодписи", Ложь); + Структура.Вставить("СвойстваСертификата"); + Структура.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); + + Возврат Структура; + +КонецФункции + +Функция ДанныеДляПроверкиУдостоверяющегоЦентра(Сертификат) Экспорт + + Результат = Новый Структура("ЗначенияПоиска, НаименованиеУдостоверяющегоЦентра"); + + СвойстваИздателя = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат); + + Результат.НаименованиеУдостоверяющегоЦентра = СвойстваИздателя.ОбщееИмя; + + ЗначенияПоиска = Новый Массив; + + Если СвойстваИздателя.Свойство("ОГРН") И ЗначениеЗаполнено(СвойстваИздателя.ОГРН) Тогда + ЗначенияПоиска.Добавить(СвойстваИздателя.ОГРН); + КонецЕсли; + + Если ЗначениеЗаполнено(СвойстваИздателя.ОбщееИмя) Тогда + ЗначенияПоиска.Добавить(СвойстваИздателя.ОбщееИмя); + КонецЕсли; + + Если ЗначенияПоиска.Количество() > 0 Тогда + Результат.ЗначенияПоиска = СтрСоединить(ЗначенияПоиска, ","); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ПодготовитьЗначениеПоиска(Знач ЗначениеПоиска) Экспорт + + ЗначениеПоиска = ВРег(ЗначениеПоиска); + ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, """", ""); + ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "«", ""); + ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "»", ""); + ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "“", ""); + ЗначениеПоиска = СтрЗаменить(ЗначениеПоиска, "”", ""); + + Возврат ЗначениеПоиска; КонецФункции Функция ИмяПрограммыVipNet() Экспорт - Возврат "ViPNet CSP"; + Возврат НСтр("ru = 'ViPNet CSP'"); КонецФункции Функция ИмяПрограммыКриптоПро() Экспорт - Возврат "КриптоПро CSP"; + Возврат НСтр("ru = 'КриптоПро CSP'"); +КонецФункции + +Функция ВыполненОбходНарушенияОбратнойСовместимостиВVipNetCSP_4_4(ОписаниеПрограммы, Менеджер, АлгоритмШифрования = "") + + АлгоритмПодписи = Строка(ОписаниеПрограммы.АлгоритмПодписи); + АлгоритмХеширования = Строка(ОписаниеПрограммы.АлгоритмХеширования); + Если ПустаяСтрока(АлгоритмШифрования) Тогда + АлгоритмШифрования = ПреобразованныйАлгоритмШифрования(Строка(ОписаниеПрограммы.АлгоритмШифрования)); + Иначе + АлгоритмШифрования = ПреобразованныйАлгоритмШифрования(АлгоритмШифрования); + КонецЕсли; + +#Если ВебКлиент Тогда + + Если ИменаАлгоритмовПодписиГОСТ_34_10_2012_256().Найти(АлгоритмПодписи) <> Неопределено Тогда + АлгоритмПодписи = "1.2.643.7.1.1.1.1"; // ГОСТ 34.10-2012 256 + ИначеЕсли ИменаАлгоритмовПодписиГОСТ_34_10_2012_512().Найти(АлгоритмПодписи) <> Неопределено Тогда + АлгоритмПодписи = "1.2.643.7.1.1.1.2"; // ГОСТ 34.10-2012 512 + КонецЕсли; + + Если ИменаАлгоритмовХешированияГОСТ_34_11_2012_256().Найти(АлгоритмХеширования) <> Неопределено Тогда + АлгоритмХеширования = "1.2.643.7.1.1.2.2"; // ГОСТ 34.11-2012 256 + ИначеЕсли ИменаАлгоритмовХешированияГОСТ_34_11_2012_512().Найти(АлгоритмХеширования) <> Неопределено Тогда + АлгоритмХеширования = "1.2.643.7.1.1.2.3"; // ГОСТ 34.11-2012 512 + КонецЕсли; + +#Иначе + Если Не (ОписаниеПрограммы.ИмяПрограммы = "Infotecs GOST 2012/512 Cryptographic Service Provider" + И ОписаниеПрограммы.ТипПрограммы = 77) И Не (ОписаниеПрограммы.ИмяПрограммы = "Infotecs GOST 2012/1024 Cryptographic Service Provider" + И ОписаниеПрограммы.ТипПрограммы = 78) Тогда + Возврат Ложь; + КонецЕсли; +#КонецЕсли + + АлгоритмыУстановлены = Истина; + Попытка + Менеджер.АлгоритмПодписи = АлгоритмПодписи; + Менеджер.АлгоритмХеширования = АлгоритмХеширования; + Менеджер.АлгоритмШифрования = АлгоритмШифрования; + Исключение + АлгоритмыУстановлены = Ложь; + КонецПопытки; + + Если АлгоритмыУстановлены Тогда + Возврат Истина; + КонецЕсли; + + Если АлгоритмПодписи = "GOST 34.10-2012 256" + И АлгоритмХеширования = "GOST 34.11-2012 256" Тогда + + АлгоритмПодписи = "GR 34.10-2012 256"; + АлгоритмХеширования = "GR 34.11-2012 256"; + + ИначеЕсли АлгоритмПодписи = "GR 34.10-2012 256" + И АлгоритмХеширования = "GR 34.11-2012 256" Тогда + + АлгоритмПодписи = "GOST 34.10-2012 256"; + АлгоритмХеширования = "GOST 34.11-2012 256"; + + ИначеЕсли АлгоритмПодписи = "GOST 34.10-2012 512" + И АлгоритмХеширования = "GOST 34.11-2012 512" Тогда + + АлгоритмПодписи = "GR 34.10-2012 512"; + АлгоритмХеширования = "GR 34.11-2012 512"; + + ИначеЕсли АлгоритмПодписи = "GR 34.10-2012 512" + И АлгоритмХеширования = "GR 34.11-2012 512" Тогда + + АлгоритмПодписи = "GOST 34.10-2012 512"; + АлгоритмХеширования = "GOST 34.11-2012 512"; + + Иначе + Возврат Ложь; + КонецЕсли; + + АлгоритмыУстановлены = Истина; + Попытка + Менеджер.АлгоритмПодписи = АлгоритмПодписи; + Менеджер.АлгоритмХеширования = АлгоритмХеширования; + Менеджер.АлгоритмШифрования = АлгоритмШифрования; + Исключение + АлгоритмыУстановлены = Ложь; + КонецПопытки; + + Возврат АлгоритмыУстановлены; + КонецФункции Функция ИменаАлгоритмовПодписиГОСТ_34_10_94() @@ -1281,6 +1246,222 @@ КонецФункции -// Конец Локализация +#Область ШаблоныКонвертаXML -#КонецОбласти \ No newline at end of file +Функция КонвертПоУмолчанию() + + Возврат "furs.mark.crpt.ru_v1"; + +КонецФункции + +// Вариант "furs.mark.crpt.ru_v1". +Функция КонвертXML1() + + Возврат + " + | + | + | + | + | + | + | + | + | + | + | + | + | %DigestValue% + | + | + | + | %SignatureValue% + | + | + | + | + | + | + | + | + | %BinarySecurityToken% + | + | + | + | + | %MessageXML% + | + |"; + +КонецФункции + +// Вариант "dmdk.goznak.ru_v1". +Функция КонвертXML2() + + Возврат + " + | + | + | + | + | + | + | + | + | + | + | + | + | + | + | %DigestValue% + | + | + | %SignatureValue% + | + | + | %BinarySecurityToken% + | + | + | + | + | + | %MessageXML% + | + | + | + |"; + +КонецФункции + +#КонецОбласти + +Функция ПредставлениеСубъекта(Знач Сертификат, Знач Отчество) + + Субъект = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСубъектаСертификата(Сертификат); + + Если ЗначениеЗаполнено(Субъект.Фамилия) + И ЗначениеЗаполнено(Субъект.Имя) Тогда + + Представление = Субъект.Фамилия + " " + Субъект.Имя; + + ИначеЕсли ЗначениеЗаполнено(Субъект.Фамилия) Тогда + Представление = Субъект.Фамилия; + + ИначеЕсли ЗначениеЗаполнено(Субъект.Имя) Тогда + Представление = Субъект.Имя; + КонецЕсли; + + Если Отчество И ЗначениеЗаполнено(Субъект.Отчество) Тогда + Представление = Представление + " " + Субъект.Отчество; + КонецЕсли; + + Если ЗначениеЗаполнено(Представление) Тогда + Если ЗначениеЗаполнено(Субъект.Организация) Тогда + Представление = Представление + ", " + Субъект.Организация; + КонецЕсли; + Если ЗначениеЗаполнено(Субъект.Подразделение) Тогда + Представление = Представление + ", " + Субъект.Подразделение; + КонецЕсли; + Если ЗначениеЗаполнено(Субъект.Должность) Тогда + Представление = Представление + ", " + Субъект.Должность; + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(Субъект.ОбщееИмя) Тогда + Представление = Субъект.ОбщееИмя; + КонецЕсли; + Возврат Представление; + +КонецФункции + +Функция ПодготовитьСтроку(СтрокаИзСертификата) + Возврат СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(СтрокаИзСертификата)); +КонецФункции + +Функция ЭтоИННФизЛица(ИНН) + + Если СтрДлина(ИНН) <> 12 Тогда + Возврат Ложь; + КонецЕсли; + + Для НомерСимвола = 1 По 12 Цикл + Если СтрНайти("0123456789", Сред(ИНН,НомерСимвола,1)) = 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Если СтрНачинаетсяС(ИНН, "00") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Процедура ЗаполнитьИНН(Свойства, Данные) + + ИННЮЛ = Неопределено; + ИНН = Неопределено; + + Если Данные.Свойство("INN") Тогда + ИНН = Данные.INN; + ИначеЕсли Данные.Свойство("OID1_2_643_3_131_1_1") Тогда + ИНН = ПодготовитьСтроку(Данные.OID1_2_643_3_131_1_1); + КонецЕсли; + + Если Данные.Свойство("INNLE") Тогда + ИННЮЛ = Данные.INNLE; + ИначеЕсли Данные.Свойство("OID1_2_643_100_4") + И СтрДлина(Данные.OID1_2_643_100_4) = 10 Тогда + ИННЮЛ = ПодготовитьСтроку(Данные.OID1_2_643_100_4); + ИначеЕсли Данные.Свойство("_1_2_643_100_4") Тогда + ИННЮЛ = ПодготовитьСтроку(Данные._1_2_643_100_4); + КонецЕсли; + + Свойства.ИННЮЛ = ИННЮЛ; + Свойства.ИНН = ИНН; + +КонецПроцедуры + +Функция КоличествоДнейДляОповещенияОбОкончанииСрокаДействия() + + Возврат 30; + +КонецФункции + +Функция ДатаОкончанияВыдачиСертификатовСотрудниковКоммерческимиУЦ() + + Возврат Дата(2023, 08, 31, 21, 0, 0); // Универсальная дата от московского времени. + +КонецФункции + +Функция НеУстановленаПанельРутокен() Экспорт + Возврат НСтр("ru= 'Не установлена Панель управления Рутокен.'"); +КонецФункции + +Функция НеУстановленаOpenSSL() Экспорт + Возврат НСтр("ru= 'Требуется установка библиотеки OpenSSL.'"); +КонецФункции + +Функция НеУстановленБиблиотекаИнтеграцииСOpenSSL() Экспорт + Возврат НСтр("ru= 'Требуется установка библиотеки интеграции с OpenSSL rtengine.dll.'"); +КонецФункции + +Функция НеУстановленЕдиныйКлиентДжакарта() Экспорт + Возврат НСтр("ru= 'Не установлен Единый клиент JaCarta.'"); +КонецФункции + +#КонецОбласти + +// Конец Локализация \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализация/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализация/Module.bsl index 38e58a349..52060f858 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьЛокализация/Module.bsl @@ -6,7 +6,7 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс // При создании на сервере. // @@ -35,6 +35,12 @@ КонецПроцедуры +// Переопределяет представление типа подписи в форме настроек панели администрирования и тест подсказки в форме подписания. +// +// Параметры: +// ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии +// ПредставлениеПодписи - Строка +// Процедура ПриЗаполненииПредставленияТипаПодписи(ТипПодписи, ПредставлениеПодписи) Экспорт // Локализация @@ -48,6 +54,12 @@ КонецПроцедуры + +// При загрузке машиночитаемых доверенностей. +// +// Параметры: +// Форма - см. ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// Процедура ПриЗагрузкеМашиночитаемыхДоверенностей(Форма) Экспорт // Локализация @@ -97,6 +109,29 @@ КонецПроцедуры +// При получении состояния заявления на выпуск сертификата. +// +// Параметры: +// Сертификат - см. ЭлектроннаяПодпись.СостояниеЗаявленияНаВыпускСертификата.Сертификат +// Результат - см. ЭлектроннаяПодпись.СостояниеЗаявленияНаВыпускСертификата +// +Процедура ПриПолученииСостоянияЗаявленияНаВыпускСертификата(Сертификат, Результат) Экспорт + + // Локализация + ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( + "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); + Результат = ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.СостояниеЗаявленияНаВыпускСертификата( + Сертификат); + // Конец Локализация + +КонецПроцедуры + +// При заполнении машиночитаемых доверенностей. +// +// Параметры: +// Форма - см. ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// ПодписанныйОбъект - ОпределяемыйТип.ПодписанныйОбъект +// Процедура ПриЗаполненииМашиночитаемыхДоверенностей(Форма, ПодписанныйОбъект = Неопределено) Экспорт // Локализация @@ -182,6 +217,13 @@ КонецПроцедуры +// При заполнении машиночитаемой доверенности в строке. +// +// Параметры: +// Форма - см. ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// ПодписанныйОбъект - ОпределяемыйТип.ПодписанныйОбъект +// ИдентификаторСтроки - Число +// Процедура ПриЗаполненииМашиночитаемойДоверенностиВСтроке(Форма, ИдентификаторСтроки, ПодписанныйОбъект) Экспорт // Локализация @@ -216,6 +258,63 @@ КонецПроцедуры +// См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов. +Процедура ПриДобавленииКлассификаторов(Классификаторы) Экспорт + + // Локализация + + Описание = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда + МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами"); + Описание = МодульРаботаСКлассификаторами.ОписаниеКлассификатора(); + КонецЕсли; + Если Описание = Неопределено Тогда + Возврат; + КонецЕсли; + + Описание.Идентификатор = ЭлектроннаяПодписьСлужебныйРФ.ИдентификаторКлассификатора(); + Описание.Наименование = НСтр("ru = 'Список аккредитованных удостоверяющих центров'"); + Описание.ОбновлятьАвтоматически = Истина; + Описание.ОбщиеДанные = Истина; + Описание.ОбработкаРазделенныхДанных = Ложь; + Описание.СохранятьФайлВКэш = Ложь; + + Классификаторы.Добавить(Описание); + + // Конец Локализация + +КонецПроцедуры + +// См. РаботаСКлассификаторамиПереопределяемый.ПриЗагрузкеКлассификатора. +Процедура ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры) Экспорт + + // Локализация + + Если Идентификатор <> ЭлектроннаяПодписьСлужебныйРФ.ИдентификаторКлассификатора() Тогда + Возврат; + КонецЕсли; + + Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйРФ") = Неопределено Тогда + Обработан = Истина; + Возврат; + КонецЕсли; + + МодульЭлектроннаяПодписьСлужебныйРФ = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйРФ"); + МодульЭлектроннаяПодписьСлужебныйРФ.ЗагрузитьДанныеАккредитованныхУЦ(Версия, Адрес, Обработан, ДополнительныеПараметры); + + // Конец Локализация + +КонецПроцедуры + +// При добавлении строк на сервере. +// +// Параметры: +// Форма - см. ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла +// ПомещенныеФайлы - Массив +// ДругиеФайлы - Соответствие +// ОшибкиПриЗагрузкеДоверенностей - Строка +// УникальныйИдентификатор - УникальныйИдентификатор +// Процедура ПриДобавленииСтрокНаСервере(Форма, ПомещенныеФайлы, ДругиеФайлы, ОшибкиПриЗагрузкеДоверенностей, УникальныйИдентификатор) Экспорт // Локализация @@ -245,6 +344,13 @@ КонецПроцедуры +// При проверке подписей по МЧД. +// +// Параметры: +// Подписи - Массив +// ПодписанныйОбъект - ОпределяемыйТип.ПодписанныйОбъект +// РезультатыПроверок - Массив +// Процедура ПриПроверкеПодписейПоМЧД(Подписи, ПодписанныйОбъект, РезультатыПроверок) Экспорт // Локализация @@ -283,4 +389,347 @@ КонецПроцедуры +// При определении доступности создания заявления. +// +// Параметры: +// ДоступностьСозданияЗаявления - см. ЭлектроннаяПодпись.ДоступностьСозданияЗаявления +// +Процедура ПриОпределенииДоступностиСозданияЗаявления(ДоступностьСозданияЗаявления) Экспорт + + // Локализация + + МодульЭлектроннаяПодписьСлужебныйРФ = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйРФ"); + ДоступностьСозданияЗаявления = МодульЭлектроннаяПодписьСлужебныйРФ.ДоступностьСозданияЗаявления(); + + // Конец Локализация + +КонецПроцедуры + +// При заполнении результата проверки удостоверяющего центра. +// +// Параметры: +// Результат - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию +// СертификатКриптографии - СертификатКриптографии +// НаДату - Дата +// ПараметрыПроверки - Структура +// СвойстваСертификата - см. ЭлектроннаяПодпись.СвойстваСертификата +// +Процедура ПриЗаполненииРезультатаПроверкиУдостоверяющегоЦентра( + Результат, СертификатКриптографии, НаДату, ПараметрыПроверки, СвойстваСертификата) Экспорт + + // Локализация + + Результат = ЭлектроннаяПодписьСлужебныйРФ.РезультатПроверкиУдостоверяющегоЦентра( + Результат, СертификатКриптографии, НаДату, ПараметрыПроверки, СвойстваСертификата); + + // Конец Локализация + +КонецПроцедуры + +// При получении аккредитованных удостоверяющих центров. +// +// Параметры: +// АккредитованныеУдостоверяющиеЦентры - Структура +// +Процедура ПриПолученииАккредитованныхУдостоверяющихЦентров(АккредитованныеУдостоверяющиеЦентры) Экспорт + + // Локализация + + МодульЭлектроннаяПодписьСлужебныйРФ = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйРФ"); + АккредитованныеУдостоверяющиеЦентры = МодульЭлектроннаяПодписьСлужебныйРФ.АккредитованныеУдостоверяющиеЦентры(); + + // Конец Локализация + +КонецПроцедуры + +// При получении классификатора ошибок криптографии. +// +// Параметры: +// ДанныеКлассификатора - Неопределено, Структура +// +Процедура ПриПолученииКлассификатораОшибокКриптографии(ДанныеКлассификатора) Экспорт + + // Локализация + УстановитьПривилегированныйРежим(Истина); + МодульЭлектроннаяПодписьСлужебныйРФ = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйРФ"); + + Если Не ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") + И ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам() Тогда + + Попытка + ТекстОшибки = МодульЭлектроннаяПодписьСлужебныйРФ.ОбновитьКлассификатор(); + Исключение + ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обновить классификатор ошибок криптографии по причине: + |%1'"), ТекстОшибки); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Электронная подпись.Обновление классификатора ошибок'", + ОбщегоНазначения.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + Комментарий); + КонецЕсли; + КонецЕсли; + + Версия = МодульЭлектроннаяПодписьСлужебныйРФ.ВерсияКлассификатора(); + + ДанныеКлассификатора = Константы.КлассификаторОшибокКриптографии.Получить().Получить(); + + Если ТипЗнч(ДанныеКлассификатора) = Тип("Структура") Тогда + Попытка + Если ЗначениеЗаполнено(Версия) + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ДанныеКлассификатора.Версия, Версия) < 0 Тогда + + Версия = Неопределено; + Иначе + Версия = ДанныеКлассификатора.Версия; + КонецЕсли; + Исключение + Версия = Неопределено; + КонецПопытки; + Иначе + ДанныеКлассификатора = Неопределено; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ДанныеКлассификатора) + Или Версия = Неопределено Тогда + + МодульЭлектроннаяПодписьСлужебныйРФ = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйРФ"); + ДанныеКлассификатора = МодульЭлектроннаяПодписьСлужебныйРФ.КлассификаторОшибокКриптографии(); + + КонецЕсли; + + // Конец Локализация + +КонецПроцедуры + +// При определении доступности проверки по списку УЦ. +// +// Параметры: +// ПроверкаДоступна - Булево +// +Процедура ПриОпределенииДоступностиПроверкиПоСпискуУЦ(ПроверкаДоступна) Экспорт + + // Локализация + + ПроверкаДоступна = Истина; + + // Конец Локализация + +КонецПроцедуры + +// При получении дистрибутива. +// +// Параметры: +// Параметры - Структура +// Идентификатор - Строка +// Результат - см. ДлительныеОперации.ВыполнитьФункцию +// +Процедура ПриПолученииДистрибутива(Параметры, Идентификатор, Результат) Экспорт + + // Локализация + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); + + Если Идентификатор = "CryptoProCSP" Тогда + + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутива CryptoPro CSP'"); + Результат = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ЭлектроннаяПодписьСлужебныйРФ.ДистрибутивCryptoProCSP", Параметры); + + ИначеЕсли Идентификатор = "ViPNetCSP" Тогда + + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутива VipNet CSP'"); + Результат = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ЭлектроннаяПодписьСлужебныйРФ.ДистрибутивViPNetCSP", Параметры); + + КонецЕсли; + + // Конец Локализация + +КонецПроцедуры + +// При обработке результата получения дистрибутива. +// +// Параметры: +// ДлительнаяОперация - Структура: +// * АдресРезультата - Строка - адрес во временном хранилище +// ИдентификаторФормы - УникальныйИдентификатор +// Результат - Структура +// +Процедура ПриОбработкеРезультатаПолученияДистрибутива(ДлительнаяОперация, ИдентификаторФормы, Результат) Экспорт + + // Локализация + + Результат = ЭлектроннаяПодписьСлужебныйРФ.РезультатПолученияДистрибутиваКриптопровайдера( + ДлительнаяОперация, ИдентификаторФормы); + + // Конец Локализация + +КонецПроцедуры + +// При определении использования сервиса облачной подписи. +// +// Параметры: +// Результат - Булево +// +Процедура ПриОпределенииИспользованияСервисаОблачнойПодписи(Результат) Экспорт + + // Локализация + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда + МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS"); + Результат = МодульСервисКриптографииDSS.ИспользоватьСервисОблачнойПодписи(); + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// При определении типа программы сервиса подписи. +// +// Параметры: +// Результат - Тип +// +Процедура ПриОпределенииТипаПрограммыСервисаПодписи(Результат) Экспорт + + // Локализация + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда + МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSКлиентСервер"); + Результат = МодульСервисКриптографииDSSКлиентСервер.ПолучитьТипОблачнойПодписи(); + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// При получении адресов серверов меток времени. +// +// Параметры: +// АдресаСерверовМетокВремени - Строка +// +Процедура ПриПолученииАдресовСерверовМетокВремени(АдресаСерверовМетокВремени) Экспорт + + // Локализация + АдресаСерверовМетокВремени = Обработки.ПрограммыЭлектроннойПодписиИШифрования.АдресаСерверовМетокВремениПоУмолчанию(); + // Конец Локализация + +КонецПроцедуры + +// При получении отпечатков облачного сервиса. +// +// Параметры: +// МассивОтпечатков - Массив +// +Процедура ПриПолученииОтпечатковОблачногоСервиса(МассивОтпечатков) Экспорт + + // Локализация + МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); + МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); + + Для Каждого Сертификат Из МассивСертификатов Цикл + МассивОтпечатков.Добавить(Base64Строка(Сертификат.Отпечаток)); + КонецЦикла; + // Конец Локализация + +КонецПроцедуры + +// При добавлении свойств сертификатов облачного сервиса. +// +// Параметры: +// ТаблицаСвойствСертификатов - ТаблицаЗначений +// БезОтбора - Булево +// +Процедура ПриДобавленииСвойствСертификатовОблачногоСервиса(ТаблицаСвойствСертификатов, БезОтбора) Экспорт + + // Локализация + МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); + МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); + + ПараметрыДобавленияСвойств = Новый Структура("ОблачнаяПодпись", Истина); + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, + МассивСертификатов, БезОтбора, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), + ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); + // Конец Локализация + +КонецПроцедуры + +// При определении настроенного облачного сервиса. +// +// Параметры: +// Результат - Булево +// +Процедура ПриОпределенииНастроенногоОблачногоСервиса(Результат) Экспорт + + // Локализация + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда + + МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS"); + Результат = МодульСервисКриптографииDSS.ИспользоватьСервисОблачнойПодписи(); + Если Результат Тогда + ВсеУчетныеЗаписи = МодульСервисКриптографииDSS.ПолучитьВсеУчетныеЗаписи(); + Если ВсеУчетныеЗаписи.Количество() > 0 Тогда + СтрокаПоиска = Новый Структура("ПометкаУдаления", Истина); + Результат = ВсеУчетныеЗаписи.НайтиСтроки(СтрокаПоиска).Количество() <> ВсеУчетныеЗаписи.Количество(); + Иначе + Результат = Ложь; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + // Конец Локализация + +КонецПроцедуры + +// При заполнении сертификатов облачного сервиса. +// +// Параметры: +// ОтпечаткиСертификатовНаКлиенте - Массив +// +Процедура ПриЗаполненииСертификатовОблачногоСервиса(ОтпечаткиСертификатовНаКлиенте) Экспорт + + // Локализация + МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); + ВсеСертификаты = МодульСервисКриптографииDSSСлужебный.ПолучитьВсеСертификаты(Ложь); + + МассивСертификатов = Новый ТаблицаЗначений; + МассивСертификатов.Колонки.Добавить("Отпечаток"); + МассивСертификатов.Колонки.Добавить("ДатаНачала"); + МассивСертификатов.Колонки.Добавить("ДатаОкончания"); + + Для Каждого СтрокаТаблицы Из ВсеСертификаты Цикл + НоваяСтрока = МассивСертификатов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + НоваяСтрока.Отпечаток = ПолучитьДвоичныеДанныеИзHexСтроки(СтрокаТаблицы.Отпечаток); + КонецЦикла; + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( + ОтпечаткиСертификатовНаКлиенте, МассивСертификатов, + ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса()); + // Конец Локализация + +КонецПроцедуры + #КонецОбласти + +// Локализация + +#Область СлужебныеПроцедурыИФункции + +// Регламентное задание. +Процедура ОбновлениеСостоянияЗаявленияНаВыпускСертификата(Сертификат) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОбновлениеСостоянияЗаявленияНаВыпускСертификата); + ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( + "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата"); + ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ОбновлениеСостоянияЗаявленияРегламентноеЗадание( + Сертификат); + +КонецПроцедуры + +#КонецОбласти + +// Конец Локализация \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index cbd252a5b..9a6a3190b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -56,11 +56,17 @@ ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии(); ПараметрыСоздания.ПоказатьОшибку = ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса; - Если ТипЗнч(ДанныеСертификата) = Тип("ДвоичныеДанные") Тогда - ПараметрыСоздания.АлгоритмПодписи = - ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата); - КонецЕсли; + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи( + СертификатДляПроверки.АлгоритмОткрытогоКлюча, Истина, Ложь); + Иначе + Если ТипЗнч(ДанныеСертификата) = Тип("ДвоичныеДанные") Тогда + ПараметрыСоздания.АлгоритмПодписи = + ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата); + КонецЕсли; + КонецЕсли; + МенеджерКриптографииДляПроверки = МенеджерКриптографии( "ПроверкаСертификата", ПараметрыСоздания); @@ -126,8 +132,15 @@ Возврат Ложь; КонецЕсли; Иначе + + Если ДополнительныеПараметры.УказанаДатаМеткиВремени И ЗначениеЗаполнено(НаДату) Тогда + УниверсальнаяДатаПроверки = НаДату - РазницаСУниверсальнымВременем(); + Иначе + УниверсальнаяДатаПроверки = Неопределено; + КонецЕсли; + РезультатПроверкиНаКорректность = ПроверитьСертификатНаКорректность(МенеджерКриптографииДляПроверки, СертификатДляПроверки, - РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение); + РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, УниверсальнаяДатаПроверки); Если Не РезультатПроверкиНаКорректность Тогда Если ВызыватьИсключение Тогда ВызватьИсключение ОписаниеОшибки; @@ -224,6 +237,7 @@ ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные()); ДополнительныеПараметры.Вставить("ДляПроверкиПодписи", Ложь); + ДополнительныеПараметры.Вставить("УказанаДатаМеткиВремени", Ложь); ДополнительныеПараметры.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь); ДополнительныеПараметры.Вставить("Предупреждение"); ДополнительныеПараметры.Вставить("Сертификат"); @@ -325,8 +339,20 @@ КонецФункции -// Добавляет сертификаты к переданному объекту. +// Параметры: +// ОбъектСсылка - ОпределяемыйТип.ПодписанныйОбъект +// МассивОтпечатков - см. ЭлектроннаяПодпись.СертификатыШифрования +// Процедура ДобавитьСертификатыШифрования(ОбъектСсылка, МассивОтпечатков) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодписьСлужебный.ДобавитьСертификатыШифрования", + "ОбъектСсылка", ОбъектСсылка, + ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(Истина)); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(ОбъектСсылка); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); ПорядковыйНомер = 1; @@ -335,7 +361,7 @@ МенеджерЗаписи.ЗашифрованныйОбъект = ОбъектСсылка; МенеджерЗаписи.Отпечаток = ОтпечатокСтруктура.Отпечаток; МенеджерЗаписи.Представление = ОтпечатокСтруктура.Представление; - МенеджерЗаписи.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат); + МенеджерЗаписи.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат, Новый СжатиеДанных(9)); МенеджерЗаписи.ПорядковыйНомер = ПорядковыйНомер; ПорядковыйНомер = ПорядковыйНомер + 1; МенеджерЗаписи.Записать(); @@ -343,8 +369,72 @@ КонецПроцедуры +// Параметры: +// Источник - ОпределяемыйТип.ПодписанныйОбъект +// Приемник - СправочникОбъект - соответствует ОпределяемыйТип.ПодписанныйОбъект +// +Процедура СкопироватьПодписиИСертификатыШифрования(Источник, Приемник) Экспорт + + ИмяФункции = "ЭлектроннаяПодписьСлужебный.СкопироватьПодписиИСертификатыШифрования"; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Источник", Источник, + ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(Истина)); + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции, "Приемник", Источник, + ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(Ложь)); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьЧтениеРазрешено(Источник); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(Приемник); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Источник.ПодписанЭП Тогда + + Приемник.Прочитать(); + Приемник.ПодписанЭП = Истина; + Приемник.Записать(); + + ЭлектронныеПодписиИсходногоФайла = ЭлектроннаяПодпись.ПодписиОбъекта(Источник.Ссылка); + Для Каждого Запись Из ЭлектронныеПодписиИсходногоФайла Цикл + МенеджерЗаписи = РегистрыСведений.ЭлектронныеПодписи.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Запись); + МенеджерЗаписи.ПодписанныйОбъект = Приемник.Ссылка; + МенеджерЗаписи.Записать(Истина); + КонецЦикла; + + КонецЕсли; + + Если Источник.Зашифрован Тогда + + Приемник.Прочитать(); + Приемник.Зашифрован = Истина; + + СертификатыШифрованияИсходногоФайла = ЭлектроннаяПодпись.СертификатыШифрования(Источник); + ДобавитьСертификатыШифрования(Приемник.Ссылка, СертификатыШифрованияИсходногоФайла); + + // Чтобы прошла запись ранее подписанного объекта. + Приемник.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); + Приемник.Записать(); + + КонецЕсли; + +КонецПроцедуры + // Очищает записи о сертификатах шифрования после расшифровка объекта. +// +// Параметры: +// ОбъектСсылка - ОпределяемыйТип.ПодписанныйОбъект +// Процедура ОчиститьСертификатыШифрования(ОбъектСсылка) Экспорт + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодписьСлужебный.ОчиститьСертификатыШифрования", + "ОбъектСсылка", ОбъектСсылка, + ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыВладельцев(Истина)); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + МодульУправлениеДоступом.ПроверитьИзменениеРазрешено(ОбъектСсылка); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); НаборЗаписей = РегистрыСведений.СертификатыШифрования.СоздатьНаборЗаписей(); @@ -381,15 +471,15 @@ // // Параметры: // РезультатПодписания - см. ЭлектроннаяПодписьКлиент.Подписать.ОписаниеДанных -// ПараметрыПолученияФайлов - Структура +// ПараметрыПолученияФайлов - Структура: // * ПереводитьИменаФайловВТранслит - Булево // * ВыгрузитьСертификат - Булево // * ВыгрузитьДоверенность - Булево // УникальныйИдентификатор - УникальныйИдентификатор - для использования при помещении во временное хранилище. // // Возвращаемое значение: -// Массив Из Структура: -// * Данные - Строка - адрес во временном хранилище, в зависимости от того, как передали в см. ЭлектроннаяПодписьКлиент.Подписать.ОписаниеДанных. +// Массив из Структура: +// * Данные - Строка - адрес во временном хранилище, в зависимости от того, как передали в ЭлектроннаяПодписьКлиент.Подписать.ОписаниеДанных. // - ДвоичныеДанные // * ИмяФайла - Строка // * ТипФайла - Строка - "Данные", "Подпись", "Доверенность", "ПодписьДоверенности", "Сертификат". @@ -406,7 +496,7 @@ Результат = Новый Массив; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ПараметрыПолученияФайлов.ВыгрузитьДоверенность И ЗначениеЗаполнено(РезультатПодписания.ВыбраннаяДоверенность) @@ -440,7 +530,7 @@ КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности СтруктураОписанияФайлаСертификата = Неопределено; @@ -509,13 +599,13 @@ КонецФункции -// Определяет доступность электронной подписи для объекта (по его типу) +// Определяет доступность электронной подписи для объекта (по его типу). // // Параметры: -// ТипОбъекта - Тип +// ТипОбъекта - Тип - например, СправочникСсылка.Проекты. // // Возвращаемое значение: -// Булево - доступна электронная подпись +// Булево // Функция ДоступнаЭлектроннаяПодпись(ТипОбъекта) Экспорт @@ -526,7 +616,7 @@ // Возвращает адрес сертификата во временном хранилище и его расширение. // // Параметры: -// СведенияОЭлектроннойПодписи - Структура - строка с подписями из массива полученного методом ЭлектроннаяПодпись.УстановленныеПодписи. +// СведенияОбЭлектроннойПодписи - Структура - строка с подписями из массива полученного методом ЭлектроннаяПодпись.ПодписиОбъекта. // УникальныйИдентификатор - УникальныйИдентификатор - идентификатор формы. // // Возвращаемое значение: @@ -534,10 +624,10 @@ // * РасширениеСертификата - Строка - расширение файла сертификата. // * АдресСертификата - Строка - адрес во временном хранилище, по которому был помещен сертификат. // -Функция ДанныеПоСертификату(СведенияОЭлектроннойПодписи, УникальныйИдентификатор) Экспорт +Функция ДанныеПоСертификату(СведенияОбЭлектроннойПодписи, УникальныйИдентификатор) Экспорт Результат = Новый Структура("РасширениеСертификата, АдресСертификата"); - ДанныеСертификата = СведенияОЭлектроннойПодписи.Сертификат.Получить(); + ДанныеСертификата = СведенияОбЭлектроннойПодписи.Сертификат; Если ТипЗнч(ДанныеСертификата) = Тип("Строка") Тогда Результат.РасширениеСертификата = "txt"; @@ -667,7 +757,7 @@ // Параметры: // СертификатКриптографии // НаДату - Неопределено, Дата -// ПараметрыПроверки - Структура +// ПараметрыПроверки - Структура: // * ЭтоПроверкаПодписи - это проверка подписи, предупреждение (не ошибка) не будет показано. // * ПроверятьСертификат - Строка - "ТолькоКвалифицированные", "ПроверятьКвалифицированные", "НеПроверятьСертификат". // СвойстваСертификата - см. ЭлектроннаяПодпись.СвойстваСертификата @@ -679,69 +769,9 @@ Знач ПараметрыПроверки = Неопределено, СвойстваСертификата = Неопределено) Экспорт Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию(); + ЭлектроннаяПодписьЛокализация.ПриЗаполненииРезультатаПроверкиУдостоверяющегоЦентра( + Результат, СертификатКриптографии, НаДату, ПараметрыПроверки, СвойстваСертификата); - // Локализация - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено - Или ЭлектроннаяПодписьСлужебныйПовтИсп.АккредитованныеУдостоверяющиеЦентры() = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Если ПараметрыПроверки = Неопределено Или ПараметрыПроверки = Ложь Или ПараметрыПроверки = Истина Тогда // для совместимости - НовыеПараметрыПроверки = Новый Структура; - НовыеПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", ?(ПараметрыПроверки = Неопределено, Ложь, ПараметрыПроверки)); - НовыеПараметрыПроверки.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); - ПараметрыПроверки = НовыеПараметрыПроверки; - КонецЕсли; - - Если ПараметрыПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда - Возврат Результат; - КонецЕсли; - - МодульЭлектроннаяПодписьКлиентСерверЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСерверЛокализация"); - ДанныеДляПроверкиУдостоверяющегоЦентра = МодульЭлектроннаяПодписьКлиентСерверЛокализация.ДанныеДляПроверкиУдостоверяющегоЦентра( - СертификатКриптографии); - - Если ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска = Неопределено Тогда - ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); - Возврат Результат; - КонецЕсли; - - ДанныеУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйПовтИсп.ДанныеУдостоверяющегоЦентра( - ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска); - - Если ДанныеУдостоверяющегоЦентра = Неопределено Тогда - ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); - Возврат Результат; - КонецЕсли; - - КонтекстПроверки = МодульЭлектроннаяПодписьКлиентСерверЛокализация.КонтекстПроверкиУдостоверяющегоЦентраСертификата(); - КонтекстПроверки.ДанныеУдостоверяющегоЦентра = ДанныеУдостоверяющегоЦентра; - КонтекстПроверки.НаименованиеУдостоверяющегоЦентра = ДанныеДляПроверкиУдостоверяющегоЦентра.НаименованиеУдостоверяющегоЦентра; - КонтекстПроверки.ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска; - КонтекстПроверки.НаДату = ?(НаДату = Неопределено, ТекущаяДатаСеанса(), НаДату); - КонтекстПроверки.РазницаСУниверсальнымВременем = РазницаСУниверсальнымВременем(); - КонтекстПроверки.ЭтоПроверкаПодписи = ПараметрыПроверки.ЭтоПроверкаПодписи; - КонтекстПроверки.ПроверятьСертификат = ПараметрыПроверки.ПроверятьСертификат; - - Если СвойстваСертификата = Неопределено Тогда - КонтекстПроверки.СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); - Иначе - КонтекстПроверки.СвойстваСертификата = СвойстваСертификата; - КонецЕсли; - - Результат = МодульЭлектроннаяПодписьКлиентСерверЛокализация.РезультатПроверкиУдостоверяющегоЦентраСертификата( - СертификатКриптографии, КонтекстПроверки); - - Если ЗначениеЗаполнено(Результат.Предупреждение.Причина) Тогда - Результат.Предупреждение.Причина = СтроковыеФункции.ФорматированнаяСтрока(Результат.Предупреждение.Причина); - КонецЕсли; - - Если ЗначениеЗаполнено(Результат.Предупреждение.Решение) Тогда - Результат.Предупреждение.Решение = СтроковыеФункции.ФорматированнаяСтрока(Результат.Предупреждение.Решение); - КонецЕсли; - - // Конец Локализация - Возврат Результат; КонецФункции @@ -835,7 +865,7 @@ Элементы = Форма.Элементы; НаборКонстант = Форма.НаборКонстант; ОбщиеНастройки = ЭлектроннаяПодпись.ОбщиеНастройки(); - ДоступнаУсовершенствованнаяПодпись = ОбщиеНастройки.ДоступнаУсовершенствованнаяПодпись; + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); Если ОбщегоНазначения.РазделениеВключено() И (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеПодписи" @@ -847,6 +877,27 @@ Или ИспользоватьЭлектроннуюПодписьВМоделиСервиса(); КонецЕсли; + + Если РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи" Или РеквизитПутьКДанным = "" + Или РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисам" Тогда + Форма.КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписи = ОбщиеНастройки.РазрешенДоступКИнтернетСервисам; + Элементы.КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписи.Доступность = РазрешенДоступКИнтернетСервисам; + + РазрешенДоступКИнтернетСервисамЗаголовок = Новый Массив; + РазрешенДоступКИнтернетСервисамЗаголовок.Добавить(НСтр( + "ru = 'Загружать и устанавливать списки отзыва и свежие рекомендации по устранению проблем из Интернета автоматически.'")); + + // СтандартныеПодсистемы.МашиночитаемыеДоверенности + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда + РазрешенДоступКИнтернетСервисамЗаголовок.Добавить(НСтр( + "ru = 'Загружать и проверять статусы машиночитаемых доверенностей единого формата в Распределенном реестре ФНС.'")); + КонецЕсли; + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности + + Элементы.КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписиРасширеннаяПодсказка.Заголовок = СтрСоединить(РазрешенДоступКИнтернетСервисамЗаголовок, " "); + Элементы.ГруппаКомментарийРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписи.Видимость = Не РазрешенДоступКИнтернетСервисам; + + КонецЕсли; Если РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеПодписи" Или РеквизитПутьКДанным = "НаборКонстант.ИспользоватьШифрование" Или РеквизитПутьКДанным = "" Тогда @@ -859,15 +910,15 @@ Если НаборКонстант.ИспользоватьЭлектронныеПодписи И (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеПодписи" Или РеквизитПутьКДанным = "") Тогда - Если ДоступнаУсовершенствованнаяПодпись Тогда - Форма.КонстантаАдресаСерверовМетокВремени = СтрСоединить(ОбщиеНастройки.АдресаСерверовМетокВремени, Символы.ПС); - Форма.КонстантаУсовершенствоватьПодписиАвтоматически = Константы.УсовершенствоватьПодписиАвтоматически.Получить(); - Форма.КонстантаДобавлятьМеткиВремениАвтоматически = Константы.ДобавлятьМеткиВремениАвтоматически.Получить(); - Форма.КонстантаУсовершенствоватьПодписиСДаты = Константы.УсовершенствоватьПодписиСДаты.Получить(); - ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить(); - Форма.КонстантаТипПодписиКриптографииПоУмолчанию = ТипПодписи; - УстановитьЗаголовокПодсказкиУсовершенствования(Форма, ТипПодписи); - КонецЕсли; + + Форма.КонстантаАдресаСерверовМетокВремени = СтрСоединить(ОбщиеНастройки.АдресаСерверовМетокВремени, Символы.ПС); + Форма.КонстантаУсовершенствоватьПодписиАвтоматически = Константы.УсовершенствоватьПодписиАвтоматически.Получить(); + Форма.КонстантаДобавлятьМеткиВремениАвтоматически = Константы.ДобавлятьМеткиВремениАвтоматически.Получить(); + Форма.КонстантаУсовершенствоватьПодписиСДаты = Константы.УсовершенствоватьПодписиСДаты.Получить(); + ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить(); + Форма.КонстантаТипПодписиКриптографииПоУмолчанию = ТипПодписи; + УстановитьЗаголовокПодсказкиУсовершенствования(Форма, ТипПодписи); + Если Элементы.СоздаватьЭлектронныеПодписиНаСервере.Видимость Тогда Форма.КонстантаСоздаватьЭлектронныеПодписиНаСервере = Константы.СоздаватьЭлектронныеПодписиНаСервере.Получить(); КонецЕсли; @@ -879,7 +930,7 @@ УстановитьЗаголовокЭлектроннаяПодписьНаСервере(Форма); ИначеЕсли (РеквизитПутьКДанным = "КонстантаТипПодписиКриптографииПоУмолчанию" Или РеквизитПутьКДанным - = "КонстантаУсовершенствоватьПодписиАвтоматически") И ДоступнаУсовершенствованнаяПодпись Тогда + = "КонстантаУсовершенствоватьПодписиАвтоматически") Тогда Форма.КонстантаУсовершенствоватьПодписиАвтоматически = Константы.УсовершенствоватьПодписиАвтоматически.Получить(); ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить(); @@ -888,47 +939,64 @@ КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") - И ДоступнаУсовершенствованнаяПодпись - И (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСервисDSS" Или РеквизитПутьКДанным = "") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда + + Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеПодписи" Или РеквизитПутьКДанным = "НаборКонстант.ИспользоватьШифрование" + Или РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСервисDSS" Или РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи" + Или РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисам" Или РеквизитПутьКДанным = "") Тогда - Если ОбщегоНазначения.РазделениеВключено() Тогда - - ЭтоМодельСервисаСДоступнымУсовершенствованием = ОбщиеНастройки.ЭтоМодельСервисаСДоступнымУсовершенствованием; - Элементы.ГруппаАвтоматическаяОбработкаПодписей.Видимость = ЭтоМодельСервисаСДоступнымУсовершенствованием; - Элементы.ГруппаДобавлятьМеткиАвтоматически.Видимость = Ложь; - Элементы.ТипПодписиКриптографииПоУмолчанию.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; - Если ЭтоМодельСервисаСДоступнымУсовершенствованием Тогда - Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Истина; - Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Ложь; + ДоступностьОблачнойПодписи = (Форма.НаборКонстант.ИспользоватьЭлектронныеПодписи + Или Форма.НаборКонстант.ИспользоватьШифрование) И (Форма.НаборКонстант.ИспользоватьСервисDSS) + И РазрешенДоступКИнтернетСервисам; + Если РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи" + Или РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисам" Тогда + Элементы.ИспользоватьСервисОблачнойПодписи.Доступность = Пользователи.ЭтоПолноправныйПользователь(, Истина) + И РазрешенДоступКИнтернетСервисам; + КонецЕсли; + + Элементы.ОбработкаУправлениеПодключениемDSSСерверыОблачнойПодписи.Доступность = ДоступностьОблачнойПодписи; + Элементы.ОбработкаУправлениеПодключениемDSSУчетныеЗаписиОблачнойПодписи.Доступность = ДоступностьОблачнойПодписи; + Если ОбщегоНазначения.РазделениеВключено() Тогда + + ЭтоМодельСервисаСДоступнымУсовершенствованием = ОбщиеНастройки.ЭтоМодельСервисаСДоступнымУсовершенствованием; + Элементы.ГруппаАвтоматическаяОбработкаПодписей.Видимость = ЭтоМодельСервисаСДоступнымУсовершенствованием; + Элементы.ГруппаДобавлятьМеткиАвтоматически.Видимость = Ложь; + Элементы.ТипПодписиКриптографииПоУмолчанию.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСнизу; + Если ЭтоМодельСервисаСДоступнымУсовершенствованием Тогда + Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Истина; + Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Ложь; + + ЗаполнитьСписокТиповПодписейКриптографии( + Элементы.ТипПодписиКриптографииПоУмолчанию.СписокВыбора, "Настройки"); + Элементы.ТипПодписиКриптографииПоУмолчаниюРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр( + "ru = 'В приложении в Интернете архивная подпись по умолчанию недоступна, этот тип подписи можно выбрать при подписании сертификатом, установленным на компьютер с помощью приложения электронной подписи.'"), + "Сертификаты"); + Иначе + Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Ложь; + Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Истина; + Элементы.ТипПодписиКриптографииПоУмолчанию1РасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр( + "ru = 'В приложении в Интернете по умолчанию установлен тип подписи Базовая, типы подписи с метками времени можно выбрать при подписании сертификатом, установленным на компьютер с помощью приложения электронной подписи.'"), + "Сертификаты"); + КонецЕсли; + + Иначе + ЗаполнитьСписокТиповПодписейКриптографии( Элементы.ТипПодписиКриптографииПоУмолчанию.СписокВыбора, "Настройки"); - Элементы.ТипПодписиКриптографииПоУмолчаниюРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( - НСтр( - "ru = 'В приложении в Интернете архивная подпись по умолчанию недоступна, этот тип подписи можно выбрать при подписании сертификатом, установленным на компьютер с помощью приложения электронной подписи.'"), "Сертификаты"); - Иначе - Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Ложь; - Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Истина; - Элементы.ТипПодписиКриптографииПоУмолчанию1РасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( - НСтр( - "ru = 'В приложении в Интернете по умолчанию установлен тип подписи Базовая, типы подписи с метками времени можно выбрать при подписании сертификатом, установленным на компьютер с помощью приложения электронной подписи.'"), "Сертификаты"); + Элементы.ТипПодписиКриптографииПоУмолчанию.ОтображениеПодсказки = ОтображениеПодсказки.Нет; + Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Истина; + Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Ложь; + КонецЕсли; - - Иначе - - ЗаполнитьСписокТиповПодписейКриптографии( - Элементы.ТипПодписиКриптографииПоУмолчанию.СписокВыбора, "Настройки"); - Элементы.ТипПодписиКриптографииПоУмолчанию.ОтображениеПодсказки = ОтображениеПодсказки.Нет; - Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Истина; - Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Ложь; - КонецЕсли; Иначе Элементы.ТипПодписиКриптографииПоУмолчанию.ОтображениеПодсказки = ОтображениеПодсказки.Нет; - Если РеквизитПутьКДанным = "" И ДоступнаУсовершенствованнаяПодпись Тогда + Если РеквизитПутьКДанным = "" Тогда Элементы.ТипПодписиКриптографииПоУмолчанию.Видимость = Истина; Элементы.ТипПодписиКриптографииПоУмолчанию1.Видимость = Ложь; ЗаполнитьСписокТиповПодписейКриптографии( @@ -1013,32 +1081,15 @@ КонецФункции -// Возвращает возможность показа ссылки на инструкцию по типичным проблемам при работе с программами -// в зависимости от локализации конфигурации. -// -// Возвращаемое значение: -// Булево -// -Функция ВидимостьСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами() Экспорт - - НавигационнаяСсылка = ""; - ЭлектроннаяПодписьКлиентСерверЛокализация.ПриОпределенииСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами( - НавигационнаяСсылка); - Возврат Не ПустаяСтрока(НавигационнаяСсылка); - -КонецФункции - Функция ПолучитьДанныеКомпоненты(ИмяМакета) Экспорт Возврат Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет(ИмяМакета); КонецФункции Функция АдресаСерверовМетокВремениПоУмолчанию() Экспорт - Если Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено Тогда - Возврат Обработки["ПрограммыЭлектроннойПодписиИШифрования"].АдресаСерверовМетокВремениПоУмолчанию(); - КонецЕсли; - - Возврат ""; + АдресаСерверовМетокВремени = ""; + ЭлектроннаяПодписьЛокализация.ПриПолученииАдресовСерверовМетокВремени(АдресаСерверовМетокВремени); + Возврат АдресаСерверовМетокВремени; КонецФункции @@ -1118,12 +1169,7 @@ Результат = Ложь; - // Локализация - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда - МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS"); - Результат = МодульСервисКриптографииDSS.ИспользоватьСервисОблачнойПодписи(); - КонецЕсли; - // Конец Локализация + ЭлектроннаяПодписьЛокализация.ПриОпределенииИспользованияСервисаОблачнойПодписи(Результат); Возврат Результат; @@ -1139,12 +1185,7 @@ Результат = Неопределено; - // Локализация - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда - МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSКлиентСервер"); - Результат = МодульСервисКриптографииDSSКлиентСервер.ПолучитьТипОблачнойПодписи(); - КонецЕсли; - // Конец Локализация + ЭлектроннаяПодписьЛокализация.ПриОпределенииТипаПрограммыСервисаПодписи(Результат); Возврат Результат; @@ -1182,14 +1223,12 @@ Обработчик.Процедура = "ЭлектроннаяПодписьСлужебный.ЗаполнитьНастройкиДляУсовершенствованияПодписей"; Обработчик.РежимВыполнения = "Оперативно"; - // Локализация Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.1.6.180"; - Обработчик.Комментарий = НСтр("ru = 'Устанавливает стандартные адреса серверов меток времени ФНС России и Удостоверяющего Центра ООО «Научно-производственный центр ""1С""» для удобной работы с метками доверенного времени в электронной подписи.'"); + Обработчик.Комментарий = НСтр("ru = 'Устанавливает стандартные адреса серверов меток времени.'"); Обработчик.Процедура = "ЭлектроннаяПодписьСлужебный.ЗаполнитьАдресаСерверовМетокВремени"; Обработчик.РежимВыполнения = "Оперативно"; - // Конец Локализация - + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "3.1.8.58"; Обработчик.Комментарий = @@ -1232,28 +1271,34 @@ Обработчик.БлокируемыеОбъекты = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования"; Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "3.1.11.61"; + Обработчик.Процедура = "ЭлектроннаяПодписьСлужебный.ВключитьКонстантуРазрешитьДоступКИнтернетСервисам"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + КонецПроцедуры // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт Библиотека = "СтандартныеПодсистемы"; СтароеИмя = "Роль.ИспользованиеЭЦП"; НовоеИмя = "Роль.ИспользованиеЭП"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.2.1.7", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.2.1.7", СтароеИмя, НовоеИмя, Библиотека); СтароеИмя = "Подсистема.СтандартныеПодсистемы.Подсистема.ЭлектроннаяЦифроваяПодпись"; НовоеИмя = "Подсистема.СтандартныеПодсистемы.Подсистема.ЭлектроннаяПодпись"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.2.1.7", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.2.1.7", СтароеИмя, НовоеИмя, Библиотека); СтароеИмя = "Роль.ИспользованиеЭП"; НовоеИмя = "Роль.ИспользованиеЭлектроннойПодписиИШифрования"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.1.10", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.1.10", СтароеИмя, НовоеИмя, Библиотека); СтароеИмя = "Роль.ИспользованиеЭлектроннойПодписиИШифрования"; НовоеИмя = "Роль.ДобавлениеИзменениеЭлектронныхПодписейИШифрование"; - ОбщегоНазначения.ДобавитьПереименование(Итог, "2.3.3.2", СтароеИмя, НовоеИмя, Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.2", СтароеИмя, НовоеИмя, Библиотека); КонецПроцедуры @@ -1360,49 +1405,32 @@ // См. РаботаСКлассификаторамиПереопределяемый.ПриДобавленииКлассификаторов. Процедура ПриДобавленииКлассификаторов(Классификаторы) Экспорт - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда - Возврат; - КонецЕсли; - - Описание = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда - МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами"); - Описание = МодульРаботаСКлассификаторами.ОписаниеКлассификатора(); - КонецЕсли; - Если Описание = Неопределено Тогда - Возврат; - КонецЕсли; - - Описание.Идентификатор = ИдентификаторКлассификатора(); - Описание.Наименование = НСтр("ru = 'Список аккредитованных удостоверяющих центров'"); - Описание.ОбновлятьАвтоматически = Истина; - Описание.ОбщиеДанные = Истина; - Описание.ОбработкаРазделенныхДанных = Ложь; - Описание.СохранятьФайлВКэш = Ложь; - - Классификаторы.Добавить(Описание); + ЭлектроннаяПодписьЛокализация.ПриДобавленииКлассификаторов(Классификаторы); КонецПроцедуры // См. РаботаСКлассификаторамиПереопределяемый.ПриЗагрузкеКлассификатора. Процедура ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры) Экспорт - Если Идентификатор <> ИдентификаторКлассификатора() Тогда - Возврат; - КонецЕсли; - - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда - Обработан = Истина; - Возврат; - КонецЕсли; - - МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация"); - МодульЭлектроннаяПодписьСлужебныйЛокализация.ЗагрузитьДанныеАккредитованныхУЦ(Версия, Адрес, Обработан, ДополнительныеПараметры); + ЭлектроннаяПодписьЛокализация.ПриЗагрузкеКлассификатора(Идентификатор, Версия, Адрес, Обработан, ДополнительныеПараметры); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистемы ТекущиеДела. +// См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхГлавному. +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт + + ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Ложь, Ложь); + +КонецПроцедуры + +// См. СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному. +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт + + ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Истина, СозданиеНачальногоОбраза); + +КонецПроцедуры + +#Область ОбработчикиСобытийПодсистемыТекущиеДела // Параметры: // ТекущиеДела - см. ТекущиеДелаСервер.ТекущиеДела. @@ -1453,73 +1481,72 @@ КонецЕсли; - Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда - УсовершенствоватьПодписиАвтоматически = Константы.УсовершенствоватьПодписиАвтоматически.Получить(); + + УсовершенствоватьПодписиАвтоматически = Константы.УсовершенствоватьПодписиАвтоматически.Получить(); + + Если УсовершенствоватьПодписиАвтоматически = 2 Тогда - Если УсовершенствоватьПодписиАвтоматически = 2 Тогда - - КоличествоПодписейДляУсовершенствования = КоличествоПодписей("ТребуетсяУсовершенствоватьПодписи"); - Для Каждого Раздел Из Разделы Цикл - Дело = ТекущиеДела.Добавить (); - Дело.Идентификатор = "ТребуетсяУсовершенствоватьПодписи"; - Дело.ЕстьДела = КоличествоПодписейДляУсовершенствования > 0; - Дело.Представление = НСтр("ru = 'Усовершенствовать подписи'"); - Дело.Количество = КоличествоПодписейДляУсовершенствования; - Дело.Важное = Ложь; - Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; - Дело.ПараметрыФормы = Новый Структура("РежимПродления", "ТребуетсяУсовершенствоватьПодписи"); - Дело.Владелец = Раздел; - КонецЦикла; - - КоличествоНеобработанныхПодписей = КоличествоПодписей("НеобработанныеПодписи"); - Для Каждого Раздел Из Разделы Цикл - Дело = ТекущиеДела.Добавить (); - Дело.Идентификатор = "НеобработанныеПодписи"; - Дело.ЕстьДела = КоличествоНеобработанныхПодписей > 0; - Дело.Представление = НСтр("ru = 'Продлить ранее добавленные подписи'"); - Дело.Количество = КоличествоНеобработанныхПодписей; - Дело.Важное = Ложь; - Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; - Дело.ПараметрыФормы = Новый Структура("РежимПродления", "НеобработанныеПодписи"); - Дело.Владелец = Раздел; - КонецЦикла; - - ИначеЕсли УсовершенствоватьПодписиАвтоматически = 1 Или Константы.ДобавлятьМеткиВремениАвтоматически.Получить() Тогда - - КоличествоОшибокПриАвтоматическомПродлении = КоличествоПодписей("ОшибкиПриАвтоматическомПродлении"); - Для Каждого Раздел Из Разделы Цикл - Дело = ТекущиеДела.Добавить (); - Дело.Идентификатор = "ОшибкиПриАвтоматическомПродлении"; - Дело.ЕстьДела = КоличествоОшибокПриАвтоматическомПродлении > 0; - Дело.Представление = НСтр("ru = 'Ошибки при автоматическом продлении подписей'"); - Дело.Количество = КоличествоОшибокПриАвтоматическомПродлении; - Дело.Важное = Истина; - Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; - Дело.ПараметрыФормы = Новый Структура("РежимПродления", "ОшибкиПриАвтоматическомПродлении"); - Дело.Владелец = Раздел; - КонецЦикла; - - КонецЕсли; - - КоличествоПодписейДляДобавленияАрхивныхМеток = КоличествоПодписей("ТребуетсяДобавитьАрхивныеМетки"); + КоличествоПодписейДляУсовершенствования = КоличествоПодписей("ТребуетсяУсовершенствоватьПодписи"); Для Каждого Раздел Из Разделы Цикл Дело = ТекущиеДела.Добавить (); - Дело.Идентификатор = "ТребуетсяДобавитьАрхивныеМетки"; - Дело.ЕстьДела = КоличествоПодписейДляДобавленияАрхивныхМеток > 0; - Дело.Представление = НСтр("ru = 'Продлить архивные подписи'"); - Дело.Количество = КоличествоПодписейДляДобавленияАрхивныхМеток; + Дело.Идентификатор = "ТребуетсяУсовершенствоватьПодписи"; + Дело.ЕстьДела = КоличествоПодписейДляУсовершенствования > 0; + Дело.Представление = НСтр("ru = 'Усовершенствовать подписи'"); + Дело.Количество = КоличествоПодписейДляУсовершенствования; Дело.Важное = Ложь; Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; - Дело.ПараметрыФормы = Новый Структура("РежимПродления", "ТребуетсяДобавитьАрхивныеМетки"); + Дело.ПараметрыФормы = Новый Структура("РежимПродления", "ТребуетсяУсовершенствоватьПодписи"); + Дело.Владелец = Раздел; + КонецЦикла; + + КоличествоНеобработанныхПодписей = КоличествоПодписей("НеобработанныеПодписи"); + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить (); + Дело.Идентификатор = "НеобработанныеПодписи"; + Дело.ЕстьДела = КоличествоНеобработанныхПодписей > 0; + Дело.Представление = НСтр("ru = 'Продлить ранее добавленные подписи'"); + Дело.Количество = КоличествоНеобработанныхПодписей; + Дело.Важное = Ложь; + Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; + Дело.ПараметрыФормы = Новый Структура("РежимПродления", "НеобработанныеПодписи"); + Дело.Владелец = Раздел; + КонецЦикла; + + ИначеЕсли УсовершенствоватьПодписиАвтоматически = 1 Или Константы.ДобавлятьМеткиВремениАвтоматически.Получить() Тогда + + КоличествоОшибокПриАвтоматическомПродлении = КоличествоПодписей("ОшибкиПриАвтоматическомПродлении"); + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить (); + Дело.Идентификатор = "ОшибкиПриАвтоматическомПродлении"; + Дело.ЕстьДела = КоличествоОшибокПриАвтоматическомПродлении > 0; + Дело.Представление = НСтр("ru = 'Ошибки при автоматическом продлении подписей'"); + Дело.Количество = КоличествоОшибокПриАвтоматическомПродлении; + Дело.Важное = Истина; + Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; + Дело.ПараметрыФормы = Новый Структура("РежимПродления", "ОшибкиПриАвтоматическомПродлении"); Дело.Владелец = Раздел; КонецЦикла; КонецЕсли; + + КоличествоПодписейДляДобавленияАрхивныхМеток = КоличествоПодписей("ТребуетсяДобавитьАрхивныеМетки"); + Для Каждого Раздел Из Разделы Цикл + Дело = ТекущиеДела.Добавить (); + Дело.Идентификатор = "ТребуетсяДобавитьАрхивныеМетки"; + Дело.ЕстьДела = КоличествоПодписейДляДобавленияАрхивныхМеток > 0; + Дело.Представление = НСтр("ru = 'Продлить архивные подписи'"); + Дело.Количество = КоличествоПодписейДляДобавленияАрхивныхМеток; + Дело.Важное = Ложь; + Дело.Форма = "ОбщаяФорма.ПродлениеСрокаДействияЭлектронныхПодписей"; + Дело.ПараметрыФормы = Новый Структура("РежимПродления", "ТребуетсяДобавитьАрхивныеМетки"); + Дело.Владелец = Раздел; + КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистемы ВариантыОтчетов. +#КонецОбласти + +#Область ОбработчикиСобытийПодсистемыВариантыОтчетов // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов. Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт @@ -1534,8 +1561,23 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +// Для процедур ПриПолученииДанныхОтГлавного, ПриПолученииДанныхОтПодчиненного +Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Подчиненному, СозданиеНачальногоОбраза) + + Если СозданиеНачальногоОбраза Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи") Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + // Только для внутреннего использования. // // Параметры: @@ -1686,6 +1728,25 @@ КонецФункции +// Параметры: +// Подпись - ДвоичныеДанные - результат подписания +// РезультатВХранилищеЗначений - Булево - помещать результат в ХранилищеЗначения +// +// Возвращаемое значение: +// ДвоичныеДанные - двоичные данные сертификата. +// Неопределено - подпись не содержит сертификатов криптографии. +// ХранилищеЗначения - результат дополнительно помещен в ХранилищеЗначения. +// +Функция СертификатИзДвоичныхДанныхПодписи(Подпись, РезультатВХранилищеЗначения = Ложь) Экспорт + + СвойстваПодписи = СвойстваПодписиИзДвоичныхДанных(Подпись, Истина); + + Возврат ?(РезультатВХранилищеЗначения, + Новый ХранилищеЗначения(СвойстваПодписи.Сертификат, Новый СжатиеДанных(9)), + СвойстваПодписи.Сертификат); + +КонецФункции + Функция СвойстваПодписиИзДвоичныхДанных(Подпись, ПрочитатьСертификаты) Экспорт Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатЧтенияСвойствПодписи(); @@ -1758,37 +1819,60 @@ КонецПроцедуры -Функция ЗаголовокИнформацииДляПоддержки() Экспорт - - Если ВидимостьСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами() Тогда - Заголовок = СтроковыеФункции.ФорматированнаяСтрока( - НСтр("ru = 'При возникновении затруднений ознакомьтесь со списком типичных проблем при работе с приложениями электронной подписи и их решений. - | - |В иных случаях обратитесь в службу поддержки фирмы ""1С""'"), - "ТипичныеПроблемы", "ТехническаяИнформация"); - Иначе - Заголовок = СтроковыеФункции.ФорматированнаяСтрока( - НСтр("ru = 'Обратитесь в службу поддержки фирмы ""1С""'"), - "ТехническаяИнформация"); - КонецЕсли; - - Возврат Заголовок; - -КонецФункции - -// Определяет внутренний идентификатор классификатора для подсистемы РаботаСКлассификаторами. +// Только для внутреннего использования. +// +// Параметры: +// ДобавитьИзФайлов - Булево - сертификат добавляется из файлов. // // Возвращаемое значение: -// Строка - идентификатор классификатора. +// Структура - сведения для установки на форме, содержащей указанные свойства: +// * Заголовок - Строка - заголовок кнопки добавления сертификата. +// * ЗаголовокРасширеннойПодсказки - Строка - текст расширенной подсказки кнопки добавления сертификата. +// * Назначение - Строка - см. ЭлектроннаяПодписьСлужебныйКлиент.ДобавитьСертификатПослеВыбораНазначения // -Функция ИдентификаторКлассификатора() +Функция СвойстваКомандыДобавленияСертификатов(ДобавитьИзФайлов = Ложь) Экспорт - МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация"); - Если МодульЭлектроннаяПодписьСлужебныйЛокализация <> Неопределено Тогда - Возврат МодульЭлектроннаяПодписьСлужебныйЛокализация.ИдентификаторКлассификатора(); + Результат = Новый Структура("Заголовок, ЗаголовокРасширеннойПодсказки, Назначение"); + + Если ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда + + Если ДобавитьИзФайлов Тогда + Результат.Заголовок = НСтр("ru = 'Для подписания и шифрования из файлов...'"); + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для подписания и шифрования из файлов'"); + Результат.Назначение = "ДляПодписанияШифрованияИРасшифровкиИзФайлов"; + Иначе + Результат.Заголовок = НСтр("ru = 'Для подписания и шифрования из личного хранилища...'"); + Если ИспользоватьСервисОблачнойПодписи() Тогда + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для подписания и шифрования из установленных на сервере DSS и на компьютере'"); + ИначеЕсли ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для подписания и шифрования из установленных в сервисе и на компьютере'"); + Иначе + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для подписания и шифрования из установленных на компьютере'"); + КонецЕсли; + Результат.Назначение = "ДляПодписанияШифрованияИРасшифровки"; + КонецЕсли; + + Иначе + + Если ДобавитьИзФайлов Тогда + Результат.Заголовок = НСтр("ru = 'Для шифрования и расшифровки из файлов...'"); + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для шифрования и расшифровки из файлов'"); + Результат.Назначение = "ДляПодписанияШифрованияИРасшифровкиИзФайлов"; + Иначе + Результат.Заголовок = НСтр("ru = 'Для шифрования и расшифровки из личного хранилища...'"); + Если ИспользоватьСервисОблачнойПодписи() Тогда + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для шифрования и расшифровки из установленных на сервере DSS и на компьютере'"); + ИначеЕсли ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для шифрования и расшифровки из установленных в сервисе и на компьютере'"); + Иначе + Результат.ЗаголовокРасширеннойПодсказки = НСтр("ru = 'Добавить для шифрования и расшифровки из установленных на компьютере'"); + КонецЕсли; + Результат.Назначение = "ДляШифрованияИРасшифровки"; + КонецЕсли; + КонецЕсли; - Возврат Неопределено; + Возврат Результат; КонецФункции @@ -1844,7 +1928,7 @@ // Операция - Строка - если не пустая, то должна содержать одну из строк, которые определяют // операцию для вставки в описание ошибки: Подписание, ПроверкаПодписи, Шифрование, // Расшифровка, ПроверкаСертификата, ПолучениеСертификатов. -// ПараметрыМенеджераКриптографии - см. ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии. +// ПараметрыМенеджераКриптографии - см. ПараметрыСозданияМенеджераКриптографии. // // Возвращаемое значение: // МенеджерКриптографии - менеджер криптографии. @@ -1901,9 +1985,10 @@ ЗаголовокОшибки = НСтр("ru = 'Не удалось усовершенствовать подписи на сервере %1 по причине:'"); ИначеЕсли Операция <> "" Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка вызова функции %1. |Неверное значение параметра Операция ""%2"".'"), "МенеджерКриптографии", Операция); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); ИначеЕсли ТипЗнч(ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки) = Тип("Структура") И ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки.Свойство("ЗаголовокОшибки") Тогда @@ -1937,7 +2022,7 @@ КонецФункции -// Возвращает массив отпечатков сертификатов на сервере +// Возвращает массив отпечатков сертификатов на сервере. // Функция ОтпечаткиСертификатов(ТолькоЛичные, ОписаниеОшибки) Экспорт @@ -1952,12 +2037,12 @@ Ошибка = ПараметрыСоздания.ОписаниеОшибки; Если МенеджерКриптографии <> Неопределено Тогда - МассивОтпечатков = ПолучитьОтпечаткиСертификатовВХранилище( + МассивОтпечатков = ОтпечаткиСертификатовВХранилище( МенеджерКриптографии, ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, Ошибка); Если Не ТолькоЛичные Тогда ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивОтпечатков, - ПолучитьОтпечаткиСертификатовВХранилище( + ОтпечаткиСертификатовВХранилище( МенеджерКриптографии, ТипХранилищаСертификатовКриптографии.СертификатыПолучателей, Ошибка), Истина); КонецЕсли; @@ -1978,15 +2063,8 @@ Если ИспользоватьСервисОблачнойПодписи() Тогда - // Локализация - МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); - - Для Каждого Сертификат Из МассивСертификатов Цикл - МассивОтпечатков.Добавить(Base64Строка(Сертификат.Отпечаток)); - КонецЦикла; - // Конец Локализация - + ЭлектроннаяПодписьЛокализация.ПриПолученииОтпечатковОблачногоСервиса(МассивОтпечатков); + КонецЕсли; Возврат МассивОтпечатков; @@ -2285,7 +2363,7 @@ СообщениеЖурналаРегистрации); КонецПроцедуры - + // Только для внутреннего использования. // // Параметры: @@ -2454,15 +2532,9 @@ КонецЕсли; Если ИспользоватьСервисОблачнойПодписи() Тогда - // Локализация - МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); - ПараметрыДобавленияСвойств = Новый Структура("ОблачнаяПодпись", Истина); + ЭлектроннаяПодписьЛокализация.ПриДобавленииСвойствСертификатовОблачногоСервиса(ТаблицаСвойствСертификатов, БезОтбора); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, - МассивСертификатов, БезОтбора, РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); - // Конец Локализация КонецЕсли; ОбработатьДобавленныеСертификаты(ТаблицаСвойствСертификатов, Не БезОтбора И КромеУжеДобавленных, ОтборПоОрганизации); @@ -2518,10 +2590,11 @@ // Для функции ПроверитьСертификат Функция ПроверитьСертификатНаКорректность(МенеджерКриптографииДляПроверки, СертификатДляПроверки, - РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение) + РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, УниверсальнаяДатаПроверки) Попытка - МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата); + ПроверитьСертификатНаКорректностьНаДату(МенеджерКриптографииДляПроверки, СертификатДляПроверки, + РежимыПроверкиСертификата, УниверсальнаяДатаПроверки); Возврат Истина; Исключение ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -2549,31 +2622,55 @@ Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда Возврат ПроверитьСертификатНаКорректностьПовторно(МенеджерКриптографииДляПроверки, СертификатДляПроверки, РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, - ОшибкаПоКлассификатору.ДействияДляУстранения); + ОшибкаПоКлассификатору.ДействияДляУстранения, УниверсальнаяДатаПроверки); КонецЕсли; Возврат Ложь; КонецФункции +// Для функции ПроверитьСертификат +Процедура ПроверитьСертификатНаКорректностьНаДату(МенеджерКриптографииДляПроверки, СертификатДляПроверки, + РежимыПроверкиСертификата, УниверсальнаяДатаПроверки) + + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + //@skip-check bsl-legacy-check-dynamic-feature-access + МенеджерКриптографииДляПроверки.ПроверитьСертификат( + СертификатДляПроверки, РежимыПроверкиСертификата, УниверсальнаяДатаПроверки); + Иначе + МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата); + КонецЕсли; + +КонецПроцедуры + // Для функции ПроверитьСертификат Функция ПроверитьСертификатНаКорректностьПовторно(МенеджерКриптографииДляПроверки, СертификатДляПроверки, - РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, ДействияДляУстранения) + РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, ДействияДляУстранения, УниверсальнаяДатаПроверки) ТребуетсяУстановкаСпискаОтзыва = Ложь; Если ТипЗнч(МенеджерКриптографииДляПроверки) = Тип("МенеджерКриптографии") Тогда - Если ЗначениеЗаполнено(ДействияДляУстранения) И ДействияДляУстранения.Найти("УстановитьСписокОтзываСертификата") <> Неопределено Тогда + Если ЗначениеЗаполнено(ДействияДляУстранения) И ДействияДляУстранения.Найти("УстановитьСписокОтзываСертификата") <> Неопределено + И ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам() Тогда + ИмяИздателя = НРег(ЭлектроннаяПодпись.СвойстваИздателяСертификата(СертификатДляПроверки).ОбщееИмя); Если ЗначениеЗаполнено(ИмяИздателя) Тогда ИмяИздателя = СтроковыеФункции.СтрокаЛатиницей(ИмяИздателя); + СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатДляПроверки); + + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( + ИмяИздателя, + СвойстваСертификата, + ЭлектроннаяПодписьСлужебныйПовтИсп.КаталогиСписковОтзываУЦ()); + Иначе + АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( + ИмяИздателя, + СертификатДляПроверки.Выгрузить(), + ЭлектроннаяПодписьСлужебныйПовтИсп.КаталогиСписковОтзываУЦ()); + КонецЕсли; - АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( - ИмяИздателя, - СертификатДляПроверки.Выгрузить(), - ЭлектроннаяПодписьСлужебныйПовтИсп.КаталогиСписковОтзываУЦ()); - Если ЗначениеЗаполнено(АдресСпискаОтзываВнутренний.АдресВнутренний) Тогда ТребуетсяУстановкаСпискаОтзыва = Истина; КонецЕсли; @@ -2584,7 +2681,6 @@ Если ТребуетсяУстановкаСпискаОтзыва Тогда - СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатДляПроверки); СведенияОСертификатеСтрокой = ЭлектроннаяПодписьСлужебныйКлиентСервер.СведенияОСертификатеСтрокой(СвойстваСертификата); Попытка @@ -2618,7 +2714,10 @@ // Повторная проверка после установки списка отзыва. Попытка - МенеджерКриптографииДляПроверки.ПроверитьСертификат(СертификатДляПроверки, РежимыПроверкиСертификата); + + ПроверитьСертификатНаКорректностьНаДату(МенеджерКриптографииДляПроверки, СертификатДляПроверки, + РежимыПроверкиСертификата, УниверсальнаяДатаПроверки); + Исключение ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -2891,8 +2990,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции управляемых форм. +#Область ОбщиеПроцедурыИФункцииУправляемыхФорм // Только для внутреннего использования. // @@ -3808,11 +3906,12 @@ КонецФункции +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. -//////////////////////////////////////////////////////////////////////////////// -// Работа с XMLDSig +#Область РаботаСXMLDSig // Подписывает сообщение, подставляя в КонвертXML данные подписи. // @@ -4620,8 +4719,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Для процедуры ОбновитьСписокСертификатов. Процедура ОбработатьДобавленныеСертификаты(ТаблицаСвойствСертификатов, КромеУжеДобавленных, ОтборПоОрганизации = Неопределено) @@ -4866,27 +4966,10 @@ КонецЕсли; Если ИспользоватьСервисОблачнойПодписи() Тогда - - // Локализация - МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - ВсеСертификаты = МодульСервисКриптографииDSSСлужебный.ПолучитьВсеСертификаты(Ложь); - - МассивСертификатов = Новый ТаблицаЗначений; - МассивСертификатов.Колонки.Добавить("Отпечаток"); - МассивСертификатов.Колонки.Добавить("ДатаНачала"); - МассивСертификатов.Колонки.Добавить("ДатаОкончания"); - - Для каждого СтрокаТаблицы Из ВсеСертификаты Цикл - НоваяСтрока = МассивСертификатов.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); - НоваяСтрока.Отпечаток = ПолучитьДвоичныеДанныеИзHexСтроки(СтрокаТаблицы.Отпечаток); - КонецЦикла; - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов( - ОтпечаткиСертификатовНаКлиенте, МассивСертификатов, РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса()); - // Конец Локализация - - КонецЕсли; + ЭлектроннаяПодписьЛокализация.ПриЗаполненииСертификатовОблачногоСервиса(ОтпечаткиСертификатовНаКлиенте); + + КонецЕсли; ОтборПоОрганизации = Ложь; @@ -5006,9 +5089,9 @@ КонецПроцедуры -Функция ПолучитьОтпечаткиСертификатовВХранилище(МенеджерКриптографии, ТипХранилища, Ошибка) +Функция ОтпечаткиСертификатовВХранилище(МенеджерКриптографии, ТипХранилища, Ошибка) - МассивОтпечатков = Новый Массив; + Результат = Новый Массив; Попытка МассивСертификатов = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилища).ПолучитьВсе(); Исключение @@ -5019,14 +5102,14 @@ Иначе Ошибка = ОписаниеОшибки; КонецЕсли; - Возврат МассивОтпечатков; + Возврат Результат; КонецПопытки; Для Каждого Сертификат Из МассивСертификатов Цикл - МассивОтпечатков.Добавить(Base64Строка(Сертификат.Отпечаток)); + Результат.Добавить(Base64Строка(Сертификат.Отпечаток)); КонецЦикла; - Возврат МассивОтпечатков; + Возврат Результат; КонецФункции @@ -5609,16 +5692,23 @@ // и из процедуры ЗаполнитьНастройкиДляУсовершенствованияПодписей // Процедура ЗаполнитьАдресаСерверовМетокВремени() Экспорт - - Если Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено Тогда - АдресаСерверовМетокВремени = Обработки["ПрограммыЭлектроннойПодписиИШифрования"].АдресаСерверовМетокВремениДляНачальногоЗаполнения(); - Если Не ПустаяСтрока(АдресаСерверовМетокВремени) Тогда - МенеджерЗначения = Константы.АдресаСерверовМетокВремени.СоздатьМенеджерЗначения(); - МенеджерЗначения.Значение = АдресаСерверовМетокВремени; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерЗначения); - КонецЕсли; + + АдресаСерверовМетокВремени = ""; + ЭлектроннаяПодписьЛокализация.ПриПолученииАдресовСерверовМетокВремени(АдресаСерверовМетокВремени); + + Если Не ПустаяСтрока(АдресаСерверовМетокВремени) Тогда + МенеджерЗначения = Константы.АдресаСерверовМетокВремени.СоздатьМенеджерЗначения(); + МенеджерЗначения.Значение = АдресаСерверовМетокВремени; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерЗначения); КонецЕсли; + +КонецПроцедуры +// Вызывается при переходе на версию конфигурации 3.1.11.61 +Процедура ВключитьКонстантуРазрешитьДоступКИнтернетСервисам() Экспорт + + Константы.РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи.Установить(Истина); + КонецПроцедуры Функция СертификатПеревыпущен(Сертификат) @@ -5902,7 +5992,7 @@ КонецЕсли; Если ПараметрыЗапроса.РегламентноеЗадание Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ 1000"); // @query-part-1 @query-part-2 + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ", "ВЫБРАТЬ ПЕРВЫЕ 1000"); // @query-part-1, @query-part-2 Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ ЭлектронныеПодписи.ОшибкаПриАвтоматическомПродлении", ""); КонецЕсли; @@ -6071,6 +6161,21 @@ КонецПроцедуры +Функция КриптографияДоступна() Экспорт + + Настройки = ЭлектроннаяПодпись.ОбщиеНастройки(); + + Возврат Не ОбщегоНазначения.РазделениеВключено() + И Настройки.ПроверятьЭлектронныеПодписиНаСервере + Или Настройки.СоздаватьЭлектронныеПодписиНаСервере + Или ОбщегоНазначения.ИнформационнаяБазаФайловая() + И Не ОбщегоНазначения.КлиентПодключенЧерезВебСервер(); + +КонецФункции + + +#КонецОбласти + #Область СвойстваКонвертаXML Функция ОбработатьУзелSignedInfo(УзелSignedInfo, СвойстваКонвертаXML) @@ -6865,11 +6970,12 @@ #Область КлассификаторОшибокКриптографии -Функция ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере = Ложь, ОшибкаПроверкиПодписи = Ложь) Экспорт +Функция ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере = Ложь, ОшибкаПроверкиПодписи = Ложь, + УказанСертификат = Ложь) Экспорт ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебныйПовтИсп.ОшибкаПоКлассификатору( - ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере, ОшибкаПроверкиПодписи); - + ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере, ОшибкаПроверкиПодписи, УказанСертификат); + Если ОшибкаПоКлассификатору = Неопределено Тогда Возврат Неопределено; КонецЕсли; @@ -6900,72 +7006,14 @@ Функция КлассификаторОшибокКриптографии() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Версия = Неопределено; - - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") <> Неопределено Тогда + ДанныеКлассификатора = Неопределено; + ЭлектроннаяПодписьЛокализация.ПриПолученииКлассификатораОшибокКриптографии(ДанныеКлассификатора); - МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация"); - - Если Не ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - - Попытка - ТекстОшибки = МодульЭлектроннаяПодписьСлужебныйЛокализация.ОбновитьКлассификатор(); - Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если ЗначениеЗаполнено(ТекстОшибки) Тогда - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось обновить классификатор ошибок криптографии по причине: - |%1'"), ТекстОшибки); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Электронная подпись.Обновление классификатора ошибок'", - ОбщегоНазначения.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - Комментарий); - КонецЕсли; - КонецЕсли; - - Версия = МодульЭлектроннаяПодписьСлужебныйЛокализация.ВерсияКлассификатора(); - - КонецЕсли; - - ДанныеКлассификатора = Константы.КлассификаторОшибокКриптографии.Получить().Получить(); - - Если ТипЗнч(ДанныеКлассификатора) = Тип("Структура") Тогда - Попытка - Если ЗначениеЗаполнено(Версия) - И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ДанныеКлассификатора.Версия, Версия) < 0 Тогда - - Версия = Неопределено; - Иначе - Версия = ДанныеКлассификатора.Версия; - КонецЕсли; - Исключение - Версия = Неопределено; - КонецПопытки; - Иначе - ДанныеКлассификатора = Неопределено; - КонецЕсли; - - Если Не ЗначениеЗаполнено(ДанныеКлассификатора) - Или Версия = Неопределено Тогда - - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация"); - ДанныеКлассификатора = МодульЭлектроннаяПодписьСлужебныйЛокализация.КлассификаторОшибокКриптографии(); - Если Не ЗначениеЗаполнено(ДанныеКлассификатора) Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - Результат = НовыйКлассификаторОшибокКриптографии(); + Если ДанныеКлассификатора = Неопределено Тогда + Возврат Результат; + КонецЕсли; + Для Каждого СтрокаТаблицы Из ДанныеКлассификатора.Классификатор Цикл НоваяСтрока = Результат.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); @@ -7178,7 +7226,7 @@ Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сервер (%1):'"), ИмяКомпьютера() + "\" + ИмяПользователяОС) + Символы.ПС - + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДиагностическаяИнформацияОКомпьютере(); + + СтандартныеПодсистемыСервер.ИнформацияДляПоддержки(); КонецФункции @@ -7240,7 +7288,7 @@ КонецЕсли; ДиагностическаяИнформация = ДиагностическаяИнформация + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программы на сервере из справочника ""%1"":'"), ИмяКомпьютера()) + Символы.ПС; + НСтр("ru = 'Приложения на сервере из справочника ""%1"":'"), ИмяКомпьютера()) + Символы.ПС; Для Каждого Программа Из ИспользуемыеПрограммы Цикл @@ -7709,7 +7757,7 @@ Исключение Результат.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при получении расширенных свойств сертификата: %1'"), + НСтр("ru = 'Невозможно получить расширенные свойства сертификата: %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Результат; @@ -7776,13 +7824,10 @@ КонецФункции Функция ДополнитьРешениеКлассификатораОшибокПодробностями(ОшибкаПоКлассификатору, - ДополнительныеДанные, ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте, МестоОшибки = Неопределено) Экспорт - - Результат = Новый Структура("ОшибкаПоКлассификатору, ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте", - ОшибкаПоКлассификатору, ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте); + ДополнительныеДанные, МестоОшибки = Неопределено) Экспорт Если Не ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда - Возврат Результат; + Возврат ОшибкаПоКлассификатору; КонецЕсли; Решение = Новый Массив; @@ -7799,35 +7844,6 @@ КонецЕсли; КонецЕсли; -#Если Не МобильноеПриложениеСервер И Не МобильныйКлиент Тогда - Если ОшибкаПоКлассификатору.ДействияДляУстранения.Найти( - "ПроверитьСертификатВЛокальномХранилище") <> Неопределено Тогда - - СистемнаяИнформация = Новый СистемнаяИнформация; - ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПриложения, "8.3.24.0") < 0 Тогда - Если МестоОшибки = "Сервер" Тогда - Если ЭлектроннаяПодпись.ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере - Или ЭлектроннаяПодпись.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда - СертификатВЛокальномХранилище = СертификатВЛокальномХранилище( - ДополнительныеДанные.ДанныеСертификата); - Если СертификатВЛокальномХранилище = Истина Тогда - Решение = Новый Массив; - Решение.Добавить(СтроковыеФункции.ФорматированнаяСтрока( - СертификатВЛокальномХранилищеТекстРешения(МестоОшибки))); - - Причина = Новый Массив; - Причина.Добавить(СтроковыеФункции.ФорматированнаяСтрока( - СертификатВЛокальномХранилищеТекстПричины(МестоОшибки))); - КонецЕсли; - КонецЕсли; - Иначе - Результат.ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте.ПроверитьСертификатВЛокальномХранилищеКлиента = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; -#КонецЕсли - Если ОшибкаПоКлассификатору.ДействияДляУстранения.Найти( "ДиагностикаСерверовМетокВремениСервер") <> Неопределено Тогда @@ -7867,46 +7883,17 @@ КонецЕсли; Если Решение.Количество() > 0 Тогда - Результат.ОшибкаПоКлассификатору.Решение = Новый ФорматированнаяСтрока(Решение); + ОшибкаПоКлассификатору.Решение = Новый ФорматированнаяСтрока(Решение); КонецЕсли; Если Причина.Количество() > 0 Тогда - Результат.ОшибкаПоКлассификатору.Причина = Новый ФорматированнаяСтрока(Причина); + ОшибкаПоКлассификатору.Причина = Новый ФорматированнаяСтрока(Причина); КонецЕсли; - Возврат Результат; + Возврат ОшибкаПоКлассификатору; КонецФункции - -Функция СертификатВЛокальномХранилищеТекстРешения(Место) - - Если Место = "Сервер" Тогда - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Удалите сертификат из локального хранилища сервера %1.'"), ИмяКомпьютера()); - - КонецЕсли; - - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатВЛокальномХранилищеТекстРешения(); - -КонецФункции - -Функция СертификатВЛокальномХранилищеТекстПричины(Место) Экспорт - - Если Место = "Сервер" Тогда - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр( - "ru='На сервере %1 сертификат установлен в локальное хранилище, вместо хранилища текущего пользователя, под которым работает сервер.'"), - ИмяКомпьютера()); - - КонецЕсли; - - Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатВЛокальномХранилищеТекстПричины(); - -КонецФункции - Функция ИздательСертификата(ДанныеСертификата) Если Не ЗначениеЗаполнено(ДанныеСертификата) Тогда @@ -7921,37 +7908,6 @@ Возврат Неопределено; КонецФункции -Функция СертификатВЛокальномХранилище(ДанныеСертификата) - -#Если Не МобильноеПриложениеСервер И Не МобильныйКлиент Тогда - - Если Не ЗначениеЗаполнено(ДанныеСертификата) Тогда - Возврат Неопределено; - КонецЕсли; - - МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов"); - Попытка - ХранилищеЛокальногоКомпьютера = МенеджерКриптографии.ПолучитьХранилищеСертификатов( - ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, - РасположениеХранилищаСертификатовКриптографии.ДанныеКомпьютера); - СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Электронная подпись.Диагностика ошибок'", - ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Неопределено; - КонецПопытки; - - Если ХранилищеЛокальногоКомпьютера.НайтиПоОтпечатку(СертификатКриптографии.Отпечаток) <> Неопределено Тогда - Возврат Истина; - КонецЕсли; - -#КонецЕсли - - Возврат Неопределено; - -КонецФункции - Процедура УстановитьСписокОтзываСертификата(Сертификат, Адреса = Неопределено, АдресВнутренний = Неопределено) Экспорт ОбъектКомпоненты = ОбъектВнешнейКомпонентыExtraCryptoAPI(); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index c8cd2bff4..0564876de 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -81,15 +81,9 @@ КонецЕсли; Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда - // Локализация - МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный"); - МассивСертификатов = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатов(Ложь); - ПараметрыДобавленияСвойств = Новый Структура("ОблачнаяПодпись", Истина); + ЭлектроннаяПодписьЛокализация.ПриДобавленииСвойствСертификатовОблачногоСервиса(ТаблицаСвойствСертификатов, Истина); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов(ТаблицаСвойствСертификатов, МассивСертификатов, Истина, - ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса(), ПараметрыДобавленияСвойств); - // Конец Локализация КонецЕсли; Возврат ОбработатьЛичныеСертификаты(ТаблицаСвойствСертификатов, Отбор); @@ -412,8 +406,12 @@ СертификатКриптографии, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата); СвойстваСертификата.Вставить("ДвоичныеДанные", ДвоичныеДанныеСертификата); - АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( - ДвоичныеДанныеСертификата, Ложь, Истина); + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + АлгоритмСертификата = СвойстваСертификата.АлгоритмОткрытогоКлюча; + Иначе + АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( + ДвоичныеДанныеСертификата, Ложь, Истина); + КонецЕсли; АлгоритмСоответствует = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату( СвойстваСертификата.Представление, АлгоритмСертификата, МенеджерКриптографии.АлгоритмПодписи); @@ -490,17 +488,15 @@ Если Параметры.Операция = "Подписание" Тогда МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля; Попытка - Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда - НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(Параметры.ТипПодписи, - ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени); - Если ЗначениеЗаполнено(НастройкиПодписи.АдресаСерверовМетокВремени) Тогда - МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени; - КонецЕсли; - ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии, - НастройкиПодписи.ТипПодписи); - Иначе - ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии); + + НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(Параметры.ТипПодписи, + ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени); + Если ЗначениеЗаполнено(НастройкиПодписи.АдресаСерверовМетокВремени) Тогда + МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени; КонецЕсли; + ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии, + НастройкиПодписи.ТипПодписи); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДвоичныеДанныеРезультата, ОписаниеОшибки); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -545,29 +541,24 @@ СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса(); СвойстваПодписи.НеподтвержденнаяДатаПодписи = СвойстваПодписи.ДатаПодписи; Иначе - Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда - СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии( + СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии( ДвоичныеДанныеРезультата, МенеджерКриптографии, Ложь); - - Если СвойстваПодписи.Успех = Ложь Тогда - - ДанныеПодписи = Base64Строка(ДвоичныеДанныеРезультата); - ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1. - |Результат подписи: %2'"), СвойстваПодписи.ТекстОшибки, ДанныеПодписи); - ОшибкаНаСервере.Вставить("ОписаниеОшибки", ПредставлениеОшибки); - ОшибкаНаСервере.Вставить("Инструкция", Истина); - Возврат Ложь; - - КонецЕсли; - Иначе - СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиИзДвоичныхДанных(ДвоичныеДанныеРезультата, - Ложь); + + Если СвойстваПодписи.Успех = Ложь Тогда + + ДанныеПодписи = Base64Строка(ДвоичныеДанныеРезультата); + ПредставлениеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1. + |Результат подписи: %2'"), СвойстваПодписи.ТекстОшибки, ДанныеПодписи); + ОшибкаНаСервере.Вставить("ОписаниеОшибки", ПредставлениеОшибки); + ОшибкаНаСервере.Вставить("Инструкция", Истина); + Возврат Ложь; + КонецЕсли; - + СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанныеРезультата, СвойстваСертификата, Параметры.Комментарий, Пользователи.АвторизованныйПользователь(),,СвойстваПодписи); - + СвойстваПодписи.ДатаПодписи = ?(ЗначениеЗаполнено(СвойстваПодписи.НеподтвержденнаяДатаПодписи), СвойстваПодписи.НеподтвержденнаяДатаПодписи, ТекущаяДатаСеанса()); КонецЕсли; @@ -586,7 +577,7 @@ СвойстваПодписи.ИдентификаторПодписи = Новый УникальныйИдентификатор; Параметры.ЭлементДанныхДляСервера.Свойство("ВерсияОбъекта", ВерсияОбъекта); - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(Параметры.РезультатПроверкиМЧДДляПодписания) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда @@ -599,7 +590,7 @@ КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности ПредставлениеОшибки = ДобавитьПодпись(Параметры.ЭлементДанныхДляСервера.Объект, СвойстваПодписи, Параметры.ИдентификаторФормы, ВерсияОбъекта); @@ -718,11 +709,12 @@ // Только для внутреннего использования. Функция ПреобразоватьПодписиВМассив(Подписи, ИдентификаторФормы) Экспорт - Массив = Новый Массив; + Массив = Новый Массив; + ПараметрыПолученияПодписей = ЭлектроннаяПодпись.НовыйПараметрыПолученияПодписейОбъекта(); Для Каждого ТекущийЭлемент Из Подписи Цикл - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи( - ТекущийЭлемент.ПодписанныйОбъект, ТекущийЭлемент.ПорядковыйНомер); - Для Каждого ТекущаяПодпись Из УстановленныеПодписи Цикл + ПараметрыПолученияПодписей.ПорядковыйНомер = ТекущийЭлемент.ПорядковыйНомер; + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(ТекущийЭлемент.ПодписанныйОбъект, ПараметрыПолученияПодписей); + Для Каждого ТекущаяПодпись Из ПодписиОбъекта Цикл Если Не ТекущаяПодпись.ПодписьВерна Тогда Продолжить; КонецЕсли; @@ -802,7 +794,7 @@ Если Менеджер = Неопределено Тогда Программа.РезультатПроверкиНаСервере = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиПоискаПрограммы( - НСтр("ru = 'Не установлена на сервере %1.'"), ПараметрыСоздания.ОписаниеОшибки); + НСтр("ru = 'Не установлено на сервере %1.'"), ПараметрыСоздания.ОписаниеОшибки); Иначе Программа.РезультатПроверкиНаСервере = ""; Программа.Установлена = Истина; @@ -910,21 +902,7 @@ Результат = Ложь; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда - // Локализация - МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS"); - Результат = МодульСервисКриптографииDSS.ИспользоватьСервисОблачнойПодписи(); - Если Результат Тогда - ВсеУчетныеЗаписи = МодульСервисКриптографииDSS.ПолучитьВсеУчетныеЗаписи(); - Если ВсеУчетныеЗаписи.Количество() > 0 Тогда - СтрокаПоиска = Новый Структура("ПометкаУдаления", Истина); - Результат = ВсеУчетныеЗаписи.НайтиСтроки(СтрокаПоиска).Количество() <> ВсеУчетныеЗаписи.Количество(); - Иначе - Результат = Ложь; - КонецЕсли; - КонецЕсли; - // Конец Локализация - КонецЕсли; + ЭлектроннаяПодписьЛокализация.ПриОпределенииНастроенногоОблачногоСервиса(Результат); Возврат Результат; @@ -982,10 +960,10 @@ #Область ДиагностикаЭлектроннойПодписи Функция ДополнитьРешениеКлассификатораОшибокПодробностями(Знач ОшибкаПоКлассификатору, - Знач ДополнительныеДанные, Знач ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте, Знач МестоОшибки = Неопределено) Экспорт + Знач ДополнительныеДанные, Знач МестоОшибки = Неопределено) Экспорт Возврат ЭлектроннаяПодписьСлужебный.ДополнитьРешениеКлассификатораОшибокПодробностями(ОшибкаПоКлассификатору, - ДополнительныеДанные, ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте, МестоОшибки); + ДополнительныеДанные, МестоОшибки); КонецФункции @@ -1064,7 +1042,7 @@ ДобавитьОписаниеПодписи(Подписи, ОписаниеФайлов, Текст, 1); КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль( @@ -1073,7 +1051,7 @@ ДополнительныеДанные, ОписаниеФайлов, Сведения, Текст); КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(Текст) Тогда Сведения = Сведения + Текст + Символы.ПС; @@ -1108,26 +1086,33 @@ КонецЕсли; КонецЕсли; + АлгоритмПодписи = ""; Если ТипЗнч(ДанныеСертификата) = Тип("ДвоичныеДанные") Тогда Если Не ЗначениеЗаполнено(ПредставлениеСертификата) Тогда Попытка СертификатКриптографии = Новый СертификатКриптографии(ДанныеСертификата); СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); ПредставлениеСертификата = СвойстваСертификата.Представление; + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи( + СвойстваСертификата.АлгоритмОткрытогоКлюча, Истина, Истина); + КонецЕсли; Исключение ПредставлениеСертификата = ""; КонецПопытки; КонецЕсли; Расширение = "cer"; - АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( - ДанныеСертификата, Истина); + + Если АлгоритмПодписи = "" Тогда + АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( + ДанныеСертификата, Истина); + КонецЕсли; ДанныеСертификата = ПолучитьДвоичныеДанныеИзСтроки("-----BEGIN CERTIFICATE-----" + Символы.ПС + Base64Строка( ДанныеСертификата) + Символы.ПС + "-----END CERTIFICATE-----"); Иначе Расширение = "txt"; XMLДанныеСертификата = XMLСтрока(Новый ХранилищеЗначения(ДанныеСертификата)); ДанныеСертификата = ПолучитьДвоичныеДанныеИзСтроки(XMLДанныеСертификата, КодировкаТекста.ANSI, Ложь); - АлгоритмПодписи = ""; КонецЕсли; Если Не ЗначениеЗаполнено(ПредставлениеСертификата) Тогда ПредставлениеСертификата = НСтр("ru = 'Сертификат'") + Формат(Номер, "ЧГ="); @@ -1147,7 +1132,7 @@ Если ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда Сведения = Сведения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Символы.Таб + НСтр("ru = 'Программа: %1'"), Строка(ЗначенияРеквизитов.Программа)) + Символы.ПС; + Символы.Таб + НСтр("ru = 'Приложение: %1'"), Строка(ЗначенияРеквизитов.Программа)) + Символы.ПС; Сведения = Сведения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Символы.Таб + НСтр("ru = 'Вводить пароль в приложении электронной подписи: %1'"), @@ -1301,7 +1286,7 @@ // Адреса файлов технической информации. // // Возвращаемое значение: -// Структура - Адреса файлов технической информации: +// Структура - адреса файлов технической информации: // * ТехническаяИнформация - Строка // * ЖурналРегистрации - Строка // @@ -1372,83 +1357,22 @@ КонецФункции -// Локализация -Функция ПолучитьДистрибутивCryptoProCSP(Параметры) Экспорт +Функция ПолучитьДистрибутив(Параметры, Идентификатор) Экспорт - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутива CryptoPro CSP'"); - - Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, - "ЭлектроннаяПодписьСлужебныйЛокализация.ДистрибутивCryptoProCSP", Параметры); + Результат = Неопределено; + ЭлектроннаяПодписьЛокализация.ПриПолученииДистрибутива(Параметры, Идентификатор, Результат); + Возврат Результат; КонецФункции -Функция ПолучитьДистрибутивViPNetCSP(Параметры) Экспорт - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутива VipNet CSP'"); - - Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, - "ЭлектроннаяПодписьСлужебныйЛокализация.ДистрибутивViPNetCSP", Параметры); - -КонецФункции - -// Результат получения дистрибутива криптопровайдера. -// -// Параметры: -// ДлительнаяОперация - Структура: -// * АдресРезультата - Строка - адрес во временном хранилище -// ИдентификаторФормы Идентификатор формы -// -// Возвращаемое значение: -// Структура - результат получения дистрибутива криптопровайдера: -// * ДанныеДистрибутива - Структура: -// ** НомерДистрибутива - Строка -// ** Версия - Строка -// ** КонтрольнаяСумма - Строка -// ** СерийныйНомер - Строка -// ** ИмяФайлаДистрибутива - Строка -// ** КомандаЗапуска - см. ФайловаяСистемаКлиент.ЗапуститьПрограмму.КомандаЗапуска -// ** Дистрибутив - Массив из ОписаниеПередаваемогоФайла -// * Ошибка - Строка -// Функция РезультатПолученияДистрибутиваКриптопровайдера(ДлительнаяОперация, ИдентификаторФормы) Экспорт - Результат = ПолучитьИзВременногоХранилища(ДлительнаяОперация.АдресРезультата); // см. ЭлектроннаяПодписьСлужебныйЛокализация.ДистрибутивViPNetCSP - - ДанныеДистрибутива = Новый Структура; - Если Результат.ПараметрыДистрибутива <> Неопределено И Результат.ПараметрыДистрибутива.Свойство("Дистрибутив") Тогда - - ДанныеДистрибутива.Вставить("НомерДистрибутива", Результат.ПараметрыДистрибутива.НомерДистрибутива); - ДанныеДистрибутива.Вставить("Версия", Результат.ПараметрыДистрибутива.Версия); - ДанныеДистрибутива.Вставить("КонтрольнаяСумма", Результат.ПараметрыДистрибутива.КонтрольнаяСумма); - ДанныеДистрибутива.Вставить("ИмяФайлаДистрибутива", Результат.ПараметрыДистрибутива.ИмяФайлаДистрибутива); - ДанныеДистрибутива.Вставить("КомандаЗапуска", Результат.ПараметрыДистрибутива.КомандаЗапуска); - - Если Результат.ПараметрыДистрибутива.Свойство("СерийныйНомер") Тогда - ДанныеДистрибутива.Вставить("СерийныйНомер", Результат.ПараметрыДистрибутива.СерийныйНомер); - КонецЕсли; - - ОписаниеФайлов = Новый Массив; - - Для каждого Файл Из Результат.ПараметрыДистрибутива.Дистрибутив Цикл - ОписаниеФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.Имя, - ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, ИдентификаторФормы))); - КонецЦикла; - - ДанныеДистрибутива.Вставить("Дистрибутив", ОписаниеФайлов); - КонецЕсли; - - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("ДанныеДистрибутива", ДанныеДистрибутива); - СтруктураВозврата.Вставить("Ошибка", Результат.Ошибка); - - Возврат СтруктураВозврата; + Результат = Неопределено; + ЭлектроннаяПодписьЛокализация.ПриОбработкеРезультатаПолученияДистрибутива(ДлительнаяОперация, ИдентификаторФормы, Результат); + Возврат Результат; КонецФункции -// Конец Локализация - Функция РезультатДиагностикиСерверовМетокВремени() Экспорт АдресаСерверовМетокВремени = ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени; @@ -1464,4 +1388,16 @@ КонецФункции +// Только для внутреннего использования. +// +// Параметры: +// ДанныеСертификата - ДвоичныеДанные +// +Функция ФайлЯвляетсяСертификатом(Знач ДанныеСертификата) Экспорт + + СертификатКриптографии = ЭлектроннаяПодписьСлужебный.СертификатИзДвоичныхДанных(ДанныеСертификата); + Возврат СертификатКриптографии <> Неопределено; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index 4b3a2e456..97bc04e27 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -87,6 +87,13 @@ // Процедура УстановитьСписокОтзываСертификата(ПараметрыУстановкиСпискаОтзыва) Экспорт + Если Не ЭлектроннаяПодписьКлиент.ОбщиеНастройки().РазрешенДоступКИнтернетСервисам Тогда + ОбработатьОшибкуУстановкиСпискаОтзыва( + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗапрещенДоступКИнтернетСервисамТекстСообщения(), + ПараметрыУстановкиСпискаОтзыва); + Возврат; + КонецЕсли; + Оповещение = Новый ОписаниеОповещения("УстановитьСписокОтзываСертификатаПослеПодключенияКомпоненты", ЭтотОбъект, ПараметрыУстановкиСпискаОтзыва); @@ -310,8 +317,8 @@ Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() - И СерверныеПараметры.Свойство("ВыполнятьНаСервере") - И СерверныеПараметры.ВыполнятьНаСервере = Истина Тогда + И СерверныеПараметры.Свойство("ВыполнятьНаСервере") + И СерверныеПараметры.ВыполнятьНаСервере = Истина Тогда Результат = Новый Структура; Результат.Вставить("СвойстваСертификатовНаКлиенте", Новый Массив); @@ -439,6 +446,25 @@ КонецПроцедуры +// Открывает форму установки программ криптопровайдеров. +// +// Параметры: +// Параметры - Структура +// Владелец - ФормаКлиентскогоПриложения +// Оповещение - ОписаниеОповещения +// +Процедура ОткрытьФормуУстановкиПрограммКриптопровайдеров(Параметры = Неопределено, Владелец = Неопределено, Оповещение = Неопределено) Экспорт + + СтандартнаяОбработка = Истина; + ЭлектроннаяПодписьКлиентЛокализация.ПриОткрытииФормыУстановкиПрограммКриптопровайдеров( + Параметры, Владелец, Оповещение, СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Действие недоступно в приложении'")); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -447,8 +473,8 @@ СерверныеПараметры = Новый Структура; СерверныеПараметры.Вставить("Токен", Токен); - ФормаПередачаПараметров().ОткрытьНовуюФорму("Токен", - СерверныеПараметры, Новый Структура, ОбработкаЗавершения, ВладелецФормы); + ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.Токен", + СерверныеПараметры, ВладелецФормы, ОбработкаЗавершения); КонецПроцедуры @@ -465,6 +491,79 @@ КонецФункции +Асинх Функция ПолучитьТокенПоСертификату(Сертификат) Экспорт + + Отпечаток = Base64Строка(Сертификат.Отпечаток); + + Токены = Ждать ЭлектроннаяПодписьКлиентЛокализация.СертификатыНаТокенах(Истина); + Для Каждого Токен Из Токены Цикл + Если Токен.Сертификаты = Неопределено Тогда + Продолжить; + КонецЕсли; + ДанныеСертификата = Токен.Сертификаты.Получить(Отпечаток); + Если ДанныеСертификата <> Неопределено Тогда + Возврат Токен; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +Функция ПараметрыПодписиНаТокене(Токен, Сертификат, ТипПодписи) Экспорт + + Структура = Новый Структура; + Структура.Вставить("Токен", Токен); + Структура.Вставить("Сертификат", Сертификат); + Структура.Вставить("ТипПодписи", ТипПодписи); + Структура.Вставить("Открепленная", Истина); + Структура.Вставить("ОбъектКомпоненты", Неопределено); + Структура.Вставить("ВключатьСертификатВПодпись", Истина); + + Возврат Структура; + +КонецФункции + +Функция ПараметрыПроверкиПодписиНаТокене(АлгоритмПодписи = Неопределено) + + Структура = Новый Структура; + Структура.Вставить("АлгоритмПодписи", АлгоритмПодписи); + Структура.Вставить("ОбъектКомпоненты", Неопределено); + Структура.Вставить("ВернутьСертификатыДляПроверки", Ложь); + + Возврат Структура; + +КонецФункции + +Асинх Функция ПодписьНаТокене(ПараметрыПодписи, Данные) Экспорт + + Возврат Ждать ЭлектроннаяПодписьКлиентЛокализация.ПодписьНаТокене(ПараметрыПодписи, Данные); + +КонецФункции + +Функция ПараметрыШифрованияНаТокене(Токен, Сертификат, АлгоритмШифрования = Неопределено) Экспорт + + Структура = Новый Структура; + Структура.Вставить("Токен", Токен); + Структура.Вставить("Сертификат", Сертификат); + Структура.Вставить("АлгоритмШифрования", АлгоритмШифрования); + Структура.Вставить("ОбъектКомпоненты", Неопределено); + + Возврат Структура; + +КонецФункции + +Функция ПараметрыРасшифровкиНаТокене(Токен, Сертификат) Экспорт + + Структура = Новый Структура; + Структура.Вставить("Токен", Токен); + Структура.Вставить("Сертификат", Сертификат); + Структура.Вставить("ОбъектКомпоненты", Неопределено); + + Возврат Структура; + +КонецФункции + Процедура ПолеПароляНачалоВыбора(Форма, ВнутренниеДанные, СвойстваПароля, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт СтандартнаяОбработка = Ложь; @@ -489,6 +588,10 @@ Функция ИспользуетсяИнтерактивныйРежимКриптографии(МенеджерКриптографии) Экспорт + Если ТипЗнч(МенеджерКриптографии) = Тип("Структура") И Не МенеджерКриптографии.Свойство("ИспользованиеИнтерактивногоРежима") Тогда + Возврат Ложь; + КонецЕсли; + Если МенеджерКриптографии.ИспользованиеИнтерактивногоРежима = ИспользованиеИнтерактивногоРежимаКриптографииИспользовать() Тогда Возврат Истина; КонецЕсли; @@ -589,19 +692,26 @@ КонецФункции -Процедура ПроверитьПутьКПрограмме(ОбработкаЗавершения, ПутьКПрограмме) +Асинх Процедура ПроверитьПутьКПрограмме(ОбработкаЗавершения, ПутьКПрограмме) Контекст = Новый Структура; Контекст.Вставить("ОбработкаЗавершения", ОбработкаЗавершения); Контекст.Вставить("ПутьКПрограмме", ПутьКПрограмме); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( - "ПроверитьПутьКПрограммеПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст)); + Оповещение = Новый ОписаниеОповещения( + "ПроверитьПутьКПрограммеПослеПодключенияРасширения1СПредприятия", ЭтотОбъект, Контекст); + + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(Оповещение); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение); КонецПроцедуры // Продолжение процедуры ПроверитьПутьКПрограмме. -Процедура ПроверитьПутьКПрограммеПослеПодключенияРасширенияРаботыСФайлами(РасширениеПодключено, Контекст) Экспорт +Процедура ПроверитьПутьКПрограммеПослеПодключенияРасширения1СПредприятия(РасширениеПодключено, Контекст) Экспорт Если Не РасширениеПодключено Тогда ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Неопределено); @@ -904,7 +1014,7 @@ Иначе ОписаниеПрограммы.РезультатПроверкиНаКлиенте = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиПоискаПрограммы( - НСтр("ru = 'Не установлена на компьютере.'"), Результат); + НСтр("ru = 'Не установлено на компьютере.'"), Результат); КонецЕсли; НайтиУстановленныеПрограммыЦиклНачало(Контекст); @@ -995,10 +1105,11 @@ Контекст.АдресСертификата = ПоместитьВоВременноеХранилище(Контекст.ДанныеСертификата); ИначеЕсли ТипЗнч(Контекст.ДанныеСертификата) <> Тип("Строка") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при вызове процедуры %1 общего модуля %2: |Некорректное значение параметра %3 ""%4"".'"), "ОткрытьСертификат", "ЭлектроннаяПодписьКлиент", "ДанныеСертификата", Строка(Контекст.ДанныеСертификата)); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); ИначеЕсли ЭтоАдресВременногоХранилища(Контекст.ДанныеСертификата) Тогда Контекст.АдресСертификата = Контекст.ДанныеСертификата; @@ -1077,7 +1188,19 @@ // - ДвоичныеДанные - двоичные данные сертификата. // - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. // -Процедура СохранитьСертификат(Оповещение, Сертификат, ИмяФайлаБезРасширения = "") Экспорт +Асинх Процедура СохранитьСертификат(Оповещение, Сертификат, ИмяФайлаБезРасширения = "", ПовторныйВызов = Ложь) Экспорт + + Если Не ПовторныйВызов Тогда + ПараметрыПовторногоВызова = Новый Структура("Оповещение, Сертификат, ИмяФайлаБезРасширения", + Оповещение, Сертификат, ИмяФайлаБезРасширения); + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения( + "СохранитьСертификатПовторноПослеУстановкиКомпонент", ЭтотОбъект, ПараметрыПовторногоВызова); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; Контекст = КонтекстСохраненияСертификата(); Контекст.Оповещение = Оповещение; @@ -1094,6 +1217,16 @@ КонецПроцедуры +// Повторный вызов процедуры СохранитьСертификат после установки компонент. +Процедура СохранитьСертификатПовторноПослеУстановкиКомпонент(Результат, ПараметрыПовторногоВызова) Экспорт + + Если Результат = Истина Тогда + СохранитьСертификат(ПараметрыПовторногоВызова.Оповещение, ПараметрыПовторногоВызова.Сертификат, + ПараметрыПовторногоВызова.ИмяФайлаБезРасширения , Истина) + КонецЕсли; + +КонецПроцедуры + // Возвращаемое значение: // Структура: // * АдресСертификата - Строка @@ -1187,7 +1320,18 @@ КонецПроцедуры // Сохраняет подпись на компьютер. -Процедура СохранитьПодпись(АдресПодписи, ИмяФайлаПодписи = "") Экспорт +Асинх Процедура СохранитьПодпись(АдресПодписи, ИмяФайлаПодписи = "", ПовторныйВызов = Ложь) Экспорт + + Если Не ПовторныйВызов Тогда + ПараметрыПовторногоВызова = Новый Структура("АдресПодписи, ИмяФайлаПодписи", АдресПодписи, ИмяФайлаПодписи); + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения( + "СохранитьПодписьПовторноПослеУстановкиКомпонент", ЭтотОбъект, ПараметрыПовторногоВызова); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; Оповещение = Новый ОписаниеОповещения("СохранитьПодписьПослеПолученияФайла", ЭтотОбъект, Неопределено); Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -1203,6 +1347,15 @@ КонецПроцедуры +// Повторный вызов процедуры СохранитьПодпись после установки компонент. +Процедура СохранитьПодписьПовторноПослеУстановкиКомпонент(Результат, ПараметрыПовторногоВызова) Экспорт + + Если Результат = Истина Тогда + СохранитьПодпись(ПараметрыПовторногоВызова.АдресПодписи, ПараметрыПовторногоВызова.ИмяФайлаПодписи, Истина); + КонецЕсли; + +КонецПроцедуры + // Продолжение процедуры СохранитьПодпись. // // Параметры: @@ -1250,7 +1403,7 @@ // = Структура - описание ошибки в виде структуры. // // Отпечаток - Строка - Base64 кодированный отпечаток сертификата. -// ТолькоВЛичномХранилище - Булево - если Истина, тогда искать в личном хранилище, иначе везде. +// ТолькоВЛичномХранилище - Булево - если Истина, тогда искать в личном хранилище и на токенах, иначе везде. // - ТипХранилищаСертификатовКриптографии - указанный тип хранилища. // // ПоказатьОшибку - Булево - показать ошибку создания менеджера криптографии. @@ -1271,6 +1424,8 @@ Контекст.Вставить("Отпечаток", Отпечаток); Контекст.Вставить("ТолькоВЛичномХранилище", ТолькоВЛичномХранилище); Контекст.Вставить("ПоказатьОшибку", ПоказатьОшибку); + Контекст.Вставить("Ошибки", Новый Массив); + Контекст.Вставить("Программа", Программа); Если ТипЗнч(Программа) = Тип("МенеджерКриптографии") Тогда ПолучитьСертификатПоОтпечаткуПослеСозданияМенеджераКриптографии(Программа, Контекст); @@ -1292,7 +1447,8 @@ Процедура ПолучитьСертификатПоОтпечаткуПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + Контекст.Ошибки.Добавить(?(ТипЗнч(Результат) = Тип("Строка"), Результат, Результат.ОписаниеОшибки)); + ПолучитьСертификатПоОтпечаткуНаТокенах(Контекст); Возврат; КонецЕсли; Контекст.Вставить("МенеджерКриптографии", Результат); @@ -1308,7 +1464,7 @@ КонецЕсли; ИнформацияОбОшибке = ИнформацияОбОшибке(); ПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, ПредставлениеОшибки, Контекст); + ПолучитьСертификатПоОтпечаткуПослеПоискаМенеджеромКриптографии(Неопределено, ПредставлениеОшибки, Контекст); Возврат; КонецПопытки; @@ -1330,7 +1486,7 @@ СтандартнаяОбработка = Ложь; ПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, ПредставлениеОшибки, Контекст); + ПолучитьСертификатПоОтпечаткуПослеПоискаМенеджеромКриптографии(Неопределено, ПредставлениеОшибки, Контекст); КонецПроцедуры @@ -1355,14 +1511,56 @@ ПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, ПредставлениеОшибки, Контекст); + ПолучитьСертификатПоОтпечаткуПослеПоискаМенеджеромКриптографии(Неопределено, ПредставлениеОшибки, Контекст); КонецПроцедуры // Продолжение процедуры ПолучитьСертификатПоОтпечатку. Процедура ПолучитьСертификатПоОтпечаткуПослеПоиска(Сертификат, Контекст) Экспорт - ПолучитьСертификатПоОтпечаткуЗавершение(Сертификат, "", Контекст); + ПолучитьСертификатПоОтпечаткуПослеПоискаМенеджеромКриптографии(Сертификат, "", Контекст); + +КонецПроцедуры + +// Продолжение процедуры ПолучитьСертификатПоОтпечатку. +Процедура ПолучитьСертификатПоОтпечаткуПослеПоискаМенеджеромКриптографии(Сертификат, ПредставлениеОшибки, Контекст) + + Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Сертификат); + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + Контекст.Ошибки.Добавить(ПредставлениеОшибки); + КонецЕсли; + + Если Контекст.Свойство("Программа") И Контекст.Программа <> Неопределено Тогда + ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, СтрСоединить(Контекст.Ошибки, Символы.ПС), Контекст); + Возврат; + КонецЕсли; + + ПолучитьСертификатПоОтпечаткуНаТокенах(Контекст); + +КонецПроцедуры + +// Продолжение процедуры ПолучитьСертификатПоОтпечатку. +Асинх Процедура ПолучитьСертификатПоОтпечаткуНаТокенах(Контекст) + + Токены = Ждать ЭлектроннаяПодписьКлиентЛокализация.СертификатыНаТокенах(Истина); + Для Каждого Токен Из Токены Цикл + Если Токен.Сертификаты = Неопределено Тогда + Продолжить; + КонецЕсли; + ДанныеСертификата = Токен.Сертификаты.Получить(Контекст.Отпечаток); + Если ДанныеСертификата <> Неопределено Тогда + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(ДанныеСертификата); + ПолучитьСертификатПоОтпечаткуЗавершение(СертификатКриптографии, "", Контекст); + Возврат; + КонецЕсли; + КонецЦикла; + + ПолучитьСертификатПоОтпечаткуЗавершение(Неопределено, СтрСоединить(Контекст.Ошибки, Символы.ПС), Контекст); КонецПроцедуры @@ -1639,7 +1837,7 @@ ИначеЕсли ПроверятьСертификатыОблачнойПодписью() Тогда ПроверитьПодписьОблачнаяПодпись(Контекст); Иначе - ПроверитьПодписьДобавитьСвойстваПодписиВРезультат(Контекст.Подпись, Неопределено, Контекст); + ПроверитьПодписьСредствамиТокена(Контекст); КонецЕсли; Возврат; @@ -1701,6 +1899,47 @@ КонецПроцедуры +Асинх Процедура ПроверитьПодписьСредствамиТокена(Контекст) Экспорт + + ПараметрыПроверки = ПараметрыПроверкиПодписиНаТокене(Контекст.АлгоритмПодписи); + + РезультатМатематическойПроверки = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПроверитьПодпись( + Контекст.ИсходныеДанные, Контекст.Подпись, ПараметрыПроверки); + + Если РезультатМатематическойПроверки = Неопределено Тогда + ПроверитьПодписьДобавитьСвойстваПодписиВРезультат(Контекст.Подпись, Неопределено, Контекст); + Иначе + + Если РезультатМатематическойПроверки = Ложь Тогда + НеверныйХеш = Истина; + ТребуетсяПроверка = Ложь; + Результат = НСтр("ru = 'Неверный хеш.'"); + ИначеЕсли РезультатМатематическойПроверки = Истина Тогда + Если Контекст.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда + ТребуетсяПроверка = Ложь; + Результат = Истина; + Иначе + ТребуетсяПроверка = Истина; + НеверныйХеш = Ложь; + Результат = НСтр("ru = 'Проверка сертификата средствами токена будет доступна в следующих версиях приложения.'"); + КонецЕсли; + Иначе + ТребуетсяПроверка = Истина; + Результат = РезультатМатематическойПроверки; + КонецЕсли; + + Если ТипЗнч(Контекст.РезультатПроверки) = Тип("Структура") Тогда + СвойстваПодписи = Ждать СвойстваПодписиИзДвоичныхДанных(Контекст.Подпись, Истина); + ЗаполнитьЗначенияСвойств(Контекст.РезультатПроверки, СвойстваПодписи); + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, + РезультатПроверкиПодписи(Результат, Контекст.РезультатПроверки, ТребуетсяПроверка, НеверныйХеш)); + + КонецЕсли; + +КонецПроцедуры + Асинх Процедура ПроверитьПодписьДобавитьСвойстваПодписиВРезультат(Подпись, Результат, Контекст, ОшибкаМатематическойПроверки = Неопределено) ТребуетсяПроверка = Неопределено; @@ -1718,8 +1957,7 @@ КонецЕсли; КонецЕсли; - Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись И ТипЗнч( - Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии") Тогда + Если ТипЗнч(Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии") Тогда СвойстваПодписи = Ждать СвойстваПодписиЧтениеМенеджеромКриптографии(Подпись, Контекст.МенеджерКриптографии, Истина); Иначе СвойстваПодписи = Ждать СвойстваПодписиИзДвоичныхДанных(Подпись, Истина); @@ -1860,25 +2098,18 @@ Если ТипЗнч(Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии") Тогда СвойстваСертификата = Неопределено; - Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда - СвойстваПодписи = Ждать СвойстваПодписиЧтениеМенеджеромКриптографии(Контекст.ДанныеПодписи, Контекст.МенеджерКриптографии, Ложь); - - Если СвойстваПодписи.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") - И СвойстваПодписи.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда - // Проверка дополнительных атрибутов. - Попытка - Ждать Контекст.МенеджерКриптографии.ПроверитьПодписьАсинх( - Контекст.ИсходныеДанные, Контекст.ДанныеПодписи, Истина); - Исключение - ОшибкаПроверкиПодписи = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; - - Иначе - СвойстваПодписи = Ждать СвойстваПодписиИзДвоичныхДанных(Контекст.ДанныеПодписи, Ложь); - СвойстваСертификата = Ждать СвойстваСертификата(Сертификат); - СвойстваПодписи.Отпечаток = СвойстваСертификата.Отпечаток; - СвойстваПодписи.КомуВыданСертификат = СвойстваСертификата.КомуВыдан; + + СвойстваПодписи = Ждать СвойстваПодписиЧтениеМенеджеромКриптографии(Контекст.ДанныеПодписи, Контекст.МенеджерКриптографии, Ложь); + + Если СвойстваПодписи.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") + И СвойстваПодписи.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда + // Проверка дополнительных атрибутов. + Попытка + Ждать Контекст.МенеджерКриптографии.ПроверитьПодписьАсинх( + Контекст.ИсходныеДанные, Контекст.ДанныеПодписи, Истина); + Исключение + ОшибкаПроверкиПодписи = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; КонецЕсли; Если ТипЗнч(Контекст.РезультатПроверки) = Тип("Структура") Тогда @@ -1888,7 +2119,7 @@ Если Не ПустаяСтрока(ОшибкаПроверкиПодписи) Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, РезультатПроверкиПодписи( - ОшибкаПроверкиПодписи, Контекст.РезультатПроверки)); + ОшибкаПроверкиПодписи, Контекст.РезультатПроверки,, Ложь)); Возврат; КонецЕсли; @@ -1898,7 +2129,7 @@ Если СвойстваПодписи.Сертификат = Неопределено Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, РезультатПроверкиПодписи( - НСтр("ru = 'Сертификат не существует в данных подписи.'"), Контекст.РезультатПроверки)); + НСтр("ru = 'Сертификат не существует в данных подписи.'"), Контекст.РезультатПроверки,, Ложь)); Возврат; КонецЕсли; @@ -1932,6 +2163,9 @@ Если СвойстваПодписи.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда ДополнительныеПараметры.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов = Истина; КонецЕсли; + Если ЗначениеЗаполнено(СвойстваПодписи.ДатаПодписиИзМетки) Тогда + ДополнительныеПараметры.УказанаДатаМеткиВремени = Истина; + КонецЕсли; Оповещение = Новый ОписаниеОповещения("ПроверитьПодписьПослеПроверкиСертификатаПодписи", ЭтотОбъект, Контекст); ПроверитьСертификат(Оповещение, Контекст.Сертификат, Контекст.МенеджерКриптографии, ДатаПодписания, @@ -1968,7 +2202,7 @@ КонецЕсли; ВыполнитьОбработкуОповещения(Контекст.Оповещение, - РезультатПроверкиПодписи(Результат, Контекст.РезультатПроверки)); + РезультатПроверкиПодписи(Результат, Контекст.РезультатПроверки,,Ложь)); КонецПроцедуры @@ -2000,7 +2234,7 @@ // - МенеджерКриптографии - использовать указанный менеджер криптографии // (проверка на сервере не будет выполнена). // -// НаДату - Дата - проверить сертификат на указанную дату. +// НаДату - Дата - проверить срок действия сертификата на указанную дату. // Если параметр не указан или указана пустая дата, тогда проверять на текущую. // // ДополнительныеПараметры - см. ДополнительныеПараметрыПроверкиСертификата. @@ -2036,9 +2270,10 @@ Контекст.ПоказатьОшибку = ДополнительныеПараметрыПроверкиСертификата.ПоказатьОшибку; Контекст.ОбъединитьОшибкиДанныхСертификата = ДополнительныеПараметрыПроверкиСертификата.ОбъединитьОшибкиДанныхСертификата; Контекст.ПроверитьВСервисеПослеОшибки = ДополнительныеПараметрыПроверкиСертификата.ПроверитьВСервисеПослеОшибки; - Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра = ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра; + Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра = ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра; Контекст.ДляПроверкиПодписи = ДополнительныеПараметрыПроверкиСертификата.ДляПроверкиПодписи; Контекст.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов = ДополнительныеПараметрыПроверкиСертификата.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов; + Контекст.УказанаДатаМеткиВремени = ДополнительныеПараметрыПроверкиСертификата.УказанаДатаМеткиВремени; КонецЕсли; @@ -2072,7 +2307,8 @@ // * ТребуетПроверкиНаСервере - Неопределено, Булево // * СертификатОтозван - Булево // * ПоказатьОшибку - см. ПроверитьСертификат.ПоказатьОшибку -// * НаДату - см. ПроверитьСертификат.НаДату +// * НаДату - см. ПроверитьСертификат.НаДату +// * УказанаДатаМеткиВремени - Булево // * МенеджерКриптографии - см. ПроверитьСертификат.МенеджерКриптографии // * Сертификат - см. ПроверитьСертификат.Сертификат // * Оповещение - см. ПроверитьСертификат.Оповещение @@ -2089,6 +2325,7 @@ Контекст.Вставить("СертификатОтозван", Ложь); Контекст.Вставить("МенеджерКриптографии"); Контекст.Вставить("НаДату"); + Контекст.Вставить("УказанаДатаМеткиВремени", Ложь); Контекст.Вставить("ОписаниеОшибкиНаКлиенте"); Контекст.Вставить("ТребуетПроверкиНаКлиенте"); Контекст.Вставить("ДополнительныеДанныеПроверкиНаКлиенте"); @@ -2120,6 +2357,7 @@ // // * ДляПроверкиПодписи - Булево - не показывать оповещения для сертификатов, возвращать результат, // как указано в вызывающей процедуре проверки подписи. +// * УказанаДатаМеткиВремени - см. ЭлектроннаяПодписьКлиент.ПараметрыПроверкиСертификата.УказанаДатаМеткиВремени // Функция ДополнительныеПараметрыПроверкиСертификата() Экспорт @@ -2128,6 +2366,7 @@ Структура.Вставить("ОбъединитьОшибкиДанныхСертификата", Истина); Структура.Вставить("ПроверитьВСервисеПослеОшибки", Истина); Структура.Вставить("ДляПроверкиПодписи", Ложь); + Структура.Вставить("УказанаДатаМеткиВремени", Ложь); Структура.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); Структура.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь); @@ -2149,6 +2388,7 @@ ДополнительныеПараметры.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Контекст.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов); ДополнительныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра); ДополнительныеПараметры.Вставить("ДляПроверкиПодписи", Контекст.ДляПроверкиПодписи); + ДополнительныеПараметры.Вставить("УказанаДатаМеткиВремени", Контекст.УказанаДатаМеткиВремени); ДополнительныеПараметры.Вставить("Предупреждение"); ДополнительныеПараметры.Вставить("Сертификат", АдресСертификата); @@ -2294,10 +2534,18 @@ Контекст.МенеджерКриптографии = Результат; - Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(Новый ОписаниеОповещения( - "ПроверитьСертификатНаКлиентеПослеПроверки", ЭтотОбъект, Контекст, - "ПроверитьСертификатНаКлиентеПослеОшибкиПроверки", ЭтотОбъект), - Контекст.СертификатКриптографии, Контекст.РежимыПроверкиСертификата); + ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьСертификатНаКлиентеПослеПроверки", ЭтотОбъект, Контекст, + "ПроверитьСертификатНаКлиентеПослеОшибкиПроверки", ЭтотОбъект); + + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() + И Контекст.УказанаДатаМеткиВремени Тогда + //@skip-check bsl-legacy-check-dynamic-feature-access + Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(ОписаниеОповещения, Контекст.СертификатКриптографии, + Контекст.РежимыПроверкиСертификата, Контекст.НаДату - РазницаСУниверсальнымВременем()); + Иначе + Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(ОписаниеОповещения, Контекст.СертификатКриптографии, + Контекст.РежимыПроверкиСертификата); + КонецЕсли; КонецПроцедуры @@ -2325,16 +2573,25 @@ Контекст.ДействияДляУстраненияОшибок.Вставить(Действие, ОписаниеОшибки); Контекст.ДействияДляУстраненияОшибок.Вставить("ДействиеПриПовторнойПроверке", Действие); - Если Действие = "УстановитьСписокОтзываСертификата" Тогда + Если Действие = "УстановитьСписокОтзываСертификата" + И ЭлектроннаяПодписьКлиент.ОбщиеНастройки().РазрешенДоступКИнтернетСервисам Тогда + ИмяИздателя = НРег(ЭлектроннаяПодписьКлиент.СвойстваИздателяСертификата(Контекст.СертификатКриптографии).ОбщееИмя); Если ЗначениеЗаполнено(ИмяИздателя) Тогда ИмяИздателя = СтроковыеФункцииКлиент.СтрокаЛатиницей(ИмяИздателя); - АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( - ИмяИздателя, Контекст.ДанныеСертификата, - ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.КаталогиСписковОтзываУЦ()); - + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + СвойстваСертификата = ЭлектроннаяПодписьКлиент.СвойстваСертификата(Контекст.СертификатКриптографии); + АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( + ИмяИздателя, СвойстваСертификата, + ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.КаталогиСписковОтзываУЦ()); + Иначе + АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( + ИмяИздателя, Контекст.ДанныеСертификата, + ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.КаталогиСписковОтзываУЦ()); + КонецЕсли; + ПараметрыУстановкиСпискаОтзыва = ПараметрыУстановкиСпискаОтзыва( Контекст.СертификатКриптографии); ПараметрыУстановкиСпискаОтзыва.ОповещениеОЗавершении = Новый ОписаниеОповещения("ПроверитьСертификатПовторно", @@ -2407,10 +2664,16 @@ КонецЕсли; - Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(Новый ОписаниеОповещения( - "ПроверитьСертификатНаКлиентеПослеПроверки", ЭтотОбъект, Контекст, - "ПроверитьСертификатНаКлиентеПослеОшибкиПроверки", ЭтотОбъект), - Контекст.СертификатКриптографии, Контекст.РежимыПроверкиСертификата); + ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьСертификатНаКлиентеПослеПроверки", ЭтотОбъект, Контекст, + "ПроверитьСертификатНаКлиентеПослеОшибкиПроверки", ЭтотОбъект); + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() + И Контекст.УказанаДатаМеткиВремени Тогда + Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(ОписаниеОповещения, Контекст.СертификатКриптографии, + Контекст.РежимыПроверкиСертификата, Контекст.НаДату - РазницаСУниверсальнымВременем()); + Иначе + Контекст.МенеджерКриптографии.НачатьПроверкуСертификата(ОписаниеОповещения, Контекст.СертификатКриптографии, + Контекст.РежимыПроверкиСертификата); + КонецЕсли; КонецПроцедуры @@ -2503,73 +2766,9 @@ Асинх Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатКриптографии, НаДату = Неопределено, ПараметрыПроверки = Неопределено, СвойстваСертификата = Неопределено) Экспорт Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию(); + Результат = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПриЗаполненииРезультатаПроверкиУдостоверяющегоЦентра( + Результат, СертификатКриптографии, НаДату, ПараметрыПроверки, СвойстваСертификата); - // Локализация - - Если Не ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаПроверкаПоСпискуУЦ Тогда - Возврат Результат; - КонецЕсли; - - Если ПараметрыПроверки = Неопределено Или ПараметрыПроверки = Ложь Или ПараметрыПроверки = Истина Тогда - НовыеПараметрыПроверки = Новый Структура; - НовыеПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", ?(ПараметрыПроверки = Неопределено, Ложь, ПараметрыПроверки)); - НовыеПараметрыПроверки.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); - ПараметрыПроверки = НовыеПараметрыПроверки; - КонецЕсли; - - Если ПараметрыПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда - Возврат Результат; - КонецЕсли; - - МодульЭлектроннаяПодписьКлиентСерверЛокализация = ОбщегоНазначенияКлиент.ОбщийМодуль( - "ЭлектроннаяПодписьКлиентСерверЛокализация"); - - ДанныеДляПроверкиУдостоверяющегоЦентра = МодульЭлектроннаяПодписьКлиентСерверЛокализация.ДанныеДляПроверкиУдостоверяющегоЦентра( - СертификатКриптографии); - - Если ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска = Неопределено Тогда - ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); - Возврат Результат; - КонецЕсли; - - ДанныеУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.ДанныеУдостоверяющегоЦентра( - ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска); - - Если ДанныеУдостоверяющегоЦентра = Неопределено Тогда - ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); - Возврат Результат; - КонецЕсли; - - КонтекстПроверки = МодульЭлектроннаяПодписьКлиентСерверЛокализация.КонтекстПроверкиУдостоверяющегоЦентраСертификата(); - КонтекстПроверки.ДанныеУдостоверяющегоЦентра = ДанныеУдостоверяющегоЦентра; - КонтекстПроверки.НаименованиеУдостоверяющегоЦентра = ДанныеДляПроверкиУдостоверяющегоЦентра.НаименованиеУдостоверяющегоЦентра; - КонтекстПроверки.ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска; - КонтекстПроверки.НаДату = ?(НаДату = Неопределено, ОбщегоНазначенияКлиент.ДатаСеанса(), НаДату); - КонтекстПроверки.РазницаСУниверсальнымВременем = РазницаСУниверсальнымВременем(); - КонтекстПроверки.ЭтоПроверкаПодписи = ПараметрыПроверки.ЭтоПроверкаПодписи; - КонтекстПроверки.ПроверятьСертификат = ПараметрыПроверки.ПроверятьСертификат; - - Если СвойстваСертификата = Неопределено Тогда - КонтекстПроверки.СвойстваСертификата = Ждать СвойстваСертификата(СертификатКриптографии); - Иначе - КонтекстПроверки.СвойстваСертификата = СвойстваСертификата; - КонецЕсли; - - Результат = МодульЭлектроннаяПодписьКлиентСерверЛокализация.РезультатПроверкиУдостоверяющегоЦентраСертификата( - СертификатКриптографии, КонтекстПроверки); - - Если ЗначениеЗаполнено(Результат.Предупреждение.Причина) Тогда - Результат.Предупреждение.Причина = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - Результат.Предупреждение.Причина); - КонецЕсли; - - Если ЗначениеЗаполнено(Результат.Предупреждение.Решение) Тогда - Результат.Предупреждение.Решение = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - Результат.Предупреждение.Решение); - КонецЕсли; - - // Конец Локализация - Возврат Результат; КонецФункции @@ -2817,8 +3016,8 @@ ТекстОбщейОшибки = ""; Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() - И Не ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() - И Не ОбщегоНазначенияКлиент.ЭтоMacOSКлиент() Тогда + И Не ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() + И Не ОбщегоНазначенияКлиент.ЭтоMacOSКлиент() Тогда ТекстОбщейОшибки = ТекстОшибкиУстройствоНеПоддерживается(); @@ -2949,9 +3148,11 @@ ЗаголовокОшибки = ""; ИначеЕсли Операция <> "" Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в функции %1. - |Неверное значение параметра Операция ""%2"".'"), "МенеджерКриптографии", Операция); + |Неверное значение параметра Операция ""%2"".'"), + "МенеджерКриптографии", Операция); + ВызватьИсключение(ТекстСообщения, КатегорияОшибки.ОшибкаКонфигурации); Иначе ЗаголовокОшибки = НСтр("ru = 'Не удалось выполнить операцию по причине:'"); КонецЕсли; @@ -3256,6 +3457,8 @@ Если Результат.Подключено Тогда ОбъектКомпоненты = Результат.ПодключаемыйМодуль; ОбъектКомпоненты = Ждать НастроитьКомпоненту(ОбъектКомпоненты); + ЗаполнитьПутьКЛогуКомпоненты(ОбъектКомпоненты, ОписаниеКомпоненты.ИмяОбъекта); + ИначеЕсли ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда ВызватьИсключение Результат.ОписаниеОшибки; Иначе @@ -3284,6 +3487,16 @@ КонецФункции +Асинх Процедура ЗаполнитьПутьКЛогуКомпоненты(ОбъектКомпоненты, ИмяФайла) + ПутьККаталогуДиагностики = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().ПутьККаталогуДиагностики; + СистемнаяИнформация = Новый СистемнаяИнформация(); + ПутьКЛогуКомпонентыНаКлиенте = ПутьККаталогуДиагностики.Получить(СистемнаяИнформация.ИдентификаторКлиента); + Если ЗначениеЗаполнено(ПутьКЛогуКомпонентыНаКлиенте) Тогда + Ждать ОбъектКомпоненты.УстановитьЛогАсинх(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + ПутьКЛогуКомпонентыНаКлиенте) + ИмяФайла + ".log"); + КонецЕсли; +КонецПроцедуры + Асинх Функция ПрограммаПоСертификату(Сертификат, ТребуетсяЗакрытыйКлюч = Неопределено, ОбъектКомпоненты = Неопределено, ПредложитьУстановить = Ложь) Экспорт @@ -3322,7 +3535,7 @@ Если РасширенноеОписаниеПрограммы <> Неопределено Тогда Результат.Программа = РасширенноеОписаниеПрограммы; Возврат Результат; - ИначеЕсли ТребуетсяЗакрытыйКлюч = Истина И ТекущийКриптопровайдер.Получить("type") <> 0 Тогда + ИначеЕсли ТребуетсяЗакрытыйКлюч = Истина И ЗначениеЗаполнено(ТекущийКриптопровайдер) И ТекущийКриптопровайдер.Получить("type") <> 0 Тогда Результат.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сертификат связан с приложением %1 с типом %2, настройте его в справочнике для дальнейшего использования.'"), ТекущийКриптопровайдер.Получить("name"), @@ -3478,9 +3691,10 @@ // - Строка - строковое представление сертификата в формате Base64 // - СертификатКриптографии // ОбъектКомпоненты - ОбъектВнешнейКомпоненты - экземпляр объекта внешней компоненты -// +// // Возвращаемое значение: // Обещание - Массив из см. НовыеСвойстваКонтейнера +// - Неопределено - в случае возникновения известной ошибки. // Асинх Функция КонтейнерыПоСертификату(Сертификат, ОбъектКомпоненты = Неопределено) Экспорт @@ -3494,7 +3708,17 @@ СвойстваСертификатаРезультат = Ждать ПолучитьСвойстваСертификатаАсинх(Сертификат, ОбъектКомпоненты); Если Не ПустаяСтрока(СвойстваСертификатаРезультат.Ошибка) Тогда - ВызватьИсключение СвойстваСертификатаРезультат.Ошибка; + ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебныйВызовСервера.ОшибкаПоКлассификатору(СвойстваСертификатаРезультат.Ошибка); + Если ОшибкаПоКлассификатору = Неопределено Тогда + ВызватьИсключение СвойстваСертификатаРезультат.Ошибка; + Иначе + ПараметрыОшибки = Новый Структура; + ПараметрыОшибки.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Не удалось получить контейнеры по сертификату'")); + ПараметрыОшибки.Вставить("ТекстОшибкиКлиент", СвойстваСертификатаРезультат.Ошибка); + ПараметрыОшибки.Вставить("ПоказатьТребуетсяПомощь", Истина); + ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки); + Возврат Неопределено; + КонецЕсли; КонецЕсли; СвойстваСертификата = СвойстваСертификатаРезультат.СвойстваСертификата; @@ -3700,6 +3924,16 @@ Возврат; КонецЕсли; + Если Назначение = "ДляПодписанияШифрованияИРасшифровкиИзФайлов" Тогда + ПараметрыФормы.Вставить("ОбработчикЗавершения", ПараметрыСоздания.ОбработчикЗавершения); + ПараметрыФормы.Вставить("ДобавлениеВСписок", Истина); + ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", ПараметрыСоздания.ВЛичныйСписок); + ПараметрыФормы.Вставить("Организация", ПараметрыСоздания.Организация); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Ложь); + ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайла(ПараметрыСоздания); + Возврат; + КонецЕсли; + Если Назначение <> "ТолькоДляШифрования" Тогда ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Неопределено); @@ -3713,6 +3947,7 @@ ПараметрыФормы.Вставить("ДобавлениеВСписок", Истина); ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", ПараметрыСоздания.ВЛичныйСписок); ПараметрыФормы.Вставить("Организация", ПараметрыСоздания.Организация); + ПараметрыФормы.Вставить("ОтображатьКомандыДобавления", Ложь); ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, , ПараметрыСоздания.ОбработчикЗавершения); Возврат; КонецЕсли; @@ -3761,6 +3996,7 @@ Контекст.Вставить("БезОтбора", БезОтбора); Контекст.Вставить("ТолькоОтпечатки", ТолькоОтпечатки); Контекст.Вставить("Результат", Результат); + Контекст.Вставить("МассивСертификатов", Новый Массив); ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии(); ПараметрыСоздания.ПоказатьОшибку = ПоказатьОшибку; @@ -3776,7 +4012,7 @@ Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда Контекст.Результат.ОшибкаПолученияСертификатовНаКлиенте = МенеджерКриптографии; - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); + ПолучитьСвойстваСертификатовНаКлиентеПослеПолученияВсех(Контекст); Возврат; КонецЕсли; @@ -3839,9 +4075,16 @@ КонецПроцедуры // Продолжение процедуры ПолучитьСвойстваСертификатовНаКлиенте. -Процедура ПолучитьСвойстваСертификатовНаКлиентеПослеПолученияВсех(Контекст) +Асинх Процедура ПолучитьСвойстваСертификатовНаКлиентеПослеПолученияВсех(Контекст) - ПараметрыДобавленияСвойств = Новый Структура("ТолькоОтпечатки", Контекст.ТолькоОтпечатки); + Контекст = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПолучитьСвойстваСертификатовНаТокенах(Контекст, Ложь); + + Если Контекст.МассивСертификатов.Количество() = 0 Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат); + Возврат; + КонецЕсли; + + ПараметрыДобавленияСвойств = Новый Структура("ТолькоОтпечатки", Контекст.ТолькоОтпечатки); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьСвойстваСертификатов( Контекст.Результат.СвойстваСертификатовНаКлиенте, Контекст.МассивСертификатов, @@ -3854,7 +4097,121 @@ КонецПроцедуры // Только для внутреннего назначения. -Процедура ДобавитьСертификатТолькоДляШифрованияИзФайла(ПараметрыСоздания, МножественныйВыбор = Ложь) Экспорт +Асинх Процедура ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайла(ПараметрыСоздания, ПовторныйВызов = Ложь) + + Если Не ПовторныйВызов Тогда + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения( + "ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайлаПовторноПослеУстановкиКомпонент", ЭтотОбъект, ПараметрыСоздания); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайлаПослеПомещенияФайлов", + ЭтотОбъект, ПараметрыСоздания); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл сертификата (только для шифрования)'"); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Сертификат X.509 (*.cer;*.crt)|*.cer;*.crt'")+ "|" + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы()); + + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); + +КонецПроцедуры + +// Повторный вызов процедуры ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайла после установки компонент. +Процедура ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайлаПовторноПослеУстановкиКомпонент(Результат, ПараметрыСоздания) Экспорт + + Если Результат = Истина Тогда + ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайла(ПараметрыСоздания, Истина); + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайла. +Процедура ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайлаПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(ПомещенныеФайлы) Тогда + Возврат; + КонецЕсли; + + АдресСертификата = ПомещенныеФайлы.Хранение; + + ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата); + ЭтоСертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ФайлЯвляетсяСертификатом(ДанныеСертификата); + Если Не ЭтоСертификат Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Файл сертификата должен быть в формате DER X.509.'")); + Возврат; + КонецЕсли; + + ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайлаПослеПомещенияФайла(АдресСертификата, Контекст); + +КонецПроцедуры + +// Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла. +Асинх Процедура ДобавитьСертификатДляПодписанияИлиРасшифровкиИзФайлаПослеПомещенияФайла(Адрес, Контекст) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("АдресДанныхСертификата", Адрес); + ПараметрыФормы.Вставить("ЛичныйСписокПриДобавлении", Контекст.ВЛичныйСписок); + ПараметрыФормы.Вставить("Организация", Контекст.Организация); + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("АдресСертификата", Адрес); + + ОбработчикЗавершения = ?(Контекст.Свойство("ОбработчикЗавершения"), Контекст.ОбработчикЗавершения, Неопределено); + + ПараметрыУстановкиСертификата = ПараметрыУстановкиСертификата(Адрес); + ПараметрыУстановкиСертификата.ОповещениеОЗавершении = ?(ОбработчикЗавершения = Неопределено, + Новый ОписаниеОповещения("ПослеДобавленияСертификатаИзФайлов", ЭтотОбъект, ПараметрыОповещения), + Контекст.ОбработчикЗавершения); + + Контейнеры = Ждать КонтейнерыПоСертификату(Адрес); + + Если Контейнеры = Неопределено Тогда + Возврат; + ИначеЕсли Контейнеры.Количество() = 0 Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Не удалось установить сертификат.'")); + ПараметрыФормы.Вставить("ТекстОшибкиКлиент", НСтр("ru = 'Не найден контейнер ключа электронной подписи.'")); + ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, , ПараметрыУстановкиСертификата.ОповещениеОЗавершении); + Иначе + ПараметрыУстановкиСертификата.Хранилище = Новый Структура("Значение, Представление", "MY", НСтр("ru = 'Личное хранилище сертификатов'")); + ПараметрыУстановкиСертификата.СвойстваКонтейнера = Контейнеры[0]; + УстановитьСертификатПослеВыбораВариантаУстановки(ПараметрыУстановкиСертификата); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПослеДобавленияСертификатаИзФайлов(Результат, Параметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("АдресСертификата", Результат.Сертификат); + ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + +// Только для внутреннего назначения. +Асинх Процедура ДобавитьСертификатТолькоДляШифрованияИзФайла(ПараметрыСоздания, МножественныйВыбор = Ложь, ПовторныйВызов = Ложь) Экспорт + + Если Не ПовторныйВызов Тогда + ПараметрыПовторногоВызова = Новый Структура("ПараметрыСоздания, МножественныйВыбор", + ПараметрыСоздания, МножественныйВыбор); + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения( + "ДобавитьСертификатТолькоДляШифрованияИзФайлаПовторноПослеУстановкиКомпонент", ЭтотОбъект, ПараметрыПовторногоВызова); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; Оповещение = Новый ОписаниеОповещения("ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайлов", ЭтотОбъект, ПараметрыСоздания); @@ -3873,6 +4230,16 @@ КонецПроцедуры +// Повторный вызов процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла после установки компонент. +Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПовторноПослеУстановкиКомпонент(Результат, ПараметрыПовторногоВызова) Экспорт + + Если Результат = Истина Тогда + ДобавитьСертификатТолькоДляШифрованияИзФайла( + ПараметрыПовторногоВызова.ПараметрыСоздания, ПараметрыПовторногоВызова.МножественныйВыбор, Истина); + КонецЕсли; + +КонецПроцедуры + // Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзФайла. Процедура ДобавитьСертификатТолькоДляШифрованияИзФайлаПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт @@ -3956,14 +4323,19 @@ КонецПроцедуры // Только для внутреннего назначения. -Процедура ДобавитьСертификатТолькоДляШифрованияИзКаталога(ПараметрыСоздания) +Асинх Процедура ДобавитьСертификатТолькоДляШифрованияИзКаталога(ПараметрыСоздания) Оповещение = Новый ОписаниеОповещения("ДобавитьСертификатТолькоДляШифрованияИзКаталогаПослеПодключенияРасширения", ЭтотОбъект, ПараметрыСоздания); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(Оповещение); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + ТекстПредложения = НСтр("ru = 'Для загрузки сертификатов из каталога требуется установить расширение для работы с 1С:Предприятием.'"); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); - + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения, Ложь); + КонецПроцедуры // Продолжение процедуры ДобавитьСертификатТолькоДляШифрованияИзКаталога. @@ -4015,10 +4387,28 @@ КонецПроцедуры // Продолжение процедуры ПоказатьОшибкуОбращенияКПрограмме. -Процедура ПоказатьОшибкуОбращенияКПрограммеПослеПодключенияРасширения(Подключено, Контекст) Экспорт +Асинх Процедура ПоказатьОшибкуОбращенияКПрограммеПослеПодключенияРасширения(Подключено, Контекст) Экспорт Контекст.ПараметрыФормы.Вставить("РасширениеПодключено", Подключено); +#Если ВебКлиент Тогда + Если Не Подключено Тогда + Компоненты = НовыйКомпонентыРаботыСКриптографией(); + Компоненты.РасширениеРаботыСКриптографиейУстановлено = Ложь; + + ТребуетсяУстановкаДополнительныхКомпонент = Ждать ТребуетсяУстановкаДополнительныхКомпонент(Компоненты); + + Если ТребуетсяУстановкаДополнительныхКомпонент Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Компоненты", Компоненты); + ПараметрыФормы.Вставить("ИмяТребуемойКомпоненты", "РасширениеРаботыСКриптографией"); + ОткрытьФорму("ОбщаяФорма.НачалоРаботыСЭлектроннойПодписью", ПараметрыФормы, + , , , , Контекст.ОбработкаПродолжения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; + КонецЕсли; +#КонецЕсли + ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.ОшибкаОбращенияКПрограмме", Контекст.ПараметрыФормы,,,, , Контекст.ОбработкаПродолжения); @@ -4450,7 +4840,7 @@ КонецПроцедуры // Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью. -Процедура СохранитьДанныеВместеСПодписьюПослеСохраненияФайлаДанных(Результат, Контекст) Экспорт +Асинх Процедура СохранитьДанныеВместеСПодписьюПослеСохраненияФайлаДанных(Результат, Контекст) Экспорт Если Результат.Свойство("ОписаниеОшибки") Тогда Ошибка = Новый Структура("ОписаниеОшибки", @@ -4478,8 +4868,15 @@ Контекст.Вставить("СоставИмениФайлаДанных", ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайла)); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( - "СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст)); + Оповещение = Новый ОписаниеОповещения( + "СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст); + + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(Оповещение); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение); КонецПроцедуры @@ -4914,7 +5311,7 @@ КонецПроцедуры // Продолжение процедуры УстановитьРасширение. -Процедура УстановитьРасширениеПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт +Асинх Процедура УстановитьРасширениеПослеПодключенияРасширенияРаботыСКриптографией(Подключено, Контекст) Экспорт Если Подключено Тогда Если Контекст.Оповещение <> Неопределено Тогда @@ -4930,6 +5327,22 @@ Возврат; КонецЕсли; +#Если ВебКлиент Тогда + Компоненты = НовыйКомпонентыРаботыСКриптографией(); + Компоненты.РасширениеРаботыСКриптографиейУстановлено = Ложь; + + ТребуетсяУстановкаДополнительныхКомпонент = Ждать ТребуетсяУстановкаДополнительныхКомпонент(Компоненты); + + Если ТребуетсяУстановкаДополнительныхКомпонент Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Компоненты", Компоненты); + ПараметрыФормы.Вставить("ИмяТребуемойКомпоненты", "РасширениеРаботыСКриптографией"); + ОткрытьФорму("ОбщаяФорма.НачалоРаботыСЭлектроннойПодписью", ПараметрыФормы, + , , , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; +#КонецЕсли + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ЗаголовокВопроса", Контекст.ЗаголовокВопроса); ПараметрыФормы.Вставить("ТекстВопроса", Контекст.ТекстВопроса); @@ -4942,7 +5355,7 @@ // Продолжение процедуры УстановитьРасширение. Процедура УстановитьРасширениеПослеОтвета(Ответ, Контекст) Экспорт - Если Ответ = КодВозвратаДиалога.Да Тогда + Если Ответ = Истина Тогда НачатьУстановкуРасширенияРаботыСКриптографией(Новый ОписаниеОповещения( "УстановитьРасширениеПослеУстановкиРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст)); Иначе @@ -4974,8 +5387,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры и функции управляемых форм. +#Область ОбщиеПроцедурыИФункцииУправляемыхФорм // Только для внутреннего использования. Процедура ПродолжитьОткрытиеНачало(Оповещение, Форма, КлиентскиеПараметры, Шифрование = Ложь, Расшифровка = Ложь) Экспорт @@ -4992,6 +5404,7 @@ Контекст = Новый Структура; Контекст.Вставить("Оповещение", Оповещение); Контекст.Вставить("ОшибкаНаСервере", Новый Структура); + Контекст.Вставить("Операция", ?(Расшифровка, "Расшифровка", "Подписание")); Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда Если Не ЗначениеЗаполнено(Форма.МенеджерКриптографииНаСервереОписаниеОшибки) Тогда @@ -5011,20 +5424,28 @@ КонецПроцедуры // Продолжение процедуры ПродолжитьОткрытиеНачало. -Процедура ПродолжитьОткрытиеНачалоПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт +Асинх Процедура ПродолжитьОткрытиеНачалоПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт - Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") - И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса() - И Не ИспользоватьСервисОблачнойПодписи() Тогда - + Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса() + И Не ИспользоватьСервисОблачнойПодписи() Тогда + + Если Контекст.Операция = "Подписание" Тогда + ОтпечаткиСертификатовНаТокенах = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПолучитьОтпечаткиСертификатовНаТокенах(Истина, Ложь); + + Если ОтпечаткиСертификатовНаТокенах.Количество() > 0 Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); + Возврат; + КонецЕсли; + КонецЕсли; + ПоказатьОшибкуОбращенияКПрограмме( - НСтр("ru = 'Требуется приложение электронной подписи и шифрования'"), - "", Результат, Контекст.ОшибкаНаСервере); - + НСтр("ru = 'Требуется приложение электронной подписи и шифрования'"), "", Результат, + Контекст.ОшибкаНаСервере); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); Возврат; КонецЕсли; - + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина); КонецПроцедуры @@ -5047,13 +5468,17 @@ КонецПроцедуры // Продолжение процедуры ПолучитьОтпечаткиСертификатовНаКлиенте. -Процедура ПолучитьОтпечаткиСертификатовНаКлиентеПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт +Асинх Процедура ПолучитьОтпечаткиСертификатовНаКлиентеПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт + + Массив = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПолучитьОтпечаткиСертификатовНаТокенах(Ложь, Контекст.ВключаяПросроченные); Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Массив); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Массив); Возврат; КонецЕсли; + Контекст.Вставить("МассивОтпечатков", Массив); + МенеджерКриптографии.НачатьПолучениеХранилищаСертификатов( Новый ОписаниеОповещения( "ПолучитьОтпечаткиСертификатовНаКлиентеПослеПолученияХранилища", ЭтотОбъект, Контекст), @@ -5072,7 +5497,7 @@ // Продолжение процедуры ПолучитьОтпечаткиСертификатовНаКлиенте. Процедура ПолучитьОтпечаткиСертификатовНаКлиентеПослеПолученияВсех(МассивСертификатов, Контекст) Экспорт - ОтпечаткиСертификатовНаКлиенте = Новый Массив; + ОтпечаткиСертификатовНаКлиенте = Контекст.МассивОтпечатков; ЭлектроннаяПодписьСлужебныйКлиентСервер.ДобавитьОтпечаткиСертификатов(ОтпечаткиСертификатовНаКлиенте, МассивСертификатов, @@ -5363,10 +5788,40 @@ Если ЗначениеЗаполнено(ПрограммаПоСертификатуРезультат.Программа) Тогда Программа = ПрограммаПоСертификатуРезультат.Программа; Иначе + + ДанныеСертификата = ПолучитьИзВременногоХранилища(ПараметрыВыполнения.СертификатАдрес); + + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(ДанныеСертификата); + Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); + Контекст.Вставить("СвойстваСертификата", Ждать СвойстваСертификата(СертификатКриптографии)); + Контекст.СвойстваСертификата.Вставить("ДвоичныеДанные", ДанныеСертификата); + + Если Операция = "Шифрование" Тогда + Токен = Ждать ЭлектроннаяПодписьКлиентЛокализация.ТокенДляШифрования( + Контекст.СертификатКриптографии, АлгоритмШифрования, Контекст.СвойстваСертификата); + Если Токен <> Неопределено Тогда + Контекст.Вставить("МенеджерКриптографии", Токен); + Контекст.Вставить("АлгоритмШифрования", АлгоритмШифрования); + ВыполнитьНаСторонеПодготовкаСертификатовЦиклНачало(Контекст); + Возврат; + КонецЕсли; + Иначе + Токен = Ждать ПолучитьТокенПоСертификату(Контекст.СертификатКриптографии); + Если Токен <> Неопределено Тогда + Контекст.Вставить("МенеджерКриптографии", Токен); + Токен.Вставить("Пароль", Контекст.ЗначениеПароля); + Контекст.Удалить("ЗначениеПароля"); + ВыполнитьНаСторонеЦиклЗапуск(Контекст); + Возврат; + КонецЕсли; + КонецЕсли; + ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", ПрограммаПоСертификатуРезультат.Ошибка); ОшибкаНаКлиенте.Вставить("Инструкция", Истина); ВыполнитьНаСторонеПослеЦикла(ОшибкаНаКлиенте, Контекст); Возврат; + КонецЕсли; КонецЕсли; @@ -5393,12 +5848,20 @@ Процедура ВыполнитьНаСторонеПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда - Если Контекст.Операция = "Шифрование" - И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ИспользоватьОблачнуюПодпись", Истина) = Истина - И ШифроватьДанныеОблачнойПодписью() Тогда - Контекст.Вставить("МенеджерКриптографии", "ОблачнаяПодпись"); - ВыполнитьНаСторонеОблачнойПодписи(Контекст); - Иначе + + Если Контекст.Операция = "Шифрование" Тогда + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ИспользоватьОблачнуюПодпись", Истина) = Истина + И ШифроватьДанныеОблачнойПодписью() Тогда + Контекст.Вставить("МенеджерКриптографии", "ОблачнаяПодпись"); + ВыполнитьНаСторонеОблачнойПодписи(Контекст); + ИначеЕсли ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("Токен") Тогда + Контекст.Вставить("МенеджерКриптографии", Результат); + ВыполнитьНаСторонеПослеПоискаСертификата(Null, Контекст); + Возврат; + КонецЕсли; + + Иначе ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Структура("Ошибка", Результат)); Возврат; КонецЕсли; @@ -5427,7 +5890,7 @@ // * СертификатКриптографии - СертификатКриптографии // Процедура ВыполнитьНаСторонеПослеПоискаСертификата(Результат, Контекст) Экспорт - + Если ТипЗнч(Результат) <> Тип("СертификатКриптографии") И Результат <> Null Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Структура("Ошибка", Результат)); Возврат; @@ -5443,13 +5906,6 @@ "ВыполнитьНаСторонеПослеВыгрузкиСертификата", ЭтотОбъект, Контекст)); ИначеЕсли Контекст.Операция = "Шифрование" Тогда - СвойстваСертификатов = Контекст.ОписаниеДанных.СертификатыШифрования; - Если ТипЗнч(СвойстваСертификатов) = Тип("Строка") Тогда - СвойстваСертификатов = ПолучитьИзВременногоХранилища(СвойстваСертификатов); - КонецЕсли; - Контекст.Вставить("Индекс", -1); - Контекст.Вставить("СвойстваСертификатов", СвойстваСертификатов); - Контекст.Вставить("СертификатыШифрования", Новый Массив); ВыполнитьНаСторонеПодготовкаСертификатовЦиклНачало(Контекст); Возврат; Иначе @@ -5467,33 +5923,20 @@ // Параметры: // Контекст - Структура // -Процедура ВыполнитьНаСторонеПодготовкаСертификатовЦиклНачало(Контекст) +Асинх Процедура ВыполнитьНаСторонеПодготовкаСертификатовЦиклНачало(Контекст) - Если Контекст.СвойстваСертификатов.Количество() <= Контекст.Индекс + 1 Тогда - ВыполнитьНаСторонеЦиклЗапуск(Контекст); - Возврат; + СвойстваСертификатов = Контекст.ОписаниеДанных.СертификатыШифрования; + Если ТипЗнч(СвойстваСертификатов) = Тип("Строка") Тогда + СвойстваСертификатов = ПолучитьИзВременногоХранилища(СвойстваСертификатов); КонецЕсли; - Контекст.Индекс = Контекст.Индекс + 1; - - СертификатКриптографии = Новый СертификатКриптографии; - СертификатКриптографии.НачатьИнициализацию(Новый ОписаниеОповещения( - "ВыполнитьНаСторонеПодготовкаСертификатовПослеИнициализацииСертификата", ЭтотОбъект, Контекст), - Контекст.СвойстваСертификатов[Контекст.Индекс].Сертификат); - -КонецПроцедуры + Контекст.Вставить("СертификатыШифрования", Новый Массив); + Для Каждого СертификатШифрования Из СвойстваСертификатов Цикл + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(СертификатШифрования.Сертификат); + Контекст.СертификатыШифрования.Добавить(СертификатКриптографии); + КонецЦикла; + ВыполнитьНаСторонеЦиклЗапуск(Контекст); -// Продолжение процедуры ВыполнитьНаСтороне. -// -// Параметры: -// Контекст - Структура: -// * СертификатыШифрования - Массив -// -Процедура ВыполнитьНаСторонеПодготовкаСертификатовПослеИнициализацииСертификата(СертификатКриптографии, Контекст) Экспорт - - Контекст.СертификатыШифрования.Добавить(СертификатКриптографии); - - ВыполнитьНаСторонеПодготовкаСертификатовЦиклНачало(Контекст); - КонецПроцедуры // Продолжение процедуры ВыполнитьНаСтороне. @@ -5506,23 +5949,25 @@ Если Контекст.Операция = "Подписание" И ТипЗнч(Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии") И ЗначениеЗаполнено(Контекст.МенеджерКриптографии.АлгоритмПодписи) Тогда - АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( - ВыгруженныеДанные, Ложь, Истина); - + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + АлгоритмСертификата = Контекст.СвойстваСертификата.АлгоритмОткрытогоКлюча; + Иначе + АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( + ВыгруженныеДанные, Ложь, Истина); + КонецЕсли; - Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату( - Контекст.СвойстваСертификата.Представление, АлгоритмСертификата, - Контекст.МенеджерКриптографии.АлгоритмПодписи); + Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату( + Контекст.СвойстваСертификата.Представление, АлгоритмСертификата, + Контекст.МенеджерКриптографии.АлгоритмПодписи); - Если Результат <> Истина Тогда + Если Результат <> Истина Тогда - ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", Результат); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Структура("Ошибка", ОшибкаНаКлиенте)); - Возврат; + ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", Результат); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Структура("Ошибка", ОшибкаНаКлиенте)); + Возврат; - КонецЕсли; - - + КонецЕсли; + КонецЕсли; ВыполнитьНаСторонеЦиклЗапуск(Контекст); @@ -5671,8 +6116,15 @@ Данные = Результат; Если Контекст.НаСторонеКлиента Тогда - МенеджерКриптографии = Контекст.МенеджерКриптографии; + Если ЭтоXMLDSig И ТипЗнч(Контекст.МенеджерКриптографии) = Тип("Структура") Тогда + Ошибка = Новый Структура("ОписаниеОшибки", + НСтр("ru = 'Создать подпись XMLDSig с помощью механизмов токена можно будет в следующих версиях приложения.'")); + ВыполнитьНаСторонеПослеЦикла(Ошибка, Контекст); + Возврат; + КонецЕсли; + + МенеджерКриптографии = Контекст.МенеджерКриптографии; ПараметрыОперации = Новый Структура; ПараметрыОперации.Вставить("Операция", Контекст.ОписаниеДанных.Операция); ПараметрыОперации.Вставить("ЗаголовокДанных", Контекст.ОписаниеДанных.ЗаголовокДанных); @@ -5739,6 +6191,8 @@ "ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект); ВыполнитьОперациюОблачнойПодписи(Оповещение, Контекст, Данные, ПараметрыОперации); + ИначеЕсли ТипЗнч(МенеджерКриптографии) = Тип("Структура") Тогда // Токен + СоздатьПодписьНаТокене(Контекст, Результат.ПараметрыCMS.Открепленная); Иначе ОповещениеУспех = Новый ОписаниеОповещения( "ВыполнитьНаСторонеЦиклПослеОперацииНаКлиентеXMLDSig", ЭтотОбъект, Контекст); @@ -5771,23 +6225,26 @@ МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); МодульСервисКриптографииКлиент.Подписать(Оповещение, Данные, СертификатДляПодписи, , ПараметрыОперации); Иначе - Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда - Попытка - НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи( - Контекст.ОписаниеДанных.ТипПодписи, - ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени); - Исключение - ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте(ИнформацияОбОшибке(), Ложь, Контекст); - Возврат; - КонецПопытки; + + Попытка + НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи( + Контекст.ОписаниеДанных.ТипПодписи, + ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени); + Исключение + ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте(ИнформацияОбОшибке(), Ложь, Контекст); + Возврат; + КонецПопытки; + + Если ТипЗнч(МенеджерКриптографии) = Тип("Структура") Тогда // Токен + ПодписатьНаТокене(МенеджерКриптографии, Оповещение, Данные, Контекст); + Иначе Если ЗначениеЗаполнено(НастройкиПодписи.АдресаСерверовМетокВремени) Тогда МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени; КонецЕсли; МенеджерКриптографии.НачатьПодписывание(Оповещение, Данные, Контекст.СертификатКриптографии, НастройкиПодписи.ТипПодписи); - Иначе - МенеджерКриптографии.НачатьПодписывание(Оповещение, Данные, Контекст.СертификатКриптографии); КонецЕсли; + КонецЕсли; ИначеЕсли Контекст.Операция = "Шифрование" Тогда @@ -5795,6 +6252,8 @@ Если МенеджерКриптографии = "СервисКриптографии" Тогда МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); МодульСервисКриптографииКлиент.Зашифровать(Оповещение, Данные, Контекст.СертификатыШифрования, , ПараметрыОперации); + ИначеЕсли ТипЗнч(МенеджерКриптографии) = Тип("Структура") Тогда // Токен + ЗашифроватьНаТокене(МенеджерКриптографии, Оповещение, Данные, Контекст); Иначе МенеджерКриптографии.НачатьШифрование(Оповещение, Данные, Контекст.СертификатыШифрования); КонецЕсли; @@ -5804,6 +6263,8 @@ Если МенеджерКриптографии = "СервисКриптографии" Тогда МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент"); МодульСервисКриптографииКлиент.Расшифровать(Оповещение, Данные, , ПараметрыОперации); + ИначеЕсли ТипЗнч(МенеджерКриптографии) = Тип("Структура") Тогда // Токен + РасшифроватьНаТокене(МенеджерКриптографии, Оповещение, Данные, Контекст); Иначе МенеджерКриптографии.НачатьРасшифровку(Оповещение, Данные); КонецЕсли; @@ -5880,6 +6341,51 @@ КонецПроцедуры +Асинх Процедура ПодписатьНаТокене(Токен, Оповещение, Данные, Контекст) + + ПараметрыПодписи = ПараметрыПодписиНаТокене(Токен, Контекст.СертификатКриптографии, Контекст.ОписаниеДанных.ТипПодписи); + Подпись = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПодписьНаТокене(ПараметрыПодписи, Данные); + + Если ТипЗнч(Подпись) = Тип("Строка") Тогда + ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", Подпись); + ВыполнитьНаСторонеПослеЦикла(ОшибкаНаКлиенте, Контекст); + Возврат; + КонецЕсли; + + ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте(Подпись, Контекст); + +КонецПроцедуры + +Асинх Процедура ЗашифроватьНаТокене(Токен, Оповещение, Данные, Контекст) + + ПараметрыШифрования = ПараметрыШифрованияНаТокене(Токен, Контекст.СертификатыШифрования, Контекст.АлгоритмШифрования); + ЗашифрованныеДанные = Ждать ЭлектроннаяПодписьКлиентЛокализация.ШифрованиеНаТокене(ПараметрыШифрования, Данные); + + Если ТипЗнч(ЗашифрованныеДанные) = Тип("Строка") Тогда + ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", ЗашифрованныеДанные); + ВыполнитьНаСторонеПослеЦикла(ОшибкаНаКлиенте, Контекст); + Возврат; + КонецЕсли; + + ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте(ЗашифрованныеДанные, Контекст); + +КонецПроцедуры + +Асинх Процедура РасшифроватьНаТокене(Токен, Оповещение, Данные, Контекст) + + ПараметрыРасшифровки = ПараметрыРасшифровкиНаТокене(Токен, Контекст.СертификатКриптографии); + РасшифрованныеДанные = Ждать ЭлектроннаяПодписьКлиентЛокализация.РасшифровкаНаТокене(ПараметрыРасшифровки, Данные); + + Если ТипЗнч(РасшифрованныеДанные) = Тип("Строка") Тогда + ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", РасшифрованныеДанные); + ВыполнитьНаСторонеПослеЦикла(ОшибкаНаКлиенте, Контекст); + Возврат; + КонецЕсли; + + ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте(РасшифрованныеДанные, Контекст); + +КонецПроцедуры + // Продолжение процедуры ВыполнитьНаСтороне. Процедура ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт @@ -5955,7 +6461,7 @@ ВыполнитьНаСторонеЦиклПослеПодписанияПакета(ДвоичныеДанные, Контекст); Иначе Если Контекст.Свойство("МенеджерКриптографии") И ТипЗнч(Контекст.МенеджерКриптографии) = Тип( - "МенеджерКриптографии") И ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда + "МенеджерКриптографии") Тогда СвойстваПодписи = Ждать СвойстваПодписиЧтениеМенеджеромКриптографии(ДвоичныеДанные, Контекст.МенеджерКриптографии, Ложь); Иначе @@ -6024,7 +6530,7 @@ ЭлементДанных.Свойство("ВерсияОбъекта", ВерсияОбъекта); СвойстваПодписи.Вставить("ИдентификаторПодписи", Новый УникальныйИдентификатор); - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ЗначениеЗаполнено(Контекст.ОписаниеДанных.РезультатПроверкиМЧДДляПодписания) И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда @@ -6040,7 +6546,7 @@ КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности ПредставлениеОшибки = ЭлектроннаяПодписьСлужебныйВызовСервера.ДобавитьПодпись( ЭлементДанных.Объект, СвойстваПодписи, Контекст.ИдентификаторФормы, ВерсияОбъекта); @@ -6295,9 +6801,9 @@ Процедура ПолучитьДанныеИзОписанияДанныхПродолжение(Результат, Контекст) Экспорт ЭтоXMLDSig = (ТипЗнч(Результат) = Тип("Структура") - И Результат.Свойство("Данные") - И ТипЗнч(Результат.Данные) = Тип("Структура") - И Результат.Данные.Свойство("ПараметрыXMLDSig")); + И Результат.Свойство("Данные") + И ТипЗнч(Результат.Данные) = Тип("Структура") + И Результат.Данные.Свойство("ПараметрыXMLDSig")); Если ЭтоXMLDSig И Не Результат.Данные.Свойство("КонвертXML") Тогда Результат.Данные = Новый Структура(Новый ФиксированнаяСтруктура(Результат.Данные)); @@ -6305,16 +6811,16 @@ КонецЕсли; ЭтоCMS = (ТипЗнч(Результат) = Тип("Структура") - И Результат.Свойство("Данные") - И ТипЗнч(Результат.Данные) = Тип("Структура") - И Результат.Данные.Свойство("ПараметрыCMS")); + И Результат.Свойство("Данные") + И ТипЗнч(Результат.Данные) = Тип("Структура") + И Результат.Данные.Свойство("ПараметрыCMS")); Если ТипЗнч(Результат) <> Тип("Структура") - Или Не Результат.Свойство("Данные") - Или ТипЗнч(Результат.Данные) <> Тип("ДвоичныеДанные") - И ТипЗнч(Результат.Данные) <> Тип("Строка") - И Не ЭтоXMLDSig - И Не ЭтоCMS Тогда + Или Не Результат.Свойство("Данные") + Или ТипЗнч(Результат.Данные) <> Тип("ДвоичныеДанные") + И ТипЗнч(Результат.Данные) <> Тип("Строка") + И Не ЭтоXMLDSig + И Не ЭтоCMS Тогда Если ТипЗнч(Результат) <> Тип("Структура") Или Не Результат.Свойство("ОписаниеОшибки") Тогда Ошибка = Новый Структура("ОписаниеОшибки", НСтр("ru = 'Некорректный тип данных.'")); @@ -6371,21 +6877,50 @@ ВыполнитьОбработкуОповещения(Контекст.Оповещение, Данные); Иначе // Путь к файлу - Попытка - ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.ИдентификаторФормы = Контекст.Форма.УникальныйИдентификатор; - ПараметрыЗагрузки.Интерактивно = Ложь; - ФайловаяСистемаКлиент.ЗагрузитьФайл(Новый ОписаниеОповещения( - "ПолучитьДанныеИзОписанияДанныхЗавершение", ЭтотОбъект, Контекст, - "ПолучитьДанныеИзОписанияДанныхЗавершениеПоОшибке", ЭтотОбъект), - ПараметрыЗагрузки, Данные); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекущийРезультат = Новый Структура("ОписаниеОшибки", - ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, ТекущийРезультат); - КонецПопытки; + + ПолучитьДанныеИзОписанияДанныхПродолжениеЗагрузкаИзФайла(Данные, Контекст); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Асинх Процедура ПолучитьДанныеИзОписанияДанныхПродолжениеЗагрузкаИзФайла(Данные, Контекст, ПовторныйВызов = Ложь) + + Если Не ПовторныйВызов Тогда + ПараметрыПовторногоВызова = Новый Структура("Данные, Контекст", Данные, Контекст); + ОповещениеПриОтсутствииКомпонентРаботыСЭП = Новый ОписаниеОповещения( + "ПолучитьДанныеИзОписанияДанныхПродолжениеЗагрузкаИзФайлаПовторноПослеУстановкиКомпонент", ЭтотОбъект, ПараметрыПовторногоВызова); + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием( + ОповещениеПриОтсутствииКомпонентРаботыСЭП); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Попытка + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.ИдентификаторФормы = Контекст.Форма.УникальныйИдентификатор; + ПараметрыЗагрузки.Интерактивно = Ложь; + ФайловаяСистемаКлиент.ЗагрузитьФайл(Новый ОписаниеОповещения( + "ПолучитьДанныеИзОписанияДанныхЗавершение", ЭтотОбъект, Контекст, + "ПолучитьДанныеИзОписанияДанныхЗавершениеПоОшибке", ЭтотОбъект), + ПараметрыЗагрузки, Данные); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекущийРезультат = Новый Структура("ОписаниеОшибки", + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ТекущийРезультат); + КонецПопытки; + +КонецПроцедуры + +Процедура ПолучитьДанныеИзОписанияДанныхПродолжениеЗагрузкаИзФайлаПовторноПослеУстановкиКомпонент(Результат, ПараметрыПовторногоВызова) Экспорт + + Если Результат = Истина Тогда + ПолучитьДанныеИзОписанияДанныхПродолжениеЗагрузкаИзФайла(ПараметрыПовторногоВызова.Данные, + ПараметрыПовторногоВызова.Контекст, Истина); КонецЕсли; КонецПроцедуры @@ -6421,14 +6956,12 @@ КонецПроцедуры +#КонецОбласти + #Область УсовершенствоватьПодпись Процедура УсовершенствоватьПодпись(Контекст) Экспорт - Если Не ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда - ВызватьИсключение НСтр("ru='Усовершенствование подписи недоступно на текущей версии платформы.'"); - КонецЕсли; - Если Не ЗначениеЗаполнено(Контекст.ПараметрыВыполнения.ОписаниеДанных.Подпись) Тогда ВызватьИсключение НСтр("ru='Переданные параметры не содержат данных подписи.'"); КонецЕсли; @@ -6443,7 +6976,7 @@ Если ЗначениеЗаполнено(НастройкиПодключенияСервиса.Ошибка) Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУсовершенствованиеПослеОтветаНаВопрос", ЭтотОбъект, Контекст); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Ошибка при попытке усовершенствования через приложение в Интернете: + НСтр("ru='Невозможно усовершенствовать электронную подпись с помощью приложения в Интернете: |%1 |Продолжить усовершенствование с помощью приложений, установленных на компьютере?'"), НастройкиПодключенияСервиса.Ошибка); @@ -6476,7 +7009,7 @@ Иначе Результат = Новый Структура; Результат.Вставить("Ошибка", Истина); - Результат.Вставить("ТекстОшибки", НСтр("ru='Ошибка при попытке усовершенствования через приложение в Интернете'")); + Результат.Вставить("ТекстОшибки", НСтр("ru='Невозможно усовершенствовать электронную подпись с помощью приложения в Интернете'")); УсовершенствоватьПослеВыполненияНаСторонеКлиента(Результат, Контекст); КонецЕсли; @@ -7130,8 +7663,8 @@ КонецФункции #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Работа с XMLDSig + +#Область РаботаСXMLDSig // Начинает подписание XML сообщения. // @@ -7296,6 +7829,7 @@ ПараметрыПодключения.ПредложитьЗагрузить = Истина; ОписаниеКомпоненты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеКомпоненты(); + Контекст.Вставить("ИмяОбъектаКомпоненты", ОписаниеКомпоненты.ИмяОбъекта); ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета( Новый ОписаниеОповещения("ПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), @@ -7341,6 +7875,8 @@ Оповещение = Новый ОписаниеОповещения( "ПослеПодключенияКомпонентыПослеУстановкиСоответствиеOID", ЭтотОбъект, Контекст, "ПослеПодключенияКомпонентыПослеОшибкиУстановкиСоответствиеOID", ЭтотОбъект); + + ЗаполнитьПутьКЛогуКомпоненты(Контекст.ОбъектКомпоненты, Контекст.ИмяОбъектаКомпоненты); Контекст.ОбъектКомпоненты.НачатьУстановкуСоответствиеOID(Оповещение, ЭлектроннаяПодписьСлужебныйКлиентСервер.ИдентификаторыАлгоритмовХешированияИОткрытогоКлюча()); @@ -7349,6 +7885,11 @@ Процедура ПослеПодключенияКомпонентыПослеУстановкиСоответствиеOID(Контекст) Экспорт + Если ТипЗнч(Контекст.МенеджерКриптографии) = Тип("Структура") Тогда + ПослеУстановкиСвойстваЗапретитьПользовательскийИнтерфейс(Контекст); + Возврат; + КонецЕсли; + Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии( Новый ОписаниеОповещения("ПослеПолученияИнформацииМодуляКриптографии", ЭтотОбъект, Контекст)); @@ -7518,6 +8059,23 @@ КонецПроцедуры +Асинх Процедура СоздатьПодписьНаТокене(Контекст, Открепленная) + + ПараметрыПодписи = ПараметрыПодписиНаТокене(Контекст.Токен, + Контекст.СертификатКриптографии, Контекст.ОписаниеДанных.ТипПодписи); + + ПараметрыПодписи.Открепленная = Открепленная; + Подпись = Ждать ПодписьНаТокене(ПараметрыПодписи, Контекст.ЭлементДанных.Данные.Данные); + + Если ТипЗнч(Подпись) = Тип("Строка") Тогда + ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиентеXMLDSig(Подпись, Контекст); + Возврат; + КонецЕсли; + + ВыполнитьНаСторонеЦиклПослеОперацииНаКлиентеXMLDSig(Подпись, Контекст); + +КонецПроцедуры + Процедура Подписание_ПослеВыполненияCMSSign_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; @@ -8037,8 +8595,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Для процедур УстановитьПарольСертификата, ОткрытьНовуюФорму, ВыборСертификатаДляПодписанияИлиРасшифровки, // ПроверитьСертификатСправочника. @@ -8321,7 +8880,7 @@ Если Контекст.Операция = "Подписание" Тогда - Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись И ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи) Тогда + Если ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи) Тогда Если Контекст.ОписаниеДанных.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И Контекст.ОписаниеДанных.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда Ошибка = Новый Структура("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -8431,6 +8990,8 @@ КонецФункции +#КонецОбласти + #Область ДобавлениеСертификата // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. @@ -8441,9 +9002,12 @@ Результат.ЗаголовокОшибки = Контекст.ЗаголовокОшибкиПрограммы; Контекст.Вставить("ОшибкаНаКлиенте", Результат); - ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); - СообщитьОбОшибкеДобавленияСертификата(Контекст); - + Контекст.Вставить("СертификатКриптографии"); + Если Не Контекст.Свойство("АлгоритмПодписи") Тогда + Контекст.Вставить("АлгоритмПодписи", ""); + КонецЕсли; + Контекст.Вставить("ЭтоПолноправныйПользователь", ПользователиКлиент.ЭтоПолноправныйПользователь()); + ДобавитьСертификатСТокена(Контекст); Возврат; КонецЕсли; @@ -8501,9 +9065,7 @@ Если Контекст.ОписанияПрограмм.Количество() <= Контекст.Индекс + 1 Тогда - ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); - СообщитьОбОшибкеДобавленияСертификата(Контекст); - + ДобавитьСертификатСТокена(Контекст); Возврат; КонецЕсли; @@ -8525,6 +9087,79 @@ КонецПроцедуры +Асинх Процедура ДобавитьСертификатСТокена(Контекст) + + Если Контекст.СертификатКриптографии = Неопределено Тогда + СертификатКриптографии = Новый СертификатКриптографии; + Ждать СертификатКриптографии.ИнициализироватьАсинх(Контекст.ДанныеСертификата); + Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); + КонецЕсли; + + Токен = Ждать ПолучитьТокенПоСертификату(Контекст.СертификатКриптографии); + + Если Токен = Неопределено Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + СообщитьОбОшибкеДобавленияСертификата(Контекст); + Возврат; + КонецЕсли; + + Токен.Вставить("Пароль", Контекст.ПарольСертификата); + Контекст.Вставить("Токен", Токен); + + Если Контекст.ДляШифрования = Истина Тогда + ПараметрыШифрованияНаТокене = ПараметрыШифрованияНаТокене(Токен, Контекст.СертификатКриптографии); + Результат = Ждать ЭлектроннаяПодписьКлиентЛокализация.ШифрованиеНаТокене(ПараметрыШифрованияНаТокене, Контекст.ДанныеСертификата); + + Если ТипЗнч(Результат) = Тип("Строка") Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата( + Контекст.ОшибкаНаКлиенте, + Новый Структура("Ссылка, Токен", Токен.Представление, Токен), + "Шифрование", + Результат, + Контекст.ЭтоПолноправныйПользователь); + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + СообщитьОбОшибкеДобавленияСертификата(Контекст); + Возврат; + КонецЕсли; + + ПараметрыРасшифровкиНаТокене = ПараметрыРасшифровкиНаТокене(Токен, Контекст.СертификатКриптографии); + Результат = Ждать ЭлектроннаяПодписьКлиентЛокализация.РасшифровкаНаТокене(ПараметрыРасшифровкиНаТокене, Результат); + Если ТипЗнч(Результат) = Тип("Строка") Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата( + Контекст.ОшибкаНаКлиенте, + Новый Структура("Ссылка, Токен", Токен.Представление, Токен), + "Расшифровка", + Результат, + Контекст.ЭтоПолноправныйПользователь); + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + СообщитьОбОшибкеДобавленияСертификата(Контекст); + Возврат; + КонецЕсли; + + Иначе + ПараметрыПодписи = ПараметрыПодписиНаТокене(Токен, + Контекст.СертификатКриптографии, ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")); + + Результат = Ждать ПодписьНаТокене(ПараметрыПодписи, Контекст.ДанныеСертификата); + + Если ТипЗнч(Результат) = Тип("Строка") Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата( + Контекст.ОшибкаНаКлиенте, + Новый Структура("Ссылка, Токен", Токен.Представление, Токен), + "Подписание", + Результат, + Контекст.ЭтоПолноправныйПользователь); + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + СообщитьОбОшибкеДобавленияСертификата(Контекст); + Возврат; + КонецЕсли; + КонецЕсли; + + Контекст.Вставить("ОписаниеПрограммы", Новый Структура("Ссылка", Неопределено)); + ДобавитьСертификатЦиклПослеПодписания(Результат, Контекст); + +КонецПроцедуры + // Продолжение процедуры ЭлектроннаяПодписьКлиент.ДобавитьСертификат. // // Параметры: @@ -8740,6 +9375,20 @@ Если ЗначениеЗаполнено(ОшибкаНаКлиенте) И ОшибкаНаКлиенте.Ошибки.Количество() > 0 И ОшибкаНаКлиенте.Ошибки[0].Описание = ТекстОшибкиНеУдалосьОпределитьПрограммуПоЗакрытомуКлючуСертификата() Тогда + ЕстьОшибкиТокенов = Ложь; + Для Каждого Ошибка Из ОшибкаНаКлиенте.Ошибки Цикл + Если ЗначениеЗаполнено(Ошибка.Токен) Тогда + ЕстьОшибкиТокенов = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЕстьОшибкиТокенов Тогда + ПоказатьОшибкуОбращенияКПрограмме(КонтекстДобавления.ЗаголовокФормы, "", ОшибкаНаКлиенте, ОшибкаНаСервере, + ДополнительныеПараметры); + Возврат; + КонецЕсли; + ПараметрыОшибки = Новый Структура; ПараметрыОшибки.Вставить("ЗаголовокПредупреждения", КонтекстДобавления.ЗаголовокФормы); ПараметрыОшибки.Вставить("ТекстОшибкиКлиент", ОшибкаНаКлиенте.Ошибки[0].Описание); @@ -8750,7 +9399,7 @@ ПараметрыОшибки.Вставить("ДополнительныеДанные", ДополнительныеПараметры); - ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки, ЭтотОбъект); + ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки); Иначе ПоказатьОшибкуОбращенияКПрограмме(КонтекстДобавления.ЗаголовокФормы, @@ -8758,6 +9407,12 @@ КонецЕсли; КонецПроцедуры +// Вызывается после добавления в справочник сертификатов электронной подписи. +// +// Параметры: +// Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на добавленный сертификат +// ПараметрыОповещенияПриЗаписиСертификата - см. ПараметрыОповещенияПриЗаписиСертификата +// Процедура ПослеДобавленияВСправочникСертификатовЭлектроннойПодписи(Сертификат, ПараметрыОповещенияПриЗаписиСертификата) Экспорт ОповеститьОбИзменении(Сертификат); @@ -8949,7 +9604,7 @@ Данные = ПолучитьДвоичныеДанныеИзСтроки(Данные); КонецЕсли; - ИначеЕсли ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись И ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи) Тогда + ИначеЕсли ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи) Тогда Если Контекст.ОписаниеДанных.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда СвойствоПодписи = МодульСервисКриптографииDSSКлиентСервер.ПолучитьСвойствоПодписиCAdES("BES", Истина, Ложь, "Подпись"); ИначеЕсли Контекст.ОписаниеДанных.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST") Тогда @@ -9455,20 +10110,25 @@ #Область ДиагностикаЭлектроннойПодписи // Формирует архив, содержащий техническую информацию, и предлагает сохранить его на компьютер. +// Или инициализирует переход на сайт службы поддержки, куда будет отправлена технической информация. // // Параметры: -// Причина - Строка - причина сбора технической информации. -// ОбработчикЗавершения - Неопределено -// - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана -// после сохранения архива на компьютер со следующими параметрами: -// АрхивСохранен - Булево - результат сохранения архива на компьютер. -// ДополнительныеПараметры - Произвольный - значение, которое было указано -// при создании объекта ОписаниеОповещения. -// ДополнительныеФайлы - Структура - дополнительные данные, которые необходимо поместить в архив: -// * Имя - Строка - имя файла с расширением. -// * Данные - ДвоичныеДанные -// - Строка - данные файла или адрес данных во временном хранилище. -// - Массив - массив указанных выше структур. +// Причина - Строка - причина сбора технической информации. +// ПараметрыСообщения - Неопределено - если Неопределено, то будет выполнено скачивание файла технической информации. +// - Структура - если Структура, то будет инициализирован переход на сайт службы поддержки, куда будет отправлена технической информация: +// * Тема - Строка - заголовок сообщения. +// * Сообщение - Строка - содержание сообщения +// ОбработчикЗавершения - Неопределено, +// - ОписаниеОповещения - содержит описание процедуры, которая будет вызвана +// после сохранения архива на компьютер со следующими параметрами: +// АрхивСохранен - Булево - результат сохранения архива на компьютер. +// ДополнительныеПараметры - Произвольный - значение, которое было указано +// при создании объекта ОписаниеОповещения. +// ДополнительныеФайлы - Неопределено, +// - Структура - дополнительные данные, которые необходимо поместить в архив: +// * Имя - Строка - имя файла с расширением. +// * Данные - ДвоичныеДанные +// - Массив - массив из указанных выше структур. // Процедура СформироватьТехническуюИнформацию(Причина, ПараметрыСообщения = Неопределено, @@ -9504,15 +10164,64 @@ Контекст.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); Контекст.Вставить("СопроводительныйТекст", СопроводительныйТекст); - ПолучитьВерсиюКомпоненты( - Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОКомпоненте", ЭтотОбъект, Контекст)); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + СформироватьТехническуюИнформациюСоСнимкомЭкрана(Контекст); + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + + Оповещение = Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОКомпоненте", ЭтотОбъект, Контекст); + ПолучитьВерсиюКомпоненты(Оповещение); + +КонецПроцедуры + +Процедура СформироватьТехническуюИнформациюСоСнимкомЭкрана(Контекст) + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + Если Не МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПриложениеДляСнимкаЭкранаДоступно() Тогда + Оповещение = Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОКомпоненте", ЭтотОбъект, Контекст); + ПолучитьВерсиюКомпоненты(Оповещение); + Возврат; + КонецЕсли; + + СообщенияВСлужбуТехническойПоддержкиДоступны = + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СообщенияВСлужбуТехническойПоддержкиДоступны(); + + // Служба технической поддержки не поддерживает вложения формата "png" или "jpg". + Если Не Контекст.ВыгрузитьАрхив И СообщенияВСлужбуТехническойПоддержкиДоступны Тогда + Оповещение = Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОКомпоненте", ЭтотОбъект, Контекст); + ПолучитьВерсиюКомпоненты(Оповещение); + Возврат; + КонецЕсли; + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьФормированиеТехническойИнформацииСоСнимкомЭкрана", + ЭтотОбъект, + Контекст); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ЗапроситьСозданиеСнимкаЭкрана(ОбработчикЗавершения); + +КонецПроцедуры + +Процедура ПродолжитьФормированиеТехническойИнформацииСоСнимкомЭкрана(Результат, Контекст) Экспорт + + Если Результат <> Неопределено Тогда + ДанныеФайла = Новый Структура("Имя, Данные", Результат.ПолноеИмяФайла, Результат.АдресФайла); + Контекст.ДополнительныеФайлы.Добавить(ДанныеФайла); + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОКомпоненте", ЭтотОбъект, Контекст); + ПолучитьВерсиюКомпоненты(Оповещение); КонецПроцедуры Функция ДиагностическаяИнформацияОКомпьютере() Возврат НСтр("ru = 'Клиент:'") + Символы.ПС - + ЭлектроннаяПодписьСлужебныйКлиентСервер.ДиагностическаяИнформацияОКомпьютере(Истина); + + СтандартныеПодсистемыКлиент.ИнформацияДляПоддержки(); КонецФункции @@ -9553,7 +10262,7 @@ ВыполнитьОбработкуОповещения(Оповещение, ""); Возврат; КонецЕсли; - Заголовок = Символы.ПС + НСтр("ru = 'Программы на клиенте из справочника:'") + Символы.ПС; + Заголовок = Символы.ПС + НСтр("ru = 'Приложения на клиенте из справочника:'") + Символы.ПС; Контекст = Новый Структура; Контекст.Вставить("Индекс", 0); @@ -9617,21 +10326,41 @@ КонецПроцедуры -Процедура ПослеСбораТехническойИнформацииОПрограммахОпределенныхАвтоматически(ИнформацияОПрограммах, Контекст) Экспорт +Асинх Процедура ПослеСбораТехническойИнформацииОПрограммахОпределенныхАвтоматически(ИнформацияОПрограммах, Контекст) Экспорт - Контекст.СопроводительныйТекст = Контекст.СопроводительныйТекст + Символы.ПС - + ИнформацияОПрограммах + Символы.ПС; - - ДиагностическаяИнформацияОПрограммах( - Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОПрограммах", ЭтотОбъект, Контекст)); - + Контекст.СопроводительныйТекст = Контекст.СопроводительныйТекст + Символы.ПС + ИнформацияОПрограммах + Символы.ПС; + Оповещение = Новый ОписаниеОповещения("ПослеСбораТехническойИнформацииОПрограммах", ЭтотОбъект, Контекст); + + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(Оповещение); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + + ДиагностическаяИнформацияОПрограммах(Оповещение); + КонецПроцедуры -Процедура ПослеСбораТехническойИнформацииОПрограммах(ИнформацияОПрограммах, Контекст) Экспорт +Асинх Процедура ПослеСбораТехническойИнформацииОПрограммах(ИнформацияОПрограммах, Контекст) Экспорт Контекст.СопроводительныйТекст = Контекст.СопроводительныйТекст + ИнформацияОПрограммах + Символы.ПС + РезультатДиагностикиСерверовМетокВремени() + Символы.ПС; + СистемнаяИнформация = Новый СистемнаяИнформация; + КаталогЛогаКомпоненты = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().ПутьККаталогуДиагностики.Получить( + СистемнаяИнформация.ИдентификаторКлиента); + + Если ЗначениеЗаполнено(КаталогЛогаКомпоненты) Тогда + ЛогКомпоненты = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогЛогаКомпоненты) + + ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеКомпоненты().ИмяОбъекта + ".log"; + Файл = Новый Файл(ЛогКомпоненты); + Если Ждать Файл.СуществуетАсинх() Тогда + ДвоичныеДанныеФайла = Ждать СоздатьДвоичныеДанныеИзФайлаАсинх(ЛогКомпоненты); + Если ЗначениеЗаполнено(ДвоичныеДанныеФайла) Тогда + Контекст.ДополнительныеФайлы.Добавить( + Новый Структура("Имя, Данные", Файл.ИмяБезРасширения + ".txt", ДвоичныеДанныеФайла)); + КонецЕсли; + КонецЕсли; + КонецЕсли; Если Контекст.ВыгрузитьАрхив Тогда Контекст.Вставить("АдресАрхива", ЭлектроннаяПодписьСлужебныйВызовСервера.АдресАрхиваТехническойИнформации( @@ -9649,7 +10378,7 @@ Новый Структура("Имя, Данные", ИмяФайлаТехническойИнформации() + ".txt", АдресаФайловТехническойИнформации.ТехническаяИнформация)); Контекст.ДополнительныеФайлы.Добавить( Новый Структура("Имя, Данные", ИмяФайлаЖурналаРегистрации() + ".xml", АдресаФайловТехническойИнформации.ЖурналРегистрации)); - + ПараметрыОтправкиВТехподдержку = ПараметрыОтправкиВТехподдержку(); ПараметрыОтправкиВТехподдержку.Вложения = Контекст.ДополнительныеФайлы; ПараметрыОтправкиВТехподдержку.Тема = Контекст.Тема; @@ -9687,12 +10416,12 @@ КонецПроцедуры // Продолжение процедуры ПолучитьВерсиюКомпоненты. -Процедура ПолучитьВерсиюПослеПодключенияКомпоненты(Результат, Оповещение) Экспорт +Асинх Процедура ПолучитьВерсиюПослеПодключенияКомпоненты(Результат, Оповещение) Экспорт ВерсияКомпоненты = ""; Если Результат.Подключено Тогда - Попытка + Попытка ОповещениеПослеПолученияВерсии = Новый ОписаниеОповещения("ПослеПолученияВерсииКомпоненты", ЭтотОбъект, Оповещение); Результат.ПодключаемыйМодуль.НачатьВызовПолучитьВерсию(ОповещениеПослеПолученияВерсии); Возврат; @@ -9710,6 +10439,22 @@ ВерсияКомпоненты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Компонента %1 не установлена (%2).'"), "ExtraCryptoAPI", Результат.ОписаниеОшибки); КонецЕсли; + +#Если ВебКлиент Тогда + Компоненты = НовыйКомпонентыРаботыСКриптографией(); + Компоненты.КомпонентаExtraCryptoAPIУстановлена = Ложь; + + ТребуетсяУстановкаДополнительныхКомпонент = Ждать ТребуетсяУстановкаДополнительныхКомпонент(Компоненты); + Если ТребуетсяУстановкаДополнительныхКомпонент Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Компоненты", Компоненты); + ПараметрыФормы.Вставить("ИмяТребуемойКомпоненты", "КомпонентаExtraCryptoAPI"); + ОткрытьФорму("ОбщаяФорма.НачалоРаботыСЭлектроннойПодписью", ПараметрыФормы, + , , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; +#КонецЕсли + КонецЕсли; ВыполнитьОбработкуОповещения(Оповещение, ВерсияКомпоненты); @@ -9867,8 +10612,7 @@ Исключение Результат.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при получении расширенных свойств сертификата: - | %1'"), + НСтр("ru = 'Невозможно получить расширенные свойства сертификата: %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Результат; @@ -9909,116 +10653,35 @@ Возврат Сертификат; -КонецФункции +КонецФункции -Процедура ДополнитьРешениеКлассификатораОшибокПодробностями( - Оповещение, ОшибкаИзКлассификатора, ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, ДанныеДляДополнения) Экспорт +Асинх Функция СертификатИзСтроки(СертификатСтрокой) Экспорт - Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора.ПроверитьСертификатВЛокальномХранилищеКлиента - И ЗначениеЗаполнено(ДанныеДляДополнения.ДанныеСертификата) Тогда - - Контекст = Новый Структура; - Контекст.Вставить("ОповещениеОЗавершении", Оповещение); - Контекст.Вставить("ОшибкаИзКлассификатора", ОшибкаИзКлассификатора); - Контекст.Вставить("ДанныеСертификата", ДанныеДляДополнения.ДанныеСертификата); - Контекст.Вставить("ПараметрыДополненияТекстаРешенияОшибкиКлассификатора", ПараметрыДополненияТекстаРешенияОшибкиКлассификатора); - ЭлектроннаяПодписьКлиент.СоздатьМенеджерКриптографии( - Новый ОписаниеОповещения("ПослеСозданияМенеджераКриптографииДляДополненияКлассификатораОшибок", ЭтотОбъект, Контекст), - "ПолучениеСертификатов"); + Сертификат = СтрЗаменить(СертификатСтрокой, "-----BEGIN CERTIFICATE-----", ""); + Сертификат = СтрЗаменить(Сертификат, "-----END CERTIFICATE-----", ""); + Сертификат = СтрЗаменить(Сертификат, Символы.ПС, ""); + + Попытка + ДанныеСертификата = Base64Значение(Сертификат); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ТипЗнч(ДанныеСертификата) <> Тип("ДвоичныеДанные") Тогда + Возврат НСтр("ru='Не удалось получить сертификат'"); КонецЕсли; -КонецПроцедуры - -Асинх Процедура ПослеСозданияМенеджераКриптографииДляДополненияКлассификатораОшибок(МенеджерКриптографии, Контекст) Экспорт - - Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда - ВыполнитьОбработкуОповещения(Контекст.ОповещениеОЗавершении, Контекст.ОшибкаИзКлассификатора); - Возврат; - КонецЕсли; - -#Если Не МобильноеПриложениеКлиент И Не МобильныйКлиент Тогда - - ДанныеСертификата = Контекст.ДанныеСертификата; - Попытка СертификатКриптографии = Новый СертификатКриптографии; Ждать СертификатКриптографии.ИнициализироватьАсинх(ДанныеСертификата); - - ХранилищеЛокальногоКомпьютера = Ждать МенеджерКриптографии.ПолучитьХранилищеСертификатовАсинх( - ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, - РасположениеХранилищаСертификатовКриптографии.ДанныеКомпьютера); Исключение - ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации( - НСтр("ru = 'Электронная подпись.Диагностика ошибок'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), - "Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВыполнитьОбработкуОповещения(Контекст.ОповещениеОЗавершении, Контекст.ОшибкаИзКлассификатора); - Возврат; + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; - - Если Ждать ХранилищеЛокальногоКомпьютера.НайтиПоОтпечаткуАсинх(СертификатКриптографии.Отпечаток) = Неопределено Тогда - ВыполнитьОбработкуОповещения(Контекст.ОповещениеОЗавершении, Контекст.ОшибкаИзКлассификатора); - Возврат; - КонецЕсли; - - Контекст.ОшибкаИзКлассификатора.Решение = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатВЛокальномХранилищеТекстРешения()); - Контекст.ОшибкаИзКлассификатора.Причина = СтроковыеФункцииКлиент.ФорматированнаяСтрока( - ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатВЛокальномХранилищеТекстПричины()); - ВыполнитьОбработкуОповещения(Контекст.ОповещениеОЗавершении, Контекст.ОшибкаИзКлассификатора); + Возврат СертификатКриптографии; -#КонецЕсли - -КонецПроцедуры +КонецФункции -Процедура УдалитьСертификатИзЛокальногоХранилища(ДанныеСертификата) - - ЭлектроннаяПодписьКлиент.СоздатьМенеджерКриптографии( - Новый ОписаниеОповещения("УдалитьСертификатИзЛокальногоХранилищаПродолжение", ЭтотОбъект, ДанныеСертификата), - "ПолучениеСертификатов"); - -КонецПроцедуры - -Асинх Процедура УдалитьСертификатИзЛокальногоХранилищаПродолжение(МенеджерКриптографии, ДанныеСертификата) Экспорт - - Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда - Возврат; - КонецЕсли; - - СертификатКриптографии = Новый СертификатКриптографии; - Ждать СертификатКриптографии.ИнициализироватьАсинх(ПолучитьИзВременногоХранилища(ДанныеСертификата)); - - ХранилищеЛокальногоКомпьютера = Ждать МенеджерКриптографии.ПолучитьХранилищеСертификатовАсинх( - ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты, - РасположениеХранилищаСертификатовКриптографии.ДанныеКомпьютера); - - Если Ждать ХранилищеЛокальногоКомпьютера.НайтиПоОтпечаткуАсинх(СертификатКриптографии.Отпечаток) = Неопределено Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Сертификат не найден в личном хранилище компьютера. Выполните проверку заново.'")); - Возврат; - КонецЕсли; - - ТекстОшибки = ""; - Попытка - Ждать ХранилищеЛокальногоКомпьютера.УдалитьАсинх(СертификатКриптографии); - Исключение - ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если ЗначениеЗаполнено(ТекстОшибки) Тогда - ПараметрыОшибки = Новый Структура; - ПараметрыОшибки.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Удаление сертификата из локального хранилища'")); - ПараметрыОшибки.Вставить("ТекстОшибкиКлиент", ТекстОшибки); - - ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки, ЭтотОбъект); - - Возврат; - КонецЕсли; - - ПоказатьПредупреждение( - ОповещениеПослеОбработкиНавигационнойСсылкиКлассификатора("УдалитьСертификатИзЛокальногоХранилища", ДанныеСертификата), - НСтр("ru = 'Сертификат удален из личного хранилища компьютера.'")); - -КонецПроцедуры #Область УстановкаСпискаОтзыва @@ -10036,16 +10699,6 @@ Возврат; КонецЕсли; - Если ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда - ДвоичныеДанныеСертификата = Контекст.Сертификат; - ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда - ДвоичныеДанныеСертификата = Ждать Контекст.Сертификат.ВыгрузитьАсинх(); - ИначеЕсли ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда - ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Контекст.Сертификат); - Иначе - ДвоичныеДанныеСертификата = Base64Значение(Контекст.Сертификат); - КонецЕсли; - Если ЗначениеЗаполнено(Контекст.Адреса) Тогда Если ТипЗнч(Контекст.Адреса) = Тип("Строка") Тогда Адреса = СтрРазделить(Контекст.Адреса, ";"); @@ -10054,30 +10707,70 @@ Адреса = Новый Массив; КонецЕсли; - АдресаСписковОтзыва = Ждать АдресаСписковОтзыва(ДвоичныеДанныеСертификата, ОбъектКомпоненты); - Если ТипЗнч(АдресаСписковОтзыва) = Тип("Строка") Тогда - Если Не ЗначениеЗаполнено(Адреса) Тогда + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + + Если ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда + Сертификат = Контекст.Сертификат; + ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда + Сертификат = Новый СертификатКриптографии; + Ждать Сертификат.ИнициализироватьАсинх(Контекст.Сертификат); + ИначеЕсли ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда + ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Контекст.Сертификат); + Сертификат = Новый СертификатКриптографии; + Ждать Сертификат.ИнициализироватьАсинх(ДвоичныеДанныеСертификата); + Иначе + ДвоичныеДанныеСертификата = Base64Значение(Контекст.Сертификат); + Сертификат = Новый СертификатКриптографии; + Ждать Сертификат.ИнициализироватьАсинх(ДвоичныеДанныеСертификата); + КонецЕсли; + + СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата( + Сертификат, РазницаСУниверсальнымВременем()); + АдресаСписковОтзыва = СвойстваСертификата.АдресаСписковОтзыва; + Если АдресаСписковОтзыва.Количество() = 0 И Не ЗначениеЗаполнено(Адреса) Тогда + ОбработатьОшибкуУстановкиСпискаОтзыва(НСтр("ru = 'В сертификате не указаны адреса списков отзыва.'"), + Контекст); + Возврат; + КонецЕсли; + + Иначе + + Если ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда + ДвоичныеДанныеСертификата = Контекст.Сертификат; + ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда + ДвоичныеДанныеСертификата = Ждать Контекст.Сертификат.ВыгрузитьАсинх(); + ИначеЕсли ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда + ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Контекст.Сертификат); + Иначе + ДвоичныеДанныеСертификата = Base64Значение(Контекст.Сертификат); + КонецЕсли; + + СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата( + ДвоичныеДанныеСертификата); + + АдресаСписковОтзыва = Ждать АдресаСписковОтзыва(ДвоичныеДанныеСертификата, ОбъектКомпоненты); + Если ТипЗнч(АдресаСписковОтзыва) = Тип("Строка") И Не ЗначениеЗаполнено(Адреса) Тогда ОбработатьОшибкуУстановкиСпискаОтзыва(АдресаСписковОтзыва, Контекст); Возврат; КонецЕсли; + КонецЕсли; - + Для Каждого Адрес Из АдресаСписковОтзыва Цикл Если Адреса.Найти(Адрес) = Неопределено Тогда Адреса.Добавить(Адрес); КонецЕсли; КонецЦикла; - + Параметры = Новый Структура("АдресРесурса, НаименованиеОперации, АдресВнутренний"); Параметры.АдресРесурса = Адреса; Параметры.АдресВнутренний = Контекст.АдресВнутренний; Параметры.НаименованиеОперации = НСтр("ru = 'Загрузка списка отзыва сертификата'"); - + Контекст.Вставить("ОбъектКомпоненты", ОбъектКомпоненты); Контекст.Вставить("АдресРесурса", Параметры.АдресРесурса); - - СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(ДвоичныеДанныеСертификата); - Контекст.Вставить("ИдентификаторКлючаУдостоверяющегоЦентра", СвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра); + Контекст.Вставить("ИдентификаторКлючаУдостоверяющегоЦентра", + СвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра); ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.НачатьСкачиваниеФайлаНаСервере(Параметры); @@ -10377,7 +11070,7 @@ КонецПроцедуры Асинх Процедура УстановитьСертификатПослеВыбораВариантаУстановки(ПараметрыУстановкиСертификата, ОбъектКомпоненты = Неопределено) Экспорт - + Хранилище = ПараметрыУстановкиСертификата.Хранилище; ПредставлениеХранилища = ""; Если ТипЗнч(Хранилище) = Тип("Структура") Тогда @@ -10434,12 +11127,13 @@ Результат = РезультатУстановкиСертификата(); Результат.УстановкаВыполнена = Истина; + Результат.Сертификат = ПараметрыУстановкиСертификата.Сертификат; Результат.Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сертификат успешно установлен в %1.'"), ПредставлениеХранилища); ВыполнитьПослеУстановкиСертификата(Результат, Новый Структура("ОповещениеОЗавершении", ПараметрыУстановкиСертификата.ОповещениеОЗавершении)); - + КонецПроцедуры Процедура ОбработатьОшибкуУстановкиСертификата(Ошибка, Контекст) @@ -10480,7 +11174,7 @@ Функция РезультатУстановкиСертификата() - Возврат Новый Структура("УстановкаВыполнена, Сообщение", Ложь, ""); + Возврат Новый Структура("УстановкаВыполнена, Сообщение, Сертификат", Ложь, "", ""); КонецФункции @@ -10630,10 +11324,12 @@ ОбъектКомпоненты = Ждать ОбъектВнешнейКомпонентыExtraCryptoAPI(ПредложитьУстановить, ТекстПояснения); Исключение Результат.Ошибка = ТекстОшибкиНеУстановленаКомпонента(); + ЗаписатьВКэшУстановленныеКриптопровайдеры(Результат); Возврат Результат; КонецПопытки; КонецЕсли; + ТекстОшибки = ""; Попытка Ждать ОбъектКомпоненты.ПолучитьСписокОшибокАсинх(); РезультатСписок = Ждать ОбъектКомпоненты.ПолучитьСписокКриптопровайдеровАсинх(); @@ -10648,13 +11344,16 @@ РезультатСписок.Значение, ПрограммыПоИменамСТипом); Результат.ПроверкаВыполнена = Истина; Исключение - Результат.Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат Результат; + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; - Результат.Криптопровайдеры = Криптопровайдеры; + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + Результат.Ошибка = ТекстОшибки; + Иначе + Результат.Криптопровайдеры = Криптопровайдеры; + КонецЕсли; - РезультатТокены = Ждать ЭлектроннаяПодписьКлиентЛокализация.УстановленныеТокены(ОбъектКомпоненты, ПредложитьУстановить); + РезультатТокены = Ждать ЭлектроннаяПодписьКлиентЛокализация.УстановленныеТокены(ОбъектКомпоненты, ПредложитьУстановить); Результат.Токены = РезультатТокены.Токены; ЗаписатьВКэшУстановленныеКриптопровайдеры(Результат); @@ -10673,36 +11372,43 @@ СвойстваТокена.Вставить("Токен"); СвойстваТокена.Вставить("Механизмы"); СвойстваТокена.Вставить("Ошибка"); - + СвойстваТокена.Вставить("Сертификаты"); + СвойстваТокена.Вставить("Библиотеки", Новый Соответствие); + Возврат СвойстваТокена; КонецФункции // Возвращает результат проверки криптопровайдеров из кэша с обновлением в 20 минут. -Асинх Функция УстановленныеКриптопровайдерыИзКэша(ПредложитьУстановить = Ложь) +Асинх Функция УстановленныеКриптопровайдерыИзКэша(ПредложитьУстановить = Ложь) Экспорт ИмяПараметра = "ЭлектроннаяПодпись.УстановленныеКриптопровайдеры"; Если ПараметрыПриложения[ИмяПараметра] = Неопределено Или ПараметрыПриложения[ИмяПараметра].ВремяПроверки + 1200 < ТекущаяДата() // АПК:143 Должна использоваться ТекущаяДата(). Или ПараметрыПриложения[ИмяПараметра].Ошибка = ТекстОшибкиНеУстановленаКомпонента() И ПредложитьУстановить Тогда - + РезультатПроверки = Ждать УстановленныеКриптопровайдеры(Неопределено, ПредложитьУстановить); - - Если Не РезультатПроверки.ПроверкаВыполнена Тогда - ЗаписатьВКэшУстановленныеКриптопровайдеры(РезультатПроверки); - КонецЕсли; - Возврат РезультатПроверки; Иначе РезультатИзКэша = ПараметрыПриложения[ИмяПараметра]; + МассивКриптопровайдеры = Новый Массив; + Для Каждого Криптопровайдер Из РезультатИзКэша.Криптопровайдеры Цикл + МассивКриптопровайдеры.Добавить(Новый Структура(Криптопровайдер)); + КонецЦикла; + + МассивТокены = Новый Массив; + Для Каждого Токен Из РезультатИзКэша.Токены Цикл + МассивТокены.Добавить(Новый Структура(Токен)); + КонецЦикла; + Результат = Новый Структура; Результат.Вставить("ПроверкаВыполнена", РезультатИзКэша.ПроверкаВыполнена); - Результат.Вставить("Криптопровайдеры", Новый Массив(РезультатИзКэша.Криптопровайдеры)); - Результат.Вставить("Токены", Новый Массив(РезультатИзКэша.Токены)); + Результат.Вставить("Криптопровайдеры", МассивКриптопровайдеры); + Результат.Вставить("Токены", МассивТокены); Результат.Вставить("Ошибка", РезультатИзКэша.Ошибка); Возврат Результат; @@ -10721,12 +11427,25 @@ КонецПроцедуры -Процедура ЗаписатьВКэшУстановленныеКриптопровайдеры(Результат) +Процедура ЗаписатьВКэшУстановленныеКриптопровайдеры(Результат) Экспорт РезультатДляКэша = Новый Структура; РезультатДляКэша.Вставить("ПроверкаВыполнена", Результат.ПроверкаВыполнена); - РезультатДляКэша.Вставить("Криптопровайдеры", Новый ФиксированныйМассив(Результат.Криптопровайдеры)); - РезультатДляКэша.Вставить("Токены", Новый ФиксированныйМассив(Результат.Токены)); + + МассивКриптопровайдеры = Новый Массив; + Для Каждого Криптопровайдер Из Результат.Криптопровайдеры Цикл + МассивКриптопровайдеры.Добавить(Новый ФиксированнаяСтруктура(Криптопровайдер)); + КонецЦикла; + + РезультатДляКэша.Вставить("Криптопровайдеры", Новый ФиксированныйМассив(МассивКриптопровайдеры)); + + МассивТокенов = Новый Массив; + Для Каждого Токен Из Результат.Токены Цикл + МассивТокенов.Добавить(Новый ФиксированнаяСтруктура(Токен)); + КонецЦикла; + + РезультатДляКэша.Вставить("Токены", Новый ФиксированныйМассив(МассивТокенов)); + РезультатДляКэша.Вставить("Ошибка", Результат.Ошибка); РезультатДляКэша.Вставить("ВремяПроверки", ТекущаяДата()); // АПК:143 Должна использоваться ТекущаяДата(). @@ -10743,7 +11462,7 @@ КонецФункции // Продолжение процедуры ПроверитьУстановкуПрограммКриптографии -Процедура ПроверитьУстановкуПрограммКриптографииПослеПолученияУстановленных(Результат, Контекст) Экспорт +Асинх Процедура ПроверитьУстановкуПрограммКриптографииПослеПолученияУстановленных(Результат, Контекст) Экспорт РезультатПроверки = Новый Структура("КомпонентаУстановлена, Ошибка, ПроверкаВыполнена"); ЗаполнитьЗначенияСвойств(РезультатПроверки, Результат); @@ -10770,23 +11489,14 @@ ПараметрыОбработки.Вставить("ЭтоСервер", Истина); ЭлектроннаяПодписьСлужебныйКлиентСервер.ОбработатьРезультатПроверкиПрограмм(Результат.КриптопровайдерыНаСервере, РезультатПроверки.ПрограммыНаСервере, РезультатПроверки.ВозможенКонфликтНаСервере, ПараметрыОбработки, ЕстьПроверяемыеПрограммы); - - // Локализация - Если Контекст.ПредлагатьУстановитьПрограмму - И РезультатПроверки.ПроверкаВыполнена - И Не ЕстьПроверяемыеПрограммы - И Не Контекст.ЭтоПовторнаяПроверка Тогда - - Оповещение = Новый ОписаниеОповещения("ПослеУстановкиКриптопровайдера", ЭтотОбъект, Контекст); - ОткрытьФорму("Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаПрограммКриптопровайдеров",, - Контекст.Форма,,,,Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - + СтандартнаяОбработка = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПриПродолженииПроверкиУстановленныхПрограммКриптографии( + Контекст, РезультатПроверки, ЕстьПроверяемыеПрограммы); + + Если Не СтандартнаяОбработка Тогда Возврат; КонецЕсли; - // Конец Локализация - ВыполнитьОбработкуОповещения(Контекст.Оповещение, РезультатПроверки); КонецПроцедуры @@ -10808,335 +11518,7 @@ КонецФункции -// Локализация -#Область УстановкаКриптопровайдеровЛокализация - -#Область УстановитьCryptoPRO - -Процедура УстановитьКриптоПро(Форма, ОповещениеОЗавершении, ВходящийКонтекст) Экспорт - - Если ЗначениеЗаполнено(ВходящийКонтекст) Тогда - ПослеСохраненияФайловДистрибутива(Истина, ВходящийКонтекст); - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда - Контекст = Новый Структура; - Контекст.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении); - Контекст.Вставить("ВладелецФормы", Форма.ВладелецФормы); - Контекст.Вставить("Форма", Форма); - Контекст.Вставить("ИмяПрограммы", ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро()); - Оповещение = Новый ОписаниеОповещения("УстановитьCryptoProCSPПослеВводаРегистрационныхДанных", - ЭлектроннаяПодписьСлужебныйКлиент, Контекст); - - ОткрытьФорму( - "Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаCryptoProCSPРегистрационныеДанные",, - Форма,,,, Оповещение); - Иначе - - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Автоматическая установка %1 возможна только на операционных системах семейства Windows. - |Вы можете загрузить дистрибутив с %2 и установить приложение самостоятельно.'"), - ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро(), - "www.cryptopro.ru"); - ОбработатьОшибкуУстановкиПрограммыКриптографии(ОписаниеОшибки, ОповещениеОЗавершении); - - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьCryptoProCSPПослеВводаРегистрационныхДанных(РегистрационныеДанные, ВходящийКонтекст) Экспорт - - ОповещениеПослеСозданияКаталога = Новый ОписаниеОповещения( - "УстановитьКриптопровайдерПослеСозданияВременногоКаталога", ЭтотОбъект, ВходящийКонтекст); - - ВходящийКонтекст.Вставить("ПослеСозданияВременногоКаталога", ОповещениеПослеСозданияКаталога); - - Если ЗначениеЗаполнено(РегистрационныеДанные) И ТипЗнч(РегистрационныеДанные) = Тип("Структура") Тогда - - ВходящийКонтекст.Вставить("РегистрационныеДанные", РегистрационныеДанные); - Оповещение = Новый ОписаниеОповещения( - "УстановитьКриптопровайдерПослеПолученияДистрибутива", ЭтотОбъект, ВходящийКонтекст); - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ВходящийКонтекст.Форма); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - - ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.ПолучитьДистрибутивCryptoProCSP( - ВходящийКонтекст.РегистрационныеДанные); - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); - Иначе - ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Пользователь прервал операцию'"), ВходящийКонтекст); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область УстановитьVipNet - -Процедура УстановитьVipNet(Форма, ОповещениеОЗавершении, ВходящийКонтекст) Экспорт - - Если ЗначениеЗаполнено(ВходящийКонтекст) Тогда - ПослеСохраненияФайловДистрибутива(Истина, ВходящийКонтекст); - Возврат; - КонецЕсли; - - СистемнаяИнформация = Новый СистемнаяИнформация; - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - - Контекст = Новый Структура; - Контекст.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении); - Контекст.Вставить("ВладелецФормы", Форма.ВладелецФормы); - Контекст.Вставить("Форма", Форма); - Контекст.Вставить("ИмяПрограммы", ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); - - Оповещение = Новый ОписаниеОповещения("УстановитьViPNetCSPПослеВводаРегистрационныхДанных", - ЭлектроннаяПодписьСлужебныйКлиент, Контекст); - - ОткрытьФорму( - "Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаViPNetCSPРегистрационныеДанные",, - Форма,,,, Оповещение); - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка %1 возможна только на операционных системах семейства Windows.'"), - ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); - ОбработатьОшибкуУстановкиПрограммыКриптографии(ОписаниеОшибки, ОповещениеОЗавершении); - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьViPNetCSPПослеВводаРегистрационныхДанных(РегистрационныеДанные, ВходящийКонтекст) Экспорт - - Если РегистрационныеДанные = КодВозвратаДиалога.Отмена - Или РегистрационныеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - СистемнаяИнформация = Новый СистемнаяИнформация; - - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда - РегистрационныеДанные.Вставить("Разрядность", 32); - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - РегистрационныеДанные.Вставить("Разрядность", 64); - Иначе - Возврат; - КонецЕсли; - - ОповещениеПослеСозданияКаталога = Новый ОписаниеОповещения( - "УстановитьКриптопровайдерПослеСозданияВременногоКаталога", ЭтотОбъект, ВходящийКонтекст); - - ВходящийКонтекст.Вставить("ПослеСозданияВременногоКаталога", ОповещениеПослеСозданияКаталога); - - Если ЗначениеЗаполнено(РегистрационныеДанные) И ТипЗнч(РегистрационныеДанные) = Тип("Структура") Тогда - ВходящийКонтекст.Вставить("РегистрационныеДанные", РегистрационныеДанные); - Оповещение = Новый ОписаниеОповещения( - "УстановитьКриптопровайдерПослеПолученияДистрибутива", ЭтотОбъект, ВходящийКонтекст); - - ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ВходящийКонтекст.Форма); - ПараметрыОжидания.ВыводитьОкноОжидания = Истина; - - ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.ПолучитьДистрибутивViPNetCSP(ВходящийКонтекст.РегистрационныеДанные); - ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); - Иначе - ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Пользователь прервал операцию'"), ВходящийКонтекст); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -Процедура УстановитьSignalCOM() Экспорт - - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://www.signal-com.ru/products/crypt/signal-com-csp/"); - -КонецПроцедуры - -// Параметры: -// ДлительнаяОперация - см. ДлительныеОперацииКлиент.НовыйРезультатДлительнойОперации -// ВходящийКонтекст - Структура -// -Процедура УстановитьКриптопровайдерПослеПолученияДистрибутива(ДлительнаяОперация, ВходящийКонтекст) Экспорт - - Если ДлительнаяОперация = Неопределено Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вызов API сервиса выдачи дистрибутивов %1 не был завершен штатно.'"), ВходящийКонтекст.ИмяПрограммы); - ОбработатьОшибкуУстановкиПрограммыКриптографии(ОписаниеОшибки, ВходящийКонтекст); - Возврат; - КонецЕсли; - - Если ДлительнаяОперация.Статус = "Ошибка" Тогда - СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(ДлительнаяОперация.ИнформацияОбОшибке); - Возврат; - КонецЕсли; - - РезультатПолученияДистрибутива = ЭлектроннаяПодписьСлужебныйВызовСервера.РезультатПолученияДистрибутиваКриптопровайдера( - ДлительнаяОперация, ВходящийКонтекст.Форма.УникальныйИдентификатор); - Если ЗначениеЗаполнено(РезультатПолученияДистрибутива.Ошибка) Тогда - ОбработатьОшибкуУстановкиПрограммыКриптографии(РезультатПолученияДистрибутива.Ошибка, ВходящийКонтекст); - Возврат; - КонецЕсли; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ВходящийКонтекст, РезультатПолученияДистрибутива.ДанныеДистрибутива); - ФайловаяСистемаКлиент.СоздатьВременныйКаталог(ВходящийКонтекст.ПослеСозданияВременногоКаталога); - -КонецПроцедуры - -Процедура УстановитьКриптопровайдерПослеСозданияВременногоКаталога(ИмяКаталогаВременныхФайлов, ВходящийКонтекст) Экспорт - - ИмяКаталогаВременныхФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталогаВременныхФайлов); - ВходящийКонтекст.Вставить("ВременныйКаталог", ИмяКаталогаВременныхФайлов); - - Оповещение = Новый ОписаниеОповещения("ПослеСохраненияФайловДистрибутива", ЭтотОбъект, ВходящийКонтекст); - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); - ПараметрыСохранения.Интерактивно = Ложь; - ПараметрыСохранения.Диалог.Каталог = ИмяКаталогаВременныхФайлов; - ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, ВходящийКонтекст.Дистрибутив, ПараметрыСохранения); - -КонецПроцедуры - -Процедура ПослеСохраненияФайловДистрибутива(ПолученныеФайлы, ВходящийКонтекст) Экспорт - - Если ПолученныеФайлы = Неопределено Тогда - ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Не удалось сохранить на компьютер файлы дистрибутива'"), - ВходящийКонтекст); - Возврат; - КонецЕсли; - - ВходящийКонтекст.Вставить("ФайлыДистрибутиваПолучены", Истина); - - Если ВходящийКонтекст.РегистрационныеДанные.ВыполнятьКонтрольЦелостности Тогда - ПараметрыФормы = Новый Структура; - - ПараметрыФормы.Вставить("Дистрибутив", ВходящийКонтекст.ВременныйКаталог + ВходящийКонтекст.ИмяФайлаДистрибутива); - ПараметрыФормы.Вставить("Версия", ВходящийКонтекст.Версия); - ПараметрыФормы.Вставить("ИмяПрограммы", ВходящийКонтекст.ИмяПрограммы); - ПараметрыФормы.Вставить("КонтрольнаяСумма", ВходящийКонтекст.КонтрольнаяСумма); - ПараметрыФормы.Вставить("КомандаЗапуска", ВходящийКонтекст.КомандаЗапуска); - - ОткрытьФорму( - "Обработка.ПрограммыЭлектроннойПодписиИШифрования.Форма.УстановкаКриптопровайдераИнформацияОДистрибутиве", - ПараметрыФормы, , , , , - Новый ОписаниеОповещения("УстановитьКриптопровайдерПослеПолученияПодтвержденияНаУстановку", ЭтотОбъект, - ВходящийКонтекст)); - Иначе - УстановитьКриптопровайдерПослеПолученияПодтвержденияНаУстановку(Истина, ВходящийКонтекст); - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьКриптопровайдерПослеПолученияПодтвержденияНаУстановку(Результат, ВходящийКонтекст) Экспорт - - Если Результат = Истина Тогда - - ЗапуститьПриложениеНаКлиенте(ВходящийКонтекст.КомандаЗапуска, ВходящийКонтекст.ВременныйКаталог, - Истина, Ложь, ВходящийКонтекст); - Иначе - - ОбработатьОшибкуУстановкиПрограммыКриптографии(НСтр("ru = 'Пользователь прервал операцию'"), ВходящийКонтекст); - - КонецЕсли; - -КонецПроцедуры - -Процедура ОбработатьОшибкуУстановкиПрограммыКриптографии(Ошибка, ВходящийКонтекст) - - Если ТипЗнч(Ошибка) = Тип("ИнформацияОбОшибке") Тогда - СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Ошибка); - Возврат; - КонецЕсли; - - РезультатВыполнения = Новый Структура("Выполнено", Ложь); - РезультатВыполнения.Вставить("ОписаниеОшибки", Ошибка); - - Если ТипЗнч(ВходящийКонтекст) = Тип("Структура") - И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ВходящийКонтекст,"ФайлыДистрибутиваПолучены", Ложь) Тогда - РезультатВыполнения.Вставить("ВходящийКонтекст", ВходящийКонтекст); - КонецЕсли; - - Если ТипЗнч(ВходящийКонтекст) = Тип("Структура") И ВходящийКонтекст.ОповещениеОЗавершении <> Неопределено Тогда - - ВыполнитьОбработкуОповещения(ВходящийКонтекст.ОповещениеОЗавершении, РезультатВыполнения); - - ИначеЕсли ТипЗнч(ВходящийКонтекст) = Тип("ОписаниеОповещения") Тогда - - РезультатВыполнения = Новый Структура("Выполнено", Ложь); - РезультатВыполнения.Вставить("ОписаниеОшибки", Ошибка); - ВыполнитьОбработкуОповещения(ВходящийКонтекст, РезультатВыполнения); - - Иначе - - ПоказатьПредупреждение(Неопределено, Ошибка,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка %1'"), ВходящийКонтекст.ИмяПрограммы)); - - КонецЕсли; - -КонецПроцедуры - -#Область ЗапуститьПриложениеНаКлиенте - -Процедура ЗапуститьПриложениеНаКлиенте(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, ВыводитьСообщения, ВходящийКонтекст) - - Оповещение = Новый ОписаниеОповещения( - "ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения", ЭтотОбъект, ВходящийКонтекст, - "ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения", ЭтотОбъект); - - ПараметрыЗапуска = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); - ПараметрыЗапуска.Оповещение = Оповещение; - ПараметрыЗапуска.ТекущийКаталог = ТекущийКаталог; - ПараметрыЗапуска.ДождатьсяЗавершения = ДождатьсяЗавершения; - ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Истина; - - ФайловаяСистемаКлиент.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапуска); - -КонецПроцедуры - -Процедура ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения(КодВозврата, ВходящийКонтекст) Экспорт - - Если ТипЗнч(ВходящийКонтекст.ОповещениеОЗавершении) = Тип("ОписаниеОповещения") Тогда - РезультатВыполнения = Новый Структура; - РезультатВыполнения.Вставить("Выполнено", Истина); - РезультатВыполнения.Вставить("ОписаниеОшибки", ""); - - ВыполнитьОбработкуОповещения( - ВходящийКонтекст.ОповещениеОЗавершении, - РезультатВыполнения); - КонецЕсли; - -КонецПроцедуры - -Процедура ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения(ИнформацияОбОшибке, СтандартнаяОбработка, ВходящийКонтекст) Экспорт - - СтандартнаяОбработка = Ложь; - - ОписаниеОшибки = НСтр("ru = 'Не удалось открыть файл %1. - |Возможно файл уже открыт.'"); - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибки, ВходящийКонтекст.СтрокаКоманды); - ОбщегоНазначенияКлиент.СообщитьПользователю(ОписаниеОшибки); - - РезультатВыполнения = Новый Структура; - РезультатВыполнения.Вставить("Выполнено", Ложь); - РезультатВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки); - РезультатВыполнения.Вставить("ВходящийКонтекст", ВходящийКонтекст); - - ВыполнитьОбработкуОповещения( - ВходящийКонтекст.ОповещениеОЗавершении, - РезультатВыполнения); - -КонецПроцедуры - -#КонецОбласти - -Процедура ПослеУстановкиКриптопровайдера(Результат, Контекст) Экспорт - - Контекст.Вставить("ЭтоПовторнаяПроверка", Истина); - ПроверитьУстановкуПрограммКриптографии(Контекст.Форма, Контекст, Контекст.Оповещение); - -КонецПроцедуры - -#КонецОбласти - -// Конец Локализация #КонецОбласти @@ -11167,7 +11549,7 @@ ДанныеСообщения.Тема = ПараметрыОтправкиВТехподдержку.Тема; ДанныеСообщения.Получатель = ПараметрыОтправкиВТехподдержку.Получатель; ДанныеСообщения.Сообщение = ПараметрыОтправкиВТехподдержку.Сообщение; - + Вложения = Новый Массив; Для Каждого Вложение Из ПараметрыОтправкиВТехподдержку.Вложения Цикл Если ТипЗнч(Вложение.Данные) = Тип("ДвоичныеДанные") Тогда @@ -11318,12 +11700,24 @@ Процедура ОбработатьНавигационнуюСсылкуКлассификатора(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка, ДополнительныеДанные = Неопределено) Экспорт СтандартнаяОбработка = Ложь; + ПродолжитьОбработкуНавигационнойСсылкиКлассификатора(Элемент, НавигационнаяСсылкаФорматированнойСтроки, ДополнительныеДанные); + +КонецПроцедуры + +Асинх Процедура ПродолжитьОбработкуНавигационнойСсылкиКлассификатора(Элемент, НавигационнаяСсылкаФорматированнойСтроки, ДополнительныеДанные) Параметры = ДополнительныеДанныеДляКлассификатораОшибок(); Если ТипЗнч(ДополнительныеДанные) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(Параметры, ДополнительныеДанные); КонецЕсли; + ПродолжитьОбработку = Ждать ЭлектроннаяПодписьКлиентЛокализация.ПриОбработкеНавигационнойСсылкиКлассификатора(Элемент, + НавигационнаяСсылкаФорматированнойСтроки, Параметры); + + Если Не ПродолжитьОбработку Тогда + Возврат; + КонецЕсли; + Если НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьСертификат" Тогда Если ЗначениеЗаполнено(Параметры.Сертификат) И ТипЗнч(Параметры.Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда @@ -11339,24 +11733,13 @@ ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ПодатьЗаявлениеНаСертификат" Тогда + ПараметрыСоздания = Новый Структура; + ПараметрыСоздания.Вставить("СоздатьЗаявление", Истина); Если ЗначениеЗаполнено(Параметры.Сертификат) И ТипЗнч(Параметры.Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда - ПараметрыСоздания = Новый Структура; - ПараметрыСоздания.Вставить("СоздатьЗаявление", Истина); ПараметрыСоздания.Вставить("СертификатОснование", Параметры.Сертификат); - ДобавитьСертификат(ПараметрыСоздания); КонецЕсли; - - // Локализация - - ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ДобавитьУдостоверяющийЦентрВСписокРазрешенныхНеаккредитованных" Тогда - - Если ЗначениеЗаполнено(Параметры.Сертификат) И ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаПроверкаПоСпискуУЦ Тогда - ПараметрыСоздания = Новый Структура; - ПараметрыСоздания.Вставить("Сертификат", Параметры.Сертификат); - ОткрытьФорму("ОбщаяФорма.РазрешенныеНеаккредитованныеУЦ", ПараметрыСоздания, Элемент); - КонецЕсли; - // Конец Локализация - + ДобавитьСертификат(ПараметрыСоздания); + ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "УстановитьСписокОтзываСертификата" Тогда Если ЗначениеЗаполнено(Параметры.ДанныеСертификата) Тогда @@ -11394,12 +11777,6 @@ УстановитьСертификат(ПараметрыУстановкиСертификата); КонецЕсли; - ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "УдалитьСертификатИзЛокальногоХранилища" Тогда - - Если ЗначениеЗаполнено(Параметры.ДанныеСертификата) Тогда - УдалитьСертификатИзЛокальногоХранилища(Параметры.ДанныеСертификата); - КонецЕсли; - ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ДиагностикаСерверовМетокВремениСервер" Тогда ДиагностикаСерверовМетокВремени("Сервер"); @@ -11419,15 +11796,23 @@ Оповещение = Новый ОписаниеОповещения("ОповеститьОбУспешномПодключенииКомпоненты", ЭтотОбъект); ВыполнитьПослеПроверкиРасширенияИКомпоненты(Оповещение); + + ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылкаФорматированнойСтроки, ЭлектроннаяПодписьСлужебныйКлиентСервер.ДействиеУстановитьБиблиотекиДляТокенов()) Тогда + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ВидТокена", Прав(НавигационнаяСсылкаФорматированнойСтроки, + СтрДлина(НавигационнаяСсылкаФорматированнойСтроки) - СтрДлина(ЭлектроннаяПодписьСлужебныйКлиентСервер.ДействиеУстановитьБиблиотекиДляТокенов()))); + ПараметрыОткрытия.Вставить("ТолькоУстановкаТокенов", Истина); + ОткрытьФормуУстановкиПрограммКриптопровайдеров(ПараметрыОткрытия); + ИначеЕсли СтрНайти(НавигационнаяСсылкаФорматированнойСтроки, "http") Тогда ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки, ); ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылкаФорматированнойСтроки, "e1cib") Тогда - СтандартнаяОбработка = Истина; + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки); Иначе ПоказатьПредупреждение(, НСтр("ru = 'Действие будет доступно в следующих обновлениях приложения'")); КонецЕсли; - + КонецПроцедуры Функция ОповещениеПослеОбработкиНавигационнойСсылкиКлассификатора(НавигационнаяСсылка, ПредметОповещения) @@ -11444,7 +11829,8 @@ Или НавигационнаяСсылка = "УстановитьСертификатВКонтейнер" Или НавигационнаяСсылка = "УстановитьКорневойСертификат" Или НавигационнаяСсылка = "УстановитьСписокОтзываСертификата" Тогда - Если Результат.УстановкаВыполнена <> Истина Тогда + + Если Результат.УстановкаВыполнена <> Истина Тогда ПараметрыФормы = Новый Структура; Если НавигационнаяСсылка = "УстановитьСписокОтзываСертификата" Тогда @@ -11457,7 +11843,7 @@ ПараметрыФормы.Вставить("ПоказатьТребуетсяПомощь", Истина); ПараметрыФормы.Вставить("ПоказатьИнструкцию", Истина); - ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы, ПараметрыФормы); + ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыФормы); Возврат; КонецЕсли; @@ -11909,7 +12295,7 @@ РезультатСтруктура.ПодписьВерна = Ложь; КонецЕсли; - РезультатСтруктура.ПодписьМатематическиВерна = Не РезультатСтруктура.ТребуетсяПроверка; + РезультатСтруктура.ПодписьМатематическиВерна = Не РезультатСтруктура.ТребуетсяПроверка Или НеверныйХеш = Ложь; Возврат РезультатСтруктура; КонецЕсли; @@ -12086,5 +12472,129 @@ КонецФункции -#КонецОбласти +// Только для внутреннего использования. +// +// Возвращаемое значение: +// Структура +// +Функция НовыйКомпонентыРаботыСКриптографией() Экспорт + + Результат = Новый Структура; + Результат.Вставить("КриптопровайдерУстановлен", Истина); + Результат.Вставить("РасширениеРаботыС1СПредприятиемУстановлено", Истина); + Результат.Вставить("РасширениеРаботыСКриптографиейУстановлено", Истина); + Результат.Вставить("КомпонентаExtraCryptoAPIУстановлена", Истина); + + Возврат Результат; + +КонецФункции +// Только для внутреннего использования. +// +// Параметры: +// Компоненты - см. НовыйКомпонентыРаботыСКриптографией +// +// Возвращаемое значение: +// Булево +// +Асинх Функция ТребуетсяУстановкаДополнительныхКомпонент(Компоненты) Экспорт + + Результат = Ложь; + + // Проверка установки расширения для работы с 1С:Предприятием + Если Компоненты.РасширениеРаботыС1СПредприятиемУстановлено Тогда + Компоненты.РасширениеРаботыС1СПредприятиемУстановлено = Ждать ПодключитьРасширениеРаботыСФайламиАсинх(); + Результат = Результат Или Не Компоненты.РасширениеРаботыС1СПредприятиемУстановлено; + КонецЕсли; + + // Проверка установки расширения для работы с криптографией + Если Компоненты.РасширениеРаботыСКриптографиейУстановлено Тогда + Компоненты.РасширениеРаботыСКриптографиейУстановлено = Ждать ПодключитьРасширениеРаботыСКриптографиейАсинх(); + Результат = Результат Или Не Компоненты.РасширениеРаботыСКриптографиейУстановлено; + КонецЕсли; + + // Проверка установки расширения для работы с компонентой ExtraCryptoAPI + Если Компоненты.КомпонентаExtraCryptoAPIУстановлена Тогда + + ПараметрыПодключения = ОбщегоНазначенияКлиент.ПараметрыПодключенияКомпоненты(); + ПараметрыПодключения.ПредложитьУстановить = Ложь; + ПараметрыПодключения.ПредложитьЗагрузить = Ложь; + ОписаниеКомпоненты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеКомпоненты(); + + РезультатПодключенияКомпоненты = Ждать ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакетаАсинх( + ОписаниеКомпоненты.ИмяОбъекта, + ОписаниеКомпоненты.ПолноеИмяМакета, + ПараметрыПодключения); + Компоненты.КомпонентаExtraCryptoAPIУстановлена = РезультатПодключенияКомпоненты.Подключено; + Результат = Результат Или Не Компоненты.КомпонентаExtraCryptoAPIУстановлена; + + КонецЕсли; + + ЭлектроннаяПодписьКлиентЛокализация.ПриПроверкеУстановкиПрограммКриптографии(Результат, Компоненты); + + Возврат Результат; + +КонецФункции + +// Только для внутреннего использования. +// Проверяет в веб-клиенте установку дополнительных компонент для работы с электронной подписью, сначала - расширение +// работы с 1С:Предприятием. Если Расширение работы с 1С:Предприятием не установлено, то производится проверка +// установки других компонент. Если не установлены хотя бы две компоненты, то открывает форму +// НачалоРаботыСЭлектроннойПодписью для установки неустановленных компонент. Если не установлен только один компонент, +// все компоненты установлены или контекст вызова не из веб-клиента - продолжается алгоритм вызывающего кода. +// +// Параметры: +// Оповещение - ОписаниеОповещения, Неопределено - оповещение закрытия формы НачалоРаботыСЭлектроннойПодписью. +// +// Возвращаемое значение: +// Булево - Если требуется установка дополнительных компонент, возвращается Истина. +// +Асинх Функция ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(Оповещение = Неопределено) Экспорт + +#Если ВебКлиент Тогда + РасширениеРаботыС1СПредприятиемУстановлено = Ждать ПодключитьРасширениеРаботыСФайламиАсинх(); + Если Не РасширениеРаботыС1СПредприятиемУстановлено Тогда + ТребуетсяУстановка = Истина; + ТребуетсяУстановкаДополнительныхКомпонент = Ложь; + Компоненты = НовыйКомпонентыРаботыСКриптографией(); + Компоненты.РасширениеРаботыС1СПредприятиемУстановлено = Ложь; + + ТребуетсяУстановкаДополнительныхКомпонент = Ждать ТребуетсяУстановкаДополнительныхКомпонент(Компоненты); + + Если ТребуетсяУстановкаДополнительныхКомпонент Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Компоненты", Компоненты); + ПараметрыФормы.Вставить("ИмяТребуемойКомпоненты", "РасширениеРаботыС1СПредприятием"); + ОткрытьФорму("ОбщаяФорма.НачалоРаботыСЭлектроннойПодписью", ПараметрыФормы, ЭтотОбъект, + , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат Истина; + КонецЕсли; + КонецЕсли; +#Иначе + Возврат Ложь; +#КонецЕсли + + Возврат Ложь; + +КонецФункции + +Процедура ПослеПроверкиУстановкиПрограммКриптографии(Результат, Компоненты) Экспорт + + Если Результат.ПроверкаВыполнена Тогда + + Компоненты.КриптопровайдерУстановлен = Результат.Токены.Количество() > 0; + + Если Не Компоненты.КриптопровайдерУстановлен Тогда + Для Каждого Криптопровайдер Из Результат.Программы Цикл + Если ЗначениеЗаполнено(Криптопровайдер.Программа) И Не Компоненты.КриптопровайдерУстановлен Тогда + Компоненты.КриптопровайдерУстановлен = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index 463a0e255..ebdc7894c 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -306,10 +306,32 @@ КонецФункции +// Запрещен доступ к интернет сервисам текст сообщения. +// +// Возвращаемое значение: +// Строка +// +Функция ЗапрещенДоступКИнтернетСервисамТекстСообщения() Экспорт + Возврат НСтр("ru = 'Доступ к Интернет-сервисам электронной подписи из приложения запрещен администратором (""Общие настройки"" - ""Электронная подпись"" - ""Разрешить доступ к Интернет-сервисам"").'"); +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции + +Функция ОшибкаЗагрузкиБиблиотекиТокена(ТекстОшибки) Экспорт + + Результат = Ложь; + ЭлектроннаяПодписьКлиентСерверЛокализация.ПриОпределенииОшибкиЗагрузкиБиблиотекТокена(ТекстОшибки, Результат); + Возврат Результат; + +КонецФункции + +Функция ДействиеУстановитьБиблиотекиДляТокенов() Экспорт + Возврат "УстановитьБиблиотекиДляТокенов"; +КонецФункции + Функция ЭтоЗаменаСертификата(СвойстваНового, СвойстваСтарого) Экспорт Результат = Неопределено; @@ -516,10 +538,9 @@ Возврат СвойстваСертификата; Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при чтении расширенных свойств сертификата: - | %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + НСтр("ru = 'Невозможно получить расширенные свойства сертификата: %1'"), + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецФункции @@ -535,7 +556,7 @@ Исключение Результат.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при получении цепочки сертификатов %1'"), + НСтр("ru = 'Невозможно получить цепочку сертификатов %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Результат; @@ -572,7 +593,7 @@ Криптопровайдеры = ВсеКриптопровайдеры.Получить("providers"); Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при чтении свойств криптопровайдеров: + НСтр("ru = 'Невозможно получить свойства криптопровайдеров: | %1'"), ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -747,6 +768,7 @@ СвойстваОшибки.Вставить("Программа", ПустаяПрограмма); СвойстваОшибки.Вставить("НетАлгоритма", Ложь); СвойстваОшибки.Вставить("НеУказанПуть", Ложь); + СвойстваОшибки.Вставить("Токен"); Возврат СвойстваОшибки; @@ -793,7 +815,6 @@ КонецФункции - // Только для внутреннего использования. // // Параметры: @@ -1261,7 +1282,7 @@ Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры); Исключение Сертификат = Неопределено; - Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'"); + Контекст.ЗаголовокФормы = НСтр("ru = 'Невозможно добавить сертификат'"); Ошибка.Общая = Истина; Ошибка.ЗаголовокОшибки = НСтр("ru = 'Не удалось записать сертификат по причине:'"); @@ -1316,6 +1337,9 @@ // ОписаниеОшибок - см. НовоеОписаниеОшибок // ОписаниеПрограммы - Структура: // * Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования +// - Строка - представление токена +// Токен - см. ЭлектроннаяПодписьСлужебныйКлиент.НовыеСвойстваТокена +// - Неопределено // Операция - Строка // ТекстОшибки - Строка // ЭтоПолноправныйПользователь - Булево @@ -1329,7 +1353,12 @@ СвойстваОшибки = НовыеСвойстваОшибки(); СвойстваОшибки.Описание = ТекстОшибки; - СвойстваОшибки.Программа = ОписаниеПрограммы.Ссылка; + Если ТипЗнч(ОписаниеПрограммы.Ссылка) = Тип("Строка") Тогда + СвойстваОшибки.Программа = ОписаниеПрограммы.Ссылка; + СвойстваОшибки.Токен = ОписаниеПрограммы.Токен; + Иначе + СвойстваОшибки.Программа = ОписаниеПрограммы.Ссылка; + КонецЕсли; Если Не ПустыеДанные Тогда СвойстваОшибки.ИзИсключения = Истина; @@ -1476,6 +1505,7 @@ ТолькоОтпечатки = Ложь; ВОблачномСервисе = Ложь; ОблачнаяПодпись = Ложь; + НаТокене = Ложь; Если Параметры <> Неопределено Тогда Если Параметры.Свойство("ТолькоОтпечатки") Тогда @@ -1487,6 +1517,9 @@ Если Параметры.Свойство("ОблачнаяПодпись") Тогда ОблачнаяПодпись = Параметры.ОблачнаяПодпись; КонецЕсли; + Если Параметры.Свойство("НаТокене") Тогда + НаТокене = Параметры.НаТокене; + КонецЕсли; КонецЕсли; Если ТолькоОтпечатки Тогда @@ -1501,7 +1534,7 @@ Отпечаток = Base64Строка(ТекущийСертификат.Отпечаток); ДатыСертификата = ДатыСертификата(ТекущийСертификат, РазницаСУниверсальнымВременем); - Если ДатыСертификата.ДатаОкончания <= ТекущаяДатаСеанса Тогда + Если ДатыСертификата.ДействителенДо <= ТекущаяДатаСеанса Тогда Если Не БезОтбора Тогда Продолжить; // Пропуск просроченных сертификатов. КонецЕсли; @@ -1522,6 +1555,8 @@ ТипРазмещения = 3; ИначеЕсли ВОблачномСервисе Тогда ТипРазмещения = 4; + ИначеЕсли НаТокене Тогда + ТипРазмещения = 5; Иначе ТипРазмещения = 2; КонецЕсли; @@ -1530,26 +1565,28 @@ Если ВОблачномСервисе Тогда Строка.ВОблачномСервисе = Истина; КонецЕсли; + Если НаТокене Тогда + Строка.НаТокене = Истина; + КонецЕсли; Продолжить; // Пропуск уже добавленных на клиенте. КонецЕсли; КонецЕсли; СостояниеСертификата = 2; - Если ДатыСертификата.ДатаОкончания <= ТекущаяДатаСеанса Тогда + Если ДатыСертификата.ДействителенДо <= ТекущаяДатаСеанса Тогда СостояниеСертификата = 4; - ИначеЕсли ДатыСертификата.ДатаОкончания <= ТекущаяДатаСеанса + 30*24*60*60 Тогда + ИначеЕсли ДатыСертификата.ДействителенДо <= ТекущаяДатаСеанса + 30*24*60*60 Тогда СостояниеСертификата = 3; КонецЕсли; СвойстваСертификата = Новый Структура; СвойстваСертификата.Вставить("Отпечаток", Отпечаток); - СвойстваСертификата.Вставить("Представление", - ПредставлениеСертификата(ТекущийСертификат, РазницаСУниверсальнымВременем)); + СвойстваСертификата.Вставить("Представление", ПредставлениеСертификата( + Новый Структура("Сертификат, ДействителенДо", ТекущийСертификат, ДатыСертификата.ДействителенДо))); СвойстваСертификата.Вставить("КемВыдан", ПредставлениеИздателя(ТекущийСертификат)); СвойстваСертификата.Вставить("ТипРазмещения", ТипРазмещения); СвойстваСертификата.Вставить("СостояниеСертификата", СостояниеСертификата); - Если ТипЗнч(Таблица) = Тип("Массив") Тогда Таблица.Добавить(СвойстваСертификата); Иначе @@ -1559,6 +1596,8 @@ СвойстваСертификата.Вставить("ВОблачномСервисе", Истина); ИначеЕсли НаСервере Тогда СвойстваСертификата.Вставить("НаСервере", Истина); + ИначеЕсли НаТокене Тогда + СвойстваСертификата.Вставить("НаТокене", Истина); КонецЕсли; ЗаполнитьЗначенияСвойств(Таблица.Добавить(), СвойстваСертификата); КонецЕсли; @@ -1578,7 +1617,7 @@ Если ТипЗнч(ТекущаяДатаСеанса) = Тип("Дата") Тогда ДатыСертификата = ДатыСертификата(ТекущийСертификат, РазницаСУниверсальнымВременем); - Если ДатыСертификата.ДатаОкончания <= ТекущаяДатаСеанса Тогда + Если ДатыСертификата.ДействителенДо <= ТекущаяДатаСеанса Тогда Продолжить; // Пропуск просроченных сертификатов. КонецЕсли; КонецЕсли; @@ -2459,7 +2498,7 @@ ДатыСертификата = ДатыСертификата(Сертификат, РазницаСУниверсальнымВременем); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1, до %2'"), ПредставлениеСубъекта(Сертификат), - Формат(ДатыСертификата.ДатаОкончания, "ДФ=MM.yyyy")); + Формат(ДатыСертификата.ДействителенДо, "ДФ=MM.yyyy")); КонецЕсли; КонецЕсли; @@ -2528,47 +2567,105 @@ КонецФункции +// Свойства сертификата. +// +// Параметры: +// Сертификат - СертификатКриптографии - также может быть структура со свойствами как у сертификата криптографии. +// РазницаСУниверсальнымВременем - Число +// ДвоичныеДанныеСертификата - ДвоичныеДанные +// +// Возвращаемое значение: +// Структура: +// * Отпечаток - Строка +// * СерийныйНомер - ДвоичныеДанные +// * КомуВыдан - Строка +// * КемВыдан - Строка +// * Подписание - Булево +// * Шифрование - Булево +// * ДатаНачала - Дата +// * ДатаОкончания - Дата +// * ДатаНачалаЗакрытогоКлюча - Дата +// * ДатаОкончанияЗакрытогоКлюча - Дата +// * ДействителенДо - Дата +// * ИдентификаторКлючаУдостоверяющегоЦентра - Строка +// * СодержитВстроеннуюЛицензиюКриптоПро - Булево +// * АлгоритмПодписи - Строка +// * АлгоритмОткрытогоКлюча - Строка +// * АдресаСписковОтзыва - Массив +// * Назначение - Строка +// * Представление - Строка +// Функция СвойстваСертификата(Сертификат, РазницаСУниверсальнымВременем, ДвоичныеДанныеСертификата = Неопределено) Экспорт - ДатыСертификата = ДатыСертификата(Сертификат, РазницаСУниверсальнымВременем); - Свойства = Новый Структура; Свойства.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); Свойства.Вставить("СерийныйНомер", Сертификат.СерийныйНомер); Свойства.Вставить("КомуВыдан", ПредставлениеСубъекта(Сертификат)); Свойства.Вставить("КемВыдан", ПредставлениеИздателя(Сертификат)); - Свойства.Вставить("ДатаНачала", ДатыСертификата.ДатаНачала); - Свойства.Вставить("ДатаОкончания", ДатыСертификата.ДатаОкончания); - Свойства.Вставить("Назначение", ПолучитьНазначение(Сертификат)); Свойства.Вставить("Подписание", Сертификат.ИспользоватьДляПодписи); Свойства.Вставить("Шифрование", Сертификат.ИспользоватьДляШифрования); + + ДатыСертификата = ДатыСертификата(Сертификат, РазницаСУниверсальнымВременем); + Свойства.Вставить("ДатаНачала", ДатыСертификата.ДатаНачала); + Свойства.Вставить("ДатаОкончания", ДатыСертификата.ДатаОкончания); + Свойства.Вставить("ДатаНачалаЗакрытогоКлюча", ДатыСертификата.ДатаНачалаЗакрытогоКлюча); + Свойства.Вставить("ДатаОкончанияЗакрытогоКлюча", ДатыСертификата.ДатаОкончанияЗакрытогоКлюча); + Свойства.Вставить("ДействителенДо", ДатыСертификата.ДействителенДо); + + Свойства.Вставить("ИдентификаторКлючаУдостоверяющегоЦентра", ""); + Свойства.Вставить("СодержитВстроеннуюЛицензиюКриптоПро", Ложь); + Свойства.Вставить("АлгоритмПодписи", ""); + Свойства.Вставить("АлгоритмОткрытогоКлюча", ""); + Свойства.Вставить("АдресаСписковОтзыва", Новый Массив); + + Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") И ДоступныДополнительныеСвойстваСертификата() Тогда - Если ДвоичныеДанныеСертификата <> Неопределено Тогда + Свойства.Вставить("Назначение", ПолучитьНазначениеСертификатаКриптографии(Сертификат)); + Свойства.АлгоритмОткрытогоКлюча = Сертификат.АлгоритмОткрытогоКлюча; + Свойства.АлгоритмПодписи = Сертификат.АлгоритмПодписи; + + ДанныеКлючаУдостоверяющегоЦентра = Сертификат.ДополненияСертификатаКакИсходныеДанные.Получить("2.5.29.35"); + Если ДанныеКлючаУдостоверяющегоЦентра <> Неопределено Тогда + Свойства.ИдентификаторКлючаУдостоверяющегоЦентра = ИдентификаторКлючаУдостоверяющегоЦентра(ДанныеКлючаУдостоверяющегоЦентра); + КонецЕсли; + + Свойства.СодержитВстроеннуюЛицензиюКриптоПро = Сертификат.ДополненияСертификата.Получить("1.2.643.2.2.49.2") <> Неопределено; + + АдресаСписковОтзыва = Сертификат.ДополненияСертификата.Получить("2.5.29.31"); + Если АдресаСписковОтзыва <> Неопределено Тогда + Свойства.АдресаСписковОтзыва = АдресаСписковОтзыва; + КонецЕсли; + + ИначеЕсли ДвоичныеДанныеСертификата <> Неопределено Тогда ДополнительныеСвойстваСертификата = ДополнительныеСвойстваСертификата(ДвоичныеДанныеСертификата, РазницаСУниверсальнымВременем); Если ЗначениеЗаполнено(ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча) Тогда - Свойства.Вставить("ДействителенДо", - Мин(ДатыСертификата.ДатаОкончания, ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча)); - Иначе - Свойства.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); + Свойства.ДействителенДо = Мин(ДатыСертификата.ДатаОкончания, ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча); КонецЕсли; Свойства.Вставить("ДатаНачалаЗакрытогоКлюча", ДополнительныеСвойстваСертификата.ДатаНачалаЗакрытогоКлюча); Свойства.Вставить("ДатаОкончанияЗакрытогоКлюча", ДополнительныеСвойстваСертификата.ДатаОкончанияЗакрытогоКлюча); - - Свойства.Вставить("Представление", ПредставлениеСертификата( - Новый Структура("Сертификат, ДействителенДо", Сертификат, Свойства.ДействителенДо), - РазницаСУниверсальнымВременем)); + Свойства.Вставить("Назначение", ПолучитьНазначение(Сертификат)); Иначе - Свойства.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); - Свойства.Вставить("Представление", ПредставлениеСертификата(Сертификат, РазницаСУниверсальнымВременем)); + Свойства.Вставить("Назначение", ПолучитьНазначение(Сертификат)); КонецЕсли; + Свойства.Вставить("Представление", ПредставлениеСертификата( + Новый Структура("Сертификат, ДействителенДо", Сертификат, Свойства.ДействителенДо))); + Возврат Свойства; КонецФункции +Функция ДоступныДополнительныеСвойстваСертификата() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Версия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); + Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(Версия, "8.3.27") >= 0; + +КонецФункции + // Заполняет таблицу описания сертификата из четырех полей: КомуВыдан, КемВыдан, ДействуетДо, Назначение. Процедура ЗаполнитьОписаниеДанныхСертификата(Таблица, СвойстваСертификата) Экспорт @@ -3106,8 +3203,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции // Для функций СертификатПросрочен, ПредставлениеСертификата, СвойстваСертификата. // @@ -3119,13 +3215,29 @@ ДатыСертификата = Новый Структура; ДатыСертификата.Вставить("ДатаНачала", Сертификат.ДатаНачала + РазницаСУниверсальнымВременем); ДатыСертификата.Вставить("ДатаОкончания", Сертификат.ДатаОкончания + РазницаСУниверсальнымВременем); + ДатыСертификата.Вставить("ДействителенДо", ДатыСертификата.ДатаОкончания); + ДатыСертификата.Вставить("ДатаНачалаЗакрытогоКлюча", Дата(1,1,1)); + ДатыСертификата.Вставить("ДатаОкончанияЗакрытогоКлюча", Дата(1,1,1)); + + Если ДоступныДополнительныеСвойстваСертификата() И ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда + Если Сертификат.УниверсальнаяДатаНачалаЗакрытогоКлюча <> Неопределено Тогда + ДатыСертификата.Вставить("ДатаНачалаЗакрытогоКлюча", Сертификат.УниверсальнаяДатаНачалаЗакрытогоКлюча + + РазницаСУниверсальнымВременем); + КонецЕсли; + Если Сертификат.УниверсальнаяДатаОкончанияЗакрытогоКлюча <> Неопределено Тогда + ДатыСертификата.Вставить("ДатаОкончанияЗакрытогоКлюча", Сертификат.УниверсальнаяДатаОкончанияЗакрытогоКлюча + + РазницаСУниверсальнымВременем); + ДатыСертификата.Вставить("ДействителенДо", Мин(ДатыСертификата.ДатаОкончания, + ДатыСертификата.ДатаОкончанияЗакрытогоКлюча)); + КонецЕсли; + КонецЕсли; Возврат ДатыСертификата; КонецФункции // Для функции СвойстваСертификата. -Функция ПолучитьНазначение(Сертификат) +Функция ПолучитьНазначение(Сертификат) // "2.5.29.37" Если Не Сертификат.РасширенныеСвойства.Свойство("EKU") Тогда Возврат ""; @@ -3144,6 +3256,18 @@ КонецФункции +// Для функции СвойстваСертификата. +Функция ПолучитьНазначениеСертификатаКриптографии(Сертификат) + + Назначения = Сертификат.ДополненияСертификата.Получить("2.5.29.37"); + Если Назначения = Неопределено Тогда + Возврат ""; + КонецЕсли; + + Возврат СтрСоединить(Назначения, Символы.ПС); + +КонецФункции + // Возвращает сведения из свойств сертификата строкой. // // Параметры: @@ -3227,27 +3351,6 @@ КонецФункции -// Возвращает информацию об используемом компьютере. -// -// Возвращаемое значение: -// Строка - информация о компьютере. -// -Функция ДиагностическаяИнформацияОКомпьютере(ДляКлиента = Ложь) Экспорт - - СисИнфо = Новый СистемнаяИнформация; - ПрограммаПросмотра = ?(ДляКлиента, СисИнфо.ИнформацияПрограммыПросмотра, ""); - - Если Не ПустаяСтрока(ПрограммаПросмотра) Тогда - ПрограммаПросмотра = Символы.ПС + НСтр("ru = 'Приложение:'") + " " + ПрограммаПросмотра; - КонецЕсли; - - Возврат НСтр("ru = 'Операционная система:'") + " " + СисИнфо.ВерсияОС - + Символы.ПС + НСтр("ru = 'Версия:'") + " " + СисИнфо.ВерсияПриложения - + Символы.ПС + НСтр("ru = 'Тип платформы:'") + " " + СисИнфо.ТипПлатформы - + ПрограммаПросмотра; - -КонецФункции - Функция ДиагностическаяИнформацияПоПрограмме(Программа, МенеджерКриптографии, ОписаниеОшибки) Экспорт Если ТипЗнч(МенеджерКриптографии) = Тип("МенеджерКриптографии") Тогда @@ -3381,31 +3484,10 @@ Функция ПрограммаЭлектроннойПодписи(Криптопровайдер) - // Локализация + Результат = ""; + ЭлектроннаяПодписьКлиентСерверЛокализация.ПриПолученииИмениПрограммыЭлектроннойПодписи(Криптопровайдер, Результат); - Если ПустаяСтрока(Криптопровайдер.Идентификатор) Тогда - Возврат ""; - КонецЕсли; - - Если СтрНайти(Криптопровайдер.Идентификатор, "CryptoPro") <> 0 Тогда - Возврат НСтр("ru = 'КриптоПро CSP'"); - КонецЕсли; - - Если СтрНайти(Криптопровайдер.Идентификатор, "VipNet") <> 0 Тогда - Возврат НСтр("ru = 'ViPNet CSP'"); - КонецЕсли; - - Если СтрНайти(Криптопровайдер.Идентификатор, "Lissi") <> 0 Тогда - Возврат НСтр("ru = 'ЛИССИ CSP'"); - КонецЕсли; - - Если СтрНайти(Криптопровайдер.Идентификатор, "SignalCom") <> 0 Тогда - Возврат НСтр("ru = 'Сигнал-КОМ CSP'"); - КонецЕсли; - - // Конец Локализация - - Возврат ""; + Возврат Результат; КонецФункции @@ -3529,30 +3611,6 @@ КонецФункции -Функция СертификатВЛокальномХранилищеТекстРешения() Экспорт - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Удалите сертификат из локального хранилища компьютера.'"), - "УдалитьСертификатИзЛокальногоХранилища"); - -КонецФункции - -Функция СертификатВЛокальномХранилищеТекстПричины() Экспорт - - Возврат НСтр( - "ru='На компьютере сертификат установлен в локальное хранилище вместо хранилища текущего пользователя.'"); - -КонецФункции - -Функция ПараметрыДополненияТекстаРешенияОшибкиКлассификатора() Экспорт - - Структура = Новый Структура; - Структура.Вставить("ПроверитьСертификатВЛокальномХранилищеКлиента", Ложь); - Структура.Вставить("ДиагностикаСерверовМетокВремениКлиент", Ложь); - - Возврат Структура; - -КонецФункции - Функция ДиагностикаСерверовМетокВремени(АдресаСерверовМетокВремени, СтрокаПодключения) Экспорт Массив = Новый Массив; @@ -3774,6 +3832,8 @@ КонецФункции +#КонецОбласти + #Область ОбластьXML // Параметры: @@ -4076,7 +4136,7 @@ // [3] EXPLICIT SEQUENCE SIZE (1..MAX) OF Extension (extensions). ПропуститьНачалоБлока(АнализДанных, 2, 3); Если АнализДанных.ЕстьОшибка Тогда - Структура.ТекстОшибки = НСтр("ru = 'Ошибка в данных сертификата.'"); + Структура.ТекстОшибки = НСтр("ru = 'Некорректные данные сертификата.'"); Возврат Структура; КонецЕсли; // SEQUENCE OF @@ -4086,7 +4146,7 @@ // SEQUENCE (extension). ПропуститьНачалоБлока(АнализДанных, 0, 16); Если АнализДанных.ЕстьОшибка Тогда - Структура.ТекстОшибки = НСтр("ru = 'Ошибка в данных сертификата.'"); + Структура.ТекстОшибки = НСтр("ru = 'Некорректные данные сертификата.'"); Возврат Структура; КонецЕсли; // OBJECT IDENTIFIER @@ -4094,7 +4154,7 @@ РазмерДанных = АнализДанных.Родители[0].РазмерДанных; Если РазмерДанных = 0 Тогда - Структура.ТекстОшибки = НСтр("ru = 'Ошибка в данных сертификата.'"); + Структура.ТекстОшибки = НСтр("ru = 'Некорректные данные сертификата.'"); Возврат Структура; КонецЕсли; @@ -4105,7 +4165,8 @@ Если СтрокаБуфера = "551D23" Тогда // 2.5.29.35 authorityKeyIdentifier ЗаполнитьИдентификаторКлючаУдостоверяющегоЦентра(ПрочитанныйБлок(АнализДанных, 0, 4, Истина), Структура); ИначеЕсли СтрокаБуфера = "551D10" Тогда // 2.5.29.16 privateKeyUsagePeriod - ЗаполнитьПериодДействияЗакрытогоКлюча(ПрочитанныйБлок(АнализДанных, 0, 4, Истина), Структура, РазницаСУниверсальнымВременем); + ЗаполнитьПериодДействияЗакрытогоКлюча(ПрочитанныйБлок(АнализДанных, 0, 4, Истина), Структура, + ?(РазницаСУниверсальнымВременем = Неопределено, 0, РазницаСУниверсальнымВременем)); КонецЕсли; ИначеЕсли РазмерДанных = 7 Тогда @@ -4171,7 +4232,19 @@ АнализДанных = НовыйАнализДанных(ДвоичныеДанные); // OCTET STRING ПропуститьНачалоБлока(АнализДанных, 0, 4); + + ИдентификаторКлючаУдостоверяющегоЦентра = ИдентификаторКлючаУдостоверяющегоЦентра(АнализДанных); + Если ИдентификаторКлючаУдостоверяющегоЦентра <> Неопределено Тогда + Структура.ИдентификаторКлючаУдостоверяющегоЦентра = ИдентификаторКлючаУдостоверяющегоЦентра; + КонецЕсли; +КонецПроцедуры + +Функция ИдентификаторКлючаУдостоверяющегоЦентра(АнализДанных) + + Если ТипЗнч(АнализДанных) = Тип("ДвоичныеДанные") Тогда + АнализДанных = НовыйАнализДанных(АнализДанных); + КонецЕсли; // AuthorityKeyIdentifier ::= SEQUENCE { // keyIdentifier [0] KeyIdentifier OPTIONAL, // @@ -4185,10 +4258,12 @@ Если Не АнализДанных.ЕстьОшибка Тогда РазмерДанных = АнализДанных.Родители[0].РазмерДанных; Буфер = АнализДанных.Буфер.Прочитать(АнализДанных.Смещение, РазмерДанных); // БуферДвоичныхДанных - Структура.ИдентификаторКлючаУдостоверяющегоЦентра = ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер); - КонецЕсли; + Возврат ПолучитьHexСтрокуИзБуфераДвоичныхДанных(Буфер); + КонецЕсли; + + Возврат Неопределено; -КонецПроцедуры +КонецФункции Функция АлгоритмСформированнойПодписи(ДанныеПодписи, ВключаяOID = Ложь, ТолькоOID = Ложь, АлгоритмПодписиНеСоответствуетГОСТ = Неопределено) Экспорт @@ -4304,10 +4379,14 @@ Возврат OIDАлгоритмаПодписи; КонецЕсли; - ИдентификаторыАлгоритмов = ИдентификаторыАлгоритмовПодписи(ЭтоДанныеСертификата); - Алгоритм = АлгоритмПоOID(OIDАлгоритмаПодписи, ИдентификаторыАлгоритмов, ВключаяOID); + Возврат ПредставлениеАлгоритмаПодписи(OIDАлгоритмаПодписи, ЭтоДанныеСертификата, ВключаяOID); - Возврат Алгоритм; +КонецФункции + +Функция ПредставлениеАлгоритмаПодписи(OIDАлгоритмаПодписи, ЭтоДанныеСертификата, ВключаяOID) Экспорт + + ИдентификаторыАлгоритмов = ИдентификаторыАлгоритмовПодписи(ЭтоДанныеСертификата); + Возврат АлгоритмПоOID(OIDАлгоритмаПодписи, ИдентификаторыАлгоритмов, ВключаяOID); КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl index 98abd610d..67c8e340b 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl @@ -28,6 +28,10 @@ УстановитьПривилегированныйРежим(Истина); + ОбщиеНастройки.Вставить("РазрешенДоступКИнтернетСервисам", + Константы.РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи.Получить() + И ОбщегоНазначения.РазрешенДоступКИнтернетСервисам()); + ОбщиеНастройки.Вставить("ИспользоватьЭлектронныеПодписи", Константы.ИспользоватьЭлектронныеПодписи.Получить()); @@ -153,7 +157,7 @@ Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеПутиКМодулямПрограмм()); ОбщиеНастройки.Вставить("ВерсияНастроек", Строка(Новый УникальныйИдентификатор)); - ОбщиеНастройки.Вставить("ДоступнаУсовершенствованнаяПодпись", ДоступнаУсовершенствованнаяПодпись()); + ОбщиеНастройки.Вставить("ДоступнаУсовершенствованнаяПодпись", Истина); АдресаСерверовМетокВремени = Константы.АдресаСерверовМетокВремени.Получить(); Если Не ПустаяСтрока(АдресаСерверовМетокВремени) Тогда @@ -164,9 +168,11 @@ ОбщиеНастройки.Вставить("ЭтоМодельСервисаСДоступнымУсовершенствованием", ЭтоМодельСервисаСДоступнымУсовершенствованием()); - ОбщиеНастройки.Вставить("ДоступнаПроверкаПоСпискуУЦ", - Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") <> Неопределено); + ДоступнаПроверкаПоСпискуУЦ = Ложь; + ЭлектроннаяПодписьЛокализация.ПриОпределенииДоступностиПроверкиПоСпискуУЦ(ДоступнаПроверкаПоСпискуУЦ); + ОбщиеНастройки.Вставить("ДоступнаПроверкаПоСпискуУЦ", ДоступнаПроверкаПоСпискуУЦ); + ОбщиеНастройки.Вставить("ДоступнаПроверкаСертификатаВОблачномСервисеСПараметрами", ДоступнаПроверкаСертификатаВОблачномСервисеСПараметрами()); @@ -228,7 +234,8 @@ ИсключаемыеТипы.Вставить(Тип("Строка"), Истина); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда - ИсключаемыеТипы.Вставить(Тип("СправочникСсылка." + "ВерсииФайлов"), Истина); + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + ИсключаемыеТипы.Вставить(МодульРаботаСФайламиСлужебный.СправочникВерсийФайлов(), Истина); КонецЕсли; Для Каждого Тип Из Типы Цикл @@ -252,7 +259,7 @@ КонецФункции -Функция ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере, ОшибкаПроверкиПодписи) Экспорт +Функция ОшибкаПоКлассификатору(ТекстДляПоискаВКлассификаторе, ОшибкаНаСервере, ОшибкаПроверкиПодписи, УказанСертификат) Экспорт Если Не ЗначениеЗаполнено(ТекстДляПоискаВКлассификаторе) Тогда Возврат Неопределено; @@ -273,7 +280,7 @@ Отбор = Новый Структура("ТолькоСервер, ОшибкаПриПроверкеПодписи", Ложь, Истина); КонецЕсли; - СтрокаОшибки = НайтиСтрокуОшибки(КлассификаторОшибок, Отбор, ТекстДляПоиска, ОшибкаНаСервере, ТекстДляПоискаВКлассификаторе); + СтрокаОшибки = НайтиСтрокуОшибки(КлассификаторОшибок, Отбор, ТекстДляПоиска, ОшибкаНаСервере, ТекстДляПоискаВКлассификаторе, УказанСертификат); Если СтрокаОшибки <> Неопределено Тогда Возврат СтрокаОшибки; КонецЕсли; @@ -285,11 +292,11 @@ Отбор = Новый Структура("ТолькоСервер", Ложь); КонецЕсли; - Возврат НайтиСтрокуОшибки(КлассификаторОшибок, Отбор, ТекстДляПоиска, ОшибкаНаСервере, ТекстДляПоискаВКлассификаторе); + Возврат НайтиСтрокуОшибки(КлассификаторОшибок, Отбор, ТекстДляПоиска, ОшибкаНаСервере, ТекстДляПоискаВКлассификаторе, УказанСертификат); КонецФункции -Функция НайтиСтрокуОшибки(КлассификаторОшибок, Отбор, ТекстДляПоиска, ОшибкаНаСервере, ТекстОшибки) +Функция НайтиСтрокуОшибки(КлассификаторОшибок, Отбор, ТекстДляПоиска, ОшибкаНаСервере, ТекстОшибки, УказанСертификат) Строки = КлассификаторОшибок.НайтиСтроки(Отбор); Для Каждого СтрокаКлассификатора Из Строки Цикл @@ -300,9 +307,22 @@ ЗаполнитьЗначенияСвойств(ПредставлениеОшибки, СтрокаКлассификатора); ПредставлениеОшибки.ДействияДляУстранения = ПрочитанныеДействияДляУстраненияОшибок( ПредставлениеОшибки.СпособУстранения); + + Если ЗначениеЗаполнено(ПредставлениеОшибки.ДействияДляУстранения) + И ПредставлениеОшибки.ДействияДляУстранения.Найти("ПодатьЗаявлениеНаСертификат") <> Неопределено Тогда + Решение = СтрРазделить(ПредставлениеОшибки.Решение, Символы.ПС); + ТекущийИндекс = Решение.ВГраница(); + Пока ТекущийИндекс >= 0 Цикл + Если СтрНайти(Решение[ТекущийИндекс], "ПодатьЗаявлениеНаСертификат") > 0 Тогда + Решение.Удалить(ТекущийИндекс); + КонецЕсли; + ТекущийИндекс = ТекущийИндекс - 1; + КонецЦикла; + ПредставлениеОшибки.Решение = СтрСоединить(Решение, Символы.ПС); + КонецЕсли; ДополнитьРешениеАвтоматическимиДействиями(ПредставлениеОшибки.Решение, - ПредставлениеОшибки.ДействияДляУстранения, ОшибкаНаСервере, ТекстОшибки); + ПредставлениеОшибки.ДействияДляУстранения, ОшибкаНаСервере, ТекстОшибки, УказанСертификат); ДополнитьПараметрами(ПредставлениеОшибки.Причина, ПредставлениеОшибки.Решение, ПредставлениеОшибки.ДействияДляУстранения, ТекстОшибки); @@ -318,7 +338,7 @@ КонецФункции -Процедура ДополнитьРешениеАвтоматическимиДействиями(Решение, ДействияДляУстранения, ОшибкаНаСервере, ТекстОшибки) +Процедура ДополнитьРешениеАвтоматическимиДействиями(Решение, ДействияДляУстранения, ОшибкаНаСервере, ТекстОшибки, УказанСертификат) Если Не ЗначениеЗаполнено(ДействияДляУстранения) Тогда Возврат; @@ -328,22 +348,28 @@ Для Каждого Действие Из ДействияДляУстранения Цикл - Если Действие = "УстановитьСписокОтзываСертификата" И Не ОшибкаНаСервере И ЕстьПолучениеФайловИзИнтернета Тогда + Если Действие = "УстановитьСписокОтзываСертификата" И Не ОшибкаНаСервере И ЕстьПолучениеФайловИзИнтернета И УказанСертификат Тогда Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '• Установите список отзыва удостоверяющего центра автоматически. |%2'"), Действие, Решение); - ИначеЕсли Действие = "УстановитьКорневойСертификат" И Не ОшибкаНаСервере Тогда + ИначеЕсли Действие = "УстановитьКорневойСертификат" И Не ОшибкаНаСервере И УказанСертификат Тогда Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '• Установите корневой сертификат удостоверяющего центра автоматически. |%2'"), Действие, Решение); - ИначеЕсли Действие = "УстановитьСертификат" И Не ОшибкаНаСервере Тогда + ИначеЕсли Действие = "УстановитьСертификат" И Не ОшибкаНаСервере И УказанСертификат Тогда Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '• Установите сертификат в Личное хранилище сертификатов пользователя операционной системы автоматически. |%2'"), Действие, Решение); - ИначеЕсли Действие = "УстановитьСертификатВКонтейнер" И Не ОшибкаНаСервере Тогда + ИначеЕсли Действие = "УстановитьСертификатВКонтейнер" И Не ОшибкаНаСервере И УказанСертификат Тогда Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '• Установите сертификат в контейнер прямо из приложения. |%2'"), Действие, Решение); + + ИначеЕсли Действие = "ПодатьЗаявлениеНаСертификат" И УказанСертификат Тогда + + Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '• Подайте заявление на новый сертификат. + |%2'"), Действие, Решение); КонецЕсли; КонецЦикла; @@ -374,9 +400,9 @@ Процедура ДобавитьСсылкуНаСервис(Строка, ТекстОшибки) Шаблон = "(?i)\b(https?|ftps?|file)://[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%?=_|$]"; - РезультатПоиска = ВычислитьСтрНайтиПоРегулярномуВыражению(ТекстОшибки, Шаблон); + РезультатПоиска = СтрНайтиПоРегулярномуВыражению(ТекстОшибки, Шаблон); Если РезультатПоиска.НачальнаяПозиция <> 0 Тогда - Адрес = СРед(ТекстОшибки, РезультатПоиска.НачальнаяПозиция, РезультатПоиска.Длина); + Адрес = РезультатПоиска.Значение; Если СтрНачинаетсяС(Адрес, "http") Тогда Адрес = СтрШаблон("%1", Адрес); КонецЕсли; @@ -388,42 +414,15 @@ Процедура УдалитьПараметрыИзСтроки(Строка) - Для НомерПараметра = 1 По 3 Цикл - Строка = СтрЗаменить(Строка, ":%" + НомерПараметра, ""); - Строка = СтрЗаменить(Строка, " %" + НомерПараметра, ""); - Строка = СтрЗаменить(Строка, "%" + НомерПараметра, ""); + Шаблон = "\b(:? ?)%[0-3]"; + РезультатПоиска = СтрНайтиПоРегулярномуВыражению(Строка, Шаблон); + Пока РезультатПоиска.НачальнаяПозиция <> 0 Цикл + Строка = СтрЗаменить(Строка, РезультатПоиска.Значение, ""); + РезультатПоиска = СтрНайтиПоРегулярномуВыражению(Строка, Шаблон); КонецЦикла; КонецПроцедуры -// Возвращаемое значение: -// Структура: -// * Длина - Число -// * Значение - Строка -// * НачальнаяПозиция - Число -// -Функция ВычислитьСтрНайтиПоРегулярномуВыражению(Текст, ВыражениеДляПоиска) - - РезультатВычисления = Новый Структура("НачальнаяПозиция, Длина, Значение",0); - - СистемнаяИнформация = Новый СистемнаяИнформация; - ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПриложения, "8.3.23.1437") < 0 Тогда - Возврат РезультатВычисления; - КонецЕсли; - - Выражение = "СтрНайтиПоРегулярномуВыражению(Текст, ВыражениеДляПоиска)"; - - Попытка - РезультатВычисления = Вычислить(Выражение); // АПК:488 Исполняемый код - статический, безопасен. - Исключение - Возврат РезультатВычисления; - КонецПопытки; - - Возврат РезультатВычисления; // РезультатПоискаПоРегулярномуВыражению - -КонецФункции - // Только для внутреннего использования. Функция ПрочитанныеДействияДляУстраненияОшибок(Знач СпособУстранения) @@ -568,19 +567,6 @@ КонецФункции -// Функция - Доступна усовершенствованная подпись -// Определяет наличие в платформе типа ПодписьКриптографии -// ЗначениеВСтрокуВнутр(Тип("ПодписьКриптографии")) = "{""T"",a338a24d-6470-4101-8735-008988fb74d8}" -// -// Возвращаемое значение: -// Булево -// -Функция ДоступнаУсовершенствованнаяПодпись() Экспорт - - Возврат Не ЗначениеИзСтрокиВнутр("{""T"",a338a24d-6470-4101-8735-008988fb74d8}") = Тип("Неопределено"); - -КонецФункции - Функция ЭтоМодельСервисаСДоступнымУсовершенствованием() Если ОбщегоНазначения.РазделениеВключено() Тогда @@ -600,10 +586,6 @@ Функция ДанныеУдостоверяющегоЦентра(ЗначенияПоиска) Экспорт - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - АккредитованныеУдостоверяющиеЦентры = ЭлектроннаяПодписьСлужебныйПовтИсп.АккредитованныеУдостоверяющиеЦентры(); Если АккредитованныеУдостоверяющиеЦентры = Неопределено Тогда Возврат Неопределено; @@ -615,12 +597,9 @@ Функция АккредитованныеУдостоверяющиеЦентры() Экспорт - Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация"); - Возврат МодульЭлектроннаяПодписьСлужебныйЛокализация.АккредитованныеУдостоверяющиеЦентры(); + АккредитованныеУдостоверяющиеЦентры = Неопределено; + ЭлектроннаяПодписьЛокализация.ПриПолученииАккредитованныхУдостоверяющихЦентров(АккредитованныеУдостоверяющиеЦентры); + Возврат АккредитованныеУдостоверяющиеЦентры; КонецФункции diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйЛокализация/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Module.bsl similarity index 57% rename from SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйЛокализация/Module.bsl rename to SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Module.bsl index dc7839d43..1b7cb1399 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйЛокализация/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/Module.bsl @@ -28,13 +28,13 @@ ДанныеУЦ = ПрочитатьАрхивКлассификатора(Адрес, Версия); - ХранилищеЗначения = Новый ХранилищеЗначения(ДанныеУЦ, Новый СжатиеДанных(6)); + ХранилищеЗначения = Новый ХранилищеЗначения(ДанныеУЦ, Новый СжатиеДанных(9)); УстановитьПривилегированныйРежим(Истина); Константы.АккредитованныеУдостоверяющиеЦентры.Установить(ХранилищеЗначения); Обработан = Истина; -КонецПроцедуры +КонецПроцедуры Функция ОбновитьКлассификатор() Экспорт @@ -254,7 +254,7 @@ ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); Иначе СтруктураВозврата.Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при получении серийного номера %1, подробности см. в журнале регистрации'"), + НСтр("ru = 'Невозможно получить серийный номер %1, подробности см. в журнале регистрации.'"), ИмяПрограммыКриптоПро); Возврат СтруктураВозврата; КонецЕсли; @@ -461,6 +461,34 @@ КонецФункции +Функция ПолучитьДистрибутивыБиблиотекТокенов(Параметры) Экспорт + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("Дистрибутивы", Новый Массив); + + Если Параметры.ТребуетсяУстановкаДрайверовРутокен Тогда + Результат = ДистрибутивДрайверовРутокен(Параметры); + ДобавитьРезультатПолучения(Результат, СтруктураВозврата, "ТребуетсяУстановкаДрайверовРутокен"); + КонецЕсли; + + Если Параметры.ТребуетсяУстановкаOpenSSL Тогда + Результат = ДистрибутивOpenSSL(Параметры); + ДобавитьРезультатПолучения(Результат, СтруктураВозврата, "ТребуетсяУстановкаOpenSSL"); + КонецЕсли; + + Если Параметры.ТребуетсяУстановкаБиблиотекиИнтеграции Тогда + ДобавитьРезультатПолученияДистрибутиваБиблиотекиИнтеграции(Параметры, СтруктураВозврата, "ТребуетсяУстановкаБиблиотекиИнтеграции"); + КонецЕсли; + + Если Параметры.ТребуетсяУстановкаДрайверовДжакарта Тогда + ДобавитьРезультатПолученияДистрибутиваДжакарта(Параметры, СтруктураВозврата, "ТребуетсяУстановкаДрайверовДжакарта"); + КонецЕсли; + + Возврат СтруктураВозврата; + +КонецФункции + + #КонецОбласти #КонецОбласти @@ -474,7 +502,7 @@ // Функция ВерсияКлассификатора() Экспорт - Возврат "3.0.1.55"; + Возврат "3.0.1.57"; КонецФункции @@ -507,6 +535,370 @@ КонецФункции +Процедура ДобавитьРезультатПолучения(Результат, СтруктураВозврата, Свойство) + Если ТипЗнч(Результат) = Тип("Структура") Тогда + + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Имя", Результат.ИмяФайлаДистрибутива); + ОписаниеФайла.Вставить("ДвоичныеДанные", ПолучитьИзВременногоХранилища(Результат.Путь)); + + СтруктураВозврата.Дистрибутивы.Добавить(ОписаниеФайла); + СтруктураВозврата.Вставить(Свойство, Новый Структура("Имя, ПараметрыУстановки", ОписаниеФайла.Имя, Новый Структура)); + + УдалитьИзВременногоХранилища(Результат.Путь); + Иначе + СтруктураВозврата.Вставить(Свойство, Результат); + КонецЕсли; +КонецПроцедуры + +Функция Дистрибутив(АдресЗагрузки, ТекстОшибки = "") + + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + ПараметрыПолученияФайла = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла(); + Результат = МодульПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище( + АдресЗагрузки, ПараметрыПолученияФайла, Истина); + Если Результат.Статус Тогда + Массив = СтрРазделить(АдресЗагрузки, "/"); + Результат.Вставить("ИмяФайлаДистрибутива", Массив[Массив.ВГраница()]); + Возврат Результат; + Иначе + Возврат ТекстОшибки + ?(ЗначениеЗаполнено(ТекстОшибки), Символы.ПС, "") + Результат.СообщениеОбОшибке; + КонецЕсли; + +КонецФункции + +Функция ДистрибутивOpenSSL(Параметры) + + Если Параметры.ТипПлатформы = "Windows_x86_64" Тогда + АдресЗагрузки = "https://slproweb.com/download/Win64OpenSSL_Light-3_4_1.msi"; + ИначеЕсли Параметры.ТипПлатформы = "Windows_x86" Тогда + АдресЗагрузки = "https://slproweb.com/download/Win32OpenSSL_Light-3_4_1.msi"; + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами в ОС %1 установите библиотеку %2 из состава OpenSSL в %3 самостоятельно. Проверьте зависимости (ldd /usr/lib/libcrypto.so.3) и обновите необходимые библиотеки.'"), + Параметры.ТипПлатформы, + "libcrypto.so.3", + Параметры.КаталогСистемныхПриложений); + Возврат ТекстОшибки; + + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами в ОС %1 установите библиотеку %2 самостоятельно, например, с ресурса %3.'"), + Параметры.ТипПлатформы, + "OpenSSL", + "https://slproweb.com"); + + Возврат Дистрибутив(АдресЗагрузки, ТекстОшибки); + +КонецФункции + +Функция ЭтоАльтЛинукс(ТипПлатформы, Система) + Возврат ТипПлатформы = "Linux_x86_64" И СтрНайти(Система, "ALT Linux") <> 0; +КонецФункции + +Функция ЭтоАстраЛинукс(ТипПлатформы, Система) + Возврат ТипПлатформы = "Linux_x86_64" И СтрНайти(Система, "Astra") <> 0; +КонецФункции + +Функция ЭтоАстраЛинуксДляЭльбруса(ТипПлатформы, Система) + Возврат ТипПлатформы = "Linux_E2K" И СтрНайти(Система, "Astra") <> 0; +КонецФункции + +Функция ЭтоРедОС(ТипПлатформы, Система) + Возврат ТипПлатформы = "Linux_x86_64" И (СтрНайти(Система, НСтр("ru = 'Ред ОС'")) <> 0 Или СтрНайти(Система, "Red OS") <> 0) +КонецФункции + +Функция ДистрибутивДрайверовРутокен(Параметры) + + Если Параметры.ТипПлатформы = "Windows_x86_64" Тогда + АдресЗагрузки = "https://download.rutoken.ru/Rutoken/Drivers/Current/rtDrivers.x64.msi"; + ИначеЕсли Параметры.ТипПлатформы = "Windows_x86" Тогда + АдресЗагрузки = "https://download.rutoken.ru/Rutoken/Drivers/Current/rtDrivers.x86.msi"; + ИначеЕсли ЭтоАльтЛинукс(Параметры.ТипПлатформы, Параметры.Система) Тогда + АдресЗагрузки = "https://download.rutoken.ru/Rutoken/PKCS11Lib/2.17.1.0/Linux/x64/librtpkcs11ecp-2.17.1.0-alt1.x86_64.rpm"; + ИначеЕсли Параметры.ТипПлатформы = "Linux_x86_64" Тогда + АдресЗагрузки = "https://download.rutoken.ru/Rutoken/PKCS11Lib/2.17.1.0/Linux/x64/librtpkcs11ecp_2.17.1.0-1_amd64.deb"; + ИначеЕсли Параметры.ТипПлатформы = "Linux_x86" Тогда + АдресЗагрузки = "https://download.rutoken.ru/Rutoken/PKCS11Lib/2.17.1.0/Linux/x64/librtpkcs11ecp_2.17.1.0-1_i386.deb"; + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами в ОС %1 установите библиотеки %2 и %3 самостоятельно'"), + Параметры.ТипПлатформы, + "libccid", + "rtPKCS11ecp"); + Возврат ТекстОшибки; + + КонецЕсли; + + Если Параметры.ТипПлатформы = "Windows_x86_64" Или Параметры.ТипПлатформы = "Windows_x86" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить драйверы для работы с токенами в ОС %1. + |Установите драйверы самостоятельно с сайта производителя %2'"), + Параметры.ТипПлатформы, + "https://www.rutoken.ru/support/download/windows/"); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить драйверы для работы с токенами в ОС %1. + |Установите библиотеку %2 самостоятельно с сайта производителя %3'"), + Параметры.ТипПлатформы, + "rtPKCS11ecp", + "https://www.rutoken.ru/support/download/nix/"); + КонецЕсли; + + Возврат Дистрибутив(АдресЗагрузки, ТекстОшибки); + +КонецФункции + +Процедура ДобавитьРезультатПолученияДистрибутиваДжакарта(Параметры, СтруктураВозврата, Свойство) + + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + ПараметрыПолученияФайла = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла(); + Результат = МодульПолучениеФайловИзИнтернета.СкачатьФайлВоВременноеХранилище( + "https://update.aladdin-rd.ru/request?product=jcuc", ПараметрыПолученияФайла, Истина); + АдресЗагрузки = ""; + ТекстОшибки = НСтр("ru = 'Не удалось получить ссылку на дистрибутив. Подробности см. в Журнале регистрации'"); + Если Результат.Статус Тогда + ДвоичныеДанные = ПолучитьИзВременногоХранилища(Результат.Путь); + УдалитьИзВременногоХранилища(Результат.Путь); + + Попытка + Строка = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); + ДанныеДистрибутивов = ПрочитатьЗначениеJSON(Строка); + Исключение + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение дистрибутива Единого Клиента JaCarta'", + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + Возврат; + + КонецПопытки; + + Для Каждого Элемент Из ДанныеДистрибутивов.AladdinProducts Цикл + Если Элемент.ProductID = "jcuc" Тогда + Для Каждого Ссылка Из Элемент.Links Цикл + Если Параметры.ТипПлатформы = "Windows_x86_64" И Ссылка.Platform = "win-x64" + Или Параметры.ТипПлатформы = "Windows_x86" И Ссылка.Platform = "win-x86" + Или ЭтоАстраЛинуксДляЭльбруса(Параметры.ТипПлатформы, Параметры.Система) И Ссылка.Platform = "astra-e2k-8c" + Или ЭтоАстраЛинукс(Параметры.ТипПлатформы, Параметры.Система) И Ссылка.Platform = "astra-x64" + Или ЭтоАльтЛинукс(Параметры.ТипПлатформы, Параметры.Система) И Ссылка.Platform = "alt-arm64" + Или Параметры.ТипПлатформы = "Linux_x86_64" И СтрНайти(Параметры.Система, "Red Hat") И Ссылка.Platform = "rpm-x64" + Или Параметры.ТипПлатформы = "Linux_x86_64" И СтрНайти(Параметры.Система, "EMIAS") И Ссылка.Platform = "emias" + Или ЭтоРедОС(Параметры.ТипПлатформы, Параметры.Система) И Ссылка.Platform = "redos-arm64" + Или Параметры.ТипПлатформы = "Linux_x86_64" И Ссылка.Platform = "deb-x64" + Или Параметры.ТипПлатформы = "Linux_x86" И Ссылка.Platform = "deb-x86" Тогда + + АдресЗагрузки = Ссылка.DirectLink; + Прервать; + КонецЕсли; + КонецЦикла; + Прервать; + КонецЕсли; + КонецЦикла; + + Если АдресЗагрузки = "" Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение дистрибутива Единого Клиента JaCarta'", + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить ссылку на дистрибутив для %1. %2'"), Параметры.Система, Строка)); + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + Возврат; + КонецЕсли; + Иначе + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + Возврат; + КонецЕсли; + + Результат = Дистрибутив(АдресЗагрузки); + + ОшибкаЗагрузки = ""; + Если ТипЗнч(Результат) = Тип("Строка") Тогда + ОшибкаЗагрузки = Результат; + ИначеЕсли Не Результат.Статус Тогда + ОшибкаЗагрузки = Результат.СообщениеОбОшибке; + КонецЕсли; + + Если ЗначениеЗаполнено(ОшибкаЗагрузки) Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установите Единый Клиент JaCarta с сайта производителя %1 самостоятельно. + |Не удалось скачать файл автоматически: %2'"), + "https://www.aladdin-rd.ru/catalog/jacarta-client/", ОшибкаЗагрузки); + + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + Возврат; + КонецЕсли; + + ИмяФайлаДистрибутива = Результат.ИмяФайлаДистрибутива; + + Если СтрЗаканчиваетсяНа(ИмяФайлаДистрибутива, ".zip") Тогда + Архив = ПолучитьИзВременногоХранилища(Результат.Путь); + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог(); + + Поток = Новый ПотокВПамяти; + Архив.Записать(Поток); + + ЧтениеZip = Новый ЧтениеZipФайла(Поток); + + Попытка + ЧтениеZip.ИзвлечьВсе(ВременныйКаталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + ФайлНайден = Истина; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение дистрибутива Единого Клиента JaCarta'", + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + ЧтениеZip.Закрыть(); + Поток.Закрыть(); + УдалитьИзВременногоХранилища(Результат.Путь); + + Файлы = НайтиФайлы(ВременныйКаталог, "*"); + + Если Файлы.Количество() = 0 Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось извлечь файлы из полученного архива. + |Загрузите архив %1 и установите самостоятельно'"), АдресЗагрузки); + + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); + Возврат; + КонецЕсли; + + Для Каждого Файл Из Файлы Цикл + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Имя", Файл.Имя); + ОписаниеФайла.Вставить("ДвоичныеДанные", Новый ДвоичныеДанные(Файл.ПолноеИмя)); + СтруктураВозврата.Дистрибутивы.Добавить(ОписаниеФайла); + КонецЦикла; + + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); + СтруктураВозврата.Вставить(Свойство, Новый Структура("Имя, ПараметрыУстановки", "install.sh", Новый Структура)); // АПК:1425 Не является именем временного исполняемого файла. + + Иначе + + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Имя", Результат.ИмяФайлаДистрибутива); + ОписаниеФайла.Вставить("ДвоичныеДанные", ПолучитьИзВременногоХранилища(Результат.Путь)); + + СтруктураВозврата.Дистрибутивы.Добавить(ОписаниеФайла); + СтруктураВозврата.Вставить(Свойство, Новый Структура("Имя, ПараметрыУстановки", ОписаниеФайла.Имя, Новый Структура)); + + УдалитьИзВременногоХранилища(Результат.Путь); + + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьРезультатПолученияДистрибутиваБиблиотекиИнтеграции(Параметры, СтруктураВозврата, Свойство) + + АдресЗагрузки = "https://download.rutoken.ru/Rutoken/Support_OpenSSL/3.x/3.3.1/rtengine-3.3.1.zip"; + + Если Параметры.ТипПлатформы = "Windows_x86_64" Тогда + ИмяФайлаБиблиотеки = "windows\x64\lib\rtengine.dll"; + ИмяФайла = "rtengine.dll"; + ИначеЕсли Параметры.ТипПлатформы = "Linux_x86_64" Тогда + ИмяФайлаБиблиотеки = "rtengine\3.3.1\Linux\x64\lib\librtengine.so.3.3.1"; + ИмяФайла = "librtengine.so.3.3.1"; + ИначеЕсли Параметры.ТипПлатформы = "Linux_E2K" Тогда + ИмяФайлаБиблиотеки = "rtengine\3.3.1\Linux\e2k\lib\librtengine.so.3.3.1"; + ИмяФайла = "librtengine.so.3.3.1"; + ИначеЕсли Параметры.ТипПлатформы = "Windows_x86" Тогда + ИмяФайлаБиблиотеки = "windows\x86\lib\rtengine.dll"; + ИмяФайла = "rtengine.dll"; + ИначеЕсли Параметры.ТипПлатформы = "Linux_x86" Тогда + ИмяФайлаБиблиотеки = "rtengine\3.3.1\Linux\x86\lib\librtengine.so.3.3.1"; + ИмяФайла = "librtengine.so.3.3.1"; + Иначе + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить библиотеку интеграции с OpenSSL (rtengine) для работы с токенами в ОС %1. + |Загрузите библиотеку с сайта производителя %2 самостоятельно, распакуйте и скопируйте в каталог %3 файл %4'"), + Параметры.ТипПлатформы, + "https://www.rutoken.ru/support/download/openssl/", + Параметры.КаталогСистемныхПриложений, + ИмяФайлаБиблиотеки); + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + Возврат; + КонецЕсли; + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить библиотеку интеграции с OpenSSL (rtengine). + |Загрузите библиотеку с сайта производителя %1 самостоятельно, распакуйте и скопируйте в каталог %2 файл %3'"), + "https://www.rutoken.ru/support/download/openssl/", + Параметры.КаталогСистемныхПриложений, + ИмяФайлаБиблиотеки); + + Результат = Дистрибутив(АдресЗагрузки); + + ОшибкаЗагрузки = ""; + Если ТипЗнч(Результат) = Тип("Строка") Тогда + ОшибкаЗагрузки = Результат; + ИначеЕсли Не Результат.Статус Тогда + ОшибкаЗагрузки = Результат.СообщениеОбОшибке; + КонецЕсли; + + Если ЗначениеЗаполнено(ОшибкаЗагрузки) Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. + |Не удалось скачать файл автоматически: %2'"), ТекстОшибки, ОшибкаЗагрузки); + + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + Возврат; + КонецЕсли; + + Архив = ПолучитьИзВременногоХранилища(Результат.Путь); + ВременныйКаталог = ФайловаяСистема.СоздатьВременныйКаталог(); + Поток = Новый ПотокВПамяти; + Архив.Записать(Поток); + ФайлНайден = Ложь; + ЧтениеZip = Новый ЧтениеZipФайла(Поток); + Для Каждого Элемент Из ЧтениеZip.Элементы Цикл + Если СтрЗаканчиваетсяНа(НРег(Элемент.ИсходноеПолноеИмя), ИмяФайлаБиблиотеки) Тогда + ИмяФайлаБиблиотеки = Элемент.ИсходноеПолноеИмя; + Попытка + ЧтениеZip.Извлечь(Элемент, ВременныйКаталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + ФайлНайден = Истина; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение библиотеки интеграции rtengine'", + ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Прервать; + КонецЕсли; + КонецЦикла; + + ЧтениеZip.Закрыть(); + Поток.Закрыть(); + УдалитьИзВременногоХранилища(Результат.Путь); + + Если Не ФайлНайден Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1. + |Не удалось извлечь файл rtengine из полученного архива.'"), ТекстОшибки); + + СтруктураВозврата.Вставить(Свойство, ТекстОшибки); + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); + Возврат; + КонецЕсли; + + ОписаниеФайла = Новый Структура; + ОписаниеФайла.Вставить("Имя", ИмяФайла); + ОписаниеФайла.Вставить("ДвоичныеДанные", Новый ДвоичныеДанные(ВременныйКаталог + ИмяФайла)); + + ФайловаяСистема.УдалитьВременныйКаталог(ВременныйКаталог); + + СтруктураВозврата.Дистрибутивы.Добавить(ОписаниеФайла); + СтруктураВозврата.Вставить(Свойство, Новый Структура("Имя, ПараметрыУстановки", ОписаниеФайла.Имя, Новый Структура)); + +КонецПроцедуры + // Возвращает описание HTTP соединения. // // Параметры: @@ -522,6 +914,9 @@ ПроверятьДоставкуПакетовПриОшибке = Истина) СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL); + + ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам(Истина); + Схема = ?(ЗначениеЗаполнено(СтруктураURI.Схема), СтруктураURI.Схема, "http"); Прокси = Неопределено; @@ -805,4 +1200,144 @@ КонецФункции +Функция РезультатПроверкиУдостоверяющегоЦентра(Результат, СертификатКриптографии, НаДату, ПараметрыПроверки, СвойстваСертификата) Экспорт + + Если ЭлектроннаяПодписьСлужебныйПовтИсп.АккредитованныеУдостоверяющиеЦентры() = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если ПараметрыПроверки = Неопределено Или ПараметрыПроверки = Ложь Или ПараметрыПроверки = Истина Тогда // для совместимости + НовыеПараметрыПроверки = Новый Структура; + НовыеПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", ?(ПараметрыПроверки = Неопределено, Ложь, ПараметрыПроверки)); + НовыеПараметрыПроверки.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные()); + ПараметрыПроверки = НовыеПараметрыПроверки; + КонецЕсли; + + Если ПараметрыПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда + Возврат Результат; + КонецЕсли; + + МодульЭлектроннаяПодписьКлиентСерверЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСерверЛокализация"); + ДанныеДляПроверкиУдостоверяющегоЦентра = МодульЭлектроннаяПодписьКлиентСерверЛокализация.ДанныеДляПроверкиУдостоверяющегоЦентра( + СертификатКриптографии); + + Если ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска = Неопределено Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); + Возврат Результат; + КонецЕсли; + + ДанныеУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйПовтИсп.ДанныеУдостоверяющегоЦентра( + ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска); + + Если ДанныеУдостоверяющегоЦентра = Неопределено Тогда + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьРезультатПроверкиСертификатНеквалифицированный(ПараметрыПроверки, Результат); + Возврат Результат; + КонецЕсли; + + КонтекстПроверки = МодульЭлектроннаяПодписьКлиентСерверЛокализация.КонтекстПроверкиУдостоверяющегоЦентраСертификата(); + КонтекстПроверки.ДанныеУдостоверяющегоЦентра = ДанныеУдостоверяющегоЦентра; + КонтекстПроверки.НаименованиеУдостоверяющегоЦентра = ДанныеДляПроверкиУдостоверяющегоЦентра.НаименованиеУдостоверяющегоЦентра; + КонтекстПроверки.ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска; + КонтекстПроверки.НаДату = ?(НаДату = Неопределено, ТекущаяДатаСеанса(), НаДату); + КонтекстПроверки.РазницаСУниверсальнымВременем = ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(); + КонтекстПроверки.ЭтоПроверкаПодписи = ПараметрыПроверки.ЭтоПроверкаПодписи; + КонтекстПроверки.ПроверятьСертификат = ПараметрыПроверки.ПроверятьСертификат; + + Если СвойстваСертификата = Неопределено Тогда + КонтекстПроверки.СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии); + Иначе + КонтекстПроверки.СвойстваСертификата = СвойстваСертификата; + КонецЕсли; + + Результат = МодульЭлектроннаяПодписьКлиентСерверЛокализация.РезультатПроверкиУдостоверяющегоЦентраСертификата( + СертификатКриптографии, КонтекстПроверки); + + Если ЗначениеЗаполнено(Результат.Предупреждение.Причина) Тогда + Результат.Предупреждение.Причина = СтроковыеФункции.ФорматированнаяСтрока(Результат.Предупреждение.Причина); + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.Предупреждение.Решение) Тогда + Результат.Предупреждение.Решение = СтроковыеФункции.ФорматированнаяСтрока(Результат.Предупреждение.Решение); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// АПК:299-выкл программно вызываемая процедура +Функция ПолучитьДистрибутивCryptoProCSP(Параметры) Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутива CryptoPro CSP'"); + + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ЭлектроннаяПодписьСлужебныйРФ.ДистрибутивCryptoProCSP", Параметры); + +КонецФункции + +// АПК:299-выкл программно вызываемая процедура +Функция ПолучитьДистрибутивViPNetCSP(Параметры) Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутива VipNet CSP'"); + + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ЭлектроннаяПодписьСлужебныйРФ.ДистрибутивViPNetCSP", Параметры); + +КонецФункции + +// Результат получения дистрибутива криптопровайдера. +// +// Параметры: +// ДлительнаяОперация - Структура: +// * АдресРезультата - Строка - адрес во временном хранилище +// ИдентификаторФормы Идентификатор формы +// +// Возвращаемое значение: +// Структура - результат получения дистрибутива криптопровайдера: +// * ДанныеДистрибутива - Структура: +// ** НомерДистрибутива - Строка +// ** Версия - Строка +// ** КонтрольнаяСумма - Строка +// ** СерийныйНомер - Строка +// ** ИмяФайлаДистрибутива - Строка +// ** КомандаЗапуска - см. ФайловаяСистемаКлиент.ЗапуститьПрограмму.КомандаЗапуска +// ** Дистрибутив - Массив из ОписаниеПередаваемогоФайла +// * Ошибка - Строка +// +Функция РезультатПолученияДистрибутиваКриптопровайдера(ДлительнаяОперация, ИдентификаторФормы) Экспорт + + Результат = ПолучитьИзВременногоХранилища(ДлительнаяОперация.АдресРезультата); // см. ЭлектроннаяПодписьСлужебныйРФ.ДистрибутивViPNetCSP + + ДанныеДистрибутива = Новый Структура; + Если Результат.ПараметрыДистрибутива <> Неопределено И Результат.ПараметрыДистрибутива.Свойство("Дистрибутив") Тогда + + ДанныеДистрибутива.Вставить("НомерДистрибутива", Результат.ПараметрыДистрибутива.НомерДистрибутива); + ДанныеДистрибутива.Вставить("Версия", Результат.ПараметрыДистрибутива.Версия); + ДанныеДистрибутива.Вставить("КонтрольнаяСумма", Результат.ПараметрыДистрибутива.КонтрольнаяСумма); + ДанныеДистрибутива.Вставить("ИмяФайлаДистрибутива", Результат.ПараметрыДистрибутива.ИмяФайлаДистрибутива); + ДанныеДистрибутива.Вставить("КомандаЗапуска", Результат.ПараметрыДистрибутива.КомандаЗапуска); + + Если Результат.ПараметрыДистрибутива.Свойство("СерийныйНомер") Тогда + ДанныеДистрибутива.Вставить("СерийныйНомер", Результат.ПараметрыДистрибутива.СерийныйНомер); + КонецЕсли; + + ОписаниеФайлов = Новый Массив; + + Для каждого Файл Из Результат.ПараметрыДистрибутива.Дистрибутив Цикл + ОписаниеФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.Имя, + ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, ИдентификаторФормы))); + КонецЦикла; + + ДанныеДистрибутива.Вставить("Дистрибутив", ОписаниеФайлов); + КонецЕсли; + + СтруктураВозврата = Новый Структура; + СтруктураВозврата.Вставить("ДанныеДистрибутива", ДанныеДистрибутива); + СтруктураВозврата.Вставить("Ошибка", Результат.Ошибка); + + Возврат СтруктураВозврата; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйЛокализация/ЭлектроннаяПодписьСлужебныйЛокализация.mdo b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/ЭлектроннаяПодписьСлужебныйРФ.mdo similarity index 77% rename from SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйЛокализация/ЭлектроннаяПодписьСлужебныйЛокализация.mdo rename to SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйРФ/ЭлектроннаяПодписьСлужебныйРФ.mdo index e34a651fb..eeae1b0da 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 1d667fba1..193546363 100644 --- a/SSL/src/CommonModules/ЯндексПереводчик/Module.bsl +++ b/SSL/src/CommonModules/ЯндексПереводчик/Module.bsl @@ -20,6 +20,13 @@ Функция ПеревестиТексты(Тексты, ЯзыкПеревода = Неопределено, ИсходныйЯзык = Неопределено) Экспорт + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + ЗаписатьОшибкуВЖурналРегистрации(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось выполнить перевод текста по причине: + |%1'"), ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения())); + ВызватьИсключение ТекстОшибки(НСтр("ru = 'Не удалось выполнить перевод текста.'")); + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПеревестиТексты", "Тексты", Тексты, Тип("Массив")); Если Не ЗначениеЗаполнено(ЯзыкПеревода) Тогда @@ -172,6 +179,7 @@ ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); Попытка + ДоступРазрешен = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(Истина); Соединение = Новый HTTPСоединение(ИмяХоста, , , , Прокси, 60, ЗащищенноеСоединение); HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение diff --git a/SSL/src/CommonPictures/BotFatherWebChat/BotFatherWebChat.mdo b/SSL/src/CommonPictures/BotFatherWebChat/BotFatherWebChat.mdo new file mode 100644 index 000000000..aa274c311 --- /dev/null +++ b/SSL/src/CommonPictures/BotFatherWebChat/BotFatherWebChat.mdo @@ -0,0 +1,8 @@ + + + BotFatherWebChat + + ru + Bot father web chat + + diff --git a/SSL/src/CommonPictures/BotFatherWebChat/Picture.png b/SSL/src/CommonPictures/BotFatherWebChat/Picture.png new file mode 100644 index 000000000..e6c8bf4b1 Binary files /dev/null and b/SSL/src/CommonPictures/BotFatherWebChat/Picture.png differ diff --git a/SSL/src/CommonPictures/BotFatherWebhook/BotFatherWebhook.mdo b/SSL/src/CommonPictures/BotFatherWebhook/BotFatherWebhook.mdo new file mode 100644 index 000000000..ac664a8bd --- /dev/null +++ b/SSL/src/CommonPictures/BotFatherWebhook/BotFatherWebhook.mdo @@ -0,0 +1,8 @@ + + + BotFatherWebhook + + ru + Bot father webhook + + diff --git a/SSL/src/CommonPictures/BotFatherWebhook/Picture.png b/SSL/src/CommonPictures/BotFatherWebhook/Picture.png new file mode 100644 index 000000000..fd2e2b4dc Binary files /dev/null and b/SSL/src/CommonPictures/BotFatherWebhook/Picture.png differ diff --git a/SSL/src/CommonPictures/BotFatherWhatsapp/BotFatherWhatsapp.mdo b/SSL/src/CommonPictures/BotFatherWhatsapp/BotFatherWhatsapp.mdo new file mode 100644 index 000000000..ec1b69456 --- /dev/null +++ b/SSL/src/CommonPictures/BotFatherWhatsapp/BotFatherWhatsapp.mdo @@ -0,0 +1,8 @@ + + + BotFatherWhatsapp + + ru + Bot father WhatsApp + + diff --git a/SSL/src/CommonPictures/BotFatherWhatsapp/Picture.png b/SSL/src/CommonPictures/BotFatherWhatsapp/Picture.png new file mode 100644 index 000000000..d2c181a2e Binary files /dev/null and b/SSL/src/CommonPictures/BotFatherWhatsapp/Picture.png differ diff --git a/SSL/src/CommonPictures/GooggleDrive/GooggleDrive.mdo b/SSL/src/CommonPictures/GooggleDrive/GooggleDrive.mdo new file mode 100644 index 000000000..dd7977ae9 --- /dev/null +++ b/SSL/src/CommonPictures/GooggleDrive/GooggleDrive.mdo @@ -0,0 +1,8 @@ + + + GooggleDrive + + ru + Googgle drive + + diff --git a/SSL/src/CommonPictures/GooggleDrive/Picture.png b/SSL/src/CommonPictures/GooggleDrive/Picture.png new file mode 100644 index 000000000..9101bf821 Binary files /dev/null and b/SSL/src/CommonPictures/GooggleDrive/Picture.png differ diff --git a/SSL/src/CommonPictures/WebChat16/Picture.svg b/SSL/src/CommonPictures/WebChat16/Picture.svg new file mode 100644 index 000000000..cc3db2d7d --- /dev/null +++ b/SSL/src/CommonPictures/WebChat16/Picture.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/WebChat16/WebChat16.mdo b/SSL/src/CommonPictures/WebChat16/WebChat16.mdo new file mode 100644 index 000000000..50d1f5678 --- /dev/null +++ b/SSL/src/CommonPictures/WebChat16/WebChat16.mdo @@ -0,0 +1,8 @@ + + + WebChat16 + + ru + Web chat16 + + diff --git a/SSL/src/CommonPictures/Webhook16/Picture.svg b/SSL/src/CommonPictures/Webhook16/Picture.svg new file mode 100644 index 000000000..5057e88df --- /dev/null +++ b/SSL/src/CommonPictures/Webhook16/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/Webhook16/Webhook16.mdo b/SSL/src/CommonPictures/Webhook16/Webhook16.mdo new file mode 100644 index 000000000..f5e27056b --- /dev/null +++ b/SSL/src/CommonPictures/Webhook16/Webhook16.mdo @@ -0,0 +1,8 @@ + + + Webhook16 + + ru + Webhook16 + + diff --git a/SSL/src/CommonPictures/WhatsApp16/Picture.svg b/SSL/src/CommonPictures/WhatsApp16/Picture.svg new file mode 100644 index 000000000..dd5966917 --- /dev/null +++ b/SSL/src/CommonPictures/WhatsApp16/Picture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/SSL/src/CommonPictures/WhatsApp16/WhatsApp16.mdo b/SSL/src/CommonPictures/WhatsApp16/WhatsApp16.mdo new file mode 100644 index 000000000..ad98fea37 --- /dev/null +++ b/SSL/src/CommonPictures/WhatsApp16/WhatsApp16.mdo @@ -0,0 +1,8 @@ + + + WhatsApp16 + + ru + Whats app16 + + diff --git a/SSL/src/CommonPictures/ДлительнаяОперация48/Picture.zip b/SSL/src/CommonPictures/ДлительнаяОперация48/Picture.zip index ba4e35787..f48aa77ed 100644 Binary files a/SSL/src/CommonPictures/ДлительнаяОперация48/Picture.zip and b/SSL/src/CommonPictures/ДлительнаяОперация48/Picture.zip differ diff --git a/SSL/src/CommonPictures/ЗакрытыйКлюч/Picture.png b/SSL/src/CommonPictures/ЗакрытыйКлюч/Picture.png deleted file mode 100644 index c5a760286..000000000 Binary files a/SSL/src/CommonPictures/ЗакрытыйКлюч/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/ЗакрытыйКлюч/Picture.svg b/SSL/src/CommonPictures/ЗакрытыйКлюч/Picture.svg new file mode 100644 index 000000000..f186fe052 --- /dev/null +++ b/SSL/src/CommonPictures/ЗакрытыйКлюч/Picture.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/ЗначокУстановкиКомпонентДляРаботыСЭП/Picture.png b/SSL/src/CommonPictures/ЗначокУстановкиКомпонентДляРаботыСЭП/Picture.png new file mode 100644 index 000000000..fa48742cf Binary files /dev/null and b/SSL/src/CommonPictures/ЗначокУстановкиКомпонентДляРаботыСЭП/Picture.png differ diff --git a/SSL/src/CommonPictures/ЗначокУстановкиКомпонентДляРаботыСЭП/ЗначокУстановкиКомпонентДляРаботыСЭП.mdo b/SSL/src/CommonPictures/ЗначокУстановкиКомпонентДляРаботыСЭП/ЗначокУстановкиКомпонентДляРаботыСЭП.mdo new file mode 100644 index 000000000..13148f710 --- /dev/null +++ b/SSL/src/CommonPictures/ЗначокУстановкиКомпонентДляРаботыСЭП/ЗначокУстановкиКомпонентДляРаботыСЭП.mdo @@ -0,0 +1,8 @@ + + + ЗначокУстановкиКомпонентДляРаботыСЭП + + ru + Значок установки компонент для работы с ЭП + + diff --git a/SSL/src/CommonPictures/МестоДляКартинки/Picture.png b/SSL/src/CommonPictures/МестоДляКартинки/Picture.png deleted file mode 100644 index 4f5819893..000000000 Binary files a/SSL/src/CommonPictures/МестоДляКартинки/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МестоДляКартинки/Picture.svg b/SSL/src/CommonPictures/МестоДляКартинки/Picture.svg new file mode 100644 index 000000000..4631053a5 --- /dev/null +++ b/SSL/src/CommonPictures/МестоДляКартинки/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеHTTPСервисы/Picture.png b/SSL/src/CommonPictures/МетаданныеHTTPСервисы/Picture.png deleted file mode 100644 index 7797f4ea2..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеHTTPСервисы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеHTTPСервисы/Picture.svg b/SSL/src/CommonPictures/МетаданныеHTTPСервисы/Picture.svg new file mode 100644 index 000000000..c54e92323 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеHTTPСервисы/Picture.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеHTTPСервисыШаблоныURL/Picture.png b/SSL/src/CommonPictures/МетаданныеHTTPСервисыШаблоныURL/Picture.png deleted file mode 100644 index 82d007862..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеHTTPСервисыШаблоныURL/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеHTTPСервисыШаблоныURL/Picture.svg b/SSL/src/CommonPictures/МетаданныеHTTPСервисыШаблоныURL/Picture.svg new file mode 100644 index 000000000..46c60a122 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеHTTPСервисыШаблоныURL/Picture.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеWSСсылки/Picture.png b/SSL/src/CommonPictures/МетаданныеWSСсылки/Picture.png deleted file mode 100644 index f9eca8cea..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеWSСсылки/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеWSСсылки/Picture.svg b/SSL/src/CommonPictures/МетаданныеWSСсылки/Picture.svg new file mode 100644 index 000000000..16c768f7b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеWSСсылки/Picture.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеWebСервисы/Picture.png b/SSL/src/CommonPictures/МетаданныеWebСервисы/Picture.png deleted file mode 100644 index a5be176b1..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеWebСервисы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеWebСервисы/Picture.svg b/SSL/src/CommonPictures/МетаданныеWebСервисы/Picture.svg new file mode 100644 index 000000000..c33931be2 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеWebСервисы/Picture.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеWebСервисыОперации/Picture.png b/SSL/src/CommonPictures/МетаданныеWebСервисыОперации/Picture.png deleted file mode 100644 index b50c800eb..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеWebСервисыОперации/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеWebСервисыОперации/Picture.svg b/SSL/src/CommonPictures/МетаданныеWebСервисыОперации/Picture.svg new file mode 100644 index 000000000..7369f1b4b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеWebСервисыОперации/Picture.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеWebСервисыОперацииПараметры/Picture.png b/SSL/src/CommonPictures/МетаданныеWebСервисыОперацииПараметры/Picture.png deleted file mode 100644 index 1757f9564..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеWebСервисыОперацииПараметры/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеWebСервисыОперацииПараметры/Picture.svg b/SSL/src/CommonPictures/МетаданныеWebСервисыОперацииПараметры/Picture.svg new file mode 100644 index 000000000..b1230164d --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеWebСервисыОперацииПараметры/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/CommonPictures/МетаданныеБизнесПроцессы/Picture.png b/SSL/src/CommonPictures/МетаданныеБизнесПроцессы/Picture.png deleted file mode 100644 index ee456b75b..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеБизнесПроцессы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеБизнесПроцессы/Picture.svg b/SSL/src/CommonPictures/МетаданныеБизнесПроцессы/Picture.svg new file mode 100644 index 000000000..884f8c40c --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеБизнесПроцессы/Picture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеБоты/Picture.png b/SSL/src/CommonPictures/МетаданныеБоты/Picture.png deleted file mode 100644 index 8c024b925..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеБоты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеБоты/Picture.svg b/SSL/src/CommonPictures/МетаданныеБоты/Picture.svg new file mode 100644 index 000000000..cdce1de0e --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеБоты/Picture.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиДанных/Picture.png b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиДанных/Picture.png deleted file mode 100644 index fa7bc9281..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиДанных/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиДанных/Picture.svg b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиДанных/Picture.svg new file mode 100644 index 000000000..692f1628d --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиДанных/Picture.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиКубы/Picture.png b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиКубы/Picture.png deleted file mode 100644 index f328e8d46..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиКубы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиКубы/Picture.svg b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиКубы/Picture.svg new file mode 100644 index 000000000..033585be6 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиКубы/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиТаблицы/Picture.png b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиТаблицы/Picture.png deleted file mode 100644 index 8e91bd8b5..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиТаблицы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиТаблицы/Picture.svg b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиТаблицы/Picture.svg new file mode 100644 index 000000000..20591f892 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиТаблицы/Picture.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиФункции/Picture.png b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиФункции/Picture.png deleted file mode 100644 index b1077a01c..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиФункции/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиФункции/Picture.svg b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиФункции/Picture.svg new file mode 100644 index 000000000..5e12d48c9 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеВнешниеИсточникиФункции/Picture.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеГрафы/Picture.png b/SSL/src/CommonPictures/МетаданныеГрафы/Picture.png deleted file mode 100644 index 3a2e1256b..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеГрафы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеГрафы/Picture.svg b/SSL/src/CommonPictures/МетаданныеГрафы/Picture.svg new file mode 100644 index 000000000..9c26b182b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеГрафы/Picture.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеГруппыКоманд/Picture.png b/SSL/src/CommonPictures/МетаданныеГруппыКоманд/Picture.png deleted file mode 100644 index 658f399c4..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеГруппыКоманд/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеГруппыКоманд/Picture.svg b/SSL/src/CommonPictures/МетаданныеГруппыКоманд/Picture.svg new file mode 100644 index 000000000..8ff4c6a28 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеГруппыКоманд/Picture.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеДокументы/Picture.png b/SSL/src/CommonPictures/МетаданныеДокументы/Picture.png deleted file mode 100644 index 32dc3c493..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеДокументы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеДокументы/Picture.svg b/SSL/src/CommonPictures/МетаданныеДокументы/Picture.svg new file mode 100644 index 000000000..a6640c61a --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеДокументы/Picture.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеЖурналыДокументов/Picture.png b/SSL/src/CommonPictures/МетаданныеЖурналыДокументов/Picture.png deleted file mode 100644 index f256844e7..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеЖурналыДокументов/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеЖурналыДокументов/Picture.svg b/SSL/src/CommonPictures/МетаданныеЖурналыДокументов/Picture.svg new file mode 100644 index 000000000..0a25589c8 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеЖурналыДокументов/Picture.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеЗадачи/Picture.png b/SSL/src/CommonPictures/МетаданныеЗадачи/Picture.png deleted file mode 100644 index 3c21ff649..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеЗадачи/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеЗадачи/Picture.svg b/SSL/src/CommonPictures/МетаданныеЗадачи/Picture.svg new file mode 100644 index 000000000..0429148af --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеЗадачи/Picture.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеЗначениеПеречисления/Picture.png b/SSL/src/CommonPictures/МетаданныеЗначениеПеречисления/Picture.png deleted file mode 100644 index 2b50b63c6..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеЗначениеПеречисления/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеЗначениеПеречисления/Picture.svg b/SSL/src/CommonPictures/МетаданныеЗначениеПеречисления/Picture.svg new file mode 100644 index 000000000..d6f6c6998 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеЗначениеПеречисления/Picture.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеИзмерения/Picture.png b/SSL/src/CommonPictures/МетаданныеИзмерения/Picture.png deleted file mode 100644 index 739469e1e..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеИзмерения/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеИзмерения/Picture.svg b/SSL/src/CommonPictures/МетаданныеИзмерения/Picture.svg new file mode 100644 index 000000000..c6b63c502 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеИзмерения/Picture.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеКоманды/Picture.png b/SSL/src/CommonPictures/МетаданныеКоманды/Picture.png deleted file mode 100644 index 3ad335e0a..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеКоманды/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеКоманды/Picture.svg b/SSL/src/CommonPictures/МетаданныеКоманды/Picture.svg new file mode 100644 index 000000000..a9b33a7ac --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеКоманды/Picture.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеКонстанты/Picture.png b/SSL/src/CommonPictures/МетаданныеКонстанты/Picture.png deleted file mode 100644 index 876a713c3..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеКонстанты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеКонстанты/Picture.svg b/SSL/src/CommonPictures/МетаданныеКонстанты/Picture.svg new file mode 100644 index 000000000..3aa9c7f4a --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеКонстанты/Picture.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеКонфигурация/Picture.png b/SSL/src/CommonPictures/МетаданныеКонфигурация/Picture.png deleted file mode 100644 index f1ea30773..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеКонфигурация/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеКонфигурация/Picture.svg b/SSL/src/CommonPictures/МетаданныеКонфигурация/Picture.svg new file mode 100644 index 000000000..92a5db925 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеКонфигурация/Picture.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеКритерииОтбора/Picture.png b/SSL/src/CommonPictures/МетаданныеКритерииОтбора/Picture.png deleted file mode 100644 index 771f423ef..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеКритерииОтбора/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеКритерииОтбора/Picture.svg b/SSL/src/CommonPictures/МетаданныеКритерииОтбора/Picture.svg new file mode 100644 index 000000000..695ab86c5 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеКритерииОтбора/Picture.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеМакеты/Picture.png b/SSL/src/CommonPictures/МетаданныеМакеты/Picture.png deleted file mode 100644 index a3266f91d..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеМакеты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеМакеты/Picture.svg b/SSL/src/CommonPictures/МетаданныеМакеты/Picture.svg new file mode 100644 index 000000000..991dc8140 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеМакеты/Picture.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбработки/Picture.png b/SSL/src/CommonPictures/МетаданныеОбработки/Picture.png deleted file mode 100644 index f56152819..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбработки/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбработки/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбработки/Picture.svg new file mode 100644 index 000000000..570e6f5ce --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбработки/Picture.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщие/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщие/Picture.png deleted file mode 100644 index 7b6ab3958..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщие/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщие/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщие/Picture.svg new file mode 100644 index 000000000..9b26fef9c --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщие/Picture.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеКартинки/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщиеКартинки/Picture.png deleted file mode 100644 index 040d3ad54..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщиеКартинки/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеКартинки/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщиеКартинки/Picture.svg new file mode 100644 index 000000000..c3ad5ca7b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщиеКартинки/Picture.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеКоманды/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщиеКоманды/Picture.png deleted file mode 100644 index 781a100ea..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщиеКоманды/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеКоманды/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщиеКоманды/Picture.svg new file mode 100644 index 000000000..013dc4936 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщиеКоманды/Picture.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеМакеты/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщиеМакеты/Picture.png deleted file mode 100644 index c613d0d8f..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщиеМакеты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеМакеты/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщиеМакеты/Picture.svg new file mode 100644 index 000000000..2290aaf51 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщиеМакеты/Picture.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеМодули/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщиеМодули/Picture.png deleted file mode 100644 index da47f998f..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщиеМодули/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеМодули/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщиеМодули/Picture.svg new file mode 100644 index 000000000..2db3393c0 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщиеМодули/Picture.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеРеквизиты/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщиеРеквизиты/Picture.png deleted file mode 100644 index 91c9926c9..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщиеРеквизиты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеРеквизиты/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщиеРеквизиты/Picture.svg new file mode 100644 index 000000000..1ee228e5e --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщиеРеквизиты/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеФормы/Picture.png b/SSL/src/CommonPictures/МетаданныеОбщиеФормы/Picture.png deleted file mode 100644 index 61436f332..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОбщиеФормы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОбщиеФормы/Picture.svg b/SSL/src/CommonPictures/МетаданныеОбщиеФормы/Picture.svg new file mode 100644 index 000000000..a0fac3775 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОбщиеФормы/Picture.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОпределяемыеТипы/Picture.png b/SSL/src/CommonPictures/МетаданныеОпределяемыеТипы/Picture.png deleted file mode 100644 index c4900e356..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОпределяемыеТипы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОпределяемыеТипы/Picture.svg b/SSL/src/CommonPictures/МетаданныеОпределяемыеТипы/Picture.svg new file mode 100644 index 000000000..cecbec163 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОпределяемыеТипы/Picture.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОпределяемыйТип/Picture.png b/SSL/src/CommonPictures/МетаданныеОпределяемыйТип/Picture.png deleted file mode 100644 index 892a1157c..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОпределяемыйТип/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОпределяемыйТип/Picture.svg b/SSL/src/CommonPictures/МетаданныеОпределяемыйТип/Picture.svg new file mode 100644 index 000000000..72da4ff20 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОпределяемыйТип/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/CommonPictures/МетаданныеОтчеты/Picture.png b/SSL/src/CommonPictures/МетаданныеОтчеты/Picture.png deleted file mode 100644 index a752f2770..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеОтчеты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеОтчеты/Picture.svg b/SSL/src/CommonPictures/МетаданныеОтчеты/Picture.svg new file mode 100644 index 000000000..b7eacda08 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеОтчеты/Picture.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПакетыXDTO/Picture.png b/SSL/src/CommonPictures/МетаданныеПакетыXDTO/Picture.png deleted file mode 100644 index 724b2622d..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПакетыXDTO/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПакетыXDTO/Picture.svg b/SSL/src/CommonPictures/МетаданныеПакетыXDTO/Picture.svg new file mode 100644 index 000000000..50468b56a --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПакетыXDTO/Picture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПараметрыСеанса/Picture.png b/SSL/src/CommonPictures/МетаданныеПараметрыСеанса/Picture.png deleted file mode 100644 index 4f0526330..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПараметрыСеанса/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПараметрыСеанса/Picture.svg b/SSL/src/CommonPictures/МетаданныеПараметрыСеанса/Picture.svg new file mode 100644 index 000000000..77d9b0909 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПараметрыСеанса/Picture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПараметрыФункциональныхОпций/Picture.png b/SSL/src/CommonPictures/МетаданныеПараметрыФункциональныхОпций/Picture.png deleted file mode 100644 index 00b012755..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПараметрыФункциональныхОпций/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПараметрыФункциональныхОпций/Picture.svg b/SSL/src/CommonPictures/МетаданныеПараметрыФункциональныхОпций/Picture.svg new file mode 100644 index 000000000..05f4f0b97 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПараметрыФункциональныхОпций/Picture.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПерерасчеты/Picture.png b/SSL/src/CommonPictures/МетаданныеПерерасчеты/Picture.png deleted file mode 100644 index 1e5e4b5f5..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПерерасчеты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПерерасчеты/Picture.svg b/SSL/src/CommonPictures/МетаданныеПерерасчеты/Picture.svg new file mode 100644 index 000000000..74cd5b917 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПерерасчеты/Picture.svg @@ -0,0 +1,3 @@ + + + diff --git a/SSL/src/CommonPictures/МетаданныеПеречисления/Picture.png b/SSL/src/CommonPictures/МетаданныеПеречисления/Picture.png deleted file mode 100644 index 19ebf43a3..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПеречисления/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПеречисления/Picture.svg b/SSL/src/CommonPictures/МетаданныеПеречисления/Picture.svg new file mode 100644 index 000000000..99ecd0330 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПеречисления/Picture.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПланыВидовРасчета/Picture.png b/SSL/src/CommonPictures/МетаданныеПланыВидовРасчета/Picture.png deleted file mode 100644 index a3cd7d8c6..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПланыВидовРасчета/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПланыВидовРасчета/Picture.svg b/SSL/src/CommonPictures/МетаданныеПланыВидовРасчета/Picture.svg new file mode 100644 index 000000000..84ffd09b7 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПланыВидовРасчета/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПланыВидовХарактеристик/Picture.png b/SSL/src/CommonPictures/МетаданныеПланыВидовХарактеристик/Picture.png deleted file mode 100644 index 142d73bc5..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПланыВидовХарактеристик/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПланыВидовХарактеристик/Picture.svg b/SSL/src/CommonPictures/МетаданныеПланыВидовХарактеристик/Picture.svg new file mode 100644 index 000000000..1602ef9d9 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПланыВидовХарактеристик/Picture.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПланыОбмена/Picture.png b/SSL/src/CommonPictures/МетаданныеПланыОбмена/Picture.png deleted file mode 100644 index 545120749..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПланыОбмена/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПланыОбмена/Picture.svg b/SSL/src/CommonPictures/МетаданныеПланыОбмена/Picture.svg new file mode 100644 index 000000000..c923711f7 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПланыОбмена/Picture.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПланыСчетов/Picture.png b/SSL/src/CommonPictures/МетаданныеПланыСчетов/Picture.png deleted file mode 100644 index bf2faec7a..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПланыСчетов/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПланыСчетов/Picture.svg b/SSL/src/CommonPictures/МетаданныеПланыСчетов/Picture.svg new file mode 100644 index 000000000..af88f8646 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПланыСчетов/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПодпискиНаСобытия/Picture.png b/SSL/src/CommonPictures/МетаданныеПодпискиНаСобытия/Picture.png deleted file mode 100644 index 0afb6412a..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПодпискиНаСобытия/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПодпискиНаСобытия/Picture.svg b/SSL/src/CommonPictures/МетаданныеПодпискиНаСобытия/Picture.svg new file mode 100644 index 000000000..19bdc546c --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПодпискиНаСобытия/Picture.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПодсистемы/Picture.png b/SSL/src/CommonPictures/МетаданныеПодсистемы/Picture.png deleted file mode 100644 index 96adbe5bd..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПодсистемы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПодсистемы/Picture.svg b/SSL/src/CommonPictures/МетаданныеПодсистемы/Picture.svg new file mode 100644 index 000000000..ff277fc60 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПодсистемы/Picture.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПоследовательности/Picture.png b/SSL/src/CommonPictures/МетаданныеПоследовательности/Picture.png deleted file mode 100644 index de2c35ded..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПоследовательности/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПоследовательности/Picture.svg b/SSL/src/CommonPictures/МетаданныеПоследовательности/Picture.svg new file mode 100644 index 000000000..e6bbe461f --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПоследовательности/Picture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПризнакиУчета/Picture.png b/SSL/src/CommonPictures/МетаданныеПризнакиУчета/Picture.png deleted file mode 100644 index 5e35aeeac..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПризнакиУчета/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПризнакиУчета/Picture.svg b/SSL/src/CommonPictures/МетаданныеПризнакиУчета/Picture.svg new file mode 100644 index 000000000..6ecb644e1 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПризнакиУчета/Picture.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеПризнакиУчетаСубконто/Picture.png b/SSL/src/CommonPictures/МетаданныеПризнакиУчетаСубконто/Picture.png deleted file mode 100644 index 855f8b4ba..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеПризнакиУчетаСубконто/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеПризнакиУчетаСубконто/Picture.svg b/SSL/src/CommonPictures/МетаданныеПризнакиУчетаСубконто/Picture.svg new file mode 100644 index 000000000..30e2ba49b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеПризнакиУчетаСубконто/Picture.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРегистрыБухгалтерии/Picture.png b/SSL/src/CommonPictures/МетаданныеРегистрыБухгалтерии/Picture.png deleted file mode 100644 index f9fbd61e2..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРегистрыБухгалтерии/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРегистрыБухгалтерии/Picture.svg b/SSL/src/CommonPictures/МетаданныеРегистрыБухгалтерии/Picture.svg new file mode 100644 index 000000000..a8543a119 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРегистрыБухгалтерии/Picture.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРегистрыРасчета/Picture.png b/SSL/src/CommonPictures/МетаданныеРегистрыРасчета/Picture.png deleted file mode 100644 index 561514d66..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРегистрыРасчета/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРегистрыРасчета/Picture.svg b/SSL/src/CommonPictures/МетаданныеРегистрыРасчета/Picture.svg new file mode 100644 index 000000000..8c7299f9d --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРегистрыРасчета/Picture.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРегистрыСведений/Picture.png b/SSL/src/CommonPictures/МетаданныеРегистрыСведений/Picture.png deleted file mode 100644 index 91d948393..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРегистрыСведений/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРегистрыСведений/Picture.svg b/SSL/src/CommonPictures/МетаданныеРегистрыСведений/Picture.svg new file mode 100644 index 000000000..89b50315e --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРегистрыСведений/Picture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРегламентныеЗадания/Picture.png b/SSL/src/CommonPictures/МетаданныеРегламентныеЗадания/Picture.png deleted file mode 100644 index eeb9b427e..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРегламентныеЗадания/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРегламентныеЗадания/Picture.svg b/SSL/src/CommonPictures/МетаданныеРегламентныеЗадания/Picture.svg new file mode 100644 index 000000000..8a5c5c729 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРегламентныеЗадания/Picture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРеквизиты/Picture.png b/SSL/src/CommonPictures/МетаданныеРеквизиты/Picture.png deleted file mode 100644 index 8158a7223..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРеквизиты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРеквизиты/Picture.svg b/SSL/src/CommonPictures/МетаданныеРеквизиты/Picture.svg new file mode 100644 index 000000000..dd94a3483 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРеквизиты/Picture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРеквизитыАдресации/Picture.png b/SSL/src/CommonPictures/МетаданныеРеквизитыАдресации/Picture.png deleted file mode 100644 index b1e93b9a7..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРеквизитыАдресации/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРеквизитыАдресации/Picture.svg b/SSL/src/CommonPictures/МетаданныеРеквизитыАдресации/Picture.svg new file mode 100644 index 000000000..48adc3055 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРеквизитыАдресации/Picture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРесурсы/Picture.png b/SSL/src/CommonPictures/МетаданныеРесурсы/Picture.png deleted file mode 100644 index a40670ce4..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРесурсы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРесурсы/Picture.svg b/SSL/src/CommonPictures/МетаданныеРесурсы/Picture.svg new file mode 100644 index 000000000..346ed8d46 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРесурсы/Picture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеРоли/Picture.png b/SSL/src/CommonPictures/МетаданныеРоли/Picture.png deleted file mode 100644 index 149b39b6d..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеРоли/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеРоли/Picture.svg b/SSL/src/CommonPictures/МетаданныеРоли/Picture.svg new file mode 100644 index 000000000..b88cb6f6b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеРоли/Picture.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеСправочники/Picture.png b/SSL/src/CommonPictures/МетаданныеСправочники/Picture.png deleted file mode 100644 index b8963eda5..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеСправочники/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеСправочники/Picture.svg b/SSL/src/CommonPictures/МетаданныеСправочники/Picture.svg new file mode 100644 index 000000000..383a43efa --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеСправочники/Picture.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеСтандартныеРеквизиты/Picture.png b/SSL/src/CommonPictures/МетаданныеСтандартныеРеквизиты/Picture.png deleted file mode 100644 index 6ddd933ed..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеСтандартныеРеквизиты/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеСтандартныеРеквизиты/Picture.svg b/SSL/src/CommonPictures/МетаданныеСтандартныеРеквизиты/Picture.svg new file mode 100644 index 000000000..95032c70e --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеСтандартныеРеквизиты/Picture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеСтандартныеТабличныеЧасти/Picture.png b/SSL/src/CommonPictures/МетаданныеСтандартныеТабличныеЧасти/Picture.png deleted file mode 100644 index 830fc2382..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеСтандартныеТабличныеЧасти/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеСтандартныеТабличныеЧасти/Picture.svg b/SSL/src/CommonPictures/МетаданныеСтандартныеТабличныеЧасти/Picture.svg new file mode 100644 index 000000000..bf9a0a3d7 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеСтандартныеТабличныеЧасти/Picture.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеСтили/Picture.png b/SSL/src/CommonPictures/МетаданныеСтили/Picture.png deleted file mode 100644 index 89ad2a211..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеСтили/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеСтили/Picture.svg b/SSL/src/CommonPictures/МетаданныеСтили/Picture.svg new file mode 100644 index 000000000..adacf1d21 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеСтили/Picture.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеТабличныеЧасти/Picture.png b/SSL/src/CommonPictures/МетаданныеТабличныеЧасти/Picture.png deleted file mode 100644 index 066ddb4cc..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеТабличныеЧасти/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеТабличныеЧасти/Picture.svg b/SSL/src/CommonPictures/МетаданныеТабличныеЧасти/Picture.svg new file mode 100644 index 000000000..c22cd8104 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеТабличныеЧасти/Picture.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеФормы/Picture.png b/SSL/src/CommonPictures/МетаданныеФормы/Picture.png deleted file mode 100644 index 0a545839e..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеФормы/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеФормы/Picture.svg b/SSL/src/CommonPictures/МетаданныеФормы/Picture.svg new file mode 100644 index 000000000..674d46ea3 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеФормы/Picture.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеФункциональныеОпции/Picture.png b/SSL/src/CommonPictures/МетаданныеФункциональныеОпции/Picture.png deleted file mode 100644 index 804bf75c4..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеФункциональныеОпции/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеФункциональныеОпции/Picture.svg b/SSL/src/CommonPictures/МетаданныеФункциональныеОпции/Picture.svg new file mode 100644 index 000000000..92f85d278 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеФункциональныеОпции/Picture.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеХранилищаНастроек/Picture.png b/SSL/src/CommonPictures/МетаданныеХранилищаНастроек/Picture.png deleted file mode 100644 index 42a4a4667..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеХранилищаНастроек/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеХранилищаНастроек/Picture.svg b/SSL/src/CommonPictures/МетаданныеХранилищаНастроек/Picture.svg new file mode 100644 index 000000000..58b5a0a0b --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеХранилищаНастроек/Picture.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеЭлементыСтиля/Picture.png b/SSL/src/CommonPictures/МетаданныеЭлементыСтиля/Picture.png deleted file mode 100644 index b340a3914..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеЭлементыСтиля/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеЭлементыСтиля/Picture.svg b/SSL/src/CommonPictures/МетаданныеЭлементыСтиля/Picture.svg new file mode 100644 index 000000000..0372dc0d8 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеЭлементыСтиля/Picture.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/МетаданныеЯзыки/Picture.png b/SSL/src/CommonPictures/МетаданныеЯзыки/Picture.png deleted file mode 100644 index 6c669467e..000000000 Binary files a/SSL/src/CommonPictures/МетаданныеЯзыки/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/МетаданныеЯзыки/Picture.svg b/SSL/src/CommonPictures/МетаданныеЯзыки/Picture.svg new file mode 100644 index 000000000..55f787853 --- /dev/null +++ b/SSL/src/CommonPictures/МетаданныеЯзыки/Picture.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/НазначенияВариантовОтчетов/Picture.png b/SSL/src/CommonPictures/НазначенияВариантовОтчетов/Picture.png deleted file mode 100644 index 94786542b..000000000 Binary files a/SSL/src/CommonPictures/НазначенияВариантовОтчетов/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/НазначенияВариантовОтчетов/Picture.svg b/SSL/src/CommonPictures/НазначенияВариантовОтчетов/Picture.svg new file mode 100644 index 000000000..38992dbfc --- /dev/null +++ b/SSL/src/CommonPictures/НазначенияВариантовОтчетов/Picture.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/НастройкаОбменаДаннымиАктивна/Picture.zip b/SSL/src/CommonPictures/НастройкаОбменаДаннымиАктивна/Picture.zip new file mode 100644 index 000000000..5adf3a19f 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..a4e83652c --- /dev/null +++ b/SSL/src/CommonPictures/НастройкаОбменаДаннымиАктивна/НастройкаОбменаДаннымиАктивна.mdo @@ -0,0 +1,8 @@ + + + НастройкаОбменаДаннымиАктивна + + ru + Настройка обмена данными активна + + diff --git a/SSL/src/CommonPictures/ПереводТекста/Picture.png b/SSL/src/CommonPictures/ПереводТекста/Picture.png deleted file mode 100644 index c20134592..000000000 Binary files a/SSL/src/CommonPictures/ПереводТекста/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/ПереводТекста/Picture.svg b/SSL/src/CommonPictures/ПереводТекста/Picture.svg new file mode 100644 index 000000000..73e83bb00 --- /dev/null +++ b/SSL/src/CommonPictures/ПереводТекста/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/CommonPictures/РазделительШагов/Picture.png b/SSL/src/CommonPictures/РазделительШагов/Picture.png deleted file mode 100644 index 424fae550..000000000 Binary files a/SSL/src/CommonPictures/РазделительШагов/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/РазделительШагов/Picture.svg b/SSL/src/CommonPictures/РазделительШагов/Picture.svg new file mode 100644 index 000000000..de4f54420 --- /dev/null +++ b/SSL/src/CommonPictures/РазделительШагов/Picture.svg @@ -0,0 +1,3 @@ + + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаАвто/Picture.svg b/SSL/src/CommonPictures/РазмещениеТекстаАвто/Picture.svg new file mode 100644 index 000000000..0002fb282 --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаАвто/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаАвто/РазмещениеТекстаАвто.mdo b/SSL/src/CommonPictures/РазмещениеТекстаАвто/РазмещениеТекстаАвто.mdo new file mode 100644 index 000000000..e6b03de2c --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаАвто/РазмещениеТекстаАвто.mdo @@ -0,0 +1,8 @@ + + + РазмещениеТекстаАвто + + ru + Авто (Размещение текста) + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаЗабивать/Picture.svg b/SSL/src/CommonPictures/РазмещениеТекстаЗабивать/Picture.svg new file mode 100644 index 000000000..690ebd76a --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаЗабивать/Picture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаЗабивать/РазмещениеТекстаЗабивать.mdo b/SSL/src/CommonPictures/РазмещениеТекстаЗабивать/РазмещениеТекстаЗабивать.mdo new file mode 100644 index 000000000..b9da0ea1d --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаЗабивать/РазмещениеТекстаЗабивать.mdo @@ -0,0 +1,8 @@ + + + РазмещениеТекстаЗабивать + + ru + Забивать (Размещение текста) + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаОбрезать/Picture.svg b/SSL/src/CommonPictures/РазмещениеТекстаОбрезать/Picture.svg new file mode 100644 index 000000000..3937c79a9 --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаОбрезать/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаОбрезать/РазмещениеТекстаОбрезать.mdo b/SSL/src/CommonPictures/РазмещениеТекстаОбрезать/РазмещениеТекстаОбрезать.mdo new file mode 100644 index 000000000..a48f12c5a --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаОбрезать/РазмещениеТекстаОбрезать.mdo @@ -0,0 +1,8 @@ + + + РазмещениеТекстаОбрезать + + ru + Обрезать (Размещение текста) + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаПереносить/Picture.svg b/SSL/src/CommonPictures/РазмещениеТекстаПереносить/Picture.svg new file mode 100644 index 000000000..4dc4fe886 --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаПереносить/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/РазмещениеТекстаПереносить/РазмещениеТекстаПереносить.mdo b/SSL/src/CommonPictures/РазмещениеТекстаПереносить/РазмещениеТекстаПереносить.mdo new file mode 100644 index 000000000..e74441ed8 --- /dev/null +++ b/SSL/src/CommonPictures/РазмещениеТекстаПереносить/РазмещениеТекстаПереносить.mdo @@ -0,0 +1,8 @@ + + + РазмещениеТекстаПереносить + + ru + Переносить (Размещение текста) + + diff --git a/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.png b/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.png deleted file mode 100644 index f6ae7281e..000000000 Binary files a/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.svg b/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.svg new file mode 100644 index 000000000..a2b3208db --- /dev/null +++ b/SSL/src/CommonPictures/РедактироватьАдресСайта/Picture.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхВыгрузить/Picture.png b/SSL/src/CommonPictures/СинхронизацияДанныхВыгрузить/Picture.png deleted file mode 100644 index a6b599ca3..000000000 Binary files a/SSL/src/CommonPictures/СинхронизацияДанныхВыгрузить/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхВыгрузить/Picture.svg b/SSL/src/CommonPictures/СинхронизацияДанныхВыгрузить/Picture.svg new file mode 100644 index 000000000..317c57f0a --- /dev/null +++ b/SSL/src/CommonPictures/СинхронизацияДанныхВыгрузить/Picture.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхНедоступна/Picture.png b/SSL/src/CommonPictures/СинхронизацияДанныхНедоступна/Picture.png deleted file mode 100644 index 146854f62..000000000 Binary files a/SSL/src/CommonPictures/СинхронизацияДанныхНедоступна/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхНедоступна/Picture.svg b/SSL/src/CommonPictures/СинхронизацияДанныхНедоступна/Picture.svg new file mode 100644 index 000000000..54b63c4eb --- /dev/null +++ b/SSL/src/CommonPictures/СинхронизацияДанныхНедоступна/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.png b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.png deleted file mode 100644 index e5c96a020..000000000 Binary files a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.svg b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.svg new file mode 100644 index 000000000..2058b0448 --- /dev/null +++ b/SSL/src/CommonPictures/СинхронизацияДанныхСостояниеСинхронизации/Picture.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/СостоянияУстановкиКомпонентДляРаботыСЭП/Picture.svg b/SSL/src/CommonPictures/СостоянияУстановкиКомпонентДляРаботыСЭП/Picture.svg new file mode 100644 index 000000000..cf1262ba7 --- /dev/null +++ b/SSL/src/CommonPictures/СостоянияУстановкиКомпонентДляРаботыСЭП/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/СостоянияУстановкиКомпонентДляРаботыСЭП/СостоянияУстановкиКомпонентДляРаботыСЭП.mdo b/SSL/src/CommonPictures/СостоянияУстановкиКомпонентДляРаботыСЭП/СостоянияУстановкиКомпонентДляРаботыСЭП.mdo new file mode 100644 index 000000000..3d93cca1c --- /dev/null +++ b/SSL/src/CommonPictures/СостоянияУстановкиКомпонентДляРаботыСЭП/СостоянияУстановкиКомпонентДляРаботыСЭП.mdo @@ -0,0 +1,8 @@ + + + СостоянияУстановкиКомпонентДляРаботыСЭП + + ru + Состояния установки компонент для работы с ЭП + + diff --git a/SSL/src/CommonPictures/ТипыСертификатов/Picture.png b/SSL/src/CommonPictures/ТипыСертификатов/Picture.png deleted file mode 100644 index 16fa3f8e8..000000000 Binary files a/SSL/src/CommonPictures/ТипыСертификатов/Picture.png and /dev/null differ diff --git a/SSL/src/CommonPictures/ТипыСертификатов/Picture.svg b/SSL/src/CommonPictures/ТипыСертификатов/Picture.svg new file mode 100644 index 000000000..5325a00c8 --- /dev/null +++ b/SSL/src/CommonPictures/ТипыСертификатов/Picture.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортCOM/Picture.svg b/SSL/src/CommonPictures/ТранспортCOM/Picture.svg new file mode 100644 index 000000000..111ff4578 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортCOM/Picture.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортCOM/ТранспортCOM.mdo b/SSL/src/CommonPictures/ТранспортCOM/ТранспортCOM.mdo new file mode 100644 index 000000000..511eae5fb --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортCOM/ТранспортCOM.mdo @@ -0,0 +1,8 @@ + + + ТранспортCOM + + ru + Транспорт COM + + diff --git a/SSL/src/CommonPictures/ТранспортESB1C/Picture.svg b/SSL/src/CommonPictures/ТранспортESB1C/Picture.svg new file mode 100644 index 000000000..dc9cbd6b0 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортESB1C/Picture.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортESB1C/ТранспортESB1C.mdo b/SSL/src/CommonPictures/ТранспортESB1C/ТранспортESB1C.mdo new file mode 100644 index 000000000..8ac77e4b2 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортESB1C/ТранспортESB1C.mdo @@ -0,0 +1,8 @@ + + + ТранспортESB1C + + ru + Транспорт ESB1 C + + diff --git a/SSL/src/CommonPictures/ТранспортFTP/Picture.svg b/SSL/src/CommonPictures/ТранспортFTP/Picture.svg new file mode 100644 index 000000000..c06be58d1 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортFTP/Picture.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортFTP/ТранспортFTP.mdo b/SSL/src/CommonPictures/ТранспортFTP/ТранспортFTP.mdo new file mode 100644 index 000000000..fcffef30f --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортFTP/ТранспортFTP.mdo @@ -0,0 +1,8 @@ + + + ТранспортFTP + + ru + Транспорт FTP + + diff --git a/SSL/src/CommonPictures/ТранспортFresh/Picture.svg b/SSL/src/CommonPictures/ТранспортFresh/Picture.svg new file mode 100644 index 000000000..0851bc543 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортFresh/Picture.svg @@ -0,0 +1,7 @@ + + + + Layer 1 + + + \ No newline at end of file diff --git a/SSL/src/CommonPictures/ТранспортFresh/ТранспортFresh.mdo b/SSL/src/CommonPictures/ТранспортFresh/ТранспортFresh.mdo new file mode 100644 index 000000000..529b58786 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортFresh/ТранспортFresh.mdo @@ -0,0 +1,8 @@ + + + ТранспортFresh + + ru + Транспорт fresh + + diff --git a/SSL/src/CommonPictures/ТранспортHTTP/Picture.svg b/SSL/src/CommonPictures/ТранспортHTTP/Picture.svg new file mode 100644 index 000000000..d2dcf5d00 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортHTTP/Picture.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортHTTP/ТранспортHTTP.mdo b/SSL/src/CommonPictures/ТранспортHTTP/ТранспортHTTP.mdo new file mode 100644 index 000000000..699e30e32 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортHTTP/ТранспортHTTP.mdo @@ -0,0 +1,8 @@ + + + ТранспортHTTP + + ru + Транспорт HTTP + + diff --git a/SSL/src/CommonPictures/ТранспортWS/Picture.svg b/SSL/src/CommonPictures/ТранспортWS/Picture.svg new file mode 100644 index 000000000..dd98e9770 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортWS/Picture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортWS/ТранспортWS.mdo b/SSL/src/CommonPictures/ТранспортWS/ТранспортWS.mdo new file mode 100644 index 000000000..2866e6868 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортWS/ТранспортWS.mdo @@ -0,0 +1,8 @@ + + + ТранспортWS + + ru + Транспорт WS + + diff --git a/SSL/src/CommonPictures/ТранспортПассивныйРежим/Picture.svg b/SSL/src/CommonPictures/ТранспортПассивныйРежим/Picture.svg new file mode 100644 index 000000000..aa2ae2500 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортПассивныйРежим/Picture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортПассивныйРежим/ТранспортПассивныйРежим.mdo b/SSL/src/CommonPictures/ТранспортПассивныйРежим/ТранспортПассивныйРежим.mdo new file mode 100644 index 000000000..b09201352 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортПассивныйРежим/ТранспортПассивныйРежим.mdo @@ -0,0 +1,8 @@ + + + ТранспортПассивныйРежим + + ru + Транспорт пассивный режим + + diff --git a/SSL/src/CommonPictures/ТранспортПередачаДанных/Picture.svg b/SSL/src/CommonPictures/ТранспортПередачаДанных/Picture.svg new file mode 100644 index 000000000..ac9e552f1 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортПередачаДанных/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/ТранспортПередачаДанных/ТранспортПередачаДанных.mdo b/SSL/src/CommonPictures/ТранспортПередачаДанных/ТранспортПередачаДанных.mdo new file mode 100644 index 000000000..140d4fe23 --- /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..92294b527 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..fed262b42 --- /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..1b27e5cdd 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..cdd0d9b87 --- /dev/null +++ b/SSL/src/CommonPictures/ТранспортЭлектроннаяПочта/ТранспортЭлектроннаяПочта.mdo @@ -0,0 +1,8 @@ + + + ТранспортЭлектроннаяПочта + + ru + Транспорт электронная почта + + diff --git a/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания/Picture.svg b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания/Picture.svg new file mode 100644 index 000000000..e9e53a3da --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания.mdo b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания.mdo new file mode 100644 index 000000000..ee92fede4 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания/УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания.mdo @@ -0,0 +1,8 @@ + + + УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания + + ru + Уровень доступа добавление без просмотра и редактирования и создания + + diff --git a/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезРедактированияИСоздания/Picture.svg b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезРедактированияИСоздания/Picture.svg new file mode 100644 index 000000000..57e5f67aa --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезРедактированияИСоздания/Picture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезРедактированияИСоздания/УровеньДоступаДобавлениеБезРедактированияИСоздания.mdo b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезРедактированияИСоздания/УровеньДоступаДобавлениеБезРедактированияИСоздания.mdo new file mode 100644 index 000000000..f467c4bbb --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезРедактированияИСоздания/УровеньДоступаДобавлениеБезРедактированияИСоздания.mdo @@ -0,0 +1,8 @@ + + + УровеньДоступаДобавлениеБезРедактированияИСоздания + + ru + Уровень доступа добавление без редактирования и создания + + diff --git a/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезСоздания/Picture.svg b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезСоздания/Picture.svg new file mode 100644 index 000000000..b925e3415 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезСоздания/Picture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезСоздания/УровеньДоступаДобавлениеБезСоздания.mdo b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезСоздания/УровеньДоступаДобавлениеБезСоздания.mdo new file mode 100644 index 000000000..411dbb3f3 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаДобавлениеБезСоздания/УровеньДоступаДобавлениеБезСоздания.mdo @@ -0,0 +1,8 @@ + + + УровеньДоступаДобавлениеБезСоздания + + ru + Уровень доступа добавление без создания + + diff --git a/SSL/src/CommonPictures/УровеньДоступаИзменениеБезПросмотраИРедактирования/Picture.svg b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезПросмотраИРедактирования/Picture.svg new file mode 100644 index 000000000..fb126bab1 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезПросмотраИРедактирования/Picture.svg @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/CommonPictures/УровеньДоступаИзменениеБезПросмотраИРедактирования/УровеньДоступаИзменениеБезПросмотраИРедактирования.mdo b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезПросмотраИРедактирования/УровеньДоступаИзменениеБезПросмотраИРедактирования.mdo new file mode 100644 index 000000000..a72cc37b9 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезПросмотраИРедактирования/УровеньДоступаИзменениеБезПросмотраИРедактирования.mdo @@ -0,0 +1,8 @@ + + + УровеньДоступаИзменениеБезПросмотраИРедактирования + + ru + Уровень доступа изменение без просмотра и редактирования + + diff --git a/SSL/src/CommonPictures/УровеньДоступаИзменениеБезРедактирования/Picture.svg b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезРедактирования/Picture.svg new file mode 100644 index 000000000..cf1db3f7d --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезРедактирования/Picture.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/SSL/src/CommonPictures/УровеньДоступаИзменениеБезРедактирования/УровеньДоступаИзменениеБезРедактирования.mdo b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезРедактирования/УровеньДоступаИзменениеБезРедактирования.mdo new file mode 100644 index 000000000..cceaae191 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаИзменениеБезРедактирования/УровеньДоступаИзменениеБезРедактирования.mdo @@ -0,0 +1,8 @@ + + + УровеньДоступаИзменениеБезРедактирования + + ru + Уровень доступа изменение без редактирования + + diff --git a/SSL/src/CommonPictures/УровеньДоступаЧтениеБезПросмотра/Picture.svg b/SSL/src/CommonPictures/УровеньДоступаЧтениеБезПросмотра/Picture.svg new file mode 100644 index 000000000..32d39653a --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаЧтениеБезПросмотра/Picture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/SSL/src/CommonPictures/УровеньДоступаЧтениеБезПросмотра/УровеньДоступаЧтениеБезПросмотра.mdo b/SSL/src/CommonPictures/УровеньДоступаЧтениеБезПросмотра/УровеньДоступаЧтениеБезПросмотра.mdo new file mode 100644 index 000000000..cdbf27557 --- /dev/null +++ b/SSL/src/CommonPictures/УровеньДоступаЧтениеБезПросмотра/УровеньДоступаЧтениеБезПросмотра.mdo @@ -0,0 +1,8 @@ + + + УровеньДоступаЧтениеБезПросмотра + + ru + Уровень доступа чтение без просмотра + + diff --git a/SSL/src/CommonPictures/ЯндексДиск/Picture.png b/SSL/src/CommonPictures/ЯндексДиск/Picture.png new file mode 100644 index 000000000..80ca21ccd Binary files /dev/null and b/SSL/src/CommonPictures/ЯндексДиск/Picture.png differ diff --git a/SSL/src/CommonPictures/ЯндексДиск/ЯндексДиск.mdo b/SSL/src/CommonPictures/ЯндексДиск/ЯндексДиск.mdo new file mode 100644 index 000000000..8c9c5129d --- /dev/null +++ b/SSL/src/CommonPictures/ЯндексДиск/ЯндексДиск.mdo @@ -0,0 +1,8 @@ + + + ЯндексДиск + + ru + Яндекс диск + + diff --git a/SSL/src/CommonTemplates/ИнструкцияДляУстановкиКодаДляПредопределенногоУзла_ru/ru.html b/SSL/src/CommonTemplates/ИнструкцияДляУстановкиКодаДляПредопределенногоУзла_ru/ru.html index e2620d3ba..c0352dac1 100644 --- a/SSL/src/CommonTemplates/ИнструкцияДляУстановкиКодаДляПредопределенногоУзла_ru/ru.html +++ b/SSL/src/CommonTemplates/ИнструкцияДляУстановкиКодаДляПредопределенногоУзла_ru/ru.html @@ -1,14 +1,14 @@
                  -
                  Для исправления ошибки перейдите в периферийную информационную базу. 
                  -
                  Откройте форму настройками синхронизации. 
                  +
                  Для исправления ошибки перейдите в периферийную информационную базу.
                  +
                  Откройте форму настройками синхронизации.
                  Выберите настройку синхронизацию, которую необходимо исправить.
                  -
                  В меню Еще выберите Новый код предопределенного узла...
                  +
                  В меню Еще выберите Новый код предопределенного узла...

                  -
                  Ознакомьтесь с информацией на форме и нажмите Установить новый код.
                  +
                  Ознакомьтесь с информацией на форме и нажмите Установить новый код.

                  -
                                
                  +
                  После этого повторите синхронизацию (или создайте новую настройку обмена).


                  diff --git a/SSL/src/CommonTemplates/МакетШтемпеляЭЦПOfficeOpen/Template.txt b/SSL/src/CommonTemplates/ШтампЭлектроннойПодписиOfficeOpen/Template.txt similarity index 62% rename from SSL/src/CommonTemplates/МакетШтемпеляЭЦПOfficeOpen/Template.txt rename to SSL/src/CommonTemplates/ШтампЭлектроннойПодписиOfficeOpen/Template.txt index b4c928d23..a449355a0 100644 --- a/SSL/src/CommonTemplates/МакетШтемпеляЭЦПOfficeOpen/Template.txt +++ b/SSL/src/CommonTemplates/ШтампЭлектроннойПодписиOfficeOpen/Template.txt @@ -2,40 +2,46 @@ - - + + - - + + + + + + - + - - + + - - + + - + - - - - + + + + + - - - - + + + + + [Заголовок] @@ -45,21 +51,23 @@ - + - - - + + + + - - - + + + + [ЗаголовокСертификат]: @@ -67,21 +75,23 @@ - + - - - + + + + - - - + + + + [Сертификат] @@ -91,21 +101,23 @@ - + - - - + + + + - - - + + + + [ЗаголовокВладелец]: @@ -113,21 +125,23 @@ - + - - - + + + + - - - + + + + [Владелец] @@ -137,21 +151,23 @@ - + - - - + + + + - - - + + + + [ЗаголовокПериодДействия]: @@ -159,21 +175,23 @@ - + - - - + + + + - - - + + + + [ПериодДействия] diff --git a/SSL/src/CommonTemplates/МакетШтемпеляЭЦПOfficeOpen/МакетШтемпеляЭЦПOfficeOpen.mdo b/SSL/src/CommonTemplates/ШтампЭлектроннойПодписиOfficeOpen/ШтампЭлектроннойПодписиOfficeOpen.mdo similarity index 64% rename from SSL/src/CommonTemplates/МакетШтемпеляЭЦПOfficeOpen/МакетШтемпеляЭЦПOfficeOpen.mdo rename to SSL/src/CommonTemplates/ШтампЭлектроннойПодписиOfficeOpen/ШтампЭлектроннойПодписиOfficeOpen.mdo index 1919841dd..92527238f 100644 --- a/SSL/src/CommonTemplates/МакетШтемпеляЭЦПOfficeOpen/МакетШтемпеляЭЦПOfficeOpen.mdo +++ b/SSL/src/CommonTemplates/ШтампЭлектроннойПодписиOfficeOpen/ШтампЭлектроннойПодписиOfficeOpen.mdo @@ -1,9 +1,9 @@ - МакетШтемпеляЭЦПOfficeOpen + ШтампЭлектроннойПодписиOfficeOpen ru - Макет штемпеля ЭЦП Office Open + Штамп электронной подписи Office Open TextDocument diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index 1edf78df2..87425d16a 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,17 +1,17 @@ - + БиблиотекаСтандартныхПодсистем ru Библиотека стандартных подсистем, редакция 3.1 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian @@ -19,8 +19,8 @@ Role.АдминистраторСистемы Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Фирма "1С" - 3.1.10.492 - http://downloads.v8.1c.ru/tmplts/ + 3.1.11.142 + https://downloads.v8.1c.ru/tmplts/ true @@ -49,13 +49,13 @@ ru - http://www.1c.ru + https://www.1c.ru Managed NotAutoFree UseWithWarnings TaxiEnableVersion8_2 - 8.3.21 + 8.3.24 Русский @@ -155,12 +155,20 @@ StyleItem.ЦветФонаОтрицательногоЗначения StyleItem.ЦветФонаПоложительногоЗначения StyleItem.ЦветФонаПредупреждения + StyleItem.ЦветШтампаЭП StyleItem.ШрифтМеток StyleItem.ШрифтОченьКрупныйШрифтТекста CommonPicture.BotFather + CommonPicture.BotFatherWebChat + CommonPicture.BotFatherWebhook + CommonPicture.BotFatherWhatsapp CommonPicture.BotFatherВконтакте + CommonPicture.GooggleDrive CommonPicture.GoogleMaps CommonPicture.Skype + CommonPicture.WebChat16 + CommonPicture.Webhook16 + CommonPicture.WhatsApp16 CommonPicture.Адрес CommonPicture.АнализДанных48 CommonPicture.АнимацияПодтверждения @@ -263,6 +271,7 @@ CommonPicture.ЗнакСтоп CommonPicture.ЗнакСтопЧБ CommonPicture.ЗначокЗаставкиВнешнейОперации + CommonPicture.ЗначокУстановкиКомпонентДляРаботыСЭП CommonPicture.ЗначокЩита CommonPicture.ИерархическийСписок CommonPicture.ИзменитьШрифт @@ -415,6 +424,7 @@ CommonPicture.НаследованиеОтключено CommonPicture.НаследованиеОтключеноСПапкой CommonPicture.НастроитьСостоянияОригиналаПервичногоДокумента + CommonPicture.НастройкаОбменаДаннымиАктивна CommonPicture.НезавершившаясяПроверка CommonPicture.НетГраницы CommonPicture.ОбновитьФайлИзФайлаНаДиске @@ -518,6 +528,10 @@ CommonPicture.РазделАдминистрирование CommonPicture.РазделАдминистрирование48 CommonPicture.РазделительШагов + CommonPicture.РазмещениеТекстаАвто + CommonPicture.РазмещениеТекстаЗабивать + CommonPicture.РазмещениеТекстаОбрезать + CommonPicture.РазмещениеТекстаПереносить CommonPicture.РазорватьСоединение CommonPicture.РазрешитьРедактированиеРеквизитовОбъекта CommonPicture.Рассчитать @@ -588,6 +602,7 @@ CommonPicture.СостоянияРасширенийОшибка CommonPicture.СостоянияРасширенийПодключено CommonPicture.СостоянияСертификатов + CommonPicture.СостоянияУстановкиКомпонентДляРаботыСЭП CommonPicture.СохранитьВариантОтчета CommonPicture.СохранитьКак CommonPicture.СохранитьФайлКак @@ -646,10 +661,25 @@ CommonPicture.ТолстаяГраницаВокруг CommonPicture.ТолстаяГраницаСверху CommonPicture.ТолстаяГраницаСнизу + CommonPicture.ТранспортCOM + CommonPicture.ТранспортESB1C + CommonPicture.ТранспортFresh + CommonPicture.ТранспортFTP + CommonPicture.ТранспортHTTP + CommonPicture.ТранспортWS + CommonPicture.ТранспортПассивныйРежим + CommonPicture.ТранспортПередачаДанных + CommonPicture.ТранспортПоУмолчанию + CommonPicture.ТранспортЭлектроннаяПочта CommonPicture.УвеличитьШрифт CommonPicture.УменьшитьШрифт CommonPicture.УровеньДоступаАдминистрированиеИсточника + CommonPicture.УровеньДоступаДобавлениеБезПросмотраИРедактированияИСоздания + CommonPicture.УровеньДоступаДобавлениеБезРедактированияИСоздания + CommonPicture.УровеньДоступаДобавлениеБезСоздания CommonPicture.УровеньДоступаЕстьПраво + CommonPicture.УровеньДоступаИзменениеБезПросмотраИРедактирования + CommonPicture.УровеньДоступаИзменениеБезРедактирования CommonPicture.УровеньДоступаИспользование CommonPicture.УровеньДоступаИспользованиеИАдминистрированиеИсточника CommonPicture.УровеньДоступаИспользованиеИсточника @@ -659,6 +689,7 @@ CommonPicture.УровеньДоступаРедактирование CommonPicture.УровеньДоступаСоздание CommonPicture.УровеньДоступаУстановка + CommonPicture.УровеньДоступаЧтениеБезПросмотра CommonPicture.Успешно CommonPicture.Успешно32 CommonPicture.УстановитьОтветственногоЗаВзаимодействие @@ -691,6 +722,7 @@ CommonPicture.ЭлектронноеПисьмоВходящее CommonPicture.ЭлектронноеПисьмоИсходящее CommonPicture.ЭтапыПодтверждения + CommonPicture.ЯндексДиск CommonPicture.ЯндексКарты CommonPicture.УдалитьИнформация SessionParameter.АвторизованныйПользователь @@ -791,6 +823,7 @@ Role.ДобавлениеИзменениеСерверовDSS Role.ДобавлениеИзменениеСертификатовКлючейЭлектроннойПодписиИШифрования Role.ДобавлениеИзменениеСнимковОтчетов + Role.ДобавлениеИзменениеСогласийНаОбработкуПерсональныхДанных Role.ДобавлениеИзменениеСостоянийОригиналовПервичныхДокументов Role.ДобавлениеИзменениеУчетныхЗаписейСерверовDSS Role.ДобавлениеИзменениеУчетныхЗаписейЭлектроннойПочты @@ -806,10 +839,12 @@ Role.ИзменениеВыполнениеЗадач Role.ИзменениеДополнительныхСведений Role.ИзменениеМакетовПечатныхФорм + Role.ИзменениеМакетовФайловВыгрузки Role.ИзменениеСостоянийОригиналовПервичныхДокументов Role.ИзменениеУчастниковГруппДоступа Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Role.ИспользованиеОбработкиТекущиеДела + Role.ИспользованиеОбработкиУничтожениеПерсональныхДанных Role.ИспользованиеУниверсальногоОтчета Role.НастройкаИОценкаПроизводительности Role.НастройкаСинхронизацииФайлов @@ -848,6 +883,7 @@ Role.ЧтениеОтветовНаВопросыАнкет Role.ЧтениеРассылокОтчетов Role.ЧтениеРезультатовПроверкиУчета + Role.ЧтениеСогласийНаОбработкуПерсональныхДанных Role.ЧтениеСостоянийОригиналовПервичныхДокументов Role.ЧтениеУчетныхЗаписейЭлектроннойПочты Role.ЧтениеШаблоновСообщений @@ -863,10 +899,10 @@ CommonTemplate.КомпонентаПечатиШтрихкодов CommonTemplate.КомпонентаПоискаСтрок CommonTemplate.КомпонентаСканированияДокументов_3_0_1_1033 - CommonTemplate.МакетШтемпеляЭЦПOfficeOpen CommonTemplate.ПолучениеДереваОбработчиковОбновления CommonTemplate.ПустойМакетDOCX CommonTemplate.СтруктураПодчиненности + CommonTemplate.ШтампЭлектроннойПодписиOfficeOpen FilterCriterion.СвязанныеДокументы CommonModule.GoogleПереводчик CommonModule.АвтономнаяРабота @@ -929,6 +965,8 @@ CommonModule.ВнешниеКомпонентыСлужебныйКлиент CommonModule.ВнешниеПользователи CommonModule.ВнешниеПользователиКлиент + CommonModule.ВыгрузкаОбъектовВФайлы + CommonModule.ВыгрузкаОбъектовВФайлыСлужебныйКлиент CommonModule.ГенерацияШтрихкода CommonModule.ГенерацияШтрихкодаСерверПовтИсп CommonModule.ГрафикиРаботы @@ -1060,6 +1098,7 @@ CommonModule.ОбменДаннымиГлобальный CommonModule.ОбменДаннымиКлиент CommonModule.ОбменДаннымиКонтрольЗацикливания + CommonModule.ОбменДаннымиОперацииВебСервисов CommonModule.ОбменДаннымиОценкаПроизводительности CommonModule.ОбменДаннымиПереопределяемый CommonModule.ОбменДаннымиПовтИсп @@ -1085,8 +1124,14 @@ CommonModule.ОбновлениеКонфигурацииВызовСервера CommonModule.ОбновлениеКонфигурацииГлобальный CommonModule.ОбновлениеКонфигурацииКлиент + CommonModule.ОбращенияВТехническуюПоддержкуГлобальный + CommonModule.ОбращенияВТехническуюПоддержкуЛокализация + CommonModule.ОбращенияВТехническуюПоддержкуСлужебный + CommonModule.ОбращенияВТехническуюПоддержкуСлужебныйВызовСервера + CommonModule.ОбращенияВТехническуюПоддержкуСлужебныйКлиент CommonModule.Обсуждения CommonModule.ОбсужденияКлиент + CommonModule.ОбсужденияЛокализация CommonModule.ОбсужденияСлужебный CommonModule.ОбсужденияСлужебныйВызовСервера CommonModule.ОбсужденияСлужебныйКлиент @@ -1130,7 +1175,9 @@ CommonModule.ОценкаПроизводительностиПовтИсп CommonModule.ОценкаПроизводительностиСлужебный CommonModule.ПереводТекстаНаДругиеЯзыки + CommonModule.ПереводТекстаНаДругиеЯзыкиВызовСервера CommonModule.ПереводТекстаНаДругиеЯзыкиКлиент + CommonModule.ПереводТекстаНаДругиеЯзыкиЛокализация CommonModule.ПодключаемыеКоманды CommonModule.ПодключаемыеКомандыВызовСервера CommonModule.ПодключаемыеКомандыГлобальный @@ -1154,7 +1201,6 @@ CommonModule.ПолучениеФайловИзИнтернетаЛокализация CommonModule.ПолучениеФайловИзИнтернетаСлужебный CommonModule.ПолучениеФайловИзИнтернетаСлужебныйВызовСервера - CommonModule.ПолучениеФайловИзИнтернетаСлужебныйЛокализация CommonModule.Пользователи CommonModule.ПользователиКлиент CommonModule.ПользователиКлиентСервер @@ -1175,6 +1221,7 @@ CommonModule.ПрефиксацияОбъектовСлужебный CommonModule.ПрефиксацияОбъектовСобытия CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент + CommonModule.ПроверкаЛегальностиПолученияОбновленияПереопределяемый CommonModule.РаботаВБезопасномРежиме CommonModule.РаботаВБезопасномРежимеКлиент CommonModule.РаботаВБезопасномРежимеКлиентПереопределяемый @@ -1185,6 +1232,7 @@ CommonModule.РаботаСАдресамиКлиент CommonModule.РаботаСАдресамиКлиентСервер CommonModule.РаботаСАдресамиПовтИсп + CommonModule.РаботаСАдресамиСлужебныйКлиент CommonModule.РаботаСБанками CommonModule.РаботаСБанкамиВызовСервера CommonModule.РаботаСБанкамиГлобальный @@ -1195,22 +1243,26 @@ CommonModule.РаботаСКурсамиВалютВызовСервера CommonModule.РаботаСКурсамиВалютГлобальный CommonModule.РаботаСКурсамиВалютКлиент + CommonModule.РаботаСКурсамиВалютКлиентЛокализация CommonModule.РаботаСКурсамиВалютКлиентСервер + CommonModule.РаботаСКурсамиВалютЛокализация CommonModule.РаботаСКурсамиВалютПереопределяемый CommonModule.РаботаСКурсамиВалютСлужебный CommonModule.РаботаСПочтовымиСообщениями CommonModule.РаботаСПочтовымиСообщениямиВызовСервера CommonModule.РаботаСПочтовымиСообщениямиКлиент CommonModule.РаботаСПочтовымиСообщениямиКлиентПереопределяемый + CommonModule.РаботаСПочтовымиСообщениямиЛокализация CommonModule.РаботаСПочтовымиСообщениямиПереопределяемый CommonModule.РаботаСПочтовымиСообщениямиСлужебный + CommonModule.РаботаСПочтовымиСообщениямиСлужебныйКлиент CommonModule.РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер - CommonModule.РаботаСПочтовымиСообщениямиСлужебныйЛокализация CommonModule.РаботаСФайлами CommonModule.РаботаСФайламиВТомахСлужебный CommonModule.РаботаСФайламиКлиент CommonModule.РаботаСФайламиКлиентПереопределяемый CommonModule.РаботаСФайламиКлиентСервер + CommonModule.РаботаСФайламиЛокализация CommonModule.РаботаСФайламиПереопределяемый CommonModule.РаботаСФайламиСлужебный CommonModule.РаботаСФайламиСлужебныйВМоделиСервиса @@ -1257,6 +1309,7 @@ CommonModule.СклонениеПредставленийОбъектовВызовСервера CommonModule.СклонениеПредставленийОбъектовКлиент CommonModule.СклонениеПредставленийОбъектовКлиентСервер + CommonModule.СнимкиОтчетов CommonModule.СоединенияИБ CommonModule.СоединенияИБВызовСервера CommonModule.СоединенияИБКлиент @@ -1304,6 +1357,12 @@ CommonModule.ТекущиеДелаСервер CommonModule.ТекущиеДелаСлужебный CommonModule.ТекущиеДелаСлужебныйПовтИсп + CommonModule.ТранспортСообщенийОбмена + CommonModule.ТранспортСообщенийОбменаВызовСервера + CommonModule.ТранспортСообщенийОбменаКлиент + CommonModule.ТранспортСообщенийОбменаКлиентСервер + CommonModule.ТранспортСообщенийОбменаПереопределяемый + CommonModule.ТранспортСообщенийОбменаПовтИсп CommonModule.УдалениеПомеченныхОбъектов CommonModule.УдалениеПомеченныхОбъектовКлиент CommonModule.УдалениеПомеченныхОбъектовПереопределяемый @@ -1323,7 +1382,9 @@ CommonModule.УправлениеКолонтитулами CommonModule.УправлениеКонтактнойИнформацией CommonModule.УправлениеКонтактнойИнформациейКлиент + CommonModule.УправлениеКонтактнойИнформациейКлиентЛокализация CommonModule.УправлениеКонтактнойИнформациейКлиентСервер + CommonModule.УправлениеКонтактнойИнформациейКлиентСерверЛокализация CommonModule.УправлениеКонтактнойИнформациейЛокализация CommonModule.УправлениеКонтактнойИнформациейПереопределяемый CommonModule.УправлениеКонтактнойИнформациейСлужебный @@ -1390,8 +1451,8 @@ CommonModule.ЭлектроннаяПодписьСлужебныйКлиент CommonModule.ЭлектроннаяПодписьСлужебныйКлиентПовтИсп CommonModule.ЭлектроннаяПодписьСлужебныйКлиентСервер - CommonModule.ЭлектроннаяПодписьСлужебныйЛокализация CommonModule.ЭлектроннаяПодписьСлужебныйПовтИсп + CommonModule.ЭлектроннаяПодписьСлужебныйРФ CommonModule.ЯндексПереводчик CommonAttribute.КомментарийЯзык1 CommonAttribute.КомментарийЯзык2 @@ -1460,6 +1521,7 @@ WebService.RemoteAdministrationOfExchange_2_1_6_1 WebService.RemoteAdministrationOfExchange_2_4_5_1 WebService.RemoteControl + HTTPService.exchange_dsl_1_0_0_1 EventSubscription.ВариантыОтчетовПередУдалениемИдентификатораОбъектаМетаданных EventSubscription.ВариантыОтчетовПриУдаленииПользователя EventSubscription.ВключитьИспользованиеПланаОбмена @@ -1666,6 +1728,7 @@ FunctionalOption.РаботаВАвтономномРежиме FunctionalOption.РаботаВЛокальномРежиме FunctionalOption.РаботаВМоделиСервиса + FunctionalOption.РазрешитьДоступКИнтернетСервисам FunctionalOption.СоздаватьЭлектронныеПодписиНаСервере FunctionalOption.СтандартныеПодсистемыВАвтономномРежиме FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме @@ -1720,12 +1783,15 @@ DefinedType.ОбъектСДополнительнымиКомандами DefinedType.ОбъектСклонения DefinedType.ОбъектСНастраиваемымПорядком + DefinedType.ОбъектСОсновнымиПечатнымиФормами DefinedType.ОбъектСУчетомОригиналовПервичныхДокументов DefinedType.Организация DefinedType.ОтложенныйБизнесПроцесс + DefinedType.ПланыОбменаБСД DefinedType.ПодписанныйОбъект DefinedType.Подразделение DefinedType.ПолеРегистраКлючейДоступаКРегистрам + DefinedType.ПолучательПечатныхФорм DefinedType.ПолучательРассылки DefinedType.Пользователь DefinedType.ПредметВзаимодействия @@ -1763,6 +1829,7 @@ CommonCommand.ЗадачиПоПредмету CommonCommand.ИсторияИзменений CommonCommand.КартаМаршрутаБизнесПроцесса + CommonCommand.МакетыФайловВыгрузки CommonCommand.МоиЗаметкиПоПредмету CommonCommand.Напомнить CommonCommand.НастроитьПрава @@ -1896,6 +1963,7 @@ Constant.КаталогСообщенийОбменаДаннымиДляWindows Constant.КлассификаторОшибокКриптографии Constant.КоличествоЗамеровВПакетеЭкспорта + Constant.КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов Constant.КоличествоМесяцевХраненияИсторииРассылкиОтчетов Constant.КоличествоПотоковДлительныхОпераций Constant.КоличествоПотоковОбновленияДоступа @@ -1942,6 +2010,8 @@ Constant.ПутьКТомуБезУчетаРегиональныхНастроек Constant.РазрешенныеНеаккредитованныеУЦ Constant.РазрешитьВыполнениеДООРегламентнымиЗаданиямиВМоделиСервиса + Constant.РазрешитьДоступКИнтернетСервисам + Constant.РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи Constant.РегистрироватьИзмененияПравДоступа Constant.РегистрироватьПоказателиСерверныхОповещений Constant.РежимОчисткиФайлов @@ -1982,8 +2052,8 @@ CommonForm.ВводНаРазныхЯзыках CommonForm.Вопрос CommonForm.ВопросОбУстановкеВнешнейКомпоненты + CommonForm.ВопросОбУстановкеРасширения1СПредприятия CommonForm.ВопросОбУстановкеРасширенияРаботыСКриптографией - CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами CommonForm.ВосстановлениеПаролей CommonForm.ВосстановлениеСвязиСГлавнымУзлом CommonForm.ВспомогательнаяФормаНастроекОтчета @@ -1994,6 +2064,7 @@ CommonForm.ВыборКонтакта CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента CommonForm.ВыборОбъектовМетаданных + CommonForm.ВыборОсновнойПечатнойФормы CommonForm.ВыборПутиКАрхивуФайловТомов CommonForm.ВыборРолиИсполнителя CommonForm.ВыборТиповПользователей @@ -2024,6 +2095,7 @@ CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным CommonForm.НастройкиСинхронизацииДанных CommonForm.НастройкиЭлектроннойПодписиИШифрования + CommonForm.НачалоРаботыСЭлектроннойПодписью CommonForm.НовыйПароль CommonForm.ОписаниеИзмененийПрограммы CommonForm.ОтключениеАвтономногоРабочегоМеста @@ -2056,7 +2128,6 @@ CommonForm.РедактированиеДополнительныхСведений CommonForm.РедактированиеМеток CommonForm.РедактированиеТабличногоДокумента - CommonForm.РезультатПроверки CommonForm.СвязанныеДокументы CommonForm.Сертификат CommonForm.Склонения @@ -2064,6 +2135,7 @@ CommonForm.СозданиеНачальногоОбразаСФайлами CommonForm.СохранениеВместеСЭлектроннойПодписью CommonForm.СохранениеПечатнойФормы + CommonForm.СохранениеПоФорматуВыгрузки CommonForm.СравнениеТабличныхДокументов CommonForm.УстановкаВнешнейКомпонентыНевозможна CommonForm.УстановленныеИсправления @@ -2109,6 +2181,7 @@ Catalog.НаборыГруппДоступа Catalog.НаборыДополнительныхРеквизитовИСведений Catalog.НастройкиАвторизацииИнтернетСервисов + Catalog.НастройкиТранспортаСообщенийОбмена Catalog.ОбщиеВнешниеКомпоненты Catalog.ПапкиФайлов Catalog.ПапкиЭлектронныхПисем @@ -2248,6 +2321,7 @@ Enum.ТипыФайловДляВстроенногоРедактора Enum.ТипыХраненияФайлов Enum.УровниПроизводительности + Enum.ФорматыВыгрузкиОбъектов Enum.ФорматыСканированногоИзображения Enum.ФорматыСохраненияОтчетов Enum.ФорматыХраненияМногостраничныхФайлов @@ -2355,9 +2429,17 @@ DataProcessor.СкрытиеКонфиденциальнойИнформации DataProcessor.СопоставлениеОбъектовИнформационныхБаз DataProcessor.ТекущиеДела + DataProcessor.ТранспортСообщенийОбменаCOM DataProcessor.ТранспортСообщенийОбменаEMAIL + DataProcessor.ТранспортСообщенийОбменаESB1C DataProcessor.ТранспортСообщенийОбменаFILE DataProcessor.ТранспортСообщенийОбменаFTP + DataProcessor.ТранспортСообщенийОбменаGoogleDrive + DataProcessor.ТранспортСообщенийОбменаHTTP + DataProcessor.ТранспортСообщенийОбменаSM + DataProcessor.ТранспортСообщенийОбменаWS + DataProcessor.ТранспортСообщенийОбменаПассивныйРежим + DataProcessor.ТранспортСообщенийОбменаЯндексДиск DataProcessor.УдалениеПомеченныхОбъектов DataProcessor.УниверсальныйОбменДаннымиXML DataProcessor.УничтожениеПерсональныхДанных @@ -2448,7 +2530,6 @@ InformationRegister.НастройкиПолномочийМЧД InformationRegister.НастройкиПравОбъектов InformationRegister.НастройкиСинхронизацииФайлов - InformationRegister.НастройкиТранспортаОбменаДанными InformationRegister.НастройкиТранспортаОбменаОбластейДанных InformationRegister.НастройкиТранспортаОбменаОбластиДанных InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты @@ -2469,6 +2550,8 @@ InformationRegister.ОбъектыНезарегистрированныеПриЗацикливании InformationRegister.ОперацииСтатистики InformationRegister.ОповещенияПользователейСертификатов + InformationRegister.ОсновныеПечатныеФормыКонтрагентов + InformationRegister.ОсновныеПечатныеФормыОбъектов InformationRegister.ОтветыНаВопросыАнкет InformationRegister.ОтправленныеСерверныеОповещения InformationRegister.ОчередьИзвлеченияТекста @@ -2541,9 +2624,11 @@ InformationRegister.ХранилищеФайлов InformationRegister.ЭлектронныеПодписи InformationRegister.ЭлектронныеПодписиМЧД + InformationRegister.УдалитьБезопасноеХранилищеДанныхОбластейДанных InformationRegister.УдалитьДвоичныеДанныеФайлов InformationRegister.УдалитьЗамерыВремени3 InformationRegister.УдалитьНастройкиТранспортаОбмена + InformationRegister.УдалитьНастройкиТранспортаОбменаДанными InformationRegister.УдалитьОбластиПерсональныхДанных InformationRegister.УдалитьРезультатыОбменаДанными InformationRegister.УдалитьХранимыеФайлыВерсий diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index 2ff73b26d..2931038f3 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -90,4 +90,57 @@ КонецПроцедуры +Процедура ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска) + + // СтандартныеПодсистемы +#Если МобильныйКлиент Тогда + Выполнить("СтандартныеПодсистемыКлиент.ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска)"); +#Иначе + СтандартныеПодсистемыКлиент.ПриГлобальномПоиске(СтрокаПоиска, ПланПоиска); +#КонецЕсли + // Конец СтандартныеПодсистемы + +КонецПроцедуры + +Процедура ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, СтандартнаяОбработка) + + // СтандартныеПодсистемы +#Если МобильныйКлиент Тогда + Выполнить("СтандартныеПодсистемыКлиент.ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, + |СтандартнаяОбработка)"); +#Иначе + СтандартныеПодсистемыКлиент.ПриВыбореРезультатаГлобальногоПоиска(ЭлементРезультата, + СтандартнаяОбработка); +#КонецЕсли + // Конец СтандартныеПодсистемы + +КонецПроцедуры + +Процедура ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие) + + // СтандартныеПодсистемы +#Если МобильныйКлиент Тогда + Выполнить("СтандартныеПодсистемыКлиент.ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, + |Действие)"); +#Иначе + СтандартныеПодсистемыКлиент.ПриВыбореДействияРезультатаГлобальногоПоиска(ЭлементРезультата, Действие); +#КонецЕсли + // Конец СтандартныеПодсистемы + +КонецПроцедуры + +Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, СтандартнаяОбработка) + + // СтандартныеПодсистемы +#Если МобильныйКлиент Тогда + Выполнить("СтандартныеПодсистемыКлиент.ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, + |СтандартнаяОбработка)"); +#Иначе + СтандартныеПодсистемыКлиент.ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке, + СтандартнаяОбработка); +#КонецЕсли + // Конец СтандартныеПодсистемы + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 3e6ac72a5..184670d7e 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,25bf533c-def2-4197-a3a1-53f79cf9abc2,1,3bd9f8a7-7c5c-4448-8fc9-300b115eaa11,"3.1.10.492","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7670,1,0,b5df7246-5f59-413f-9bd8-59c649021f2a,b5df7246-5f59-413f-9bd8-59c649021f2a,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,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,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,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,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,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,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,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,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,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,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,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,fd930b50-4ada-4e7f-8bfd-ed9a7c4e8964,fd930b50-4ada-4e7f-8bfd-ed9a7c4e8964,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,dd911418-ee16-4413-bfe9-4a5a238d3ce1,dd911418-ee16-4413-bfe9-4a5a238d3ce1,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,ea36c426-2b43-4232-9978-0104bafd345d,ea36c426-2b43-4232-9978-0104bafd345d,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,4a046c9b-98a0-4d4f-8e0b-b162d3c6bfc5,4a046c9b-98a0-4d4f-8e0b-b162d3c6bfc5,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,0a83f9ec-eabe-4e8f-9fa9-0067acad6fc4,0a83f9ec-eabe-4e8f-9fa9-0067acad6fc4,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,c90e64cf-f5d4-47b9-8243-7177ac42202e,c90e64cf-f5d4-47b9-8243-7177ac42202e,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,5a83b75a-38b0-4d15-9c6f-c201fa97e485,5a83b75a-38b0-4d15-9c6f-c201fa97e485,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,8ad81449-0b75-4775-a841-ca7fc7bf0d43,8ad81449-0b75-4775-a841-ca7fc7bf0d43,1,0,a1bc6cbe-6b80-414c-8a56-ed253d93524b,a1bc6cbe-6b80-414c-8a56-ed253d93524b,1,0,4d2f1acc-e206-4a0c-af9f-e360c4c30c4b,4d2f1acc-e206-4a0c-af9f-e360c4c30c4b,1,0,d81931b7-8ed8-4e4b-ac25-fedff3955ae0,d81931b7-8ed8-4e4b-ac25-fedff3955ae0,1,0,bda7d180-e2b8-4e04-ae3e-fc3f20202f4e,bda7d180-e2b8-4e04-ae3e-fc3f20202f4e,1,0,8375cfc8-0f27-404b-8c27-3268b22614b3,8375cfc8-0f27-404b-8c27-3268b22614b3,1,0,00bc465c-ea1b-4099-a4f1-a69f5b9a36cc,00bc465c-ea1b-4099-a4f1-a69f5b9a36cc,1,0,bbf65684-1382-4224-b1e8-fbfc4a615fbe,bbf65684-1382-4224-b1e8-fbfc4a615fbe,1,0,5e58dfe4-a93c-4910-95e5-765e33cc11ef,5e58dfe4-a93c-4910-95e5-765e33cc11ef,1,0,eced4ded-b59e-412c-a01f-1db3fb0b436a,eced4ded-b59e-412c-a01f-1db3fb0b436a,1,0,405f04ba-1bcd-478c-9ede-0d7a286a051f,405f04ba-1bcd-478c-9ede-0d7a286a051f,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,7741dfee-c4cc-454d-8e01-99ee82a78b5a,7741dfee-c4cc-454d-8e01-99ee82a78b5a,1,0,67f79e89-b922-4949-aec9-7d411ab727ed,67f79e89-b922-4949-aec9-7d411ab727ed,1,0,61e246f4-fe19-4377-8f69-fd1cb90e3f88,61e246f4-fe19-4377-8f69-fd1cb90e3f88,1,0,05c9e6c3-3e1c-4311-99ac-ec4d59a37205,05c9e6c3-3e1c-4311-99ac-ec4d59a37205,1,0,d437805b-42a9-439d-aef8-abbebe280b69,d437805b-42a9-439d-aef8-abbebe280b69,1,0,b33ccec0-a085-4e91-a26d-c262775d92e8,b33ccec0-a085-4e91-a26d-c262775d92e8,1,0,8adeeac2-d2d0-4d90-b7cb-c7871da477d5,8adeeac2-d2d0-4d90-b7cb-c7871da477d5,1,0,9e082d71-175a-4e80-8cca-6b538d3240eb,9e082d71-175a-4e80-8cca-6b538d3240eb,1,0,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,1,0,e60e1771-c8c0-44b6-b1d3-24e9529d9bd0,e60e1771-c8c0-44b6-b1d3-24e9529d9bd0,1,0,350535b3-05b5-49e7-b4af-1c2b8e645083,350535b3-05b5-49e7-b4af-1c2b8e645083,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,0302674f-944a-4a45-94c8-a44f93fc5a9a,0302674f-944a-4a45-94c8-a44f93fc5a9a,1,0,69504e02-a88b-4ad6-8890-604928b5a78a,69504e02-a88b-4ad6-8890-604928b5a78a,1,0,b49b47fb-d4dc-4efe-ad07-e8705d787e72,b49b47fb-d4dc-4efe-ad07-e8705d787e72,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,6fc12a2d-a346-48be-8214-c5f3d5208524,6fc12a2d-a346-48be-8214-c5f3d5208524,1,0,67d93adf-c506-4fea-ab1d-b77968a6d041,67d93adf-c506-4fea-ab1d-b77968a6d041,1,0,8dca62d1-49ea-4398-9180-22218a81860a,8dca62d1-49ea-4398-9180-22218a81860a,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,367c49cc-0317-4b0d-846c-79e203f800b8,367c49cc-0317-4b0d-846c-79e203f800b8,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,1960b036-b479-4f4f-80c5-23fc82474082,1960b036-b479-4f4f-80c5-23fc82474082,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,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,ba06091b-b659-4d29-a971-81335cf4060a,ba06091b-b659-4d29-a971-81335cf4060a,1,0,7c376c72-409e-4b5f-a5b6-85b0a1c23f58,7c376c72-409e-4b5f-a5b6-85b0a1c23f58,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,7bbd6fe8-c2fe-4ed2-abd7-2b3fc5b2f410,7bbd6fe8-c2fe-4ed2-abd7-2b3fc5b2f410,1,0,d61fa2fb-a035-469f-9ae1-b78ecd82c83d,d61fa2fb-a035-469f-9ae1-b78ecd82c83d,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,2f2875d7-7598-4ed5-8cc0-a1982ffb5377,2f2875d7-7598-4ed5-8cc0-a1982ffb5377,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,c83f7826-0fef-4a9b-8d36-dee5d93c7417,c83f7826-0fef-4a9b-8d36-dee5d93c7417,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,5c542a16-0f95-43be-85cd-bfd49b15f215,5c542a16-0f95-43be-85cd-bfd49b15f215,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,edc731ba-532f-4fa1-81a8-58beb3b2dfb1,edc731ba-532f-4fa1-81a8-58beb3b2dfb1,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,a5df6ca4-8791-4025-a0e6-07d66e0454b7,a5df6ca4-8791-4025-a0e6-07d66e0454b7,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,2120ad01-6bff-48bd-bad8-324e1301b112,2120ad01-6bff-48bd-bad8-324e1301b112,1,0,b9255acf-dc35-4225-8d3a-544e66b7334d,b9255acf-dc35-4225-8d3a-544e66b7334d,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,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,639c2ffc-4514-4b79-89e2-d49caadf828d,639c2ffc-4514-4b79-89e2-d49caadf828d,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,8cb20eb9-306b-4c2a-9a77-6a4632f72b54,8cb20eb9-306b-4c2a-9a77-6a4632f72b54,1,0,87ba683b-b69c-4b23-854c-037b770a3ebb,87ba683b-b69c-4b23-854c-037b770a3ebb,1,0,f3f753ac-b2cb-44ea-a917-811b0ef711f8,f3f753ac-b2cb-44ea-a917-811b0ef711f8,1,0,1357adf5-0f5d-4930-afea-edc89db4d0a6,1357adf5-0f5d-4930-afea-edc89db4d0a6,1,0,505ff816-0d42-458a-b7b5-7d007c15d1be,505ff816-0d42-458a-b7b5-7d007c15d1be,1,0,27811a76-d8bd-43a5-9898-944bdd1388ce,27811a76-d8bd-43a5-9898-944bdd1388ce,1,0,363215fe-59f3-4d9a-a8c7-94049882147a,363215fe-59f3-4d9a-a8c7-94049882147a,1,0,3d4597ca-1c97-4116-b966-87970cd7ebdf,3d4597ca-1c97-4116-b966-87970cd7ebdf,1,0,715f7ba5-ca82-49e6-8671-fc1b55b740b5,715f7ba5-ca82-49e6-8671-fc1b55b740b5,1,0,0add6d62-bf4f-476c-9f6b-37633fcd6b0e,0add6d62-bf4f-476c-9f6b-37633fcd6b0e,1,0,93e495a4-207d-4216-b63e-a8b169b2b801,93e495a4-207d-4216-b63e-a8b169b2b801,1,0,3b47221a-ad5f-419c-b503-a4a88505d336,3b47221a-ad5f-419c-b503-a4a88505d336,1,0,0149a9c0-245b-4dfe-aa98-e8b02ba85c99,0149a9c0-245b-4dfe-aa98-e8b02ba85c99,1,0,94abbe1e-44d8-43c1-90fb-71bc9b6621a9,94abbe1e-44d8-43c1-90fb-71bc9b6621a9,1,0,2edfc563-9fd8-4f7c-8cd4-ba3c27c08840,2edfc563-9fd8-4f7c-8cd4-ba3c27c08840,1,0,d0d052c7-68b9-4b2b-9bbf-4fb083327dca,d0d052c7-68b9-4b2b-9bbf-4fb083327dca,1,0,807194b1-2460-4872-8430-e34f6970178f,807194b1-2460-4872-8430-e34f6970178f,1,0,b0409473-768f-4c29-89d3-6201e8476157,b0409473-768f-4c29-89d3-6201e8476157,1,0,d8415773-616e-43e4-9deb-e92200659d53,d8415773-616e-43e4-9deb-e92200659d53,1,0,b228f0de-7cd7-4337-b021-bc1beb980afd,b228f0de-7cd7-4337-b021-bc1beb980afd,1,0,c9178048-5d75-4d1b-a714-50d772e8d343,c9178048-5d75-4d1b-a714-50d772e8d343,1,0,661b7581-27ad-4cec-8618-9c314cb3a4d5,661b7581-27ad-4cec-8618-9c314cb3a4d5,1,0,310a8f7d-5b1f-428c-885d-1127b7789efd,310a8f7d-5b1f-428c-885d-1127b7789efd,1,0,ee5efc54-aa35-467f-b085-64f24819aaa7,ee5efc54-aa35-467f-b085-64f24819aaa7,1,0,376c8f0b-9d2e-4262-a26f-b63f1163c1c4,376c8f0b-9d2e-4262-a26f-b63f1163c1c4,1,0,d37c82e1-cc9f-492c-a7fb-0e6e9d8f6a72,d37c82e1-cc9f-492c-a7fb-0e6e9d8f6a72,1,0,b7ebf08a-d6be-42db-b28a-460df037d7ba,b7ebf08a-d6be-42db-b28a-460df037d7ba,1,0,ec3c34f6-b3b3-4a96-a231-aaf70db1e73d,ec3c34f6-b3b3-4a96-a231-aaf70db1e73d,1,0,8aa9daa0-e073-49f4-8346-7f2c809fac9a,8aa9daa0-e073-49f4-8346-7f2c809fac9a,1,0,043074cb-64aa-45ed-a2f3-b4fa252431cc,043074cb-64aa-45ed-a2f3-b4fa252431cc,1,0,9cc72214-6e84-45e6-aafd-b36205730faa,9cc72214-6e84-45e6-aafd-b36205730faa,1,0,768eb7d6-d37e-4182-961e-464a5e08781b,768eb7d6-d37e-4182-961e-464a5e08781b,1,0,4df52b04-759d-471d-9de4-3ba4d00d1d22,4df52b04-759d-471d-9de4-3ba4d00d1d22,1,0,5768f558-50b6-4682-960c-6894f6953461,5768f558-50b6-4682-960c-6894f6953461,1,0,74126b65-4f3b-4f8d-b7fc-1d2705822463,74126b65-4f3b-4f8d-b7fc-1d2705822463,1,0,75a4b472-00b6-4b2f-bb6b-03bdc0b05dcf,75a4b472-00b6-4b2f-bb6b-03bdc0b05dcf,1,0,8506ad71-85eb-4f91-b892-4e75318649c8,8506ad71-85eb-4f91-b892-4e75318649c8,1,0,6e3010f5-f725-4361-b853-768412b1ad6f,6e3010f5-f725-4361-b853-768412b1ad6f,1,0,40d8803a-2f6d-4091-be54-9d9827a53e30,40d8803a-2f6d-4091-be54-9d9827a53e30,1,0,ea2b936c-be5c-4316-aca9-4f890f4e6ec9,ea2b936c-be5c-4316-aca9-4f890f4e6ec9,1,0,092501bf-dd8e-4f50-8c58-b1b028b50a5a,092501bf-dd8e-4f50-8c58-b1b028b50a5a,1,0,927cfec6-c1e3-4152-aa2e-afa89359b5eb,927cfec6-c1e3-4152-aa2e-afa89359b5eb,1,0,8e986c32-7296-4329-a908-704398428e4e,8e986c32-7296-4329-a908-704398428e4e,1,0,c5b8870c-14cb-43ae-8d44-d639bd059b0e,c5b8870c-14cb-43ae-8d44-d639bd059b0e,1,0,bc98265e-329d-41d1-9fe8-4c78b7998cd2,bc98265e-329d-41d1-9fe8-4c78b7998cd2,1,0,b44c8a6b-0e3f-446b-95f7-6cb4a58f13e0,b44c8a6b-0e3f-446b-95f7-6cb4a58f13e0,1,0,7601f9c7-2fe7-43fb-a7a9-cf5be4475ce1,7601f9c7-2fe7-43fb-a7a9-cf5be4475ce1,1,0,2da686d3-38b0-4cf1-9962-1440d1afd050,2da686d3-38b0-4cf1-9962-1440d1afd050,1,0,71518348-f155-4616-bbdc-742e36cd3964,71518348-f155-4616-bbdc-742e36cd3964,1,0,723a58ca-9947-4320-9bf4-7c6b58aee2f5,723a58ca-9947-4320-9bf4-7c6b58aee2f5,1,0,2df24487-0b76-451d-a08f-21dc03adefa4,2df24487-0b76-451d-a08f-21dc03adefa4,1,0,00813d65-8dae-45a8-8691-d0b17d6d7754,00813d65-8dae-45a8-8691-d0b17d6d7754,1,0,d88166a7-ef6c-453a-b6cc-1c574cf6ea85,d88166a7-ef6c-453a-b6cc-1c574cf6ea85,1,0,aae1a856-ff88-41bb-a887-1b8c2c3eeab6,aae1a856-ff88-41bb-a887-1b8c2c3eeab6,1,0,cf2b8654-02b6-441e-98a9-cb8bea5cac89,cf2b8654-02b6-441e-98a9-cb8bea5cac89,1,0,2181bde8-031d-425e-875f-0bd153b634f2,2181bde8-031d-425e-875f-0bd153b634f2,1,0,ee1b81ac-0182-48dd-a348-1d8ba38869ca,ee1b81ac-0182-48dd-a348-1d8ba38869ca,1,0,ad385d3e-8201-402a-a1a8-267bc8c6d56b,ad385d3e-8201-402a-a1a8-267bc8c6d56b,1,0,53bb97e3-cd96-462a-b91f-c82678568d9a,53bb97e3-cd96-462a-b91f-c82678568d9a,1,0,32ca3bd6-7b32-4eab-8a4e-aeac26604e08,32ca3bd6-7b32-4eab-8a4e-aeac26604e08,1,0,2a702d37-8e83-4fa0-9969-5d954a7096c1,2a702d37-8e83-4fa0-9969-5d954a7096c1,1,0,71b7225e-6486-4916-85b2-8ec14363ebc8,71b7225e-6486-4916-85b2-8ec14363ebc8,1,0,2df34fcd-3118-4871-95d7-807dece77d3f,2df34fcd-3118-4871-95d7-807dece77d3f,1,0,32db89ab-74d3-4f80-9352-65e405770906,32db89ab-74d3-4f80-9352-65e405770906,1,0,21c22027-2036-4136-a98e-500e5cd679d1,21c22027-2036-4136-a98e-500e5cd679d1,1,0,6fe56db7-0f48-4dd0-b509-5372019ddcc2,6fe56db7-0f48-4dd0-b509-5372019ddcc2,1,0,884990f4-54f1-4b05-a5ed-40ee5a7a549a,884990f4-54f1-4b05-a5ed-40ee5a7a549a,1,0,4cf71e62-c8c2-4bc7-87fc-a89e48f2c007,4cf71e62-c8c2-4bc7-87fc-a89e48f2c007,1,0,e5a9260b-c18b-47bf-bc5a-23294e13025a,e5a9260b-c18b-47bf-bc5a-23294e13025a,1,0,02f00688-a2ed-4f91-bd41-50fc29e13d6c,02f00688-a2ed-4f91-bd41-50fc29e13d6c,1,0,e9f2b435-13e3-401a-9324-ca44986b7676,e9f2b435-13e3-401a-9324-ca44986b7676,1,0,2b854852-ae2d-46d8-8c3b-228af7a3f1db,2b854852-ae2d-46d8-8c3b-228af7a3f1db,1,0,11346c91-ecb6-40e6-a2fb-df7e6f5dbaed,11346c91-ecb6-40e6-a2fb-df7e6f5dbaed,1,0,f4f096ac-45e3-4dfb-8363-be35edceb6c6,f4f096ac-45e3-4dfb-8363-be35edceb6c6,1,0,cb7ff74e-9697-4ea7-88a2-a2f207a5d313,cb7ff74e-9697-4ea7-88a2-a2f207a5d313,1,0,5c3b45fb-0d95-4a15-a42b-5d6baa7a699c,5c3b45fb-0d95-4a15-a42b-5d6baa7a699c,1,0,662940c1-49de-4b94-867b-6c16bf716266,662940c1-49de-4b94-867b-6c16bf716266,1,0,eb2d414c-ba68-47c6-b74b-c8566987b824,eb2d414c-ba68-47c6-b74b-c8566987b824,1,0,ef2706e1-9fc9-42e8-add6-85392a78fff3,ef2706e1-9fc9-42e8-add6-85392a78fff3,1,0,aa609e39-3e3b-4af7-8b79-49293df6b6f2,aa609e39-3e3b-4af7-8b79-49293df6b6f2,1,0,f9188489-ad5e-4eaf-a87a-7191776e4fd4,f9188489-ad5e-4eaf-a87a-7191776e4fd4,1,0,8763c516-04a3-4ca3-9f5d-da3026a46d2a,8763c516-04a3-4ca3-9f5d-da3026a46d2a,1,0,d9fbb0e9-7a19-4742-a958-72c0c3c2307b,d9fbb0e9-7a19-4742-a958-72c0c3c2307b,1,0,d83a4e56-2ab3-44f4-91dc-a6881c62f7c6,d83a4e56-2ab3-44f4-91dc-a6881c62f7c6,1,0,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,1,0,c5491956-ebc7-446b-b0b5-4eab34c5a33f,c5491956-ebc7-446b-b0b5-4eab34c5a33f,1,0,2b7de7a1-8e84-4791-9633-7fca8696ff5d,2b7de7a1-8e84-4791-9633-7fca8696ff5d,1,0,97ee6138-4d8a-41d6-8a09-17f8eb306d9a,97ee6138-4d8a-41d6-8a09-17f8eb306d9a,1,0,9abb1972-1c08-44fb-b511-f77d9334d31d,9abb1972-1c08-44fb-b511-f77d9334d31d,1,0,8305c82b-5808-40d6-9668-e54cec298ff1,8305c82b-5808-40d6-9668-e54cec298ff1,1,0,3a8583f1-b6e9-4b4b-9362-4367bc433913,3a8583f1-b6e9-4b4b-9362-4367bc433913,1,0,34aad1b4-550e-4b12-acec-516c8b430cd2,34aad1b4-550e-4b12-acec-516c8b430cd2,1,0,dc16e9b0-0749-4b06-b59d-b2c1031eace6,dc16e9b0-0749-4b06-b59d-b2c1031eace6,1,0,4c3d06cc-22b0-4618-acb5-d1ed387deaa7,4c3d06cc-22b0-4618-acb5-d1ed387deaa7,1,0,216b5d48-5422-4c03-b21d-cdb3e0e35f2c,216b5d48-5422-4c03-b21d-cdb3e0e35f2c,1,0,c067a94e-5bea-4b47-bb57-6cf973a7ad45,c067a94e-5bea-4b47-bb57-6cf973a7ad45,1,0,4c6bc132-e0f6-4eb0-a4aa-bceb103e7f02,4c6bc132-e0f6-4eb0-a4aa-bceb103e7f02,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,27f793d8-da6a-4502-9b7e-82b8af7264d1,27f793d8-da6a-4502-9b7e-82b8af7264d1,1,0,4d3f3c76-999c-4105-8b64-cd4b7bc861b9,4d3f3c76-999c-4105-8b64-cd4b7bc861b9,1,0,efcf8b0f-7124-4096-9f50-b9b95369f196,efcf8b0f-7124-4096-9f50-b9b95369f196,1,0,c1f2db60-011c-4a0b-97bb-42e005ba51c9,c1f2db60-011c-4a0b-97bb-42e005ba51c9,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,2031ed38-6a8e-4ca7-aa97-449ee36ab7a3,2031ed38-6a8e-4ca7-aa97-449ee36ab7a3,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,993193b3-1dd8-4f5b-8ce7-6a0bf8c4330c,993193b3-1dd8-4f5b-8ce7-6a0bf8c4330c,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,455a1ca6-7212-43ac-b5a2-cf85dd2f9c14,455a1ca6-7212-43ac-b5a2-cf85dd2f9c14,1,0,e7c366f7-c8e3-4ffe-bc5e-ca8a4619ec11,e7c366f7-c8e3-4ffe-bc5e-ca8a4619ec11,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,75378d9c-a364-4b46-a6d1-b745604c46a2,75378d9c-a364-4b46-a6d1-b745604c46a2,1,0,d7376ea8-245a-4342-9a40-c729ca19f966,d7376ea8-245a-4342-9a40-c729ca19f966,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,3fc1e50e-b9da-45f7-8e06-57ef6951ca40,3fc1e50e-b9da-45f7-8e06-57ef6951ca40,1,0,66d67f47-ccbb-4d58-aceb-af876f480750,66d67f47-ccbb-4d58-aceb-af876f480750,1,0,71871ca9-095d-4bde-ac80-1371f578cd51,71871ca9-095d-4bde-ac80-1371f578cd51,1,0,6aa8c1d6-9956-4a98-9992-b119ba5ba1c7,6aa8c1d6-9956-4a98-9992-b119ba5ba1c7,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,2df403a2-57d8-4578-b017-e7cf9550b708,2df403a2-57d8-4578-b017-e7cf9550b708,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,5b14d700-bc59-4bdb-8226-554696336e16,5b14d700-bc59-4bdb-8226-554696336e16,1,0,d1771aec-ba78-4b5d-861a-9ac6d8627dea,d1771aec-ba78-4b5d-861a-9ac6d8627dea,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,5e232e6a-7f68-40d2-9555-4a2b3debe095,5e232e6a-7f68-40d2-9555-4a2b3debe095,1,0,efc8ca7d-966d-4c18-acd9-90f22dd75a7a,efc8ca7d-966d-4c18-acd9-90f22dd75a7a,1,0,1780ffa9-1ca3-4bcb-823f-5e582c4cc25e,1780ffa9-1ca3-4bcb-823f-5e582c4cc25e,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,71cad48a-37f2-4894-b876-9d74fa844828,71cad48a-37f2-4894-b876-9d74fa844828,1,0,0f325868-167b-43d5-b17a-eadc606a8f79,0f325868-167b-43d5-b17a-eadc606a8f79,1,0,51ea38c1-3005-4f4b-b813-91c8e2717683,51ea38c1-3005-4f4b-b813-91c8e2717683,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,584aa9db-e6b0-49f3-ae9d-5b6c796d015c,584aa9db-e6b0-49f3-ae9d-5b6c796d015c,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,3b453f76-ab85-4c65-b008-7f8bf44c9631,3b453f76-ab85-4c65-b008-7f8bf44c9631,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,e976d3cb-52e1-4f3e-ad01-fcac971a552d,e976d3cb-52e1-4f3e-ad01-fcac971a552d,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,d1391e3b-ec29-48c8-8bf5-fa4434a909e9,d1391e3b-ec29-48c8-8bf5-fa4434a909e9,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,2a7f1ce3-2629-4860-886b-67c9f82eeb29,2a7f1ce3-2629-4860-886b-67c9f82eeb29,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,cce593b4-6f7c-466d-892c-7fe89fcddf5d,cce593b4-6f7c-466d-892c-7fe89fcddf5d,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,02f1c0db-3217-4c61-aef7-3b87c217739c,02f1c0db-3217-4c61-aef7-3b87c217739c,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,60200fc6-252f-4eaf-88a2-d2cefa25061f,60200fc6-252f-4eaf-88a2-d2cefa25061f,1,0,0798a128-2f87-4173-99ae-115bb8b3a3b8,0798a128-2f87-4173-99ae-115bb8b3a3b8,1,0,40f93527-7bff-4f9c-b855-2b69f7c5eb33,40f93527-7bff-4f9c-b855-2b69f7c5eb33,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,676b2ea2-a559-4685-b5ca-7b619b02f101,676b2ea2-a559-4685-b5ca-7b619b02f101,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,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,62629f36-5d1e-460f-9ac5-983607c40cb2,62629f36-5d1e-460f-9ac5-983607c40cb2,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,32cab8f2-cebf-4508-9396-eb41f4e8ba22,32cab8f2-cebf-4508-9396-eb41f4e8ba22,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,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,b77edd78-2fad-4926-a74f-02f2135356e6,b77edd78-2fad-4926-a74f-02f2135356e6,1,0,57b0b6b2-bbdd-48d2-a52e-e3495e00860e,57b0b6b2-bbdd-48d2-a52e-e3495e00860e,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,a511f7d7-60ef-4a5c-8f8e-ddbee065eccd,a511f7d7-60ef-4a5c-8f8e-ddbee065eccd,1,0,6fa87b5a-fab0-48b6-b8ab-1aaa8c82d81d,6fa87b5a-fab0-48b6-b8ab-1aaa8c82d81d,1,0,323ef3df-b1cb-4927-a16e-2dbf11e37ae8,323ef3df-b1cb-4927-a16e-2dbf11e37ae8,1,0,e1760aea-29e3-4a45-b02a-b2b96cb73ec4,e1760aea-29e3-4a45-b02a-b2b96cb73ec4,1,0,c2b721a7-1e61-4b72-ba75-f4601d52e98a,c2b721a7-1e61-4b72-ba75-f4601d52e98a,1,0,a4ecd21c-a980-47f8-9944-b1dd7b5a41f3,a4ecd21c-a980-47f8-9944-b1dd7b5a41f3,1,0,dd8c783c-0559-47bb-a089-8fd0783c1a94,dd8c783c-0559-47bb-a089-8fd0783c1a94,1,0,d2855fab-f319-4df8-accc-0727e442bad7,d2855fab-f319-4df8-accc-0727e442bad7,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,1f018218-2281-4e32-a486-f32386959e5f,1f018218-2281-4e32-a486-f32386959e5f,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,90f3f3c5-4ca9-4c8f-9b73-f67760a6d2f0,90f3f3c5-4ca9-4c8f-9b73-f67760a6d2f0,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,beb07009-6612-4052-a991-888138da8e30,beb07009-6612-4052-a991-888138da8e30,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,57502594-74dd-45fe-9234-9a477d5b9741,57502594-74dd-45fe-9234-9a477d5b9741,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,0753701c-016e-4385-85c0-a485ca50efdc,0753701c-016e-4385-85c0-a485ca50efdc,1,0,c3a6b470-37d5-4499-badb-33b73b52e346,c3a6b470-37d5-4499-badb-33b73b52e346,1,0,24415097-bde5-447a-ac74-bd9bf0eb19fc,24415097-bde5-447a-ac74-bd9bf0eb19fc,1,0,a29d42d6-a448-4940-804d-d1be31da000d,a29d42d6-a448-4940-804d-d1be31da000d,1,0,dd780b76-2a10-40b5-9bcd-7bc8c9b06651,dd780b76-2a10-40b5-9bcd-7bc8c9b06651,1,0,8be6c4a3-d75b-405d-8d98-9baf6f20abb2,8be6c4a3-d75b-405d-8d98-9baf6f20abb2,1,0,7cbd82e3-4bf8-46ab-8504-4bf30523fa2a,7cbd82e3-4bf8-46ab-8504-4bf30523fa2a,1,0,c4b01e52-4136-460d-bd82-970177f1e256,c4b01e52-4136-460d-bd82-970177f1e256,1,0,9533784b-311a-4dbe-b73e-7348aabd387e,9533784b-311a-4dbe-b73e-7348aabd387e,1,0,56bdc69a-d8e8-4da6-a3a5-41ef32bbb626,56bdc69a-d8e8-4da6-a3a5-41ef32bbb626,1,0,c770cd75-f370-4042-9a5a-82b2fc1853cc,c770cd75-f370-4042-9a5a-82b2fc1853cc,1,0,6ee215f9-20ab-4c48-b2c2-cb1869e8906c,6ee215f9-20ab-4c48-b2c2-cb1869e8906c,1,0,b74af9c1-bc44-40ce-b093-d1f548a1742f,b74af9c1-bc44-40ce-b093-d1f548a1742f,1,0,1b401a14-4581-4f24-aaca-5f204f8fcf8b,1b401a14-4581-4f24-aaca-5f204f8fcf8b,1,0,267f7ee6-7b02-4e48-aa1e-145f586edd87,267f7ee6-7b02-4e48-aa1e-145f586edd87,1,0,e1e8ea42-6886-430a-bc59-249259112e6a,e1e8ea42-6886-430a-bc59-249259112e6a,1,0,1e27f3cd-1c9e-4f9f-b2ff-88fb1da37e11,1e27f3cd-1c9e-4f9f-b2ff-88fb1da37e11,1,0,3dcf815c-5c9a-4a78-a42e-7c9ff6faaeb8,3dcf815c-5c9a-4a78-a42e-7c9ff6faaeb8,1,0,1379f050-4f1c-4c41-993e-f7efc71325fb,1379f050-4f1c-4c41-993e-f7efc71325fb,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,753c70c1-af12-4ec2-ac12-dd1ce33f729f,753c70c1-af12-4ec2-ac12-dd1ce33f729f,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,5e4ec9d8-bb60-4dfb-89ba-002527dc149b,5e4ec9d8-bb60-4dfb-89ba-002527dc149b,1,0,bf463763-3801-4664-9d04-4d9fd7fe8c43,bf463763-3801-4664-9d04-4d9fd7fe8c43,1,0,43a0760f-3635-4e6a-a68a-1a2232245329,43a0760f-3635-4e6a-a68a-1a2232245329,1,0,5c64a4dd-2b9f-4110-abe2-266e6d8638fb,5c64a4dd-2b9f-4110-abe2-266e6d8638fb,1,0,d408d054-86ac-4471-a29d-efed65989899,d408d054-86ac-4471-a29d-efed65989899,1,0,3e979ec3-b544-4e37-8be6-95dce0a2b780,3e979ec3-b544-4e37-8be6-95dce0a2b780,1,0,2444eed3-25c7-4abc-a9a8-f3f3a8201267,2444eed3-25c7-4abc-a9a8-f3f3a8201267,1,0,e91118e9-d054-41a1-bfe9-343179718f33,e91118e9-d054-41a1-bfe9-343179718f33,1,0,042245ef-3a30-46fb-b3e3-6599d5426cbd,042245ef-3a30-46fb-b3e3-6599d5426cbd,1,0,d1034240-ab06-413a-9828-a5c7dc879680,d1034240-ab06-413a-9828-a5c7dc879680,1,0,5dd0f264-6d9f-41e4-92b6-e8b4fa3b4d84,5dd0f264-6d9f-41e4-92b6-e8b4fa3b4d84,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,12d19666-e996-4b55-b43c-b3a541f849a7,12d19666-e996-4b55-b43c-b3a541f849a7,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,61cfdc9a-49c3-4316-b38d-997910cf25c3,61cfdc9a-49c3-4316-b38d-997910cf25c3,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,67feda40-f9d6-4782-bba1-a5e0fccd5350,67feda40-f9d6-4782-bba1-a5e0fccd5350,1,0,9bd92328-8c9c-4882-8956-a1fccf555a64,9bd92328-8c9c-4882-8956-a1fccf555a64,1,0,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,1,0,e5033559-9d58-4b9b-a739-40c419e82192,e5033559-9d58-4b9b-a739-40c419e82192,1,0,594c79fa-0fdc-41d5-b122-04615dca3752,594c79fa-0fdc-41d5-b122-04615dca3752,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,4f9b6c01-0919-41ba-91dc-49497d0fecf7,4f9b6c01-0919-41ba-91dc-49497d0fecf7,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,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,ea0a498a-a1cb-4f28-88cb-0bc62971172b,ea0a498a-a1cb-4f28-88cb-0bc62971172b,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,801facc3-3b3b-4d0a-93c6-54a1f3495291,801facc3-3b3b-4d0a-93c6-54a1f3495291,1,0,f10167ac-f7bd-42fb-8daa-864593fcc115,f10167ac-f7bd-42fb-8daa-864593fcc115,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,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,37041c83-b1ed-4eec-a011-a2a1788f867e,37041c83-b1ed-4eec-a011-a2a1788f867e,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,7406da96-2e16-42a0-9522-d76547708eca,7406da96-2e16-42a0-9522-d76547708eca,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,e475a311-7cef-45e2-9ed2-0bded8b5c963,e475a311-7cef-45e2-9ed2-0bded8b5c963,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,47091af9-954c-489f-a560-683ca3d6996e,47091af9-954c-489f-a560-683ca3d6996e,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,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,355eb7bc-651a-4b24-abcd-61bb83222b7e,355eb7bc-651a-4b24-abcd-61bb83222b7e,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,4e6734a0-3bf8-4e71-bd38-5526819609f4,4e6734a0-3bf8-4e71-bd38-5526819609f4,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,05d5befc-493c-4939-a364-ccbf5e11f924,05d5befc-493c-4939-a364-ccbf5e11f924,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,9bb33b9f-0a27-4edd-b3b2-1c20a75d0f20,9bb33b9f-0a27-4edd-b3b2-1c20a75d0f20,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,7abb55d2-eac6-44a0-9ebc-fa26a7f0c028,7abb55d2-eac6-44a0-9ebc-fa26a7f0c028,1,0,bdafe976-c8d6-413a-8d61-765a02014e5d,bdafe976-c8d6-413a-8d61-765a02014e5d,1,0,22ddedc0-a20c-4253-8c1f-22e5ab784987,22ddedc0-a20c-4253-8c1f-22e5ab784987,1,0,68e207e7-8c20-426d-8a0e-c3dd4d683631,68e207e7-8c20-426d-8a0e-c3dd4d683631,1,0,6d7fa2f9-7ca4-4ad6-b94b-8267768a0f04,6d7fa2f9-7ca4-4ad6-b94b-8267768a0f04,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,6eb6003c-71cb-4be8-a375-abd5c9f7336b,6eb6003c-71cb-4be8-a375-abd5c9f7336b,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,bd206271-1388-4759-8992-da81507613be,bd206271-1388-4759-8992-da81507613be,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,c45fcf7f-5676-4a96-a73c-a6d9d98ac46b,c45fcf7f-5676-4a96-a73c-a6d9d98ac46b,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,11c610f5-0f5d-49aa-9015-4a514dfcf515,11c610f5-0f5d-49aa-9015-4a514dfcf515,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,f71eceb3-ef2e-4e6c-bf9c-e7e7d42c1c7c,f71eceb3-ef2e-4e6c-bf9c-e7e7d42c1c7c,1,0,b91b1b08-f35d-40b2-83d8-ecc761124b05,b91b1b08-f35d-40b2-83d8-ecc761124b05,1,0,5fb7ebb4-e2ce-40ae-aa1c-9351dc66919b,5fb7ebb4-e2ce-40ae-aa1c-9351dc66919b,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,4e6989e6-67ac-4c3c-994d-0c3941cc1156,4e6989e6-67ac-4c3c-994d-0c3941cc1156,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,f6b8e6ae-7d3e-4f6c-bd74-66ee7593868c,f6b8e6ae-7d3e-4f6c-bd74-66ee7593868c,1,0,1682d528-87bf-48c5-acf9-57ab654a615a,1682d528-87bf-48c5-acf9-57ab654a615a,1,0,e730ea3f-4f2a-4e21-8851-bccc51830cfe,e730ea3f-4f2a-4e21-8851-bccc51830cfe,1,0,193ab4a7-7eee-4374-95cf-2d907a3ba971,193ab4a7-7eee-4374-95cf-2d907a3ba971,1,0,e2779397-46ed-4d95-8529-45896f9567d2,e2779397-46ed-4d95-8529-45896f9567d2,1,0,3002d5d8-1b7d-4252-9e5d-9a533bf03ca8,3002d5d8-1b7d-4252-9e5d-9a533bf03ca8,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,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,7e3283df-05a6-4dc5-a786-056c71bdbf6f,7e3283df-05a6-4dc5-a786-056c71bdbf6f,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,faf89779-2290-4d37-b1ea-e81b1b79f74c,faf89779-2290-4d37-b1ea-e81b1b79f74c,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,b9e93e8f-1d4b-4bbb-ac1b-c8d26cfd1da2,b9e93e8f-1d4b-4bbb-ac1b-c8d26cfd1da2,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,ac847dc9-e222-45cf-af4a-6fa863c919a8,ac847dc9-e222-45cf-af4a-6fa863c919a8,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,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,2895ac1f-5f15-422d-9d90-2df87255a92a,2895ac1f-5f15-422d-9d90-2df87255a92a,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,42107b14-9373-418a-a41d-35c87434c51a,42107b14-9373-418a-a41d-35c87434c51a,1,0,24d8ce8d-e94c-4168-abad-d0ce5e6cbf1b,24d8ce8d-e94c-4168-abad-d0ce5e6cbf1b,1,0,8786575a-eab6-46bf-be3a-167e2d5b41dd,8786575a-eab6-46bf-be3a-167e2d5b41dd,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,c96b58a2-db6e-4a0f-82fd-fc115a169b18,c96b58a2-db6e-4a0f-82fd-fc115a169b18,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,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,1,0,a9e31d90-fe65-47c3-8109-6e1eae862f53,a9e31d90-fe65-47c3-8109-6e1eae862f53,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,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,967bf537-f742-4d9a-95ff-afaa5525a2f0,967bf537-f742-4d9a-95ff-afaa5525a2f0,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,2e3cdbed-3f52-4f6e-883e-9e7d30c67099,2e3cdbed-3f52-4f6e-883e-9e7d30c67099,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,3e453cca-aac3-4ff3-bb15-32c09f43e7b2,3e453cca-aac3-4ff3-bb15-32c09f43e7b2,1,0,49bcd9e6-f312-4bb6-959a-242b73907591,49bcd9e6-f312-4bb6-959a-242b73907591,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,e8cc4e0f-e9c2-4a24-a50e-f5be5ed21019,e8cc4e0f-e9c2-4a24-a50e-f5be5ed21019,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,87251f18-17da-497a-9b39-f84a388c855c,87251f18-17da-497a-9b39-f84a388c855c,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,a4878c33-f156-44cc-b114-5670403075eb,a4878c33-f156-44cc-b114-5670403075eb,1,0,cc567ef8-3e63-4c53-a14a-899221ec9e46,cc567ef8-3e63-4c53-a14a-899221ec9e46,1,0,0f1f8bc8-73ce-4384-9496-9bc2d0e212be,0f1f8bc8-73ce-4384-9496-9bc2d0e212be,1,0,695ad525-d1ba-42fb-adc1-6c44ac433c69,695ad525-d1ba-42fb-adc1-6c44ac433c69,1,0,93afedb2-2d93-4611-b0fd-830bf33789c2,93afedb2-2d93-4611-b0fd-830bf33789c2,1,0,026dadd4-a698-4d56-9b72-7ad9f224e502,026dadd4-a698-4d56-9b72-7ad9f224e502,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,0c2f6d9b-2060-4575-86cd-683ebb4bb059,0c2f6d9b-2060-4575-86cd-683ebb4bb059,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,6f8a9249-457b-47ac-9160-7c566b8d00d5,6f8a9249-457b-47ac-9160-7c566b8d00d5,1,0,2ddd57c1-ab9b-4293-b956-1eb1f7a7a0fc,2ddd57c1-ab9b-4293-b956-1eb1f7a7a0fc,1,0,5bdd3b52-aa26-4610-beb9-3673254ba589,5bdd3b52-aa26-4610-beb9-3673254ba589,1,0,ebe7341e-50ab-4a2a-8299-b01ab00c8300,ebe7341e-50ab-4a2a-8299-b01ab00c8300,1,0,08a97633-888e-4d37-ba24-684070eeea43,08a97633-888e-4d37-ba24-684070eeea43,1,0,73126993-73e6-4734-9e72-287b672f40ad,73126993-73e6-4734-9e72-287b672f40ad,1,0,0b868a9d-984f-483a-9739-c1a73c05602f,0b868a9d-984f-483a-9739-c1a73c05602f,1,0,ec2ec52e-f9e9-4392-8ffb-e89626f2361d,ec2ec52e-f9e9-4392-8ffb-e89626f2361d,1,0,a4de8867-22bf-4fe2-8167-82bd3a56cd57,a4de8867-22bf-4fe2-8167-82bd3a56cd57,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,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,8e247254-f454-4436-9b5b-a8dbb8223cc7,8e247254-f454-4436-9b5b-a8dbb8223cc7,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,e1a375da-c16c-4616-8a33-9414c13a48c7,e1a375da-c16c-4616-8a33-9414c13a48c7,1,0,99993a9b-97e9-4606-94fa-2da43a03c3b2,99993a9b-97e9-4606-94fa-2da43a03c3b2,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,b20780cd-53d9-48bb-ac3f-2aa4eb6ab3c5,b20780cd-53d9-48bb-ac3f-2aa4eb6ab3c5,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,ddac9d84-61b8-49e7-b468-e4aef4403d64,ddac9d84-61b8-49e7-b468-e4aef4403d64,1,0,ae2eec04-8327-4c51-89d3-eb6b725d6e8b,ae2eec04-8327-4c51-89d3-eb6b725d6e8b,1,0,350b262d-2b1f-43de-9994-6abfd2e4e761,350b262d-2b1f-43de-9994-6abfd2e4e761,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,740a6d15-23e8-43a0-af3c-71a544f8fa4f,740a6d15-23e8-43a0-af3c-71a544f8fa4f,1,0,e461818e-5d2f-49ec-8219-3a765461274a,e461818e-5d2f-49ec-8219-3a765461274a,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,16080b3d-b385-4e44-af16-d1a357a2b842,16080b3d-b385-4e44-af16-d1a357a2b842,1,0,8de85e8b-6828-44a3-8481-4ff4c8c2b9e2,8de85e8b-6828-44a3-8481-4ff4c8c2b9e2,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,090e521e-391a-4ce7-9f7c-1c459fd221eb,090e521e-391a-4ce7-9f7c-1c459fd221eb,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,e7903c89-5282-4771-8f9b-536694b7816e,e7903c89-5282-4771-8f9b-536694b7816e,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,72c78946-146e-44a2-a547-abf5229e3815,72c78946-146e-44a2-a547-abf5229e3815,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,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,517ac144-ecb9-4d14-83ea-01e58f0901fc,517ac144-ecb9-4d14-83ea-01e58f0901fc,1,0,61c1ff46-2a30-43bb-b1df-4db2271b1b12,61c1ff46-2a30-43bb-b1df-4db2271b1b12,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,e5687b69-4d9a-4d21-a506-294941f18056,e5687b69-4d9a-4d21-a506-294941f18056,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,a429671f-a8d6-43bf-b51e-d52c95900d57,a429671f-a8d6-43bf-b51e-d52c95900d57,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,b2bd5a0e-d60c-411d-a001-ecdee0152b1a,b2bd5a0e-d60c-411d-a001-ecdee0152b1a,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,72d579ee-8cd5-4b08-9f3f-eb15f14ee194,72d579ee-8cd5-4b08-9f3f-eb15f14ee194,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,447da3d4-5d94-4cd2-8540-53c0836e6173,447da3d4-5d94-4cd2-8540-53c0836e6173,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,2caee148-4962-4947-bca7-9477741b8c1a,2caee148-4962-4947-bca7-9477741b8c1a,1,0,6fbc9a01-ddcb-47ab-84c0-f08b103be12b,6fbc9a01-ddcb-47ab-84c0-f08b103be12b,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,9c472614-595a-4456-aadd-f629455a754e,9c472614-595a-4456-aadd-f629455a754e,1,0,c205ddad-54ed-476f-85cd-e133313fe3a5,c205ddad-54ed-476f-85cd-e133313fe3a5,1,0,98edbda8-2511-4743-b643-28934af0ed74,98edbda8-2511-4743-b643-28934af0ed74,1,0,db1f2fdc-6862-43c0-aefa-499f8c2b585c,db1f2fdc-6862-43c0-aefa-499f8c2b585c,1,0,235be246-6c28-4771-923d-cffd541ec26e,235be246-6c28-4771-923d-cffd541ec26e,1,0,c9a0afb1-65fa-45ea-aabb-5ec080d9406e,c9a0afb1-65fa-45ea-aabb-5ec080d9406e,1,0,32b07bc0-3b2a-4244-93d4-49f172ad3ffb,32b07bc0-3b2a-4244-93d4-49f172ad3ffb,1,0,7abec628-65c3-4a44-ae11-99c2ffc592a3,7abec628-65c3-4a44-ae11-99c2ffc592a3,1,0,7b263bb6-4a6b-46c6-a1f0-48721ac1694b,7b263bb6-4a6b-46c6-a1f0-48721ac1694b,1,0,80b4e8c4-1fb3-4c3b-883f-93b5e213f46e,80b4e8c4-1fb3-4c3b-883f-93b5e213f46e,1,0,98061bca-6e72-479b-9125-a0f9452f4ed1,98061bca-6e72-479b-9125-a0f9452f4ed1,1,0,4d50203f-4577-4615-8001-4e4ac98fd392,4d50203f-4577-4615-8001-4e4ac98fd392,1,0,5c06642b-9c31-485b-87dd-48c6d7dbd30f,5c06642b-9c31-485b-87dd-48c6d7dbd30f,1,0,eeac3530-8897-4ab6-8fe8-09fcbfcd9fde,eeac3530-8897-4ab6-8fe8-09fcbfcd9fde,1,0,c3e2e470-f0bc-4fda-8c0e-4fb900e564a9,c3e2e470-f0bc-4fda-8c0e-4fb900e564a9,1,0,7fb0f8fd-4673-4f1d-a6ef-bc4ba9a2229f,7fb0f8fd-4673-4f1d-a6ef-bc4ba9a2229f,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,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,8568b969-4d05-42ab-b30a-c937619c7c93,8568b969-4d05-42ab-b30a-c937619c7c93,1,0,1afea577-b99e-41de-b613-47dd0b480a91,1afea577-b99e-41de-b613-47dd0b480a91,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,6a8de94b-7b62-4d91-80df-e47c4ef90864,6a8de94b-7b62-4d91-80df-e47c4ef90864,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,91d42c1f-af78-4c21-8071-61a347a94d5d,91d42c1f-af78-4c21-8071-61a347a94d5d,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,b46d482e-bf89-4bd7-8704-27ae42538afd,b46d482e-bf89-4bd7-8704-27ae42538afd,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,9162a85e-a385-42b0-b809-da916fce44b7,9162a85e-a385-42b0-b809-da916fce44b7,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,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,5a2f2284-4f86-4ee4-8b53-296c2787f320,5a2f2284-4f86-4ee4-8b53-296c2787f320,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,e8b92505-007b-4a95-a7a1-291988090228,e8b92505-007b-4a95-a7a1-291988090228,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,8d4685b7-ba72-4a28-8182-3104e1330567,8d4685b7-ba72-4a28-8182-3104e1330567,1,0,b91b93f0-29ca-452d-97be-7109fb248e22,b91b93f0-29ca-452d-97be-7109fb248e22,1,0,c1f7437a-b278-4941-b580-75c6693155d0,c1f7437a-b278-4941-b580-75c6693155d0,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,a6a84818-e14c-4554-ac0a-e522a9615997,a6a84818-e14c-4554-ac0a-e522a9615997,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,d60e7164-c686-4c50-b831-a4ee4f505c35,d60e7164-c686-4c50-b831-a4ee4f505c35,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,1a3ad05f-77b5-467e-99fe-c2b5e734ba87,1a3ad05f-77b5-467e-99fe-c2b5e734ba87,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,398cd724-3c08-49b3-a5b4-4186f1d6b32d,398cd724-3c08-49b3-a5b4-4186f1d6b32d,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,1d1248ce-c31a-41f9-85b2-0d97ae2bea82,1d1248ce-c31a-41f9-85b2-0d97ae2bea82,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,836dfba9-c948-409b-825f-f0d869872835,836dfba9-c948-409b-825f-f0d869872835,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,4e6d38c5-2a09-4473-9e04-8f631fe88c61,4e6d38c5-2a09-4473-9e04-8f631fe88c61,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,4b4f5777-7c36-461e-9d3e-1baaf0497d62,4b4f5777-7c36-461e-9d3e-1baaf0497d62,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,141c7b66-d689-4c8e-ace8-b8e1d8c7fbaa,141c7b66-d689-4c8e-ace8-b8e1d8c7fbaa,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,8583ca82-a4f5-4f2a-9b9a-7807b4560e85,8583ca82-a4f5-4f2a-9b9a-7807b4560e85,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,baec0e60-c410-4b95-8126-f77fd06225b4,baec0e60-c410-4b95-8126-f77fd06225b4,1,0,91275c80-d7f7-47c6-ba76-4a10d394f55b,91275c80-d7f7-47c6-ba76-4a10d394f55b,1,0,b92edc24-fcf7-498d-97a2-0c7f3005c814,b92edc24-fcf7-498d-97a2-0c7f3005c814,1,0,2b97f923-6a4e-4894-9ece-5129d8832864,2b97f923-6a4e-4894-9ece-5129d8832864,1,0,3e2b17cc-e8d1-41fa-9c1a-bbefd1524852,3e2b17cc-e8d1-41fa-9c1a-bbefd1524852,1,0,907a5c35-127a-4b74-9e9b-d0ec3d54ec1a,907a5c35-127a-4b74-9e9b-d0ec3d54ec1a,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,15a4595f-92d8-4084-bb92-cdc587b3a04e,15a4595f-92d8-4084-bb92-cdc587b3a04e,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,5e3bb85e-24cf-45fc-9b72-50bec76cb591,5e3bb85e-24cf-45fc-9b72-50bec76cb591,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,6cc8da97-8752-4c6b-88ef-f7e8ff5dd693,6cc8da97-8752-4c6b-88ef-f7e8ff5dd693,1,0,8683dfa2-0ad9-4345-85e8-a6d2e40881e5,8683dfa2-0ad9-4345-85e8-a6d2e40881e5,1,0,e70ec2f5-5723-4fb0-9b81-c0979943a46a,e70ec2f5-5723-4fb0-9b81-c0979943a46a,1,0,eb125af7-4e19-4235-8d03-361b60a8f68a,eb125af7-4e19-4235-8d03-361b60a8f68a,1,0,bcd1077a-2d19-4bc1-bded-a85818765ac1,bcd1077a-2d19-4bc1-bded-a85818765ac1,1,0,b79ce000-28f7-4630-a5a3-cecb9ef8a0a1,b79ce000-28f7-4630-a5a3-cecb9ef8a0a1,1,0,3ff0b4e6-6afa-4aa8-a20e-84a9d2d74f86,3ff0b4e6-6afa-4aa8-a20e-84a9d2d74f86,1,0,eb747bc2-f81f-4ec3-b216-2457a87683ae,eb747bc2-f81f-4ec3-b216-2457a87683ae,1,0,0ad77f2c-24db-4fda-a79f-984c0c8beac0,0ad77f2c-24db-4fda-a79f-984c0c8beac0,1,0,cfb3ea4b-a092-4c5f-aef0-a83ff8829d24,cfb3ea4b-a092-4c5f-aef0-a83ff8829d24,1,0,02bc23cf-c600-4470-bb84-59cdac35eea9,02bc23cf-c600-4470-bb84-59cdac35eea9,1,0,b7753aea-3798-4be9-b9ce-e4145fbea58a,b7753aea-3798-4be9-b9ce-e4145fbea58a,1,0,ce3d12b8-da77-4ac5-a7bf-a02809ed3f1e,ce3d12b8-da77-4ac5-a7bf-a02809ed3f1e,1,0,cf3819dd-6564-47cd-9b22-790433ca9607,cf3819dd-6564-47cd-9b22-790433ca9607,1,0,231f7349-0e98-497a-9df3-8123a5ea20f0,231f7349-0e98-497a-9df3-8123a5ea20f0,1,0,0c7790f8-db18-4d1d-aa34-d0c7097d0576,0c7790f8-db18-4d1d-aa34-d0c7097d0576,1,0,926b936a-4147-40ef-92c7-008713d5a8b4,926b936a-4147-40ef-92c7-008713d5a8b4,1,0,3446ba39-fbd6-462f-af51-add3173ce1fc,3446ba39-fbd6-462f-af51-add3173ce1fc,1,0,7510d830-cf29-408c-9f2a-77e30382beeb,7510d830-cf29-408c-9f2a-77e30382beeb,1,0,133d9c01-751e-47a1-93a5-46cfa1b85a51,133d9c01-751e-47a1-93a5-46cfa1b85a51,1,0,42b81035-bc9b-4b8a-b1ee-55c24c6bb875,42b81035-bc9b-4b8a-b1ee-55c24c6bb875,1,0,c4e58e2b-2a73-44f2-8a4b-dded01944c35,c4e58e2b-2a73-44f2-8a4b-dded01944c35,1,0,ada738c2-8f68-4f25-afc2-ad88164f5fea,ada738c2-8f68-4f25-afc2-ad88164f5fea,1,0,683cc434-af64-4afb-835b-c20e7e17c32e,683cc434-af64-4afb-835b-c20e7e17c32e,1,0,19aad3e9-704b-4057-8a1d-e6131af2da2d,19aad3e9-704b-4057-8a1d-e6131af2da2d,1,0,6522829d-bb7f-4bac-9c66-21d936d9d3c6,6522829d-bb7f-4bac-9c66-21d936d9d3c6,1,0,aa4c2d2c-b1f8-4525-bdef-24b0dce4724a,aa4c2d2c-b1f8-4525-bdef-24b0dce4724a,1,0,f7c432c0-ee57-40f3-98c2-b94401042395,f7c432c0-ee57-40f3-98c2-b94401042395,1,0,b7dd0b15-bbf0-4959-8d63-fb00c2519d3d,b7dd0b15-bbf0-4959-8d63-fb00c2519d3d,1,0,d58fea2a-34b7-4404-9939-faf5bf1f19c6,d58fea2a-34b7-4404-9939-faf5bf1f19c6,1,0,b458ed6f-e0d2-4830-8005-16f08612c76a,b458ed6f-e0d2-4830-8005-16f08612c76a,1,0,988787d0-4704-4aa7-b02f-96492784d667,988787d0-4704-4aa7-b02f-96492784d667,1,0,66d837ed-be23-4e0a-8cbc-c918f234998d,66d837ed-be23-4e0a-8cbc-c918f234998d,1,0,010bcfe3-a299-4333-8faa-96b08356a097,010bcfe3-a299-4333-8faa-96b08356a097,1,0,4735b8d0-5b06-4640-9d68-380ba4165c01,4735b8d0-5b06-4640-9d68-380ba4165c01,1,0,adcaecde-1977-4c6d-a204-12df7d9915e2,adcaecde-1977-4c6d-a204-12df7d9915e2,1,0,348376e0-6e02-4360-95ea-f23086cabd55,348376e0-6e02-4360-95ea-f23086cabd55,1,0,d7cdbc04-3eaa-45b6-b71b-0340bf029752,d7cdbc04-3eaa-45b6-b71b-0340bf029752,1,0,f6d562ac-6bc8-4e82-9ac0-b6fc4ed41677,f6d562ac-6bc8-4e82-9ac0-b6fc4ed41677,1,0,e954636b-2410-4602-8dfd-fde852998f8b,e954636b-2410-4602-8dfd-fde852998f8b,1,0,00f82519-e522-4cf2-92ab-19a13f38baa7,00f82519-e522-4cf2-92ab-19a13f38baa7,1,0,b59f1272-69ab-4d6a-8e4b-43bfe8231c8c,b59f1272-69ab-4d6a-8e4b-43bfe8231c8c,1,0,33df37df-43d0-40d7-95dd-23655b1fdf81,33df37df-43d0-40d7-95dd-23655b1fdf81,1,0,cef5c343-440f-475e-98f1-28da65eabcf3,cef5c343-440f-475e-98f1-28da65eabcf3,1,0,979378ce-8455-4761-ae83-10e747a6656d,979378ce-8455-4761-ae83-10e747a6656d,1,0,de3cb87d-d08f-4f45-aca5-c4c526772eeb,de3cb87d-d08f-4f45-aca5-c4c526772eeb,1,0,509770b5-ddaf-477b-a79c-cec8afbaf9bc,509770b5-ddaf-477b-a79c-cec8afbaf9bc,1,0,25d72d6e-1a64-4366-85af-5789ed7806d3,25d72d6e-1a64-4366-85af-5789ed7806d3,1,0,eedf57b6-8fd6-4e80-bc0c-1583196b34eb,eedf57b6-8fd6-4e80-bc0c-1583196b34eb,1,0,ec7cc726-82a7-455e-b302-0e024d60bbab,ec7cc726-82a7-455e-b302-0e024d60bbab,1,0,1bae5c60-1027-4ff7-a607-d57da0d6e4f7,1bae5c60-1027-4ff7-a607-d57da0d6e4f7,1,0,3d18a46c-1d64-4bec-9a22-07a736abbf8f,3d18a46c-1d64-4bec-9a22-07a736abbf8f,1,0,d5c64b8e-1184-4ec5-8f02-87e037df0034,d5c64b8e-1184-4ec5-8f02-87e037df0034,1,0,6b5fb7ab-d010-483b-939d-c9f9e2d8884f,6b5fb7ab-d010-483b-939d-c9f9e2d8884f,1,0,5b0f5e4e-ef26-415b-830a-6623688e8a78,5b0f5e4e-ef26-415b-830a-6623688e8a78,1,0,b33693ac-6bc1-47e1-81ab-a3278d3596a3,b33693ac-6bc1-47e1-81ab-a3278d3596a3,1,0,caebab45-2be3-4f5d-b06d-d91c5a4122a0,caebab45-2be3-4f5d-b06d-d91c5a4122a0,1,0,7a56e6ee-3518-491f-b5af-4f1aca2462c0,7a56e6ee-3518-491f-b5af-4f1aca2462c0,1,0,61d03f9f-834b-4077-b5c7-0de85ef007d3,61d03f9f-834b-4077-b5c7-0de85ef007d3,1,0,1683afaf-db32-4267-b1d1-959836c50fb5,1683afaf-db32-4267-b1d1-959836c50fb5,1,0,1e50e4de-f091-4ccc-ba2d-8a526c20351e,1e50e4de-f091-4ccc-ba2d-8a526c20351e,1,0,7671eebd-cdf4-43c6-8d0d-2dff2f8ce975,7671eebd-cdf4-43c6-8d0d-2dff2f8ce975,1,0,83342c37-30b6-4f39-a2df-7aab425eb3bf,83342c37-30b6-4f39-a2df-7aab425eb3bf,1,0,896d8858-5574-4e36-abc0-92a2f0b6e905,896d8858-5574-4e36-abc0-92a2f0b6e905,1,0,8767bf87-b364-4e16-8371-40ae96bff7c0,8767bf87-b364-4e16-8371-40ae96bff7c0,1,0,65ba2d12-ce10-4f27-93ba-0668592edfce,65ba2d12-ce10-4f27-93ba-0668592edfce,1,0,45dba1f4-f080-4b99-abe4-63125f84f580,45dba1f4-f080-4b99-abe4-63125f84f580,1,0,24d0e61f-c9af-45f0-b6dd-00d1fefa1720,24d0e61f-c9af-45f0-b6dd-00d1fefa1720,1,0,75088623-2b34-499a-85c9-0c3f78448cf3,75088623-2b34-499a-85c9-0c3f78448cf3,1,0,f151768d-f840-4116-8fb5-bbcc0b5dd2bc,f151768d-f840-4116-8fb5-bbcc0b5dd2bc,1,0,dd6581f7-82fc-469c-ae2f-d270d810e843,dd6581f7-82fc-469c-ae2f-d270d810e843,1,0,ca0258bd-7408-45a6-8c61-6097090dad4a,ca0258bd-7408-45a6-8c61-6097090dad4a,1,0,5080a8ca-a75e-4f4f-885b-62f64434f0f2,5080a8ca-a75e-4f4f-885b-62f64434f0f2,1,0,3adbff51-6a82-40e7-9585-a030b06d0632,3adbff51-6a82-40e7-9585-a030b06d0632,1,0,c27036c4-7077-4464-b24a-46b37db4bfcf,c27036c4-7077-4464-b24a-46b37db4bfcf,1,0,99ce0c09-eae0-430b-9a20-46d96503876b,99ce0c09-eae0-430b-9a20-46d96503876b,1,0,128e9f84-5f92-4ed6-afb9-86b4b244ae58,128e9f84-5f92-4ed6-afb9-86b4b244ae58,1,0,5bff11e0-07d0-43eb-b02d-5dc6f2c9bab1,5bff11e0-07d0-43eb-b02d-5dc6f2c9bab1,1,0,13b4853f-d83d-4e30-80a4-704b740cf76f,13b4853f-d83d-4e30-80a4-704b740cf76f,1,0,32e9be21-ef2f-46fd-96ff-2ba143a8c1d9,32e9be21-ef2f-46fd-96ff-2ba143a8c1d9,1,0,9c81736c-25ce-42eb-9e7a-1fc014cbbc7d,9c81736c-25ce-42eb-9e7a-1fc014cbbc7d,1,0,655ac12f-a0e4-46fb-b11a-eaba635edfae,655ac12f-a0e4-46fb-b11a-eaba635edfae,1,0,7bccc0c6-bc80-4672-8190-4fc94cea4249,7bccc0c6-bc80-4672-8190-4fc94cea4249,1,0,82ebe1f1-2c36-4152-bc02-b8085ad614e3,82ebe1f1-2c36-4152-bc02-b8085ad614e3,1,0,68259658-c149-4a1b-b1d5-b15b232ee334,68259658-c149-4a1b-b1d5-b15b232ee334,1,0,301a9f28-2cd9-4364-9b57-a22b9e6553fa,301a9f28-2cd9-4364-9b57-a22b9e6553fa,1,0,4948d3d3-9267-4f9c-8260-5ebb63ce281f,4948d3d3-9267-4f9c-8260-5ebb63ce281f,1,0,051bc689-9357-463a-93db-55994af23a88,051bc689-9357-463a-93db-55994af23a88,1,0,2d4a8fe5-3371-42f9-8052-ec78d4df0da1,2d4a8fe5-3371-42f9-8052-ec78d4df0da1,1,0,4be19ad6-691e-4224-86ec-bc4d76a15525,4be19ad6-691e-4224-86ec-bc4d76a15525,1,0,cf9ebddd-d421-475f-8d57-6c45d817c4ec,cf9ebddd-d421-475f-8d57-6c45d817c4ec,1,0,6718e0bf-8a9d-4eab-88fd-9cd5f2bc9e58,6718e0bf-8a9d-4eab-88fd-9cd5f2bc9e58,1,0,2811d95d-6ce9-4066-99cb-ea6894b18497,2811d95d-6ce9-4066-99cb-ea6894b18497,1,0,2fcee659-7bd7-4181-9991-ce4723d485cd,2fcee659-7bd7-4181-9991-ce4723d485cd,1,0,79dc0e69-6a17-428f-b36f-9056d0f6864c,79dc0e69-6a17-428f-b36f-9056d0f6864c,1,0,77a94ffd-4847-4180-a587-31dd3c95f62a,77a94ffd-4847-4180-a587-31dd3c95f62a,1,0,de8bb46d-127e-40e6-af46-a7385a37819b,de8bb46d-127e-40e6-af46-a7385a37819b,1,0,95b5ac72-941c-4f6b-aa2d-ce2a1b616d8d,95b5ac72-941c-4f6b-aa2d-ce2a1b616d8d,1,0,ea557343-ae0f-4a2c-a298-573c952a7d63,ea557343-ae0f-4a2c-a298-573c952a7d63,1,0,11d02ccf-173f-447a-aae1-79f373e46e53,11d02ccf-173f-447a-aae1-79f373e46e53,1,0,a16ebbff-31e2-4c6f-99f5-3bd733c18117,a16ebbff-31e2-4c6f-99f5-3bd733c18117,1,0,d5296815-e4e5-4e79-af97-c4f5afb061cb,d5296815-e4e5-4e79-af97-c4f5afb061cb,1,0,9832d04b-cc86-4399-9129-c0c8f4745973,9832d04b-cc86-4399-9129-c0c8f4745973,1,0,ec745935-1cc7-491d-8b60-e42b3f8c618d,ec745935-1cc7-491d-8b60-e42b3f8c618d,1,0,c642227b-d804-4047-a90b-40159660ba4a,c642227b-d804-4047-a90b-40159660ba4a,1,0,99b1ad67-29aa-4550-b70b-685cd44c27d4,99b1ad67-29aa-4550-b70b-685cd44c27d4,1,0,c54578df-a852-445a-94a6-a6654bb1e3a0,c54578df-a852-445a-94a6-a6654bb1e3a0,1,0,18cbf6dc-ec5c-4181-855a-fe779e3f1ad8,18cbf6dc-ec5c-4181-855a-fe779e3f1ad8,1,0,177c8cf2-27ba-4866-8e0f-cdbb611c84ac,177c8cf2-27ba-4866-8e0f-cdbb611c84ac,1,0,f014ebeb-5f33-430f-ae80-96ba7732d931,f014ebeb-5f33-430f-ae80-96ba7732d931,1,0,7782051c-4bc2-4fc2-bfa5-256bd2911abf,7782051c-4bc2-4fc2-bfa5-256bd2911abf,1,0,2a805bb1-54b3-4b0e-ae7f-ad3f9f18ee24,2a805bb1-54b3-4b0e-ae7f-ad3f9f18ee24,1,0,56fd938d-e0df-4e16-a4ad-7eb6d6cc538f,56fd938d-e0df-4e16-a4ad-7eb6d6cc538f,1,0,7c49fa86-1c65-4959-9331-c0f4852934b3,7c49fa86-1c65-4959-9331-c0f4852934b3,1,0,f744e94b-4359-4516-b682-f15775066e7c,f744e94b-4359-4516-b682-f15775066e7c,1,0,ad37361d-a380-42bd-8cae-b80164415edc,ad37361d-a380-42bd-8cae-b80164415edc,1,0,700cedcb-7625-4ed2-93fb-11ae54317367,700cedcb-7625-4ed2-93fb-11ae54317367,1,0,6fd83c31-c8eb-4f01-ba99-17d5690e78fb,6fd83c31-c8eb-4f01-ba99-17d5690e78fb,1,0,19d511f0-7fad-4f81-be73-969cc192d28d,19d511f0-7fad-4f81-be73-969cc192d28d,1,0,55757755-bc7f-42fb-b55a-691137c5c8da,55757755-bc7f-42fb-b55a-691137c5c8da,1,0,f8c04e0d-a578-4350-aebc-fae5a09db697,f8c04e0d-a578-4350-aebc-fae5a09db697,1,0,ab50f182-0fbd-4e05-8580-c59779a9321e,ab50f182-0fbd-4e05-8580-c59779a9321e,1,0,6af7c3b9-9062-48b3-87b0-41558f7f11e0,6af7c3b9-9062-48b3-87b0-41558f7f11e0,1,0,6f85e902-895a-4636-a18f-ea1f7c68f544,6f85e902-895a-4636-a18f-ea1f7c68f544,1,0,ea4cf11a-edfd-439f-bd3d-a1ac088580ea,ea4cf11a-edfd-439f-bd3d-a1ac088580ea,1,0,24116097-a6ec-46d0-936e-74fcb873bd4f,24116097-a6ec-46d0-936e-74fcb873bd4f,1,0,ae7c5ade-a707-4425-864f-06cc2b2a208e,ae7c5ade-a707-4425-864f-06cc2b2a208e,1,0,ec8ee963-dbbe-497a-bc01-6a2c6a5a99cb,ec8ee963-dbbe-497a-bc01-6a2c6a5a99cb,1,0,8573cd5f-0574-4109-b841-567dfd578931,8573cd5f-0574-4109-b841-567dfd578931,1,0,67d95ce8-17af-4b2f-8dfd-2fc902aa9e1d,67d95ce8-17af-4b2f-8dfd-2fc902aa9e1d,1,0,2f60ba06-8830-472d-82e4-9ba1f00c311d,2f60ba06-8830-472d-82e4-9ba1f00c311d,1,0,42872a0b-999d-4a38-a56e-e67e24c0874e,42872a0b-999d-4a38-a56e-e67e24c0874e,1,0,bf36279c-1a85-4c26-9505-a142cba581a0,bf36279c-1a85-4c26-9505-a142cba581a0,1,0,a39c719e-349a-46b7-ae4e-aeaa3e4bebe0,a39c719e-349a-46b7-ae4e-aeaa3e4bebe0,1,0,8e7f7a3e-efa9-4fa5-94c3-4cfce5c8f5ed,8e7f7a3e-efa9-4fa5-94c3-4cfce5c8f5ed,1,0,ec3cf7eb-d1c1-400e-b3f7-11cf304d8e44,ec3cf7eb-d1c1-400e-b3f7-11cf304d8e44,1,0,acea385d-9935-4365-813b-8a121f57cd52,acea385d-9935-4365-813b-8a121f57cd52,1,0,87606a5a-2682-4f1e-ae25-166be2357541,87606a5a-2682-4f1e-ae25-166be2357541,1,0,98652ae9-349d-48f2-8230-b8960e5a495f,98652ae9-349d-48f2-8230-b8960e5a495f,1,0,7691d0bf-e099-4d22-9813-50386f033c46,7691d0bf-e099-4d22-9813-50386f033c46,1,0,c4867f0d-aef9-467e-86e0-5534dc5fa6d7,c4867f0d-aef9-467e-86e0-5534dc5fa6d7,1,0,47c4de6c-9533-4342-8b80-6d31f106742f,47c4de6c-9533-4342-8b80-6d31f106742f,1,0,5fd3f2c8-52cf-411e-822b-a1d417f1c4eb,5fd3f2c8-52cf-411e-822b-a1d417f1c4eb,1,0,32064ccf-dfb1-4dd4-a51a-f505bc370513,32064ccf-dfb1-4dd4-a51a-f505bc370513,1,0,cfa4be49-1a56-4a07-9f00-ab258d7dec5b,cfa4be49-1a56-4a07-9f00-ab258d7dec5b,1,0,72f1df0f-1b00-4873-87ee-7173a266ba19,72f1df0f-1b00-4873-87ee-7173a266ba19,1,0,bb75cb5e-d007-4d1e-a6d4-6bda95c06397,bb75cb5e-d007-4d1e-a6d4-6bda95c06397,1,0,43c621c4-474e-4060-bc1f-3b1c8a59acbd,43c621c4-474e-4060-bc1f-3b1c8a59acbd,1,0,78187acb-b8c2-4fcf-b967-56da82d6b77c,78187acb-b8c2-4fcf-b967-56da82d6b77c,1,0,5f71053f-4f50-44c7-bba8-254861f045ca,5f71053f-4f50-44c7-bba8-254861f045ca,1,0,88d28c9d-48af-46ff-9265-af46d10fd0aa,88d28c9d-48af-46ff-9265-af46d10fd0aa,1,0,63cb3bbe-5271-45a6-a3c0-c8960c707153,63cb3bbe-5271-45a6-a3c0-c8960c707153,1,0,12f96b1b-fc85-4638-9f70-a2e8196587a1,12f96b1b-fc85-4638-9f70-a2e8196587a1,1,0,975bcc47-f4c2-440e-8c3f-4fa42094405c,975bcc47-f4c2-440e-8c3f-4fa42094405c,1,0,1f260296-36b8-4c74-a1e7-5a1d7a23c0bd,1f260296-36b8-4c74-a1e7-5a1d7a23c0bd,1,0,f353fc01-89a8-495b-8c65-6e1719a172a5,f353fc01-89a8-495b-8c65-6e1719a172a5,1,0,4800d51e-8229-4384-ab8d-d1d36cb713f6,4800d51e-8229-4384-ab8d-d1d36cb713f6,1,0,7a59debd-f48b-4f3a-a5e4-05bd7a6e4306,7a59debd-f48b-4f3a-a5e4-05bd7a6e4306,1,0,5353f9f9-abce-4f1b-8ba4-6f185b113b24,5353f9f9-abce-4f1b-8ba4-6f185b113b24,1,0,f68c3405-4ac5-48ab-837d-68e79669be1b,f68c3405-4ac5-48ab-837d-68e79669be1b,1,0,a9b7aa5e-a241-460e-a9dd-981031564377,a9b7aa5e-a241-460e-a9dd-981031564377,1,0,a9ad0892-ed63-4f39-9ba9-31523114365d,a9ad0892-ed63-4f39-9ba9-31523114365d,1,0,ce5abb2b-1586-4972-9a59-8812a0ebc905,ce5abb2b-1586-4972-9a59-8812a0ebc905,1,0,0892456e-4ebf-46ee-a864-3f100510311f,0892456e-4ebf-46ee-a864-3f100510311f,1,0,7ab652b3-635b-4415-97e8-bd0a4aec1c76,7ab652b3-635b-4415-97e8-bd0a4aec1c76,1,0,6cb9cce0-a65a-4280-bae8-69e73b5fd859,6cb9cce0-a65a-4280-bae8-69e73b5fd859,1,0,dedda468-b754-4cf9-bb16-c5d5b1a7d6b7,dedda468-b754-4cf9-bb16-c5d5b1a7d6b7,1,0,8c77d038-4581-4468-b17c-baf6a0d6a039,8c77d038-4581-4468-b17c-baf6a0d6a039,1,0,77ac6bb4-0f72-4d35-9181-4ba58d4606ac,77ac6bb4-0f72-4d35-9181-4ba58d4606ac,1,0,43b9ca4d-8d3f-4fc7-9eb8-84b357c438cb,43b9ca4d-8d3f-4fc7-9eb8-84b357c438cb,1,0,1e439352-5b22-4aed-9b4c-e1648b1f68cc,1e439352-5b22-4aed-9b4c-e1648b1f68cc,1,0,514c3fec-0331-49c6-a6e8-2d826179fe96,514c3fec-0331-49c6-a6e8-2d826179fe96,1,0,ce8e278f-a368-4286-b479-ebad3b23de9c,ce8e278f-a368-4286-b479-ebad3b23de9c,1,0,ff21a413-36bb-4119-8737-80e26c8c875e,ff21a413-36bb-4119-8737-80e26c8c875e,1,0,de94d05d-3ec7-4139-a70b-92d6771e7e72,de94d05d-3ec7-4139-a70b-92d6771e7e72,1,0,3c68204f-d996-4042-b7b8-b480c6d228bd,3c68204f-d996-4042-b7b8-b480c6d228bd,1,0,89054313-4bf5-4d53-bd16-538b910d9e8b,89054313-4bf5-4d53-bd16-538b910d9e8b,1,0,275e5141-5dfa-46ed-a4af-3cad593a0868,275e5141-5dfa-46ed-a4af-3cad593a0868,1,0,028223f2-1af3-444a-8292-8b2a8bd2484d,028223f2-1af3-444a-8292-8b2a8bd2484d,1,0,b8b8f4ae-9964-4176-bcf7-67c1cb51f849,b8b8f4ae-9964-4176-bcf7-67c1cb51f849,1,0,9b179083-eb74-41cd-be0e-5fc717d974a5,9b179083-eb74-41cd-be0e-5fc717d974a5,1,0,5b3b3f45-77f0-4a02-892b-71cdc06a7ecf,5b3b3f45-77f0-4a02-892b-71cdc06a7ecf,1,0,d57a517a-3a81-484d-9b58-f24b969487de,d57a517a-3a81-484d-9b58-f24b969487de,1,0,842d43cd-76fa-4574-9523-58302d789c18,842d43cd-76fa-4574-9523-58302d789c18,1,0,04cecd2d-5913-4c37-916c-9f9dc25c158b,04cecd2d-5913-4c37-916c-9f9dc25c158b,1,0,a1285b03-7c76-4b7d-b60c-fb481f33ded9,a1285b03-7c76-4b7d-b60c-fb481f33ded9,1,0,957a1333-6d31-41ca-9812-919726965044,957a1333-6d31-41ca-9812-919726965044,1,0,36f5ac04-52fb-4cba-a067-7eae0b778599,36f5ac04-52fb-4cba-a067-7eae0b778599,1,0,11c0bc9c-be98-40c6-92da-db68968835d0,11c0bc9c-be98-40c6-92da-db68968835d0,1,0,eccf4f97-a5b5-4587-b9e3-748aa6cad7e3,eccf4f97-a5b5-4587-b9e3-748aa6cad7e3,1,0,6c6fddd7-b1d5-4c6b-badf-54b6a1018dc8,6c6fddd7-b1d5-4c6b-badf-54b6a1018dc8,1,0,1cbca86a-54f4-4db9-b8d4-827acb0ea722,1cbca86a-54f4-4db9-b8d4-827acb0ea722,1,0,fbed8c4f-29ea-4314-81e9-07bc3091f23a,fbed8c4f-29ea-4314-81e9-07bc3091f23a,1,0,46406519-638d-4313-928e-0c4afea091bb,46406519-638d-4313-928e-0c4afea091bb,1,0,6142d817-b170-423a-aa1e-28fcba1f103e,6142d817-b170-423a-aa1e-28fcba1f103e,1,0,f9758cd7-487b-47c8-a372-58fe42a9ef54,f9758cd7-487b-47c8-a372-58fe42a9ef54,1,0,9648577f-e455-461a-ba41-3e3b9b2dc553,9648577f-e455-461a-ba41-3e3b9b2dc553,1,0,8379651d-3fb1-4853-ba75-2a49d04e2d16,8379651d-3fb1-4853-ba75-2a49d04e2d16,1,0,2c35db7c-40cf-4db0-83d9-3caf329adc78,2c35db7c-40cf-4db0-83d9-3caf329adc78,1,0,8fb745b8-5fed-4c1b-90e7-2fabb025b100,8fb745b8-5fed-4c1b-90e7-2fabb025b100,1,0,085b1f70-d560-4fd7-a36c-6d71c40f6870,085b1f70-d560-4fd7-a36c-6d71c40f6870,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,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,cf80ff0d-9add-4fa5-bba2-00d43fce5ed8,cf80ff0d-9add-4fa5-bba2-00d43fce5ed8,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,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,003f2b4f-cdaa-4830-992d-9e376949a1b4,003f2b4f-cdaa-4830-992d-9e376949a1b4,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,f8759ffe-4f6d-48f2-8ae6-51911c5baf4b,f8759ffe-4f6d-48f2-8ae6-51911c5baf4b,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,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,fd07f403-1116-4102-a1bf-35abb03ad493,fd07f403-1116-4102-a1bf-35abb03ad493,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,ba38453b-6225-40b8-80d8-de00dc620d56,ba38453b-6225-40b8-80d8-de00dc620d56,1,0,0722315c-9217-4ecf-80ff-d1ee89f84a53,0722315c-9217-4ecf-80ff-d1ee89f84a53,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,747f1c23-3c03-456e-864e-fc714484b7d6,747f1c23-3c03-456e-864e-fc714484b7d6,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,82035887-4f22-435b-a43f-b5ef9cb845ce,82035887-4f22-435b-a43f-b5ef9cb845ce,1,0,667b0f85-b82d-4d8e-9d75-b55a9723dce7,667b0f85-b82d-4d8e-9d75-b55a9723dce7,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,5f92f8c8-4d02-41a0-858f-e521f978df9f,5f92f8c8-4d02-41a0-858f-e521f978df9f,1,0,f9da8faf-1462-4ac4-9b63-2a20fc916049,f9da8faf-1462-4ac4-9b63-2a20fc916049,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,96cd8b90-5cf3-416c-b3a2-1f62e158b37e,96cd8b90-5cf3-416c-b3a2-1f62e158b37e,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,f00116da-2bf1-4edd-b939-f25d36774f5b,f00116da-2bf1-4edd-b939-f25d36774f5b,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,b1230b96-f4c8-4311-bfc0-df33bcc41394,b1230b96-f4c8-4311-bfc0-df33bcc41394,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,b6a3a9d4-71d2-4eb3-bb6f-6349330ffe3c,b6a3a9d4-71d2-4eb3-bb6f-6349330ffe3c,1,0,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,ddaba839-5ed2-4707-8cb8-ebd5784f642a,ddaba839-5ed2-4707-8cb8-ebd5784f642a,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,024b83dd-9f90-4122-8f50-0f2dc32bd76c,024b83dd-9f90-4122-8f50-0f2dc32bd76c,1,0,cba9e94c-e328-42ef-bcd0-92db3f0c048b,cba9e94c-e328-42ef-bcd0-92db3f0c048b,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,667f0c7e-fa70-49e9-97c9-ad04819fee58,667f0c7e-fa70-49e9-97c9-ad04819fee58,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,ded105e9-b71b-4550-9d9c-9c743dc212d0,ded105e9-b71b-4550-9d9c-9c743dc212d0,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,546af6c0-0762-4d2d-9d3b-c6a8f6c57674,546af6c0-0762-4d2d-9d3b-c6a8f6c57674,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,32850dc1-1484-4b7d-94f4-a08329423e7b,32850dc1-1484-4b7d-94f4-a08329423e7b,1,0,e37a7cf1-a7b5-4b6e-b818-0915598c8505,e37a7cf1-a7b5-4b6e-b818-0915598c8505,1,0,9299b382-fc65-4f89-8329-94fec125761c,9299b382-fc65-4f89-8329-94fec125761c,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,c83739dc-6afc-4687-ab1c-98a7b24b2182,c83739dc-6afc-4687-ab1c-98a7b24b2182,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,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,49b887e5-3b2f-42f8-b3f1-ba161ae05b3c,49b887e5-3b2f-42f8-b3f1-ba161ae05b3c,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,1c265c15-6002-416e-8045-81f03c893faf,1c265c15-6002-416e-8045-81f03c893faf,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,077e2c42-bc3b-48bf-bbc2-41effe20f613,077e2c42-bc3b-48bf-bbc2-41effe20f613,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,c888ccc1-9116-4b88-b950-aeabd54191c0,c888ccc1-9116-4b88-b950-aeabd54191c0,1,0,ff4d92a7-5fa3-4a46-a6f5-47c3952edb22,ff4d92a7-5fa3-4a46-a6f5-47c3952edb22,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,eaeb5aa8-8edf-4f74-8011-2d476f543bf6,eaeb5aa8-8edf-4f74-8011-2d476f543bf6,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,7adced5f-3a5f-419a-926c-0452aad86c86,7adced5f-3a5f-419a-926c-0452aad86c86,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,7f06703e-24cd-4db7-be88-3fbd65e5c252,7f06703e-24cd-4db7-be88-3fbd65e5c252,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,2181d197-028b-40b2-bf02-3d85dad1af30,2181d197-028b-40b2-bf02-3d85dad1af30,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,c9646904-3fb4-452c-af50-ddf562b597d0,c9646904-3fb4-452c-af50-ddf562b597d0,1,0,92bac831-04da-4302-ac62-a867e017fef6,92bac831-04da-4302-ac62-a867e017fef6,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,4249f45b-b298-4d42-9ca2-bd80b87f2150,4249f45b-b298-4d42-9ca2-bd80b87f2150,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,bc039475-c872-4b99-9248-c74aae75f0e1,bc039475-c872-4b99-9248-c74aae75f0e1,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,b0e0a273-2613-4d5e-9901-df7893af4c74,b0e0a273-2613-4d5e-9901-df7893af4c74,1,0,4ad1ef06-d8b4-46da-b536-d23c40e85497,4ad1ef06-d8b4-46da-b536-d23c40e85497,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,30be8d71-a9dd-4dd3-8fb4-ea0c8de86358,30be8d71-a9dd-4dd3-8fb4-ea0c8de86358,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,33c93020-b5f0-424e-a8fc-114a6ab04107,33c93020-b5f0-424e-a8fc-114a6ab04107,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,f9479915-cdee-40d5-ba53-101132aac672,f9479915-cdee-40d5-ba53-101132aac672,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,2276a1d4-b4d9-4643-8342-36143ce4eb26,2276a1d4-b4d9-4643-8342-36143ce4eb26,1,0,5510a103-836d-457e-b82b-6f6223efc96b,5510a103-836d-457e-b82b-6f6223efc96b,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,4cc76b9f-aa72-486e-84ee-f0866edfe691,4cc76b9f-aa72-486e-84ee-f0866edfe691,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,93848cf6-7a87-42c7-b685-0bc418a2037c,93848cf6-7a87-42c7-b685-0bc418a2037c,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,15cdbaf0-bc17-41c4-a330-d142cac8dc03,15cdbaf0-bc17-41c4-a330-d142cac8dc03,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,b2de86fc-f10b-4304-8060-cad903ba37c5,b2de86fc-f10b-4304-8060-cad903ba37c5,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,20082776-ce24-41c5-ae11-6fa9bc54db59,20082776-ce24-41c5-ae11-6fa9bc54db59,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,c61e4c12-178d-47aa-a070-333fe5450168,c61e4c12-178d-47aa-a070-333fe5450168,1,0,3ebcff6f-8709-46a2-b354-768e1d1415c5,3ebcff6f-8709-46a2-b354-768e1d1415c5,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,ea9d67eb-b552-48bd-a108-4938e5541735,ea9d67eb-b552-48bd-a108-4938e5541735,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,85d6d214-2b70-4cc4-ba80-f4325dd4ca65,85d6d214-2b70-4cc4-ba80-f4325dd4ca65,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,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,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,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,e29d96ee-e8fa-4100-8a0e-494398e4ec9d,e29d96ee-e8fa-4100-8a0e-494398e4ec9d,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,19ea515f-65f7-4ed9-812b-c97b92e2498f,19ea515f-65f7-4ed9-812b-c97b92e2498f,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,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,456c5171-4298-4201-9908-79feb376d1b1,456c5171-4298-4201-9908-79feb376d1b1,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,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,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,8cf925d9-6811-4bce-b116-09d6a26ff3cb,8cf925d9-6811-4bce-b116-09d6a26ff3cb,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,a12c0e81-00c3-4126-a001-b4441fd63030,a12c0e81-00c3-4126-a001-b4441fd63030,1,0,36999e1b-865e-41ad-b9d6-1b3ac887acfb,36999e1b-865e-41ad-b9d6-1b3ac887acfb,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,af52cd7d-374a-4c46-a74c-305e154dc6f2,af52cd7d-374a-4c46-a74c-305e154dc6f2,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,2a985b50-a4b1-4932-8af6-51eee8e78ac8,2a985b50-a4b1-4932-8af6-51eee8e78ac8,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,fe9eca7c-6e3d-4c3f-b98d-abd8ab05d35e,fe9eca7c-6e3d-4c3f-b98d-abd8ab05d35e,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,e05b6f44-8244-4e94-a6d3-57450f8b47dc,e05b6f44-8244-4e94-a6d3-57450f8b47dc,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,7ad16fb4-17eb-4812-8015-9447d92e08ce,7ad16fb4-17eb-4812-8015-9447d92e08ce,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,81979741-65c9-48a5-9f69-e0d0f0c8ddaa,81979741-65c9-48a5-9f69-e0d0f0c8ddaa,1,0,87553d04-a72a-40b1-9005-85ea0efebf5d,87553d04-a72a-40b1-9005-85ea0efebf5d,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,8bd56034-6d56-4c2f-8e7f-4c0fff49ac39,8bd56034-6d56-4c2f-8e7f-4c0fff49ac39,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,9e90d9f7-5301-44b3-9eba-45fee5a69a0b,9e90d9f7-5301-44b3-9eba-45fee5a69a0b,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,83e30f0b-67b2-411b-9624-ac4c4bd7f94a,83e30f0b-67b2-411b-9624-ac4c4bd7f94a,1,0,c79ba5a5-e6d9-4a3f-ab23-eca876607f7f,c79ba5a5-e6d9-4a3f-ab23-eca876607f7f,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,dc14a27a-2299-4bd5-8c0e-5f84adae507a,dc14a27a-2299-4bd5-8c0e-5f84adae507a,1,0,bf20e6ce-bbe6-4523-9381-f9cb6cad348c,bf20e6ce-bbe6-4523-9381-f9cb6cad348c,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,8d8ac8f0-37e1-4637-87c7-5af82d05202b,8d8ac8f0-37e1-4637-87c7-5af82d05202b,1,0,8dad7f71-63cb-449a-bafd-79bd63f10310,8dad7f71-63cb-449a-bafd-79bd63f10310,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,ae039438-89af-4217-910d-476115f51ab2,ae039438-89af-4217-910d-476115f51ab2,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,2b43d8e1-86b1-4f3a-aad8-f0f6eb1f1de9,2b43d8e1-86b1-4f3a-aad8-f0f6eb1f1de9,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,f1560584-99a3-48ac-b736-e7d33affe474,f1560584-99a3-48ac-b736-e7d33affe474,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,6a9f1485-21a4-41e8-b8a7-26340eff5085,6a9f1485-21a4-41e8-b8a7-26340eff5085,1,0,630845af-a7dc-4d1e-8c1a-44fa65aab036,630845af-a7dc-4d1e-8c1a-44fa65aab036,1,0,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,1,0,cfce9728-f37a-4ddc-adc1-4569900462b8,cfce9728-f37a-4ddc-adc1-4569900462b8,1,0,d20739a3-a149-4b64-b9ca-4a76aca06cb8,d20739a3-a149-4b64-b9ca-4a76aca06cb8,1,0,99c5e87a-f096-4315-8fbe-f596ea9c176f,99c5e87a-f096-4315-8fbe-f596ea9c176f,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,e984fbf9-6b89-4d38-8938-b2b0e6623c7a,e984fbf9-6b89-4d38-8938-b2b0e6623c7a,1,0,9b76ded4-814a-4267-99c5-2c8fb05ee352,9b76ded4-814a-4267-99c5-2c8fb05ee352,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,db445527-7bd2-448b-bf87-5ac0c10d742d,db445527-7bd2-448b-bf87-5ac0c10d742d,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,a43fbfd8-6324-4192-a1a6-5628a7edb4d2,a43fbfd8-6324-4192-a1a6-5628a7edb4d2,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,c3c1a825-6b35-4b09-8043-63f75b575707,c3c1a825-6b35-4b09-8043-63f75b575707,1,0,5465466d-48be-493a-aadc-e97046b010cc,5465466d-48be-493a-aadc-e97046b010cc,1,0,fa61df43-49e7-4d5f-a0b9-f35af199f9f5,fa61df43-49e7-4d5f-a0b9-f35af199f9f5,1,0,0b92cced-d818-400c-82b6-7726e912a478,0b92cced-d818-400c-82b6-7726e912a478,1,0,5feb9b74-3d94-4202-a96a-170968f54194,5feb9b74-3d94-4202-a96a-170968f54194,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,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,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,c8ba4901-7f70-4353-b039-d75f1cb3f5b7,c8ba4901-7f70-4353-b039-d75f1cb3f5b7,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,85b591b4-a93d-4fcb-bdc7-e6d44436e511,85b591b4-a93d-4fcb-bdc7-e6d44436e511,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,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,644cf757-bff9-4e2e-b72b-1e736c42d4c3,644cf757-bff9-4e2e-b72b-1e736c42d4c3,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,969f7e7d-5108-4bb5-9087-386bcd182ea1,969f7e7d-5108-4bb5-9087-386bcd182ea1,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,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,e4703f32-ad6e-4803-8776-7d32c57d3549,e4703f32-ad6e-4803-8776-7d32c57d3549,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,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,0a1837b6-9a0a-4a86-b929-89d032d41383,0a1837b6-9a0a-4a86-b929-89d032d41383,1,0,62ff29be-7d52-4c63-8726-c55bf69a64de,62ff29be-7d52-4c63-8726-c55bf69a64de,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,123b8af3-8724-4f77-b1d6-6768832a43a7,123b8af3-8724-4f77-b1d6-6768832a43a7,1,0,cb81fb9f-16a2-4265-92a9-b827ca2fd588,cb81fb9f-16a2-4265-92a9-b827ca2fd588,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,2fa09d14-6d28-4bfb-87c3-894e66ab6bca,2fa09d14-6d28-4bfb-87c3-894e66ab6bca,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,cfa1b3e7-747b-409a-8bb5-6d41b85b7105,cfa1b3e7-747b-409a-8bb5-6d41b85b7105,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,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,308781d9-ea18-4c30-ba95-ef822e7ef739,308781d9-ea18-4c30-ba95-ef822e7ef739,1,0,a7f3ee04-4ffe-4a21-b2ad-92cd3f4acd8f,a7f3ee04-4ffe-4a21-b2ad-92cd3f4acd8f,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,f3ae1a2c-e0ca-461b-ba5a-76a6423c6325,f3ae1a2c-e0ca-461b-ba5a-76a6423c6325,1,0,b233d29c-3979-4ef6-b7f0-89ca88f65e82,b233d29c-3979-4ef6-b7f0-89ca88f65e82,1,0,684ca876-644e-43f5-b96a-1561fb5b1935,684ca876-644e-43f5-b96a-1561fb5b1935,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,86a9d7ab-7a96-4c58-8073-ca4b2b99cceb,86a9d7ab-7a96-4c58-8073-ca4b2b99cceb,1,0,1ae1a239-0d88-4467-af33-32bcfe6cf61d,1ae1a239-0d88-4467-af33-32bcfe6cf61d,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,c234a467-ad6c-41d0-ac9e-8592acd8d9d2,c234a467-ad6c-41d0-ac9e-8592acd8d9d2,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,52fd1e04-44b6-4405-a2de-ec5c0cf66b64,52fd1e04-44b6-4405-a2de-ec5c0cf66b64,1,0,9a647b38-73da-4491-997b-773059cfd1c9,9a647b38-73da-4491-997b-773059cfd1c9,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,7b074b91-3c8e-48b3-8858-b6ea1c531f66,7b074b91-3c8e-48b3-8858-b6ea1c531f66,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,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,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,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,800ef5f0-fdd1-4f8b-8c0b-9744952bfb5b,800ef5f0-fdd1-4f8b-8c0b-9744952bfb5b,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,322645d4-e3fb-467b-a55d-d8e74cff2ea3,322645d4-e3fb-467b-a55d-d8e74cff2ea3,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,8363bd46-1ea5-44f0-858a-05bc03f6020e,8363bd46-1ea5-44f0-858a-05bc03f6020e,1,0,0f039952-09d3-49c8-b909-e8333a3fc8f9,0f039952-09d3-49c8-b909-e8333a3fc8f9,1,0,d8fc4644-5351-443c-8b5d-5de2c4b855d1,d8fc4644-5351-443c-8b5d-5de2c4b855d1,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,9cd2fc77-a4b0-457e-a6b0-63dbf521bf90,9cd2fc77-a4b0-457e-a6b0-63dbf521bf90,1,0,a321b6db-391b-4c65-8d27-ce486d10055e,a321b6db-391b-4c65-8d27-ce486d10055e,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,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,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,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,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,91a0ceed-03ce-4914-9cd1-dec49bba336f,91a0ceed-03ce-4914-9cd1-dec49bba336f,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,826c2821-147d-4aaf-910c-acfbdb58a29f,826c2821-147d-4aaf-910c-acfbdb58a29f,1,0,aeea0075-bdeb-41b7-b9cc-1da7b500455f,aeea0075-bdeb-41b7-b9cc-1da7b500455f,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,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,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,60340efe-6a9e-4676-856f-87bfae5409f7,60340efe-6a9e-4676-856f-87bfae5409f7,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,793d7af5-b499-4646-9e8e-a5728bf71338,793d7af5-b499-4646-9e8e-a5728bf71338,1,0,e4850e53-03b0-43ba-8365-feb89eb38102,e4850e53-03b0-43ba-8365-feb89eb38102,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,76c802c1-1442-412f-ba91-5864c7a2f8f9,76c802c1-1442-412f-ba91-5864c7a2f8f9,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,07629bf6-5544-4de9-b1d8-851cb03766cb,07629bf6-5544-4de9-b1d8-851cb03766cb,1,0,d449a85f-2e26-4512-b98c-7be3007966ed,d449a85f-2e26-4512-b98c-7be3007966ed,1,0,581be829-b097-4f95-a0c4-7ca3f13c29fc,581be829-b097-4f95-a0c4-7ca3f13c29fc,1,0,dd978355-1fb7-44a0-ba88-4e72e9cd67a9,dd978355-1fb7-44a0-ba88-4e72e9cd67a9,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,3981b13c-f8e1-44cc-a8e8-59ee9635d029,3981b13c-f8e1-44cc-a8e8-59ee9635d029,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,06ca1680-e641-499c-94ad-2d5ce5561747,06ca1680-e641-499c-94ad-2d5ce5561747,1,0,35bbf75b-99d0-447b-acb0-a3d2c98bea56,35bbf75b-99d0-447b-acb0-a3d2c98bea56,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,de258ab8-2d16-4c69-9490-5819b7ae3d08,de258ab8-2d16-4c69-9490-5819b7ae3d08,1,0,f7aacf70-0b59-410a-9929-ab4ab8a2431c,f7aacf70-0b59-410a-9929-ab4ab8a2431c,1,0,5bb6ba7a-ed61-4cdd-b3db-ec9da292e7a4,5bb6ba7a-ed61-4cdd-b3db-ec9da292e7a4,1,0,b37a9edd-b6bc-40eb-b5de-f54968abc119,b37a9edd-b6bc-40eb-b5de-f54968abc119,1,0,52338832-b15a-4e56-b13d-141141677008,52338832-b15a-4e56-b13d-141141677008,1,0,e9616402-88cc-44ae-96ca-ba20cf7d38ad,e9616402-88cc-44ae-96ca-ba20cf7d38ad,1,0,1b8212d7-b834-460c-9a2b-68a5de889e5b,1b8212d7-b834-460c-9a2b-68a5de889e5b,1,0,a816deca-4863-44e2-a8ff-89bfa5fbb0ac,a816deca-4863-44e2-a8ff-89bfa5fbb0ac,1,0,157f3df0-97b7-461b-bd3e-1f2e12658adf,157f3df0-97b7-461b-bd3e-1f2e12658adf,1,0,d2d6968c-fbe6-4e09-9cdb-653ca9a97fcc,d2d6968c-fbe6-4e09-9cdb-653ca9a97fcc,1,0,ea6f491e-9ec9-456d-ae30-4a258d87dff6,ea6f491e-9ec9-456d-ae30-4a258d87dff6,1,0,c67cddce-64d0-45eb-8abb-5c76bbe27f93,c67cddce-64d0-45eb-8abb-5c76bbe27f93,1,0,4f1aa113-6d77-46c8-ac21-9e5545553499,4f1aa113-6d77-46c8-ac21-9e5545553499,1,0,6ccec21e-f26f-482c-9ce2-1f058fc492c1,6ccec21e-f26f-482c-9ce2-1f058fc492c1,1,0,46af6cac-4731-4ac0-a38e-fcc8a45d06bf,46af6cac-4731-4ac0-a38e-fcc8a45d06bf,1,0,fe9d7083-82f6-4390-b5a5-46c666463289,fe9d7083-82f6-4390-b5a5-46c666463289,1,0,cc194484-b3fc-4e89-8f72-de3f0e23019e,cc194484-b3fc-4e89-8f72-de3f0e23019e,1,0,9cb89abd-efb7-418e-9819-a4085c2ad61c,9cb89abd-efb7-418e-9819-a4085c2ad61c,1,0,3b615ad8-edcf-4339-9e67-3c3afadfc77f,3b615ad8-edcf-4339-9e67-3c3afadfc77f,1,0,9bc3a840-eeb9-444b-9f8a-05a8dd13e3dc,9bc3a840-eeb9-444b-9f8a-05a8dd13e3dc,1,0,5c66c80c-cad1-47ac-b7bb-a20323fe271a,5c66c80c-cad1-47ac-b7bb-a20323fe271a,1,0,e39114e4-2d69-47ad-a888-2d0ccd9f62c5,e39114e4-2d69-47ad-a888-2d0ccd9f62c5,1,0,44169edb-23f3-4937-a277-7024182d7281,44169edb-23f3-4937-a277-7024182d7281,1,0,3942118c-09ec-40cf-8de8-4321367981f1,3942118c-09ec-40cf-8de8-4321367981f1,1,0,36ace6cf-6493-4325-89ff-3c07faae09b4,36ace6cf-6493-4325-89ff-3c07faae09b4,1,0,80cf9060-8f0c-4cb1-b476-6da83c725db7,80cf9060-8f0c-4cb1-b476-6da83c725db7,1,0,bd35d814-a9d2-4f0b-9f41-e7e9d6c53b7d,bd35d814-a9d2-4f0b-9f41-e7e9d6c53b7d,1,0,b5cd0ae6-2a12-44d6-8897-587f7e31159b,b5cd0ae6-2a12-44d6-8897-587f7e31159b,1,0,7fdb2c9d-8a8b-43c9-a228-db99fef599d5,7fdb2c9d-8a8b-43c9-a228-db99fef599d5,1,0,1de28303-2d0f-46e9-bbad-e40759fb0d3e,1de28303-2d0f-46e9-bbad-e40759fb0d3e,1,0,fd265d8a-1b99-4434-9bc5-6ef22a4437a2,fd265d8a-1b99-4434-9bc5-6ef22a4437a2,1,0,bf49b842-d162-4690-bec1-acf4207db565,bf49b842-d162-4690-bec1-acf4207db565,1,0,9a9ba19a-3a90-438e-9b5b-8a03bb2820da,9a9ba19a-3a90-438e-9b5b-8a03bb2820da,1,0,0d671808-63e8-4ad3-8d83-a69aa0049862,0d671808-63e8-4ad3-8d83-a69aa0049862,1,0,545857ca-2617-4b44-9e35-1b10837059ca,545857ca-2617-4b44-9e35-1b10837059ca,1,0,4c8a84a0-1d8b-4a00-bd3c-38c8d1deaffd,4c8a84a0-1d8b-4a00-bd3c-38c8d1deaffd,1,0,9acdec8d-e59e-47f1-b97c-a8050e590f81,9acdec8d-e59e-47f1-b97c-a8050e590f81,1,0,872c3f9c-a484-467b-b5fe-b008fee5152e,872c3f9c-a484-467b-b5fe-b008fee5152e,1,0,10c678a1-7a8b-4941-b625-ee2de92ee4d5,10c678a1-7a8b-4941-b625-ee2de92ee4d5,1,0,93873fe8-10c0-4f7b-ad20-278e887f69e9,93873fe8-10c0-4f7b-ad20-278e887f69e9,1,0,13b4aa30-d586-4b26-af0e-32f0d691fec9,13b4aa30-d586-4b26-af0e-32f0d691fec9,1,0,d6d67cc5-e003-4aaa-88ae-d084dae2dc26,d6d67cc5-e003-4aaa-88ae-d084dae2dc26,1,0,60f2c9f3-3090-442c-8991-0396b8f8b195,60f2c9f3-3090-442c-8991-0396b8f8b195,1,0,628dfa98-d8e1-4c27-bf15-928aa9dd24fd,628dfa98-d8e1-4c27-bf15-928aa9dd24fd,1,0,64eba6dc-31e1-4acc-9897-1108ba5a4415,64eba6dc-31e1-4acc-9897-1108ba5a4415,1,0,5eb4aac3-8a26-44f1-9e89-ffef42dbdb2d,5eb4aac3-8a26-44f1-9e89-ffef42dbdb2d,1,0,95d28431-cf31-4b32-976d-4e6a18e1b225,95d28431-cf31-4b32-976d-4e6a18e1b225,1,0,304b45ef-1530-4f20-98c0-081c554e0360,304b45ef-1530-4f20-98c0-081c554e0360,1,0,de84e787-12a1-4f47-bdd0-85d0aeaad98a,de84e787-12a1-4f47-bdd0-85d0aeaad98a,1,0,1490798d-5cd9-4448-be69-10773ab486ee,1490798d-5cd9-4448-be69-10773ab486ee,1,0,6fa88af0-dfcc-4dcf-ab61-0c7cb03a47f7,6fa88af0-dfcc-4dcf-ab61-0c7cb03a47f7,1,0,c59644a2-5ef5-43e8-a94f-682dddd562d4,c59644a2-5ef5-43e8-a94f-682dddd562d4,1,0,d2906b4a-ddcd-4512-910a-fc6f6c4fbc21,d2906b4a-ddcd-4512-910a-fc6f6c4fbc21,1,0,6cc3fe24-0a59-4eb6-ac6d-d1b56fabbad9,6cc3fe24-0a59-4eb6-ac6d-d1b56fabbad9,1,0,ce877e78-2e91-471e-831f-171fc5b72d54,ce877e78-2e91-471e-831f-171fc5b72d54,1,0,3b50cd97-4362-4cc5-ab2c-49506aea1508,3b50cd97-4362-4cc5-ab2c-49506aea1508,1,0,56c84cd4-33c2-4529-abf3-2a542a8cfa60,56c84cd4-33c2-4529-abf3-2a542a8cfa60,1,0,dc496b24-d0e5-46b7-9c03-c470e17afb38,dc496b24-d0e5-46b7-9c03-c470e17afb38,1,0,870cb1fb-6dea-4ae2-8952-64215ab2b695,870cb1fb-6dea-4ae2-8952-64215ab2b695,1,0,4fcb5267-e015-4da1-8871-23944f21a0c5,4fcb5267-e015-4da1-8871-23944f21a0c5,1,0,dc244cd9-aec7-431d-a346-032aeae17fd8,dc244cd9-aec7-431d-a346-032aeae17fd8,1,0,043e9792-b553-4785-99bb-006d79ef0a78,043e9792-b553-4785-99bb-006d79ef0a78,1,0,054ad80c-d2f6-4219-add1-ea2becedd04f,054ad80c-d2f6-4219-add1-ea2becedd04f,1,0,aa0a7164-37f4-4175-9fa8-1f90b4bb29e1,aa0a7164-37f4-4175-9fa8-1f90b4bb29e1,1,0,e774b5b1-b8bf-4b25-845a-745d1e009917,e774b5b1-b8bf-4b25-845a-745d1e009917,1,0,319899d0-2c05-4601-a888-2b92ee445be4,319899d0-2c05-4601-a888-2b92ee445be4,1,0,ddca48c8-3254-4683-93db-c4939a2d6e72,ddca48c8-3254-4683-93db-c4939a2d6e72,1,0,f8bd3b36-b0a2-46b0-9a8c-84ea1e72dda4,f8bd3b36-b0a2-46b0-9a8c-84ea1e72dda4,1,0,d46d2f66-f041-4012-b52a-fea74eed0ec6,d46d2f66-f041-4012-b52a-fea74eed0ec6,1,0,40aa4771-78be-485a-bfb3-108d9b3234da,40aa4771-78be-485a-bfb3-108d9b3234da,1,0,07f2081c-f723-4656-83c5-16b092bd00b8,07f2081c-f723-4656-83c5-16b092bd00b8,1,0,1d60586d-8548-416d-b862-e510121da339,1d60586d-8548-416d-b862-e510121da339,1,0,7e252088-1a99-4442-a136-e2b13afcde23,7e252088-1a99-4442-a136-e2b13afcde23,1,0,ca6f8fcf-2950-4468-abee-8e84ecb4aa33,ca6f8fcf-2950-4468-abee-8e84ecb4aa33,1,0,9668096a-74bf-41e2-a150-bfbea5216d10,9668096a-74bf-41e2-a150-bfbea5216d10,1,0,2aeb05ee-1aa7-4bd1-a5b1-7f8d6a6b23de,2aeb05ee-1aa7-4bd1-a5b1-7f8d6a6b23de,1,0,bc5216fe-94a4-4f55-ab91-462278c748c4,bc5216fe-94a4-4f55-ab91-462278c748c4,1,0,a8ac92ab-a476-4e79-8a3f-40e67d09a1bf,a8ac92ab-a476-4e79-8a3f-40e67d09a1bf,1,0,1621383d-36a8-4215-9f63-bdff10d2730a,1621383d-36a8-4215-9f63-bdff10d2730a,1,0,d9cc0bdf-ec8a-41e6-a04d-f87a277dc07e,d9cc0bdf-ec8a-41e6-a04d-f87a277dc07e,1,0,e7d74349-6636-485f-888d-57086beb7574,e7d74349-6636-485f-888d-57086beb7574,1,0,93210c19-7351-4415-9fe0-f646919594d9,93210c19-7351-4415-9fe0-f646919594d9,1,0,d77c2205-28a0-4069-b616-df456cd415a6,d77c2205-28a0-4069-b616-df456cd415a6,1,0,20cbe469-17f9-44da-8317-91feef8c5d46,20cbe469-17f9-44da-8317-91feef8c5d46,1,0,e4fc1eae-ecdc-42ac-b338-e695b663d642,e4fc1eae-ecdc-42ac-b338-e695b663d642,1,0,c1720905-2d51-4b90-9a3b-fdc001e8cea7,c1720905-2d51-4b90-9a3b-fdc001e8cea7,1,0,4becceed-362f-4412-90ee-769cc69742d7,4becceed-362f-4412-90ee-769cc69742d7,1,0,d6b23426-6972-4ff2-82bb-b2780dd732cb,d6b23426-6972-4ff2-82bb-b2780dd732cb,1,0,20992e23-f94b-459c-8af9-58a5986bacd0,20992e23-f94b-459c-8af9-58a5986bacd0,1,0,b1a939b9-cd2a-44c6-b1db-09356ab0303d,b1a939b9-cd2a-44c6-b1db-09356ab0303d,1,0,a7801847-a4c8-46ec-b873-c199191b9b2b,a7801847-a4c8-46ec-b873-c199191b9b2b,1,0,080a53d6-6c03-48f7-93bf-dec49afc14b7,080a53d6-6c03-48f7-93bf-dec49afc14b7,1,0,8ba908dc-6020-4b01-9a28-b3816b8cc118,8ba908dc-6020-4b01-9a28-b3816b8cc118,1,0,53d89038-48f5-4b64-9a1b-0a8d8dc788d2,53d89038-48f5-4b64-9a1b-0a8d8dc788d2,1,0,710202be-238f-42fe-9a6e-72726762a80c,710202be-238f-42fe-9a6e-72726762a80c,1,0,5299473d-0fb5-4795-a432-33ebf7051e49,5299473d-0fb5-4795-a432-33ebf7051e49,1,0,fbfaffab-a28c-49a4-bc14-e87317036f2f,fbfaffab-a28c-49a4-bc14-e87317036f2f,1,0,6e6c51d9-afba-4699-9eb8-f60163508072,6e6c51d9-afba-4699-9eb8-f60163508072,1,0,4c3afb2f-51be-4980-9ef9-d3fd3ce44ecb,4c3afb2f-51be-4980-9ef9-d3fd3ce44ecb,1,0,4ddabc05-424e-41fa-871f-dbba5b517795,4ddabc05-424e-41fa-871f-dbba5b517795,1,0,19b869c1-5eb4-43e3-99be-7e03385fa053,19b869c1-5eb4-43e3-99be-7e03385fa053,1,0,2421d94f-0bfd-47a1-b179-3a5d983e09c8,2421d94f-0bfd-47a1-b179-3a5d983e09c8,1,0,94c39b62-ddb2-4503-9fd1-206b54d899de,94c39b62-ddb2-4503-9fd1-206b54d899de,1,0,8b4fd3db-66d6-4290-9814-2c2492f733cb,8b4fd3db-66d6-4290-9814-2c2492f733cb,1,0,4969bc1b-217f-44a3-82cf-97c56f51a25e,4969bc1b-217f-44a3-82cf-97c56f51a25e,1,0,f6a8ff93-b1b5-499c-91a2-172000e5c776,f6a8ff93-b1b5-499c-91a2-172000e5c776,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,710059de-c70e-4b6e-b2a0-11197139144d,710059de-c70e-4b6e-b2a0-11197139144d,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,225a011b-337d-4c83-9771-95eebce18024,225a011b-337d-4c83-9771-95eebce18024,1,0,ffd14055-0847-48da-8807-0ba07decf6a5,ffd14055-0847-48da-8807-0ba07decf6a5,1,0,ee808b7e-8313-4838-8a5a-9b49e3ce7e3e,ee808b7e-8313-4838-8a5a-9b49e3ce7e3e,1,0,a8450a10-c18c-4b99-828b-870f38c32991,a8450a10-c18c-4b99-828b-870f38c32991,1,0,ad5e61a9-2f12-4629-9d7b-7882cc885992,ad5e61a9-2f12-4629-9d7b-7882cc885992,1,0,68a66e43-123c-4dc4-8eb7-3b728a6dbf40,68a66e43-123c-4dc4-8eb7-3b728a6dbf40,1,0,b016e858-7a3b-473a-a9b7-a6c718d0a028,b016e858-7a3b-473a-a9b7-a6c718d0a028,1,0,7db81d96-e359-4157-b5cb-3b50622d6556,7db81d96-e359-4157-b5cb-3b50622d6556,1,0,aa09ff66-3f4a-4746-9a99-697a2915b3fc,aa09ff66-3f4a-4746-9a99-697a2915b3fc,1,0,21305c37-31fb-46f3-85bc-8743c22faa02,21305c37-31fb-46f3-85bc-8743c22faa02,1,0,c5bace94-8fbc-4ad1-9567-a41332e8f00a,c5bace94-8fbc-4ad1-9567-a41332e8f00a,1,0,9fc40f79-c538-4ea5-a939-67bdd540d805,9fc40f79-c538-4ea5-a939-67bdd540d805,1,0,70443b2a-04db-4573-a4ea-e35078b383d7,70443b2a-04db-4573-a4ea-e35078b383d7,1,0,fb760c8a-d0bd-4445-9d68-85e5145d0182,fb760c8a-d0bd-4445-9d68-85e5145d0182,1,0,ecf54919-4cf2-4b30-9efa-de517d823555,ecf54919-4cf2-4b30-9efa-de517d823555,1,0,a4814357-6575-4a55-808f-4a4c94047110,a4814357-6575-4a55-808f-4a4c94047110,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,9eab48bf-3297-4f81-a448-a3a746d1ce83,9eab48bf-3297-4f81-a448-a3a746d1ce83,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,9a5b9bf4-71b8-41f2-8e23-8c396357f0a5,9a5b9bf4-71b8-41f2-8e23-8c396357f0a5,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,cfc0adf6-87b4-4c8a-91e2-46c2616b319b,cfc0adf6-87b4-4c8a-91e2-46c2616b319b,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,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,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,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,2e54b3e8-6672-48d5-802a-23d5144fed79,2e54b3e8-6672-48d5-802a-23d5144fed79,1,0,2a7c4ae2-aab3-48b3-b04f-7be6989939e8,2a7c4ae2-aab3-48b3-b04f-7be6989939e8,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,daad5f66-3bb4-4389-bca1-bf528ad993a3,daad5f66-3bb4-4389-bca1-bf528ad993a3,1,0,ad043f15-b2c9-4a05-82b9-6428708584b2,ad043f15-b2c9-4a05-82b9-6428708584b2,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,643f4f37-fa02-4976-8701-7a5a44b0109a,643f4f37-fa02-4976-8701-7a5a44b0109a,1,0,278a0559-07b2-4ee3-a821-c0395f9a33c1,278a0559-07b2-4ee3-a821-c0395f9a33c1,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,54d9f5bb-599c-4d4b-b616-1445e7461813,54d9f5bb-599c-4d4b-b616-1445e7461813,1,0,7d0dbd52-8bb0-4d72-87fa-2d7066e5e189,7d0dbd52-8bb0-4d72-87fa-2d7066e5e189,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,e0e12708-da10-4f81-9e56-5876ddc77084,e0e12708-da10-4f81-9e56-5876ddc77084,1,0,63ad43fe-a050-47f7-af4f-099aa10255af,63ad43fe-a050-47f7-af4f-099aa10255af,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,223e4ccf-5638-4576-bd88-7c54be68de47,223e4ccf-5638-4576-bd88-7c54be68de47,1,0,e3bae40b-5316-4392-8c82-b601922a6582,e3bae40b-5316-4392-8c82-b601922a6582,1,0,26806602-54be-4b2f-96ae-3e2a31616a4e,26806602-54be-4b2f-96ae-3e2a31616a4e,1,0,738fc48f-5160-4786-84bb-053c188662ce,738fc48f-5160-4786-84bb-053c188662ce,1,0,6e883b67-f74c-4791-8fb3-446534e3a6db,6e883b67-f74c-4791-8fb3-446534e3a6db,1,0,24fed307-445d-44b5-8964-9d08d1003061,24fed307-445d-44b5-8964-9d08d1003061,1,0,8e4c2dbe-15b7-4e04-9f07-892d70741a97,8e4c2dbe-15b7-4e04-9f07-892d70741a97,1,0,67691860-e374-451f-aee3-05a35df2a477,67691860-e374-451f-aee3-05a35df2a477,1,0,4337d956-809f-4140-a7bb-5f5c00a65ccb,4337d956-809f-4140-a7bb-5f5c00a65ccb,1,0,dbed7302-370e-4e0f-b505-3a86fe4c4ebd,dbed7302-370e-4e0f-b505-3a86fe4c4ebd,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,67e8b7dc-e0d7-44a9-81d0-6b31bb318145,67e8b7dc-e0d7-44a9-81d0-6b31bb318145,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,80641554-046e-4c4a-8544-a35b4c554dad,80641554-046e-4c4a-8544-a35b4c554dad,1,0,4d9df55f-724d-4792-96a7-885df898e7cc,4d9df55f-724d-4792-96a7-885df898e7cc,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,94819f9d-8a93-4a44-b1db-af0f095c7c1d,94819f9d-8a93-4a44-b1db-af0f095c7c1d,1,0,1eb8721d-bbeb-4cca-9e4f-e8386949c93c,1eb8721d-bbeb-4cca-9e4f-e8386949c93c,1,0,0012d153-685c-48ef-9623-8aeff3795aa6,0012d153-685c-48ef-9623-8aeff3795aa6,1,0,8483a18c-ec6f-455c-9568-2019025a25d2,8483a18c-ec6f-455c-9568-2019025a25d2,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,ab6d8fdd-7788-474d-9645-53008d7fa603,ab6d8fdd-7788-474d-9645-53008d7fa603,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,9f81693c-4ddd-47ec-b111-d073e1510752,9f81693c-4ddd-47ec-b111-d073e1510752,1,0,8a2811be-64c5-44ba-a52c-482c125eb092,8a2811be-64c5-44ba-a52c-482c125eb092,1,0,5245bee4-ebb7-45d1-b40a-2a06900e55b1,5245bee4-ebb7-45d1-b40a-2a06900e55b1,1,0,cc8cdc82-ee97-4426-b889-95d2286af37c,cc8cdc82-ee97-4426-b889-95d2286af37c,1,0,149104f3-a4c7-47e5-8057-b5bcc754a4f2,149104f3-a4c7-47e5-8057-b5bcc754a4f2,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,4b8fdb79-a9a0-4a53-9a95-82b8f64b1aa2,4b8fdb79-a9a0-4a53-9a95-82b8f64b1aa2,1,0,d5523a3a-2fb4-4f6c-a76c-08864db125d9,d5523a3a-2fb4-4f6c-a76c-08864db125d9,1,0,28f646f0-1ffc-495b-98d8-f9687172e22a,28f646f0-1ffc-495b-98d8-f9687172e22a,1,0,ecfc26a8-6353-4c78-b469-7ef5b548aa33,ecfc26a8-6353-4c78-b469-7ef5b548aa33,1,0,6ed475b1-7b4f-41d8-957b-18e82addd4d9,6ed475b1-7b4f-41d8-957b-18e82addd4d9,1,0,7be76d5d-7585-4766-8690-9d3c9fc56787,7be76d5d-7585-4766-8690-9d3c9fc56787,1,0,22a6d909-b793-4540-8f4e-605e0448bf2a,22a6d909-b793-4540-8f4e-605e0448bf2a,1,0,2e01082e-9b7b-47f5-900f-1c2e8dfb3f20,2e01082e-9b7b-47f5-900f-1c2e8dfb3f20,1,0,16547db4-7d90-451b-b0a0-33a59837d1f6,16547db4-7d90-451b-b0a0-33a59837d1f6,1,0,f008b0a5-266c-47ab-a15d-95e23bf7041b,f008b0a5-266c-47ab-a15d-95e23bf7041b,1,0,2918a7ba-1b7f-4f1b-8237-d4bc09bcc35a,2918a7ba-1b7f-4f1b-8237-d4bc09bcc35a,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,e1132cbb-7045-47e2-bbc7-6e92e4dff131,e1132cbb-7045-47e2-bbc7-6e92e4dff131,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,85d7ea13-c521-44b8-9dce-5e57529a21db,85d7ea13-c521-44b8-9dce-5e57529a21db,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,0c38782c-6559-4f1c-88af-aa022285ffbd,0c38782c-6559-4f1c-88af-aa022285ffbd,1,0,eed23203-924d-4092-a1a8-a7cdd72489e5,eed23203-924d-4092-a1a8-a7cdd72489e5,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,993d8672-af86-4179-a9ef-228303748bcd,993d8672-af86-4179-a9ef-228303748bcd,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,3fa9aa34-382c-49fa-87d8-34bedcde5836,3fa9aa34-382c-49fa-87d8-34bedcde5836,1,0,ae4825b1-dd4e-4d0e-8133-da6d1a441c36,ae4825b1-dd4e-4d0e-8133-da6d1a441c36,1,0,f7e6da22-c2b7-47c9-8062-e612a56ae61c,f7e6da22-c2b7-47c9-8062-e612a56ae61c,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,fb7011ca-4e05-45d8-9698-09406a4c033f,fb7011ca-4e05-45d8-9698-09406a4c033f,1,0,8b20dcaa-5ec3-4ce7-ac37-3ea6f2a2bfe9,8b20dcaa-5ec3-4ce7-ac37-3ea6f2a2bfe9,1,0,5b4ba51e-7757-4a01-aecd-a2c326dcfffe,5b4ba51e-7757-4a01-aecd-a2c326dcfffe,1,0,85565415-40b8-47e9-9c5d-3bb72824fdd3,85565415-40b8-47e9-9c5d-3bb72824fdd3,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,a805d33c-2cb0-4862-943f-06ded997b940,a805d33c-2cb0-4862-943f-06ded997b940,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,87ed7963-c2e4-4515-b768-47cf72442fd0,87ed7963-c2e4-4515-b768-47cf72442fd0,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,ec966ef2-b291-4937-a164-5c2b461871f8,ec966ef2-b291-4937-a164-5c2b461871f8,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,440ecfe8-72fd-447b-8680-c4a8c43f2c72,440ecfe8-72fd-447b-8680-c4a8c43f2c72,1,0,5afe3a0f-1bbc-4f04-87b3-f98d54b65a42,5afe3a0f-1bbc-4f04-87b3-f98d54b65a42,1,0,ee9e8f50-4d4f-43aa-99eb-cda2308c903e,ee9e8f50-4d4f-43aa-99eb-cda2308c903e,1,0,4ff043c1-6c0b-4889-a684-23da5a35b9c2,4ff043c1-6c0b-4889-a684-23da5a35b9c2,1,0,6fe56ecb-c969-4c03-8e6b-65395c29e817,6fe56ecb-c969-4c03-8e6b-65395c29e817,1,0,48627a8d-b108-43b8-a58e-fd98e4220639,48627a8d-b108-43b8-a58e-fd98e4220639,1,0,2a8eb62d-2795-48ab-ae02-68527996f411,2a8eb62d-2795-48ab-ae02-68527996f411,1,0,d3bf09be-0f21-4dc3-a525-1c4dc75928ea,d3bf09be-0f21-4dc3-a525-1c4dc75928ea,1,0,5ca880c5-7c34-4c31-a2b8-46265ddea7d4,5ca880c5-7c34-4c31-a2b8-46265ddea7d4,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,e9939b36-bceb-40e2-a182-1d5cc248f353,e9939b36-bceb-40e2-a182-1d5cc248f353,1,0,619d3ac6-40fe-485d-a407-fe065f16b186,619d3ac6-40fe-485d-a407-fe065f16b186,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,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,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,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,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,bf1ab189-634d-4b31-82e3-35fb15305da9,bf1ab189-634d-4b31-82e3-35fb15305da9,1,0,046d2201-5fe3-4451-9db0-6f784efadaf8,046d2201-5fe3-4451-9db0-6f784efadaf8,1,0,bb532d83-69d8-4733-9d18-21d34ee0330a,bb532d83-69d8-4733-9d18-21d34ee0330a,1,0,c2a8f4a7-882a-4262-ad9d-0f8ad9821488,c2a8f4a7-882a-4262-ad9d-0f8ad9821488,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,0f0ac56d-b068-46f2-8440-731683c2b42a,0f0ac56d-b068-46f2-8440-731683c2b42a,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,5c17a594-eb0b-4cdf-af35-0eaba968e065,5c17a594-eb0b-4cdf-af35-0eaba968e065,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,c1bcfc01-529c-4774-a79b-052eee157f2d,c1bcfc01-529c-4774-a79b-052eee157f2d,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,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,041c364f-0498-494f-9e41-82cb416c0862,041c364f-0498-494f-9e41-82cb416c0862,1,0,ec37d236-db36-44ef-afc2-267af1f40c1f,ec37d236-db36-44ef-afc2-267af1f40c1f,1,0,913830c8-da01-4b7e-9d83-d406c2fefd49,913830c8-da01-4b7e-9d83-d406c2fefd49,1,0,293cda8c-1cc8-42c0-a68f-d22163aed4f1,293cda8c-1cc8-42c0-a68f-d22163aed4f1,1,0,d835f08d-79c6-4e79-a7c1-f00dc05778b9,d835f08d-79c6-4e79-a7c1-f00dc05778b9,1,0,653dbf7d-a213-42c7-98da-9e639f41bb02,653dbf7d-a213-42c7-98da-9e639f41bb02,1,0,8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5,8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5,1,0,5adaafcf-3d67-418d-b47d-d0d8c65f1f46,5adaafcf-3d67-418d-b47d-d0d8c65f1f46,1,0,ee0275e4-a497-4623-9d2f-6308ea2e70ca,ee0275e4-a497-4623-9d2f-6308ea2e70ca,1,0,5e48841c-0a65-457f-8952-fa97aae3207d,5e48841c-0a65-457f-8952-fa97aae3207d,1,0,f68ec923-89c8-4c83-80a2-2d5e096dbbd8,f68ec923-89c8-4c83-80a2-2d5e096dbbd8,1,0,f278bdf8-543a-4427-b2f1-3670c61502ae,f278bdf8-543a-4427-b2f1-3670c61502ae,1,0,f0cebe1f-8b1a-482c-9224-63df4fd36524,f0cebe1f-8b1a-482c-9224-63df4fd36524,1,0,00ce0cd2-9840-49a0-b9df-dc64becd3e65,00ce0cd2-9840-49a0-b9df-dc64becd3e65,1,0,db6f11c0-8530-43c1-811a-48797be89ec1,db6f11c0-8530-43c1-811a-48797be89ec1,1,0,c2782a2b-f910-4d4d-ba1b-49ef7854bae0,c2782a2b-f910-4d4d-ba1b-49ef7854bae0,1,0,ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171,ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171,1,0,9f1c8979-2b3d-4a96-af6c-4577541696a3,9f1c8979-2b3d-4a96-af6c-4577541696a3,1,0,32371dfd-c890-4bed-bd68-45db299c9caf,32371dfd-c890-4bed-bd68-45db299c9caf,1,0,eeb298cf-8df3-41fe-bb48-9c83a24a8206,eeb298cf-8df3-41fe-bb48-9c83a24a8206,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,c6c26c3c-de7a-4ed4-944d-ada62cf1ab8f,c6c26c3c-de7a-4ed4-944d-ada62cf1ab8f,1,0,a54872fc-4e7e-4829-8564-1b2e7f0ee134,a54872fc-4e7e-4829-8564-1b2e7f0ee134,1,0,fe10d76e-3f80-4529-83a8-74c452a781f6,fe10d76e-3f80-4529-83a8-74c452a781f6,1,0,e3d1a7f5-ba86-414e-b2d2-89cc9db51667,e3d1a7f5-ba86-414e-b2d2-89cc9db51667,1,0,13333d66-ff04-49ec-973a-1229da8c9f50,13333d66-ff04-49ec-973a-1229da8c9f50,1,0,cb8ab5b6-876f-4aae-952f-2284bf0f539d,cb8ab5b6-876f-4aae-952f-2284bf0f539d,1,0,c9281eef-2e73-4b0f-ab72-7b4f6f10d787,c9281eef-2e73-4b0f-ab72-7b4f6f10d787,1,0,4a6fde33-6a58-4827-bdf9-b5e28e8cff6b,4a6fde33-6a58-4827-bdf9-b5e28e8cff6b,1,0,e2eadc5b-1b78-4ae4-8a55-a42402bb458b,e2eadc5b-1b78-4ae4-8a55-a42402bb458b,1,0,1e7effa9-3d8c-4d6c-bad2-98a3fd57ff33,1e7effa9-3d8c-4d6c-bad2-98a3fd57ff33,1,0,4c353b16-e6b6-4bd2-9d22-ce50a6281402,4c353b16-e6b6-4bd2-9d22-ce50a6281402,1,0,31f12f68-e5f7-4078-aca4-ebe32699fd6c,31f12f68-e5f7-4078-aca4-ebe32699fd6c,1,0,7e67f946-a80f-428e-a0eb-22c1a58b6fcf,7e67f946-a80f-428e-a0eb-22c1a58b6fcf,1,0,040cd37a-d272-4a87-b125-25d2cb8a2f9e,040cd37a-d272-4a87-b125-25d2cb8a2f9e,1,0,0f3e12fd-d60c-4323-8010-3f2951012d36,0f3e12fd-d60c-4323-8010-3f2951012d36,1,0,cf8c78d6-e1e0-4953-9928-b8d333e2c1ca,cf8c78d6-e1e0-4953-9928-b8d333e2c1ca,1,0,970421ca-4cb5-41f1-8e83-91ea4481ba9a,970421ca-4cb5-41f1-8e83-91ea4481ba9a,1,0,eb7aed6a-718d-4439-bea6-e7ede4987e3d,eb7aed6a-718d-4439-bea6-e7ede4987e3d,1,0,51ab4435-d8a2-4f54-b2ff-9465b0a4eef3,51ab4435-d8a2-4f54-b2ff-9465b0a4eef3,1,0,2f9d50bd-3e82-4321-81e6-2290b5a8a25e,2f9d50bd-3e82-4321-81e6-2290b5a8a25e,1,0,63a34a52-83e7-4644-8a70-9a845b5b18f2,63a34a52-83e7-4644-8a70-9a845b5b18f2,1,0,6f612a9e-c264-4856-98cf-e1a5b8ff7c97,6f612a9e-c264-4856-98cf-e1a5b8ff7c97,1,0,6d7b4670-9c33-41da-afca-bf1e01447623,6d7b4670-9c33-41da-afca-bf1e01447623,1,0,de31505e-3190-4b8c-81e9-8e2c2c7a1809,de31505e-3190-4b8c-81e9-8e2c2c7a1809,1,0,a07f12e8-f62c-4325-b0f4-df68b4b13e45,a07f12e8-f62c-4325-b0f4-df68b4b13e45,1,0,960dc389-b6bb-40ad-bcf7-a07b8c25d6f5,960dc389-b6bb-40ad-bcf7-a07b8c25d6f5,1,0,d8d61ffe-518a-4f06-ba47-238c0973a01a,d8d61ffe-518a-4f06-ba47-238c0973a01a,1,0,12b82221-3a4e-4d65-b1eb-001cc22725a7,12b82221-3a4e-4d65-b1eb-001cc22725a7,1,0,b301cd92-809f-4b0e-966b-8ab95e85ecb3,b301cd92-809f-4b0e-966b-8ab95e85ecb3,1,0,f0c12406-79a9-48e3-b470-b2148d3c9990,f0c12406-79a9-48e3-b470-b2148d3c9990,1,0,a587b305-efbf-43be-bf2e-95c4a33e9f3b,a587b305-efbf-43be-bf2e-95c4a33e9f3b,1,0,ba156cdc-ac78-4827-9598-f0bb7cc7569c,ba156cdc-ac78-4827-9598-f0bb7cc7569c,1,0,c7e646e7-c353-4549-ac4a-1b088be7f684,c7e646e7-c353-4549-ac4a-1b088be7f684,1,0,1db14384-34b2-422d-a7ee-fc930f48cfd1,1db14384-34b2-422d-a7ee-fc930f48cfd1,1,0,4b792d87-b16f-47b1-85a8-781365c2f135,4b792d87-b16f-47b1-85a8-781365c2f135,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,100ec1d0-3719-4feb-8a66-02f2c89fcd36,100ec1d0-3719-4feb-8a66-02f2c89fcd36,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,ecb7dd1b-46d6-46b5-a51f-699f068ad6a0,ecb7dd1b-46d6-46b5-a51f-699f068ad6a0,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,fd9177e4-1277-4f77-be3e-07e169fad918,fd9177e4-1277-4f77-be3e-07e169fad918,1,0,2177e3f0-0689-43ec-b79a-52d95f59a75a,2177e3f0-0689-43ec-b79a-52d95f59a75a,1,0,b7cfe3ee-1d3c-4c04-993a-014e9040e7ac,b7cfe3ee-1d3c-4c04-993a-014e9040e7ac,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,5ede72fd-2510-4c06-b625-be740bb04e29,5ede72fd-2510-4c06-b625-be740bb04e29,1,0,17f37228-b0cd-420d-bc82-b18dc04c03c9,17f37228-b0cd-420d-bc82-b18dc04c03c9,1,0,3f9b66ea-7db2-434d-8e3b-00df8eb11dbd,3f9b66ea-7db2-434d-8e3b-00df8eb11dbd,1,0,d43fb14b-2051-4ba5-8379-af6996e603b3,d43fb14b-2051-4ba5-8379-af6996e603b3,1,0,cfb01fef-b70d-41ac-82b9-d6d2e9644388,cfb01fef-b70d-41ac-82b9-d6d2e9644388,1,0,91dee0d3-14b5-4aa1-9058-8f949e7df923,91dee0d3-14b5-4aa1-9058-8f949e7df923,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,6e0fa31a-5081-4fc7-b5ec-563c6e4ad001,6e0fa31a-5081-4fc7-b5ec-563c6e4ad001,1,0,52606e9e-1f82-414c-897f-f3ca923fa480,52606e9e-1f82-414c-897f-f3ca923fa480,1,0,eefa26d9-bb15-4911-8772-99e49a20c57d,eefa26d9-bb15-4911-8772-99e49a20c57d,1,0,5068e74a-10e7-4035-97b0-14c91566defe,5068e74a-10e7-4035-97b0-14c91566defe,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,68deecfd-7564-487f-aaa5-e3cbe122475d,68deecfd-7564-487f-aaa5-e3cbe122475d,1,0,f280872c-7ab3-47fe-a171-2b0e273cf4e7,f280872c-7ab3-47fe-a171-2b0e273cf4e7,1,0,c6fda056-0949-4c8d-83bc-2091e0712674,c6fda056-0949-4c8d-83bc-2091e0712674,1,0,1dc9239f-197d-4497-a947-d03cca15b858,1dc9239f-197d-4497-a947-d03cca15b858,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,e402b02e-fb2b-4ccc-aa30-ef1a9cb7e17b,e402b02e-fb2b-4ccc-aa30-ef1a9cb7e17b,1,0,10d1e6bf-5ec8-44d8-ae31-0d22bccb5f60,10d1e6bf-5ec8-44d8-ae31-0d22bccb5f60,1,0,7fddef11-7b49-4911-8c66-8d2f94d3cbbd,7fddef11-7b49-4911-8c66-8d2f94d3cbbd,1,0,be438a36-2036-4f27-a9a3-37fb5ba5d6ab,be438a36-2036-4f27-a9a3-37fb5ba5d6ab,1,0,fabf9c9e-d35c-42e0-a949-6c54cb24990f,fabf9c9e-d35c-42e0-a949-6c54cb24990f,1,0,e47df890-3925-4410-ae48-63cb8e3d94f8,e47df890-3925-4410-ae48-63cb8e3d94f8,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,b369842d-c20e-4b68-9d0e-701707584b2f,b369842d-c20e-4b68-9d0e-701707584b2f,1,0,de23a2ca-4607-4488-be7b-23ea28875d02,de23a2ca-4607-4488-be7b-23ea28875d02,1,0,c0049c93-a264-44f6-8740-36a055a5b472,c0049c93-a264-44f6-8740-36a055a5b472,1,0,3c3bad38-ebd2-456d-86d9-b024c3afaedd,3c3bad38-ebd2-456d-86d9-b024c3afaedd,1,0,6b07201f-e728-4beb-a607-b05c68a645ca,6b07201f-e728-4beb-a607-b05c68a645ca,1,0,5c31cd2e-9247-4357-8c4b-3995470f00fc,5c31cd2e-9247-4357-8c4b-3995470f00fc,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,316553f3-bed7-4517-86ed-6520c1e536d9,316553f3-bed7-4517-86ed-6520c1e536d9,1,0,1255dbc8-29fc-4cd1-a2ed-a97c626dea5c,1255dbc8-29fc-4cd1-a2ed-a97c626dea5c,1,0,ee538127-bfa3-487a-9595-e69968595113,ee538127-bfa3-487a-9595-e69968595113,1,0,6b297ab7-7ff9-45a7-9075-ca3a1878cb2b,6b297ab7-7ff9-45a7-9075-ca3a1878cb2b,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,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,e79dd738-4e6c-411a-97a2-d0acbe4918ee,e79dd738-4e6c-411a-97a2-d0acbe4918ee,1,0,571a910a-67c7-4fe9-b06e-78893498a606,571a910a-67c7-4fe9-b06e-78893498a606,1,0,86f98256-87d1-4922-8d70-a5d2cad1c385,86f98256-87d1-4922-8d70-a5d2cad1c385,1,0,05faa67b-195a-4f46-8e47-30c4208cbc64,05faa67b-195a-4f46-8e47-30c4208cbc64,1,0,be75d0b2-c9db-4dab-9e32-dbe26d667508,be75d0b2-c9db-4dab-9e32-dbe26d667508,1,0,299c014f-996a-4a99-a5be-a7cfd5ee45e4,299c014f-996a-4a99-a5be-a7cfd5ee45e4,1,0,2569b69d-006f-478e-83b7-9163048b34bb,2569b69d-006f-478e-83b7-9163048b34bb,1,0,1ee47933-8117-4d47-9245-476c0ed3a373,1ee47933-8117-4d47-9245-476c0ed3a373,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,05507f2b-eed8-4da4-8efc-77d9d8e2daca,05507f2b-eed8-4da4-8efc-77d9d8e2daca,1,0,0440ed06-3f42-48a8-9431-fd608920b577,0440ed06-3f42-48a8-9431-fd608920b577,1,0,37be75c9-bf1a-437a-ab05-f9e3aac6f440,37be75c9-bf1a-437a-ab05-f9e3aac6f440,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,24b4dd9e-825f-471b-b15d-ae21a508d183,24b4dd9e-825f-471b-b15d-ae21a508d183,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,929e9199-dfd5-497d-ad77-6638d20c7336,929e9199-dfd5-497d-ad77-6638d20c7336,1,0,4d1546ee-30ff-4cf7-afd3-60b565e3cb53,4d1546ee-30ff-4cf7-afd3-60b565e3cb53,1,0,aaf51715-f468-4856-b9ae-fd66bc143633,aaf51715-f468-4856-b9ae-fd66bc143633,1,0,e9650eea-d35a-4abc-977c-fb9b2abba0e5,e9650eea-d35a-4abc-977c-fb9b2abba0e5,1,0,b00626a3-5438-40c4-8ca9-5609e9dfe476,b00626a3-5438-40c4-8ca9-5609e9dfe476,1,0,b537f309-f957-4804-9f0f-03a71aedf694,b537f309-f957-4804-9f0f-03a71aedf694,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,9b26aa5f-1e77-4261-adf6-6f2f24f5af33,9b26aa5f-1e77-4261-adf6-6f2f24f5af33,1,0,b6b5e6c1-3967-4c2f-b8bc-0acc96afe240,b6b5e6c1-3967-4c2f-b8bc-0acc96afe240,1,0,de355360-f87a-4b0d-a37c-d0a091e7e984,de355360-f87a-4b0d-a37c-d0a091e7e984,1,0,8819399f-4803-413c-ad5e-7fa2c8878e5f,8819399f-4803-413c-ad5e-7fa2c8878e5f,1,0,99ff834a-f030-4af3-9b7d-f92a03f7c6f4,99ff834a-f030-4af3-9b7d-f92a03f7c6f4,1,0,afea5f32-22ff-4940-8156-3ec8b9c7bbb9,afea5f32-22ff-4940-8156-3ec8b9c7bbb9,1,0,fa01c28c-44d1-4fa9-b167-73d6cecb7730,fa01c28c-44d1-4fa9-b167-73d6cecb7730,1,0,d82c675e-7d38-417c-9cfc-6af0e86addfd,d82c675e-7d38-417c-9cfc-6af0e86addfd,1,0,319c4428-9463-4aa4-a87a-2749c49f4069,319c4428-9463-4aa4-a87a-2749c49f4069,1,0,497deeb7-0630-4f72-bcdb-ebacf8963d79,497deeb7-0630-4f72-bcdb-ebacf8963d79,1,0,ef471953-7c99-40f9-a31d-f50ed8ba3fc5,ef471953-7c99-40f9-a31d-f50ed8ba3fc5,1,0,1e70a177-cacc-4416-aef0-2a8df235ae77,1e70a177-cacc-4416-aef0-2a8df235ae77,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,e0c54cdd-32ab-4c83-a0cd-454139416a58,e0c54cdd-32ab-4c83-a0cd-454139416a58,1,0,85488f67-4b7b-4803-bd21-664a4409cee6,85488f67-4b7b-4803-bd21-664a4409cee6,1,0,79d80ade-cdc1-4445-8bfd-f27dd3627083,79d80ade-cdc1-4445-8bfd-f27dd3627083,1,0,2b56997c-c791-4afe-942c-526421242b97,2b56997c-c791-4afe-942c-526421242b97,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,43b8af02-21f6-41c0-8e6d-758411f5188e,43b8af02-21f6-41c0-8e6d-758411f5188e,1,0,9952a9cc-6d02-4d84-9bca-76c67c6af29a,9952a9cc-6d02-4d84-9bca-76c67c6af29a,1,0,3bd83ceb-9f87-49e2-9e3e-1c43efeaba9b,3bd83ceb-9f87-49e2-9e3e-1c43efeaba9b,1,0,35c9e0e3-e454-4b5e-a39d-8a5f396ab841,35c9e0e3-e454-4b5e-a39d-8a5f396ab841,1,0,da031ebd-4aba-40e6-acb9-245cf73c4423,da031ebd-4aba-40e6-acb9-245cf73c4423,1,0,59d47246-e522-4baa-96b3-d7e93279e3ec,59d47246-e522-4baa-96b3-d7e93279e3ec,1,0,c222b2c0-5e92-4022-b2f7-49967b5a9de3,c222b2c0-5e92-4022-b2f7-49967b5a9de3,1,0,e9bf314a-a4d1-4fb8-a84c-84ac7df6c456,e9bf314a-a4d1-4fb8-a84c-84ac7df6c456,1,0,47432cc4-7373-4234-b812-49f7e279a6f0,47432cc4-7373-4234-b812-49f7e279a6f0,1,0,2dec3aa6-f4e3-4574-91e7-1270d3c4f184,2dec3aa6-f4e3-4574-91e7-1270d3c4f184,1,0,ce1523eb-89b3-45ec-903a-9e5fa397e44e,ce1523eb-89b3-45ec-903a-9e5fa397e44e,1,0,3984249d-d8f7-4cee-939e-88fda2f9cfa4,3984249d-d8f7-4cee-939e-88fda2f9cfa4,1,0,a0548550-f136-4c70-8ef7-f3fd8d74f8f7,a0548550-f136-4c70-8ef7-f3fd8d74f8f7,1,0,9d793866-7b33-45a3-a7bf-02dc6e810a78,9d793866-7b33-45a3-a7bf-02dc6e810a78,1,0,7bdd965e-1f6b-45d6-be1c-3ccf0d72db35,7bdd965e-1f6b-45d6-be1c-3ccf0d72db35,1,0,7bc35350-6452-44b0-ba62-ad5446e1e507,7bc35350-6452-44b0-ba62-ad5446e1e507,1,0,ce40340d-f5c9-404c-9d68-8bf5a27d3fd4,ce40340d-f5c9-404c-9d68-8bf5a27d3fd4,1,0,36e39b8e-68ae-4a6e-9c64-39d4298fe6cf,36e39b8e-68ae-4a6e-9c64-39d4298fe6cf,1,0,d687f818-f5cf-46ef-9079-58424d5f0855,d687f818-f5cf-46ef-9079-58424d5f0855,1,0,afd574d1-81af-45c3-aea6-b1e0d2c19863,afd574d1-81af-45c3-aea6-b1e0d2c19863,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,1422999b-9977-4bed-9990-b46bd0ec7471,1422999b-9977-4bed-9990-b46bd0ec7471,1,0,4c48db2f-2b79-4c6f-b8ee-002810c6190c,4c48db2f-2b79-4c6f-b8ee-002810c6190c,1,0,d0d90cbf-21fc-47cb-8e1c-549e67a1bf0c,d0d90cbf-21fc-47cb-8e1c-549e67a1bf0c,1,0,cf48ae02-ecb0-4db9-92da-585f89cddb70,cf48ae02-ecb0-4db9-92da-585f89cddb70,1,0,5650c5c7-3f43-4ec9-8b64-003c5467d06a,5650c5c7-3f43-4ec9-8b64-003c5467d06a,1,0,5bac3798-1193-4d74-bbdd-40aba11d742c,5bac3798-1193-4d74-bbdd-40aba11d742c,1,0,514f3514-ba90-493e-b0dd-2d02c6ba4d1d,514f3514-ba90-493e-b0dd-2d02c6ba4d1d,1,0,032de836-80a8-46ce-9e40-b3b6ac5f9e1e,032de836-80a8-46ce-9e40-b3b6ac5f9e1e,1,0,962c2c55-6a16-46f6-9ce0-67d1984b530e,962c2c55-6a16-46f6-9ce0-67d1984b530e,1,0,27e906c2-ea0e-489e-b869-547c48c29518,27e906c2-ea0e-489e-b869-547c48c29518,1,0,553ebd03-267b-4ced-805e-be7eca6db18f,553ebd03-267b-4ced-805e-be7eca6db18f,1,0,8bf95fa7-1067-45b3-82ea-286192f97e06,8bf95fa7-1067-45b3-82ea-286192f97e06,1,0,73996d67-4d70-4ce5-a58a-d70f44484f1e,73996d67-4d70-4ce5-a58a-d70f44484f1e,1,0,5e86a443-bd0f-411d-b1b9-41bfa0cf1a2f,5e86a443-bd0f-411d-b1b9-41bfa0cf1a2f,1,0,fcaecd43-b938-4680-93be-963db5218f35,fcaecd43-b938-4680-93be-963db5218f35,1,0,63415525-46a2-4d70-bdab-665945a9185c,63415525-46a2-4d70-bdab-665945a9185c,1,0,27e37fde-daf0-47fa-865c-3cd86151f5be,27e37fde-daf0-47fa-865c-3cd86151f5be,1,0,b3b63074-984a-48d2-ba5b-d69dd0b8067e,b3b63074-984a-48d2-ba5b-d69dd0b8067e,1,0,fc4a9f03-c81f-4201-814c-c6d5a5029168,fc4a9f03-c81f-4201-814c-c6d5a5029168,1,0,abba612c-137a-4dff-89f3-445945c30859,abba612c-137a-4dff-89f3-445945c30859,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,9b0e9fec-8261-4e20-9556-754a46d11c12,9b0e9fec-8261-4e20-9556-754a46d11c12,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,764bf84f-3aa5-4023-a15a-b546f8837141,764bf84f-3aa5-4023-a15a-b546f8837141,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,dc72eb52-527f-438d-8750-c9f8f885d4ca,dc72eb52-527f-438d-8750-c9f8f885d4ca,1,0,0fd93c83-0c22-4ac0-b0a2-f9f9fe35a478,0fd93c83-0c22-4ac0-b0a2-f9f9fe35a478,1,0,45b9ede4-3776-4d26-974b-0ce724f62af6,45b9ede4-3776-4d26-974b-0ce724f62af6,1,0,a75aa04b-a04e-4c21-8a4c-c8cfefcd7c52,a75aa04b-a04e-4c21-8a4c-c8cfefcd7c52,1,0,d35a861d-bc36-4811-97c9-4a9bc58a89f4,d35a861d-bc36-4811-97c9-4a9bc58a89f4,1,0,3b02a8f9-572a-44d4-b8ee-6e1a7459e235,3b02a8f9-572a-44d4-b8ee-6e1a7459e235,1,0,609c7552-ad78-489c-93e2-51b672e82082,609c7552-ad78-489c-93e2-51b672e82082,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,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,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,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,c2f246fa-81a3-436c-9f7d-4c8eb7103bf1,c2f246fa-81a3-436c-9f7d-4c8eb7103bf1,1,0,c3e9225a-7fab-499f-baca-eca56914f1ea,c3e9225a-7fab-499f-baca-eca56914f1ea,1,0,5072ce03-c5b6-4e2b-8a29-d3a8e0b907d2,5072ce03-c5b6-4e2b-8a29-d3a8e0b907d2,1,0,b0e9e59d-9636-492c-91d0-71d43b6d6694,b0e9e59d-9636-492c-91d0-71d43b6d6694,1,0,d5fa6b14-d0a4-4d97-ae24-70fed456f07f,d5fa6b14-d0a4-4d97-ae24-70fed456f07f,1,0,54957cc3-685b-4d6d-a0e8-14d51f54224e,54957cc3-685b-4d6d-a0e8-14d51f54224e,1,0,f725ada3-78ef-4e6d-9466-b7047cf695e0,f725ada3-78ef-4e6d-9466-b7047cf695e0,1,0,4f741112-f127-479e-939b-a2c6e36bb57f,4f741112-f127-479e-939b-a2c6e36bb57f,1,0,e169580b-be49-4e39-9cc8-f9942b2d5b8a,e169580b-be49-4e39-9cc8-f9942b2d5b8a,1,0,cacbaa6b-ba3f-43af-9c7b-12fd9f124184,cacbaa6b-ba3f-43af-9c7b-12fd9f124184,1,0,b2de5117-88eb-47ed-bcd4-7001c4549658,b2de5117-88eb-47ed-bcd4-7001c4549658,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,bf40c9ed-b7db-4200-9646-c4e751fc2014,bf40c9ed-b7db-4200-9646-c4e751fc2014,1,0,2bf9c338-d31e-467e-8281-d1d6a3a6b2e2,2bf9c338-d31e-467e-8281-d1d6a3a6b2e2,1,0,3c2c192e-4869-4cc6-ba47-1fadac5b9678,3c2c192e-4869-4cc6-ba47-1fadac5b9678,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,d51ce1df-6172-4682-9986-131e7daba89e,d51ce1df-6172-4682-9986-131e7daba89e,1,0,6a8b224c-6ce6-4ede-bd36-eb16baebd008,6a8b224c-6ce6-4ede-bd36-eb16baebd008,1,0,1666a55d-9e90-419f-9a57-cb05c6b20bf7,1666a55d-9e90-419f-9a57-cb05c6b20bf7,1,0,b2752418-7166-48b6-a95d-2c9d488b9c7b,b2752418-7166-48b6-a95d-2c9d488b9c7b,1,0,f4147cac-f195-4308-9ccf-07e640196716,f4147cac-f195-4308-9ccf-07e640196716,1,0,2204ae4b-c41f-4125-998e-0fae12d2e9e3,2204ae4b-c41f-4125-998e-0fae12d2e9e3,1,0,52846ee8-d0ca-4c65-8f62-a3f6bea93a8b,52846ee8-d0ca-4c65-8f62-a3f6bea93a8b,1,0,aa3b0ce8-651b-4685-8744-19db537d94c4,aa3b0ce8-651b-4685-8744-19db537d94c4,1,0,0b8998f0-0f59-4223-8b54-ea360aa9513d,0b8998f0-0f59-4223-8b54-ea360aa9513d,1,0,1102079f-d424-4ebb-8496-d48f596c5c62,1102079f-d424-4ebb-8496-d48f596c5c62,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,e99606f3-cf75-44b2-ad50-c88a8c3d189c,e99606f3-cf75-44b2-ad50-c88a8c3d189c,1,0,b4fa35f9-cb7e-46a8-b32b-801d212c8fcf,b4fa35f9-cb7e-46a8-b32b-801d212c8fcf,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,99c00352-cafe-4430-8c8d-2850a13bb6cc,99c00352-cafe-4430-8c8d-2850a13bb6cc,1,0,22fc6da4-3891-4f35-9dfe-c6d359c7e09e,22fc6da4-3891-4f35-9dfe-c6d359c7e09e,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,70a3df8f-c12a-4185-81c4-39a5114ef7a9,70a3df8f-c12a-4185-81c4-39a5114ef7a9,1,0,bd362ff9-3dec-4a4b-9595-8609de76e842,bd362ff9-3dec-4a4b-9595-8609de76e842,1,0,76cc9ae1-7ac2-4b99-8def-f21dc55ad07d,76cc9ae1-7ac2-4b99-8def-f21dc55ad07d,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,54766e6b-cf49-4c58-b5e5-dcb6362ac5e2,54766e6b-cf49-4c58-b5e5-dcb6362ac5e2,1,0,f2210cf1-f9f5-41ed-8b4d-937778da842b,f2210cf1-f9f5-41ed-8b4d-937778da842b,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,d4b49ed0-3d3f-4b68-bc1e-949e8e338e9a,d4b49ed0-3d3f-4b68-bc1e-949e8e338e9a,1,0,542a53f5-56c5-4ca9-90d1-d689532c69fd,542a53f5-56c5-4ca9-90d1-d689532c69fd,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,a3720a0f-cf95-4acb-89dc-c4e6e38f72ca,a3720a0f-cf95-4acb-89dc-c4e6e38f72ca,1,0,fb26953e-1aa3-4f69-8b9b-ad99e3431e12,fb26953e-1aa3-4f69-8b9b-ad99e3431e12,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,ecc0ac05-9813-482d-bc39-0be1490d3f8b,ecc0ac05-9813-482d-bc39-0be1490d3f8b,1,0,866f53c8-4f1e-484a-a809-6130f7eef872,866f53c8-4f1e-484a-a809-6130f7eef872,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,ce87e3e8-2d05-415b-bd27-c366ca871097,ce87e3e8-2d05-415b-bd27-c366ca871097,1,0,b4233d51-daa9-47ff-8b51-f65c31fc8037,b4233d51-daa9-47ff-8b51-f65c31fc8037,1,0,99410b31-9fbe-42bf-875c-9d0425e1b7b2,99410b31-9fbe-42bf-875c-9d0425e1b7b2,1,0,bc79b15c-5bde-4587-a1ed-b5c4909eec5d,bc79b15c-5bde-4587-a1ed-b5c4909eec5d,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,ca47123d-90f5-4d1d-be06-34b505b01d81,ca47123d-90f5-4d1d-be06-34b505b01d81,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,5921c2e6-4b25-40d4-b871-9654c2ce89bb,5921c2e6-4b25-40d4-b871-9654c2ce89bb,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,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,88f34f9f-121b-43e2-9280-ec2b414681ad,88f34f9f-121b-43e2-9280-ec2b414681ad,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,0384ec55-dc18-40ae-ae83-7defc28d8f3f,0384ec55-dc18-40ae-ae83-7defc28d8f3f,1,0,54e57825-c6f3-44c3-9457-bc24317e23c2,54e57825-c6f3-44c3-9457-bc24317e23c2,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,1aa6b483-0f87-4ed3-94ea-8b81813532d6,1aa6b483-0f87-4ed3-94ea-8b81813532d6,1,0,0f79d87e-3311-4281-8f46-6154e708b930,0f79d87e-3311-4281-8f46-6154e708b930,1,0,af062541-4dec-4856-9be9-dec804fbae0b,af062541-4dec-4856-9be9-dec804fbae0b,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,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,748f7ddb-4cdc-46e5-9108-f7a550b33537,748f7ddb-4cdc-46e5-9108-f7a550b33537,1,0,0534460b-0548-45f0-ac79-aa4bc109655c,0534460b-0548-45f0-ac79-aa4bc109655c,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,436a9c94-55f6-4463-becd-573189753ee7,436a9c94-55f6-4463-becd-573189753ee7,1,0,50bf4050-390c-419c-8f55-82a540093ab1,50bf4050-390c-419c-8f55-82a540093ab1,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,4e1b48b1-c998-4f99-94e7-50af22059bfa,4e1b48b1-c998-4f99-94e7-50af22059bfa,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,ccfdf89b-f63e-4e46-b942-0d145695fdc6,ccfdf89b-f63e-4e46-b942-0d145695fdc6,1,0,6d40a555-9c20-4643-b689-2f61df772f78,6d40a555-9c20-4643-b689-2f61df772f78,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,4ae40e81-f2ab-4ac4-89e5-73545db42de9,4ae40e81-f2ab-4ac4-89e5-73545db42de9,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,8850b346-364d-457b-9554-acce031394fe,8850b346-364d-457b-9554-acce031394fe,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,c8a0da4e-0b0f-4def-a61e-5f6e04468e01,c8a0da4e-0b0f-4def-a61e-5f6e04468e01,1,0,a55e9aef-79ad-4cb6-b80a-c7f769bebbea,a55e9aef-79ad-4cb6-b80a-c7f769bebbea,1,0,c26283d2-dda1-438c-a444-05bdd2797691,c26283d2-dda1-438c-a444-05bdd2797691,1,0,3ae1ecf1-e062-4e89-96d6-9ac88bbc8aa8,3ae1ecf1-e062-4e89-96d6-9ac88bbc8aa8,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,bc3183cb-8691-4fa5-b154-3645f3cd8944,bc3183cb-8691-4fa5-b154-3645f3cd8944,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,018390b5-06d9-4d04-abad-1de1ccf0843c,018390b5-06d9-4d04-abad-1de1ccf0843c,1,0,a8b828da-6172-4732-a01e-c5127175cd60,a8b828da-6172-4732-a01e-c5127175cd60,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,9ac5a405-4eb7-4013-8bbd-5d1b6d0929ab,9ac5a405-4eb7-4013-8bbd-5d1b6d0929ab,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,75daf728-ee8c-41a4-a249-8db123bb802e,75daf728-ee8c-41a4-a249-8db123bb802e,1,0,0b154103-47b5-4c54-a4ea-60aa41190940,0b154103-47b5-4c54-a4ea-60aa41190940,1,0,1eb52621-8915-46f4-b1bb-db04bb58b065,1eb52621-8915-46f4-b1bb-db04bb58b065,1,0,d0fcb0f9-6d6c-444a-8b32-4287a963f72b,d0fcb0f9-6d6c-444a-8b32-4287a963f72b,1,0,1d583292-1820-498a-890a-66f5b154e698,1d583292-1820-498a-890a-66f5b154e698,1,0,a3b0430c-743d-4351-a928-9be3c8db9a0b,a3b0430c-743d-4351-a928-9be3c8db9a0b,1,0,f094241b-ae82-426c-92b0-18be87566ad6,f094241b-ae82-426c-92b0-18be87566ad6,1,0,1a570b62-6644-4427-a432-c6823c7d522a,1a570b62-6644-4427-a432-c6823c7d522a,1,0,7bae5ebc-85a5-43eb-8dfa-bc75cd54c013,7bae5ebc-85a5-43eb-8dfa-bc75cd54c013,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,4fbb189a-ecf0-483f-a904-0c34b1c23433,4fbb189a-ecf0-483f-a904-0c34b1c23433,1,0,2a34c9e8-eb4f-4600-988e-594ac7399abc,2a34c9e8-eb4f-4600-988e-594ac7399abc,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,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,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,e33c736b-f1a3-4cb4-b78b-65fd2d44b10f,e33c736b-f1a3-4cb4-b78b-65fd2d44b10f,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,24ce9257-6dcf-4ba6-839e-1e635c069e75,24ce9257-6dcf-4ba6-839e-1e635c069e75,1,0,ecb2048d-4c1d-4194-a728-604734683b3b,ecb2048d-4c1d-4194-a728-604734683b3b,1,0,b33e046c-b580-4c90-940d-71f38d9ceff2,b33e046c-b580-4c90-940d-71f38d9ceff2,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,984ed6c0-e25b-46ff-9b3c-6bc0370071da,984ed6c0-e25b-46ff-9b3c-6bc0370071da,1,0,35fe84b6-7d3c-4729-a75c-a5f3ef122124,35fe84b6-7d3c-4729-a75c-a5f3ef122124,1,0,f7d5815e-511e-48c2-bc31-f9987423439b,f7d5815e-511e-48c2-bc31-f9987423439b,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,8b0fb329-098b-46db-8766-bc034d6f20a8,8b0fb329-098b-46db-8766-bc034d6f20a8,1,0,c630e43c-98a6-4059-9b14-25d267410ba6,c630e43c-98a6-4059-9b14-25d267410ba6,1,0,d01089f3-427f-4624-955d-1a5a96098141,d01089f3-427f-4624-955d-1a5a96098141,1,0,6520d7f5-7326-4921-b8c1-6e6fbc56089c,6520d7f5-7326-4921-b8c1-6e6fbc56089c,1,0,766f2abe-1dfd-4e16-bffd-83f44d25d82a,766f2abe-1dfd-4e16-bffd-83f44d25d82a,1,0,0e7a34a8-ce5a-4767-8283-fd094e13d969,0e7a34a8-ce5a-4767-8283-fd094e13d969,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,c0f5bbe1-3247-4bbe-a28e-8c55748e7d42,c0f5bbe1-3247-4bbe-a28e-8c55748e7d42,1,0,7347d709-bb61-4354-aa79-86ed8025d6d4,7347d709-bb61-4354-aa79-86ed8025d6d4,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,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,886df9ab-09b4-4c7a-bd44-6afeab68d831,886df9ab-09b4-4c7a-bd44-6afeab68d831,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,bb4009c1-7c48-4a5c-a4af-3b27de48ed3e,bb4009c1-7c48-4a5c-a4af-3b27de48ed3e,1,0,0a7e5d85-3f94-4d93-8478-6d34f3b3ea33,0a7e5d85-3f94-4d93-8478-6d34f3b3ea33,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,52f065fe-556a-47cd-82b1-c56d7894df30,52f065fe-556a-47cd-82b1-c56d7894df30,1,0,186efec4-1343-4234-a9b6-c8d8096faf76,186efec4-1343-4234-a9b6-c8d8096faf76,1,0,6b15631a-0c98-4771-ba87-9d6f5795df63,6b15631a-0c98-4771-ba87-9d6f5795df63,1,0,ed72e5ef-a8b9-404b-a8b4-cb587c7f3018,ed72e5ef-a8b9-404b-a8b4-cb587c7f3018,1,0,51d30e7e-54b4-40be-a5bc-46fec691a425,51d30e7e-54b4-40be-a5bc-46fec691a425,1,0,bdff2b56-efbc-44ce-8141-7df2b095de37,bdff2b56-efbc-44ce-8141-7df2b095de37,1,0,be158212-2b71-43b1-8dda-f34ea30f16e7,be158212-2b71-43b1-8dda-f34ea30f16e7,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,55412118-700a-4a2d-b7c9-d3b7c0f4bd9a,55412118-700a-4a2d-b7c9-d3b7c0f4bd9a,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,c99c7271-cb3c-4fd2-8789-8637cf984514,c99c7271-cb3c-4fd2-8789-8637cf984514,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,9c57c3d0-aaa1-4c87-a81c-36ac4dd48eaa,9c57c3d0-aaa1-4c87-a81c-36ac4dd48eaa,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,a5663ce2-587d-4255-b30e-6979c909cc05,a5663ce2-587d-4255-b30e-6979c909cc05,1,0,942b3e77-2a66-4879-972d-b5d25a706f9a,942b3e77-2a66-4879-972d-b5d25a706f9a,1,0,49f67edf-49e7-4198-9f9a-7bddf0a89248,49f67edf-49e7-4198-9f9a-7bddf0a89248,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,4f06c867-6fec-4a4d-a360-6d8e98e4e7a4,4f06c867-6fec-4a4d-a360-6d8e98e4e7a4,1,0,34ee9617-9935-425f-9637-bdffd5a64042,34ee9617-9935-425f-9637-bdffd5a64042,1,0,3e6160f4-eed6-4dd6-a8fb-96c1a90d39be,3e6160f4-eed6-4dd6-a8fb-96c1a90d39be,1,0,778cd9f9-7afd-4eb7-bd4e-90ff7d9cf4f0,778cd9f9-7afd-4eb7-bd4e-90ff7d9cf4f0,1,0,fb8f3edd-bf12-4312-8ffe-7bbd627fa52b,fb8f3edd-bf12-4312-8ffe-7bbd627fa52b,1,0,6ddad5e2-b2c3-47bc-b339-54ccd7391e33,6ddad5e2-b2c3-47bc-b339-54ccd7391e33,1,0,761ca1c1-c843-47a1-bacc-2f9d1d68634d,761ca1c1-c843-47a1-bacc-2f9d1d68634d,1,0,af4a815b-d9d4-4fe6-9b2b-3932381e7346,af4a815b-d9d4-4fe6-9b2b-3932381e7346,1,0,9dbca72a-fb38-4d86-a3ff-83f7edc0fdb4,9dbca72a-fb38-4d86-a3ff-83f7edc0fdb4,1,0,fab77796-a103-40a6-95bd-238979fc345d,fab77796-a103-40a6-95bd-238979fc345d,1,0,6fad175b-eaf0-4e45-aaa1-c1ebc98e0ed0,6fad175b-eaf0-4e45-aaa1-c1ebc98e0ed0,1,0,0ef5e38c-6f7c-46e7-9c14-4fde6814f93f,0ef5e38c-6f7c-46e7-9c14-4fde6814f93f,1,0,f306dafa-350e-4ff9-bfe2-211be647afe8,f306dafa-350e-4ff9-bfe2-211be647afe8,1,0,6d447b01-21ae-4cc1-9262-4ec4ed5e04f5,6d447b01-21ae-4cc1-9262-4ec4ed5e04f5,1,0,dcd64d40-e57f-4cb5-9ccd-67b27ac546d4,dcd64d40-e57f-4cb5-9ccd-67b27ac546d4,1,0,8d0ad48c-6e27-44c2-87f6-62eef78b6427,8d0ad48c-6e27-44c2-87f6-62eef78b6427,1,0,e4fb3b42-60f6-4413-bba8-6e507b13d5d3,e4fb3b42-60f6-4413-bba8-6e507b13d5d3,1,0,a5e3b305-392c-40a2-9b66-7fdc72c041a3,a5e3b305-392c-40a2-9b66-7fdc72c041a3,1,0,266d41c0-92a1-4d42-bf5b-60a1bddb8912,266d41c0-92a1-4d42-bf5b-60a1bddb8912,1,0,1aad9f99-422a-40e8-83da-6e29b8a4e85a,1aad9f99-422a-40e8-83da-6e29b8a4e85a,1,0,d9010dc7-b0de-4079-944d-fbec7ba5997f,d9010dc7-b0de-4079-944d-fbec7ba5997f,1,0,5defd7f7-cc7d-4e7b-83e3-755f8a2514ea,5defd7f7-cc7d-4e7b-83e3-755f8a2514ea,1,0,744ca01b-41b6-4c30-a280-85e44ad456ba,744ca01b-41b6-4c30-a280-85e44ad456ba,1,0,779856af-2c4a-4643-9bea-a04aa24ee488,779856af-2c4a-4643-9bea-a04aa24ee488,1,0,5c6f12f3-7cb6-4b10-9859-7b72bae3fc76,5c6f12f3-7cb6-4b10-9859-7b72bae3fc76,1,0,d00313c8-ee4a-4463-8d5b-7e87e4e14986,d00313c8-ee4a-4463-8d5b-7e87e4e14986,1,0,6db400f2-873a-44a2-9274-2cd7883bfd87,6db400f2-873a-44a2-9274-2cd7883bfd87,1,0,3b925fd2-adb8-451a-8675-7b081fc7c570,3b925fd2-adb8-451a-8675-7b081fc7c570,1,0,70e9e13d-8f87-4a5b-9c80-49d2cff1a290,70e9e13d-8f87-4a5b-9c80-49d2cff1a290,1,0,04b7e8b2-6bc1-49dc-9476-7eadf94b9188,04b7e8b2-6bc1-49dc-9476-7eadf94b9188,1,0,135c86fc-2979-4833-9107-38d749a9f82f,135c86fc-2979-4833-9107-38d749a9f82f,1,0,78288ff9-d838-4970-84bd-9a6b229e6ef0,78288ff9-d838-4970-84bd-9a6b229e6ef0,1,0,8310f927-1123-4b4b-a65e-0ff29be73329,8310f927-1123-4b4b-a65e-0ff29be73329,1,0,80a9df2d-593d-483d-8d69-28b1c08ec648,80a9df2d-593d-483d-8d69-28b1c08ec648,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,ab4dbaff-cee6-47b3-9d69-13ac5c906f95,ab4dbaff-cee6-47b3-9d69-13ac5c906f95,1,0,82d5ed02-654f-4b86-b995-baf64a147a12,82d5ed02-654f-4b86-b995-baf64a147a12,1,0,ba96177b-d10c-4ad2-9851-dea312eeafd2,ba96177b-d10c-4ad2-9851-dea312eeafd2,1,0,7652c0d3-1b6e-4e0d-96d0-7bbdff808ce9,7652c0d3-1b6e-4e0d-96d0-7bbdff808ce9,1,0,caa287fe-4f60-4243-a6fe-8b2bd607205f,caa287fe-4f60-4243-a6fe-8b2bd607205f,1,0,ba6e2356-8b0e-4af6-9941-3b808e17c570,ba6e2356-8b0e-4af6-9941-3b808e17c570,1,0,f2f90525-566b-4add-ae3e-cc683dee6209,f2f90525-566b-4add-ae3e-cc683dee6209,1,0,59561ccb-5412-4f8a-8961-3d43639e4742,59561ccb-5412-4f8a-8961-3d43639e4742,1,0,8ce1e84a-9e69-4a75-9c3e-481ba3b5eaae,8ce1e84a-9e69-4a75-9c3e-481ba3b5eaae,1,0,0ec665f2-bbde-4e41-8cd0-2578253ecdf3,0ec665f2-bbde-4e41-8cd0-2578253ecdf3,1,0,e82ab008-d6b9-4f02-b4a5-0c0c57b06988,e82ab008-d6b9-4f02-b4a5-0c0c57b06988,1,0,50d2d02d-b812-4c2b-964a-4c2ded54284f,50d2d02d-b812-4c2b-964a-4c2ded54284f,1,0,5503d2c4-0b5e-4ba1-a26d-2f63628b25c8,5503d2c4-0b5e-4ba1-a26d-2f63628b25c8,1,0,53f519d2-0ee6-4314-a986-2f456722f2ae,53f519d2-0ee6-4314-a986-2f456722f2ae,1,0,c94a168f-e10f-4b09-8a82-7e53c056a643,c94a168f-e10f-4b09-8a82-7e53c056a643,1,0,35f56bf0-bb91-4ff4-ade4-fa06296e68a2,35f56bf0-bb91-4ff4-ade4-fa06296e68a2,1,0,a22ba49d-7a11-4dc7-8b0e-874da6f0874d,a22ba49d-7a11-4dc7-8b0e-874da6f0874d,1,0,888e5183-a152-435f-b105-6b924e0d4f4f,888e5183-a152-435f-b105-6b924e0d4f4f,1,0,f69a29cd-035f-4d16-8bec-150f563691b9,f69a29cd-035f-4d16-8bec-150f563691b9,1,0,6d4e26f4-4cc4-4445-ad7b-547cd0afc750,6d4e26f4-4cc4-4445-ad7b-547cd0afc750,1,0,5736ef36-69eb-4406-a98e-1e4b4227a10d,5736ef36-69eb-4406-a98e-1e4b4227a10d,1,0,0ab0a57c-24c6-4ba8-9be1-5773fd82367e,0ab0a57c-24c6-4ba8-9be1-5773fd82367e,1,0,9964f9e3-613c-479f-8557-742e409da4ab,9964f9e3-613c-479f-8557-742e409da4ab,1,0,ea6d3ce8-cbac-438a-92f1-b246d558fecd,ea6d3ce8-cbac-438a-92f1-b246d558fecd,1,0,84a655d4-49fb-44bb-bdc5-59776046e66b,84a655d4-49fb-44bb-bdc5-59776046e66b,1,0,8d5d9ad3-31a7-4877-b053-64edb7332af4,8d5d9ad3-31a7-4877-b053-64edb7332af4,1,0,3dbcdc42-8583-49e4-9c57-a1b06071be66,3dbcdc42-8583-49e4-9c57-a1b06071be66,1,0,79529e32-4c86-41e3-84ec-17f72b022855,79529e32-4c86-41e3-84ec-17f72b022855,1,0,6ef107de-6385-4448-9ef8-82110452a2b6,6ef107de-6385-4448-9ef8-82110452a2b6,1,0,3ce07fcb-f1a4-41db-891a-547311567ce0,3ce07fcb-f1a4-41db-891a-547311567ce0,1,0,3bcc76a7-f28a-4d28-a95e-af7ac1138993,3bcc76a7-f28a-4d28-a95e-af7ac1138993,1,0,50b4bf05-7810-4068-8be9-0be410d9b9db,50b4bf05-7810-4068-8be9-0be410d9b9db,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,ee494dc9-549b-4595-97d1-ca73bacff954,ee494dc9-549b-4595-97d1-ca73bacff954,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,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,977748b7-13d3-41ef-8206-82595ed8fc0c,977748b7-13d3-41ef-8206-82595ed8fc0c,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,3fbd3448-b23c-4a83-b2dd-7c193f4239da,3fbd3448-b23c-4a83-b2dd-7c193f4239da,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,90a7425e-3fc9-41ec-9373-f410936e1b53,90a7425e-3fc9-41ec-9373-f410936e1b53,1,0,509cdfc8-fad3-4628-869c-6c03d9519d69,509cdfc8-fad3-4628-869c-6c03d9519d69,1,0,c69f8196-5d7e-4ca9-a84e-c85d9ecf8777,c69f8196-5d7e-4ca9-a84e-c85d9ecf8777,1,0,663cf316-3077-4fac-b821-94bd5cdde65c,663cf316-3077-4fac-b821-94bd5cdde65c,1,0,4b37d2c0-4181-4c47-951c-987017972bf7,4b37d2c0-4181-4c47-951c-987017972bf7,1,0,8ae35de6-c7f0-4839-bc27-cc8619e30a43,8ae35de6-c7f0-4839-bc27-cc8619e30a43,1,0,9ef01e37-030a-44b7-824b-110e0f5a88f3,9ef01e37-030a-44b7-824b-110e0f5a88f3,1,0,98bf409f-de8d-4306-b290-716b006e6fd8,98bf409f-de8d-4306-b290-716b006e6fd8,1,0,c15f648b-3aed-4734-bcd2-524e2d3336c0,c15f648b-3aed-4734-bcd2-524e2d3336c0,1,0,600ac5b6-d3ac-4262-820d-5a989fa7f44d,600ac5b6-d3ac-4262-820d-5a989fa7f44d,1,0,3c671c62-5614-4c1b-a823-ac4922c9daf7,3c671c62-5614-4c1b-a823-ac4922c9daf7,1,0,c347e3a2-d6d9-46a0-971f-ec56a45dcbe8,c347e3a2-d6d9-46a0-971f-ec56a45dcbe8,1,0,455c94b6-6b10-405f-a198-f680c7ad5ffe,455c94b6-6b10-405f-a198-f680c7ad5ffe,1,0,d16a63b9-2b84-447e-9c32-1d8f7c4c5a11,d16a63b9-2b84-447e-9c32-1d8f7c4c5a11,1,0,48cc3006-9f06-4be1-aec4-5c04308200d5,48cc3006-9f06-4be1-aec4-5c04308200d5,1,0,bae8ba70-a19e-41fa-b11c-6513453bd3ac,bae8ba70-a19e-41fa-b11c-6513453bd3ac,1,0,f4a9a13e-91b0-4440-8662-25acf099220e,f4a9a13e-91b0-4440-8662-25acf099220e,1,0,ff87a40b-07da-4951-b469-a75d418e88b3,ff87a40b-07da-4951-b469-a75d418e88b3,1,0,708b4656-7d14-491f-95b5-8fe3f0d6d44b,708b4656-7d14-491f-95b5-8fe3f0d6d44b,1,0,331db59d-ef90-4255-89c2-d7fdd6bc5c4c,331db59d-ef90-4255-89c2-d7fdd6bc5c4c,1,0,e520fbbb-3521-4707-bbe7-c8ead04fb2dc,e520fbbb-3521-4707-bbe7-c8ead04fb2dc,1,0,a87faa63-4e1c-440c-b852-0e4e1485a047,a87faa63-4e1c-440c-b852-0e4e1485a047,1,0,36244ad9-5b3a-431e-9dbf-b05ee9da1188,36244ad9-5b3a-431e-9dbf-b05ee9da1188,1,0,6cf7fd67-e426-4fe3-a49d-fbcfae5fb52d,6cf7fd67-e426-4fe3-a49d-fbcfae5fb52d,1,0,92c4d60b-22df-4fef-a5b9-a97bc63b4858,92c4d60b-22df-4fef-a5b9-a97bc63b4858,1,0,8264b98b-7eec-4651-96fc-02620c87f274,8264b98b-7eec-4651-96fc-02620c87f274,1,0,bcd6e5f0-a800-4f21-ad75-24c428157cee,bcd6e5f0-a800-4f21-ad75-24c428157cee,1,0,9f351f0a-2d43-4215-8d74-040911230683,9f351f0a-2d43-4215-8d74-040911230683,1,0,6a9c1bd4-b550-4911-a8d1-321a7713a5a5,6a9c1bd4-b550-4911-a8d1-321a7713a5a5,1,0,019fa716-e91a-4116-abcf-c87349c153a4,019fa716-e91a-4116-abcf-c87349c153a4,1,0,f9fed640-0121-4c36-a822-0db7a9155adc,f9fed640-0121-4c36-a822-0db7a9155adc,1,0,e418d7c4-7322-41b1-a8df-d86a11f7711c,e418d7c4-7322-41b1-a8df-d86a11f7711c,1,0,b8a6ea0c-cb94-44af-8e40-55defed295d1,b8a6ea0c-cb94-44af-8e40-55defed295d1,1,0,3fcdfe26-1668-4aa7-bb10-ef8d8bd0ae39,3fcdfe26-1668-4aa7-bb10-ef8d8bd0ae39,1,0,a0ebcc8a-267b-4f95-a986-46db8fb5df4d,a0ebcc8a-267b-4f95-a986-46db8fb5df4d,1,0,9c890915-1ae3-457e-8a3d-7b39f181304b,9c890915-1ae3-457e-8a3d-7b39f181304b,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,2197147c-f67c-4e92-9e69-2c9900144e82,2197147c-f67c-4e92-9e69-2c9900144e82,1,0,7692e2fd-9ab5-45ee-9a4c-380107769ef7,7692e2fd-9ab5-45ee-9a4c-380107769ef7,1,0,6586260a-3abd-4283-b710-bc2ae3b965d8,6586260a-3abd-4283-b710-bc2ae3b965d8,1,0,2af20999-4b9a-44c7-9edf-40446e083796,2af20999-4b9a-44c7-9edf-40446e083796,1,0,100acfa0-d5f3-4a20-8a05-9d9d00aff2c9,100acfa0-d5f3-4a20-8a05-9d9d00aff2c9,1,0,ccdaa099-3739-4731-b028-3cb4e75834a5,ccdaa099-3739-4731-b028-3cb4e75834a5,1,0,dcbcf7e3-83ab-4460-8ee7-dfc55a0342e7,dcbcf7e3-83ab-4460-8ee7-dfc55a0342e7,1,0,4aa2e369-4871-4f28-ab0b-94323bb7e856,4aa2e369-4871-4f28-ab0b-94323bb7e856,1,0,a2961e9e-8361-4416-b736-1b59c9306526,a2961e9e-8361-4416-b736-1b59c9306526,1,0,ee07ebbe-b34d-4c42-a4b4-d5e14ef4c103,ee07ebbe-b34d-4c42-a4b4-d5e14ef4c103,1,0,1d44bf7e-3dc9-4ca4-86c8-bdabdb5650b8,1d44bf7e-3dc9-4ca4-86c8-bdabdb5650b8,1,0,d4757882-e0bd-4f54-962b-32d49c90fb60,d4757882-e0bd-4f54-962b-32d49c90fb60,1,0,6e650778-3ddd-44ca-bd7f-ffa5e8f4cce4,6e650778-3ddd-44ca-bd7f-ffa5e8f4cce4,1,0,ec81b967-a4a1-48ac-beda-cdc00f1222a0,ec81b967-a4a1-48ac-beda-cdc00f1222a0,1,0,0040f7b0-3499-41bd-94bf-d63679d9d9c1,0040f7b0-3499-41bd-94bf-d63679d9d9c1,1,0,e5c31a93-cda7-4972-a13b-8cb864cc40ed,e5c31a93-cda7-4972-a13b-8cb864cc40ed,1,0,e2a5f14f-9b64-4d1c-9c66-332ea0157cc2,e2a5f14f-9b64-4d1c-9c66-332ea0157cc2,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,15cd04c9-c12a-44ea-a397-d2adbac99c5b,15cd04c9-c12a-44ea-a397-d2adbac99c5b,1,0,182f92f5-0a8e-4f6a-9f9e-7878fafd0a2a,182f92f5-0a8e-4f6a-9f9e-7878fafd0a2a,1,0,45ca26ef-2a9f-4f24-a81b-2fe10c02ed9f,45ca26ef-2a9f-4f24-a81b-2fe10c02ed9f,1,0,56aa4b2f-5b7e-457d-a59d-837405f17fde,56aa4b2f-5b7e-457d-a59d-837405f17fde,1,0,819e2442-cb5a-4826-8a66-b34a3270e8e0,819e2442-cb5a-4826-8a66-b34a3270e8e0,1,0,49987536-3ab9-4a68-83a2-5dc3cd5d58fb,49987536-3ab9-4a68-83a2-5dc3cd5d58fb,1,0,8e4eec45-6ad3-4ac8-940a-b3130f504685,8e4eec45-6ad3-4ac8-940a-b3130f504685,1,0,ccdfef4b-a022-4bde-9c6c-84129b2bad65,ccdfef4b-a022-4bde-9c6c-84129b2bad65,1,0,95adcac2-bc88-46bc-aae5-d13cfb9a170c,95adcac2-bc88-46bc-aae5-d13cfb9a170c,1,0,d845ca4c-3af2-4322-8565-64f3aee61e3a,d845ca4c-3af2-4322-8565-64f3aee61e3a,1,0,430cf66c-5cfc-4fd4-bbf3-d9df6070e115,430cf66c-5cfc-4fd4-bbf3-d9df6070e115,1,0,6321fc1e-c1d7-4b49-b730-258857b2d936,6321fc1e-c1d7-4b49-b730-258857b2d936,1,0,f48abfe8-e400-4544-a80a-d1cb0b7d3ea8,f48abfe8-e400-4544-a80a-d1cb0b7d3ea8,1,0,ce40016b-7ca7-4803-81fa-5df0b92dbc54,ce40016b-7ca7-4803-81fa-5df0b92dbc54,1,0,b58b711b-8e9a-44a0-b62d-6b6362177a4b,b58b711b-8e9a-44a0-b62d-6b6362177a4b,1,0,f7c0af11-1b64-4504-a8db-0fd09c2ce20f,f7c0af11-1b64-4504-a8db-0fd09c2ce20f,1,0,b3c7cd75-fb40-4121-a727-d557fe66a5e0,b3c7cd75-fb40-4121-a727-d557fe66a5e0,1,0,38be384a-3abb-4f4d-b8b7-164c2c8d8b28,38be384a-3abb-4f4d-b8b7-164c2c8d8b28,1,0,8c697e44-1a1d-4c4a-b141-5254cfb229a5,8c697e44-1a1d-4c4a-b141-5254cfb229a5,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,28bb77d5-cc8e-4f91-830e-d5052224ed97,28bb77d5-cc8e-4f91-830e-d5052224ed97,1,0,874868a1-e4a3-4c78-8db4-5b103c9cc541,874868a1-e4a3-4c78-8db4-5b103c9cc541,1,0,d397d41e-6113-4f4e-99de-5d445649a4c3,d397d41e-6113-4f4e-99de-5d445649a4c3,1,0,2125956a-c910-4467-96f7-846441d17b02,2125956a-c910-4467-96f7-846441d17b02,1,0,3d0c7eb6-6d5e-46b4-b4c3-140a5b5ce6cf,3d0c7eb6-6d5e-46b4-b4c3-140a5b5ce6cf,1,0,da9028f5-04bb-4782-bd3a-0d17f4e1534e,da9028f5-04bb-4782-bd3a-0d17f4e1534e,1,0,45a74cbe-e001-4a6e-b0bf-b1e8947fb409,45a74cbe-e001-4a6e-b0bf-b1e8947fb409,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,d4e567c7-55f1-4564-b066-f5b2355ad82c,d4e567c7-55f1-4564-b066-f5b2355ad82c,1,0,57d1bde3-eaa7-476b-aecb-f78e0e97c765,57d1bde3-eaa7-476b-aecb-f78e0e97c765,1,0,89cf2cd8-dc43-4742-af5a-5975e9546786,89cf2cd8-dc43-4742-af5a-5975e9546786,1,0,089ae618-cd90-482a-b4a2-45a04aaecc0c,089ae618-cd90-482a-b4a2-45a04aaecc0c,1,0,d1beef4e-9c78-49f5-9e52-1568fadf861d,d1beef4e-9c78-49f5-9e52-1568fadf861d,1,0,e6032a40-6195-4889-99f5-f7f4c74d4e8f,e6032a40-6195-4889-99f5-f7f4c74d4e8f,1,0,f9f12c11-04e8-4999-b1ab-ddea896638a2,f9f12c11-04e8-4999-b1ab-ddea896638a2,1,0,47ae26c4-1c47-4d9d-a0b8-a9899d08a4ce,47ae26c4-1c47-4d9d-a0b8-a9899d08a4ce,1,0,83245a76-8502-47a4-98ae-2ffadb78a029,83245a76-8502-47a4-98ae-2ffadb78a029,1,0,c9d5a41d-a2d9-4ec6-9a51-e4d254df1927,c9d5a41d-a2d9-4ec6-9a51-e4d254df1927,1,0,22d7df25-5885-4ad6-bb29-28257256da22,22d7df25-5885-4ad6-bb29-28257256da22,1,0,3bb85423-6ce7-416f-884a-89c75deed890,3bb85423-6ce7-416f-884a-89c75deed890,1,0,132c8921-189a-4c00-a8a4-417728520203,132c8921-189a-4c00-a8a4-417728520203,1,0,18535b06-82f0-4179-af3c-975a5ba85872,18535b06-82f0-4179-af3c-975a5ba85872,1,0,1d0981b4-cf7c-4094-a597-d709a8573d71,1d0981b4-cf7c-4094-a597-d709a8573d71,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,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,a26d8489-88a8-438e-bb58-c7b5a742a243,a26d8489-88a8-438e-bb58-c7b5a742a243,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,9728fd22-163c-443d-a89f-79d15c51c086,9728fd22-163c-443d-a89f-79d15c51c086,1,0,7030a503-e97c-4cb8-b6cd-79dbd08fd2cc,7030a503-e97c-4cb8-b6cd-79dbd08fd2cc,1,0,0a7c25db-dba6-44d3-b994-d672c4f33f1f,0a7c25db-dba6-44d3-b994-d672c4f33f1f,1,0,618b565c-f80f-4e58-94f1-227d4bdc8fe7,618b565c-f80f-4e58-94f1-227d4bdc8fe7,1,0,e36ed6bf-7bb2-419f-b3d4-fe6f7e75188d,e36ed6bf-7bb2-419f-b3d4-fe6f7e75188d,1,0,018bd653-a526-4e2c-8483-1192ae997458,018bd653-a526-4e2c-8483-1192ae997458,1,0,788a38ca-6ef8-4a05-a0c7-032766b135d9,788a38ca-6ef8-4a05-a0c7-032766b135d9,1,0,82e0e020-d6a7-45ae-bdbd-d29aacff313a,82e0e020-d6a7-45ae-bdbd-d29aacff313a,1,0,31ac5bc1-3642-456b-aaed-d604669556f6,31ac5bc1-3642-456b-aaed-d604669556f6,1,0,3157f1b3-5d78-4fe4-89bf-afca0026a8d5,3157f1b3-5d78-4fe4-89bf-afca0026a8d5,1,0,317e6068-5c8e-4455-932c-f5ae09e398c3,317e6068-5c8e-4455-932c-f5ae09e398c3,1,0,8424768a-3673-4e7c-840f-836515f85ba9,8424768a-3673-4e7c-840f-836515f85ba9,1,0,37ba6039-9162-4c7e-9975-de3aec39664f,37ba6039-9162-4c7e-9975-de3aec39664f,1,0,1ed0209f-4e11-452b-8520-66bf02186f1a,1ed0209f-4e11-452b-8520-66bf02186f1a,1,0,d1e25f7f-f2c5-48bf-a7f4-4cd40d992e53,d1e25f7f-f2c5-48bf-a7f4-4cd40d992e53,1,0,4d7f4a37-8426-4f06-9b64-cae252cb8e9e,4d7f4a37-8426-4f06-9b64-cae252cb8e9e,1,0,ae5b5521-a525-402d-99b0-e83a7b2caaa4,ae5b5521-a525-402d-99b0-e83a7b2caaa4,1,0,3858dbf0-cb6b-4c67-9dd9-eb900c3688f4,3858dbf0-cb6b-4c67-9dd9-eb900c3688f4,1,0,a04a50db-cb4a-496e-8c25-5591d863a7d5,a04a50db-cb4a-496e-8c25-5591d863a7d5,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,7e4f56cf-cd89-4cd0-b566-20c42ac5f99e,7e4f56cf-cd89-4cd0-b566-20c42ac5f99e,1,0,815035c6-14be-45f1-ab58-a3ac51848db5,815035c6-14be-45f1-ab58-a3ac51848db5,1,0,db0abb94-e1cd-41f2-becd-4630ad7bbe22,db0abb94-e1cd-41f2-becd-4630ad7bbe22,1,0,5dc728d2-eb61-4524-b4e3-5ac8aeabab29,5dc728d2-eb61-4524-b4e3-5ac8aeabab29,1,0,9823a704-8602-430e-b1f3-0893b2285401,9823a704-8602-430e-b1f3-0893b2285401,1,0,b39b8193-1d46-46b6-844e-112f9fcd7f9b,b39b8193-1d46-46b6-844e-112f9fcd7f9b,1,0,ed216057-b1ce-489c-a120-581043f6d438,ed216057-b1ce-489c-a120-581043f6d438,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,851118bb-7e22-4c3c-a050-51b89216df86,851118bb-7e22-4c3c-a050-51b89216df86,1,0,4575003b-10c6-4d8e-bc5e-c643f38b24d9,4575003b-10c6-4d8e-bc5e-c643f38b24d9,1,0,b3fd4c7b-b7ae-40b9-bbe0-42fae0bc6bf5,b3fd4c7b-b7ae-40b9-bbe0-42fae0bc6bf5,1,0,e68e3408-ae45-4d3f-8cbf-e1f517cd4dec,e68e3408-ae45-4d3f-8cbf-e1f517cd4dec,1,0,6252386c-865f-41cc-aef4-1d8bf7087798,6252386c-865f-41cc-aef4-1d8bf7087798,1,0,9d256a1d-5a06-4716-9d83-c5877a5ffc14,9d256a1d-5a06-4716-9d83-c5877a5ffc14,1,0,63623218-8035-4ad9-b4db-a1f917c5641a,63623218-8035-4ad9-b4db-a1f917c5641a,1,0,d58babbe-6f59-4027-86db-54343d11e1c8,d58babbe-6f59-4027-86db-54343d11e1c8,1,0,a4cc0476-99a7-4b61-a382-2a6bb8d2043e,a4cc0476-99a7-4b61-a382-2a6bb8d2043e,1,0,8dbca9a8-97c0-4c95-b0a6-1c3f54e6fbab,8dbca9a8-97c0-4c95-b0a6-1c3f54e6fbab,1,0,4d23fa01-b9ef-419c-8806-e0b0fad14be0,4d23fa01-b9ef-419c-8806-e0b0fad14be0,1,0,3eb4e1a4-8653-410f-ae73-b25c03348880,3eb4e1a4-8653-410f-ae73-b25c03348880,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,a2f19cb2-9f2e-442b-b9f2-e5253c70871c,a2f19cb2-9f2e-442b-b9f2-e5253c70871c,1,0,0c67453e-038b-46f3-8c13-2786e8622ad8,0c67453e-038b-46f3-8c13-2786e8622ad8,1,0,8ff1dc4d-b46c-4519-80fe-19448e620e74,8ff1dc4d-b46c-4519-80fe-19448e620e74,1,0,7cd5ca8c-cc97-4664-964e-152fdcb5bdef,7cd5ca8c-cc97-4664-964e-152fdcb5bdef,1,0,be0a5f9a-ffab-41d8-b55a-a61355f5d269,be0a5f9a-ffab-41d8-b55a-a61355f5d269,1,0,9286105d-9aa9-44f9-ae63-bbbcec64eade,9286105d-9aa9-44f9-ae63-bbbcec64eade,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,e603a2c2-5acc-4657-9a0e-d98ab57a67ef,e603a2c2-5acc-4657-9a0e-d98ab57a67ef,1,0,ce165482-5e10-4ced-8d5c-1a3af8ba778a,ce165482-5e10-4ced-8d5c-1a3af8ba778a,1,0,222fdf9c-7bfe-4f81-ae59-3c6309754d43,222fdf9c-7bfe-4f81-ae59-3c6309754d43,1,0,eaaf0aee-07d6-4c49-bc84-5c86e71bb51e,eaaf0aee-07d6-4c49-bc84-5c86e71bb51e,1,0,0cee4741-eadb-4dfa-8993-fcb514acd2cd,0cee4741-eadb-4dfa-8993-fcb514acd2cd,1,0,c496cc40-f9cb-4334-80a1-d4ff98d58798,c496cc40-f9cb-4334-80a1-d4ff98d58798,1,0,a4d1aa8f-d4e9-48df-a194-4d05f21084c8,a4d1aa8f-d4e9-48df-a194-4d05f21084c8,1,0,22855103-c30a-4da1-aa25-6295e3f1f145,22855103-c30a-4da1-aa25-6295e3f1f145,1,0,80a7a699-6633-4109-a78d-d86f50d9f922,80a7a699-6633-4109-a78d-d86f50d9f922,1,0,7e26e712-cd36-4773-abae-21fe999a197f,7e26e712-cd36-4773-abae-21fe999a197f,1,0,bd676e43-b35a-41e0-83a9-8a9da8778f8e,bd676e43-b35a-41e0-83a9-8a9da8778f8e,1,0,44984353-2eae-40e4-86cc-1295812d9e12,44984353-2eae-40e4-86cc-1295812d9e12,1,0,ba64a0ae-5ae4-4e68-9088-dd3dff34e503,ba64a0ae-5ae4-4e68-9088-dd3dff34e503,1,0,56ce3bfc-2d87-4826-b6db-b63b5d415f48,56ce3bfc-2d87-4826-b6db-b63b5d415f48,1,0,51c76e26-1a34-4f2f-8887-88c8fcc0eb6d,51c76e26-1a34-4f2f-8887-88c8fcc0eb6d,1,0,67e291ab-0805-4add-8344-5a2bfc39b555,67e291ab-0805-4add-8344-5a2bfc39b555,1,0,ee5e9079-9586-47e8-84c1-bcb78a17e82e,ee5e9079-9586-47e8-84c1-bcb78a17e82e,1,0,4d49e173-27c1-42da-8597-bcf06946800d,4d49e173-27c1-42da-8597-bcf06946800d,1,0,3cbe38b2-4443-414e-8e6d-174bd2e6a925,3cbe38b2-4443-414e-8e6d-174bd2e6a925,1,0,796a2fcd-caa8-431c-8d22-320479ecc5fd,796a2fcd-caa8-431c-8d22-320479ecc5fd,1,0,2e882442-45ce-41af-a76b-b00a74021cba,2e882442-45ce-41af-a76b-b00a74021cba,1,0,457b37a9-d6dd-40bb-9eea-06a5dfbaf777,457b37a9-d6dd-40bb-9eea-06a5dfbaf777,1,0,d4beb157-c999-46c2-ac4b-5ec6846a717d,d4beb157-c999-46c2-ac4b-5ec6846a717d,1,0,9eed26c8-8874-4814-b232-44a8f594fabe,9eed26c8-8874-4814-b232-44a8f594fabe,1,0,487ec60f-c31c-4c74-ba24-efcfc3908320,487ec60f-c31c-4c74-ba24-efcfc3908320,1,0,5af3a256-2bdb-4d87-a2e6-348f072f099d,5af3a256-2bdb-4d87-a2e6-348f072f099d,1,0,c232ad3b-79ea-45fa-85f1-6229474b967c,c232ad3b-79ea-45fa-85f1-6229474b967c,1,0,4d596b46-4654-46b8-a015-cecfc86780fc,4d596b46-4654-46b8-a015-cecfc86780fc,1,0,c94decc9-4fb7-4f47-a7e6-ab8944798a24,c94decc9-4fb7-4f47-a7e6-ab8944798a24,1,0,0ec45124-506d-4a1f-b6e3-1620f34fa817,0ec45124-506d-4a1f-b6e3-1620f34fa817,1,0,36f99889-4bc1-40cd-904a-a463c44f7b0b,36f99889-4bc1-40cd-904a-a463c44f7b0b,1,0,88fafb0d-d624-4b91-8c68-c354817ccddb,88fafb0d-d624-4b91-8c68-c354817ccddb,1,0,f4a3e032-61fb-4004-bd4d-6eaffb53437b,f4a3e032-61fb-4004-bd4d-6eaffb53437b,1,0,9126b840-ddcc-4054-aa16-4156288a379e,9126b840-ddcc-4054-aa16-4156288a379e,1,0,a6facfdb-7529-479c-9bb3-e63316b032f4,a6facfdb-7529-479c-9bb3-e63316b032f4,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,14361dbe-00dd-496b-adf4-7f35553bb48c,14361dbe-00dd-496b-adf4-7f35553bb48c,1,0,9de12434-34a3-4f73-848e-d0798f6d6c83,9de12434-34a3-4f73-848e-d0798f6d6c83,1,0,64c4af68-7657-458e-a129-14a3dd8a0262,64c4af68-7657-458e-a129-14a3dd8a0262,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,db5fde74-275f-4d82-825c-5c245a7fef6b,db5fde74-275f-4d82-825c-5c245a7fef6b,1,0,e4e534e9-7ccc-4ced-b961-613989a6194b,e4e534e9-7ccc-4ced-b961-613989a6194b,1,0,cc925b83-839b-48da-8f62-7f8cde76ac2a,cc925b83-839b-48da-8f62-7f8cde76ac2a,1,0,7d06f855-8a6a-45e0-a1c2-fd5f03d2a8ed,7d06f855-8a6a-45e0-a1c2-fd5f03d2a8ed,1,0,a156434c-a1f0-401e-90b4-c0adae8800e3,a156434c-a1f0-401e-90b4-c0adae8800e3,1,0,f9681a4d-d47c-4a8d-a8a3-4aafc751e61b,f9681a4d-d47c-4a8d-a8a3-4aafc751e61b,1,0,e6e76d04-8adc-4462-8919-0979258e5a7b,e6e76d04-8adc-4462-8919-0979258e5a7b,1,0,6ee85be2-55f6-4d4b-abf1-0d1d25f61ea3,6ee85be2-55f6-4d4b-abf1-0d1d25f61ea3,1,0,f850e1d5-5108-4ca8-b397-983627e4871b,f850e1d5-5108-4ca8-b397-983627e4871b,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,96229b23-74a9-4fe1-a89e-b71f499cd65a,96229b23-74a9-4fe1-a89e-b71f499cd65a,1,0,15000713-0142-42e9-8bb3-cbb0587200d4,15000713-0142-42e9-8bb3-cbb0587200d4,1,0,d5ae7e0b-c230-402f-9d4f-e52c2b9aa240,d5ae7e0b-c230-402f-9d4f-e52c2b9aa240,1,0,0d199fdc-d2af-4159-91d6-6f15266f9ce8,0d199fdc-d2af-4159-91d6-6f15266f9ce8,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,e59e9cfc-43b2-4bdf-a512-b6f87f781cee,e59e9cfc-43b2-4bdf-a512-b6f87f781cee,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,178342fd-1ba5-422d-89d2-4f486e45dae9,178342fd-1ba5-422d-89d2-4f486e45dae9,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,d4eb3e9a-feb5-42d9-841b-ff20288228b6,d4eb3e9a-feb5-42d9-841b-ff20288228b6,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,093a2243-329b-49b2-b6cd-80a1f7e4634a,093a2243-329b-49b2-b6cd-80a1f7e4634a,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,6e82e4ec-cf8e-4e9f-aaed-69b146c2ed84,6e82e4ec-cf8e-4e9f-aaed-69b146c2ed84,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,ea232693-49b2-4e10-9349-66e26760602c,ea232693-49b2-4e10-9349-66e26760602c,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,1908b558-9619-477e-ab33-0c731adf2b0e,1908b558-9619-477e-ab33-0c731adf2b0e,1,0,2bed313f-06ac-43a1-a0bd-008c5457deb1,2bed313f-06ac-43a1-a0bd-008c5457deb1,1,0,304feda3-6d33-466c-9e0d-9cea97d763be,304feda3-6d33-466c-9e0d-9cea97d763be,1,0,d6d20d2e-ac18-4bed-aa98-2466871996ac,d6d20d2e-ac18-4bed-aa98-2466871996ac,1,0,53617fbd-4c88-4b13-b3f5-acc78064fdea,53617fbd-4c88-4b13-b3f5-acc78064fdea,1,0,fae5d2ca-4a2d-4ba3-945c-d6545a6b57f1,fae5d2ca-4a2d-4ba3-945c-d6545a6b57f1,1,0,7a043029-1b09-4c11-adfd-9f0588e323e8,7a043029-1b09-4c11-adfd-9f0588e323e8,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,53a2f4b2-e8ea-4347-b4c7-b73f4ea8f9b7,53a2f4b2-e8ea-4347-b4c7-b73f4ea8f9b7,1,0,6b814a99-441e-4a51-997b-1c56bc40b134,6b814a99-441e-4a51-997b-1c56bc40b134,1,0,9388e5d5-3a02-4019-a060-141f8a3bb055,9388e5d5-3a02-4019-a060-141f8a3bb055,1,0,c1b000a1-8094-4a06-805f-b84d4e9c6dc0,c1b000a1-8094-4a06-805f-b84d4e9c6dc0,1,0,5eb1717c-3696-48bb-88a9-b667ea687860,5eb1717c-3696-48bb-88a9-b667ea687860,1,0,95705445-29b4-4d51-857b-a9cf161a3cc6,95705445-29b4-4d51-857b-a9cf161a3cc6,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,ed1b3c28-99be-49e9-90eb-81e24c8323a5,ed1b3c28-99be-49e9-90eb-81e24c8323a5,1,0,1e20958d-79dc-4c53-b09f-e627c6463fca,1e20958d-79dc-4c53-b09f-e627c6463fca,1,0,0efdbcc2-e5a8-4b00-a72a-2823fb0b2658,0efdbcc2-e5a8-4b00-a72a-2823fb0b2658,1,0,0fa7190d-bafd-4113-a623-9d7d818f70c7,0fa7190d-bafd-4113-a623-9d7d818f70c7,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,1117fce9-6e77-4d1d-aa86-49e7baddfe4b,1117fce9-6e77-4d1d-aa86-49e7baddfe4b,1,0,23f96afc-28e2-470d-9732-220f8867fc23,23f96afc-28e2-470d-9732-220f8867fc23,1,0,aef883c7-c1f5-46ff-a95a-6828d3509069,aef883c7-c1f5-46ff-a95a-6828d3509069,1,0,36b3b988-bf64-4466-9887-93583f59833d,36b3b988-bf64-4466-9887-93583f59833d,1,0,c2997234-864c-408c-94d3-85a2a1820a16,c2997234-864c-408c-94d3-85a2a1820a16,1,0,9d5b351e-5533-4e9f-a23f-d0f7b03d72ca,9d5b351e-5533-4e9f-a23f-d0f7b03d72ca,1,0,d5775cec-e600-4259-82fc-f313cee1cd6f,d5775cec-e600-4259-82fc-f313cee1cd6f,1,0,df918f4e-1a0a-4a7a-997b-f4757185b691,df918f4e-1a0a-4a7a-997b-f4757185b691,1,0,4e305be6-8bbf-4215-aeea-1283aba6d19e,4e305be6-8bbf-4215-aeea-1283aba6d19e,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,5ffc2b03-28c0-45da-ab3e-e4c5d449a898,5ffc2b03-28c0-45da-ab3e-e4c5d449a898,1,0,5c1a1206-0521-44db-8cdd-3e132f2e5a34,5c1a1206-0521-44db-8cdd-3e132f2e5a34,1,0,a630b2d5-2a8e-471e-a7ca-2498e15ace47,a630b2d5-2a8e-471e-a7ca-2498e15ace47,1,0,ba0855a3-8384-4681-a6f0-6373f23cf52d,ba0855a3-8384-4681-a6f0-6373f23cf52d,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,8ef2c1d3-173f-4db8-b2c7-5d5234709b8e,8ef2c1d3-173f-4db8-b2c7-5d5234709b8e,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,c91f630a-286c-4eb8-b87e-6e6bc7670482,c91f630a-286c-4eb8-b87e-6e6bc7670482,1,0,8ace2dbf-ed9d-46fd-bda7-d884da77e30c,8ace2dbf-ed9d-46fd-bda7-d884da77e30c,1,0,ba59bf05-b815-4679-94ce-601923d60461,ba59bf05-b815-4679-94ce-601923d60461,1,0,65ff172c-3892-4dd2-821b-5d6293805528,65ff172c-3892-4dd2-821b-5d6293805528,1,0,00c47343-9f64-4368-896e-85f1639e4dae,00c47343-9f64-4368-896e-85f1639e4dae,1,0,afc02a73-15bd-4ab1-97bb-5cea6206a44f,afc02a73-15bd-4ab1-97bb-5cea6206a44f,1,0,27a9ef3c-902c-49e3-ab84-ba51185ab111,27a9ef3c-902c-49e3-ab84-ba51185ab111,1,0,20ba43f5-348f-41e4-b365-ff9485a3951d,20ba43f5-348f-41e4-b365-ff9485a3951d,1,0,2f6bc78d-d2ed-491f-bc66-3f95e2ca574c,2f6bc78d-d2ed-491f-bc66-3f95e2ca574c,1,0,bf3e3395-3e41-49c2-b59e-fdcdc3ef956f,bf3e3395-3e41-49c2-b59e-fdcdc3ef956f,1,0,164db402-4516-4d99-80d2-6cb7b6fd7698,164db402-4516-4d99-80d2-6cb7b6fd7698,1,0,93b18f0a-7aa1-42db-809b-1e543cda57de,93b18f0a-7aa1-42db-809b-1e543cda57de,1,0,a8e04267-5a28-40af-8d45-e65375cd8273,a8e04267-5a28-40af-8d45-e65375cd8273,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,82573440-0ef5-4c07-bb1e-fe90295981d2,82573440-0ef5-4c07-bb1e-fe90295981d2,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,8d509c4e-fcea-4ccd-aec4-e146f2d4319b,8d509c4e-fcea-4ccd-aec4-e146f2d4319b,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,6b0721fe-d27f-4d1a-b377-26fce2ed1687,6b0721fe-d27f-4d1a-b377-26fce2ed1687,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,b65954b9-39f9-4f7c-8af2-939af0694368,b65954b9-39f9-4f7c-8af2-939af0694368,1,0,3a984dac-c971-42c3-9736-a45c46b55f01,3a984dac-c971-42c3-9736-a45c46b55f01,1,0,edaa4ad4-4dd9-4225-85e8-b0d74d167985,edaa4ad4-4dd9-4225-85e8-b0d74d167985,1,0,c060feda-b1ec-4db3-b16e-d19b36833a2c,c060feda-b1ec-4db3-b16e-d19b36833a2c,1,0,2116217b-1660-499f-953d-f685738b0f30,2116217b-1660-499f-953d-f685738b0f30,1,0,45b46613-13cc-4888-9bb7-53780402206f,45b46613-13cc-4888-9bb7-53780402206f,1,0,5c224274-5495-49bc-b124-e6d649b09d57,5c224274-5495-49bc-b124-e6d649b09d57,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,b6424caf-3db8-4cfe-b92d-7435c23606a5,b6424caf-3db8-4cfe-b92d-7435c23606a5,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,1c2103d3-3feb-4412-98c4-c731f22eef2b,1c2103d3-3feb-4412-98c4-c731f22eef2b,1,0,569bb515-cec2-4da0-80f0-34dae50206e0,569bb515-cec2-4da0-80f0-34dae50206e0,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,336cb96e-8867-4c9d-b74c-b4287ac9212a,336cb96e-8867-4c9d-b74c-b4287ac9212a,1,0,fc7dbc20-7bef-4cbc-9b32-5d86cef5532c,fc7dbc20-7bef-4cbc-9b32-5d86cef5532c,1,0,29f616a6-b914-4ffb-8a86-1ae17089e2f7,29f616a6-b914-4ffb-8a86-1ae17089e2f7,1,0,c50075b0-e8e2-4a6c-92ef-05882aa3cfea,c50075b0-e8e2-4a6c-92ef-05882aa3cfea,1,0,5a1058fc-35f6-43c2-95e5-ae678e19e7d6,5a1058fc-35f6-43c2-95e5-ae678e19e7d6,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,29c337bd-9811-4fce-91bb-20c253d2d14a,29c337bd-9811-4fce-91bb-20c253d2d14a,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,9a68a81b-c6bd-4353-baf4-da8a21f98fb9,9a68a81b-c6bd-4353-baf4-da8a21f98fb9,1,0,8db2b1d8-c415-4846-bd1a-9fec1b105ff0,8db2b1d8-c415-4846-bd1a-9fec1b105ff0,1,0,3ed20a3b-031c-4f2b-a66a-14cceed80407,3ed20a3b-031c-4f2b-a66a-14cceed80407,1,0,3831a5d8-12d5-4730-ac2e-e11f084dc684,3831a5d8-12d5-4730-ac2e-e11f084dc684,1,0,b6dce793-c652-48de-b2da-1dc3e89e1521,b6dce793-c652-48de-b2da-1dc3e89e1521,1,0,41990cad-a43e-46fd-b9bc-e8acc1d6e937,41990cad-a43e-46fd-b9bc-e8acc1d6e937,1,0,3bcce139-d42e-45c2-ace8-28aa34e01a38,3bcce139-d42e-45c2-ace8-28aa34e01a38,1,0,2e6a596c-c203-48b3-af11-bf0aef0f70a1,2e6a596c-c203-48b3-af11-bf0aef0f70a1,1,0,82eb7d08-12ad-42a2-9257-91b93f7cc890,82eb7d08-12ad-42a2-9257-91b93f7cc890,1,0,50754c7d-9c8a-497c-a4c8-76d7400b3412,50754c7d-9c8a-497c-a4c8-76d7400b3412,1,0,193f2d79-83a7-4044-89c6-0b5d7c7cf80a,193f2d79-83a7-4044-89c6-0b5d7c7cf80a,1,0,93070fc1-4204-43b7-b8eb-1bf905f5fa3f,93070fc1-4204-43b7-b8eb-1bf905f5fa3f,1,0,d29ba846-bc42-4364-b69d-4b56532920e0,d29ba846-bc42-4364-b69d-4b56532920e0,1,0,83239cd4-50cb-4281-8be3-fd89e410c15c,83239cd4-50cb-4281-8be3-fd89e410c15c,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,5d81af5c-3133-4e21-9ea4-ffe3d3ca9769,5d81af5c-3133-4e21-9ea4-ffe3d3ca9769,1,0,0f83d532-f675-4aea-802e-d640cc53e4a9,0f83d532-f675-4aea-802e-d640cc53e4a9,1,0,75b0d16b-4acd-4870-8e9d-f2764171e747,75b0d16b-4acd-4870-8e9d-f2764171e747,1,0,8f2cd606-d326-4c92-bfff-e5ec8b5057b5,8f2cd606-d326-4c92-bfff-e5ec8b5057b5,1,0,ed56abb2-66c6-412e-bead-9b23c59bd49a,ed56abb2-66c6-412e-bead-9b23c59bd49a,1,0,47ad737d-c9d3-4d4d-8d4d-b550412062c4,47ad737d-c9d3-4d4d-8d4d-b550412062c4,1,0,204f67e9-204d-47b6-afdd-8e880b7563bc,204f67e9-204d-47b6-afdd-8e880b7563bc,1,0,4da10de3-d999-4acd-bf5a-b1c60cf01b32,4da10de3-d999-4acd-bf5a-b1c60cf01b32,1,0,5e52263e-856f-43da-96ca-d4f06127f604,5e52263e-856f-43da-96ca-d4f06127f604,1,0,ab6f18fe-4ce4-4ecb-945b-bf71ef793549,ab6f18fe-4ce4-4ecb-945b-bf71ef793549,1,0,57904a00-a127-4add-a9fb-639e17c80e33,57904a00-a127-4add-a9fb-639e17c80e33,1,0,2f2f70b7-8f78-4eee-acb7-fe103827e88a,2f2f70b7-8f78-4eee-acb7-fe103827e88a,1,0,f6e8a922-c28b-49b2-ace5-0c812946270d,f6e8a922-c28b-49b2-ace5-0c812946270d,1,0,3d9d472e-a914-4f76-b087-19d4cfe19c19,3d9d472e-a914-4f76-b087-19d4cfe19c19,1,0,81225721-7e65-451d-9175-76fddc50f0c4,81225721-7e65-451d-9175-76fddc50f0c4,1,0,4a6bfd2c-0690-4504-9952-10e7c31156e9,4a6bfd2c-0690-4504-9952-10e7c31156e9,1,0,8f2dfd13-5e16-4fdd-be02-033d27b43317,8f2dfd13-5e16-4fdd-be02-033d27b43317,1,0,2c3849f2-46cc-4350-a6c5-f5587af2c699,2c3849f2-46cc-4350-a6c5-f5587af2c699,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,cb2245e0-f9fe-4571-9fb4-3f8744e60f14,cb2245e0-f9fe-4571-9fb4-3f8744e60f14,1,0,38f3f056-5f03-40c8-91f7-25a74af8fd52,38f3f056-5f03-40c8-91f7-25a74af8fd52,1,0,36e04436-2e6b-4ab9-a0ce-1048482f8fb6,36e04436-2e6b-4ab9-a0ce-1048482f8fb6,1,0,f4b1f17d-d050-4c88-936e-0dd354065a28,f4b1f17d-d050-4c88-936e-0dd354065a28,1,0,735eb95a-f4a9-4a90-a9a0-ab269b89f4de,735eb95a-f4a9-4a90-a9a0-ab269b89f4de,1,0,49f4a74c-abc2-446f-8f3c-de7bc02d84bf,49f4a74c-abc2-446f-8f3c-de7bc02d84bf,1,0,9d55341b-ceb2-4400-aeb6-3b579d9c6f2b,9d55341b-ceb2-4400-aeb6-3b579d9c6f2b,1,0,ab1efcef-f81b-45e5-893d-56e75c1e0a6f,ab1efcef-f81b-45e5-893d-56e75c1e0a6f,1,0,bbefbf22-6d11-4639-b53e-b72e94ff307c,bbefbf22-6d11-4639-b53e-b72e94ff307c,1,0,dca6a730-8a3f-4b78-926b-2287e21a25a1,dca6a730-8a3f-4b78-926b-2287e21a25a1,1,0,bdec80e6-4aef-4603-98dc-3332abda955c,bdec80e6-4aef-4603-98dc-3332abda955c,1,0,8be7adcd-b49a-4192-9f62-e0b0089b0386,8be7adcd-b49a-4192-9f62-e0b0089b0386,1,0,e4e8e36b-6060-43f3-8b05-bbbf61c3decc,e4e8e36b-6060-43f3-8b05-bbbf61c3decc,1,0,a53447c8-0299-4cf0-a6f9-5a3af423be38,a53447c8-0299-4cf0-a6f9-5a3af423be38,1,0,4f8a2980-bdb4-4a4f-82ec-2822dc1adc49,4f8a2980-bdb4-4a4f-82ec-2822dc1adc49,1,0,91b5a3ca-5f7b-462d-b322-ab8e938add40,91b5a3ca-5f7b-462d-b322-ab8e938add40,1,0,8db8d80c-bf04-4252-8371-46a1dd7e2720,8db8d80c-bf04-4252-8371-46a1dd7e2720,1,0,6fdb4b65-1caf-4472-8135-c6a479bda6d4,6fdb4b65-1caf-4472-8135-c6a479bda6d4,1,0,b5a8b32f-8f8d-4e13-9113-94e66f5c9621,b5a8b32f-8f8d-4e13-9113-94e66f5c9621,1,0,9b8cf6f0-2b56-4954-b982-db18ad78c5ef,9b8cf6f0-2b56-4954-b982-db18ad78c5ef,1,0,1e869478-9bff-4854-9f9c-699b7d1c8faa,1e869478-9bff-4854-9f9c-699b7d1c8faa,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,f2aa4137-07b6-4fc7-8009-8127762dc698,f2aa4137-07b6-4fc7-8009-8127762dc698,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,3bce82a2-efba-4866-950c-5804853b5fe2,3bce82a2-efba-4866-950c-5804853b5fe2,1,0,ee0e428a-bee7-4169-9b6e-63704f3d1a8e,ee0e428a-bee7-4169-9b6e-63704f3d1a8e,1,0,5fa8756c-871d-460f-b70a-0797de0d5563,5fa8756c-871d-460f-b70a-0797de0d5563,1,0,cc63becf-0e32-48d8-b4c1-430abaa83e9e,cc63becf-0e32-48d8-b4c1-430abaa83e9e,1,0,f46ae351-0ac5-4597-a6a9-1394cd5ec83f,f46ae351-0ac5-4597-a6a9-1394cd5ec83f,1,0,d57f644e-40e5-46a3-874c-5addd52ec3f6,d57f644e-40e5-46a3-874c-5addd52ec3f6,1,0,5ef18079-798a-4924-98a7-8ba4ff13303f,5ef18079-798a-4924-98a7-8ba4ff13303f,1,0,16835f10-559e-420b-9a67-03aac0e947c4,16835f10-559e-420b-9a67-03aac0e947c4,1,0,0292ed74-c47c-4a44-b6db-0e9b6828bec2,0292ed74-c47c-4a44-b6db-0e9b6828bec2,1,0,bfafc36e-2d45-4716-b7be-a89b69575066,bfafc36e-2d45-4716-b7be-a89b69575066,1,0,75cb904b-b3f1-4f0d-85d9-a186262028ff,75cb904b-b3f1-4f0d-85d9-a186262028ff,1,0,82cfb1ad-5ba0-425c-b75e-6281862faec8,82cfb1ad-5ba0-425c-b75e-6281862faec8,1,0,de64596c-a7c1-4d1d-9264-5817e47ab6d3,de64596c-a7c1-4d1d-9264-5817e47ab6d3,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,e69be74a-0e2c-4a7b-8814-ab15ab28f948,e69be74a-0e2c-4a7b-8814-ab15ab28f948,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,9016988e-1aea-460a-b5eb-644dc5923d87,9016988e-1aea-460a-b5eb-644dc5923d87,1,0,8593c908-9f6f-42df-9fd4-e41ccffba315,8593c908-9f6f-42df-9fd4-e41ccffba315,1,0,d6eb3484-b0ab-40e3-aa95-c18a40259f77,d6eb3484-b0ab-40e3-aa95-c18a40259f77,1,0,08ec3f2e-e523-4e37-8d44-fbc52c66263c,08ec3f2e-e523-4e37-8d44-fbc52c66263c,1,0,7300e566-06ea-42a3-b046-477ee9883559,7300e566-06ea-42a3-b046-477ee9883559,1,0,72ef831d-9d37-4b7f-8b71-fb9dd0ab6038,72ef831d-9d37-4b7f-8b71-fb9dd0ab6038,1,0,a0ff40b4-5815-445e-ad67-f524dfa3aaa7,a0ff40b4-5815-445e-ad67-f524dfa3aaa7,1,0,4d7ef262-8449-4511-a408-e5d322ce3d78,4d7ef262-8449-4511-a408-e5d322ce3d78,1,0,3f8130d4-12b2-4a2b-8f75-9ca8289624c8,3f8130d4-12b2-4a2b-8f75-9ca8289624c8,1,0,02877723-66fb-4984-b760-511d1c6c29f0,02877723-66fb-4984-b760-511d1c6c29f0,1,0,ec0bc645-5abf-423f-a517-2aa7adf9044c,ec0bc645-5abf-423f-a517-2aa7adf9044c,1,0,d8430167-5d4e-4603-9797-36781210cdff,d8430167-5d4e-4603-9797-36781210cdff,1,0,c4b3f94d-6f5f-457b-a425-56c0f745c75f,c4b3f94d-6f5f-457b-a425-56c0f745c75f,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,9378d484-2143-45eb-a71e-651055611789,9378d484-2143-45eb-a71e-651055611789,1,0,a2d24b4d-6039-49ab-8cc2-14d03a2d5546,a2d24b4d-6039-49ab-8cc2-14d03a2d5546,1,0,c5d0eafb-469e-4a24-8b5e-ce25fb627d3d,c5d0eafb-469e-4a24-8b5e-ce25fb627d3d,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,d5b23aac-ea1c-497e-bed7-8685bb682e36,d5b23aac-ea1c-497e-bed7-8685bb682e36,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,c49054f1-3a96-4bf1-917e-f11407c67b5b,c49054f1-3a96-4bf1-917e-f11407c67b5b,1,0,01ede889-689f-45f3-b9a3-5e4c1188bea1,01ede889-689f-45f3-b9a3-5e4c1188bea1,1,0,a05f99a4-c764-4283-9fbb-6e641c3a15ae,a05f99a4-c764-4283-9fbb-6e641c3a15ae,1,0,cbe31324-feba-4137-9b82-b1b2afbcfb9d,cbe31324-feba-4137-9b82-b1b2afbcfb9d,1,0,03e80316-735f-4087-afe9-218d41dce028,03e80316-735f-4087-afe9-218d41dce028,1,0,eca391b3-ee95-47ab-a3d6-a80c745f99e7,eca391b3-ee95-47ab-a3d6-a80c745f99e7,1,0,b3035b26-9ead-4082-90b0-7dd61b4a6990,b3035b26-9ead-4082-90b0-7dd61b4a6990,1,0,cd68ac77-8df5-42d4-b729-da73cae0a78b,cd68ac77-8df5-42d4-b729-da73cae0a78b,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,dea1f169-5426-4623-9e5e-3c8c2360858f,dea1f169-5426-4623-9e5e-3c8c2360858f,1,0,039b1cc5-a831-41fb-933a-b9c0fb9c9f55,039b1cc5-a831-41fb-933a-b9c0fb9c9f55,1,0,4dea2614-6251-45c3-9abe-34b7595c71a2,4dea2614-6251-45c3-9abe-34b7595c71a2,1,0,e31cfba9-0f49-485f-8d6f-797b32667642,e31cfba9-0f49-485f-8d6f-797b32667642,1,0,de183413-490a-4266-95fa-ea0057adeee3,de183413-490a-4266-95fa-ea0057adeee3,1,0,fd81a8df-0f9f-4543-a35c-0cb1bb804b5b,fd81a8df-0f9f-4543-a35c-0cb1bb804b5b,1,0,129f7771-7285-4842-a139-ca927d086184,129f7771-7285-4842-a139-ca927d086184,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,895aea8f-4c4e-44e5-b720-0a2e683191b3,895aea8f-4c4e-44e5-b720-0a2e683191b3,1,0,a3b14a36-049d-4f94-bafc-cf7b874f9bf0,a3b14a36-049d-4f94-bafc-cf7b874f9bf0,1,0,6c954862-62d0-4901-8448-ea62a1174660,6c954862-62d0-4901-8448-ea62a1174660,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,54bfe81c-06b2-45a8-8bc1-bd22240cfe32,54bfe81c-06b2-45a8-8bc1-bd22240cfe32,1,0,46f71ecc-5cee-4b8d-9f6d-d38a86787a76,46f71ecc-5cee-4b8d-9f6d-d38a86787a76,1,0,b896cd10-5da4-4c90-b2cf-5b98bd173122,b896cd10-5da4-4c90-b2cf-5b98bd173122,1,0,216410ad-91e5-4c41-b08b-905faa830410,216410ad-91e5-4c41-b08b-905faa830410,1,0,df2bf85a-9e42-40d2-ae10-d8f5dbf06e61,df2bf85a-9e42-40d2-ae10-d8f5dbf06e61,1,0,1e0a3a73-3fd9-43f7-8ee5-e54565264232,1e0a3a73-3fd9-43f7-8ee5-e54565264232,1,0,0f4de605-5df9-4bb9-92e8-f37c6903396e,0f4de605-5df9-4bb9-92e8-f37c6903396e,1,0,66c8a1f2-248d-4b2a-b427-38fb4f63410a,66c8a1f2-248d-4b2a-b427-38fb4f63410a,1,0,a4b3ed40-b440-49f4-ab22-53fdad8c66c6,a4b3ed40-b440-49f4-ab22-53fdad8c66c6,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,9ba59a76-ed54-4d17-83f1-f315a5722a1e,9ba59a76-ed54-4d17-83f1-f315a5722a1e,1,0,a680795f-a870-4642-b45d-12ed24a12395,a680795f-a870-4642-b45d-12ed24a12395,1,0,54936c70-5a08-40fa-8f85-da07dd6a29ec,54936c70-5a08-40fa-8f85-da07dd6a29ec,1,0,8d8f40e2-9897-425e-b08e-58bf46566c30,8d8f40e2-9897-425e-b08e-58bf46566c30,1,0,1bab3154-9f5c-402b-93ae-5da019e96d2b,1bab3154-9f5c-402b-93ae-5da019e96d2b,1,0,5c802dcc-411e-4413-ad88-465127ad0004,5c802dcc-411e-4413-ad88-465127ad0004,1,0,abf392d3-9ded-4dcd-9490-14b6a05329b7,abf392d3-9ded-4dcd-9490-14b6a05329b7,1,0,8e760cb3-50bb-4e19-8887-da538aebef07,8e760cb3-50bb-4e19-8887-da538aebef07,1,0,22db835c-014c-4ff0-90ef-0654e250ff77,22db835c-014c-4ff0-90ef-0654e250ff77,1,0,a81aa069-c1b5-4096-ac8d-660eb0de3561,a81aa069-c1b5-4096-ac8d-660eb0de3561,1,0,8efcb583-4088-4e2d-8ad6-0f3abba7cbb5,8efcb583-4088-4e2d-8ad6-0f3abba7cbb5,1,0,9717140f-0721-47b0-8cab-a9a5dfefad9d,9717140f-0721-47b0-8cab-a9a5dfefad9d,1,0,ebe6f782-635b-457a-bfaa-5b78ac44584b,ebe6f782-635b-457a-bfaa-5b78ac44584b,1,0,644d553d-8286-420a-aa6a-b9c8a2be896f,644d553d-8286-420a-aa6a-b9c8a2be896f,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,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,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,f0402893-724d-4ccd-87f6-d567839b3e70,f0402893-724d-4ccd-87f6-d567839b3e70,1,0,64c84fff-dba1-4f17-bc89-1c69a6f54bea,64c84fff-dba1-4f17-bc89-1c69a6f54bea,1,0,08077c47-4ffd-46f5-9ef5-528ac27bdc75,08077c47-4ffd-46f5-9ef5-528ac27bdc75,1,0,d5a2c4ea-21ce-4673-9aef-9a5eb80a4632,d5a2c4ea-21ce-4673-9aef-9a5eb80a4632,1,0,27089712-b7d7-4a2f-9851-1826d8965f5b,27089712-b7d7-4a2f-9851-1826d8965f5b,1,0,511727f3-b757-4e5b-b7d7-166917029787,511727f3-b757-4e5b-b7d7-166917029787,1,0,a92b3f49-e28a-4f14-8320-7a96d9d08987,a92b3f49-e28a-4f14-8320-7a96d9d08987,1,0,1c34696a-0444-4d3c-8331-17a1b5013368,1c34696a-0444-4d3c-8331-17a1b5013368,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,e97edb4a-468d-499d-924d-aa4e5ee16548,e97edb4a-468d-499d-924d-aa4e5ee16548,1,0,24366a86-0dae-4a68-a180-d8ea7656a286,24366a86-0dae-4a68-a180-d8ea7656a286,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,3c03f78e-c904-47da-a0a1-db5d6b9f7254,3c03f78e-c904-47da-a0a1-db5d6b9f7254,1,0,3bf03ed7-6581-4a11-8fc8-748f46c8dad7,3bf03ed7-6581-4a11-8fc8-748f46c8dad7,1,0,0f28c616-162c-4dba-bd22-f7ea5d23ea5a,0f28c616-162c-4dba-bd22-f7ea5d23ea5a,1,0,39bf2771-1d8b-44bb-8d8b-54d046589ebe,39bf2771-1d8b-44bb-8d8b-54d046589ebe,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,f237a21e-066a-48e6-a5c4-5dc2487c7a3b,f237a21e-066a-48e6-a5c4-5dc2487c7a3b,1,0,8adebe50-a946-40c2-9258-b17efe787e0e,8adebe50-a946-40c2-9258-b17efe787e0e,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,d12c7296-36ab-41e0-83ef-143484958597,d12c7296-36ab-41e0-83ef-143484958597,1,0,2b6c3bcd-7d2a-4e95-8066-99374002689b,2b6c3bcd-7d2a-4e95-8066-99374002689b,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,73cc5b8b-4cba-4988-b2c6-d974dde9723d,73cc5b8b-4cba-4988-b2c6-d974dde9723d,1,0,1b9bbdb1-b8c0-4459-8b5c-656055482f00,1b9bbdb1-b8c0-4459-8b5c-656055482f00,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,093cb330-11af-4839-a00e-a94754d7db46,1,94268f3f-821a-4667-a283-f7884e5e2d21,"3.1.11.142","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7900,1,0,43991be1-5130-49ba-85f1-602787786e9b,43991be1-5130-49ba-85f1-602787786e9b,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,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,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,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,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,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,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,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,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,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,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,1,0,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,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,491b9625-62ce-436b-8245-60decacc4552,491b9625-62ce-436b-8245-60decacc4552,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,fd930b50-4ada-4e7f-8bfd-ed9a7c4e8964,fd930b50-4ada-4e7f-8bfd-ed9a7c4e8964,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,dd911418-ee16-4413-bfe9-4a5a238d3ce1,dd911418-ee16-4413-bfe9-4a5a238d3ce1,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,ea36c426-2b43-4232-9978-0104bafd345d,ea36c426-2b43-4232-9978-0104bafd345d,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,4a046c9b-98a0-4d4f-8e0b-b162d3c6bfc5,4a046c9b-98a0-4d4f-8e0b-b162d3c6bfc5,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,0a83f9ec-eabe-4e8f-9fa9-0067acad6fc4,0a83f9ec-eabe-4e8f-9fa9-0067acad6fc4,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,c90e64cf-f5d4-47b9-8243-7177ac42202e,c90e64cf-f5d4-47b9-8243-7177ac42202e,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,5a83b75a-38b0-4d15-9c6f-c201fa97e485,5a83b75a-38b0-4d15-9c6f-c201fa97e485,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,8ad81449-0b75-4775-a841-ca7fc7bf0d43,8ad81449-0b75-4775-a841-ca7fc7bf0d43,1,0,a1bc6cbe-6b80-414c-8a56-ed253d93524b,a1bc6cbe-6b80-414c-8a56-ed253d93524b,1,0,4d2f1acc-e206-4a0c-af9f-e360c4c30c4b,4d2f1acc-e206-4a0c-af9f-e360c4c30c4b,1,0,d81931b7-8ed8-4e4b-ac25-fedff3955ae0,d81931b7-8ed8-4e4b-ac25-fedff3955ae0,1,0,bda7d180-e2b8-4e04-ae3e-fc3f20202f4e,bda7d180-e2b8-4e04-ae3e-fc3f20202f4e,1,0,8375cfc8-0f27-404b-8c27-3268b22614b3,8375cfc8-0f27-404b-8c27-3268b22614b3,1,0,00bc465c-ea1b-4099-a4f1-a69f5b9a36cc,00bc465c-ea1b-4099-a4f1-a69f5b9a36cc,1,0,bbf65684-1382-4224-b1e8-fbfc4a615fbe,bbf65684-1382-4224-b1e8-fbfc4a615fbe,1,0,5e58dfe4-a93c-4910-95e5-765e33cc11ef,5e58dfe4-a93c-4910-95e5-765e33cc11ef,1,0,eced4ded-b59e-412c-a01f-1db3fb0b436a,eced4ded-b59e-412c-a01f-1db3fb0b436a,1,0,405f04ba-1bcd-478c-9ede-0d7a286a051f,405f04ba-1bcd-478c-9ede-0d7a286a051f,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,7741dfee-c4cc-454d-8e01-99ee82a78b5a,7741dfee-c4cc-454d-8e01-99ee82a78b5a,1,0,67f79e89-b922-4949-aec9-7d411ab727ed,67f79e89-b922-4949-aec9-7d411ab727ed,1,0,61e246f4-fe19-4377-8f69-fd1cb90e3f88,61e246f4-fe19-4377-8f69-fd1cb90e3f88,1,0,05c9e6c3-3e1c-4311-99ac-ec4d59a37205,05c9e6c3-3e1c-4311-99ac-ec4d59a37205,1,0,d437805b-42a9-439d-aef8-abbebe280b69,d437805b-42a9-439d-aef8-abbebe280b69,1,0,b33ccec0-a085-4e91-a26d-c262775d92e8,b33ccec0-a085-4e91-a26d-c262775d92e8,1,0,8adeeac2-d2d0-4d90-b7cb-c7871da477d5,8adeeac2-d2d0-4d90-b7cb-c7871da477d5,1,0,9e082d71-175a-4e80-8cca-6b538d3240eb,9e082d71-175a-4e80-8cca-6b538d3240eb,1,0,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,b8c4aff0-a36d-4be9-9a5e-b0873d83ff15,1,0,43d91051-d5a2-4d2a-8447-7fa917e5ea38,43d91051-d5a2-4d2a-8447-7fa917e5ea38,1,0,e60e1771-c8c0-44b6-b1d3-24e9529d9bd0,e60e1771-c8c0-44b6-b1d3-24e9529d9bd0,1,0,350535b3-05b5-49e7-b4af-1c2b8e645083,350535b3-05b5-49e7-b4af-1c2b8e645083,1,0,68704139-32bb-4b00-b439-147025d06a35,68704139-32bb-4b00-b439-147025d06a35,1,0,8ddf0059-b3d5-4002-a262-5da622d0ccd1,8ddf0059-b3d5-4002-a262-5da622d0ccd1,1,0,e2b6c06a-8202-4cd3-8282-6111c2160afb,e2b6c06a-8202-4cd3-8282-6111c2160afb,1,0,235139f7-1375-4c6b-b6c6-a2e3ca06edc3,235139f7-1375-4c6b-b6c6-a2e3ca06edc3,1,0,df80f175-7f2b-44f8-90d4-118e2e157356,df80f175-7f2b-44f8-90d4-118e2e157356,1,0,2bfd1161-8b6e-415c-92db-743a95373c7e,2bfd1161-8b6e-415c-92db-743a95373c7e,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,1b5b9b46-2bd7-4ba8-8c68-d1178ea72e0f,1b5b9b46-2bd7-4ba8-8c68-d1178ea72e0f,1,0,c79c6554-2934-4c8b-9b16-f07c8702f7b1,c79c6554-2934-4c8b-9b16-f07c8702f7b1,1,0,9125bcb2-0136-4737-ba3f-ec2b0764b4da,9125bcb2-0136-4737-ba3f-ec2b0764b4da,1,0,0302674f-944a-4a45-94c8-a44f93fc5a9a,0302674f-944a-4a45-94c8-a44f93fc5a9a,1,0,69504e02-a88b-4ad6-8890-604928b5a78a,69504e02-a88b-4ad6-8890-604928b5a78a,1,0,b49b47fb-d4dc-4efe-ad07-e8705d787e72,b49b47fb-d4dc-4efe-ad07-e8705d787e72,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,6fc12a2d-a346-48be-8214-c5f3d5208524,6fc12a2d-a346-48be-8214-c5f3d5208524,1,0,67d93adf-c506-4fea-ab1d-b77968a6d041,67d93adf-c506-4fea-ab1d-b77968a6d041,1,0,8dca62d1-49ea-4398-9180-22218a81860a,8dca62d1-49ea-4398-9180-22218a81860a,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,367c49cc-0317-4b0d-846c-79e203f800b8,367c49cc-0317-4b0d-846c-79e203f800b8,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,1960b036-b479-4f4f-80c5-23fc82474082,1960b036-b479-4f4f-80c5-23fc82474082,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,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,ba06091b-b659-4d29-a971-81335cf4060a,ba06091b-b659-4d29-a971-81335cf4060a,1,0,7c376c72-409e-4b5f-a5b6-85b0a1c23f58,7c376c72-409e-4b5f-a5b6-85b0a1c23f58,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,7bbd6fe8-c2fe-4ed2-abd7-2b3fc5b2f410,7bbd6fe8-c2fe-4ed2-abd7-2b3fc5b2f410,1,0,d61fa2fb-a035-469f-9ae1-b78ecd82c83d,d61fa2fb-a035-469f-9ae1-b78ecd82c83d,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,2f2875d7-7598-4ed5-8cc0-a1982ffb5377,2f2875d7-7598-4ed5-8cc0-a1982ffb5377,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,c83f7826-0fef-4a9b-8d36-dee5d93c7417,c83f7826-0fef-4a9b-8d36-dee5d93c7417,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,5c542a16-0f95-43be-85cd-bfd49b15f215,5c542a16-0f95-43be-85cd-bfd49b15f215,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,edc731ba-532f-4fa1-81a8-58beb3b2dfb1,edc731ba-532f-4fa1-81a8-58beb3b2dfb1,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,a5df6ca4-8791-4025-a0e6-07d66e0454b7,a5df6ca4-8791-4025-a0e6-07d66e0454b7,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,2120ad01-6bff-48bd-bad8-324e1301b112,2120ad01-6bff-48bd-bad8-324e1301b112,1,0,b9255acf-dc35-4225-8d3a-544e66b7334d,b9255acf-dc35-4225-8d3a-544e66b7334d,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,66192ff1-7760-48f6-8ce8-a7dbfe4e8a75,66192ff1-7760-48f6-8ce8-a7dbfe4e8a75,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,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,639c2ffc-4514-4b79-89e2-d49caadf828d,639c2ffc-4514-4b79-89e2-d49caadf828d,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,8cb20eb9-306b-4c2a-9a77-6a4632f72b54,8cb20eb9-306b-4c2a-9a77-6a4632f72b54,1,0,87ba683b-b69c-4b23-854c-037b770a3ebb,87ba683b-b69c-4b23-854c-037b770a3ebb,1,0,f3f753ac-b2cb-44ea-a917-811b0ef711f8,f3f753ac-b2cb-44ea-a917-811b0ef711f8,1,0,1357adf5-0f5d-4930-afea-edc89db4d0a6,1357adf5-0f5d-4930-afea-edc89db4d0a6,1,0,505ff816-0d42-458a-b7b5-7d007c15d1be,505ff816-0d42-458a-b7b5-7d007c15d1be,1,0,27811a76-d8bd-43a5-9898-944bdd1388ce,27811a76-d8bd-43a5-9898-944bdd1388ce,1,0,363215fe-59f3-4d9a-a8c7-94049882147a,363215fe-59f3-4d9a-a8c7-94049882147a,1,0,3d4597ca-1c97-4116-b966-87970cd7ebdf,3d4597ca-1c97-4116-b966-87970cd7ebdf,1,0,715f7ba5-ca82-49e6-8671-fc1b55b740b5,715f7ba5-ca82-49e6-8671-fc1b55b740b5,1,0,0add6d62-bf4f-476c-9f6b-37633fcd6b0e,0add6d62-bf4f-476c-9f6b-37633fcd6b0e,1,0,93e495a4-207d-4216-b63e-a8b169b2b801,93e495a4-207d-4216-b63e-a8b169b2b801,1,0,3b47221a-ad5f-419c-b503-a4a88505d336,3b47221a-ad5f-419c-b503-a4a88505d336,1,0,0149a9c0-245b-4dfe-aa98-e8b02ba85c99,0149a9c0-245b-4dfe-aa98-e8b02ba85c99,1,0,94abbe1e-44d8-43c1-90fb-71bc9b6621a9,94abbe1e-44d8-43c1-90fb-71bc9b6621a9,1,0,2edfc563-9fd8-4f7c-8cd4-ba3c27c08840,2edfc563-9fd8-4f7c-8cd4-ba3c27c08840,1,0,d0d052c7-68b9-4b2b-9bbf-4fb083327dca,d0d052c7-68b9-4b2b-9bbf-4fb083327dca,1,0,807194b1-2460-4872-8430-e34f6970178f,807194b1-2460-4872-8430-e34f6970178f,1,0,b0409473-768f-4c29-89d3-6201e8476157,b0409473-768f-4c29-89d3-6201e8476157,1,0,d8415773-616e-43e4-9deb-e92200659d53,d8415773-616e-43e4-9deb-e92200659d53,1,0,b228f0de-7cd7-4337-b021-bc1beb980afd,b228f0de-7cd7-4337-b021-bc1beb980afd,1,0,c9178048-5d75-4d1b-a714-50d772e8d343,c9178048-5d75-4d1b-a714-50d772e8d343,1,0,661b7581-27ad-4cec-8618-9c314cb3a4d5,661b7581-27ad-4cec-8618-9c314cb3a4d5,1,0,310a8f7d-5b1f-428c-885d-1127b7789efd,310a8f7d-5b1f-428c-885d-1127b7789efd,1,0,ee5efc54-aa35-467f-b085-64f24819aaa7,ee5efc54-aa35-467f-b085-64f24819aaa7,1,0,376c8f0b-9d2e-4262-a26f-b63f1163c1c4,376c8f0b-9d2e-4262-a26f-b63f1163c1c4,1,0,d37c82e1-cc9f-492c-a7fb-0e6e9d8f6a72,d37c82e1-cc9f-492c-a7fb-0e6e9d8f6a72,1,0,b7ebf08a-d6be-42db-b28a-460df037d7ba,b7ebf08a-d6be-42db-b28a-460df037d7ba,1,0,ec3c34f6-b3b3-4a96-a231-aaf70db1e73d,ec3c34f6-b3b3-4a96-a231-aaf70db1e73d,1,0,8aa9daa0-e073-49f4-8346-7f2c809fac9a,8aa9daa0-e073-49f4-8346-7f2c809fac9a,1,0,043074cb-64aa-45ed-a2f3-b4fa252431cc,043074cb-64aa-45ed-a2f3-b4fa252431cc,1,0,9cc72214-6e84-45e6-aafd-b36205730faa,9cc72214-6e84-45e6-aafd-b36205730faa,1,0,768eb7d6-d37e-4182-961e-464a5e08781b,768eb7d6-d37e-4182-961e-464a5e08781b,1,0,4df52b04-759d-471d-9de4-3ba4d00d1d22,4df52b04-759d-471d-9de4-3ba4d00d1d22,1,0,5768f558-50b6-4682-960c-6894f6953461,5768f558-50b6-4682-960c-6894f6953461,1,0,74126b65-4f3b-4f8d-b7fc-1d2705822463,74126b65-4f3b-4f8d-b7fc-1d2705822463,1,0,75a4b472-00b6-4b2f-bb6b-03bdc0b05dcf,75a4b472-00b6-4b2f-bb6b-03bdc0b05dcf,1,0,8506ad71-85eb-4f91-b892-4e75318649c8,8506ad71-85eb-4f91-b892-4e75318649c8,1,0,6e3010f5-f725-4361-b853-768412b1ad6f,6e3010f5-f725-4361-b853-768412b1ad6f,1,0,40d8803a-2f6d-4091-be54-9d9827a53e30,40d8803a-2f6d-4091-be54-9d9827a53e30,1,0,ea2b936c-be5c-4316-aca9-4f890f4e6ec9,ea2b936c-be5c-4316-aca9-4f890f4e6ec9,1,0,092501bf-dd8e-4f50-8c58-b1b028b50a5a,092501bf-dd8e-4f50-8c58-b1b028b50a5a,1,0,927cfec6-c1e3-4152-aa2e-afa89359b5eb,927cfec6-c1e3-4152-aa2e-afa89359b5eb,1,0,8e986c32-7296-4329-a908-704398428e4e,8e986c32-7296-4329-a908-704398428e4e,1,0,c5b8870c-14cb-43ae-8d44-d639bd059b0e,c5b8870c-14cb-43ae-8d44-d639bd059b0e,1,0,bc98265e-329d-41d1-9fe8-4c78b7998cd2,bc98265e-329d-41d1-9fe8-4c78b7998cd2,1,0,b44c8a6b-0e3f-446b-95f7-6cb4a58f13e0,b44c8a6b-0e3f-446b-95f7-6cb4a58f13e0,1,0,7601f9c7-2fe7-43fb-a7a9-cf5be4475ce1,7601f9c7-2fe7-43fb-a7a9-cf5be4475ce1,1,0,2da686d3-38b0-4cf1-9962-1440d1afd050,2da686d3-38b0-4cf1-9962-1440d1afd050,1,0,71518348-f155-4616-bbdc-742e36cd3964,71518348-f155-4616-bbdc-742e36cd3964,1,0,723a58ca-9947-4320-9bf4-7c6b58aee2f5,723a58ca-9947-4320-9bf4-7c6b58aee2f5,1,0,2df24487-0b76-451d-a08f-21dc03adefa4,2df24487-0b76-451d-a08f-21dc03adefa4,1,0,00813d65-8dae-45a8-8691-d0b17d6d7754,00813d65-8dae-45a8-8691-d0b17d6d7754,1,0,d88166a7-ef6c-453a-b6cc-1c574cf6ea85,d88166a7-ef6c-453a-b6cc-1c574cf6ea85,1,0,aae1a856-ff88-41bb-a887-1b8c2c3eeab6,aae1a856-ff88-41bb-a887-1b8c2c3eeab6,1,0,cf2b8654-02b6-441e-98a9-cb8bea5cac89,cf2b8654-02b6-441e-98a9-cb8bea5cac89,1,0,2181bde8-031d-425e-875f-0bd153b634f2,2181bde8-031d-425e-875f-0bd153b634f2,1,0,ee1b81ac-0182-48dd-a348-1d8ba38869ca,ee1b81ac-0182-48dd-a348-1d8ba38869ca,1,0,ad385d3e-8201-402a-a1a8-267bc8c6d56b,ad385d3e-8201-402a-a1a8-267bc8c6d56b,1,0,53bb97e3-cd96-462a-b91f-c82678568d9a,53bb97e3-cd96-462a-b91f-c82678568d9a,1,0,32ca3bd6-7b32-4eab-8a4e-aeac26604e08,32ca3bd6-7b32-4eab-8a4e-aeac26604e08,1,0,2a702d37-8e83-4fa0-9969-5d954a7096c1,2a702d37-8e83-4fa0-9969-5d954a7096c1,1,0,71b7225e-6486-4916-85b2-8ec14363ebc8,71b7225e-6486-4916-85b2-8ec14363ebc8,1,0,2df34fcd-3118-4871-95d7-807dece77d3f,2df34fcd-3118-4871-95d7-807dece77d3f,1,0,32db89ab-74d3-4f80-9352-65e405770906,32db89ab-74d3-4f80-9352-65e405770906,1,0,21c22027-2036-4136-a98e-500e5cd679d1,21c22027-2036-4136-a98e-500e5cd679d1,1,0,6fe56db7-0f48-4dd0-b509-5372019ddcc2,6fe56db7-0f48-4dd0-b509-5372019ddcc2,1,0,884990f4-54f1-4b05-a5ed-40ee5a7a549a,884990f4-54f1-4b05-a5ed-40ee5a7a549a,1,0,4cf71e62-c8c2-4bc7-87fc-a89e48f2c007,4cf71e62-c8c2-4bc7-87fc-a89e48f2c007,1,0,e5a9260b-c18b-47bf-bc5a-23294e13025a,e5a9260b-c18b-47bf-bc5a-23294e13025a,1,0,02f00688-a2ed-4f91-bd41-50fc29e13d6c,02f00688-a2ed-4f91-bd41-50fc29e13d6c,1,0,e9f2b435-13e3-401a-9324-ca44986b7676,e9f2b435-13e3-401a-9324-ca44986b7676,1,0,2b854852-ae2d-46d8-8c3b-228af7a3f1db,2b854852-ae2d-46d8-8c3b-228af7a3f1db,1,0,11346c91-ecb6-40e6-a2fb-df7e6f5dbaed,11346c91-ecb6-40e6-a2fb-df7e6f5dbaed,1,0,f4f096ac-45e3-4dfb-8363-be35edceb6c6,f4f096ac-45e3-4dfb-8363-be35edceb6c6,1,0,cb7ff74e-9697-4ea7-88a2-a2f207a5d313,cb7ff74e-9697-4ea7-88a2-a2f207a5d313,1,0,5c3b45fb-0d95-4a15-a42b-5d6baa7a699c,5c3b45fb-0d95-4a15-a42b-5d6baa7a699c,1,0,662940c1-49de-4b94-867b-6c16bf716266,662940c1-49de-4b94-867b-6c16bf716266,1,0,eb2d414c-ba68-47c6-b74b-c8566987b824,eb2d414c-ba68-47c6-b74b-c8566987b824,1,0,ef2706e1-9fc9-42e8-add6-85392a78fff3,ef2706e1-9fc9-42e8-add6-85392a78fff3,1,0,aa609e39-3e3b-4af7-8b79-49293df6b6f2,aa609e39-3e3b-4af7-8b79-49293df6b6f2,1,0,f9188489-ad5e-4eaf-a87a-7191776e4fd4,f9188489-ad5e-4eaf-a87a-7191776e4fd4,1,0,8763c516-04a3-4ca3-9f5d-da3026a46d2a,8763c516-04a3-4ca3-9f5d-da3026a46d2a,1,0,d9fbb0e9-7a19-4742-a958-72c0c3c2307b,d9fbb0e9-7a19-4742-a958-72c0c3c2307b,1,0,d83a4e56-2ab3-44f4-91dc-a6881c62f7c6,d83a4e56-2ab3-44f4-91dc-a6881c62f7c6,1,0,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,9ea7a191-38bb-40cc-8025-d34a5ed17c7c,1,0,c5491956-ebc7-446b-b0b5-4eab34c5a33f,c5491956-ebc7-446b-b0b5-4eab34c5a33f,1,0,2b7de7a1-8e84-4791-9633-7fca8696ff5d,2b7de7a1-8e84-4791-9633-7fca8696ff5d,1,0,97ee6138-4d8a-41d6-8a09-17f8eb306d9a,97ee6138-4d8a-41d6-8a09-17f8eb306d9a,1,0,9abb1972-1c08-44fb-b511-f77d9334d31d,9abb1972-1c08-44fb-b511-f77d9334d31d,1,0,8305c82b-5808-40d6-9668-e54cec298ff1,8305c82b-5808-40d6-9668-e54cec298ff1,1,0,3a8583f1-b6e9-4b4b-9362-4367bc433913,3a8583f1-b6e9-4b4b-9362-4367bc433913,1,0,34aad1b4-550e-4b12-acec-516c8b430cd2,34aad1b4-550e-4b12-acec-516c8b430cd2,1,0,dc16e9b0-0749-4b06-b59d-b2c1031eace6,dc16e9b0-0749-4b06-b59d-b2c1031eace6,1,0,4c3d06cc-22b0-4618-acb5-d1ed387deaa7,4c3d06cc-22b0-4618-acb5-d1ed387deaa7,1,0,216b5d48-5422-4c03-b21d-cdb3e0e35f2c,216b5d48-5422-4c03-b21d-cdb3e0e35f2c,1,0,c067a94e-5bea-4b47-bb57-6cf973a7ad45,c067a94e-5bea-4b47-bb57-6cf973a7ad45,1,0,4c6bc132-e0f6-4eb0-a4aa-bceb103e7f02,4c6bc132-e0f6-4eb0-a4aa-bceb103e7f02,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,27f793d8-da6a-4502-9b7e-82b8af7264d1,27f793d8-da6a-4502-9b7e-82b8af7264d1,1,0,4d3f3c76-999c-4105-8b64-cd4b7bc861b9,4d3f3c76-999c-4105-8b64-cd4b7bc861b9,1,0,efcf8b0f-7124-4096-9f50-b9b95369f196,efcf8b0f-7124-4096-9f50-b9b95369f196,1,0,c1f2db60-011c-4a0b-97bb-42e005ba51c9,c1f2db60-011c-4a0b-97bb-42e005ba51c9,1,0,15111bf5-5bf5-4486-aff0-20ded684b67f,15111bf5-5bf5-4486-aff0-20ded684b67f,1,0,a9221471-3f76-45d2-b467-a1afb8e690f2,a9221471-3f76-45d2-b467-a1afb8e690f2,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,2031ed38-6a8e-4ca7-aa97-449ee36ab7a3,2031ed38-6a8e-4ca7-aa97-449ee36ab7a3,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,993193b3-1dd8-4f5b-8ce7-6a0bf8c4330c,993193b3-1dd8-4f5b-8ce7-6a0bf8c4330c,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,455a1ca6-7212-43ac-b5a2-cf85dd2f9c14,455a1ca6-7212-43ac-b5a2-cf85dd2f9c14,1,0,e7c366f7-c8e3-4ffe-bc5e-ca8a4619ec11,e7c366f7-c8e3-4ffe-bc5e-ca8a4619ec11,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,75378d9c-a364-4b46-a6d1-b745604c46a2,75378d9c-a364-4b46-a6d1-b745604c46a2,1,0,d7376ea8-245a-4342-9a40-c729ca19f966,d7376ea8-245a-4342-9a40-c729ca19f966,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,3fc1e50e-b9da-45f7-8e06-57ef6951ca40,3fc1e50e-b9da-45f7-8e06-57ef6951ca40,1,0,66d67f47-ccbb-4d58-aceb-af876f480750,66d67f47-ccbb-4d58-aceb-af876f480750,1,0,71871ca9-095d-4bde-ac80-1371f578cd51,71871ca9-095d-4bde-ac80-1371f578cd51,1,0,6aa8c1d6-9956-4a98-9992-b119ba5ba1c7,6aa8c1d6-9956-4a98-9992-b119ba5ba1c7,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,2df403a2-57d8-4578-b017-e7cf9550b708,2df403a2-57d8-4578-b017-e7cf9550b708,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,5b14d700-bc59-4bdb-8226-554696336e16,5b14d700-bc59-4bdb-8226-554696336e16,1,0,d1771aec-ba78-4b5d-861a-9ac6d8627dea,d1771aec-ba78-4b5d-861a-9ac6d8627dea,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,5e232e6a-7f68-40d2-9555-4a2b3debe095,5e232e6a-7f68-40d2-9555-4a2b3debe095,1,0,efc8ca7d-966d-4c18-acd9-90f22dd75a7a,efc8ca7d-966d-4c18-acd9-90f22dd75a7a,1,0,1780ffa9-1ca3-4bcb-823f-5e582c4cc25e,1780ffa9-1ca3-4bcb-823f-5e582c4cc25e,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,71cad48a-37f2-4894-b876-9d74fa844828,71cad48a-37f2-4894-b876-9d74fa844828,1,0,0f325868-167b-43d5-b17a-eadc606a8f79,0f325868-167b-43d5-b17a-eadc606a8f79,1,0,51ea38c1-3005-4f4b-b813-91c8e2717683,51ea38c1-3005-4f4b-b813-91c8e2717683,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,584aa9db-e6b0-49f3-ae9d-5b6c796d015c,584aa9db-e6b0-49f3-ae9d-5b6c796d015c,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,3b453f76-ab85-4c65-b008-7f8bf44c9631,3b453f76-ab85-4c65-b008-7f8bf44c9631,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,e976d3cb-52e1-4f3e-ad01-fcac971a552d,e976d3cb-52e1-4f3e-ad01-fcac971a552d,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,d1391e3b-ec29-48c8-8bf5-fa4434a909e9,d1391e3b-ec29-48c8-8bf5-fa4434a909e9,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,2a7f1ce3-2629-4860-886b-67c9f82eeb29,2a7f1ce3-2629-4860-886b-67c9f82eeb29,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,cce593b4-6f7c-466d-892c-7fe89fcddf5d,cce593b4-6f7c-466d-892c-7fe89fcddf5d,1,0,86c73514-9a5b-4b0d-a229-fb7ca54f97d9,86c73514-9a5b-4b0d-a229-fb7ca54f97d9,1,0,c62e42e1-297b-412d-a9bd-e612c88025dd,c62e42e1-297b-412d-a9bd-e612c88025dd,1,0,f094db19-fb78-4a8a-89e2-b79fcc2ddcd5,f094db19-fb78-4a8a-89e2-b79fcc2ddcd5,1,0,2b7ba24e-11e3-4447-8e0a-df9e166f56de,2b7ba24e-11e3-4447-8e0a-df9e166f56de,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,02f1c0db-3217-4c61-aef7-3b87c217739c,02f1c0db-3217-4c61-aef7-3b87c217739c,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,60200fc6-252f-4eaf-88a2-d2cefa25061f,60200fc6-252f-4eaf-88a2-d2cefa25061f,1,0,0798a128-2f87-4173-99ae-115bb8b3a3b8,0798a128-2f87-4173-99ae-115bb8b3a3b8,1,0,40f93527-7bff-4f9c-b855-2b69f7c5eb33,40f93527-7bff-4f9c-b855-2b69f7c5eb33,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,676b2ea2-a559-4685-b5ca-7b619b02f101,676b2ea2-a559-4685-b5ca-7b619b02f101,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,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,62629f36-5d1e-460f-9ac5-983607c40cb2,62629f36-5d1e-460f-9ac5-983607c40cb2,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,32cab8f2-cebf-4508-9396-eb41f4e8ba22,32cab8f2-cebf-4508-9396-eb41f4e8ba22,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,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,b77edd78-2fad-4926-a74f-02f2135356e6,b77edd78-2fad-4926-a74f-02f2135356e6,1,0,57b0b6b2-bbdd-48d2-a52e-e3495e00860e,57b0b6b2-bbdd-48d2-a52e-e3495e00860e,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,a511f7d7-60ef-4a5c-8f8e-ddbee065eccd,a511f7d7-60ef-4a5c-8f8e-ddbee065eccd,1,0,6fa87b5a-fab0-48b6-b8ab-1aaa8c82d81d,6fa87b5a-fab0-48b6-b8ab-1aaa8c82d81d,1,0,323ef3df-b1cb-4927-a16e-2dbf11e37ae8,323ef3df-b1cb-4927-a16e-2dbf11e37ae8,1,0,e1760aea-29e3-4a45-b02a-b2b96cb73ec4,e1760aea-29e3-4a45-b02a-b2b96cb73ec4,1,0,c2b721a7-1e61-4b72-ba75-f4601d52e98a,c2b721a7-1e61-4b72-ba75-f4601d52e98a,1,0,a4ecd21c-a980-47f8-9944-b1dd7b5a41f3,a4ecd21c-a980-47f8-9944-b1dd7b5a41f3,1,0,dd8c783c-0559-47bb-a089-8fd0783c1a94,dd8c783c-0559-47bb-a089-8fd0783c1a94,1,0,d2855fab-f319-4df8-accc-0727e442bad7,d2855fab-f319-4df8-accc-0727e442bad7,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,1f018218-2281-4e32-a486-f32386959e5f,1f018218-2281-4e32-a486-f32386959e5f,1,0,7fc26c5a-7d01-487d-aa33-3aa81d51b9a2,7fc26c5a-7d01-487d-aa33-3aa81d51b9a2,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,90f3f3c5-4ca9-4c8f-9b73-f67760a6d2f0,90f3f3c5-4ca9-4c8f-9b73-f67760a6d2f0,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,beb07009-6612-4052-a991-888138da8e30,beb07009-6612-4052-a991-888138da8e30,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,57502594-74dd-45fe-9234-9a477d5b9741,57502594-74dd-45fe-9234-9a477d5b9741,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,0753701c-016e-4385-85c0-a485ca50efdc,0753701c-016e-4385-85c0-a485ca50efdc,1,0,c3a6b470-37d5-4499-badb-33b73b52e346,c3a6b470-37d5-4499-badb-33b73b52e346,1,0,24415097-bde5-447a-ac74-bd9bf0eb19fc,24415097-bde5-447a-ac74-bd9bf0eb19fc,1,0,a29d42d6-a448-4940-804d-d1be31da000d,a29d42d6-a448-4940-804d-d1be31da000d,1,0,dd780b76-2a10-40b5-9bcd-7bc8c9b06651,dd780b76-2a10-40b5-9bcd-7bc8c9b06651,1,0,8be6c4a3-d75b-405d-8d98-9baf6f20abb2,8be6c4a3-d75b-405d-8d98-9baf6f20abb2,1,0,7cbd82e3-4bf8-46ab-8504-4bf30523fa2a,7cbd82e3-4bf8-46ab-8504-4bf30523fa2a,1,0,c4b01e52-4136-460d-bd82-970177f1e256,c4b01e52-4136-460d-bd82-970177f1e256,1,0,9533784b-311a-4dbe-b73e-7348aabd387e,9533784b-311a-4dbe-b73e-7348aabd387e,1,0,56bdc69a-d8e8-4da6-a3a5-41ef32bbb626,56bdc69a-d8e8-4da6-a3a5-41ef32bbb626,1,0,c770cd75-f370-4042-9a5a-82b2fc1853cc,c770cd75-f370-4042-9a5a-82b2fc1853cc,1,0,6ee215f9-20ab-4c48-b2c2-cb1869e8906c,6ee215f9-20ab-4c48-b2c2-cb1869e8906c,1,0,b74af9c1-bc44-40ce-b093-d1f548a1742f,b74af9c1-bc44-40ce-b093-d1f548a1742f,1,0,1b401a14-4581-4f24-aaca-5f204f8fcf8b,1b401a14-4581-4f24-aaca-5f204f8fcf8b,1,0,267f7ee6-7b02-4e48-aa1e-145f586edd87,267f7ee6-7b02-4e48-aa1e-145f586edd87,1,0,e1e8ea42-6886-430a-bc59-249259112e6a,e1e8ea42-6886-430a-bc59-249259112e6a,1,0,1e27f3cd-1c9e-4f9f-b2ff-88fb1da37e11,1e27f3cd-1c9e-4f9f-b2ff-88fb1da37e11,1,0,3dcf815c-5c9a-4a78-a42e-7c9ff6faaeb8,3dcf815c-5c9a-4a78-a42e-7c9ff6faaeb8,1,0,1379f050-4f1c-4c41-993e-f7efc71325fb,1379f050-4f1c-4c41-993e-f7efc71325fb,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,753c70c1-af12-4ec2-ac12-dd1ce33f729f,753c70c1-af12-4ec2-ac12-dd1ce33f729f,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,2c2870fd-7a2a-4c0c-8db2-42e961c7be62,2c2870fd-7a2a-4c0c-8db2-42e961c7be62,1,0,46d1eb47-f909-4f07-93f6-d773770a504f,46d1eb47-f909-4f07-93f6-d773770a504f,1,0,600382ec-d6d1-45ad-a052-853dcd4a9b56,600382ec-d6d1-45ad-a052-853dcd4a9b56,1,0,d54d069e-28b2-4a3d-904c-af49eaf0d4d0,d54d069e-28b2-4a3d-904c-af49eaf0d4d0,1,0,36edf443-2719-4860-b8f8-47972361a869,36edf443-2719-4860-b8f8-47972361a869,1,0,95229b1b-6bf5-44c1-89aa-5decf00d6a08,95229b1b-6bf5-44c1-89aa-5decf00d6a08,1,0,00149051-cb5d-404b-9bc7-6347f3f29bf6,00149051-cb5d-404b-9bc7-6347f3f29bf6,1,0,2f62312d-feaa-4fd5-8c31-5490557ff4b3,2f62312d-feaa-4fd5-8c31-5490557ff4b3,1,0,d543b975-4f0c-4bd2-858f-7c9f4e96072a,d543b975-4f0c-4bd2-858f-7c9f4e96072a,1,0,9482e272-b551-4ba5-a27a-06fa0359a8d5,9482e272-b551-4ba5-a27a-06fa0359a8d5,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,5e4ec9d8-bb60-4dfb-89ba-002527dc149b,5e4ec9d8-bb60-4dfb-89ba-002527dc149b,1,0,6c0cc7b1-d408-4fd1-9b83-71fb5ce001b1,6c0cc7b1-d408-4fd1-9b83-71fb5ce001b1,1,0,a5de65da-c2d5-4219-bc27-a63c4f295b52,a5de65da-c2d5-4219-bc27-a63c4f295b52,1,0,9d6a4fc0-b231-4ef8-8179-9f810ac59cf0,9d6a4fc0-b231-4ef8-8179-9f810ac59cf0,1,0,bf463763-3801-4664-9d04-4d9fd7fe8c43,bf463763-3801-4664-9d04-4d9fd7fe8c43,1,0,c3f59d60-ca4b-4754-9f90-b1e5c76faa80,c3f59d60-ca4b-4754-9f90-b1e5c76faa80,1,0,73cc9301-8ed1-4345-bbdf-ab52b94f4def,73cc9301-8ed1-4345-bbdf-ab52b94f4def,1,0,43a0760f-3635-4e6a-a68a-1a2232245329,43a0760f-3635-4e6a-a68a-1a2232245329,1,0,5c64a4dd-2b9f-4110-abe2-266e6d8638fb,5c64a4dd-2b9f-4110-abe2-266e6d8638fb,1,0,d408d054-86ac-4471-a29d-efed65989899,d408d054-86ac-4471-a29d-efed65989899,1,0,3e979ec3-b544-4e37-8be6-95dce0a2b780,3e979ec3-b544-4e37-8be6-95dce0a2b780,1,0,2444eed3-25c7-4abc-a9a8-f3f3a8201267,2444eed3-25c7-4abc-a9a8-f3f3a8201267,1,0,e91118e9-d054-41a1-bfe9-343179718f33,e91118e9-d054-41a1-bfe9-343179718f33,1,0,042245ef-3a30-46fb-b3e3-6599d5426cbd,042245ef-3a30-46fb-b3e3-6599d5426cbd,1,0,d1034240-ab06-413a-9828-a5c7dc879680,d1034240-ab06-413a-9828-a5c7dc879680,1,0,5dd0f264-6d9f-41e4-92b6-e8b4fa3b4d84,5dd0f264-6d9f-41e4-92b6-e8b4fa3b4d84,1,0,72ea5884-9658-4273-9352-a7e8be81f622,72ea5884-9658-4273-9352-a7e8be81f622,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,12d19666-e996-4b55-b43c-b3a541f849a7,12d19666-e996-4b55-b43c-b3a541f849a7,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,61cfdc9a-49c3-4316-b38d-997910cf25c3,61cfdc9a-49c3-4316-b38d-997910cf25c3,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,67feda40-f9d6-4782-bba1-a5e0fccd5350,67feda40-f9d6-4782-bba1-a5e0fccd5350,1,0,9bd92328-8c9c-4882-8956-a1fccf555a64,9bd92328-8c9c-4882-8956-a1fccf555a64,1,0,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,cafc6b5b-a76a-4b1b-9592-ba440f7bf34f,1,0,e5033559-9d58-4b9b-a739-40c419e82192,e5033559-9d58-4b9b-a739-40c419e82192,1,0,594c79fa-0fdc-41d5-b122-04615dca3752,594c79fa-0fdc-41d5-b122-04615dca3752,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,4f9b6c01-0919-41ba-91dc-49497d0fecf7,4f9b6c01-0919-41ba-91dc-49497d0fecf7,1,0,e01c575c-51ce-4e06-978b-da59b8bfb029,e01c575c-51ce-4e06-978b-da59b8bfb029,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,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,ea0a498a-a1cb-4f28-88cb-0bc62971172b,ea0a498a-a1cb-4f28-88cb-0bc62971172b,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,801facc3-3b3b-4d0a-93c6-54a1f3495291,801facc3-3b3b-4d0a-93c6-54a1f3495291,1,0,f10167ac-f7bd-42fb-8daa-864593fcc115,f10167ac-f7bd-42fb-8daa-864593fcc115,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,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,37041c83-b1ed-4eec-a011-a2a1788f867e,37041c83-b1ed-4eec-a011-a2a1788f867e,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,7406da96-2e16-42a0-9522-d76547708eca,7406da96-2e16-42a0-9522-d76547708eca,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,e475a311-7cef-45e2-9ed2-0bded8b5c963,e475a311-7cef-45e2-9ed2-0bded8b5c963,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,47091af9-954c-489f-a560-683ca3d6996e,47091af9-954c-489f-a560-683ca3d6996e,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,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,355eb7bc-651a-4b24-abcd-61bb83222b7e,355eb7bc-651a-4b24-abcd-61bb83222b7e,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,4e6734a0-3bf8-4e71-bd38-5526819609f4,4e6734a0-3bf8-4e71-bd38-5526819609f4,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,05d5befc-493c-4939-a364-ccbf5e11f924,05d5befc-493c-4939-a364-ccbf5e11f924,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,9bb33b9f-0a27-4edd-b3b2-1c20a75d0f20,9bb33b9f-0a27-4edd-b3b2-1c20a75d0f20,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,7abb55d2-eac6-44a0-9ebc-fa26a7f0c028,7abb55d2-eac6-44a0-9ebc-fa26a7f0c028,1,0,bdafe976-c8d6-413a-8d61-765a02014e5d,bdafe976-c8d6-413a-8d61-765a02014e5d,1,0,22ddedc0-a20c-4253-8c1f-22e5ab784987,22ddedc0-a20c-4253-8c1f-22e5ab784987,1,0,6fc11eb6-ee52-425c-a311-516d0edbb680,6fc11eb6-ee52-425c-a311-516d0edbb680,1,0,68e207e7-8c20-426d-8a0e-c3dd4d683631,68e207e7-8c20-426d-8a0e-c3dd4d683631,1,0,6d7fa2f9-7ca4-4ad6-b94b-8267768a0f04,6d7fa2f9-7ca4-4ad6-b94b-8267768a0f04,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,6eb6003c-71cb-4be8-a375-abd5c9f7336b,6eb6003c-71cb-4be8-a375-abd5c9f7336b,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,584637f2-9d4f-4972-bbe8-aba9bf0853bc,584637f2-9d4f-4972-bbe8-aba9bf0853bc,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,d7f68340-663c-49f2-b02b-e71501515a60,d7f68340-663c-49f2-b02b-e71501515a60,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,bd206271-1388-4759-8992-da81507613be,bd206271-1388-4759-8992-da81507613be,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,c45fcf7f-5676-4a96-a73c-a6d9d98ac46b,c45fcf7f-5676-4a96-a73c-a6d9d98ac46b,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,11c610f5-0f5d-49aa-9015-4a514dfcf515,11c610f5-0f5d-49aa-9015-4a514dfcf515,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,f71eceb3-ef2e-4e6c-bf9c-e7e7d42c1c7c,f71eceb3-ef2e-4e6c-bf9c-e7e7d42c1c7c,1,0,b91b1b08-f35d-40b2-83d8-ecc761124b05,b91b1b08-f35d-40b2-83d8-ecc761124b05,1,0,5fb7ebb4-e2ce-40ae-aa1c-9351dc66919b,5fb7ebb4-e2ce-40ae-aa1c-9351dc66919b,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,4e6989e6-67ac-4c3c-994d-0c3941cc1156,4e6989e6-67ac-4c3c-994d-0c3941cc1156,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,6e215f9e-4e41-4c11-80de-04023f792ad6,6e215f9e-4e41-4c11-80de-04023f792ad6,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,f6b8e6ae-7d3e-4f6c-bd74-66ee7593868c,f6b8e6ae-7d3e-4f6c-bd74-66ee7593868c,1,0,1682d528-87bf-48c5-acf9-57ab654a615a,1682d528-87bf-48c5-acf9-57ab654a615a,1,0,e730ea3f-4f2a-4e21-8851-bccc51830cfe,e730ea3f-4f2a-4e21-8851-bccc51830cfe,1,0,193ab4a7-7eee-4374-95cf-2d907a3ba971,193ab4a7-7eee-4374-95cf-2d907a3ba971,1,0,e2779397-46ed-4d95-8529-45896f9567d2,e2779397-46ed-4d95-8529-45896f9567d2,1,0,3002d5d8-1b7d-4252-9e5d-9a533bf03ca8,3002d5d8-1b7d-4252-9e5d-9a533bf03ca8,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,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,7e3283df-05a6-4dc5-a786-056c71bdbf6f,7e3283df-05a6-4dc5-a786-056c71bdbf6f,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,b9e93e8f-1d4b-4bbb-ac1b-c8d26cfd1da2,b9e93e8f-1d4b-4bbb-ac1b-c8d26cfd1da2,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,faf89779-2290-4d37-b1ea-e81b1b79f74c,faf89779-2290-4d37-b1ea-e81b1b79f74c,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ac847dc9-e222-45cf-af4a-6fa863c919a8,ac847dc9-e222-45cf-af4a-6fa863c919a8,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,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,2895ac1f-5f15-422d-9d90-2df87255a92a,2895ac1f-5f15-422d-9d90-2df87255a92a,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,42107b14-9373-418a-a41d-35c87434c51a,42107b14-9373-418a-a41d-35c87434c51a,1,0,24d8ce8d-e94c-4168-abad-d0ce5e6cbf1b,24d8ce8d-e94c-4168-abad-d0ce5e6cbf1b,1,0,8786575a-eab6-46bf-be3a-167e2d5b41dd,8786575a-eab6-46bf-be3a-167e2d5b41dd,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,c96b58a2-db6e-4a0f-82fd-fc115a169b18,c96b58a2-db6e-4a0f-82fd-fc115a169b18,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,9518b3f5-b478-4a82-b884-d2d0947197a6,9518b3f5-b478-4a82-b884-d2d0947197a6,1,0,c1f36917-64aa-4de0-8a30-53bb011f151e,c1f36917-64aa-4de0-8a30-53bb011f151e,1,0,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,9aa0a0cb-9547-4868-9495-b00f3ecd2b3a,1,0,a9e31d90-fe65-47c3-8109-6e1eae862f53,a9e31d90-fe65-47c3-8109-6e1eae862f53,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,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,967bf537-f742-4d9a-95ff-afaa5525a2f0,967bf537-f742-4d9a-95ff-afaa5525a2f0,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,2e3cdbed-3f52-4f6e-883e-9e7d30c67099,2e3cdbed-3f52-4f6e-883e-9e7d30c67099,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,3e453cca-aac3-4ff3-bb15-32c09f43e7b2,3e453cca-aac3-4ff3-bb15-32c09f43e7b2,1,0,49bcd9e6-f312-4bb6-959a-242b73907591,49bcd9e6-f312-4bb6-959a-242b73907591,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,e8cc4e0f-e9c2-4a24-a50e-f5be5ed21019,e8cc4e0f-e9c2-4a24-a50e-f5be5ed21019,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,87251f18-17da-497a-9b39-f84a388c855c,87251f18-17da-497a-9b39-f84a388c855c,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,a4878c33-f156-44cc-b114-5670403075eb,a4878c33-f156-44cc-b114-5670403075eb,1,0,cc567ef8-3e63-4c53-a14a-899221ec9e46,cc567ef8-3e63-4c53-a14a-899221ec9e46,1,0,0f1f8bc8-73ce-4384-9496-9bc2d0e212be,0f1f8bc8-73ce-4384-9496-9bc2d0e212be,1,0,695ad525-d1ba-42fb-adc1-6c44ac433c69,695ad525-d1ba-42fb-adc1-6c44ac433c69,1,0,93afedb2-2d93-4611-b0fd-830bf33789c2,93afedb2-2d93-4611-b0fd-830bf33789c2,1,0,026dadd4-a698-4d56-9b72-7ad9f224e502,026dadd4-a698-4d56-9b72-7ad9f224e502,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,0c2f6d9b-2060-4575-86cd-683ebb4bb059,0c2f6d9b-2060-4575-86cd-683ebb4bb059,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,6f8a9249-457b-47ac-9160-7c566b8d00d5,6f8a9249-457b-47ac-9160-7c566b8d00d5,1,0,2ddd57c1-ab9b-4293-b956-1eb1f7a7a0fc,2ddd57c1-ab9b-4293-b956-1eb1f7a7a0fc,1,0,5bdd3b52-aa26-4610-beb9-3673254ba589,5bdd3b52-aa26-4610-beb9-3673254ba589,1,0,ebe7341e-50ab-4a2a-8299-b01ab00c8300,ebe7341e-50ab-4a2a-8299-b01ab00c8300,1,0,08a97633-888e-4d37-ba24-684070eeea43,08a97633-888e-4d37-ba24-684070eeea43,1,0,73126993-73e6-4734-9e72-287b672f40ad,73126993-73e6-4734-9e72-287b672f40ad,1,0,0b868a9d-984f-483a-9739-c1a73c05602f,0b868a9d-984f-483a-9739-c1a73c05602f,1,0,ec2ec52e-f9e9-4392-8ffb-e89626f2361d,ec2ec52e-f9e9-4392-8ffb-e89626f2361d,1,0,a4de8867-22bf-4fe2-8167-82bd3a56cd57,a4de8867-22bf-4fe2-8167-82bd3a56cd57,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,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,8e247254-f454-4436-9b5b-a8dbb8223cc7,8e247254-f454-4436-9b5b-a8dbb8223cc7,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,e1a375da-c16c-4616-8a33-9414c13a48c7,e1a375da-c16c-4616-8a33-9414c13a48c7,1,0,99993a9b-97e9-4606-94fa-2da43a03c3b2,99993a9b-97e9-4606-94fa-2da43a03c3b2,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,b20780cd-53d9-48bb-ac3f-2aa4eb6ab3c5,b20780cd-53d9-48bb-ac3f-2aa4eb6ab3c5,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,ddac9d84-61b8-49e7-b468-e4aef4403d64,ddac9d84-61b8-49e7-b468-e4aef4403d64,1,0,ae2eec04-8327-4c51-89d3-eb6b725d6e8b,ae2eec04-8327-4c51-89d3-eb6b725d6e8b,1,0,350b262d-2b1f-43de-9994-6abfd2e4e761,350b262d-2b1f-43de-9994-6abfd2e4e761,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,740a6d15-23e8-43a0-af3c-71a544f8fa4f,740a6d15-23e8-43a0-af3c-71a544f8fa4f,1,0,66b0ee64-b25a-4555-9bc2-88c3cba9f998,66b0ee64-b25a-4555-9bc2-88c3cba9f998,1,0,e461818e-5d2f-49ec-8219-3a765461274a,e461818e-5d2f-49ec-8219-3a765461274a,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,16080b3d-b385-4e44-af16-d1a357a2b842,16080b3d-b385-4e44-af16-d1a357a2b842,1,0,8de85e8b-6828-44a3-8481-4ff4c8c2b9e2,8de85e8b-6828-44a3-8481-4ff4c8c2b9e2,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,090e521e-391a-4ce7-9f7c-1c459fd221eb,090e521e-391a-4ce7-9f7c-1c459fd221eb,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,e7903c89-5282-4771-8f9b-536694b7816e,e7903c89-5282-4771-8f9b-536694b7816e,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,72c78946-146e-44a2-a547-abf5229e3815,72c78946-146e-44a2-a547-abf5229e3815,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,2ab4f8a1-8c1d-4ae2-93c0-a3556775e0ac,2ab4f8a1-8c1d-4ae2-93c0-a3556775e0ac,1,0,d9020b76-af47-4f08-ad32-8515fa4bda00,d9020b76-af47-4f08-ad32-8515fa4bda00,1,0,4c2562a8-58df-4598-89d7-aaa2b88fdc64,4c2562a8-58df-4598-89d7-aaa2b88fdc64,1,0,0b27acf5-e68b-4a40-990e-aa983f2c2e84,0b27acf5-e68b-4a40-990e-aa983f2c2e84,1,0,8af8b894-8518-45ba-871f-547137c07713,8af8b894-8518-45ba-871f-547137c07713,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,bea3998a-d1d3-45ed-bebb-412b8a777005,bea3998a-d1d3-45ed-bebb-412b8a777005,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,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,517ac144-ecb9-4d14-83ea-01e58f0901fc,517ac144-ecb9-4d14-83ea-01e58f0901fc,1,0,b8cccd45-f98a-4b25-a8b4-be2c1b7ec1da,b8cccd45-f98a-4b25-a8b4-be2c1b7ec1da,1,0,61c1ff46-2a30-43bb-b1df-4db2271b1b12,61c1ff46-2a30-43bb-b1df-4db2271b1b12,1,0,b74a5f88-9e1d-437a-9943-92ac4d7107de,b74a5f88-9e1d-437a-9943-92ac4d7107de,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,e5687b69-4d9a-4d21-a506-294941f18056,e5687b69-4d9a-4d21-a506-294941f18056,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,b2bd5a0e-d60c-411d-a001-ecdee0152b1a,b2bd5a0e-d60c-411d-a001-ecdee0152b1a,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,bab9810a-d08a-4484-a6d7-74e1c70a9bbc,bab9810a-d08a-4484-a6d7-74e1c70a9bbc,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,72d579ee-8cd5-4b08-9f3f-eb15f14ee194,72d579ee-8cd5-4b08-9f3f-eb15f14ee194,1,0,3a587e15-8ea8-4b4a-b9e8-feb2b874f1b0,3a587e15-8ea8-4b4a-b9e8-feb2b874f1b0,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,447da3d4-5d94-4cd2-8540-53c0836e6173,447da3d4-5d94-4cd2-8540-53c0836e6173,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,2721688b-9c0a-4069-8a17-4bb014bd7832,2721688b-9c0a-4069-8a17-4bb014bd7832,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,dc2b7a9e-132b-4a30-b7a8-ec72bf3d2e63,dc2b7a9e-132b-4a30-b7a8-ec72bf3d2e63,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,6fbc9a01-ddcb-47ab-84c0-f08b103be12b,6fbc9a01-ddcb-47ab-84c0-f08b103be12b,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,0b2b1287-e361-43d4-98c9-99b5c653cdd4,0b2b1287-e361-43d4-98c9-99b5c653cdd4,1,0,2caee148-4962-4947-bca7-9477741b8c1a,2caee148-4962-4947-bca7-9477741b8c1a,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,285d4d7f-acac-4e66-be6b-97aeecd2e383,285d4d7f-acac-4e66-be6b-97aeecd2e383,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,9c472614-595a-4456-aadd-f629455a754e,9c472614-595a-4456-aadd-f629455a754e,1,0,c205ddad-54ed-476f-85cd-e133313fe3a5,c205ddad-54ed-476f-85cd-e133313fe3a5,1,0,98edbda8-2511-4743-b643-28934af0ed74,98edbda8-2511-4743-b643-28934af0ed74,1,0,db1f2fdc-6862-43c0-aefa-499f8c2b585c,db1f2fdc-6862-43c0-aefa-499f8c2b585c,1,0,235be246-6c28-4771-923d-cffd541ec26e,235be246-6c28-4771-923d-cffd541ec26e,1,0,c9a0afb1-65fa-45ea-aabb-5ec080d9406e,c9a0afb1-65fa-45ea-aabb-5ec080d9406e,1,0,32b07bc0-3b2a-4244-93d4-49f172ad3ffb,32b07bc0-3b2a-4244-93d4-49f172ad3ffb,1,0,7abec628-65c3-4a44-ae11-99c2ffc592a3,7abec628-65c3-4a44-ae11-99c2ffc592a3,1,0,7b263bb6-4a6b-46c6-a1f0-48721ac1694b,7b263bb6-4a6b-46c6-a1f0-48721ac1694b,1,0,80b4e8c4-1fb3-4c3b-883f-93b5e213f46e,80b4e8c4-1fb3-4c3b-883f-93b5e213f46e,1,0,98061bca-6e72-479b-9125-a0f9452f4ed1,98061bca-6e72-479b-9125-a0f9452f4ed1,1,0,4d50203f-4577-4615-8001-4e4ac98fd392,4d50203f-4577-4615-8001-4e4ac98fd392,1,0,5c06642b-9c31-485b-87dd-48c6d7dbd30f,5c06642b-9c31-485b-87dd-48c6d7dbd30f,1,0,eeac3530-8897-4ab6-8fe8-09fcbfcd9fde,eeac3530-8897-4ab6-8fe8-09fcbfcd9fde,1,0,c3e2e470-f0bc-4fda-8c0e-4fb900e564a9,c3e2e470-f0bc-4fda-8c0e-4fb900e564a9,1,0,7fb0f8fd-4673-4f1d-a6ef-bc4ba9a2229f,7fb0f8fd-4673-4f1d-a6ef-bc4ba9a2229f,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,5730dde8-8334-4184-b1c4-a45e1b5cb154,5730dde8-8334-4184-b1c4-a45e1b5cb154,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,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,8568b969-4d05-42ab-b30a-c937619c7c93,8568b969-4d05-42ab-b30a-c937619c7c93,1,0,1afea577-b99e-41de-b613-47dd0b480a91,1afea577-b99e-41de-b613-47dd0b480a91,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,6a8de94b-7b62-4d91-80df-e47c4ef90864,6a8de94b-7b62-4d91-80df-e47c4ef90864,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,91d42c1f-af78-4c21-8071-61a347a94d5d,91d42c1f-af78-4c21-8071-61a347a94d5d,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,b46d482e-bf89-4bd7-8704-27ae42538afd,b46d482e-bf89-4bd7-8704-27ae42538afd,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,b8014eb2-5f9e-43ce-9a3b-f196f880fda5,b8014eb2-5f9e-43ce-9a3b-f196f880fda5,1,0,f72f3c7b-0a24-402e-a024-869f9e932928,f72f3c7b-0a24-402e-a024-869f9e932928,1,0,eec6a9b7-8e3a-4670-bf64-bc708973349d,eec6a9b7-8e3a-4670-bf64-bc708973349d,1,0,15b95954-144e-46b1-a945-39bef6fa9fcb,15b95954-144e-46b1-a945-39bef6fa9fcb,1,0,1b3324f3-0cce-4f14-b61f-26d37effb5f0,1b3324f3-0cce-4f14-b61f-26d37effb5f0,1,0,dbc9346c-6438-4bd2-bffb-e4650ef9cab7,dbc9346c-6438-4bd2-bffb-e4650ef9cab7,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,9162a85e-a385-42b0-b809-da916fce44b7,9162a85e-a385-42b0-b809-da916fce44b7,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,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,322a8a3c-35c0-4aaf-897e-0946561b9636,322a8a3c-35c0-4aaf-897e-0946561b9636,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,a077a18d-053f-4029-b73d-d606db241fe6,a077a18d-053f-4029-b73d-d606db241fe6,1,0,5a2f2284-4f86-4ee4-8b53-296c2787f320,5a2f2284-4f86-4ee4-8b53-296c2787f320,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,e8b92505-007b-4a95-a7a1-291988090228,e8b92505-007b-4a95-a7a1-291988090228,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,8d4685b7-ba72-4a28-8182-3104e1330567,8d4685b7-ba72-4a28-8182-3104e1330567,1,0,b91b93f0-29ca-452d-97be-7109fb248e22,b91b93f0-29ca-452d-97be-7109fb248e22,1,0,c1f7437a-b278-4941-b580-75c6693155d0,c1f7437a-b278-4941-b580-75c6693155d0,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,a6a84818-e14c-4554-ac0a-e522a9615997,a6a84818-e14c-4554-ac0a-e522a9615997,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,d60e7164-c686-4c50-b831-a4ee4f505c35,d60e7164-c686-4c50-b831-a4ee4f505c35,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,1a3ad05f-77b5-467e-99fe-c2b5e734ba87,1a3ad05f-77b5-467e-99fe-c2b5e734ba87,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,398cd724-3c08-49b3-a5b4-4186f1d6b32d,398cd724-3c08-49b3-a5b4-4186f1d6b32d,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,1d1248ce-c31a-41f9-85b2-0d97ae2bea82,1d1248ce-c31a-41f9-85b2-0d97ae2bea82,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,836dfba9-c948-409b-825f-f0d869872835,836dfba9-c948-409b-825f-f0d869872835,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,4e6d38c5-2a09-4473-9e04-8f631fe88c61,4e6d38c5-2a09-4473-9e04-8f631fe88c61,1,0,4b4f5777-7c36-461e-9d3e-1baaf0497d62,4b4f5777-7c36-461e-9d3e-1baaf0497d62,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,141c7b66-d689-4c8e-ace8-b8e1d8c7fbaa,141c7b66-d689-4c8e-ace8-b8e1d8c7fbaa,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,8583ca82-a4f5-4f2a-9b9a-7807b4560e85,8583ca82-a4f5-4f2a-9b9a-7807b4560e85,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,baec0e60-c410-4b95-8126-f77fd06225b4,baec0e60-c410-4b95-8126-f77fd06225b4,1,0,91275c80-d7f7-47c6-ba76-4a10d394f55b,91275c80-d7f7-47c6-ba76-4a10d394f55b,1,0,b92edc24-fcf7-498d-97a2-0c7f3005c814,b92edc24-fcf7-498d-97a2-0c7f3005c814,1,0,2b97f923-6a4e-4894-9ece-5129d8832864,2b97f923-6a4e-4894-9ece-5129d8832864,1,0,3e2b17cc-e8d1-41fa-9c1a-bbefd1524852,3e2b17cc-e8d1-41fa-9c1a-bbefd1524852,1,0,907a5c35-127a-4b74-9e9b-d0ec3d54ec1a,907a5c35-127a-4b74-9e9b-d0ec3d54ec1a,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,15a4595f-92d8-4084-bb92-cdc587b3a04e,15a4595f-92d8-4084-bb92-cdc587b3a04e,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,5e3bb85e-24cf-45fc-9b72-50bec76cb591,5e3bb85e-24cf-45fc-9b72-50bec76cb591,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,6cc8da97-8752-4c6b-88ef-f7e8ff5dd693,6cc8da97-8752-4c6b-88ef-f7e8ff5dd693,1,0,8683dfa2-0ad9-4345-85e8-a6d2e40881e5,8683dfa2-0ad9-4345-85e8-a6d2e40881e5,1,0,e70ec2f5-5723-4fb0-9b81-c0979943a46a,e70ec2f5-5723-4fb0-9b81-c0979943a46a,1,0,eb125af7-4e19-4235-8d03-361b60a8f68a,eb125af7-4e19-4235-8d03-361b60a8f68a,1,0,bcd1077a-2d19-4bc1-bded-a85818765ac1,bcd1077a-2d19-4bc1-bded-a85818765ac1,1,0,b79ce000-28f7-4630-a5a3-cecb9ef8a0a1,b79ce000-28f7-4630-a5a3-cecb9ef8a0a1,1,0,3ff0b4e6-6afa-4aa8-a20e-84a9d2d74f86,3ff0b4e6-6afa-4aa8-a20e-84a9d2d74f86,1,0,eb747bc2-f81f-4ec3-b216-2457a87683ae,eb747bc2-f81f-4ec3-b216-2457a87683ae,1,0,0ad77f2c-24db-4fda-a79f-984c0c8beac0,0ad77f2c-24db-4fda-a79f-984c0c8beac0,1,0,cfb3ea4b-a092-4c5f-aef0-a83ff8829d24,cfb3ea4b-a092-4c5f-aef0-a83ff8829d24,1,0,02bc23cf-c600-4470-bb84-59cdac35eea9,02bc23cf-c600-4470-bb84-59cdac35eea9,1,0,b7753aea-3798-4be9-b9ce-e4145fbea58a,b7753aea-3798-4be9-b9ce-e4145fbea58a,1,0,ce3d12b8-da77-4ac5-a7bf-a02809ed3f1e,ce3d12b8-da77-4ac5-a7bf-a02809ed3f1e,1,0,cf3819dd-6564-47cd-9b22-790433ca9607,cf3819dd-6564-47cd-9b22-790433ca9607,1,0,231f7349-0e98-497a-9df3-8123a5ea20f0,231f7349-0e98-497a-9df3-8123a5ea20f0,1,0,0c7790f8-db18-4d1d-aa34-d0c7097d0576,0c7790f8-db18-4d1d-aa34-d0c7097d0576,1,0,926b936a-4147-40ef-92c7-008713d5a8b4,926b936a-4147-40ef-92c7-008713d5a8b4,1,0,3446ba39-fbd6-462f-af51-add3173ce1fc,3446ba39-fbd6-462f-af51-add3173ce1fc,1,0,7510d830-cf29-408c-9f2a-77e30382beeb,7510d830-cf29-408c-9f2a-77e30382beeb,1,0,133d9c01-751e-47a1-93a5-46cfa1b85a51,133d9c01-751e-47a1-93a5-46cfa1b85a51,1,0,42b81035-bc9b-4b8a-b1ee-55c24c6bb875,42b81035-bc9b-4b8a-b1ee-55c24c6bb875,1,0,c4e58e2b-2a73-44f2-8a4b-dded01944c35,c4e58e2b-2a73-44f2-8a4b-dded01944c35,1,0,ada738c2-8f68-4f25-afc2-ad88164f5fea,ada738c2-8f68-4f25-afc2-ad88164f5fea,1,0,683cc434-af64-4afb-835b-c20e7e17c32e,683cc434-af64-4afb-835b-c20e7e17c32e,1,0,19aad3e9-704b-4057-8a1d-e6131af2da2d,19aad3e9-704b-4057-8a1d-e6131af2da2d,1,0,6522829d-bb7f-4bac-9c66-21d936d9d3c6,6522829d-bb7f-4bac-9c66-21d936d9d3c6,1,0,aa4c2d2c-b1f8-4525-bdef-24b0dce4724a,aa4c2d2c-b1f8-4525-bdef-24b0dce4724a,1,0,f7c432c0-ee57-40f3-98c2-b94401042395,f7c432c0-ee57-40f3-98c2-b94401042395,1,0,b7dd0b15-bbf0-4959-8d63-fb00c2519d3d,b7dd0b15-bbf0-4959-8d63-fb00c2519d3d,1,0,d58fea2a-34b7-4404-9939-faf5bf1f19c6,d58fea2a-34b7-4404-9939-faf5bf1f19c6,1,0,b458ed6f-e0d2-4830-8005-16f08612c76a,b458ed6f-e0d2-4830-8005-16f08612c76a,1,0,988787d0-4704-4aa7-b02f-96492784d667,988787d0-4704-4aa7-b02f-96492784d667,1,0,66d837ed-be23-4e0a-8cbc-c918f234998d,66d837ed-be23-4e0a-8cbc-c918f234998d,1,0,010bcfe3-a299-4333-8faa-96b08356a097,010bcfe3-a299-4333-8faa-96b08356a097,1,0,4735b8d0-5b06-4640-9d68-380ba4165c01,4735b8d0-5b06-4640-9d68-380ba4165c01,1,0,adcaecde-1977-4c6d-a204-12df7d9915e2,adcaecde-1977-4c6d-a204-12df7d9915e2,1,0,348376e0-6e02-4360-95ea-f23086cabd55,348376e0-6e02-4360-95ea-f23086cabd55,1,0,d7cdbc04-3eaa-45b6-b71b-0340bf029752,d7cdbc04-3eaa-45b6-b71b-0340bf029752,1,0,f6d562ac-6bc8-4e82-9ac0-b6fc4ed41677,f6d562ac-6bc8-4e82-9ac0-b6fc4ed41677,1,0,e954636b-2410-4602-8dfd-fde852998f8b,e954636b-2410-4602-8dfd-fde852998f8b,1,0,00f82519-e522-4cf2-92ab-19a13f38baa7,00f82519-e522-4cf2-92ab-19a13f38baa7,1,0,b59f1272-69ab-4d6a-8e4b-43bfe8231c8c,b59f1272-69ab-4d6a-8e4b-43bfe8231c8c,1,0,33df37df-43d0-40d7-95dd-23655b1fdf81,33df37df-43d0-40d7-95dd-23655b1fdf81,1,0,cef5c343-440f-475e-98f1-28da65eabcf3,cef5c343-440f-475e-98f1-28da65eabcf3,1,0,979378ce-8455-4761-ae83-10e747a6656d,979378ce-8455-4761-ae83-10e747a6656d,1,0,de3cb87d-d08f-4f45-aca5-c4c526772eeb,de3cb87d-d08f-4f45-aca5-c4c526772eeb,1,0,509770b5-ddaf-477b-a79c-cec8afbaf9bc,509770b5-ddaf-477b-a79c-cec8afbaf9bc,1,0,25d72d6e-1a64-4366-85af-5789ed7806d3,25d72d6e-1a64-4366-85af-5789ed7806d3,1,0,eedf57b6-8fd6-4e80-bc0c-1583196b34eb,eedf57b6-8fd6-4e80-bc0c-1583196b34eb,1,0,ec7cc726-82a7-455e-b302-0e024d60bbab,ec7cc726-82a7-455e-b302-0e024d60bbab,1,0,1bae5c60-1027-4ff7-a607-d57da0d6e4f7,1bae5c60-1027-4ff7-a607-d57da0d6e4f7,1,0,3d18a46c-1d64-4bec-9a22-07a736abbf8f,3d18a46c-1d64-4bec-9a22-07a736abbf8f,1,0,d5c64b8e-1184-4ec5-8f02-87e037df0034,d5c64b8e-1184-4ec5-8f02-87e037df0034,1,0,6b5fb7ab-d010-483b-939d-c9f9e2d8884f,6b5fb7ab-d010-483b-939d-c9f9e2d8884f,1,0,5b0f5e4e-ef26-415b-830a-6623688e8a78,5b0f5e4e-ef26-415b-830a-6623688e8a78,1,0,b33693ac-6bc1-47e1-81ab-a3278d3596a3,b33693ac-6bc1-47e1-81ab-a3278d3596a3,1,0,caebab45-2be3-4f5d-b06d-d91c5a4122a0,caebab45-2be3-4f5d-b06d-d91c5a4122a0,1,0,7a56e6ee-3518-491f-b5af-4f1aca2462c0,7a56e6ee-3518-491f-b5af-4f1aca2462c0,1,0,61d03f9f-834b-4077-b5c7-0de85ef007d3,61d03f9f-834b-4077-b5c7-0de85ef007d3,1,0,1683afaf-db32-4267-b1d1-959836c50fb5,1683afaf-db32-4267-b1d1-959836c50fb5,1,0,1e50e4de-f091-4ccc-ba2d-8a526c20351e,1e50e4de-f091-4ccc-ba2d-8a526c20351e,1,0,7671eebd-cdf4-43c6-8d0d-2dff2f8ce975,7671eebd-cdf4-43c6-8d0d-2dff2f8ce975,1,0,83342c37-30b6-4f39-a2df-7aab425eb3bf,83342c37-30b6-4f39-a2df-7aab425eb3bf,1,0,896d8858-5574-4e36-abc0-92a2f0b6e905,896d8858-5574-4e36-abc0-92a2f0b6e905,1,0,8767bf87-b364-4e16-8371-40ae96bff7c0,8767bf87-b364-4e16-8371-40ae96bff7c0,1,0,65ba2d12-ce10-4f27-93ba-0668592edfce,65ba2d12-ce10-4f27-93ba-0668592edfce,1,0,45dba1f4-f080-4b99-abe4-63125f84f580,45dba1f4-f080-4b99-abe4-63125f84f580,1,0,24d0e61f-c9af-45f0-b6dd-00d1fefa1720,24d0e61f-c9af-45f0-b6dd-00d1fefa1720,1,0,75088623-2b34-499a-85c9-0c3f78448cf3,75088623-2b34-499a-85c9-0c3f78448cf3,1,0,f151768d-f840-4116-8fb5-bbcc0b5dd2bc,f151768d-f840-4116-8fb5-bbcc0b5dd2bc,1,0,dd6581f7-82fc-469c-ae2f-d270d810e843,dd6581f7-82fc-469c-ae2f-d270d810e843,1,0,ca0258bd-7408-45a6-8c61-6097090dad4a,ca0258bd-7408-45a6-8c61-6097090dad4a,1,0,5080a8ca-a75e-4f4f-885b-62f64434f0f2,5080a8ca-a75e-4f4f-885b-62f64434f0f2,1,0,3adbff51-6a82-40e7-9585-a030b06d0632,3adbff51-6a82-40e7-9585-a030b06d0632,1,0,c27036c4-7077-4464-b24a-46b37db4bfcf,c27036c4-7077-4464-b24a-46b37db4bfcf,1,0,99ce0c09-eae0-430b-9a20-46d96503876b,99ce0c09-eae0-430b-9a20-46d96503876b,1,0,128e9f84-5f92-4ed6-afb9-86b4b244ae58,128e9f84-5f92-4ed6-afb9-86b4b244ae58,1,0,5bff11e0-07d0-43eb-b02d-5dc6f2c9bab1,5bff11e0-07d0-43eb-b02d-5dc6f2c9bab1,1,0,13b4853f-d83d-4e30-80a4-704b740cf76f,13b4853f-d83d-4e30-80a4-704b740cf76f,1,0,32e9be21-ef2f-46fd-96ff-2ba143a8c1d9,32e9be21-ef2f-46fd-96ff-2ba143a8c1d9,1,0,9c81736c-25ce-42eb-9e7a-1fc014cbbc7d,9c81736c-25ce-42eb-9e7a-1fc014cbbc7d,1,0,655ac12f-a0e4-46fb-b11a-eaba635edfae,655ac12f-a0e4-46fb-b11a-eaba635edfae,1,0,7bccc0c6-bc80-4672-8190-4fc94cea4249,7bccc0c6-bc80-4672-8190-4fc94cea4249,1,0,82ebe1f1-2c36-4152-bc02-b8085ad614e3,82ebe1f1-2c36-4152-bc02-b8085ad614e3,1,0,68259658-c149-4a1b-b1d5-b15b232ee334,68259658-c149-4a1b-b1d5-b15b232ee334,1,0,301a9f28-2cd9-4364-9b57-a22b9e6553fa,301a9f28-2cd9-4364-9b57-a22b9e6553fa,1,0,4948d3d3-9267-4f9c-8260-5ebb63ce281f,4948d3d3-9267-4f9c-8260-5ebb63ce281f,1,0,051bc689-9357-463a-93db-55994af23a88,051bc689-9357-463a-93db-55994af23a88,1,0,2d4a8fe5-3371-42f9-8052-ec78d4df0da1,2d4a8fe5-3371-42f9-8052-ec78d4df0da1,1,0,4be19ad6-691e-4224-86ec-bc4d76a15525,4be19ad6-691e-4224-86ec-bc4d76a15525,1,0,cf9ebddd-d421-475f-8d57-6c45d817c4ec,cf9ebddd-d421-475f-8d57-6c45d817c4ec,1,0,6718e0bf-8a9d-4eab-88fd-9cd5f2bc9e58,6718e0bf-8a9d-4eab-88fd-9cd5f2bc9e58,1,0,2811d95d-6ce9-4066-99cb-ea6894b18497,2811d95d-6ce9-4066-99cb-ea6894b18497,1,0,2fcee659-7bd7-4181-9991-ce4723d485cd,2fcee659-7bd7-4181-9991-ce4723d485cd,1,0,79dc0e69-6a17-428f-b36f-9056d0f6864c,79dc0e69-6a17-428f-b36f-9056d0f6864c,1,0,77a94ffd-4847-4180-a587-31dd3c95f62a,77a94ffd-4847-4180-a587-31dd3c95f62a,1,0,de8bb46d-127e-40e6-af46-a7385a37819b,de8bb46d-127e-40e6-af46-a7385a37819b,1,0,95b5ac72-941c-4f6b-aa2d-ce2a1b616d8d,95b5ac72-941c-4f6b-aa2d-ce2a1b616d8d,1,0,ea557343-ae0f-4a2c-a298-573c952a7d63,ea557343-ae0f-4a2c-a298-573c952a7d63,1,0,11d02ccf-173f-447a-aae1-79f373e46e53,11d02ccf-173f-447a-aae1-79f373e46e53,1,0,a16ebbff-31e2-4c6f-99f5-3bd733c18117,a16ebbff-31e2-4c6f-99f5-3bd733c18117,1,0,d5296815-e4e5-4e79-af97-c4f5afb061cb,d5296815-e4e5-4e79-af97-c4f5afb061cb,1,0,9832d04b-cc86-4399-9129-c0c8f4745973,9832d04b-cc86-4399-9129-c0c8f4745973,1,0,ec745935-1cc7-491d-8b60-e42b3f8c618d,ec745935-1cc7-491d-8b60-e42b3f8c618d,1,0,c642227b-d804-4047-a90b-40159660ba4a,c642227b-d804-4047-a90b-40159660ba4a,1,0,99b1ad67-29aa-4550-b70b-685cd44c27d4,99b1ad67-29aa-4550-b70b-685cd44c27d4,1,0,c54578df-a852-445a-94a6-a6654bb1e3a0,c54578df-a852-445a-94a6-a6654bb1e3a0,1,0,18cbf6dc-ec5c-4181-855a-fe779e3f1ad8,18cbf6dc-ec5c-4181-855a-fe779e3f1ad8,1,0,177c8cf2-27ba-4866-8e0f-cdbb611c84ac,177c8cf2-27ba-4866-8e0f-cdbb611c84ac,1,0,f014ebeb-5f33-430f-ae80-96ba7732d931,f014ebeb-5f33-430f-ae80-96ba7732d931,1,0,7782051c-4bc2-4fc2-bfa5-256bd2911abf,7782051c-4bc2-4fc2-bfa5-256bd2911abf,1,0,2a805bb1-54b3-4b0e-ae7f-ad3f9f18ee24,2a805bb1-54b3-4b0e-ae7f-ad3f9f18ee24,1,0,56fd938d-e0df-4e16-a4ad-7eb6d6cc538f,56fd938d-e0df-4e16-a4ad-7eb6d6cc538f,1,0,7c49fa86-1c65-4959-9331-c0f4852934b3,7c49fa86-1c65-4959-9331-c0f4852934b3,1,0,f744e94b-4359-4516-b682-f15775066e7c,f744e94b-4359-4516-b682-f15775066e7c,1,0,ad37361d-a380-42bd-8cae-b80164415edc,ad37361d-a380-42bd-8cae-b80164415edc,1,0,700cedcb-7625-4ed2-93fb-11ae54317367,700cedcb-7625-4ed2-93fb-11ae54317367,1,0,6fd83c31-c8eb-4f01-ba99-17d5690e78fb,6fd83c31-c8eb-4f01-ba99-17d5690e78fb,1,0,19d511f0-7fad-4f81-be73-969cc192d28d,19d511f0-7fad-4f81-be73-969cc192d28d,1,0,55757755-bc7f-42fb-b55a-691137c5c8da,55757755-bc7f-42fb-b55a-691137c5c8da,1,0,f8c04e0d-a578-4350-aebc-fae5a09db697,f8c04e0d-a578-4350-aebc-fae5a09db697,1,0,ab50f182-0fbd-4e05-8580-c59779a9321e,ab50f182-0fbd-4e05-8580-c59779a9321e,1,0,6af7c3b9-9062-48b3-87b0-41558f7f11e0,6af7c3b9-9062-48b3-87b0-41558f7f11e0,1,0,6f85e902-895a-4636-a18f-ea1f7c68f544,6f85e902-895a-4636-a18f-ea1f7c68f544,1,0,ea4cf11a-edfd-439f-bd3d-a1ac088580ea,ea4cf11a-edfd-439f-bd3d-a1ac088580ea,1,0,24116097-a6ec-46d0-936e-74fcb873bd4f,24116097-a6ec-46d0-936e-74fcb873bd4f,1,0,ae7c5ade-a707-4425-864f-06cc2b2a208e,ae7c5ade-a707-4425-864f-06cc2b2a208e,1,0,ec8ee963-dbbe-497a-bc01-6a2c6a5a99cb,ec8ee963-dbbe-497a-bc01-6a2c6a5a99cb,1,0,8573cd5f-0574-4109-b841-567dfd578931,8573cd5f-0574-4109-b841-567dfd578931,1,0,67d95ce8-17af-4b2f-8dfd-2fc902aa9e1d,67d95ce8-17af-4b2f-8dfd-2fc902aa9e1d,1,0,2f60ba06-8830-472d-82e4-9ba1f00c311d,2f60ba06-8830-472d-82e4-9ba1f00c311d,1,0,42872a0b-999d-4a38-a56e-e67e24c0874e,42872a0b-999d-4a38-a56e-e67e24c0874e,1,0,bf36279c-1a85-4c26-9505-a142cba581a0,bf36279c-1a85-4c26-9505-a142cba581a0,1,0,a39c719e-349a-46b7-ae4e-aeaa3e4bebe0,a39c719e-349a-46b7-ae4e-aeaa3e4bebe0,1,0,8e7f7a3e-efa9-4fa5-94c3-4cfce5c8f5ed,8e7f7a3e-efa9-4fa5-94c3-4cfce5c8f5ed,1,0,ec3cf7eb-d1c1-400e-b3f7-11cf304d8e44,ec3cf7eb-d1c1-400e-b3f7-11cf304d8e44,1,0,acea385d-9935-4365-813b-8a121f57cd52,acea385d-9935-4365-813b-8a121f57cd52,1,0,87606a5a-2682-4f1e-ae25-166be2357541,87606a5a-2682-4f1e-ae25-166be2357541,1,0,98652ae9-349d-48f2-8230-b8960e5a495f,98652ae9-349d-48f2-8230-b8960e5a495f,1,0,7691d0bf-e099-4d22-9813-50386f033c46,7691d0bf-e099-4d22-9813-50386f033c46,1,0,c4867f0d-aef9-467e-86e0-5534dc5fa6d7,c4867f0d-aef9-467e-86e0-5534dc5fa6d7,1,0,47c4de6c-9533-4342-8b80-6d31f106742f,47c4de6c-9533-4342-8b80-6d31f106742f,1,0,5fd3f2c8-52cf-411e-822b-a1d417f1c4eb,5fd3f2c8-52cf-411e-822b-a1d417f1c4eb,1,0,32064ccf-dfb1-4dd4-a51a-f505bc370513,32064ccf-dfb1-4dd4-a51a-f505bc370513,1,0,cfa4be49-1a56-4a07-9f00-ab258d7dec5b,cfa4be49-1a56-4a07-9f00-ab258d7dec5b,1,0,72f1df0f-1b00-4873-87ee-7173a266ba19,72f1df0f-1b00-4873-87ee-7173a266ba19,1,0,bb75cb5e-d007-4d1e-a6d4-6bda95c06397,bb75cb5e-d007-4d1e-a6d4-6bda95c06397,1,0,43c621c4-474e-4060-bc1f-3b1c8a59acbd,43c621c4-474e-4060-bc1f-3b1c8a59acbd,1,0,78187acb-b8c2-4fcf-b967-56da82d6b77c,78187acb-b8c2-4fcf-b967-56da82d6b77c,1,0,5f71053f-4f50-44c7-bba8-254861f045ca,5f71053f-4f50-44c7-bba8-254861f045ca,1,0,88d28c9d-48af-46ff-9265-af46d10fd0aa,88d28c9d-48af-46ff-9265-af46d10fd0aa,1,0,63cb3bbe-5271-45a6-a3c0-c8960c707153,63cb3bbe-5271-45a6-a3c0-c8960c707153,1,0,12f96b1b-fc85-4638-9f70-a2e8196587a1,12f96b1b-fc85-4638-9f70-a2e8196587a1,1,0,975bcc47-f4c2-440e-8c3f-4fa42094405c,975bcc47-f4c2-440e-8c3f-4fa42094405c,1,0,1f260296-36b8-4c74-a1e7-5a1d7a23c0bd,1f260296-36b8-4c74-a1e7-5a1d7a23c0bd,1,0,f353fc01-89a8-495b-8c65-6e1719a172a5,f353fc01-89a8-495b-8c65-6e1719a172a5,1,0,4800d51e-8229-4384-ab8d-d1d36cb713f6,4800d51e-8229-4384-ab8d-d1d36cb713f6,1,0,7a59debd-f48b-4f3a-a5e4-05bd7a6e4306,7a59debd-f48b-4f3a-a5e4-05bd7a6e4306,1,0,5353f9f9-abce-4f1b-8ba4-6f185b113b24,5353f9f9-abce-4f1b-8ba4-6f185b113b24,1,0,f68c3405-4ac5-48ab-837d-68e79669be1b,f68c3405-4ac5-48ab-837d-68e79669be1b,1,0,a9b7aa5e-a241-460e-a9dd-981031564377,a9b7aa5e-a241-460e-a9dd-981031564377,1,0,a9ad0892-ed63-4f39-9ba9-31523114365d,a9ad0892-ed63-4f39-9ba9-31523114365d,1,0,ce5abb2b-1586-4972-9a59-8812a0ebc905,ce5abb2b-1586-4972-9a59-8812a0ebc905,1,0,0892456e-4ebf-46ee-a864-3f100510311f,0892456e-4ebf-46ee-a864-3f100510311f,1,0,7ab652b3-635b-4415-97e8-bd0a4aec1c76,7ab652b3-635b-4415-97e8-bd0a4aec1c76,1,0,6cb9cce0-a65a-4280-bae8-69e73b5fd859,6cb9cce0-a65a-4280-bae8-69e73b5fd859,1,0,dedda468-b754-4cf9-bb16-c5d5b1a7d6b7,dedda468-b754-4cf9-bb16-c5d5b1a7d6b7,1,0,8c77d038-4581-4468-b17c-baf6a0d6a039,8c77d038-4581-4468-b17c-baf6a0d6a039,1,0,77ac6bb4-0f72-4d35-9181-4ba58d4606ac,77ac6bb4-0f72-4d35-9181-4ba58d4606ac,1,0,43b9ca4d-8d3f-4fc7-9eb8-84b357c438cb,43b9ca4d-8d3f-4fc7-9eb8-84b357c438cb,1,0,1e439352-5b22-4aed-9b4c-e1648b1f68cc,1e439352-5b22-4aed-9b4c-e1648b1f68cc,1,0,514c3fec-0331-49c6-a6e8-2d826179fe96,514c3fec-0331-49c6-a6e8-2d826179fe96,1,0,ce8e278f-a368-4286-b479-ebad3b23de9c,ce8e278f-a368-4286-b479-ebad3b23de9c,1,0,ff21a413-36bb-4119-8737-80e26c8c875e,ff21a413-36bb-4119-8737-80e26c8c875e,1,0,de94d05d-3ec7-4139-a70b-92d6771e7e72,de94d05d-3ec7-4139-a70b-92d6771e7e72,1,0,3c68204f-d996-4042-b7b8-b480c6d228bd,3c68204f-d996-4042-b7b8-b480c6d228bd,1,0,89054313-4bf5-4d53-bd16-538b910d9e8b,89054313-4bf5-4d53-bd16-538b910d9e8b,1,0,275e5141-5dfa-46ed-a4af-3cad593a0868,275e5141-5dfa-46ed-a4af-3cad593a0868,1,0,028223f2-1af3-444a-8292-8b2a8bd2484d,028223f2-1af3-444a-8292-8b2a8bd2484d,1,0,b8b8f4ae-9964-4176-bcf7-67c1cb51f849,b8b8f4ae-9964-4176-bcf7-67c1cb51f849,1,0,9b179083-eb74-41cd-be0e-5fc717d974a5,9b179083-eb74-41cd-be0e-5fc717d974a5,1,0,5b3b3f45-77f0-4a02-892b-71cdc06a7ecf,5b3b3f45-77f0-4a02-892b-71cdc06a7ecf,1,0,d57a517a-3a81-484d-9b58-f24b969487de,d57a517a-3a81-484d-9b58-f24b969487de,1,0,842d43cd-76fa-4574-9523-58302d789c18,842d43cd-76fa-4574-9523-58302d789c18,1,0,04cecd2d-5913-4c37-916c-9f9dc25c158b,04cecd2d-5913-4c37-916c-9f9dc25c158b,1,0,a1285b03-7c76-4b7d-b60c-fb481f33ded9,a1285b03-7c76-4b7d-b60c-fb481f33ded9,1,0,957a1333-6d31-41ca-9812-919726965044,957a1333-6d31-41ca-9812-919726965044,1,0,36f5ac04-52fb-4cba-a067-7eae0b778599,36f5ac04-52fb-4cba-a067-7eae0b778599,1,0,11c0bc9c-be98-40c6-92da-db68968835d0,11c0bc9c-be98-40c6-92da-db68968835d0,1,0,eccf4f97-a5b5-4587-b9e3-748aa6cad7e3,eccf4f97-a5b5-4587-b9e3-748aa6cad7e3,1,0,6c6fddd7-b1d5-4c6b-badf-54b6a1018dc8,6c6fddd7-b1d5-4c6b-badf-54b6a1018dc8,1,0,1cbca86a-54f4-4db9-b8d4-827acb0ea722,1cbca86a-54f4-4db9-b8d4-827acb0ea722,1,0,fbed8c4f-29ea-4314-81e9-07bc3091f23a,fbed8c4f-29ea-4314-81e9-07bc3091f23a,1,0,46406519-638d-4313-928e-0c4afea091bb,46406519-638d-4313-928e-0c4afea091bb,1,0,6142d817-b170-423a-aa1e-28fcba1f103e,6142d817-b170-423a-aa1e-28fcba1f103e,1,0,f9758cd7-487b-47c8-a372-58fe42a9ef54,f9758cd7-487b-47c8-a372-58fe42a9ef54,1,0,9648577f-e455-461a-ba41-3e3b9b2dc553,9648577f-e455-461a-ba41-3e3b9b2dc553,1,0,8379651d-3fb1-4853-ba75-2a49d04e2d16,8379651d-3fb1-4853-ba75-2a49d04e2d16,1,0,2c35db7c-40cf-4db0-83d9-3caf329adc78,2c35db7c-40cf-4db0-83d9-3caf329adc78,1,0,8fb745b8-5fed-4c1b-90e7-2fabb025b100,8fb745b8-5fed-4c1b-90e7-2fabb025b100,1,0,085b1f70-d560-4fd7-a36c-6d71c40f6870,085b1f70-d560-4fd7-a36c-6d71c40f6870,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,c09df096-f9cc-4b2f-a44e-69147339dc8c,c09df096-f9cc-4b2f-a44e-69147339dc8c,1,0,aa4e4f39-3080-4365-89aa-00b030e26eec,aa4e4f39-3080-4365-89aa-00b030e26eec,1,0,84c1ba1c-e5d6-46ec-98a3-589499162e67,84c1ba1c-e5d6-46ec-98a3-589499162e67,1,0,ae910da8-b007-42bb-b41b-633dda961a0d,ae910da8-b007-42bb-b41b-633dda961a0d,1,0,f6cece0a-e20d-4c2a-a2f3-f25212b0d672,f6cece0a-e20d-4c2a-a2f3-f25212b0d672,1,0,8c1d82ad-9c7f-4556-9e53-c13341cc8206,8c1d82ad-9c7f-4556-9e53-c13341cc8206,1,0,28027dd1-2ce9-4b33-88e9-83588f939f18,28027dd1-2ce9-4b33-88e9-83588f939f18,1,0,2df51e39-a084-425c-8454-daa35b592c80,2df51e39-a084-425c-8454-daa35b592c80,1,0,269af6e0-193a-45a5-b5b9-cc886c617db0,269af6e0-193a-45a5-b5b9-cc886c617db0,1,0,c93ebe3e-6608-4150-8b26-93e8f8cb08bf,c93ebe3e-6608-4150-8b26-93e8f8cb08bf,1,0,4045be3f-acf8-46e7-b341-50e43061b3ff,4045be3f-acf8-46e7-b341-50e43061b3ff,1,0,5f69bb2a-c544-4e15-a86b-616ec73d012b,5f69bb2a-c544-4e15-a86b-616ec73d012b,1,0,aed6eda6-07f1-48a2-81f4-8685216ec311,aed6eda6-07f1-48a2-81f4-8685216ec311,1,0,57f8a606-4f73-458e-aca4-0c0d5d713fea,57f8a606-4f73-458e-aca4-0c0d5d713fea,1,0,7382c9ad-82da-4359-9335-3eb32c8e10e6,7382c9ad-82da-4359-9335-3eb32c8e10e6,1,0,66ae4013-378f-4290-b03e-5d88f3d16765,66ae4013-378f-4290-b03e-5d88f3d16765,1,0,acc778b6-29ad-47dd-b148-ee66efb104d5,acc778b6-29ad-47dd-b148-ee66efb104d5,1,0,ca99eea3-74d6-4264-bd83-6c7b77ea3f17,ca99eea3-74d6-4264-bd83-6c7b77ea3f17,1,0,86f962a3-f97f-42f3-8338-4c80de3957ee,86f962a3-f97f-42f3-8338-4c80de3957ee,1,0,aff8c0b5-bb53-4ba1-9c16-2c51bd0092ca,aff8c0b5-bb53-4ba1-9c16-2c51bd0092ca,1,0,a51429e9-238b-44b8-9793-da6cebcd4320,a51429e9-238b-44b8-9793-da6cebcd4320,1,0,ef1a34fa-29c5-4a7e-8f7c-ee3e6e67a345,ef1a34fa-29c5-4a7e-8f7c-ee3e6e67a345,1,0,9026e00d-1d1c-4f48-963b-6b5fcf7edeec,9026e00d-1d1c-4f48-963b-6b5fcf7edeec,1,0,cceb5a44-dea4-4b88-8e79-0b9674992b31,cceb5a44-dea4-4b88-8e79-0b9674992b31,1,0,1b4dc71d-e454-4d1a-a302-ac1726a31f63,1b4dc71d-e454-4d1a-a302-ac1726a31f63,1,0,fa96d6f9-1770-41b4-990d-21b53206454a,fa96d6f9-1770-41b4-990d-21b53206454a,1,0,2ed8bce3-8325-4b3e-b5d8-a4e6039d16b9,2ed8bce3-8325-4b3e-b5d8-a4e6039d16b9,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,cf80ff0d-9add-4fa5-bba2-00d43fce5ed8,cf80ff0d-9add-4fa5-bba2-00d43fce5ed8,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,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,003f2b4f-cdaa-4830-992d-9e376949a1b4,003f2b4f-cdaa-4830-992d-9e376949a1b4,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,f8759ffe-4f6d-48f2-8ae6-51911c5baf4b,f8759ffe-4f6d-48f2-8ae6-51911c5baf4b,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,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,fd07f403-1116-4102-a1bf-35abb03ad493,fd07f403-1116-4102-a1bf-35abb03ad493,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,ba38453b-6225-40b8-80d8-de00dc620d56,ba38453b-6225-40b8-80d8-de00dc620d56,1,0,0722315c-9217-4ecf-80ff-d1ee89f84a53,0722315c-9217-4ecf-80ff-d1ee89f84a53,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,747f1c23-3c03-456e-864e-fc714484b7d6,747f1c23-3c03-456e-864e-fc714484b7d6,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,82035887-4f22-435b-a43f-b5ef9cb845ce,82035887-4f22-435b-a43f-b5ef9cb845ce,1,0,667b0f85-b82d-4d8e-9d75-b55a9723dce7,667b0f85-b82d-4d8e-9d75-b55a9723dce7,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,5f92f8c8-4d02-41a0-858f-e521f978df9f,5f92f8c8-4d02-41a0-858f-e521f978df9f,1,0,f9da8faf-1462-4ac4-9b63-2a20fc916049,f9da8faf-1462-4ac4-9b63-2a20fc916049,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,96cd8b90-5cf3-416c-b3a2-1f62e158b37e,96cd8b90-5cf3-416c-b3a2-1f62e158b37e,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,f00116da-2bf1-4edd-b939-f25d36774f5b,f00116da-2bf1-4edd-b939-f25d36774f5b,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,b1230b96-f4c8-4311-bfc0-df33bcc41394,b1230b96-f4c8-4311-bfc0-df33bcc41394,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,b6a3a9d4-71d2-4eb3-bb6f-6349330ffe3c,b6a3a9d4-71d2-4eb3-bb6f-6349330ffe3c,1,0,02082174-7276-4256-b9bb-9872065a01c4,02082174-7276-4256-b9bb-9872065a01c4,1,0,ddaba839-5ed2-4707-8cb8-ebd5784f642a,ddaba839-5ed2-4707-8cb8-ebd5784f642a,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,024b83dd-9f90-4122-8f50-0f2dc32bd76c,024b83dd-9f90-4122-8f50-0f2dc32bd76c,1,0,cba9e94c-e328-42ef-bcd0-92db3f0c048b,cba9e94c-e328-42ef-bcd0-92db3f0c048b,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,667f0c7e-fa70-49e9-97c9-ad04819fee58,667f0c7e-fa70-49e9-97c9-ad04819fee58,1,0,ae3876e2-bd06-415b-9d9a-b77d787be09e,ae3876e2-bd06-415b-9d9a-b77d787be09e,1,0,ded105e9-b71b-4550-9d9c-9c743dc212d0,ded105e9-b71b-4550-9d9c-9c743dc212d0,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,546af6c0-0762-4d2d-9d3b-c6a8f6c57674,546af6c0-0762-4d2d-9d3b-c6a8f6c57674,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,32850dc1-1484-4b7d-94f4-a08329423e7b,32850dc1-1484-4b7d-94f4-a08329423e7b,1,0,e37a7cf1-a7b5-4b6e-b818-0915598c8505,e37a7cf1-a7b5-4b6e-b818-0915598c8505,1,0,9299b382-fc65-4f89-8329-94fec125761c,9299b382-fc65-4f89-8329-94fec125761c,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,c83739dc-6afc-4687-ab1c-98a7b24b2182,c83739dc-6afc-4687-ab1c-98a7b24b2182,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,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,49b887e5-3b2f-42f8-b3f1-ba161ae05b3c,49b887e5-3b2f-42f8-b3f1-ba161ae05b3c,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,1c265c15-6002-416e-8045-81f03c893faf,1c265c15-6002-416e-8045-81f03c893faf,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,077e2c42-bc3b-48bf-bbc2-41effe20f613,077e2c42-bc3b-48bf-bbc2-41effe20f613,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,c888ccc1-9116-4b88-b950-aeabd54191c0,c888ccc1-9116-4b88-b950-aeabd54191c0,1,0,ff4d92a7-5fa3-4a46-a6f5-47c3952edb22,ff4d92a7-5fa3-4a46-a6f5-47c3952edb22,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,eaeb5aa8-8edf-4f74-8011-2d476f543bf6,eaeb5aa8-8edf-4f74-8011-2d476f543bf6,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,7adced5f-3a5f-419a-926c-0452aad86c86,7adced5f-3a5f-419a-926c-0452aad86c86,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,7f06703e-24cd-4db7-be88-3fbd65e5c252,7f06703e-24cd-4db7-be88-3fbd65e5c252,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,2181d197-028b-40b2-bf02-3d85dad1af30,2181d197-028b-40b2-bf02-3d85dad1af30,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,c9646904-3fb4-452c-af50-ddf562b597d0,c9646904-3fb4-452c-af50-ddf562b597d0,1,0,92bac831-04da-4302-ac62-a867e017fef6,92bac831-04da-4302-ac62-a867e017fef6,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,4249f45b-b298-4d42-9ca2-bd80b87f2150,4249f45b-b298-4d42-9ca2-bd80b87f2150,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,bc039475-c872-4b99-9248-c74aae75f0e1,bc039475-c872-4b99-9248-c74aae75f0e1,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,b0e0a273-2613-4d5e-9901-df7893af4c74,b0e0a273-2613-4d5e-9901-df7893af4c74,1,0,4ad1ef06-d8b4-46da-b536-d23c40e85497,4ad1ef06-d8b4-46da-b536-d23c40e85497,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,30be8d71-a9dd-4dd3-8fb4-ea0c8de86358,30be8d71-a9dd-4dd3-8fb4-ea0c8de86358,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,d5678c61-bd11-476e-b564-c529e117acd6,d5678c61-bd11-476e-b564-c529e117acd6,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,33c93020-b5f0-424e-a8fc-114a6ab04107,33c93020-b5f0-424e-a8fc-114a6ab04107,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,f9479915-cdee-40d5-ba53-101132aac672,f9479915-cdee-40d5-ba53-101132aac672,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,2276a1d4-b4d9-4643-8342-36143ce4eb26,2276a1d4-b4d9-4643-8342-36143ce4eb26,1,0,5510a103-836d-457e-b82b-6f6223efc96b,5510a103-836d-457e-b82b-6f6223efc96b,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,4cc76b9f-aa72-486e-84ee-f0866edfe691,4cc76b9f-aa72-486e-84ee-f0866edfe691,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,93848cf6-7a87-42c7-b685-0bc418a2037c,93848cf6-7a87-42c7-b685-0bc418a2037c,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,15cdbaf0-bc17-41c4-a330-d142cac8dc03,15cdbaf0-bc17-41c4-a330-d142cac8dc03,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,b2de86fc-f10b-4304-8060-cad903ba37c5,b2de86fc-f10b-4304-8060-cad903ba37c5,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,52be8b07-6e99-4e64-bbd6-2a1cd5816136,52be8b07-6e99-4e64-bbd6-2a1cd5816136,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,cfe452ac-3e0b-4cca-811f-892ab36ed327,cfe452ac-3e0b-4cca-811f-892ab36ed327,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,7e16f533-9b83-444b-966b-caed3d83b3a8,7e16f533-9b83-444b-966b-caed3d83b3a8,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,20082776-ce24-41c5-ae11-6fa9bc54db59,20082776-ce24-41c5-ae11-6fa9bc54db59,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,c61e4c12-178d-47aa-a070-333fe5450168,c61e4c12-178d-47aa-a070-333fe5450168,1,0,3ebcff6f-8709-46a2-b354-768e1d1415c5,3ebcff6f-8709-46a2-b354-768e1d1415c5,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,ea9d67eb-b552-48bd-a108-4938e5541735,ea9d67eb-b552-48bd-a108-4938e5541735,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,85d6d214-2b70-4cc4-ba80-f4325dd4ca65,85d6d214-2b70-4cc4-ba80-f4325dd4ca65,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,afba65e1-1a1c-4e28-91a3-29ca8eef2a1f,afba65e1-1a1c-4e28-91a3-29ca8eef2a1f,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,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,95a71c2e-aa39-42ec-8889-2390a553f146,95a71c2e-aa39-42ec-8889-2390a553f146,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,e29d96ee-e8fa-4100-8a0e-494398e4ec9d,e29d96ee-e8fa-4100-8a0e-494398e4ec9d,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,19ea515f-65f7-4ed9-812b-c97b92e2498f,19ea515f-65f7-4ed9-812b-c97b92e2498f,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,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,456c5171-4298-4201-9908-79feb376d1b1,456c5171-4298-4201-9908-79feb376d1b1,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,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,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,8cf925d9-6811-4bce-b116-09d6a26ff3cb,8cf925d9-6811-4bce-b116-09d6a26ff3cb,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,a12c0e81-00c3-4126-a001-b4441fd63030,a12c0e81-00c3-4126-a001-b4441fd63030,1,0,36999e1b-865e-41ad-b9d6-1b3ac887acfb,36999e1b-865e-41ad-b9d6-1b3ac887acfb,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,af52cd7d-374a-4c46-a74c-305e154dc6f2,af52cd7d-374a-4c46-a74c-305e154dc6f2,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,2a985b50-a4b1-4932-8af6-51eee8e78ac8,2a985b50-a4b1-4932-8af6-51eee8e78ac8,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,fe9eca7c-6e3d-4c3f-b98d-abd8ab05d35e,fe9eca7c-6e3d-4c3f-b98d-abd8ab05d35e,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,e05b6f44-8244-4e94-a6d3-57450f8b47dc,e05b6f44-8244-4e94-a6d3-57450f8b47dc,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,7ad16fb4-17eb-4812-8015-9447d92e08ce,7ad16fb4-17eb-4812-8015-9447d92e08ce,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,81979741-65c9-48a5-9f69-e0d0f0c8ddaa,81979741-65c9-48a5-9f69-e0d0f0c8ddaa,1,0,87553d04-a72a-40b1-9005-85ea0efebf5d,87553d04-a72a-40b1-9005-85ea0efebf5d,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,8bd56034-6d56-4c2f-8e7f-4c0fff49ac39,8bd56034-6d56-4c2f-8e7f-4c0fff49ac39,1,0,845530cd-36fb-44c3-b30a-730985c9ca2d,845530cd-36fb-44c3-b30a-730985c9ca2d,1,0,9e90d9f7-5301-44b3-9eba-45fee5a69a0b,9e90d9f7-5301-44b3-9eba-45fee5a69a0b,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,83e30f0b-67b2-411b-9624-ac4c4bd7f94a,83e30f0b-67b2-411b-9624-ac4c4bd7f94a,1,0,c79ba5a5-e6d9-4a3f-ab23-eca876607f7f,c79ba5a5-e6d9-4a3f-ab23-eca876607f7f,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,dc14a27a-2299-4bd5-8c0e-5f84adae507a,dc14a27a-2299-4bd5-8c0e-5f84adae507a,1,0,bf20e6ce-bbe6-4523-9381-f9cb6cad348c,bf20e6ce-bbe6-4523-9381-f9cb6cad348c,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,0d1e5608-0462-4069-ad7b-1c4b3bc1a256,0d1e5608-0462-4069-ad7b-1c4b3bc1a256,1,0,8d8ac8f0-37e1-4637-87c7-5af82d05202b,8d8ac8f0-37e1-4637-87c7-5af82d05202b,1,0,8dad7f71-63cb-449a-bafd-79bd63f10310,8dad7f71-63cb-449a-bafd-79bd63f10310,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,ae039438-89af-4217-910d-476115f51ab2,ae039438-89af-4217-910d-476115f51ab2,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,2b43d8e1-86b1-4f3a-aad8-f0f6eb1f1de9,2b43d8e1-86b1-4f3a-aad8-f0f6eb1f1de9,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,f1560584-99a3-48ac-b736-e7d33affe474,f1560584-99a3-48ac-b736-e7d33affe474,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,6a9f1485-21a4-41e8-b8a7-26340eff5085,6a9f1485-21a4-41e8-b8a7-26340eff5085,1,0,630845af-a7dc-4d1e-8c1a-44fa65aab036,630845af-a7dc-4d1e-8c1a-44fa65aab036,1,0,65dd4904-0837-4de5-a5e5-601151055d94,65dd4904-0837-4de5-a5e5-601151055d94,1,0,2063d4ea-5f58-4cf9-84de-1f8f59d87748,2063d4ea-5f58-4cf9-84de-1f8f59d87748,1,0,4642db34-b98d-4b4e-823e-ef7d6de5fc02,4642db34-b98d-4b4e-823e-ef7d6de5fc02,1,0,cfce9728-f37a-4ddc-adc1-4569900462b8,cfce9728-f37a-4ddc-adc1-4569900462b8,1,0,d20739a3-a149-4b64-b9ca-4a76aca06cb8,d20739a3-a149-4b64-b9ca-4a76aca06cb8,1,0,99c5e87a-f096-4315-8fbe-f596ea9c176f,99c5e87a-f096-4315-8fbe-f596ea9c176f,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,e984fbf9-6b89-4d38-8938-b2b0e6623c7a,e984fbf9-6b89-4d38-8938-b2b0e6623c7a,1,0,9b76ded4-814a-4267-99c5-2c8fb05ee352,9b76ded4-814a-4267-99c5-2c8fb05ee352,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,db445527-7bd2-448b-bf87-5ac0c10d742d,db445527-7bd2-448b-bf87-5ac0c10d742d,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,a43fbfd8-6324-4192-a1a6-5628a7edb4d2,a43fbfd8-6324-4192-a1a6-5628a7edb4d2,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,c3c1a825-6b35-4b09-8043-63f75b575707,c3c1a825-6b35-4b09-8043-63f75b575707,1,0,5465466d-48be-493a-aadc-e97046b010cc,5465466d-48be-493a-aadc-e97046b010cc,1,0,fa61df43-49e7-4d5f-a0b9-f35af199f9f5,fa61df43-49e7-4d5f-a0b9-f35af199f9f5,1,0,0b92cced-d818-400c-82b6-7726e912a478,0b92cced-d818-400c-82b6-7726e912a478,1,0,5feb9b74-3d94-4202-a96a-170968f54194,5feb9b74-3d94-4202-a96a-170968f54194,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,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,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,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,c8ba4901-7f70-4353-b039-d75f1cb3f5b7,c8ba4901-7f70-4353-b039-d75f1cb3f5b7,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,e624feb5-4630-447b-870c-7e1460296294,e624feb5-4630-447b-870c-7e1460296294,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,85b591b4-a93d-4fcb-bdc7-e6d44436e511,85b591b4-a93d-4fcb-bdc7-e6d44436e511,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,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,644cf757-bff9-4e2e-b72b-1e736c42d4c3,644cf757-bff9-4e2e-b72b-1e736c42d4c3,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,969f7e7d-5108-4bb5-9087-386bcd182ea1,969f7e7d-5108-4bb5-9087-386bcd182ea1,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,a96ce77e-7f3a-467a-8bf7-9a640222cf40,a96ce77e-7f3a-467a-8bf7-9a640222cf40,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,e4703f32-ad6e-4803-8776-7d32c57d3549,e4703f32-ad6e-4803-8776-7d32c57d3549,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,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,0a1837b6-9a0a-4a86-b929-89d032d41383,0a1837b6-9a0a-4a86-b929-89d032d41383,1,0,62ff29be-7d52-4c63-8726-c55bf69a64de,62ff29be-7d52-4c63-8726-c55bf69a64de,1,0,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,e55d259f-cfaa-46f9-92c4-687e1ff3b89d,1,0,123b8af3-8724-4f77-b1d6-6768832a43a7,123b8af3-8724-4f77-b1d6-6768832a43a7,1,0,cb81fb9f-16a2-4265-92a9-b827ca2fd588,cb81fb9f-16a2-4265-92a9-b827ca2fd588,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,2fa09d14-6d28-4bfb-87c3-894e66ab6bca,2fa09d14-6d28-4bfb-87c3-894e66ab6bca,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,cfa1b3e7-747b-409a-8bb5-6d41b85b7105,cfa1b3e7-747b-409a-8bb5-6d41b85b7105,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,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,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,0bd92b85-3844-43c2-a846-119993806041,0bd92b85-3844-43c2-a846-119993806041,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,308781d9-ea18-4c30-ba95-ef822e7ef739,308781d9-ea18-4c30-ba95-ef822e7ef739,1,0,a7f3ee04-4ffe-4a21-b2ad-92cd3f4acd8f,a7f3ee04-4ffe-4a21-b2ad-92cd3f4acd8f,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,f3ae1a2c-e0ca-461b-ba5a-76a6423c6325,f3ae1a2c-e0ca-461b-ba5a-76a6423c6325,1,0,b233d29c-3979-4ef6-b7f0-89ca88f65e82,b233d29c-3979-4ef6-b7f0-89ca88f65e82,1,0,684ca876-644e-43f5-b96a-1561fb5b1935,684ca876-644e-43f5-b96a-1561fb5b1935,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,86a9d7ab-7a96-4c58-8073-ca4b2b99cceb,86a9d7ab-7a96-4c58-8073-ca4b2b99cceb,1,0,1ae1a239-0d88-4467-af33-32bcfe6cf61d,1ae1a239-0d88-4467-af33-32bcfe6cf61d,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,c234a467-ad6c-41d0-ac9e-8592acd8d9d2,c234a467-ad6c-41d0-ac9e-8592acd8d9d2,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,52fd1e04-44b6-4405-a2de-ec5c0cf66b64,52fd1e04-44b6-4405-a2de-ec5c0cf66b64,1,0,9a647b38-73da-4491-997b-773059cfd1c9,9a647b38-73da-4491-997b-773059cfd1c9,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,7b074b91-3c8e-48b3-8858-b6ea1c531f66,7b074b91-3c8e-48b3-8858-b6ea1c531f66,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,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,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,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,800ef5f0-fdd1-4f8b-8c0b-9744952bfb5b,800ef5f0-fdd1-4f8b-8c0b-9744952bfb5b,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,0f314b6b-5ed1-46ed-bdfd-cf53330c2783,1,0,322645d4-e3fb-467b-a55d-d8e74cff2ea3,322645d4-e3fb-467b-a55d-d8e74cff2ea3,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,8363bd46-1ea5-44f0-858a-05bc03f6020e,8363bd46-1ea5-44f0-858a-05bc03f6020e,1,0,0f039952-09d3-49c8-b909-e8333a3fc8f9,0f039952-09d3-49c8-b909-e8333a3fc8f9,1,0,d8fc4644-5351-443c-8b5d-5de2c4b855d1,d8fc4644-5351-443c-8b5d-5de2c4b855d1,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,9cd2fc77-a4b0-457e-a6b0-63dbf521bf90,9cd2fc77-a4b0-457e-a6b0-63dbf521bf90,1,0,a321b6db-391b-4c65-8d27-ce486d10055e,a321b6db-391b-4c65-8d27-ce486d10055e,1,0,71dfde27-3762-4dd0-9252-6e703ce1b101,71dfde27-3762-4dd0-9252-6e703ce1b101,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,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,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,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,91a0ceed-03ce-4914-9cd1-dec49bba336f,91a0ceed-03ce-4914-9cd1-dec49bba336f,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,826c2821-147d-4aaf-910c-acfbdb58a29f,826c2821-147d-4aaf-910c-acfbdb58a29f,1,0,aeea0075-bdeb-41b7-b9cc-1da7b500455f,aeea0075-bdeb-41b7-b9cc-1da7b500455f,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,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,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,60340efe-6a9e-4676-856f-87bfae5409f7,60340efe-6a9e-4676-856f-87bfae5409f7,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,793d7af5-b499-4646-9e8e-a5728bf71338,793d7af5-b499-4646-9e8e-a5728bf71338,1,0,e4850e53-03b0-43ba-8365-feb89eb38102,e4850e53-03b0-43ba-8365-feb89eb38102,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,76c802c1-1442-412f-ba91-5864c7a2f8f9,76c802c1-1442-412f-ba91-5864c7a2f8f9,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,07629bf6-5544-4de9-b1d8-851cb03766cb,07629bf6-5544-4de9-b1d8-851cb03766cb,1,0,d449a85f-2e26-4512-b98c-7be3007966ed,d449a85f-2e26-4512-b98c-7be3007966ed,1,0,581be829-b097-4f95-a0c4-7ca3f13c29fc,581be829-b097-4f95-a0c4-7ca3f13c29fc,1,0,dd978355-1fb7-44a0-ba88-4e72e9cd67a9,dd978355-1fb7-44a0-ba88-4e72e9cd67a9,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,3981b13c-f8e1-44cc-a8e8-59ee9635d029,3981b13c-f8e1-44cc-a8e8-59ee9635d029,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,06ca1680-e641-499c-94ad-2d5ce5561747,06ca1680-e641-499c-94ad-2d5ce5561747,1,0,35bbf75b-99d0-447b-acb0-a3d2c98bea56,35bbf75b-99d0-447b-acb0-a3d2c98bea56,1,0,b6a1652b-6ee8-4cab-9681-c722b60f1e2e,b6a1652b-6ee8-4cab-9681-c722b60f1e2e,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,de258ab8-2d16-4c69-9490-5819b7ae3d08,de258ab8-2d16-4c69-9490-5819b7ae3d08,1,0,f7aacf70-0b59-410a-9929-ab4ab8a2431c,f7aacf70-0b59-410a-9929-ab4ab8a2431c,1,0,5bb6ba7a-ed61-4cdd-b3db-ec9da292e7a4,5bb6ba7a-ed61-4cdd-b3db-ec9da292e7a4,1,0,b37a9edd-b6bc-40eb-b5de-f54968abc119,b37a9edd-b6bc-40eb-b5de-f54968abc119,1,0,52338832-b15a-4e56-b13d-141141677008,52338832-b15a-4e56-b13d-141141677008,1,0,e9616402-88cc-44ae-96ca-ba20cf7d38ad,e9616402-88cc-44ae-96ca-ba20cf7d38ad,1,0,1b8212d7-b834-460c-9a2b-68a5de889e5b,1b8212d7-b834-460c-9a2b-68a5de889e5b,1,0,edb423a4-89d3-408e-aafb-d57e8ee70bc0,edb423a4-89d3-408e-aafb-d57e8ee70bc0,1,0,6278dff7-da49-457f-9896-94e3ca3be75d,6278dff7-da49-457f-9896-94e3ca3be75d,1,0,c232a478-2e10-4d0c-9733-fbfc7db1ab74,c232a478-2e10-4d0c-9733-fbfc7db1ab74,1,0,2f25ecec-fe3e-463c-b538-9815d96c52c6,2f25ecec-fe3e-463c-b538-9815d96c52c6,1,0,a816deca-4863-44e2-a8ff-89bfa5fbb0ac,a816deca-4863-44e2-a8ff-89bfa5fbb0ac,1,0,157f3df0-97b7-461b-bd3e-1f2e12658adf,157f3df0-97b7-461b-bd3e-1f2e12658adf,1,0,d2d6968c-fbe6-4e09-9cdb-653ca9a97fcc,d2d6968c-fbe6-4e09-9cdb-653ca9a97fcc,1,0,ea6f491e-9ec9-456d-ae30-4a258d87dff6,ea6f491e-9ec9-456d-ae30-4a258d87dff6,1,0,c67cddce-64d0-45eb-8abb-5c76bbe27f93,c67cddce-64d0-45eb-8abb-5c76bbe27f93,1,0,4f1aa113-6d77-46c8-ac21-9e5545553499,4f1aa113-6d77-46c8-ac21-9e5545553499,1,0,6ccec21e-f26f-482c-9ce2-1f058fc492c1,6ccec21e-f26f-482c-9ce2-1f058fc492c1,1,0,6278272c-687e-46d6-9f6f-16c5ddf369bb,6278272c-687e-46d6-9f6f-16c5ddf369bb,1,0,46af6cac-4731-4ac0-a38e-fcc8a45d06bf,46af6cac-4731-4ac0-a38e-fcc8a45d06bf,1,0,fe9d7083-82f6-4390-b5a5-46c666463289,fe9d7083-82f6-4390-b5a5-46c666463289,1,0,cc194484-b3fc-4e89-8f72-de3f0e23019e,cc194484-b3fc-4e89-8f72-de3f0e23019e,1,0,9cb89abd-efb7-418e-9819-a4085c2ad61c,9cb89abd-efb7-418e-9819-a4085c2ad61c,1,0,3b615ad8-edcf-4339-9e67-3c3afadfc77f,3b615ad8-edcf-4339-9e67-3c3afadfc77f,1,0,9bc3a840-eeb9-444b-9f8a-05a8dd13e3dc,9bc3a840-eeb9-444b-9f8a-05a8dd13e3dc,1,0,5c66c80c-cad1-47ac-b7bb-a20323fe271a,5c66c80c-cad1-47ac-b7bb-a20323fe271a,1,0,e39114e4-2d69-47ad-a888-2d0ccd9f62c5,e39114e4-2d69-47ad-a888-2d0ccd9f62c5,1,0,44169edb-23f3-4937-a277-7024182d7281,44169edb-23f3-4937-a277-7024182d7281,1,0,3942118c-09ec-40cf-8de8-4321367981f1,3942118c-09ec-40cf-8de8-4321367981f1,1,0,36ace6cf-6493-4325-89ff-3c07faae09b4,36ace6cf-6493-4325-89ff-3c07faae09b4,1,0,80cf9060-8f0c-4cb1-b476-6da83c725db7,80cf9060-8f0c-4cb1-b476-6da83c725db7,1,0,bd35d814-a9d2-4f0b-9f41-e7e9d6c53b7d,bd35d814-a9d2-4f0b-9f41-e7e9d6c53b7d,1,0,b5cd0ae6-2a12-44d6-8897-587f7e31159b,b5cd0ae6-2a12-44d6-8897-587f7e31159b,1,0,7fdb2c9d-8a8b-43c9-a228-db99fef599d5,7fdb2c9d-8a8b-43c9-a228-db99fef599d5,1,0,1de28303-2d0f-46e9-bbad-e40759fb0d3e,1de28303-2d0f-46e9-bbad-e40759fb0d3e,1,0,fd265d8a-1b99-4434-9bc5-6ef22a4437a2,fd265d8a-1b99-4434-9bc5-6ef22a4437a2,1,0,bf49b842-d162-4690-bec1-acf4207db565,bf49b842-d162-4690-bec1-acf4207db565,1,0,9a9ba19a-3a90-438e-9b5b-8a03bb2820da,9a9ba19a-3a90-438e-9b5b-8a03bb2820da,1,0,0d671808-63e8-4ad3-8d83-a69aa0049862,0d671808-63e8-4ad3-8d83-a69aa0049862,1,0,545857ca-2617-4b44-9e35-1b10837059ca,545857ca-2617-4b44-9e35-1b10837059ca,1,0,4c8a84a0-1d8b-4a00-bd3c-38c8d1deaffd,4c8a84a0-1d8b-4a00-bd3c-38c8d1deaffd,1,0,9acdec8d-e59e-47f1-b97c-a8050e590f81,9acdec8d-e59e-47f1-b97c-a8050e590f81,1,0,872c3f9c-a484-467b-b5fe-b008fee5152e,872c3f9c-a484-467b-b5fe-b008fee5152e,1,0,10c678a1-7a8b-4941-b625-ee2de92ee4d5,10c678a1-7a8b-4941-b625-ee2de92ee4d5,1,0,93873fe8-10c0-4f7b-ad20-278e887f69e9,93873fe8-10c0-4f7b-ad20-278e887f69e9,1,0,13b4aa30-d586-4b26-af0e-32f0d691fec9,13b4aa30-d586-4b26-af0e-32f0d691fec9,1,0,d6d67cc5-e003-4aaa-88ae-d084dae2dc26,d6d67cc5-e003-4aaa-88ae-d084dae2dc26,1,0,60f2c9f3-3090-442c-8991-0396b8f8b195,60f2c9f3-3090-442c-8991-0396b8f8b195,1,0,628dfa98-d8e1-4c27-bf15-928aa9dd24fd,628dfa98-d8e1-4c27-bf15-928aa9dd24fd,1,0,64eba6dc-31e1-4acc-9897-1108ba5a4415,64eba6dc-31e1-4acc-9897-1108ba5a4415,1,0,5eb4aac3-8a26-44f1-9e89-ffef42dbdb2d,5eb4aac3-8a26-44f1-9e89-ffef42dbdb2d,1,0,95d28431-cf31-4b32-976d-4e6a18e1b225,95d28431-cf31-4b32-976d-4e6a18e1b225,1,0,304b45ef-1530-4f20-98c0-081c554e0360,304b45ef-1530-4f20-98c0-081c554e0360,1,0,de84e787-12a1-4f47-bdd0-85d0aeaad98a,de84e787-12a1-4f47-bdd0-85d0aeaad98a,1,0,1490798d-5cd9-4448-be69-10773ab486ee,1490798d-5cd9-4448-be69-10773ab486ee,1,0,6fa88af0-dfcc-4dcf-ab61-0c7cb03a47f7,6fa88af0-dfcc-4dcf-ab61-0c7cb03a47f7,1,0,c59644a2-5ef5-43e8-a94f-682dddd562d4,c59644a2-5ef5-43e8-a94f-682dddd562d4,1,0,d2906b4a-ddcd-4512-910a-fc6f6c4fbc21,d2906b4a-ddcd-4512-910a-fc6f6c4fbc21,1,0,6cc3fe24-0a59-4eb6-ac6d-d1b56fabbad9,6cc3fe24-0a59-4eb6-ac6d-d1b56fabbad9,1,0,ce877e78-2e91-471e-831f-171fc5b72d54,ce877e78-2e91-471e-831f-171fc5b72d54,1,0,3b50cd97-4362-4cc5-ab2c-49506aea1508,3b50cd97-4362-4cc5-ab2c-49506aea1508,1,0,56c84cd4-33c2-4529-abf3-2a542a8cfa60,56c84cd4-33c2-4529-abf3-2a542a8cfa60,1,0,dc496b24-d0e5-46b7-9c03-c470e17afb38,dc496b24-d0e5-46b7-9c03-c470e17afb38,1,0,870cb1fb-6dea-4ae2-8952-64215ab2b695,870cb1fb-6dea-4ae2-8952-64215ab2b695,1,0,4fcb5267-e015-4da1-8871-23944f21a0c5,4fcb5267-e015-4da1-8871-23944f21a0c5,1,0,dc244cd9-aec7-431d-a346-032aeae17fd8,dc244cd9-aec7-431d-a346-032aeae17fd8,1,0,043e9792-b553-4785-99bb-006d79ef0a78,043e9792-b553-4785-99bb-006d79ef0a78,1,0,054ad80c-d2f6-4219-add1-ea2becedd04f,054ad80c-d2f6-4219-add1-ea2becedd04f,1,0,aa0a7164-37f4-4175-9fa8-1f90b4bb29e1,aa0a7164-37f4-4175-9fa8-1f90b4bb29e1,1,0,e774b5b1-b8bf-4b25-845a-745d1e009917,e774b5b1-b8bf-4b25-845a-745d1e009917,1,0,319899d0-2c05-4601-a888-2b92ee445be4,319899d0-2c05-4601-a888-2b92ee445be4,1,0,ddca48c8-3254-4683-93db-c4939a2d6e72,ddca48c8-3254-4683-93db-c4939a2d6e72,1,0,f8bd3b36-b0a2-46b0-9a8c-84ea1e72dda4,f8bd3b36-b0a2-46b0-9a8c-84ea1e72dda4,1,0,d46d2f66-f041-4012-b52a-fea74eed0ec6,d46d2f66-f041-4012-b52a-fea74eed0ec6,1,0,40aa4771-78be-485a-bfb3-108d9b3234da,40aa4771-78be-485a-bfb3-108d9b3234da,1,0,07f2081c-f723-4656-83c5-16b092bd00b8,07f2081c-f723-4656-83c5-16b092bd00b8,1,0,1d60586d-8548-416d-b862-e510121da339,1d60586d-8548-416d-b862-e510121da339,1,0,7e252088-1a99-4442-a136-e2b13afcde23,7e252088-1a99-4442-a136-e2b13afcde23,1,0,ca6f8fcf-2950-4468-abee-8e84ecb4aa33,ca6f8fcf-2950-4468-abee-8e84ecb4aa33,1,0,9668096a-74bf-41e2-a150-bfbea5216d10,9668096a-74bf-41e2-a150-bfbea5216d10,1,0,2aeb05ee-1aa7-4bd1-a5b1-7f8d6a6b23de,2aeb05ee-1aa7-4bd1-a5b1-7f8d6a6b23de,1,0,bc5216fe-94a4-4f55-ab91-462278c748c4,bc5216fe-94a4-4f55-ab91-462278c748c4,1,0,a8ac92ab-a476-4e79-8a3f-40e67d09a1bf,a8ac92ab-a476-4e79-8a3f-40e67d09a1bf,1,0,1621383d-36a8-4215-9f63-bdff10d2730a,1621383d-36a8-4215-9f63-bdff10d2730a,1,0,d9cc0bdf-ec8a-41e6-a04d-f87a277dc07e,d9cc0bdf-ec8a-41e6-a04d-f87a277dc07e,1,0,e7d74349-6636-485f-888d-57086beb7574,e7d74349-6636-485f-888d-57086beb7574,1,0,93210c19-7351-4415-9fe0-f646919594d9,93210c19-7351-4415-9fe0-f646919594d9,1,0,d77c2205-28a0-4069-b616-df456cd415a6,d77c2205-28a0-4069-b616-df456cd415a6,1,0,20cbe469-17f9-44da-8317-91feef8c5d46,20cbe469-17f9-44da-8317-91feef8c5d46,1,0,e4fc1eae-ecdc-42ac-b338-e695b663d642,e4fc1eae-ecdc-42ac-b338-e695b663d642,1,0,c1720905-2d51-4b90-9a3b-fdc001e8cea7,c1720905-2d51-4b90-9a3b-fdc001e8cea7,1,0,4becceed-362f-4412-90ee-769cc69742d7,4becceed-362f-4412-90ee-769cc69742d7,1,0,d6b23426-6972-4ff2-82bb-b2780dd732cb,d6b23426-6972-4ff2-82bb-b2780dd732cb,1,0,20992e23-f94b-459c-8af9-58a5986bacd0,20992e23-f94b-459c-8af9-58a5986bacd0,1,0,b1a939b9-cd2a-44c6-b1db-09356ab0303d,b1a939b9-cd2a-44c6-b1db-09356ab0303d,1,0,a7801847-a4c8-46ec-b873-c199191b9b2b,a7801847-a4c8-46ec-b873-c199191b9b2b,1,0,080a53d6-6c03-48f7-93bf-dec49afc14b7,080a53d6-6c03-48f7-93bf-dec49afc14b7,1,0,8ba908dc-6020-4b01-9a28-b3816b8cc118,8ba908dc-6020-4b01-9a28-b3816b8cc118,1,0,53d89038-48f5-4b64-9a1b-0a8d8dc788d2,53d89038-48f5-4b64-9a1b-0a8d8dc788d2,1,0,710202be-238f-42fe-9a6e-72726762a80c,710202be-238f-42fe-9a6e-72726762a80c,1,0,5299473d-0fb5-4795-a432-33ebf7051e49,5299473d-0fb5-4795-a432-33ebf7051e49,1,0,fbfaffab-a28c-49a4-bc14-e87317036f2f,fbfaffab-a28c-49a4-bc14-e87317036f2f,1,0,6e6c51d9-afba-4699-9eb8-f60163508072,6e6c51d9-afba-4699-9eb8-f60163508072,1,0,4c3afb2f-51be-4980-9ef9-d3fd3ce44ecb,4c3afb2f-51be-4980-9ef9-d3fd3ce44ecb,1,0,4ddabc05-424e-41fa-871f-dbba5b517795,4ddabc05-424e-41fa-871f-dbba5b517795,1,0,19b869c1-5eb4-43e3-99be-7e03385fa053,19b869c1-5eb4-43e3-99be-7e03385fa053,1,0,2421d94f-0bfd-47a1-b179-3a5d983e09c8,2421d94f-0bfd-47a1-b179-3a5d983e09c8,1,0,94c39b62-ddb2-4503-9fd1-206b54d899de,94c39b62-ddb2-4503-9fd1-206b54d899de,1,0,8b4fd3db-66d6-4290-9814-2c2492f733cb,8b4fd3db-66d6-4290-9814-2c2492f733cb,1,0,4969bc1b-217f-44a3-82cf-97c56f51a25e,4969bc1b-217f-44a3-82cf-97c56f51a25e,1,0,f6a8ff93-b1b5-499c-91a2-172000e5c776,f6a8ff93-b1b5-499c-91a2-172000e5c776,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,710059de-c70e-4b6e-b2a0-11197139144d,710059de-c70e-4b6e-b2a0-11197139144d,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,225a011b-337d-4c83-9771-95eebce18024,225a011b-337d-4c83-9771-95eebce18024,1,0,ffd14055-0847-48da-8807-0ba07decf6a5,ffd14055-0847-48da-8807-0ba07decf6a5,1,0,ee808b7e-8313-4838-8a5a-9b49e3ce7e3e,ee808b7e-8313-4838-8a5a-9b49e3ce7e3e,1,0,a8450a10-c18c-4b99-828b-870f38c32991,a8450a10-c18c-4b99-828b-870f38c32991,1,0,ad5e61a9-2f12-4629-9d7b-7882cc885992,ad5e61a9-2f12-4629-9d7b-7882cc885992,1,0,68a66e43-123c-4dc4-8eb7-3b728a6dbf40,68a66e43-123c-4dc4-8eb7-3b728a6dbf40,1,0,b016e858-7a3b-473a-a9b7-a6c718d0a028,b016e858-7a3b-473a-a9b7-a6c718d0a028,1,0,7db81d96-e359-4157-b5cb-3b50622d6556,7db81d96-e359-4157-b5cb-3b50622d6556,1,0,aa09ff66-3f4a-4746-9a99-697a2915b3fc,aa09ff66-3f4a-4746-9a99-697a2915b3fc,1,0,21305c37-31fb-46f3-85bc-8743c22faa02,21305c37-31fb-46f3-85bc-8743c22faa02,1,0,c5bace94-8fbc-4ad1-9567-a41332e8f00a,c5bace94-8fbc-4ad1-9567-a41332e8f00a,1,0,9fc40f79-c538-4ea5-a939-67bdd540d805,9fc40f79-c538-4ea5-a939-67bdd540d805,1,0,70443b2a-04db-4573-a4ea-e35078b383d7,70443b2a-04db-4573-a4ea-e35078b383d7,1,0,fb760c8a-d0bd-4445-9d68-85e5145d0182,fb760c8a-d0bd-4445-9d68-85e5145d0182,1,0,ecf54919-4cf2-4b30-9efa-de517d823555,ecf54919-4cf2-4b30-9efa-de517d823555,1,0,a4814357-6575-4a55-808f-4a4c94047110,a4814357-6575-4a55-808f-4a4c94047110,1,0,b142e431-66bd-4e28-a159-40df0c12fee2,b142e431-66bd-4e28-a159-40df0c12fee2,1,0,e7255edf-1584-4330-99aa-d379e75570a5,e7255edf-1584-4330-99aa-d379e75570a5,1,0,47707f66-74e7-4557-a0bf-8ddcd4e97e01,47707f66-74e7-4557-a0bf-8ddcd4e97e01,1,0,1e6fbe07-560c-4aa5-bd5d-32b5b1aed16f,1e6fbe07-560c-4aa5-bd5d-32b5b1aed16f,1,0,0d87a82d-fc3f-4395-9480-29cc5d45e11c,0d87a82d-fc3f-4395-9480-29cc5d45e11c,1,0,f6aa1c0d-a49e-4b22-8c2f-37d74272ca28,f6aa1c0d-a49e-4b22-8c2f-37d74272ca28,1,0,159d89e8-7215-4fc9-8455-7ecd4d4c7bfd,159d89e8-7215-4fc9-8455-7ecd4d4c7bfd,1,0,006cb169-055c-4f47-bdc9-0de36d6a4b7d,006cb169-055c-4f47-bdc9-0de36d6a4b7d,1,0,c26d2798-4c23-4060-8893-4403f14e43d3,c26d2798-4c23-4060-8893-4403f14e43d3,1,0,6cbdbace-b430-4e44-a325-77c61a1575ce,6cbdbace-b430-4e44-a325-77c61a1575ce,1,0,cf48bf76-6cc9-4493-b64e-5d265ef2ee71,cf48bf76-6cc9-4493-b64e-5d265ef2ee71,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,9eab48bf-3297-4f81-a448-a3a746d1ce83,9eab48bf-3297-4f81-a448-a3a746d1ce83,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,9a5b9bf4-71b8-41f2-8e23-8c396357f0a5,9a5b9bf4-71b8-41f2-8e23-8c396357f0a5,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,cfc0adf6-87b4-4c8a-91e2-46c2616b319b,cfc0adf6-87b4-4c8a-91e2-46c2616b319b,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,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,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,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,2e54b3e8-6672-48d5-802a-23d5144fed79,2e54b3e8-6672-48d5-802a-23d5144fed79,1,0,2a7c4ae2-aab3-48b3-b04f-7be6989939e8,2a7c4ae2-aab3-48b3-b04f-7be6989939e8,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,daad5f66-3bb4-4389-bca1-bf528ad993a3,daad5f66-3bb4-4389-bca1-bf528ad993a3,1,0,ad043f15-b2c9-4a05-82b9-6428708584b2,ad043f15-b2c9-4a05-82b9-6428708584b2,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,643f4f37-fa02-4976-8701-7a5a44b0109a,643f4f37-fa02-4976-8701-7a5a44b0109a,1,0,278a0559-07b2-4ee3-a821-c0395f9a33c1,278a0559-07b2-4ee3-a821-c0395f9a33c1,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,54d9f5bb-599c-4d4b-b616-1445e7461813,54d9f5bb-599c-4d4b-b616-1445e7461813,1,0,7d0dbd52-8bb0-4d72-87fa-2d7066e5e189,7d0dbd52-8bb0-4d72-87fa-2d7066e5e189,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,e0e12708-da10-4f81-9e56-5876ddc77084,e0e12708-da10-4f81-9e56-5876ddc77084,1,0,63ad43fe-a050-47f7-af4f-099aa10255af,63ad43fe-a050-47f7-af4f-099aa10255af,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,223e4ccf-5638-4576-bd88-7c54be68de47,223e4ccf-5638-4576-bd88-7c54be68de47,1,0,e3bae40b-5316-4392-8c82-b601922a6582,e3bae40b-5316-4392-8c82-b601922a6582,1,0,26806602-54be-4b2f-96ae-3e2a31616a4e,26806602-54be-4b2f-96ae-3e2a31616a4e,1,0,738fc48f-5160-4786-84bb-053c188662ce,738fc48f-5160-4786-84bb-053c188662ce,1,0,6e883b67-f74c-4791-8fb3-446534e3a6db,6e883b67-f74c-4791-8fb3-446534e3a6db,1,0,24fed307-445d-44b5-8964-9d08d1003061,24fed307-445d-44b5-8964-9d08d1003061,1,0,8e4c2dbe-15b7-4e04-9f07-892d70741a97,8e4c2dbe-15b7-4e04-9f07-892d70741a97,1,0,67691860-e374-451f-aee3-05a35df2a477,67691860-e374-451f-aee3-05a35df2a477,1,0,4337d956-809f-4140-a7bb-5f5c00a65ccb,4337d956-809f-4140-a7bb-5f5c00a65ccb,1,0,dbed7302-370e-4e0f-b505-3a86fe4c4ebd,dbed7302-370e-4e0f-b505-3a86fe4c4ebd,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,67e8b7dc-e0d7-44a9-81d0-6b31bb318145,67e8b7dc-e0d7-44a9-81d0-6b31bb318145,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,80641554-046e-4c4a-8544-a35b4c554dad,80641554-046e-4c4a-8544-a35b4c554dad,1,0,4d9df55f-724d-4792-96a7-885df898e7cc,4d9df55f-724d-4792-96a7-885df898e7cc,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,50591ed3-06db-48f0-8e2b-a70b8ea2d09f,50591ed3-06db-48f0-8e2b-a70b8ea2d09f,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,94819f9d-8a93-4a44-b1db-af0f095c7c1d,94819f9d-8a93-4a44-b1db-af0f095c7c1d,1,0,1eb8721d-bbeb-4cca-9e4f-e8386949c93c,1eb8721d-bbeb-4cca-9e4f-e8386949c93c,1,0,0012d153-685c-48ef-9623-8aeff3795aa6,0012d153-685c-48ef-9623-8aeff3795aa6,1,0,8483a18c-ec6f-455c-9568-2019025a25d2,8483a18c-ec6f-455c-9568-2019025a25d2,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,ab6d8fdd-7788-474d-9645-53008d7fa603,ab6d8fdd-7788-474d-9645-53008d7fa603,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,9f81693c-4ddd-47ec-b111-d073e1510752,9f81693c-4ddd-47ec-b111-d073e1510752,1,0,8a2811be-64c5-44ba-a52c-482c125eb092,8a2811be-64c5-44ba-a52c-482c125eb092,1,0,5245bee4-ebb7-45d1-b40a-2a06900e55b1,5245bee4-ebb7-45d1-b40a-2a06900e55b1,1,0,cc8cdc82-ee97-4426-b889-95d2286af37c,cc8cdc82-ee97-4426-b889-95d2286af37c,1,0,149104f3-a4c7-47e5-8057-b5bcc754a4f2,149104f3-a4c7-47e5-8057-b5bcc754a4f2,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,4b8fdb79-a9a0-4a53-9a95-82b8f64b1aa2,4b8fdb79-a9a0-4a53-9a95-82b8f64b1aa2,1,0,d5523a3a-2fb4-4f6c-a76c-08864db125d9,d5523a3a-2fb4-4f6c-a76c-08864db125d9,1,0,28f646f0-1ffc-495b-98d8-f9687172e22a,28f646f0-1ffc-495b-98d8-f9687172e22a,1,0,ecfc26a8-6353-4c78-b469-7ef5b548aa33,ecfc26a8-6353-4c78-b469-7ef5b548aa33,1,0,6ed475b1-7b4f-41d8-957b-18e82addd4d9,6ed475b1-7b4f-41d8-957b-18e82addd4d9,1,0,7be76d5d-7585-4766-8690-9d3c9fc56787,7be76d5d-7585-4766-8690-9d3c9fc56787,1,0,22a6d909-b793-4540-8f4e-605e0448bf2a,22a6d909-b793-4540-8f4e-605e0448bf2a,1,0,2e01082e-9b7b-47f5-900f-1c2e8dfb3f20,2e01082e-9b7b-47f5-900f-1c2e8dfb3f20,1,0,16547db4-7d90-451b-b0a0-33a59837d1f6,16547db4-7d90-451b-b0a0-33a59837d1f6,1,0,f008b0a5-266c-47ab-a15d-95e23bf7041b,f008b0a5-266c-47ab-a15d-95e23bf7041b,1,0,2918a7ba-1b7f-4f1b-8237-d4bc09bcc35a,2918a7ba-1b7f-4f1b-8237-d4bc09bcc35a,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,e1132cbb-7045-47e2-bbc7-6e92e4dff131,e1132cbb-7045-47e2-bbc7-6e92e4dff131,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,85d7ea13-c521-44b8-9dce-5e57529a21db,85d7ea13-c521-44b8-9dce-5e57529a21db,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,0c38782c-6559-4f1c-88af-aa022285ffbd,0c38782c-6559-4f1c-88af-aa022285ffbd,1,0,eed23203-924d-4092-a1a8-a7cdd72489e5,eed23203-924d-4092-a1a8-a7cdd72489e5,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,993d8672-af86-4179-a9ef-228303748bcd,993d8672-af86-4179-a9ef-228303748bcd,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,3fa9aa34-382c-49fa-87d8-34bedcde5836,3fa9aa34-382c-49fa-87d8-34bedcde5836,1,0,ae4825b1-dd4e-4d0e-8133-da6d1a441c36,ae4825b1-dd4e-4d0e-8133-da6d1a441c36,1,0,f7e6da22-c2b7-47c9-8062-e612a56ae61c,f7e6da22-c2b7-47c9-8062-e612a56ae61c,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,a8495e24-781f-49ba-bbc9-4a34704e4a17,a8495e24-781f-49ba-bbc9-4a34704e4a17,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,fb7011ca-4e05-45d8-9698-09406a4c033f,fb7011ca-4e05-45d8-9698-09406a4c033f,1,0,8b20dcaa-5ec3-4ce7-ac37-3ea6f2a2bfe9,8b20dcaa-5ec3-4ce7-ac37-3ea6f2a2bfe9,1,0,5b4ba51e-7757-4a01-aecd-a2c326dcfffe,5b4ba51e-7757-4a01-aecd-a2c326dcfffe,1,0,85565415-40b8-47e9-9c5d-3bb72824fdd3,85565415-40b8-47e9-9c5d-3bb72824fdd3,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,a805d33c-2cb0-4862-943f-06ded997b940,a805d33c-2cb0-4862-943f-06ded997b940,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,eabb04a7-2ae0-44ad-bd3a-9118b0c3886c,eabb04a7-2ae0-44ad-bd3a-9118b0c3886c,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,87ed7963-c2e4-4515-b768-47cf72442fd0,87ed7963-c2e4-4515-b768-47cf72442fd0,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,ec966ef2-b291-4937-a164-5c2b461871f8,ec966ef2-b291-4937-a164-5c2b461871f8,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,440ecfe8-72fd-447b-8680-c4a8c43f2c72,440ecfe8-72fd-447b-8680-c4a8c43f2c72,1,0,5afe3a0f-1bbc-4f04-87b3-f98d54b65a42,5afe3a0f-1bbc-4f04-87b3-f98d54b65a42,1,0,ee9e8f50-4d4f-43aa-99eb-cda2308c903e,ee9e8f50-4d4f-43aa-99eb-cda2308c903e,1,0,4ff043c1-6c0b-4889-a684-23da5a35b9c2,4ff043c1-6c0b-4889-a684-23da5a35b9c2,1,0,6fe56ecb-c969-4c03-8e6b-65395c29e817,6fe56ecb-c969-4c03-8e6b-65395c29e817,1,0,48627a8d-b108-43b8-a58e-fd98e4220639,48627a8d-b108-43b8-a58e-fd98e4220639,1,0,2a8eb62d-2795-48ab-ae02-68527996f411,2a8eb62d-2795-48ab-ae02-68527996f411,1,0,d3bf09be-0f21-4dc3-a525-1c4dc75928ea,d3bf09be-0f21-4dc3-a525-1c4dc75928ea,1,0,5ca880c5-7c34-4c31-a2b8-46265ddea7d4,5ca880c5-7c34-4c31-a2b8-46265ddea7d4,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,e9939b36-bceb-40e2-a182-1d5cc248f353,e9939b36-bceb-40e2-a182-1d5cc248f353,1,0,619d3ac6-40fe-485d-a407-fe065f16b186,619d3ac6-40fe-485d-a407-fe065f16b186,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,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,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,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,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,bf1ab189-634d-4b31-82e3-35fb15305da9,bf1ab189-634d-4b31-82e3-35fb15305da9,1,0,046d2201-5fe3-4451-9db0-6f784efadaf8,046d2201-5fe3-4451-9db0-6f784efadaf8,1,0,bb532d83-69d8-4733-9d18-21d34ee0330a,bb532d83-69d8-4733-9d18-21d34ee0330a,1,0,c2a8f4a7-882a-4262-ad9d-0f8ad9821488,c2a8f4a7-882a-4262-ad9d-0f8ad9821488,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,0f0ac56d-b068-46f2-8440-731683c2b42a,0f0ac56d-b068-46f2-8440-731683c2b42a,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,5c17a594-eb0b-4cdf-af35-0eaba968e065,5c17a594-eb0b-4cdf-af35-0eaba968e065,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,c1bcfc01-529c-4774-a79b-052eee157f2d,c1bcfc01-529c-4774-a79b-052eee157f2d,1,0,952b49e0-e1a1-4130-8fb2-083e3988255c,952b49e0-e1a1-4130-8fb2-083e3988255c,1,0,367b227f-f66e-4cec-9fc3-850bca8bc6c8,367b227f-f66e-4cec-9fc3-850bca8bc6c8,1,0,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1a3a8a3a-dc34-4491-883d-57c3fb69840a,1,0,7fcb9d79-1144-4099-8d7f-309d3bf045a5,7fcb9d79-1144-4099-8d7f-309d3bf045a5,1,0,db418313-8583-48a9-9fec-e2c5de4fdf76,db418313-8583-48a9-9fec-e2c5de4fdf76,1,0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,6277a3b5-b158-4b58-a92b-5efdf2dabac0,1,0,2f26970e-b964-43e2-8d6d-999bbc577689,2f26970e-b964-43e2-8d6d-999bbc577689,1,0,65a50026-88e7-45dd-bb0c-f212218ca093,65a50026-88e7-45dd-bb0c-f212218ca093,1,0,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,ed9e5fbe-1db8-4fb9-a9fa-bb1927cae196,1,0,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1dd2b2c4-00aa-4029-ba32-fe82aa5c6cbe,1,0,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,2f4ea53a-c84d-4d5f-ae7a-817a20ccd96a,1,0,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,b2a39c8a-d884-4dfe-a593-e6788dabbd6b,1,0,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,3d0afdb2-ab8f-43c0-920a-88ed85545b2f,1,0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,17477f72-0622-445c-9cb7-2c5a5a65bbe0,1,0,01a1fd57-6c09-4a5b-9f75-da4366159423,01a1fd57-6c09-4a5b-9f75-da4366159423,1,0,71d79b25-3682-4f2c-b6b2-a307e3e72844,71d79b25-3682-4f2c-b6b2-a307e3e72844,1,0,45c1ed0d-202e-4289-820f-e1de0f544386,45c1ed0d-202e-4289-820f-e1de0f544386,1,0,e889e80f-97c9-43c6-8268-d652764fcafb,e889e80f-97c9-43c6-8268-d652764fcafb,1,0,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,4eb48d3a-e2d5-4db5-b08b-4b6ccc701f77,1,0,95ccaaf2-f6ca-4540-8a39-3c90121c4236,95ccaaf2-f6ca-4540-8a39-3c90121c4236,1,0,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,7c920b8b-1dbf-4f7e-99af-1ca784a59a64,1,0,f47a9bec-2a9f-4955-a432-acb63a5b0e46,f47a9bec-2a9f-4955-a432-acb63a5b0e46,1,0,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1ba73b6b-cb72-4370-a268-279dcd7a54b9,1,0,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,49de6b63-a845-4b5a-9818-18a3e0bb6fe8,1,0,b787818e-5572-4ef2-ba54-1e9b69569824,b787818e-5572-4ef2-ba54-1e9b69569824,1,0,1e13bd37-61b5-4901-a607-e00e5d1900a8,1e13bd37-61b5-4901-a607-e00e5d1900a8,1,0,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,395b43e4-c18b-4f68-b99c-aed8d4b8cac9,1,0,231d7b21-c00c-4782-b610-d56593be436f,231d7b21-c00c-4782-b610-d56593be436f,1,0,79250d1a-77ff-4015-a5b5-83460b1611e2,79250d1a-77ff-4015-a5b5-83460b1611e2,1,0,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,041c364f-0498-494f-9e41-82cb416c0862,041c364f-0498-494f-9e41-82cb416c0862,1,0,ec37d236-db36-44ef-afc2-267af1f40c1f,ec37d236-db36-44ef-afc2-267af1f40c1f,1,0,913830c8-da01-4b7e-9d83-d406c2fefd49,913830c8-da01-4b7e-9d83-d406c2fefd49,1,0,293cda8c-1cc8-42c0-a68f-d22163aed4f1,293cda8c-1cc8-42c0-a68f-d22163aed4f1,1,0,d835f08d-79c6-4e79-a7c1-f00dc05778b9,d835f08d-79c6-4e79-a7c1-f00dc05778b9,1,0,653dbf7d-a213-42c7-98da-9e639f41bb02,653dbf7d-a213-42c7-98da-9e639f41bb02,1,0,8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5,8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5,1,0,5adaafcf-3d67-418d-b47d-d0d8c65f1f46,5adaafcf-3d67-418d-b47d-d0d8c65f1f46,1,0,ee0275e4-a497-4623-9d2f-6308ea2e70ca,ee0275e4-a497-4623-9d2f-6308ea2e70ca,1,0,5e48841c-0a65-457f-8952-fa97aae3207d,5e48841c-0a65-457f-8952-fa97aae3207d,1,0,f68ec923-89c8-4c83-80a2-2d5e096dbbd8,f68ec923-89c8-4c83-80a2-2d5e096dbbd8,1,0,f278bdf8-543a-4427-b2f1-3670c61502ae,f278bdf8-543a-4427-b2f1-3670c61502ae,1,0,f0cebe1f-8b1a-482c-9224-63df4fd36524,f0cebe1f-8b1a-482c-9224-63df4fd36524,1,0,00ce0cd2-9840-49a0-b9df-dc64becd3e65,00ce0cd2-9840-49a0-b9df-dc64becd3e65,1,0,db6f11c0-8530-43c1-811a-48797be89ec1,db6f11c0-8530-43c1-811a-48797be89ec1,1,0,c2782a2b-f910-4d4d-ba1b-49ef7854bae0,c2782a2b-f910-4d4d-ba1b-49ef7854bae0,1,0,ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171,ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171,1,0,9f1c8979-2b3d-4a96-af6c-4577541696a3,9f1c8979-2b3d-4a96-af6c-4577541696a3,1,0,32371dfd-c890-4bed-bd68-45db299c9caf,32371dfd-c890-4bed-bd68-45db299c9caf,1,0,eeb298cf-8df3-41fe-bb48-9c83a24a8206,eeb298cf-8df3-41fe-bb48-9c83a24a8206,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,c6c26c3c-de7a-4ed4-944d-ada62cf1ab8f,c6c26c3c-de7a-4ed4-944d-ada62cf1ab8f,1,0,a54872fc-4e7e-4829-8564-1b2e7f0ee134,a54872fc-4e7e-4829-8564-1b2e7f0ee134,1,0,fe10d76e-3f80-4529-83a8-74c452a781f6,fe10d76e-3f80-4529-83a8-74c452a781f6,1,0,e3d1a7f5-ba86-414e-b2d2-89cc9db51667,e3d1a7f5-ba86-414e-b2d2-89cc9db51667,1,0,13333d66-ff04-49ec-973a-1229da8c9f50,13333d66-ff04-49ec-973a-1229da8c9f50,1,0,cb8ab5b6-876f-4aae-952f-2284bf0f539d,cb8ab5b6-876f-4aae-952f-2284bf0f539d,1,0,c9281eef-2e73-4b0f-ab72-7b4f6f10d787,c9281eef-2e73-4b0f-ab72-7b4f6f10d787,1,0,4a6fde33-6a58-4827-bdf9-b5e28e8cff6b,4a6fde33-6a58-4827-bdf9-b5e28e8cff6b,1,0,e2eadc5b-1b78-4ae4-8a55-a42402bb458b,e2eadc5b-1b78-4ae4-8a55-a42402bb458b,1,0,1e7effa9-3d8c-4d6c-bad2-98a3fd57ff33,1e7effa9-3d8c-4d6c-bad2-98a3fd57ff33,1,0,4c353b16-e6b6-4bd2-9d22-ce50a6281402,4c353b16-e6b6-4bd2-9d22-ce50a6281402,1,0,31f12f68-e5f7-4078-aca4-ebe32699fd6c,31f12f68-e5f7-4078-aca4-ebe32699fd6c,1,0,7e67f946-a80f-428e-a0eb-22c1a58b6fcf,7e67f946-a80f-428e-a0eb-22c1a58b6fcf,1,0,040cd37a-d272-4a87-b125-25d2cb8a2f9e,040cd37a-d272-4a87-b125-25d2cb8a2f9e,1,0,0f3e12fd-d60c-4323-8010-3f2951012d36,0f3e12fd-d60c-4323-8010-3f2951012d36,1,0,cf8c78d6-e1e0-4953-9928-b8d333e2c1ca,cf8c78d6-e1e0-4953-9928-b8d333e2c1ca,1,0,970421ca-4cb5-41f1-8e83-91ea4481ba9a,970421ca-4cb5-41f1-8e83-91ea4481ba9a,1,0,eb7aed6a-718d-4439-bea6-e7ede4987e3d,eb7aed6a-718d-4439-bea6-e7ede4987e3d,1,0,51ab4435-d8a2-4f54-b2ff-9465b0a4eef3,51ab4435-d8a2-4f54-b2ff-9465b0a4eef3,1,0,2f9d50bd-3e82-4321-81e6-2290b5a8a25e,2f9d50bd-3e82-4321-81e6-2290b5a8a25e,1,0,63a34a52-83e7-4644-8a70-9a845b5b18f2,63a34a52-83e7-4644-8a70-9a845b5b18f2,1,0,6f612a9e-c264-4856-98cf-e1a5b8ff7c97,6f612a9e-c264-4856-98cf-e1a5b8ff7c97,1,0,6d7b4670-9c33-41da-afca-bf1e01447623,6d7b4670-9c33-41da-afca-bf1e01447623,1,0,de31505e-3190-4b8c-81e9-8e2c2c7a1809,de31505e-3190-4b8c-81e9-8e2c2c7a1809,1,0,a07f12e8-f62c-4325-b0f4-df68b4b13e45,a07f12e8-f62c-4325-b0f4-df68b4b13e45,1,0,960dc389-b6bb-40ad-bcf7-a07b8c25d6f5,960dc389-b6bb-40ad-bcf7-a07b8c25d6f5,1,0,d8d61ffe-518a-4f06-ba47-238c0973a01a,d8d61ffe-518a-4f06-ba47-238c0973a01a,1,0,12b82221-3a4e-4d65-b1eb-001cc22725a7,12b82221-3a4e-4d65-b1eb-001cc22725a7,1,0,b301cd92-809f-4b0e-966b-8ab95e85ecb3,b301cd92-809f-4b0e-966b-8ab95e85ecb3,1,0,f0c12406-79a9-48e3-b470-b2148d3c9990,f0c12406-79a9-48e3-b470-b2148d3c9990,1,0,a587b305-efbf-43be-bf2e-95c4a33e9f3b,a587b305-efbf-43be-bf2e-95c4a33e9f3b,1,0,ba156cdc-ac78-4827-9598-f0bb7cc7569c,ba156cdc-ac78-4827-9598-f0bb7cc7569c,1,0,c7e646e7-c353-4549-ac4a-1b088be7f684,c7e646e7-c353-4549-ac4a-1b088be7f684,1,0,1db14384-34b2-422d-a7ee-fc930f48cfd1,1db14384-34b2-422d-a7ee-fc930f48cfd1,1,0,4b792d87-b16f-47b1-85a8-781365c2f135,4b792d87-b16f-47b1-85a8-781365c2f135,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,100ec1d0-3719-4feb-8a66-02f2c89fcd36,100ec1d0-3719-4feb-8a66-02f2c89fcd36,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,ecb7dd1b-46d6-46b5-a51f-699f068ad6a0,ecb7dd1b-46d6-46b5-a51f-699f068ad6a0,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,fd9177e4-1277-4f77-be3e-07e169fad918,fd9177e4-1277-4f77-be3e-07e169fad918,1,0,2177e3f0-0689-43ec-b79a-52d95f59a75a,2177e3f0-0689-43ec-b79a-52d95f59a75a,1,0,b7cfe3ee-1d3c-4c04-993a-014e9040e7ac,b7cfe3ee-1d3c-4c04-993a-014e9040e7ac,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,5ede72fd-2510-4c06-b625-be740bb04e29,5ede72fd-2510-4c06-b625-be740bb04e29,1,0,17f37228-b0cd-420d-bc82-b18dc04c03c9,17f37228-b0cd-420d-bc82-b18dc04c03c9,1,0,3f9b66ea-7db2-434d-8e3b-00df8eb11dbd,3f9b66ea-7db2-434d-8e3b-00df8eb11dbd,1,0,d43fb14b-2051-4ba5-8379-af6996e603b3,d43fb14b-2051-4ba5-8379-af6996e603b3,1,0,cfb01fef-b70d-41ac-82b9-d6d2e9644388,cfb01fef-b70d-41ac-82b9-d6d2e9644388,1,0,91dee0d3-14b5-4aa1-9058-8f949e7df923,91dee0d3-14b5-4aa1-9058-8f949e7df923,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,6e0fa31a-5081-4fc7-b5ec-563c6e4ad001,6e0fa31a-5081-4fc7-b5ec-563c6e4ad001,1,0,52606e9e-1f82-414c-897f-f3ca923fa480,52606e9e-1f82-414c-897f-f3ca923fa480,1,0,eefa26d9-bb15-4911-8772-99e49a20c57d,eefa26d9-bb15-4911-8772-99e49a20c57d,1,0,5068e74a-10e7-4035-97b0-14c91566defe,5068e74a-10e7-4035-97b0-14c91566defe,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,68deecfd-7564-487f-aaa5-e3cbe122475d,68deecfd-7564-487f-aaa5-e3cbe122475d,1,0,f280872c-7ab3-47fe-a171-2b0e273cf4e7,f280872c-7ab3-47fe-a171-2b0e273cf4e7,1,0,c6fda056-0949-4c8d-83bc-2091e0712674,c6fda056-0949-4c8d-83bc-2091e0712674,1,0,1dc9239f-197d-4497-a947-d03cca15b858,1dc9239f-197d-4497-a947-d03cca15b858,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,e402b02e-fb2b-4ccc-aa30-ef1a9cb7e17b,e402b02e-fb2b-4ccc-aa30-ef1a9cb7e17b,1,0,10d1e6bf-5ec8-44d8-ae31-0d22bccb5f60,10d1e6bf-5ec8-44d8-ae31-0d22bccb5f60,1,0,7fddef11-7b49-4911-8c66-8d2f94d3cbbd,7fddef11-7b49-4911-8c66-8d2f94d3cbbd,1,0,be438a36-2036-4f27-a9a3-37fb5ba5d6ab,be438a36-2036-4f27-a9a3-37fb5ba5d6ab,1,0,fabf9c9e-d35c-42e0-a949-6c54cb24990f,fabf9c9e-d35c-42e0-a949-6c54cb24990f,1,0,e47df890-3925-4410-ae48-63cb8e3d94f8,e47df890-3925-4410-ae48-63cb8e3d94f8,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,b369842d-c20e-4b68-9d0e-701707584b2f,b369842d-c20e-4b68-9d0e-701707584b2f,1,0,de23a2ca-4607-4488-be7b-23ea28875d02,de23a2ca-4607-4488-be7b-23ea28875d02,1,0,c0049c93-a264-44f6-8740-36a055a5b472,c0049c93-a264-44f6-8740-36a055a5b472,1,0,3c3bad38-ebd2-456d-86d9-b024c3afaedd,3c3bad38-ebd2-456d-86d9-b024c3afaedd,1,0,6b07201f-e728-4beb-a607-b05c68a645ca,6b07201f-e728-4beb-a607-b05c68a645ca,1,0,5c31cd2e-9247-4357-8c4b-3995470f00fc,5c31cd2e-9247-4357-8c4b-3995470f00fc,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,316553f3-bed7-4517-86ed-6520c1e536d9,316553f3-bed7-4517-86ed-6520c1e536d9,1,0,1255dbc8-29fc-4cd1-a2ed-a97c626dea5c,1255dbc8-29fc-4cd1-a2ed-a97c626dea5c,1,0,ee538127-bfa3-487a-9595-e69968595113,ee538127-bfa3-487a-9595-e69968595113,1,0,6b297ab7-7ff9-45a7-9075-ca3a1878cb2b,6b297ab7-7ff9-45a7-9075-ca3a1878cb2b,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,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,e79dd738-4e6c-411a-97a2-d0acbe4918ee,e79dd738-4e6c-411a-97a2-d0acbe4918ee,1,0,571a910a-67c7-4fe9-b06e-78893498a606,571a910a-67c7-4fe9-b06e-78893498a606,1,0,86f98256-87d1-4922-8d70-a5d2cad1c385,86f98256-87d1-4922-8d70-a5d2cad1c385,1,0,05faa67b-195a-4f46-8e47-30c4208cbc64,05faa67b-195a-4f46-8e47-30c4208cbc64,1,0,be75d0b2-c9db-4dab-9e32-dbe26d667508,be75d0b2-c9db-4dab-9e32-dbe26d667508,1,0,299c014f-996a-4a99-a5be-a7cfd5ee45e4,299c014f-996a-4a99-a5be-a7cfd5ee45e4,1,0,2569b69d-006f-478e-83b7-9163048b34bb,2569b69d-006f-478e-83b7-9163048b34bb,1,0,1ee47933-8117-4d47-9245-476c0ed3a373,1ee47933-8117-4d47-9245-476c0ed3a373,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,05507f2b-eed8-4da4-8efc-77d9d8e2daca,05507f2b-eed8-4da4-8efc-77d9d8e2daca,1,0,0440ed06-3f42-48a8-9431-fd608920b577,0440ed06-3f42-48a8-9431-fd608920b577,1,0,37be75c9-bf1a-437a-ab05-f9e3aac6f440,37be75c9-bf1a-437a-ab05-f9e3aac6f440,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,24b4dd9e-825f-471b-b15d-ae21a508d183,24b4dd9e-825f-471b-b15d-ae21a508d183,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,929e9199-dfd5-497d-ad77-6638d20c7336,929e9199-dfd5-497d-ad77-6638d20c7336,1,0,4d1546ee-30ff-4cf7-afd3-60b565e3cb53,4d1546ee-30ff-4cf7-afd3-60b565e3cb53,1,0,aaf51715-f468-4856-b9ae-fd66bc143633,aaf51715-f468-4856-b9ae-fd66bc143633,1,0,e9650eea-d35a-4abc-977c-fb9b2abba0e5,e9650eea-d35a-4abc-977c-fb9b2abba0e5,1,0,b00626a3-5438-40c4-8ca9-5609e9dfe476,b00626a3-5438-40c4-8ca9-5609e9dfe476,1,0,b537f309-f957-4804-9f0f-03a71aedf694,b537f309-f957-4804-9f0f-03a71aedf694,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,9b26aa5f-1e77-4261-adf6-6f2f24f5af33,9b26aa5f-1e77-4261-adf6-6f2f24f5af33,1,0,b6b5e6c1-3967-4c2f-b8bc-0acc96afe240,b6b5e6c1-3967-4c2f-b8bc-0acc96afe240,1,0,de355360-f87a-4b0d-a37c-d0a091e7e984,de355360-f87a-4b0d-a37c-d0a091e7e984,1,0,8819399f-4803-413c-ad5e-7fa2c8878e5f,8819399f-4803-413c-ad5e-7fa2c8878e5f,1,0,99ff834a-f030-4af3-9b7d-f92a03f7c6f4,99ff834a-f030-4af3-9b7d-f92a03f7c6f4,1,0,afea5f32-22ff-4940-8156-3ec8b9c7bbb9,afea5f32-22ff-4940-8156-3ec8b9c7bbb9,1,0,fa01c28c-44d1-4fa9-b167-73d6cecb7730,fa01c28c-44d1-4fa9-b167-73d6cecb7730,1,0,d82c675e-7d38-417c-9cfc-6af0e86addfd,d82c675e-7d38-417c-9cfc-6af0e86addfd,1,0,319c4428-9463-4aa4-a87a-2749c49f4069,319c4428-9463-4aa4-a87a-2749c49f4069,1,0,497deeb7-0630-4f72-bcdb-ebacf8963d79,497deeb7-0630-4f72-bcdb-ebacf8963d79,1,0,ef471953-7c99-40f9-a31d-f50ed8ba3fc5,ef471953-7c99-40f9-a31d-f50ed8ba3fc5,1,0,1e70a177-cacc-4416-aef0-2a8df235ae77,1e70a177-cacc-4416-aef0-2a8df235ae77,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,e0c54cdd-32ab-4c83-a0cd-454139416a58,e0c54cdd-32ab-4c83-a0cd-454139416a58,1,0,85488f67-4b7b-4803-bd21-664a4409cee6,85488f67-4b7b-4803-bd21-664a4409cee6,1,0,79d80ade-cdc1-4445-8bfd-f27dd3627083,79d80ade-cdc1-4445-8bfd-f27dd3627083,1,0,2b56997c-c791-4afe-942c-526421242b97,2b56997c-c791-4afe-942c-526421242b97,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,43b8af02-21f6-41c0-8e6d-758411f5188e,43b8af02-21f6-41c0-8e6d-758411f5188e,1,0,9952a9cc-6d02-4d84-9bca-76c67c6af29a,9952a9cc-6d02-4d84-9bca-76c67c6af29a,1,0,3bd83ceb-9f87-49e2-9e3e-1c43efeaba9b,3bd83ceb-9f87-49e2-9e3e-1c43efeaba9b,1,0,35c9e0e3-e454-4b5e-a39d-8a5f396ab841,35c9e0e3-e454-4b5e-a39d-8a5f396ab841,1,0,da031ebd-4aba-40e6-acb9-245cf73c4423,da031ebd-4aba-40e6-acb9-245cf73c4423,1,0,59d47246-e522-4baa-96b3-d7e93279e3ec,59d47246-e522-4baa-96b3-d7e93279e3ec,1,0,c222b2c0-5e92-4022-b2f7-49967b5a9de3,c222b2c0-5e92-4022-b2f7-49967b5a9de3,1,0,e9bf314a-a4d1-4fb8-a84c-84ac7df6c456,e9bf314a-a4d1-4fb8-a84c-84ac7df6c456,1,0,47432cc4-7373-4234-b812-49f7e279a6f0,47432cc4-7373-4234-b812-49f7e279a6f0,1,0,2dec3aa6-f4e3-4574-91e7-1270d3c4f184,2dec3aa6-f4e3-4574-91e7-1270d3c4f184,1,0,ce1523eb-89b3-45ec-903a-9e5fa397e44e,ce1523eb-89b3-45ec-903a-9e5fa397e44e,1,0,3984249d-d8f7-4cee-939e-88fda2f9cfa4,3984249d-d8f7-4cee-939e-88fda2f9cfa4,1,0,a0548550-f136-4c70-8ef7-f3fd8d74f8f7,a0548550-f136-4c70-8ef7-f3fd8d74f8f7,1,0,9d793866-7b33-45a3-a7bf-02dc6e810a78,9d793866-7b33-45a3-a7bf-02dc6e810a78,1,0,7bdd965e-1f6b-45d6-be1c-3ccf0d72db35,7bdd965e-1f6b-45d6-be1c-3ccf0d72db35,1,0,7bc35350-6452-44b0-ba62-ad5446e1e507,7bc35350-6452-44b0-ba62-ad5446e1e507,1,0,ce40340d-f5c9-404c-9d68-8bf5a27d3fd4,ce40340d-f5c9-404c-9d68-8bf5a27d3fd4,1,0,36e39b8e-68ae-4a6e-9c64-39d4298fe6cf,36e39b8e-68ae-4a6e-9c64-39d4298fe6cf,1,0,d687f818-f5cf-46ef-9079-58424d5f0855,d687f818-f5cf-46ef-9079-58424d5f0855,1,0,afd574d1-81af-45c3-aea6-b1e0d2c19863,afd574d1-81af-45c3-aea6-b1e0d2c19863,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,1422999b-9977-4bed-9990-b46bd0ec7471,1422999b-9977-4bed-9990-b46bd0ec7471,1,0,4c48db2f-2b79-4c6f-b8ee-002810c6190c,4c48db2f-2b79-4c6f-b8ee-002810c6190c,1,0,d0d90cbf-21fc-47cb-8e1c-549e67a1bf0c,d0d90cbf-21fc-47cb-8e1c-549e67a1bf0c,1,0,cf48ae02-ecb0-4db9-92da-585f89cddb70,cf48ae02-ecb0-4db9-92da-585f89cddb70,1,0,5650c5c7-3f43-4ec9-8b64-003c5467d06a,5650c5c7-3f43-4ec9-8b64-003c5467d06a,1,0,5bac3798-1193-4d74-bbdd-40aba11d742c,5bac3798-1193-4d74-bbdd-40aba11d742c,1,0,514f3514-ba90-493e-b0dd-2d02c6ba4d1d,514f3514-ba90-493e-b0dd-2d02c6ba4d1d,1,0,032de836-80a8-46ce-9e40-b3b6ac5f9e1e,032de836-80a8-46ce-9e40-b3b6ac5f9e1e,1,0,962c2c55-6a16-46f6-9ce0-67d1984b530e,962c2c55-6a16-46f6-9ce0-67d1984b530e,1,0,27e906c2-ea0e-489e-b869-547c48c29518,27e906c2-ea0e-489e-b869-547c48c29518,1,0,553ebd03-267b-4ced-805e-be7eca6db18f,553ebd03-267b-4ced-805e-be7eca6db18f,1,0,8bf95fa7-1067-45b3-82ea-286192f97e06,8bf95fa7-1067-45b3-82ea-286192f97e06,1,0,73996d67-4d70-4ce5-a58a-d70f44484f1e,73996d67-4d70-4ce5-a58a-d70f44484f1e,1,0,5e86a443-bd0f-411d-b1b9-41bfa0cf1a2f,5e86a443-bd0f-411d-b1b9-41bfa0cf1a2f,1,0,fcaecd43-b938-4680-93be-963db5218f35,fcaecd43-b938-4680-93be-963db5218f35,1,0,63415525-46a2-4d70-bdab-665945a9185c,63415525-46a2-4d70-bdab-665945a9185c,1,0,27e37fde-daf0-47fa-865c-3cd86151f5be,27e37fde-daf0-47fa-865c-3cd86151f5be,1,0,b3b63074-984a-48d2-ba5b-d69dd0b8067e,b3b63074-984a-48d2-ba5b-d69dd0b8067e,1,0,fc4a9f03-c81f-4201-814c-c6d5a5029168,fc4a9f03-c81f-4201-814c-c6d5a5029168,1,0,abba612c-137a-4dff-89f3-445945c30859,abba612c-137a-4dff-89f3-445945c30859,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,9b0e9fec-8261-4e20-9556-754a46d11c12,9b0e9fec-8261-4e20-9556-754a46d11c12,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,764bf84f-3aa5-4023-a15a-b546f8837141,764bf84f-3aa5-4023-a15a-b546f8837141,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,dc72eb52-527f-438d-8750-c9f8f885d4ca,dc72eb52-527f-438d-8750-c9f8f885d4ca,1,0,0fd93c83-0c22-4ac0-b0a2-f9f9fe35a478,0fd93c83-0c22-4ac0-b0a2-f9f9fe35a478,1,0,45b9ede4-3776-4d26-974b-0ce724f62af6,45b9ede4-3776-4d26-974b-0ce724f62af6,1,0,a75aa04b-a04e-4c21-8a4c-c8cfefcd7c52,a75aa04b-a04e-4c21-8a4c-c8cfefcd7c52,1,0,d35a861d-bc36-4811-97c9-4a9bc58a89f4,d35a861d-bc36-4811-97c9-4a9bc58a89f4,1,0,3b02a8f9-572a-44d4-b8ee-6e1a7459e235,3b02a8f9-572a-44d4-b8ee-6e1a7459e235,1,0,609c7552-ad78-489c-93e2-51b672e82082,609c7552-ad78-489c-93e2-51b672e82082,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,2111e188-6b21-4a43-8e5d-befa17c4bbb8,2111e188-6b21-4a43-8e5d-befa17c4bbb8,1,0,bdd6a82e-c5c5-4ce6-b7ea-51e5c831e937,bdd6a82e-c5c5-4ce6-b7ea-51e5c831e937,1,0,a5b110af-ca1e-4cc0-bfd7-7bf0829905df,a5b110af-ca1e-4cc0-bfd7-7bf0829905df,1,0,a018eb35-75b5-47ce-af7d-5e59b27c753f,a018eb35-75b5-47ce-af7d-5e59b27c753f,1,0,a20d8863-4208-4865-be46-e00ed44389e5,a20d8863-4208-4865-be46-e00ed44389e5,1,0,519c3950-0907-49d8-ab35-1d1bf15d4602,519c3950-0907-49d8-ab35-1d1bf15d4602,1,0,55372293-0f58-463e-9a7d-404b338b4155,55372293-0f58-463e-9a7d-404b338b4155,1,0,feecc066-7dec-45ff-a88a-41221a05d0f4,feecc066-7dec-45ff-a88a-41221a05d0f4,1,0,b2dbc40b-e5bd-40fa-9365-374c25a4d961,b2dbc40b-e5bd-40fa-9365-374c25a4d961,1,0,fd9ce2ed-8f31-4b75-8a62-6563f4de92fd,fd9ce2ed-8f31-4b75-8a62-6563f4de92fd,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,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,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,c2f246fa-81a3-436c-9f7d-4c8eb7103bf1,c2f246fa-81a3-436c-9f7d-4c8eb7103bf1,1,0,c3e9225a-7fab-499f-baca-eca56914f1ea,c3e9225a-7fab-499f-baca-eca56914f1ea,1,0,5072ce03-c5b6-4e2b-8a29-d3a8e0b907d2,5072ce03-c5b6-4e2b-8a29-d3a8e0b907d2,1,0,b0e9e59d-9636-492c-91d0-71d43b6d6694,b0e9e59d-9636-492c-91d0-71d43b6d6694,1,0,d5fa6b14-d0a4-4d97-ae24-70fed456f07f,d5fa6b14-d0a4-4d97-ae24-70fed456f07f,1,0,54957cc3-685b-4d6d-a0e8-14d51f54224e,54957cc3-685b-4d6d-a0e8-14d51f54224e,1,0,f725ada3-78ef-4e6d-9466-b7047cf695e0,f725ada3-78ef-4e6d-9466-b7047cf695e0,1,0,4f741112-f127-479e-939b-a2c6e36bb57f,4f741112-f127-479e-939b-a2c6e36bb57f,1,0,e169580b-be49-4e39-9cc8-f9942b2d5b8a,e169580b-be49-4e39-9cc8-f9942b2d5b8a,1,0,cacbaa6b-ba3f-43af-9c7b-12fd9f124184,cacbaa6b-ba3f-43af-9c7b-12fd9f124184,1,0,b2de5117-88eb-47ed-bcd4-7001c4549658,b2de5117-88eb-47ed-bcd4-7001c4549658,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,55d47b57-3cc0-41cc-ac43-aecaecca7416,55d47b57-3cc0-41cc-ac43-aecaecca7416,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,bf40c9ed-b7db-4200-9646-c4e751fc2014,bf40c9ed-b7db-4200-9646-c4e751fc2014,1,0,2bf9c338-d31e-467e-8281-d1d6a3a6b2e2,2bf9c338-d31e-467e-8281-d1d6a3a6b2e2,1,0,3c2c192e-4869-4cc6-ba47-1fadac5b9678,3c2c192e-4869-4cc6-ba47-1fadac5b9678,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,d51ce1df-6172-4682-9986-131e7daba89e,d51ce1df-6172-4682-9986-131e7daba89e,1,0,6a8b224c-6ce6-4ede-bd36-eb16baebd008,6a8b224c-6ce6-4ede-bd36-eb16baebd008,1,0,1666a55d-9e90-419f-9a57-cb05c6b20bf7,1666a55d-9e90-419f-9a57-cb05c6b20bf7,1,0,b2752418-7166-48b6-a95d-2c9d488b9c7b,b2752418-7166-48b6-a95d-2c9d488b9c7b,1,0,f4147cac-f195-4308-9ccf-07e640196716,f4147cac-f195-4308-9ccf-07e640196716,1,0,2204ae4b-c41f-4125-998e-0fae12d2e9e3,2204ae4b-c41f-4125-998e-0fae12d2e9e3,1,0,52846ee8-d0ca-4c65-8f62-a3f6bea93a8b,52846ee8-d0ca-4c65-8f62-a3f6bea93a8b,1,0,aa3b0ce8-651b-4685-8744-19db537d94c4,aa3b0ce8-651b-4685-8744-19db537d94c4,1,0,0b8998f0-0f59-4223-8b54-ea360aa9513d,0b8998f0-0f59-4223-8b54-ea360aa9513d,1,0,1102079f-d424-4ebb-8496-d48f596c5c62,1102079f-d424-4ebb-8496-d48f596c5c62,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,e99606f3-cf75-44b2-ad50-c88a8c3d189c,e99606f3-cf75-44b2-ad50-c88a8c3d189c,1,0,b4fa35f9-cb7e-46a8-b32b-801d212c8fcf,b4fa35f9-cb7e-46a8-b32b-801d212c8fcf,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,99c00352-cafe-4430-8c8d-2850a13bb6cc,99c00352-cafe-4430-8c8d-2850a13bb6cc,1,0,22fc6da4-3891-4f35-9dfe-c6d359c7e09e,22fc6da4-3891-4f35-9dfe-c6d359c7e09e,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,70a3df8f-c12a-4185-81c4-39a5114ef7a9,70a3df8f-c12a-4185-81c4-39a5114ef7a9,1,0,bd362ff9-3dec-4a4b-9595-8609de76e842,bd362ff9-3dec-4a4b-9595-8609de76e842,1,0,76cc9ae1-7ac2-4b99-8def-f21dc55ad07d,76cc9ae1-7ac2-4b99-8def-f21dc55ad07d,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,54766e6b-cf49-4c58-b5e5-dcb6362ac5e2,54766e6b-cf49-4c58-b5e5-dcb6362ac5e2,1,0,f2210cf1-f9f5-41ed-8b4d-937778da842b,f2210cf1-f9f5-41ed-8b4d-937778da842b,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,d4b49ed0-3d3f-4b68-bc1e-949e8e338e9a,d4b49ed0-3d3f-4b68-bc1e-949e8e338e9a,1,0,542a53f5-56c5-4ca9-90d1-d689532c69fd,542a53f5-56c5-4ca9-90d1-d689532c69fd,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,a3720a0f-cf95-4acb-89dc-c4e6e38f72ca,a3720a0f-cf95-4acb-89dc-c4e6e38f72ca,1,0,fb26953e-1aa3-4f69-8b9b-ad99e3431e12,fb26953e-1aa3-4f69-8b9b-ad99e3431e12,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,ecc0ac05-9813-482d-bc39-0be1490d3f8b,ecc0ac05-9813-482d-bc39-0be1490d3f8b,1,0,866f53c8-4f1e-484a-a809-6130f7eef872,866f53c8-4f1e-484a-a809-6130f7eef872,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,ce87e3e8-2d05-415b-bd27-c366ca871097,ce87e3e8-2d05-415b-bd27-c366ca871097,1,0,b4233d51-daa9-47ff-8b51-f65c31fc8037,b4233d51-daa9-47ff-8b51-f65c31fc8037,1,0,99410b31-9fbe-42bf-875c-9d0425e1b7b2,99410b31-9fbe-42bf-875c-9d0425e1b7b2,1,0,bc79b15c-5bde-4587-a1ed-b5c4909eec5d,bc79b15c-5bde-4587-a1ed-b5c4909eec5d,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,ca47123d-90f5-4d1d-be06-34b505b01d81,ca47123d-90f5-4d1d-be06-34b505b01d81,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,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,88f34f9f-121b-43e2-9280-ec2b414681ad,88f34f9f-121b-43e2-9280-ec2b414681ad,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,0384ec55-dc18-40ae-ae83-7defc28d8f3f,0384ec55-dc18-40ae-ae83-7defc28d8f3f,1,0,54e57825-c6f3-44c3-9457-bc24317e23c2,54e57825-c6f3-44c3-9457-bc24317e23c2,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,1aa6b483-0f87-4ed3-94ea-8b81813532d6,1aa6b483-0f87-4ed3-94ea-8b81813532d6,1,0,0f79d87e-3311-4281-8f46-6154e708b930,0f79d87e-3311-4281-8f46-6154e708b930,1,0,af062541-4dec-4856-9be9-dec804fbae0b,af062541-4dec-4856-9be9-dec804fbae0b,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,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,90420fe9-f75a-4bcc-8e1a-9d665a61ecef,1,0,748f7ddb-4cdc-46e5-9108-f7a550b33537,748f7ddb-4cdc-46e5-9108-f7a550b33537,1,0,0534460b-0548-45f0-ac79-aa4bc109655c,0534460b-0548-45f0-ac79-aa4bc109655c,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,436a9c94-55f6-4463-becd-573189753ee7,436a9c94-55f6-4463-becd-573189753ee7,1,0,50bf4050-390c-419c-8f55-82a540093ab1,50bf4050-390c-419c-8f55-82a540093ab1,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,4e1b48b1-c998-4f99-94e7-50af22059bfa,4e1b48b1-c998-4f99-94e7-50af22059bfa,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,ccfdf89b-f63e-4e46-b942-0d145695fdc6,ccfdf89b-f63e-4e46-b942-0d145695fdc6,1,0,6d40a555-9c20-4643-b689-2f61df772f78,6d40a555-9c20-4643-b689-2f61df772f78,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,4ae40e81-f2ab-4ac4-89e5-73545db42de9,4ae40e81-f2ab-4ac4-89e5-73545db42de9,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,8850b346-364d-457b-9554-acce031394fe,8850b346-364d-457b-9554-acce031394fe,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,c8a0da4e-0b0f-4def-a61e-5f6e04468e01,c8a0da4e-0b0f-4def-a61e-5f6e04468e01,1,0,a55e9aef-79ad-4cb6-b80a-c7f769bebbea,a55e9aef-79ad-4cb6-b80a-c7f769bebbea,1,0,c26283d2-dda1-438c-a444-05bdd2797691,c26283d2-dda1-438c-a444-05bdd2797691,1,0,3ae1ecf1-e062-4e89-96d6-9ac88bbc8aa8,3ae1ecf1-e062-4e89-96d6-9ac88bbc8aa8,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,bc3183cb-8691-4fa5-b154-3645f3cd8944,bc3183cb-8691-4fa5-b154-3645f3cd8944,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,018390b5-06d9-4d04-abad-1de1ccf0843c,018390b5-06d9-4d04-abad-1de1ccf0843c,1,0,a8b828da-6172-4732-a01e-c5127175cd60,a8b828da-6172-4732-a01e-c5127175cd60,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,9ac5a405-4eb7-4013-8bbd-5d1b6d0929ab,9ac5a405-4eb7-4013-8bbd-5d1b6d0929ab,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,75daf728-ee8c-41a4-a249-8db123bb802e,75daf728-ee8c-41a4-a249-8db123bb802e,1,0,0b154103-47b5-4c54-a4ea-60aa41190940,0b154103-47b5-4c54-a4ea-60aa41190940,1,0,1eb52621-8915-46f4-b1bb-db04bb58b065,1eb52621-8915-46f4-b1bb-db04bb58b065,1,0,d0fcb0f9-6d6c-444a-8b32-4287a963f72b,d0fcb0f9-6d6c-444a-8b32-4287a963f72b,1,0,1d583292-1820-498a-890a-66f5b154e698,1d583292-1820-498a-890a-66f5b154e698,1,0,a3b0430c-743d-4351-a928-9be3c8db9a0b,a3b0430c-743d-4351-a928-9be3c8db9a0b,1,0,f094241b-ae82-426c-92b0-18be87566ad6,f094241b-ae82-426c-92b0-18be87566ad6,1,0,1a570b62-6644-4427-a432-c6823c7d522a,1a570b62-6644-4427-a432-c6823c7d522a,1,0,7bae5ebc-85a5-43eb-8dfa-bc75cd54c013,7bae5ebc-85a5-43eb-8dfa-bc75cd54c013,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,4fbb189a-ecf0-483f-a904-0c34b1c23433,4fbb189a-ecf0-483f-a904-0c34b1c23433,1,0,2a34c9e8-eb4f-4600-988e-594ac7399abc,2a34c9e8-eb4f-4600-988e-594ac7399abc,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,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,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,e33c736b-f1a3-4cb4-b78b-65fd2d44b10f,e33c736b-f1a3-4cb4-b78b-65fd2d44b10f,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,51811ea1-2ce7-4ea2-9ff0-e8ed4c5ca94c,51811ea1-2ce7-4ea2-9ff0-e8ed4c5ca94c,1,0,e030f3d6-84dc-4c07-9760-6f010a6dd3be,e030f3d6-84dc-4c07-9760-6f010a6dd3be,1,0,bd3df097-9807-4a42-9959-60cca34966c5,bd3df097-9807-4a42-9959-60cca34966c5,1,0,ae1192da-f17d-4527-b9cb-4f4cce810985,ae1192da-f17d-4527-b9cb-4f4cce810985,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,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,6900c947-150c-4842-b37d-99f9b704f0a5,6900c947-150c-4842-b37d-99f9b704f0a5,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,3eba3f44-b58b-4541-be75-a72a059ef371,3eba3f44-b58b-4541-be75-a72a059ef371,1,0,7e73f7e0-6a6c-425b-9ac3-375b12383f3f,7e73f7e0-6a6c-425b-9ac3-375b12383f3f,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,9167a91a-0fe6-45b5-ab9d-e2c9eaa93f67,9167a91a-0fe6-45b5-ab9d-e2c9eaa93f67,1,0,02597e1e-6c6a-4bd8-a8f8-1b6d62a8f21a,02597e1e-6c6a-4bd8-a8f8-1b6d62a8f21a,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,fbe493f8-cf58-4ca8-b7fb-3923771dd5e9,fbe493f8-cf58-4ca8-b7fb-3923771dd5e9,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,f2f210f3-a114-4788-9172-9133dc95b832,f2f210f3-a114-4788-9172-9133dc95b832,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,16b68fad-30fb-4c1d-ab96-2d14a2e6ae03,16b68fad-30fb-4c1d-ab96-2d14a2e6ae03,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,24ce9257-6dcf-4ba6-839e-1e635c069e75,24ce9257-6dcf-4ba6-839e-1e635c069e75,1,0,ecb2048d-4c1d-4194-a728-604734683b3b,ecb2048d-4c1d-4194-a728-604734683b3b,1,0,b33e046c-b580-4c90-940d-71f38d9ceff2,b33e046c-b580-4c90-940d-71f38d9ceff2,1,0,84d76e6b-0418-47d0-9df2-95e0116517be,84d76e6b-0418-47d0-9df2-95e0116517be,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,f2ec9416-3830-4607-90f3-f77fc53c9c70,f2ec9416-3830-4607-90f3-f77fc53c9c70,1,0,3057de81-eb41-4161-9dc2-5445699906af,3057de81-eb41-4161-9dc2-5445699906af,1,0,984ed6c0-e25b-46ff-9b3c-6bc0370071da,984ed6c0-e25b-46ff-9b3c-6bc0370071da,1,0,35fe84b6-7d3c-4729-a75c-a5f3ef122124,35fe84b6-7d3c-4729-a75c-a5f3ef122124,1,0,f7d5815e-511e-48c2-bc31-f9987423439b,f7d5815e-511e-48c2-bc31-f9987423439b,1,0,c9b46771-b627-413d-afbb-dd733e0f1a1d,c9b46771-b627-413d-afbb-dd733e0f1a1d,1,0,49192a55-34fe-4db3-8ef9-a0d7af2766c9,49192a55-34fe-4db3-8ef9-a0d7af2766c9,1,0,31001011-bdbb-4499-a613-72d0305acd9d,31001011-bdbb-4499-a613-72d0305acd9d,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,8b0fb329-098b-46db-8766-bc034d6f20a8,8b0fb329-098b-46db-8766-bc034d6f20a8,1,0,c630e43c-98a6-4059-9b14-25d267410ba6,c630e43c-98a6-4059-9b14-25d267410ba6,1,0,d01089f3-427f-4624-955d-1a5a96098141,d01089f3-427f-4624-955d-1a5a96098141,1,0,6520d7f5-7326-4921-b8c1-6e6fbc56089c,6520d7f5-7326-4921-b8c1-6e6fbc56089c,1,0,766f2abe-1dfd-4e16-bffd-83f44d25d82a,766f2abe-1dfd-4e16-bffd-83f44d25d82a,1,0,0e7a34a8-ce5a-4767-8283-fd094e13d969,0e7a34a8-ce5a-4767-8283-fd094e13d969,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,c0f5bbe1-3247-4bbe-a28e-8c55748e7d42,c0f5bbe1-3247-4bbe-a28e-8c55748e7d42,1,0,7347d709-bb61-4354-aa79-86ed8025d6d4,7347d709-bb61-4354-aa79-86ed8025d6d4,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,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,886df9ab-09b4-4c7a-bd44-6afeab68d831,886df9ab-09b4-4c7a-bd44-6afeab68d831,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,0a7e5d85-3f94-4d93-8478-6d34f3b3ea33,0a7e5d85-3f94-4d93-8478-6d34f3b3ea33,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,52f065fe-556a-47cd-82b1-c56d7894df30,52f065fe-556a-47cd-82b1-c56d7894df30,1,0,186efec4-1343-4234-a9b6-c8d8096faf76,186efec4-1343-4234-a9b6-c8d8096faf76,1,0,6b15631a-0c98-4771-ba87-9d6f5795df63,6b15631a-0c98-4771-ba87-9d6f5795df63,1,0,ed72e5ef-a8b9-404b-a8b4-cb587c7f3018,ed72e5ef-a8b9-404b-a8b4-cb587c7f3018,1,0,51d30e7e-54b4-40be-a5bc-46fec691a425,51d30e7e-54b4-40be-a5bc-46fec691a425,1,0,bdff2b56-efbc-44ce-8141-7df2b095de37,bdff2b56-efbc-44ce-8141-7df2b095de37,1,0,be158212-2b71-43b1-8dda-f34ea30f16e7,be158212-2b71-43b1-8dda-f34ea30f16e7,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,ca6013dd-6178-4139-9a8d-407e9acb0578,ca6013dd-6178-4139-9a8d-407e9acb0578,1,0,e3a5de01-ece0-466d-8415-56391ace87a8,e3a5de01-ece0-466d-8415-56391ace87a8,1,0,411191b2-0ca7-4f61-a2c5-b63632558f2b,411191b2-0ca7-4f61-a2c5-b63632558f2b,1,0,92e39f71-ee94-48c7-ba3f-b08f3c6f9fb5,92e39f71-ee94-48c7-ba3f-b08f3c6f9fb5,1,0,deddee3c-5014-492e-8602-4835ada77e15,deddee3c-5014-492e-8602-4835ada77e15,1,0,a1e3b188-39d5-4f3d-bdbd-cfe61ac96c52,a1e3b188-39d5-4f3d-bdbd-cfe61ac96c52,1,0,407236b2-543d-4faa-9d8e-5fcb548f9818,407236b2-543d-4faa-9d8e-5fcb548f9818,1,0,af5da854-1b45-43a6-9ca7-f998dca3f869,af5da854-1b45-43a6-9ca7-f998dca3f869,1,0,955cf6fa-7723-4f7c-9666-59be7415bbc5,955cf6fa-7723-4f7c-9666-59be7415bbc5,1,0,1415ba25-2477-4d93-b248-95235d5086ed,1415ba25-2477-4d93-b248-95235d5086ed,1,0,4f158e2f-bd70-4cb1-8200-4e5c6a98bdf6,4f158e2f-bd70-4cb1-8200-4e5c6a98bdf6,1,0,52895190-0133-4244-82b2-18b30a97e16f,52895190-0133-4244-82b2-18b30a97e16f,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,c4b691fb-d511-4950-835c-d6e9c65ecbc2,c4b691fb-d511-4950-835c-d6e9c65ecbc2,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,2b849698-22df-4729-bad9-a5646f1ea63b,2b849698-22df-4729-bad9-a5646f1ea63b,1,0,bd60dac1-8f7d-42e6-b85a-6e80b06b13b8,bd60dac1-8f7d-42e6-b85a-6e80b06b13b8,1,0,697369c0-3b4f-43a1-8683-a042fc3463ee,697369c0-3b4f-43a1-8683-a042fc3463ee,1,0,87a37483-7341-44e3-9e1a-e2c523f0f415,87a37483-7341-44e3-9e1a-e2c523f0f415,1,0,ac497cd0-b2a2-412e-96bf-ab12b4035065,ac497cd0-b2a2-412e-96bf-ab12b4035065,1,0,4ac50294-dbb1-4df8-badc-8b8fd8068d47,4ac50294-dbb1-4df8-badc-8b8fd8068d47,1,0,706331e2-2d1a-492a-a9af-22fbb80bfd45,706331e2-2d1a-492a-a9af-22fbb80bfd45,1,0,4110db29-d80a-409c-a578-7c96305899f6,4110db29-d80a-409c-a578-7c96305899f6,1,0,e47ed32b-d914-4596-bd08-a6022f3662a8,e47ed32b-d914-4596-bd08-a6022f3662a8,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,880658c1-dbab-4333-b51f-efd8b3039a34,880658c1-dbab-4333-b51f-efd8b3039a34,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,7ef8627b-f924-4fef-982f-2f6bcb4e935b,7ef8627b-f924-4fef-982f-2f6bcb4e935b,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,e38fb48f-0e16-44d9-bf3f-21c804c404e0,e38fb48f-0e16-44d9-bf3f-21c804c404e0,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,02b13a31-1790-4a4f-bab7-bdd8deb0ef3c,02b13a31-1790-4a4f-bab7-bdd8deb0ef3c,1,0,dec6dbe4-f184-4059-b1f0-e0d5a388dbb7,dec6dbe4-f184-4059-b1f0-e0d5a388dbb7,1,0,38313034-c287-4269-81bf-d7cfee9cf29b,38313034-c287-4269-81bf-d7cfee9cf29b,1,0,fa5c43be-9b2f-42b2-99f7-59034cc4e395,fa5c43be-9b2f-42b2-99f7-59034cc4e395,1,0,656505ca-cd6b-4d75-b81c-66d3e160122d,656505ca-cd6b-4d75-b81c-66d3e160122d,1,0,be3bb034-7366-4fd5-9d45-7325e0f774c8,be3bb034-7366-4fd5-9d45-7325e0f774c8,1,0,f0d66d6d-503a-4bbd-bebb-e9567fc4621a,f0d66d6d-503a-4bbd-bebb-e9567fc4621a,1,0,e6437578-db9f-4074-8e93-63dff0a24a92,e6437578-db9f-4074-8e93-63dff0a24a92,1,0,8db31f1e-339d-4fd4-a1b1-da72725d4208,8db31f1e-339d-4fd4-a1b1-da72725d4208,1,0,526e3084-c8b9-4244-b9db-8f0404f8cc77,526e3084-c8b9-4244-b9db-8f0404f8cc77,1,0,d60de62d-ebd5-4da6-91d8-675a0578142f,d60de62d-ebd5-4da6-91d8-675a0578142f,1,0,13e25baf-1855-469a-95a3-2db880220e76,13e25baf-1855-469a-95a3-2db880220e76,1,0,ed0f4f30-22b6-47c6-bd94-999c10a5c172,ed0f4f30-22b6-47c6-bd94-999c10a5c172,1,0,7c97287d-bf6c-44dc-b05a-5f950a6fbf7b,7c97287d-bf6c-44dc-b05a-5f950a6fbf7b,1,0,cca3e7a0-3691-4e1e-a362-3d29d237c196,cca3e7a0-3691-4e1e-a362-3d29d237c196,1,0,05fbb101-b84d-476f-9f26-0c546f630050,05fbb101-b84d-476f-9f26-0c546f630050,1,0,922fd510-be67-4d31-bfd1-7598820572df,922fd510-be67-4d31-bfd1-7598820572df,1,0,4c1af4ee-345d-47aa-a2a5-2c31df127bf0,4c1af4ee-345d-47aa-a2a5-2c31df127bf0,1,0,4f657e5a-20fe-4de9-9189-30a4c82cd23d,4f657e5a-20fe-4de9-9189-30a4c82cd23d,1,0,1829f072-ef4e-4123-b47b-079058102e61,1829f072-ef4e-4123-b47b-079058102e61,1,0,d9baa5aa-4e9f-4b0a-834c-d97fa390b1bb,d9baa5aa-4e9f-4b0a-834c-d97fa390b1bb,1,0,9c3f0bdb-7a16-4357-9850-e8a82b806c08,9c3f0bdb-7a16-4357-9850-e8a82b806c08,1,0,49474d66-f4cc-4393-8e0b-7ce2c481af95,49474d66-f4cc-4393-8e0b-7ce2c481af95,1,0,6ff9b259-9b5c-4192-98c5-4a86596fd05d,6ff9b259-9b5c-4192-98c5-4a86596fd05d,1,0,06026ec1-4279-443b-b6ab-07903eae3b87,06026ec1-4279-443b-b6ab-07903eae3b87,1,0,6037b758-6b54-464a-96ec-459378989622,6037b758-6b54-464a-96ec-459378989622,1,0,292a40d8-3ccd-4639-9675-be55064e91b3,292a40d8-3ccd-4639-9675-be55064e91b3,1,0,b140657d-9ed6-4fc0-9109-744ad9be6a08,b140657d-9ed6-4fc0-9109-744ad9be6a08,1,0,b4030e31-f5b3-470c-96b6-b9b1fc372999,b4030e31-f5b3-470c-96b6-b9b1fc372999,1,0,85bb3b43-8447-4c70-90c6-5e8749b9e614,85bb3b43-8447-4c70-90c6-5e8749b9e614,1,0,4fa8e2f8-76f4-4fc5-9f20-22e0aececd7b,4fa8e2f8-76f4-4fc5-9f20-22e0aececd7b,1,0,c7399954-299a-428b-951c-44e2faf731ab,c7399954-299a-428b-951c-44e2faf731ab,1,0,2cbb84a7-b9f8-4ae1-8d56-60b6b0d50afc,2cbb84a7-b9f8-4ae1-8d56-60b6b0d50afc,1,0,77e0b88d-538a-43e9-a775-4afa373866f8,77e0b88d-538a-43e9-a775-4afa373866f8,1,0,91906c04-c6ea-4352-9c4a-01f48d3bd16c,91906c04-c6ea-4352-9c4a-01f48d3bd16c,1,0,fe5578e0-9a2e-4619-b561-7361f03a1d6d,fe5578e0-9a2e-4619-b561-7361f03a1d6d,1,0,63451376-d478-43d3-a733-9eea6804f088,63451376-d478-43d3-a733-9eea6804f088,1,0,9770cb3a-d9fe-41c6-8d60-5f4f95937a85,9770cb3a-d9fe-41c6-8d60-5f4f95937a85,1,0,adbec7ec-6e2b-4ea0-93f0-1335ad7ea187,adbec7ec-6e2b-4ea0-93f0-1335ad7ea187,1,0,0325780d-6e29-4fe8-a1e0-1a475577c20c,0325780d-6e29-4fe8-a1e0-1a475577c20c,1,0,fc150263-af73-43f7-ae0e-3693a123d7af,fc150263-af73-43f7-ae0e-3693a123d7af,1,0,8de3b943-ff47-4646-b76d-03f534771f69,8de3b943-ff47-4646-b76d-03f534771f69,1,0,c93c9176-3466-4b26-9e8f-47490188d981,c93c9176-3466-4b26-9e8f-47490188d981,1,0,3ca53b9b-293d-4706-b9d6-b4a7f8b3fc6b,3ca53b9b-293d-4706-b9d6-b4a7f8b3fc6b,1,0,c2a57f4f-7c15-4f71-8856-062078744444,c2a57f4f-7c15-4f71-8856-062078744444,1,0,aab354e1-9052-477a-9b98-c5f9ac578620,aab354e1-9052-477a-9b98-c5f9ac578620,1,0,6e8a4d6d-80ba-4142-bd8d-afa383de837b,6e8a4d6d-80ba-4142-bd8d-afa383de837b,1,0,e2d6f66e-6b41-4d12-85ca-0af7c2693534,e2d6f66e-6b41-4d12-85ca-0af7c2693534,1,0,c9e4e4fb-7d8c-4d0b-afc7-6ecb9f2b5abd,c9e4e4fb-7d8c-4d0b-afc7-6ecb9f2b5abd,1,0,b20e0d82-85c1-4f9c-afd1-55f7b71b06ac,b20e0d82-85c1-4f9c-afd1-55f7b71b06ac,1,0,88315362-844d-4698-860d-24901e51332d,88315362-844d-4698-860d-24901e51332d,1,0,82a00b83-499b-4146-9cfa-e676833401fb,82a00b83-499b-4146-9cfa-e676833401fb,1,0,5cf49504-22dc-4e8b-b572-eb6525977925,5cf49504-22dc-4e8b-b572-eb6525977925,1,0,a34acd7f-ee67-4cde-a2e7-890f009b1195,a34acd7f-ee67-4cde-a2e7-890f009b1195,1,0,bceb2a25-ab97-4e1c-a193-a1efd2d058c7,bceb2a25-ab97-4e1c-a193-a1efd2d058c7,1,0,5b50b928-4ec0-4ebb-871b-18e3041b8f24,5b50b928-4ec0-4ebb-871b-18e3041b8f24,1,0,d32be162-d81e-4249-87c4-b08b2084cf90,d32be162-d81e-4249-87c4-b08b2084cf90,1,0,6caadb60-e172-4f3a-9dd1-85125773c169,6caadb60-e172-4f3a-9dd1-85125773c169,1,0,6febb670-c7a2-4e3a-8d39-8b045f8b9e48,6febb670-c7a2-4e3a-8d39-8b045f8b9e48,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,a5663ce2-587d-4255-b30e-6979c909cc05,a5663ce2-587d-4255-b30e-6979c909cc05,1,0,942b3e77-2a66-4879-972d-b5d25a706f9a,942b3e77-2a66-4879-972d-b5d25a706f9a,1,0,49f67edf-49e7-4198-9f9a-7bddf0a89248,49f67edf-49e7-4198-9f9a-7bddf0a89248,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,4f06c867-6fec-4a4d-a360-6d8e98e4e7a4,4f06c867-6fec-4a4d-a360-6d8e98e4e7a4,1,0,34ee9617-9935-425f-9637-bdffd5a64042,34ee9617-9935-425f-9637-bdffd5a64042,1,0,3e6160f4-eed6-4dd6-a8fb-96c1a90d39be,3e6160f4-eed6-4dd6-a8fb-96c1a90d39be,1,0,778cd9f9-7afd-4eb7-bd4e-90ff7d9cf4f0,778cd9f9-7afd-4eb7-bd4e-90ff7d9cf4f0,1,0,fb8f3edd-bf12-4312-8ffe-7bbd627fa52b,fb8f3edd-bf12-4312-8ffe-7bbd627fa52b,1,0,6ddad5e2-b2c3-47bc-b339-54ccd7391e33,6ddad5e2-b2c3-47bc-b339-54ccd7391e33,1,0,761ca1c1-c843-47a1-bacc-2f9d1d68634d,761ca1c1-c843-47a1-bacc-2f9d1d68634d,1,0,af4a815b-d9d4-4fe6-9b2b-3932381e7346,af4a815b-d9d4-4fe6-9b2b-3932381e7346,1,0,9dbca72a-fb38-4d86-a3ff-83f7edc0fdb4,9dbca72a-fb38-4d86-a3ff-83f7edc0fdb4,1,0,fab77796-a103-40a6-95bd-238979fc345d,fab77796-a103-40a6-95bd-238979fc345d,1,0,6fad175b-eaf0-4e45-aaa1-c1ebc98e0ed0,6fad175b-eaf0-4e45-aaa1-c1ebc98e0ed0,1,0,0ef5e38c-6f7c-46e7-9c14-4fde6814f93f,0ef5e38c-6f7c-46e7-9c14-4fde6814f93f,1,0,f306dafa-350e-4ff9-bfe2-211be647afe8,f306dafa-350e-4ff9-bfe2-211be647afe8,1,0,6d447b01-21ae-4cc1-9262-4ec4ed5e04f5,6d447b01-21ae-4cc1-9262-4ec4ed5e04f5,1,0,dcd64d40-e57f-4cb5-9ccd-67b27ac546d4,dcd64d40-e57f-4cb5-9ccd-67b27ac546d4,1,0,8d0ad48c-6e27-44c2-87f6-62eef78b6427,8d0ad48c-6e27-44c2-87f6-62eef78b6427,1,0,e4fb3b42-60f6-4413-bba8-6e507b13d5d3,e4fb3b42-60f6-4413-bba8-6e507b13d5d3,1,0,a5e3b305-392c-40a2-9b66-7fdc72c041a3,a5e3b305-392c-40a2-9b66-7fdc72c041a3,1,0,266d41c0-92a1-4d42-bf5b-60a1bddb8912,266d41c0-92a1-4d42-bf5b-60a1bddb8912,1,0,1aad9f99-422a-40e8-83da-6e29b8a4e85a,1aad9f99-422a-40e8-83da-6e29b8a4e85a,1,0,d9010dc7-b0de-4079-944d-fbec7ba5997f,d9010dc7-b0de-4079-944d-fbec7ba5997f,1,0,5defd7f7-cc7d-4e7b-83e3-755f8a2514ea,5defd7f7-cc7d-4e7b-83e3-755f8a2514ea,1,0,744ca01b-41b6-4c30-a280-85e44ad456ba,744ca01b-41b6-4c30-a280-85e44ad456ba,1,0,779856af-2c4a-4643-9bea-a04aa24ee488,779856af-2c4a-4643-9bea-a04aa24ee488,1,0,5c6f12f3-7cb6-4b10-9859-7b72bae3fc76,5c6f12f3-7cb6-4b10-9859-7b72bae3fc76,1,0,d00313c8-ee4a-4463-8d5b-7e87e4e14986,d00313c8-ee4a-4463-8d5b-7e87e4e14986,1,0,6db400f2-873a-44a2-9274-2cd7883bfd87,6db400f2-873a-44a2-9274-2cd7883bfd87,1,0,3b925fd2-adb8-451a-8675-7b081fc7c570,3b925fd2-adb8-451a-8675-7b081fc7c570,1,0,70e9e13d-8f87-4a5b-9c80-49d2cff1a290,70e9e13d-8f87-4a5b-9c80-49d2cff1a290,1,0,04b7e8b2-6bc1-49dc-9476-7eadf94b9188,04b7e8b2-6bc1-49dc-9476-7eadf94b9188,1,0,135c86fc-2979-4833-9107-38d749a9f82f,135c86fc-2979-4833-9107-38d749a9f82f,1,0,78288ff9-d838-4970-84bd-9a6b229e6ef0,78288ff9-d838-4970-84bd-9a6b229e6ef0,1,0,8310f927-1123-4b4b-a65e-0ff29be73329,8310f927-1123-4b4b-a65e-0ff29be73329,1,0,80a9df2d-593d-483d-8d69-28b1c08ec648,80a9df2d-593d-483d-8d69-28b1c08ec648,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,ab4dbaff-cee6-47b3-9d69-13ac5c906f95,ab4dbaff-cee6-47b3-9d69-13ac5c906f95,1,0,82d5ed02-654f-4b86-b995-baf64a147a12,82d5ed02-654f-4b86-b995-baf64a147a12,1,0,ba96177b-d10c-4ad2-9851-dea312eeafd2,ba96177b-d10c-4ad2-9851-dea312eeafd2,1,0,7652c0d3-1b6e-4e0d-96d0-7bbdff808ce9,7652c0d3-1b6e-4e0d-96d0-7bbdff808ce9,1,0,caa287fe-4f60-4243-a6fe-8b2bd607205f,caa287fe-4f60-4243-a6fe-8b2bd607205f,1,0,ba6e2356-8b0e-4af6-9941-3b808e17c570,ba6e2356-8b0e-4af6-9941-3b808e17c570,1,0,f2f90525-566b-4add-ae3e-cc683dee6209,f2f90525-566b-4add-ae3e-cc683dee6209,1,0,59561ccb-5412-4f8a-8961-3d43639e4742,59561ccb-5412-4f8a-8961-3d43639e4742,1,0,8ce1e84a-9e69-4a75-9c3e-481ba3b5eaae,8ce1e84a-9e69-4a75-9c3e-481ba3b5eaae,1,0,0ec665f2-bbde-4e41-8cd0-2578253ecdf3,0ec665f2-bbde-4e41-8cd0-2578253ecdf3,1,0,e82ab008-d6b9-4f02-b4a5-0c0c57b06988,e82ab008-d6b9-4f02-b4a5-0c0c57b06988,1,0,50d2d02d-b812-4c2b-964a-4c2ded54284f,50d2d02d-b812-4c2b-964a-4c2ded54284f,1,0,5503d2c4-0b5e-4ba1-a26d-2f63628b25c8,5503d2c4-0b5e-4ba1-a26d-2f63628b25c8,1,0,53f519d2-0ee6-4314-a986-2f456722f2ae,53f519d2-0ee6-4314-a986-2f456722f2ae,1,0,c94a168f-e10f-4b09-8a82-7e53c056a643,c94a168f-e10f-4b09-8a82-7e53c056a643,1,0,35f56bf0-bb91-4ff4-ade4-fa06296e68a2,35f56bf0-bb91-4ff4-ade4-fa06296e68a2,1,0,a22ba49d-7a11-4dc7-8b0e-874da6f0874d,a22ba49d-7a11-4dc7-8b0e-874da6f0874d,1,0,888e5183-a152-435f-b105-6b924e0d4f4f,888e5183-a152-435f-b105-6b924e0d4f4f,1,0,f69a29cd-035f-4d16-8bec-150f563691b9,f69a29cd-035f-4d16-8bec-150f563691b9,1,0,6d4e26f4-4cc4-4445-ad7b-547cd0afc750,6d4e26f4-4cc4-4445-ad7b-547cd0afc750,1,0,5736ef36-69eb-4406-a98e-1e4b4227a10d,5736ef36-69eb-4406-a98e-1e4b4227a10d,1,0,0ab0a57c-24c6-4ba8-9be1-5773fd82367e,0ab0a57c-24c6-4ba8-9be1-5773fd82367e,1,0,9964f9e3-613c-479f-8557-742e409da4ab,9964f9e3-613c-479f-8557-742e409da4ab,1,0,ea6d3ce8-cbac-438a-92f1-b246d558fecd,ea6d3ce8-cbac-438a-92f1-b246d558fecd,1,0,84a655d4-49fb-44bb-bdc5-59776046e66b,84a655d4-49fb-44bb-bdc5-59776046e66b,1,0,8d5d9ad3-31a7-4877-b053-64edb7332af4,8d5d9ad3-31a7-4877-b053-64edb7332af4,1,0,3dbcdc42-8583-49e4-9c57-a1b06071be66,3dbcdc42-8583-49e4-9c57-a1b06071be66,1,0,79529e32-4c86-41e3-84ec-17f72b022855,79529e32-4c86-41e3-84ec-17f72b022855,1,0,6ef107de-6385-4448-9ef8-82110452a2b6,6ef107de-6385-4448-9ef8-82110452a2b6,1,0,3ce07fcb-f1a4-41db-891a-547311567ce0,3ce07fcb-f1a4-41db-891a-547311567ce0,1,0,3bcc76a7-f28a-4d28-a95e-af7ac1138993,3bcc76a7-f28a-4d28-a95e-af7ac1138993,1,0,50b4bf05-7810-4068-8be9-0be410d9b9db,50b4bf05-7810-4068-8be9-0be410d9b9db,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,52231550-161f-4ac9-86f8-f6b2a6e6283a,52231550-161f-4ac9-86f8-f6b2a6e6283a,1,0,6cdb0a08-84fd-43c4-bc4a-2c1f1357cf5a,6cdb0a08-84fd-43c4-bc4a-2c1f1357cf5a,1,0,133e9b99-37a3-44c9-b5ab-873f196de023,133e9b99-37a3-44c9-b5ab-873f196de023,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,ee494dc9-549b-4595-97d1-ca73bacff954,ee494dc9-549b-4595-97d1-ca73bacff954,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,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,977748b7-13d3-41ef-8206-82595ed8fc0c,977748b7-13d3-41ef-8206-82595ed8fc0c,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,e9b5a16c-d445-4e62-9a1b-bbea46850646,e9b5a16c-d445-4e62-9a1b-bbea46850646,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,3fbd3448-b23c-4a83-b2dd-7c193f4239da,3fbd3448-b23c-4a83-b2dd-7c193f4239da,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,90a7425e-3fc9-41ec-9373-f410936e1b53,90a7425e-3fc9-41ec-9373-f410936e1b53,1,0,509cdfc8-fad3-4628-869c-6c03d9519d69,509cdfc8-fad3-4628-869c-6c03d9519d69,1,0,c69f8196-5d7e-4ca9-a84e-c85d9ecf8777,c69f8196-5d7e-4ca9-a84e-c85d9ecf8777,1,0,663cf316-3077-4fac-b821-94bd5cdde65c,663cf316-3077-4fac-b821-94bd5cdde65c,1,0,4b37d2c0-4181-4c47-951c-987017972bf7,4b37d2c0-4181-4c47-951c-987017972bf7,1,0,8ae35de6-c7f0-4839-bc27-cc8619e30a43,8ae35de6-c7f0-4839-bc27-cc8619e30a43,1,0,9ef01e37-030a-44b7-824b-110e0f5a88f3,9ef01e37-030a-44b7-824b-110e0f5a88f3,1,0,98bf409f-de8d-4306-b290-716b006e6fd8,98bf409f-de8d-4306-b290-716b006e6fd8,1,0,c15f648b-3aed-4734-bcd2-524e2d3336c0,c15f648b-3aed-4734-bcd2-524e2d3336c0,1,0,600ac5b6-d3ac-4262-820d-5a989fa7f44d,600ac5b6-d3ac-4262-820d-5a989fa7f44d,1,0,3c671c62-5614-4c1b-a823-ac4922c9daf7,3c671c62-5614-4c1b-a823-ac4922c9daf7,1,0,c347e3a2-d6d9-46a0-971f-ec56a45dcbe8,c347e3a2-d6d9-46a0-971f-ec56a45dcbe8,1,0,455c94b6-6b10-405f-a198-f680c7ad5ffe,455c94b6-6b10-405f-a198-f680c7ad5ffe,1,0,d16a63b9-2b84-447e-9c32-1d8f7c4c5a11,d16a63b9-2b84-447e-9c32-1d8f7c4c5a11,1,0,48cc3006-9f06-4be1-aec4-5c04308200d5,48cc3006-9f06-4be1-aec4-5c04308200d5,1,0,bae8ba70-a19e-41fa-b11c-6513453bd3ac,bae8ba70-a19e-41fa-b11c-6513453bd3ac,1,0,f4a9a13e-91b0-4440-8662-25acf099220e,f4a9a13e-91b0-4440-8662-25acf099220e,1,0,ff87a40b-07da-4951-b469-a75d418e88b3,ff87a40b-07da-4951-b469-a75d418e88b3,1,0,708b4656-7d14-491f-95b5-8fe3f0d6d44b,708b4656-7d14-491f-95b5-8fe3f0d6d44b,1,0,331db59d-ef90-4255-89c2-d7fdd6bc5c4c,331db59d-ef90-4255-89c2-d7fdd6bc5c4c,1,0,e520fbbb-3521-4707-bbe7-c8ead04fb2dc,e520fbbb-3521-4707-bbe7-c8ead04fb2dc,1,0,a87faa63-4e1c-440c-b852-0e4e1485a047,a87faa63-4e1c-440c-b852-0e4e1485a047,1,0,36244ad9-5b3a-431e-9dbf-b05ee9da1188,36244ad9-5b3a-431e-9dbf-b05ee9da1188,1,0,6cf7fd67-e426-4fe3-a49d-fbcfae5fb52d,6cf7fd67-e426-4fe3-a49d-fbcfae5fb52d,1,0,92c4d60b-22df-4fef-a5b9-a97bc63b4858,92c4d60b-22df-4fef-a5b9-a97bc63b4858,1,0,8264b98b-7eec-4651-96fc-02620c87f274,8264b98b-7eec-4651-96fc-02620c87f274,1,0,bcd6e5f0-a800-4f21-ad75-24c428157cee,bcd6e5f0-a800-4f21-ad75-24c428157cee,1,0,9f351f0a-2d43-4215-8d74-040911230683,9f351f0a-2d43-4215-8d74-040911230683,1,0,6a9c1bd4-b550-4911-a8d1-321a7713a5a5,6a9c1bd4-b550-4911-a8d1-321a7713a5a5,1,0,019fa716-e91a-4116-abcf-c87349c153a4,019fa716-e91a-4116-abcf-c87349c153a4,1,0,f9fed640-0121-4c36-a822-0db7a9155adc,f9fed640-0121-4c36-a822-0db7a9155adc,1,0,e418d7c4-7322-41b1-a8df-d86a11f7711c,e418d7c4-7322-41b1-a8df-d86a11f7711c,1,0,b8a6ea0c-cb94-44af-8e40-55defed295d1,b8a6ea0c-cb94-44af-8e40-55defed295d1,1,0,3fcdfe26-1668-4aa7-bb10-ef8d8bd0ae39,3fcdfe26-1668-4aa7-bb10-ef8d8bd0ae39,1,0,a0ebcc8a-267b-4f95-a986-46db8fb5df4d,a0ebcc8a-267b-4f95-a986-46db8fb5df4d,1,0,9c890915-1ae3-457e-8a3d-7b39f181304b,9c890915-1ae3-457e-8a3d-7b39f181304b,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,2197147c-f67c-4e92-9e69-2c9900144e82,2197147c-f67c-4e92-9e69-2c9900144e82,1,0,7692e2fd-9ab5-45ee-9a4c-380107769ef7,7692e2fd-9ab5-45ee-9a4c-380107769ef7,1,0,6586260a-3abd-4283-b710-bc2ae3b965d8,6586260a-3abd-4283-b710-bc2ae3b965d8,1,0,2af20999-4b9a-44c7-9edf-40446e083796,2af20999-4b9a-44c7-9edf-40446e083796,1,0,100acfa0-d5f3-4a20-8a05-9d9d00aff2c9,100acfa0-d5f3-4a20-8a05-9d9d00aff2c9,1,0,ccdaa099-3739-4731-b028-3cb4e75834a5,ccdaa099-3739-4731-b028-3cb4e75834a5,1,0,dcbcf7e3-83ab-4460-8ee7-dfc55a0342e7,dcbcf7e3-83ab-4460-8ee7-dfc55a0342e7,1,0,4aa2e369-4871-4f28-ab0b-94323bb7e856,4aa2e369-4871-4f28-ab0b-94323bb7e856,1,0,a2961e9e-8361-4416-b736-1b59c9306526,a2961e9e-8361-4416-b736-1b59c9306526,1,0,ee07ebbe-b34d-4c42-a4b4-d5e14ef4c103,ee07ebbe-b34d-4c42-a4b4-d5e14ef4c103,1,0,1d44bf7e-3dc9-4ca4-86c8-bdabdb5650b8,1d44bf7e-3dc9-4ca4-86c8-bdabdb5650b8,1,0,d4757882-e0bd-4f54-962b-32d49c90fb60,d4757882-e0bd-4f54-962b-32d49c90fb60,1,0,6e650778-3ddd-44ca-bd7f-ffa5e8f4cce4,6e650778-3ddd-44ca-bd7f-ffa5e8f4cce4,1,0,ec81b967-a4a1-48ac-beda-cdc00f1222a0,ec81b967-a4a1-48ac-beda-cdc00f1222a0,1,0,0040f7b0-3499-41bd-94bf-d63679d9d9c1,0040f7b0-3499-41bd-94bf-d63679d9d9c1,1,0,e5c31a93-cda7-4972-a13b-8cb864cc40ed,e5c31a93-cda7-4972-a13b-8cb864cc40ed,1,0,e2a5f14f-9b64-4d1c-9c66-332ea0157cc2,e2a5f14f-9b64-4d1c-9c66-332ea0157cc2,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,15cd04c9-c12a-44ea-a397-d2adbac99c5b,15cd04c9-c12a-44ea-a397-d2adbac99c5b,1,0,182f92f5-0a8e-4f6a-9f9e-7878fafd0a2a,182f92f5-0a8e-4f6a-9f9e-7878fafd0a2a,1,0,45ca26ef-2a9f-4f24-a81b-2fe10c02ed9f,45ca26ef-2a9f-4f24-a81b-2fe10c02ed9f,1,0,56aa4b2f-5b7e-457d-a59d-837405f17fde,56aa4b2f-5b7e-457d-a59d-837405f17fde,1,0,819e2442-cb5a-4826-8a66-b34a3270e8e0,819e2442-cb5a-4826-8a66-b34a3270e8e0,1,0,49987536-3ab9-4a68-83a2-5dc3cd5d58fb,49987536-3ab9-4a68-83a2-5dc3cd5d58fb,1,0,8e4eec45-6ad3-4ac8-940a-b3130f504685,8e4eec45-6ad3-4ac8-940a-b3130f504685,1,0,ccdfef4b-a022-4bde-9c6c-84129b2bad65,ccdfef4b-a022-4bde-9c6c-84129b2bad65,1,0,965cd747-2231-4396-9584-93525db96fab,965cd747-2231-4396-9584-93525db96fab,1,0,419ea30e-3eaf-4af9-8914-493e93d3a743,419ea30e-3eaf-4af9-8914-493e93d3a743,1,0,f9ff4d55-a9d0-4ce7-8808-88dd17b57cce,f9ff4d55-a9d0-4ce7-8808-88dd17b57cce,1,0,430cf66c-5cfc-4fd4-bbf3-d9df6070e115,430cf66c-5cfc-4fd4-bbf3-d9df6070e115,1,0,95adcac2-bc88-46bc-aae5-d13cfb9a170c,95adcac2-bc88-46bc-aae5-d13cfb9a170c,1,0,d845ca4c-3af2-4322-8565-64f3aee61e3a,d845ca4c-3af2-4322-8565-64f3aee61e3a,1,0,6321fc1e-c1d7-4b49-b730-258857b2d936,6321fc1e-c1d7-4b49-b730-258857b2d936,1,0,f48abfe8-e400-4544-a80a-d1cb0b7d3ea8,f48abfe8-e400-4544-a80a-d1cb0b7d3ea8,1,0,ce40016b-7ca7-4803-81fa-5df0b92dbc54,ce40016b-7ca7-4803-81fa-5df0b92dbc54,1,0,b58b711b-8e9a-44a0-b62d-6b6362177a4b,b58b711b-8e9a-44a0-b62d-6b6362177a4b,1,0,f7c0af11-1b64-4504-a8db-0fd09c2ce20f,f7c0af11-1b64-4504-a8db-0fd09c2ce20f,1,0,b3c7cd75-fb40-4121-a727-d557fe66a5e0,b3c7cd75-fb40-4121-a727-d557fe66a5e0,1,0,38be384a-3abb-4f4d-b8b7-164c2c8d8b28,38be384a-3abb-4f4d-b8b7-164c2c8d8b28,1,0,8c697e44-1a1d-4c4a-b141-5254cfb229a5,8c697e44-1a1d-4c4a-b141-5254cfb229a5,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,28bb77d5-cc8e-4f91-830e-d5052224ed97,28bb77d5-cc8e-4f91-830e-d5052224ed97,1,0,874868a1-e4a3-4c78-8db4-5b103c9cc541,874868a1-e4a3-4c78-8db4-5b103c9cc541,1,0,d397d41e-6113-4f4e-99de-5d445649a4c3,d397d41e-6113-4f4e-99de-5d445649a4c3,1,0,2125956a-c910-4467-96f7-846441d17b02,2125956a-c910-4467-96f7-846441d17b02,1,0,3d0c7eb6-6d5e-46b4-b4c3-140a5b5ce6cf,3d0c7eb6-6d5e-46b4-b4c3-140a5b5ce6cf,1,0,da9028f5-04bb-4782-bd3a-0d17f4e1534e,da9028f5-04bb-4782-bd3a-0d17f4e1534e,1,0,45a74cbe-e001-4a6e-b0bf-b1e8947fb409,45a74cbe-e001-4a6e-b0bf-b1e8947fb409,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,d4e567c7-55f1-4564-b066-f5b2355ad82c,d4e567c7-55f1-4564-b066-f5b2355ad82c,1,0,57d1bde3-eaa7-476b-aecb-f78e0e97c765,57d1bde3-eaa7-476b-aecb-f78e0e97c765,1,0,89cf2cd8-dc43-4742-af5a-5975e9546786,89cf2cd8-dc43-4742-af5a-5975e9546786,1,0,089ae618-cd90-482a-b4a2-45a04aaecc0c,089ae618-cd90-482a-b4a2-45a04aaecc0c,1,0,d1beef4e-9c78-49f5-9e52-1568fadf861d,d1beef4e-9c78-49f5-9e52-1568fadf861d,1,0,e6032a40-6195-4889-99f5-f7f4c74d4e8f,e6032a40-6195-4889-99f5-f7f4c74d4e8f,1,0,f9f12c11-04e8-4999-b1ab-ddea896638a2,f9f12c11-04e8-4999-b1ab-ddea896638a2,1,0,47ae26c4-1c47-4d9d-a0b8-a9899d08a4ce,47ae26c4-1c47-4d9d-a0b8-a9899d08a4ce,1,0,83245a76-8502-47a4-98ae-2ffadb78a029,83245a76-8502-47a4-98ae-2ffadb78a029,1,0,c9d5a41d-a2d9-4ec6-9a51-e4d254df1927,c9d5a41d-a2d9-4ec6-9a51-e4d254df1927,1,0,22d7df25-5885-4ad6-bb29-28257256da22,22d7df25-5885-4ad6-bb29-28257256da22,1,0,3bb85423-6ce7-416f-884a-89c75deed890,3bb85423-6ce7-416f-884a-89c75deed890,1,0,132c8921-189a-4c00-a8a4-417728520203,132c8921-189a-4c00-a8a4-417728520203,1,0,18535b06-82f0-4179-af3c-975a5ba85872,18535b06-82f0-4179-af3c-975a5ba85872,1,0,1d0981b4-cf7c-4094-a597-d709a8573d71,1d0981b4-cf7c-4094-a597-d709a8573d71,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,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,a26d8489-88a8-438e-bb58-c7b5a742a243,a26d8489-88a8-438e-bb58-c7b5a742a243,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,9728fd22-163c-443d-a89f-79d15c51c086,9728fd22-163c-443d-a89f-79d15c51c086,1,0,7030a503-e97c-4cb8-b6cd-79dbd08fd2cc,7030a503-e97c-4cb8-b6cd-79dbd08fd2cc,1,0,0a7c25db-dba6-44d3-b994-d672c4f33f1f,0a7c25db-dba6-44d3-b994-d672c4f33f1f,1,0,618b565c-f80f-4e58-94f1-227d4bdc8fe7,618b565c-f80f-4e58-94f1-227d4bdc8fe7,1,0,e36ed6bf-7bb2-419f-b3d4-fe6f7e75188d,e36ed6bf-7bb2-419f-b3d4-fe6f7e75188d,1,0,018bd653-a526-4e2c-8483-1192ae997458,018bd653-a526-4e2c-8483-1192ae997458,1,0,788a38ca-6ef8-4a05-a0c7-032766b135d9,788a38ca-6ef8-4a05-a0c7-032766b135d9,1,0,82e0e020-d6a7-45ae-bdbd-d29aacff313a,82e0e020-d6a7-45ae-bdbd-d29aacff313a,1,0,31ac5bc1-3642-456b-aaed-d604669556f6,31ac5bc1-3642-456b-aaed-d604669556f6,1,0,3157f1b3-5d78-4fe4-89bf-afca0026a8d5,3157f1b3-5d78-4fe4-89bf-afca0026a8d5,1,0,317e6068-5c8e-4455-932c-f5ae09e398c3,317e6068-5c8e-4455-932c-f5ae09e398c3,1,0,8424768a-3673-4e7c-840f-836515f85ba9,8424768a-3673-4e7c-840f-836515f85ba9,1,0,37ba6039-9162-4c7e-9975-de3aec39664f,37ba6039-9162-4c7e-9975-de3aec39664f,1,0,1ed0209f-4e11-452b-8520-66bf02186f1a,1ed0209f-4e11-452b-8520-66bf02186f1a,1,0,d1e25f7f-f2c5-48bf-a7f4-4cd40d992e53,d1e25f7f-f2c5-48bf-a7f4-4cd40d992e53,1,0,4d7f4a37-8426-4f06-9b64-cae252cb8e9e,4d7f4a37-8426-4f06-9b64-cae252cb8e9e,1,0,ae5b5521-a525-402d-99b0-e83a7b2caaa4,ae5b5521-a525-402d-99b0-e83a7b2caaa4,1,0,3858dbf0-cb6b-4c67-9dd9-eb900c3688f4,3858dbf0-cb6b-4c67-9dd9-eb900c3688f4,1,0,a04a50db-cb4a-496e-8c25-5591d863a7d5,a04a50db-cb4a-496e-8c25-5591d863a7d5,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,7e4f56cf-cd89-4cd0-b566-20c42ac5f99e,7e4f56cf-cd89-4cd0-b566-20c42ac5f99e,1,0,815035c6-14be-45f1-ab58-a3ac51848db5,815035c6-14be-45f1-ab58-a3ac51848db5,1,0,db0abb94-e1cd-41f2-becd-4630ad7bbe22,db0abb94-e1cd-41f2-becd-4630ad7bbe22,1,0,5dc728d2-eb61-4524-b4e3-5ac8aeabab29,5dc728d2-eb61-4524-b4e3-5ac8aeabab29,1,0,9823a704-8602-430e-b1f3-0893b2285401,9823a704-8602-430e-b1f3-0893b2285401,1,0,b39b8193-1d46-46b6-844e-112f9fcd7f9b,b39b8193-1d46-46b6-844e-112f9fcd7f9b,1,0,ed216057-b1ce-489c-a120-581043f6d438,ed216057-b1ce-489c-a120-581043f6d438,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,851118bb-7e22-4c3c-a050-51b89216df86,851118bb-7e22-4c3c-a050-51b89216df86,1,0,4575003b-10c6-4d8e-bc5e-c643f38b24d9,4575003b-10c6-4d8e-bc5e-c643f38b24d9,1,0,b3fd4c7b-b7ae-40b9-bbe0-42fae0bc6bf5,b3fd4c7b-b7ae-40b9-bbe0-42fae0bc6bf5,1,0,e68e3408-ae45-4d3f-8cbf-e1f517cd4dec,e68e3408-ae45-4d3f-8cbf-e1f517cd4dec,1,0,6252386c-865f-41cc-aef4-1d8bf7087798,6252386c-865f-41cc-aef4-1d8bf7087798,1,0,9d256a1d-5a06-4716-9d83-c5877a5ffc14,9d256a1d-5a06-4716-9d83-c5877a5ffc14,1,0,63623218-8035-4ad9-b4db-a1f917c5641a,63623218-8035-4ad9-b4db-a1f917c5641a,1,0,d58babbe-6f59-4027-86db-54343d11e1c8,d58babbe-6f59-4027-86db-54343d11e1c8,1,0,a4cc0476-99a7-4b61-a382-2a6bb8d2043e,a4cc0476-99a7-4b61-a382-2a6bb8d2043e,1,0,8dbca9a8-97c0-4c95-b0a6-1c3f54e6fbab,8dbca9a8-97c0-4c95-b0a6-1c3f54e6fbab,1,0,4d23fa01-b9ef-419c-8806-e0b0fad14be0,4d23fa01-b9ef-419c-8806-e0b0fad14be0,1,0,3eb4e1a4-8653-410f-ae73-b25c03348880,3eb4e1a4-8653-410f-ae73-b25c03348880,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,a2f19cb2-9f2e-442b-b9f2-e5253c70871c,a2f19cb2-9f2e-442b-b9f2-e5253c70871c,1,0,0c67453e-038b-46f3-8c13-2786e8622ad8,0c67453e-038b-46f3-8c13-2786e8622ad8,1,0,8ff1dc4d-b46c-4519-80fe-19448e620e74,8ff1dc4d-b46c-4519-80fe-19448e620e74,1,0,7cd5ca8c-cc97-4664-964e-152fdcb5bdef,7cd5ca8c-cc97-4664-964e-152fdcb5bdef,1,0,be0a5f9a-ffab-41d8-b55a-a61355f5d269,be0a5f9a-ffab-41d8-b55a-a61355f5d269,1,0,9286105d-9aa9-44f9-ae63-bbbcec64eade,9286105d-9aa9-44f9-ae63-bbbcec64eade,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,e603a2c2-5acc-4657-9a0e-d98ab57a67ef,e603a2c2-5acc-4657-9a0e-d98ab57a67ef,1,0,ce165482-5e10-4ced-8d5c-1a3af8ba778a,ce165482-5e10-4ced-8d5c-1a3af8ba778a,1,0,222fdf9c-7bfe-4f81-ae59-3c6309754d43,222fdf9c-7bfe-4f81-ae59-3c6309754d43,1,0,eaaf0aee-07d6-4c49-bc84-5c86e71bb51e,eaaf0aee-07d6-4c49-bc84-5c86e71bb51e,1,0,0cee4741-eadb-4dfa-8993-fcb514acd2cd,0cee4741-eadb-4dfa-8993-fcb514acd2cd,1,0,c496cc40-f9cb-4334-80a1-d4ff98d58798,c496cc40-f9cb-4334-80a1-d4ff98d58798,1,0,a4d1aa8f-d4e9-48df-a194-4d05f21084c8,a4d1aa8f-d4e9-48df-a194-4d05f21084c8,1,0,22855103-c30a-4da1-aa25-6295e3f1f145,22855103-c30a-4da1-aa25-6295e3f1f145,1,0,80a7a699-6633-4109-a78d-d86f50d9f922,80a7a699-6633-4109-a78d-d86f50d9f922,1,0,7e26e712-cd36-4773-abae-21fe999a197f,7e26e712-cd36-4773-abae-21fe999a197f,1,0,bd676e43-b35a-41e0-83a9-8a9da8778f8e,bd676e43-b35a-41e0-83a9-8a9da8778f8e,1,0,44984353-2eae-40e4-86cc-1295812d9e12,44984353-2eae-40e4-86cc-1295812d9e12,1,0,ba64a0ae-5ae4-4e68-9088-dd3dff34e503,ba64a0ae-5ae4-4e68-9088-dd3dff34e503,1,0,56ce3bfc-2d87-4826-b6db-b63b5d415f48,56ce3bfc-2d87-4826-b6db-b63b5d415f48,1,0,51c76e26-1a34-4f2f-8887-88c8fcc0eb6d,51c76e26-1a34-4f2f-8887-88c8fcc0eb6d,1,0,67e291ab-0805-4add-8344-5a2bfc39b555,67e291ab-0805-4add-8344-5a2bfc39b555,1,0,ee5e9079-9586-47e8-84c1-bcb78a17e82e,ee5e9079-9586-47e8-84c1-bcb78a17e82e,1,0,4d49e173-27c1-42da-8597-bcf06946800d,4d49e173-27c1-42da-8597-bcf06946800d,1,0,3cbe38b2-4443-414e-8e6d-174bd2e6a925,3cbe38b2-4443-414e-8e6d-174bd2e6a925,1,0,796a2fcd-caa8-431c-8d22-320479ecc5fd,796a2fcd-caa8-431c-8d22-320479ecc5fd,1,0,2e882442-45ce-41af-a76b-b00a74021cba,2e882442-45ce-41af-a76b-b00a74021cba,1,0,457b37a9-d6dd-40bb-9eea-06a5dfbaf777,457b37a9-d6dd-40bb-9eea-06a5dfbaf777,1,0,d4beb157-c999-46c2-ac4b-5ec6846a717d,d4beb157-c999-46c2-ac4b-5ec6846a717d,1,0,9eed26c8-8874-4814-b232-44a8f594fabe,9eed26c8-8874-4814-b232-44a8f594fabe,1,0,487ec60f-c31c-4c74-ba24-efcfc3908320,487ec60f-c31c-4c74-ba24-efcfc3908320,1,0,5af3a256-2bdb-4d87-a2e6-348f072f099d,5af3a256-2bdb-4d87-a2e6-348f072f099d,1,0,c232ad3b-79ea-45fa-85f1-6229474b967c,c232ad3b-79ea-45fa-85f1-6229474b967c,1,0,4d596b46-4654-46b8-a015-cecfc86780fc,4d596b46-4654-46b8-a015-cecfc86780fc,1,0,c94decc9-4fb7-4f47-a7e6-ab8944798a24,c94decc9-4fb7-4f47-a7e6-ab8944798a24,1,0,0ec45124-506d-4a1f-b6e3-1620f34fa817,0ec45124-506d-4a1f-b6e3-1620f34fa817,1,0,36f99889-4bc1-40cd-904a-a463c44f7b0b,36f99889-4bc1-40cd-904a-a463c44f7b0b,1,0,88fafb0d-d624-4b91-8c68-c354817ccddb,88fafb0d-d624-4b91-8c68-c354817ccddb,1,0,f4a3e032-61fb-4004-bd4d-6eaffb53437b,f4a3e032-61fb-4004-bd4d-6eaffb53437b,1,0,9126b840-ddcc-4054-aa16-4156288a379e,9126b840-ddcc-4054-aa16-4156288a379e,1,0,a6facfdb-7529-479c-9bb3-e63316b032f4,a6facfdb-7529-479c-9bb3-e63316b032f4,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,14361dbe-00dd-496b-adf4-7f35553bb48c,14361dbe-00dd-496b-adf4-7f35553bb48c,1,0,9de12434-34a3-4f73-848e-d0798f6d6c83,9de12434-34a3-4f73-848e-d0798f6d6c83,1,0,64c4af68-7657-458e-a129-14a3dd8a0262,64c4af68-7657-458e-a129-14a3dd8a0262,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,db5fde74-275f-4d82-825c-5c245a7fef6b,db5fde74-275f-4d82-825c-5c245a7fef6b,1,0,e4e534e9-7ccc-4ced-b961-613989a6194b,e4e534e9-7ccc-4ced-b961-613989a6194b,1,0,cc925b83-839b-48da-8f62-7f8cde76ac2a,cc925b83-839b-48da-8f62-7f8cde76ac2a,1,0,7d06f855-8a6a-45e0-a1c2-fd5f03d2a8ed,7d06f855-8a6a-45e0-a1c2-fd5f03d2a8ed,1,0,f9681a4d-d47c-4a8d-a8a3-4aafc751e61b,f9681a4d-d47c-4a8d-a8a3-4aafc751e61b,1,0,e6e76d04-8adc-4462-8919-0979258e5a7b,e6e76d04-8adc-4462-8919-0979258e5a7b,1,0,6ee85be2-55f6-4d4b-abf1-0d1d25f61ea3,6ee85be2-55f6-4d4b-abf1-0d1d25f61ea3,1,0,f850e1d5-5108-4ca8-b397-983627e4871b,f850e1d5-5108-4ca8-b397-983627e4871b,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,96229b23-74a9-4fe1-a89e-b71f499cd65a,96229b23-74a9-4fe1-a89e-b71f499cd65a,1,0,15000713-0142-42e9-8bb3-cbb0587200d4,15000713-0142-42e9-8bb3-cbb0587200d4,1,0,d5ae7e0b-c230-402f-9d4f-e52c2b9aa240,d5ae7e0b-c230-402f-9d4f-e52c2b9aa240,1,0,0d199fdc-d2af-4159-91d6-6f15266f9ce8,0d199fdc-d2af-4159-91d6-6f15266f9ce8,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,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,d4eb3e9a-feb5-42d9-841b-ff20288228b6,d4eb3e9a-feb5-42d9-841b-ff20288228b6,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,093a2243-329b-49b2-b6cd-80a1f7e4634a,093a2243-329b-49b2-b6cd-80a1f7e4634a,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,6e82e4ec-cf8e-4e9f-aaed-69b146c2ed84,6e82e4ec-cf8e-4e9f-aaed-69b146c2ed84,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,ea232693-49b2-4e10-9349-66e26760602c,ea232693-49b2-4e10-9349-66e26760602c,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,1908b558-9619-477e-ab33-0c731adf2b0e,1908b558-9619-477e-ab33-0c731adf2b0e,1,0,2bed313f-06ac-43a1-a0bd-008c5457deb1,2bed313f-06ac-43a1-a0bd-008c5457deb1,1,0,304feda3-6d33-466c-9e0d-9cea97d763be,304feda3-6d33-466c-9e0d-9cea97d763be,1,0,d6d20d2e-ac18-4bed-aa98-2466871996ac,d6d20d2e-ac18-4bed-aa98-2466871996ac,1,0,53617fbd-4c88-4b13-b3f5-acc78064fdea,53617fbd-4c88-4b13-b3f5-acc78064fdea,1,0,fae5d2ca-4a2d-4ba3-945c-d6545a6b57f1,fae5d2ca-4a2d-4ba3-945c-d6545a6b57f1,1,0,7a043029-1b09-4c11-adfd-9f0588e323e8,7a043029-1b09-4c11-adfd-9f0588e323e8,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,53a2f4b2-e8ea-4347-b4c7-b73f4ea8f9b7,53a2f4b2-e8ea-4347-b4c7-b73f4ea8f9b7,1,0,6b814a99-441e-4a51-997b-1c56bc40b134,6b814a99-441e-4a51-997b-1c56bc40b134,1,0,9388e5d5-3a02-4019-a060-141f8a3bb055,9388e5d5-3a02-4019-a060-141f8a3bb055,1,0,c1b000a1-8094-4a06-805f-b84d4e9c6dc0,c1b000a1-8094-4a06-805f-b84d4e9c6dc0,1,0,5eb1717c-3696-48bb-88a9-b667ea687860,5eb1717c-3696-48bb-88a9-b667ea687860,1,0,95705445-29b4-4d51-857b-a9cf161a3cc6,95705445-29b4-4d51-857b-a9cf161a3cc6,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,ed1b3c28-99be-49e9-90eb-81e24c8323a5,ed1b3c28-99be-49e9-90eb-81e24c8323a5,1,0,1e20958d-79dc-4c53-b09f-e627c6463fca,1e20958d-79dc-4c53-b09f-e627c6463fca,1,0,0efdbcc2-e5a8-4b00-a72a-2823fb0b2658,0efdbcc2-e5a8-4b00-a72a-2823fb0b2658,1,0,0fa7190d-bafd-4113-a623-9d7d818f70c7,0fa7190d-bafd-4113-a623-9d7d818f70c7,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,1117fce9-6e77-4d1d-aa86-49e7baddfe4b,1117fce9-6e77-4d1d-aa86-49e7baddfe4b,1,0,23f96afc-28e2-470d-9732-220f8867fc23,23f96afc-28e2-470d-9732-220f8867fc23,1,0,aef883c7-c1f5-46ff-a95a-6828d3509069,aef883c7-c1f5-46ff-a95a-6828d3509069,1,0,36b3b988-bf64-4466-9887-93583f59833d,36b3b988-bf64-4466-9887-93583f59833d,1,0,c2997234-864c-408c-94d3-85a2a1820a16,c2997234-864c-408c-94d3-85a2a1820a16,1,0,9d5b351e-5533-4e9f-a23f-d0f7b03d72ca,9d5b351e-5533-4e9f-a23f-d0f7b03d72ca,1,0,d5775cec-e600-4259-82fc-f313cee1cd6f,d5775cec-e600-4259-82fc-f313cee1cd6f,1,0,df918f4e-1a0a-4a7a-997b-f4757185b691,df918f4e-1a0a-4a7a-997b-f4757185b691,1,0,4e305be6-8bbf-4215-aeea-1283aba6d19e,4e305be6-8bbf-4215-aeea-1283aba6d19e,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,5ffc2b03-28c0-45da-ab3e-e4c5d449a898,5ffc2b03-28c0-45da-ab3e-e4c5d449a898,1,0,5c1a1206-0521-44db-8cdd-3e132f2e5a34,5c1a1206-0521-44db-8cdd-3e132f2e5a34,1,0,a630b2d5-2a8e-471e-a7ca-2498e15ace47,a630b2d5-2a8e-471e-a7ca-2498e15ace47,1,0,ba0855a3-8384-4681-a6f0-6373f23cf52d,ba0855a3-8384-4681-a6f0-6373f23cf52d,1,0,62c4aa38-8768-4a3e-84d1-94fa65b23686,62c4aa38-8768-4a3e-84d1-94fa65b23686,1,0,5c1b06a9-f216-4e73-82f9-1febbdef34d8,5c1b06a9-f216-4e73-82f9-1febbdef34d8,1,0,b732a9da-9739-4c68-a37a-7a81b2c65e49,b732a9da-9739-4c68-a37a-7a81b2c65e49,1,0,bd1e5dbf-310b-44d5-ba84-cccf898c1ec7,bd1e5dbf-310b-44d5-ba84-cccf898c1ec7,1,0,cd20376f-f106-4e20-8575-ceb42b45b8b8,cd20376f-f106-4e20-8575-ceb42b45b8b8,1,0,bf1c6099-2d52-44ea-b873-d3e7d2e94c1e,bf1c6099-2d52-44ea-b873-d3e7d2e94c1e,1,0,5ce71d76-53c2-475a-91f8-8f90e305489a,5ce71d76-53c2-475a-91f8-8f90e305489a,1,0,1a5499ca-600e-4541-8da4-5239f11bfb3b,1a5499ca-600e-4541-8da4-5239f11bfb3b,1,0,b81d7b9e-2adc-4a27-b7ae-13c8ecafd7ba,b81d7b9e-2adc-4a27-b7ae-13c8ecafd7ba,1,0,323207f8-b964-462f-a0f0-4a69ddf90ac0,323207f8-b964-462f-a0f0-4a69ddf90ac0,1,0,5c22f549-a8c2-4068-90bc-974472eb6071,5c22f549-a8c2-4068-90bc-974472eb6071,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,8ef2c1d3-173f-4db8-b2c7-5d5234709b8e,8ef2c1d3-173f-4db8-b2c7-5d5234709b8e,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,c91f630a-286c-4eb8-b87e-6e6bc7670482,c91f630a-286c-4eb8-b87e-6e6bc7670482,1,0,8ace2dbf-ed9d-46fd-bda7-d884da77e30c,8ace2dbf-ed9d-46fd-bda7-d884da77e30c,1,0,ba59bf05-b815-4679-94ce-601923d60461,ba59bf05-b815-4679-94ce-601923d60461,1,0,65ff172c-3892-4dd2-821b-5d6293805528,65ff172c-3892-4dd2-821b-5d6293805528,1,0,00c47343-9f64-4368-896e-85f1639e4dae,00c47343-9f64-4368-896e-85f1639e4dae,1,0,afc02a73-15bd-4ab1-97bb-5cea6206a44f,afc02a73-15bd-4ab1-97bb-5cea6206a44f,1,0,27a9ef3c-902c-49e3-ab84-ba51185ab111,27a9ef3c-902c-49e3-ab84-ba51185ab111,1,0,20ba43f5-348f-41e4-b365-ff9485a3951d,20ba43f5-348f-41e4-b365-ff9485a3951d,1,0,2f6bc78d-d2ed-491f-bc66-3f95e2ca574c,2f6bc78d-d2ed-491f-bc66-3f95e2ca574c,1,0,bf3e3395-3e41-49c2-b59e-fdcdc3ef956f,bf3e3395-3e41-49c2-b59e-fdcdc3ef956f,1,0,164db402-4516-4d99-80d2-6cb7b6fd7698,164db402-4516-4d99-80d2-6cb7b6fd7698,1,0,93b18f0a-7aa1-42db-809b-1e543cda57de,93b18f0a-7aa1-42db-809b-1e543cda57de,1,0,a8e04267-5a28-40af-8d45-e65375cd8273,a8e04267-5a28-40af-8d45-e65375cd8273,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,82573440-0ef5-4c07-bb1e-fe90295981d2,82573440-0ef5-4c07-bb1e-fe90295981d2,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,8d509c4e-fcea-4ccd-aec4-e146f2d4319b,8d509c4e-fcea-4ccd-aec4-e146f2d4319b,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,6b0721fe-d27f-4d1a-b377-26fce2ed1687,6b0721fe-d27f-4d1a-b377-26fce2ed1687,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,b65954b9-39f9-4f7c-8af2-939af0694368,b65954b9-39f9-4f7c-8af2-939af0694368,1,0,3a984dac-c971-42c3-9736-a45c46b55f01,3a984dac-c971-42c3-9736-a45c46b55f01,1,0,edaa4ad4-4dd9-4225-85e8-b0d74d167985,edaa4ad4-4dd9-4225-85e8-b0d74d167985,1,0,c060feda-b1ec-4db3-b16e-d19b36833a2c,c060feda-b1ec-4db3-b16e-d19b36833a2c,1,0,2116217b-1660-499f-953d-f685738b0f30,2116217b-1660-499f-953d-f685738b0f30,1,0,45b46613-13cc-4888-9bb7-53780402206f,45b46613-13cc-4888-9bb7-53780402206f,1,0,5c224274-5495-49bc-b124-e6d649b09d57,5c224274-5495-49bc-b124-e6d649b09d57,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,b6424caf-3db8-4cfe-b92d-7435c23606a5,b6424caf-3db8-4cfe-b92d-7435c23606a5,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,1c2103d3-3feb-4412-98c4-c731f22eef2b,1c2103d3-3feb-4412-98c4-c731f22eef2b,1,0,569bb515-cec2-4da0-80f0-34dae50206e0,569bb515-cec2-4da0-80f0-34dae50206e0,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,336cb96e-8867-4c9d-b74c-b4287ac9212a,336cb96e-8867-4c9d-b74c-b4287ac9212a,1,0,fc7dbc20-7bef-4cbc-9b32-5d86cef5532c,fc7dbc20-7bef-4cbc-9b32-5d86cef5532c,1,0,29f616a6-b914-4ffb-8a86-1ae17089e2f7,29f616a6-b914-4ffb-8a86-1ae17089e2f7,1,0,c50075b0-e8e2-4a6c-92ef-05882aa3cfea,c50075b0-e8e2-4a6c-92ef-05882aa3cfea,1,0,5a1058fc-35f6-43c2-95e5-ae678e19e7d6,5a1058fc-35f6-43c2-95e5-ae678e19e7d6,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,29c337bd-9811-4fce-91bb-20c253d2d14a,29c337bd-9811-4fce-91bb-20c253d2d14a,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,9a68a81b-c6bd-4353-baf4-da8a21f98fb9,9a68a81b-c6bd-4353-baf4-da8a21f98fb9,1,0,8db2b1d8-c415-4846-bd1a-9fec1b105ff0,8db2b1d8-c415-4846-bd1a-9fec1b105ff0,1,0,3ed20a3b-031c-4f2b-a66a-14cceed80407,3ed20a3b-031c-4f2b-a66a-14cceed80407,1,0,3831a5d8-12d5-4730-ac2e-e11f084dc684,3831a5d8-12d5-4730-ac2e-e11f084dc684,1,0,b6dce793-c652-48de-b2da-1dc3e89e1521,b6dce793-c652-48de-b2da-1dc3e89e1521,1,0,41990cad-a43e-46fd-b9bc-e8acc1d6e937,41990cad-a43e-46fd-b9bc-e8acc1d6e937,1,0,3bcce139-d42e-45c2-ace8-28aa34e01a38,3bcce139-d42e-45c2-ace8-28aa34e01a38,1,0,2e6a596c-c203-48b3-af11-bf0aef0f70a1,2e6a596c-c203-48b3-af11-bf0aef0f70a1,1,0,82eb7d08-12ad-42a2-9257-91b93f7cc890,82eb7d08-12ad-42a2-9257-91b93f7cc890,1,0,50754c7d-9c8a-497c-a4c8-76d7400b3412,50754c7d-9c8a-497c-a4c8-76d7400b3412,1,0,193f2d79-83a7-4044-89c6-0b5d7c7cf80a,193f2d79-83a7-4044-89c6-0b5d7c7cf80a,1,0,93070fc1-4204-43b7-b8eb-1bf905f5fa3f,93070fc1-4204-43b7-b8eb-1bf905f5fa3f,1,0,d29ba846-bc42-4364-b69d-4b56532920e0,d29ba846-bc42-4364-b69d-4b56532920e0,1,0,83239cd4-50cb-4281-8be3-fd89e410c15c,83239cd4-50cb-4281-8be3-fd89e410c15c,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,5d81af5c-3133-4e21-9ea4-ffe3d3ca9769,5d81af5c-3133-4e21-9ea4-ffe3d3ca9769,1,0,0f83d532-f675-4aea-802e-d640cc53e4a9,0f83d532-f675-4aea-802e-d640cc53e4a9,1,0,75b0d16b-4acd-4870-8e9d-f2764171e747,75b0d16b-4acd-4870-8e9d-f2764171e747,1,0,8f2cd606-d326-4c92-bfff-e5ec8b5057b5,8f2cd606-d326-4c92-bfff-e5ec8b5057b5,1,0,ed56abb2-66c6-412e-bead-9b23c59bd49a,ed56abb2-66c6-412e-bead-9b23c59bd49a,1,0,47ad737d-c9d3-4d4d-8d4d-b550412062c4,47ad737d-c9d3-4d4d-8d4d-b550412062c4,1,0,204f67e9-204d-47b6-afdd-8e880b7563bc,204f67e9-204d-47b6-afdd-8e880b7563bc,1,0,4da10de3-d999-4acd-bf5a-b1c60cf01b32,4da10de3-d999-4acd-bf5a-b1c60cf01b32,1,0,5e52263e-856f-43da-96ca-d4f06127f604,5e52263e-856f-43da-96ca-d4f06127f604,1,0,ab6f18fe-4ce4-4ecb-945b-bf71ef793549,ab6f18fe-4ce4-4ecb-945b-bf71ef793549,1,0,57904a00-a127-4add-a9fb-639e17c80e33,57904a00-a127-4add-a9fb-639e17c80e33,1,0,2f2f70b7-8f78-4eee-acb7-fe103827e88a,2f2f70b7-8f78-4eee-acb7-fe103827e88a,1,0,f6e8a922-c28b-49b2-ace5-0c812946270d,f6e8a922-c28b-49b2-ace5-0c812946270d,1,0,3d9d472e-a914-4f76-b087-19d4cfe19c19,3d9d472e-a914-4f76-b087-19d4cfe19c19,1,0,81225721-7e65-451d-9175-76fddc50f0c4,81225721-7e65-451d-9175-76fddc50f0c4,1,0,4a6bfd2c-0690-4504-9952-10e7c31156e9,4a6bfd2c-0690-4504-9952-10e7c31156e9,1,0,8f2dfd13-5e16-4fdd-be02-033d27b43317,8f2dfd13-5e16-4fdd-be02-033d27b43317,1,0,2c3849f2-46cc-4350-a6c5-f5587af2c699,2c3849f2-46cc-4350-a6c5-f5587af2c699,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,cb2245e0-f9fe-4571-9fb4-3f8744e60f14,cb2245e0-f9fe-4571-9fb4-3f8744e60f14,1,0,38f3f056-5f03-40c8-91f7-25a74af8fd52,38f3f056-5f03-40c8-91f7-25a74af8fd52,1,0,36e04436-2e6b-4ab9-a0ce-1048482f8fb6,36e04436-2e6b-4ab9-a0ce-1048482f8fb6,1,0,f4b1f17d-d050-4c88-936e-0dd354065a28,f4b1f17d-d050-4c88-936e-0dd354065a28,1,0,735eb95a-f4a9-4a90-a9a0-ab269b89f4de,735eb95a-f4a9-4a90-a9a0-ab269b89f4de,1,0,49f4a74c-abc2-446f-8f3c-de7bc02d84bf,49f4a74c-abc2-446f-8f3c-de7bc02d84bf,1,0,9d55341b-ceb2-4400-aeb6-3b579d9c6f2b,9d55341b-ceb2-4400-aeb6-3b579d9c6f2b,1,0,ab1efcef-f81b-45e5-893d-56e75c1e0a6f,ab1efcef-f81b-45e5-893d-56e75c1e0a6f,1,0,bbefbf22-6d11-4639-b53e-b72e94ff307c,bbefbf22-6d11-4639-b53e-b72e94ff307c,1,0,dca6a730-8a3f-4b78-926b-2287e21a25a1,dca6a730-8a3f-4b78-926b-2287e21a25a1,1,0,bdec80e6-4aef-4603-98dc-3332abda955c,bdec80e6-4aef-4603-98dc-3332abda955c,1,0,8be7adcd-b49a-4192-9f62-e0b0089b0386,8be7adcd-b49a-4192-9f62-e0b0089b0386,1,0,e4e8e36b-6060-43f3-8b05-bbbf61c3decc,e4e8e36b-6060-43f3-8b05-bbbf61c3decc,1,0,a53447c8-0299-4cf0-a6f9-5a3af423be38,a53447c8-0299-4cf0-a6f9-5a3af423be38,1,0,4f8a2980-bdb4-4a4f-82ec-2822dc1adc49,4f8a2980-bdb4-4a4f-82ec-2822dc1adc49,1,0,91b5a3ca-5f7b-462d-b322-ab8e938add40,91b5a3ca-5f7b-462d-b322-ab8e938add40,1,0,8db8d80c-bf04-4252-8371-46a1dd7e2720,8db8d80c-bf04-4252-8371-46a1dd7e2720,1,0,6fdb4b65-1caf-4472-8135-c6a479bda6d4,6fdb4b65-1caf-4472-8135-c6a479bda6d4,1,0,b5a8b32f-8f8d-4e13-9113-94e66f5c9621,b5a8b32f-8f8d-4e13-9113-94e66f5c9621,1,0,9b8cf6f0-2b56-4954-b982-db18ad78c5ef,9b8cf6f0-2b56-4954-b982-db18ad78c5ef,1,0,1e869478-9bff-4854-9f9c-699b7d1c8faa,1e869478-9bff-4854-9f9c-699b7d1c8faa,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,f2aa4137-07b6-4fc7-8009-8127762dc698,f2aa4137-07b6-4fc7-8009-8127762dc698,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,3bce82a2-efba-4866-950c-5804853b5fe2,3bce82a2-efba-4866-950c-5804853b5fe2,1,0,ee0e428a-bee7-4169-9b6e-63704f3d1a8e,ee0e428a-bee7-4169-9b6e-63704f3d1a8e,1,0,5fa8756c-871d-460f-b70a-0797de0d5563,5fa8756c-871d-460f-b70a-0797de0d5563,1,0,cc63becf-0e32-48d8-b4c1-430abaa83e9e,cc63becf-0e32-48d8-b4c1-430abaa83e9e,1,0,f46ae351-0ac5-4597-a6a9-1394cd5ec83f,f46ae351-0ac5-4597-a6a9-1394cd5ec83f,1,0,d57f644e-40e5-46a3-874c-5addd52ec3f6,d57f644e-40e5-46a3-874c-5addd52ec3f6,1,0,5ef18079-798a-4924-98a7-8ba4ff13303f,5ef18079-798a-4924-98a7-8ba4ff13303f,1,0,16835f10-559e-420b-9a67-03aac0e947c4,16835f10-559e-420b-9a67-03aac0e947c4,1,0,0292ed74-c47c-4a44-b6db-0e9b6828bec2,0292ed74-c47c-4a44-b6db-0e9b6828bec2,1,0,bfafc36e-2d45-4716-b7be-a89b69575066,bfafc36e-2d45-4716-b7be-a89b69575066,1,0,75cb904b-b3f1-4f0d-85d9-a186262028ff,75cb904b-b3f1-4f0d-85d9-a186262028ff,1,0,82cfb1ad-5ba0-425c-b75e-6281862faec8,82cfb1ad-5ba0-425c-b75e-6281862faec8,1,0,de64596c-a7c1-4d1d-9264-5817e47ab6d3,de64596c-a7c1-4d1d-9264-5817e47ab6d3,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,e69be74a-0e2c-4a7b-8814-ab15ab28f948,e69be74a-0e2c-4a7b-8814-ab15ab28f948,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,9016988e-1aea-460a-b5eb-644dc5923d87,9016988e-1aea-460a-b5eb-644dc5923d87,1,0,8593c908-9f6f-42df-9fd4-e41ccffba315,8593c908-9f6f-42df-9fd4-e41ccffba315,1,0,d6eb3484-b0ab-40e3-aa95-c18a40259f77,d6eb3484-b0ab-40e3-aa95-c18a40259f77,1,0,08ec3f2e-e523-4e37-8d44-fbc52c66263c,08ec3f2e-e523-4e37-8d44-fbc52c66263c,1,0,7300e566-06ea-42a3-b046-477ee9883559,7300e566-06ea-42a3-b046-477ee9883559,1,0,72ef831d-9d37-4b7f-8b71-fb9dd0ab6038,72ef831d-9d37-4b7f-8b71-fb9dd0ab6038,1,0,a0ff40b4-5815-445e-ad67-f524dfa3aaa7,a0ff40b4-5815-445e-ad67-f524dfa3aaa7,1,0,4d7ef262-8449-4511-a408-e5d322ce3d78,4d7ef262-8449-4511-a408-e5d322ce3d78,1,0,3f8130d4-12b2-4a2b-8f75-9ca8289624c8,3f8130d4-12b2-4a2b-8f75-9ca8289624c8,1,0,02877723-66fb-4984-b760-511d1c6c29f0,02877723-66fb-4984-b760-511d1c6c29f0,1,0,ec0bc645-5abf-423f-a517-2aa7adf9044c,ec0bc645-5abf-423f-a517-2aa7adf9044c,1,0,d8430167-5d4e-4603-9797-36781210cdff,d8430167-5d4e-4603-9797-36781210cdff,1,0,c4b3f94d-6f5f-457b-a425-56c0f745c75f,c4b3f94d-6f5f-457b-a425-56c0f745c75f,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,9378d484-2143-45eb-a71e-651055611789,9378d484-2143-45eb-a71e-651055611789,1,0,a2d24b4d-6039-49ab-8cc2-14d03a2d5546,a2d24b4d-6039-49ab-8cc2-14d03a2d5546,1,0,c5d0eafb-469e-4a24-8b5e-ce25fb627d3d,c5d0eafb-469e-4a24-8b5e-ce25fb627d3d,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,d5b23aac-ea1c-497e-bed7-8685bb682e36,d5b23aac-ea1c-497e-bed7-8685bb682e36,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,c49054f1-3a96-4bf1-917e-f11407c67b5b,c49054f1-3a96-4bf1-917e-f11407c67b5b,1,0,01ede889-689f-45f3-b9a3-5e4c1188bea1,01ede889-689f-45f3-b9a3-5e4c1188bea1,1,0,a05f99a4-c764-4283-9fbb-6e641c3a15ae,a05f99a4-c764-4283-9fbb-6e641c3a15ae,1,0,cbe31324-feba-4137-9b82-b1b2afbcfb9d,cbe31324-feba-4137-9b82-b1b2afbcfb9d,1,0,03e80316-735f-4087-afe9-218d41dce028,03e80316-735f-4087-afe9-218d41dce028,1,0,eca391b3-ee95-47ab-a3d6-a80c745f99e7,eca391b3-ee95-47ab-a3d6-a80c745f99e7,1,0,b3035b26-9ead-4082-90b0-7dd61b4a6990,b3035b26-9ead-4082-90b0-7dd61b4a6990,1,0,cd68ac77-8df5-42d4-b729-da73cae0a78b,cd68ac77-8df5-42d4-b729-da73cae0a78b,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,dea1f169-5426-4623-9e5e-3c8c2360858f,dea1f169-5426-4623-9e5e-3c8c2360858f,1,0,039b1cc5-a831-41fb-933a-b9c0fb9c9f55,039b1cc5-a831-41fb-933a-b9c0fb9c9f55,1,0,4dea2614-6251-45c3-9abe-34b7595c71a2,4dea2614-6251-45c3-9abe-34b7595c71a2,1,0,e31cfba9-0f49-485f-8d6f-797b32667642,e31cfba9-0f49-485f-8d6f-797b32667642,1,0,de183413-490a-4266-95fa-ea0057adeee3,de183413-490a-4266-95fa-ea0057adeee3,1,0,fd81a8df-0f9f-4543-a35c-0cb1bb804b5b,fd81a8df-0f9f-4543-a35c-0cb1bb804b5b,1,0,129f7771-7285-4842-a139-ca927d086184,129f7771-7285-4842-a139-ca927d086184,1,0,b50f3157-3c3a-4553-a16a-7fcd660e2824,b50f3157-3c3a-4553-a16a-7fcd660e2824,1,0,895aea8f-4c4e-44e5-b720-0a2e683191b3,895aea8f-4c4e-44e5-b720-0a2e683191b3,1,0,a3b14a36-049d-4f94-bafc-cf7b874f9bf0,a3b14a36-049d-4f94-bafc-cf7b874f9bf0,1,0,6c954862-62d0-4901-8448-ea62a1174660,6c954862-62d0-4901-8448-ea62a1174660,1,0,19858faf-2bc5-4cfb-b258-cb101ab66e87,19858faf-2bc5-4cfb-b258-cb101ab66e87,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,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,5f3a30b0-1ba8-423c-9bc2-f9a87cafe818,1,0,766d8852-3bb4-4a6c-81c0-911722af4e8e,766d8852-3bb4-4a6c-81c0-911722af4e8e,1,0,54bfe81c-06b2-45a8-8bc1-bd22240cfe32,54bfe81c-06b2-45a8-8bc1-bd22240cfe32,1,0,46f71ecc-5cee-4b8d-9f6d-d38a86787a76,46f71ecc-5cee-4b8d-9f6d-d38a86787a76,1,0,b896cd10-5da4-4c90-b2cf-5b98bd173122,b896cd10-5da4-4c90-b2cf-5b98bd173122,1,0,216410ad-91e5-4c41-b08b-905faa830410,216410ad-91e5-4c41-b08b-905faa830410,1,0,df2bf85a-9e42-40d2-ae10-d8f5dbf06e61,df2bf85a-9e42-40d2-ae10-d8f5dbf06e61,1,0,1e0a3a73-3fd9-43f7-8ee5-e54565264232,1e0a3a73-3fd9-43f7-8ee5-e54565264232,1,0,0f4de605-5df9-4bb9-92e8-f37c6903396e,0f4de605-5df9-4bb9-92e8-f37c6903396e,1,0,66c8a1f2-248d-4b2a-b427-38fb4f63410a,66c8a1f2-248d-4b2a-b427-38fb4f63410a,1,0,a4b3ed40-b440-49f4-ab22-53fdad8c66c6,a4b3ed40-b440-49f4-ab22-53fdad8c66c6,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,9ba59a76-ed54-4d17-83f1-f315a5722a1e,9ba59a76-ed54-4d17-83f1-f315a5722a1e,1,0,a680795f-a870-4642-b45d-12ed24a12395,a680795f-a870-4642-b45d-12ed24a12395,1,0,54936c70-5a08-40fa-8f85-da07dd6a29ec,54936c70-5a08-40fa-8f85-da07dd6a29ec,1,0,8d8f40e2-9897-425e-b08e-58bf46566c30,8d8f40e2-9897-425e-b08e-58bf46566c30,1,0,1bab3154-9f5c-402b-93ae-5da019e96d2b,1bab3154-9f5c-402b-93ae-5da019e96d2b,1,0,5c802dcc-411e-4413-ad88-465127ad0004,5c802dcc-411e-4413-ad88-465127ad0004,1,0,abf392d3-9ded-4dcd-9490-14b6a05329b7,abf392d3-9ded-4dcd-9490-14b6a05329b7,1,0,8e760cb3-50bb-4e19-8887-da538aebef07,8e760cb3-50bb-4e19-8887-da538aebef07,1,0,22db835c-014c-4ff0-90ef-0654e250ff77,22db835c-014c-4ff0-90ef-0654e250ff77,1,0,a81aa069-c1b5-4096-ac8d-660eb0de3561,a81aa069-c1b5-4096-ac8d-660eb0de3561,1,0,8efcb583-4088-4e2d-8ad6-0f3abba7cbb5,8efcb583-4088-4e2d-8ad6-0f3abba7cbb5,1,0,9717140f-0721-47b0-8cab-a9a5dfefad9d,9717140f-0721-47b0-8cab-a9a5dfefad9d,1,0,ebe6f782-635b-457a-bfaa-5b78ac44584b,ebe6f782-635b-457a-bfaa-5b78ac44584b,1,0,644d553d-8286-420a-aa6a-b9c8a2be896f,644d553d-8286-420a-aa6a-b9c8a2be896f,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,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,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,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,e59e9cfc-43b2-4bdf-a512-b6f87f781cee,e59e9cfc-43b2-4bdf-a512-b6f87f781cee,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,178342fd-1ba5-422d-89d2-4f486e45dae9,178342fd-1ba5-422d-89d2-4f486e45dae9,1,0,7e9fadd6-d0ad-4856-a195-1058f00bf488,7e9fadd6-d0ad-4856-a195-1058f00bf488,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,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,f0402893-724d-4ccd-87f6-d567839b3e70,f0402893-724d-4ccd-87f6-d567839b3e70,1,0,64c84fff-dba1-4f17-bc89-1c69a6f54bea,64c84fff-dba1-4f17-bc89-1c69a6f54bea,1,0,08077c47-4ffd-46f5-9ef5-528ac27bdc75,08077c47-4ffd-46f5-9ef5-528ac27bdc75,1,0,d5a2c4ea-21ce-4673-9aef-9a5eb80a4632,d5a2c4ea-21ce-4673-9aef-9a5eb80a4632,1,0,27089712-b7d7-4a2f-9851-1826d8965f5b,27089712-b7d7-4a2f-9851-1826d8965f5b,1,0,511727f3-b757-4e5b-b7d7-166917029787,511727f3-b757-4e5b-b7d7-166917029787,1,0,a92b3f49-e28a-4f14-8320-7a96d9d08987,a92b3f49-e28a-4f14-8320-7a96d9d08987,1,0,1c34696a-0444-4d3c-8331-17a1b5013368,1c34696a-0444-4d3c-8331-17a1b5013368,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,e97edb4a-468d-499d-924d-aa4e5ee16548,e97edb4a-468d-499d-924d-aa4e5ee16548,1,0,24366a86-0dae-4a68-a180-d8ea7656a286,24366a86-0dae-4a68-a180-d8ea7656a286,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,3c03f78e-c904-47da-a0a1-db5d6b9f7254,3c03f78e-c904-47da-a0a1-db5d6b9f7254,1,0,3bf03ed7-6581-4a11-8fc8-748f46c8dad7,3bf03ed7-6581-4a11-8fc8-748f46c8dad7,1,0,0f28c616-162c-4dba-bd22-f7ea5d23ea5a,0f28c616-162c-4dba-bd22-f7ea5d23ea5a,1,0,39bf2771-1d8b-44bb-8d8b-54d046589ebe,39bf2771-1d8b-44bb-8d8b-54d046589ebe,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,f237a21e-066a-48e6-a5c4-5dc2487c7a3b,f237a21e-066a-48e6-a5c4-5dc2487c7a3b,1,0,8adebe50-a946-40c2-9258-b17efe787e0e,8adebe50-a946-40c2-9258-b17efe787e0e,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,d12c7296-36ab-41e0-83ef-143484958597,d12c7296-36ab-41e0-83ef-143484958597,1,0,2b6c3bcd-7d2a-4e95-8066-99374002689b,2b6c3bcd-7d2a-4e95-8066-99374002689b,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,73cc5b8b-4cba-4988-b2c6-d974dde9723d,73cc5b8b-4cba-4988-b2c6-d974dde9723d,1,0,1b9bbdb1-b8c0-4459-8b5c-656055482f00,1b9bbdb1-b8c0-4459-8b5c-656055482f00,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..4ceff5f0d --- /dev/null +++ b/SSL/src/Constants/КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов/КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов.mdo @@ -0,0 +1,26 @@ + + + + + + + + КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов + + ru + Количество месяцев минимального периода рассчитанных итогов + + + Number + + 2 + true + + + true + + 0 + + + Managed + diff --git a/SSL/src/Constants/НастройкиВходаПользователей/ValueManagerModule.bsl b/SSL/src/Constants/НастройкиВходаПользователей/ValueManagerModule.bsl index 9a6435c90..b0c52b141 100644 --- a/SSL/src/Constants/НастройкиВходаПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/НастройкиВходаПользователей/ValueManagerModule.bsl @@ -16,7 +16,7 @@ #Область ОбработчикиСобытий -Процедура ПередЗаписью(Отказ, Замещение) +Процедура ПередЗаписью(Отказ) // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. ПодготовитьЗаписьИзмененийВЖурналРегистрации(СтарыеНастройки); @@ -28,7 +28,7 @@ КонецПроцедуры -Процедура ПриЗаписи(Отказ, Замещение) +Процедура ПриЗаписи(Отказ) // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. ЗаписатьИзмененияВЖурналРегистрации(СтарыеНастройки); diff --git a/SSL/src/Constants/НастройкиРегистрацииСобытийДоступаКДанным/ValueManagerModule.bsl b/SSL/src/Constants/НастройкиРегистрацииСобытийДоступаКДанным/ValueManagerModule.bsl index a33b2074d..358c6ed62 100644 --- a/SSL/src/Constants/НастройкиРегистрацииСобытийДоступаКДанным/ValueManagerModule.bsl +++ b/SSL/src/Constants/НастройкиРегистрацииСобытийДоступаКДанным/ValueManagerModule.bsl @@ -16,7 +16,7 @@ #Область ОбработчикиСобытий -Процедура ПередЗаписью(Отказ, Замещение) +Процедура ПередЗаписью(Отказ) // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. ПодготовитьЗаписьИзмененийВЖурналРегистрации(СтарыеНастройки); @@ -28,7 +28,7 @@ КонецПроцедуры -Процедура ПриЗаписи(Отказ, Замещение) +Процедура ПриЗаписи(Отказ) // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. ЗаписатьИзмененияВЖурналРегистрации(СтарыеНастройки); diff --git a/SSL/src/Constants/РазрешитьДоступКИнтернетСервисам/ManagerModule.bsl b/SSL/src/Constants/РазрешитьДоступКИнтернетСервисам/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/РазрешитьДоступКИнтернетСервисам/ValueManagerModule.bsl b/SSL/src/Constants/РазрешитьДоступКИнтернетСервисам/ValueManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/РазрешитьДоступКИнтернетСервисам/РазрешитьДоступКИнтернетСервисам.mdo b/SSL/src/Constants/РазрешитьДоступКИнтернетСервисам/РазрешитьДоступКИнтернетСервисам.mdo new file mode 100644 index 000000000..0dfd55b50 --- /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..ea8b94fc0 --- /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 dbe3d7404..aacf5902e 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -50,7 +50,7 @@ &НаКлиенте Процедура ИнтервалВремениВыполненияПриИзменении(Элемент) - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); Если ВключеноИзвлечениеТекста Тогда ОтключитьОбработчикОжидания("ИзвлечениеТекстовКлиентОбработчик"); @@ -67,7 +67,7 @@ &НаКлиенте Процедура КоличествоФайловВПорцииПриИзменении(Элемент) - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции", КоличествоФайловВПорции); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции", КоличествоФайловВПорции); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html index 528543c46..68c801fa1 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html @@ -1,18 +1,18 @@

                  Предназначена для управления автоматическим извлечением текстов.

                  -

                  Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем в разделе Администрирование - Общие настройки - Полнотекстовый поиск данных выполнить команду Настроить - Запустить извлечение текстов.

                  +

                  Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем в разделе Администрирование - Общие настройки - Полнотекстовый поиск данных выполнить команду Настроить - Запустить извлечение текстов.

                  Настройка параметров

                  • Установите Интервал времени выполнения - по умолчанию интервал времени выполнения равен 60 секундам;
                  • Определите Количество файлов в одной порции - по умолчанию равно 100;
                  • -
                  • Количество файлов с неизвлеченным текстом - приложение подсчитывает автоматически.

                  Извлечение текстов

                  +
                • Количество файлов с неизвлеченным текстом - приложение подсчитывает автоматически.

                Извлечение текстов

                Извлечение текстов можно производить:

                • -
                   порциями.
                  +
                  порциями.
                  • Нажмите Старт, для того чтобы начать извлечение текстов установленными порциями с возможностью прервать процесс;
                  • Нажмите Стоп, для того чтобы прервать процесс.
                • из всех файлов сразу.
                  • Нажмите Извлечь все.

                См. также:

                - \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html index c1059cb31..6ce1816a2 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html @@ -1,6 +1,6 @@ -

                Содержит список пользователей, работающих в данный момент времени в приложении.

                -

                В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.

                +

                Содержит список пользователей, работающих в данный момент времени в приложении.

                +

                В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.

                Список выводится по соответствующей команде раздела Администрирование - Поддержка и обслуживание.

                В списке выводятся:

                • Пользователь - полное имя пользователя. Отображаются также внешние пользователи; @@ -9,19 +9,19 @@
                • Начало работы - дата и время начала работы;
                • -
                • Компьютер - сетевое имя компьютера, с которого выполнен вход в приложение; +
                • Компьютер - сетевое имя компьютера, с которого выполнен вход в приложение;
                • -
                • Сеанс - номер сеанса, а также разделение данных.

                В нижней строке списка подсчитывается общее количество активных пользователей.

                +
              • Сеанс - номер сеанса, а также разделение данных.

              В нижней строке списка подсчитывается общее количество активных пользователей.

              Жирным шрифтом выделена строка, соответствующая тому сеансу работы пользователя, из которого открыт список активных пользователей.

              Для удобства просмотра списка можно использовать сортировку по любой колонке.

              Отборы

              -
              • С помощью поля Показывать можно выбрать из списка отбор по одному из предопределенных значений. По умолчанию выбрано значение Все сеансы.

              Просмотр пользователя

              -
              • Для того чтобы просмотреть сведения о пользователе, воспользуйтесь двойным щелчком мыши по нужной строке. +
                • С помощью поля Показывать можно выбрать из списка отбор по одному из предопределенных значений. По умолчанию выбрано значение Все сеансы.

                Просмотр пользователя

                +
                • Для того чтобы просмотреть сведения о пользователе, воспользуйтесь двойным щелчком мыши по нужной строке.
                • -
                • Также можно выделить нужную строку и выполнить команду Еще - Открыть.

                Просмотр журнала регистрации

                -
                • Для анализа работы выбранного пользователя по команде Журнал регистрации можно перейти к журналу регистрации, отфильтрованному по выбранному пользователю. 

                Обновление списка

                -
                • Список активных пользователей не является динамическим списком. Для того чтобы увидеть активных пользователей, которые попали в список после его открытия, нажмите  Обновить текущий список или клавишу F5. 

                Завершение сеанса (клиент-серверный режим)

                +
              • Также можно выделить нужную строку и выполнить команду Еще - Открыть.

              Просмотр журнала регистрации

              +
              • Для анализа работы выбранного пользователя по команде Журнал регистрации можно перейти к журналу регистрации, отфильтрованному по выбранному пользователю.

              Обновление списка

              +
              • Список активных пользователей не является динамическим списком. Для того чтобы увидеть активных пользователей, которые попали в список после его открытия, нажмите Обновить текущий список или клавишу F5.

              Завершение сеанса (клиент-серверный режим)

              • В клиент-серверном режиме работы доступна команда Завершить сеанс, принудительно завершающая выбранные в списке сеансы пользователей.
              • -
              • Для корректной работы этой команды необходимо предварительно задать параметры администрирования приложения (окно настроек открывается автоматически).

              См. также:

              +
            • Для корректной работы этой команды необходимо предварительно задать параметры администрирования приложения (окно настроек открывается автоматически).

            См. также:

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form similarity index 68% rename from SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form rename to SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 46d44977f..5955569f4 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -126,6 +126,37 @@ ФормаВводАдресаПоказать 101 + + АдресВСвободнойФорме + 516 + + <key>ru</key> + <value>Адрес в свободной форме</value> + + true + true + + true + + + АдресВСвободнойФормеРасширеннаяПодсказка + 517 + Label + true + true + + Left + + + Form.Command.АдресВСвободнойФорме + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ИсторияИзменений 326 @@ -553,156 +584,33 @@ СтраницаАдрес 484 - АдресПредставлениеКомментарий - 225 + ВариантыАдреса + 499 - ВСвободнойФорме - 3 - - ГруппаСтранаСвободнаяФорма - 468 - - ГруппаСтранаСвободнаяФормаЗначение - 472 - - СтранаВСвободнойФорме - 488 - - <key>ru</key> - <value>Страна</value> - - true - true - - true - - - Страна - - - ru - Страна адреса - - - OnChange - СтранаПриИзменении - - - СтранаВСвободнойФормеРасширеннаяПодсказка - 490 - Label - true - true - - Left - - - - СтранаВСвободнойФормеКонтекстноеМеню - 489 - true - - InputField - Left - Enter - true - Left - true - - - AutoComplete - СтранаАвтоПодбор - - - Clearing - СтранаОчистка - - - TextEditEnd - СтранаОкончаниеВводаТекста - - - ChoiceProcessing - СтранаОбработкаВыбора - - 60 - true - 60 - true - true - false - true - ShowInInputField - false - false - false - false - true - true - - ТолькоДанныеКлассификатора - - - true - - - - - РазрешитьДанныеКлассификатора - - - true - - - - Normal - - ru - Введите первые буквы названия страны - - DontUse - - - true - true - - true - - - <key>ru</key> - <value>Страна свободная форма значение</value> - - - ГруппаСтранаСвободнаяФормаЗначениеРасширеннаяПодсказка - 473 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - + АдресПоПолям + 530 + + Улица + 501 + + <key>ru</key> + <value>Улица, номер дома</value> + true true true - - <key>ru</key> - <value>Страна свободная форма</value> - + + Улица + + + OnChange + Адрес1ПриИзменении + - ГруппаСтранаСвободнаяФормаРасширеннаяПодсказка - 469 + УлицаРасширеннаяПодсказка + 503 Label true true @@ -710,14 +618,255 @@ Left - UsualGroup - - AlwaysHorizontal - true - true - Auto + + УлицаКонтекстноеМеню + 502 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ДополнительнаяИнформация + 510 + + <key>ru</key> + <value>Доп. информация (квартира/этаж)</value> + + true + true + + true + + + ДополнительнаяИнформация + + 2 + + OnChange + Адрес2ПриИзменении + + + ДополнительнаяИнформацияРасширеннаяПодсказка + 512 + Label + true + true + + Left + + + + ДополнительнаяИнформацияКонтекстноеМеню + 511 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Город + 507 + + <key>ru</key> + <value>Город</value> + + true + true + + true + + + Город + + + OnChange + ГородПриИзменении + + + ГородРасширеннаяПодсказка + 509 + Label + true + true + + Left + + + + ГородКонтекстноеМеню + 508 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Регион + 513 + + <key>ru</key> + <value>Штат/Регион</value> + + true + true + + true + + + Регион + + + OnChange + РегионПриИзменении + + + РегионРасширеннаяПодсказка + 515 + Label + true + true + + Left + + + + РегионКонтекстноеМеню + 514 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Индекс + 504 + + <key>ru</key> + <value>Почтовый индекс</value> + + true + true + + true + + + ПочтовыйИндекс + + + OnChange + ИндексПриИзменении + + + ИндексРасширеннаяПодсказка + 506 + Label + true + true + + Left + + + + ИндексКонтекстноеМеню + 505 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Адрес по полям</value> + + + АдресПоПолямРасширеннаяПодсказка + 531 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ВСвободнойФорме + 532 ПредставлениеИностранногоАдреса 21 @@ -779,7 +928,7 @@ ВСвободнойФормеРасширеннаяПодсказка - 131 + 533 Label true true @@ -787,10 +936,124 @@ Left - Page - - Vertical - false + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + Страна + 488 + + <key>ru</key> + <value>Страна</value> + + true + true + + true + + + Страна + + + hu + hu Страна адреса + + + en + en Strana adresa + + + gr + gr Страна адреса + + + bg + bg Страна адреса + + + ru + Страна адреса + + + da + da Страна адреса + + + OnChange + СтранаПриИзменении + + + СтранаРасширеннаяПодсказка + 490 + Label + true + true + + Left + + + + СтранаКонтекстноеМеню + 489 + true + + InputField + Left + Enter + true + Left + true + + + Clearing + СтранаОчистка + + true + 60 + true + true + false + true + ShowInInputField + false + false + false + false + true + true + Normal + + hu + hu Введите первые буквы названия страны + + + en + en Vvedite pervie bukvi nazvanija strani + + + gr + gr Введите первые буквы названия страны + + + bg + bg Введите первые буквы названия страны + + + ru + Введите первые буквы названия страны + + + da + da Введите первые буквы названия страны + + DontUse true @@ -800,11 +1063,11 @@ <key>ru</key> - <value>Адрес представление комментарий</value> + <value>Варианты адреса</value> - АдресПредставлениеКомментарийРасширеннаяПодсказка - 226 + ВариантыАдресаРасширеннаяПодсказка + 500 Label true true @@ -812,8 +1075,132 @@ Left - Pages - + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ГруппаПредставлениеАдреса + 526 + + ПредставлениеАдреса + 523 + + <key>ru</key> + <value>Представление адреса</value> + + true + true + + true + + + ПредставлениеАдреса + + None + + ПредставлениеАдресаРасширеннаяПодсказка + 525 + Label + true + true + + Left + + + + ПредставлениеАдресаКонтекстноеМеню + 524 + true + + InputField + Enter + true + Left + true + + true + true + true + + CommonPicture.СкопироватьВБуферОбмена + + true + true + + Style.ПоясняющийТекст + + + Style.FormBackColor + + Normal + + + + СкопироватьАдресВБуферОбмена + 528 + + <key>ru</key> + <value>Скопировать адрес в буфер обмена</value> + + true + true + + true + + + СкопироватьАдресВБуферОбменаРасширеннаяПодсказка + 529 + Label + true + true + + Left + + + UsualButton + Form.Command.СкопироватьАдресВБуферОбмена + Normal + Auto + true + true + UserCmds + Auto + WhenActive + + true + true + + true + + + <key>ru</key> + <value>Представление адреса</value> + + + ГруппаПредставлениеАдресаРасширеннаяПодсказка + 527 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto Auto @@ -1216,13 +1603,15 @@ true - Индекс + ПочтовыйИндекс + + <key>ru</key> + <value>Почтовый индекс</value> + 4 String - - 6 - + true @@ -1233,7 +1622,11 @@ true - НаселенныйПункт + Город + + <key>ru</key> + <value>Город</value> + 5 String @@ -1249,6 +1642,10 @@ Улица + + <key>ru</key> + <value>Улица, номер дома</value> + 6 String @@ -1278,20 +1675,11 @@
            true
            - ИдентификаторНаселенногоПункта - 9 - - UUID - - - true - - - true - - - - ТипДома + Регион + + <key>ru</key> + <value>Штат/Регион</value> + 11 String @@ -1306,7 +1694,11 @@ true - Дом + ДополнительнаяИнформация + + <key>ru</key> + <value>Доп. информация (квартира/этаж)</value> + 12 String @@ -1320,66 +1712,6 @@ true - - ТипСтроения - 13 - - String - - - - true - - - true - - true - - - Строение - 14 - - String - - - - true - - - true - - true - - - ТипПомещения - 15 - - String - - - - true - - - true - - true - - - Помещение - 16 - - String - - - - true - - - true - - true - ОсновнаяСтрана 18 @@ -1514,19 +1846,6 @@ true - - СкрыватьНеактуальныеАдреса - 27 - - Boolean - - - true - - - true - - КопияКомментария 28 @@ -1541,19 +1860,6 @@ true - - ЕстьПравоЗагружатьКлассификатор - 29 - - Boolean - - - true - - - true - - АвтоЦвет 17 @@ -1687,19 +1993,6 @@ true - - ИдентификаторУлицы - 10 - - UUID - - - true - - - true - - АдресИзменен 8 @@ -1755,19 +2048,6 @@ true - - ПодборПоИндексуДоступен - 43 - - Boolean - - - true - - - true - - ОКТМО 44 @@ -1964,19 +2244,6 @@ - - ЭтоВебСервис - 48 - - Boolean - - - true - - - true - - АдресНаДату @@ -2026,19 +2293,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ЭтоСтранаУчастникЕАЭС</name> - <id>52</id> - <valueType> - <types>Boolean</types> - </valueType> - <view> - <common>true</common> - </view> - <edit> - <common>true</common> - </edit> - </attributes> <attributes> <name>ФорматАдреса</name> <title> @@ -2064,10 +2318,30 @@ <value>ОК</value> 1 + + hu + hu Подтвердить изменения и закрыть форму + + + en + en Podtverditye izmenenija i zakritye formu + + + gr + gr Подтвердить изменения и закрыть форму + + + bg + bg Подтвердить изменения и закрыть форму + ru Подтвердить изменения и закрыть форму + + da + da Подтвердить изменения и закрыть форму + true @@ -2086,10 +2360,30 @@ Очистить адрес 3 + + hu + hu Очистить адрес + + + en + en Ochistitye adres + + + gr + gr Очистить адрес + + + bg + bg Очистить адрес + ru Очистить адрес + + da + da Очистить адрес + true @@ -2112,10 +2406,30 @@ Отмена 7 + + hu + hu Отменить изменения и закрыть форму + + + en + en Otmenitye izmenenija i zakritye formu + + + gr + gr Отменить изменения и закрыть форму + + + bg + bg Отменить изменения и закрыть форму + ru Отменить изменения и закрыть форму + + da + da Отменить изменения и закрыть форму + true @@ -2152,10 +2466,30 @@ Комментарий 27 + + hu + hu Добавить комментарий + + + en + en Dobavitye kommentariy + + + gr + gr Добавить комментарий + + + bg + bg Добавить комментарий + ru Добавить комментарий + + da + da Добавить комментарий + true @@ -2167,6 +2501,70 @@ DontUse Auto + + АдресВСвободнойФорме + + <key>ru</key> + <value>Адрес в свободной форме</value> + + 28 + + true + + + + АдресВСвободнойФорме + + + Auto + Auto + + + СкопироватьАдресВБуферОбмена + + <key>ru</key> + <value>Скопировать адрес в буфер обмена</value> + + 29 + + hu + hu Скопировать адрес в буфер обмена + + + en + en Skopirovatye adres v bufer obmena + + + gr + gr Скопировать адрес в буфер обмена + + + bg + bg Скопировать адрес в буфер обмена + + + ru + Скопировать адрес в буфер обмена + + + da + da Скопировать адрес в буфер обмена + + + true + + + CommonPicture.СкопироватьВБуферОбмена + + + + СкопироватьАдресВБуферОбмена + + + Picture + 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..551910725 --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -0,0 +1,90 @@ + +

            Предназначена для ввода адреса. При заполнении возможно использование шаблона и адресного классификатора.

            +

            Открывается по кнопке Выбрать из поля Адрес в элементах списков.

            +

            Автоподбор российского адреса

            +
            • Предусмотрен автоподбор всего адреса при вводе (только при использовании веб-сервиса. Наберите в поле Город, населенный пункт поисковое слово или его часть. +
            • +
            • Обратите внимание на цветовое различие адресов: +
              • по муниципальному делению - стандартный цвет текста; +
              • +
              • по административно-территориальному делению - серый цвет.

            Ввод адреса

            +
            • В поле Страна выберите страну адреса. Редактирование адресов за пределами Евразийского экономического союза (ЕАЭС) производится в общем поле, без учета частей адреса. Страна "Россия" выбрана приложением по умолчанию, при этом поле может быть недоступным в зависимости от настроек. Для того чтобы изменить страну, нажмите Выбрать. Выбор осуществляется из списка Классификатор стран мира (ОКСМ). +
            • +
            • Поле Индекс предназначено для ввода почтового индекса, соответствующего данному адресу. Если адрес найден в адресном классификаторе, то индекс может быть проставлен автоматически. Также по индексу, если адресный классификатор по соответствующему региону загружен, можно заполнить адрес. +
            • +
            • Поле Город, населенный пункт предназначено для ввода региона, города и т. п. При необходимости можно ввести части адреса детально, нажав Выбрать. В открывшемся шаблоне введите данные населенного пункта. +
            • +
            • Поле Улица предназначено для выбора (нажмите кнопку Выбрать, в списке улиц найдите нужную) или ввода улицы адреса. +
            • +
            • Поля Дом, Корпус, Квартира позволяют ввести соответствующие части адреса. Можно изменить эти варианты, выбрав дополнительные значения из выпадающего списка. +
            • +
            • Также можно Добавить дополнительные поля для ввода других предопределенных частей адреса, таких как Строение, Литера, Сооружение, Участок, Офис, Бокс, Помещение, Комната, А/я. +
            • +
            • для ввода номера дома нажмите кнопку , в окне Выбор дома выводится список всех возможных домов и строений для введенного адреса. Дополнительные части адреса, например, корпус, также выбираются из списка. +
            • +
            • Поле Представление адреса при заполнении адреса по шаблону недоступно, заполняется приложением автоматически по мере заполнения полей адреса.

            Примеры заполнения адреса

            +Примеры даются по административно-территориальному делению.
            • Для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345" необходимо: +
              • В поле Город, населенный пункт выбрать "Санкт-Петербург г". +
              • +
              • В поле Улица выбрать "пр-кт Пискаревский". +
              • +
              • В поле Дом написать "2". +
              • +
              • В поле Корпус написать "2". +
              • +
              • Для ввода литеры необходимо Добавить поле, выбрать из выпадающего списка значение Литера и проставить в поле значение "Щ". +
              • +
              • Вместо поля Квартира выбрать из выпадающего списка поле Офис и ввести значение "12345".
            • +
            • Для ввода адреса, содержащего другие значения полей, например "Москва, улица Адмирала Лазарева, домовладение 89, корпус 16, строение 1" необходимо: +
              • В поле Город, населенный пункт выбрать "Москва г". +
              • +
              • В поле Улица выбрать " ул. Адмирала Лазарева". +
              • +
              • Вместо поля Дом выбрать из выпадающего списка поле Домовладение, введите значение "89". +
              • +
              • В поле Корпус написать "16". +
              • +
              • Нажмите Добавить, выберите из выпадающего списка поле Строение, проставьте в поле "1".

            Проверка заполнения адреса

            +

            Нажмите Проверить заполнение, для того чтобы проанализировать корректность заполнения адреса. Приложение производит проверку:

            +
            • проверка актуальности версии адресного классификатора с предложением обновить данные; +
            • +
            • на заполненность адреса; +
            • +
            • на наличие недопустимых символов; +
            • +
            • длины наименований реквизитов адреса; +
            • +
            • на соответствие классификатору. В клиент-серверной базе проверка адреса на соответствие классификатору производится на сервере. После проверки правильности заполнения адреса приложение выдает сообщение "Адрес введен корректно" или список ошибок. Проверка правильности невозможна для иностранных адресов, они не проверяются. Также команда становится недоступной, если адрес введен в свободной форме. +
            • +
            • Если адрес некорректный, то в приложении производится перебор вариантов нумерации (не дом, а владение; наличие корпусов, строений; буквы в номере дома). +
            • +
            • Производится поиск в исторических данных адреса, например, улица была переименована.

            История изменений

            +
            • +
              В некоторых списках можно просмотреть историю изменения адреса с помощью команды Еще - История изменений.

            Адрес на Яндекс.Картах, Адрес на Google Maps

            +
            • +
              С помощью этих команд любой адрес, введенный в приложение, можно посмотреть на картах.

            Выбор вида территориального деления

            +
            • +
              Перед заполнением адреса с помощью флажка можно выбрать:
              +
              • +
                Муниципальное деление;
                +
              • +
              • +
                Административно-территориальное деление.

            Ввод адреса в свободной форме

            +
            • Включите флажок Адрес в свободной форме меню Еще, для того чтобы при вводе адреса по шаблону ввести заведомо некорректный адрес (например, с товаром на накладной неправильный адрес поставщика, его надо временно зафиксировать для печати, но в дальнейшем его использовать нельзя). Такой адрес используется для хранения, поэтому можно рекомендовать использовать его только для единичных случаев. +
            • +
            • Напишите адрес. Проверка заполнения адреса в данном случае отключена. +
            • +
            • Для подтверждения адреса нажмите ОК. Приложением будет зафиксировано, что адрес заполнен в свободной форме и на просмотр адрес будет выводиться в таком виде.

            Заполнение адреса по почтовому индексу

            +
            • Если известен индекс адреса и адресный классификатор по соответствующему региону загружен, то с помощью команды Еще - Заполнить по почтовому индексу имеется возможность по индексу найти адрес. Для выбора выводятся только те адреса, которые соответствуют введенному индексу. Выберите нужную часть адреса, дозаполните оставшиеся поля. +
            • +
            • Если указан почтовый индекс, сведения о котором отсутствует в приложении, приложение выводит сообщение.

            Очистка адреса

            +
            • С помощью команды меню Еще - Очистить адрес можно стереть неправильно введенный адрес.

            Загрузка классификатора

            +
            • Выполните команду Еще - Загрузить классификатор. После проведения обновления адресного классификатора по выбранному региону можно продолжить редактирование адреса.

            См. также:

            + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl similarity index 69% rename from SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl rename to SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 1aa90ede6..18df32d03 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -32,13 +32,12 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Не Параметры.Свойство("ОткрытаПоСценарию") Тогда + Если Не Параметры.Свойство("ОткрытаПоСценарию") Тогда ВызватьИсключение НСтр("ru = 'Обработка не предназначена для непосредственного использования.'"); КонецЕсли; // Настройки формы Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); - ОсновнаяСтрана = ОсновнаяСтрана(); ВидКИ = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); // см. УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации ВидКонтактнойИнформации = ВидКИ; @@ -50,25 +49,19 @@ ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; // Пытаемся заполнить из параметров. - ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); + ЗначениеКонтактнойИнформации = ОпределитьЗначениеАдреса(Параметры); - Если ПустаяСтрока(ЗначенияПолей) Тогда + Если ПустаяСтрока(ЗначениеКонтактнойИнформации) Тогда НаселенныйПунктДетально = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес); // Новый адрес - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + НаселенныйПунктДетально.addressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); НаселенныйПунктДетально.value = Параметры.Представление; - ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначенияПолей) Тогда - ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Адрес); + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВJSON(ЗначениеКонтактнойИнформации) Тогда + ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначениеКонтактнойИнформации, Перечисления.ТипыКонтактнойИнформации.Адрес); НаселенныйПунктДетально = ПодготовитьАдресДляВвода(ДанныеАдреса); - Иначе - XDTOКонтактная = ИзвлечьСтарыйФорматАдреса(ЗначенияПолей, ТипКонтактнойИнформации); - Если XDTOКонтактная <> Неопределено Тогда - ДанныеАдреса = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(XDTOКонтактная, ТипКонтактнойИнформации); - НаселенныйПунктДетально = ПодготовитьАдресДляВвода(ДанныеАдреса); - КонецЕсли; КонецЕсли; ЗаполнитьПредопределенныеВариантыАдреса(); - УстановитьЗначениеРеквизитовПоКонтактнойИнформации(ЭтотОбъект, НаселенныйПунктДетально); + УстановитьЗначениеРеквизитовПоКонтактнойИнформации(НаселенныйПунктДетально); Если ЗначениеЗаполнено(НаселенныйПунктДетально.Comment) Тогда Элементы.ОсновныеСтраницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; @@ -90,6 +83,8 @@ ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупрежденияПриОткрытии,, ПолеПредупрежденияПриОткрытии); КонецЕсли; + ОтобразитьПоляАдреса(УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.addressType)); + КонецПроцедуры &НаКлиенте @@ -107,7 +102,25 @@ &НаКлиенте Процедура СтранаПриИзменении(Элемент) - ОтобразитьПоляПоТипуАдреса(); + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.addressType) Тогда + ЧастиАдреса = СтрРазделить(НаселенныйПунктДетально.value, ",", Истина); + СтранаДоИзменения = НаселенныйПунктДетально.country; + Для Позиция = 0 По ЧастиАдреса.ВГраница() Цикл + Если СтрСравнить(СокрЛП(ЧастиАдреса[Позиция]), СтранаДоИзменения) = 0 Тогда + ПозицияНачало = СтрНайти(ВРег(ЧастиАдреса[Позиция]), ВРег(СтранаДоИзменения)); + ЧастиАдреса[Позиция] = Лев(ЧастиАдреса[Позиция], ПозицияНачало - 1) + + Строка(Страна) + Сред(ЧастиАдреса[Позиция], ПозицияНачало + СтрДлина(СтранаДоИзменения)); + КонецЕсли; + КонецЦикла; + ПредставлениеАдреса = СтрСоединить(ЧастиАдреса, ","); + + НаселенныйПунктДетально.admLevels = Новый Массив; + НаселенныйПунктДетально.country = СокрЛП(Страна); + НаселенныйПунктДетально.value = ПредставлениеАдреса; + + Иначе + ОтобразитьПоляПоТипуАдреса(); + КонецЕсли; КонецПроцедуры @@ -118,43 +131,6 @@ КонецПроцедуры -&НаКлиенте -Процедура СтранаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) - - Если Ожидание = 0 Тогда - // Формирование списка быстрого выбора. - Если ПустаяСтрока(Текст) Тогда - ДанныеВыбора = Новый СписокЗначений; - КонецЕсли; - Возврат; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СтранаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) - - Если ПустаяСтрока(Текст) Тогда - СтандартнаяОбработка = Ложь; - КонецЕсли; - -#Если ВебКлиент Тогда - // Обход особенности платформы. - СтандартнаяОбработка = Ложь; - ДанныеВыбора = Новый СписокЗначений; - ДанныеВыбора.Добавить(Страна); -#КонецЕсли - -КонецПроцедуры - -&НаКлиенте -Процедура СтранаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); - -КонецПроцедуры - - &НаКлиенте Процедура КомментарийПриИзменении(Элемент) @@ -166,15 +142,10 @@ &НаКлиенте Процедура ПредставлениеИностранногоАдресаПриИзменении(Элемент) - НаселенныйПунктДетально.street = ПредставлениеАдреса; - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); - НаселенныйПунктДетально.Comment = Комментарий; - НаселенныйПунктДетально.Country = Строка(Страна); + НаселенныйПунктДетально.value = ПредставлениеАдреса; КонецПроцедуры -// Дом, помещения - &НаКлиенте Процедура АдресНаДатуАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если СтрСравнить(Текст, НачалоУчета()) = 0 Или ПустаяСтрока(Текст) Тогда @@ -225,6 +196,39 @@ КонецФункции + +&НаКлиенте +Процедура Адрес1ПриИзменении(Элемент) + НаселенныйПунктДетально.street = Улица; + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура Адрес2ПриИзменении(Элемент) + НаселенныйПунктДетально.houseNumber = ДополнительнаяИнформация; + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура ГородПриИзменении(Элемент) + + НаселенныйПунктДетально.city = Город; + ОбновитьПредставлениеАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура РегионПриИзменении(Элемент) + НаселенныйПунктДетально.area = Регион; + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура ИндексПриИзменении(Элемент) + НаселенныйПунктДетально.ZIPcode = ПочтовыйИндекс; + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -244,8 +248,13 @@ Процедура ОчиститьАдрес(Команда) ОчиститьАдресКлиент(); + ОбновитьПредставлениеАдреса(); - +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьАдресВБуферОбмена(Команда) + УправлениеКонтактнойИнформациейКлиент.ПоместитьТекстВБуфераОбмена(ПредставлениеАдреса); КонецПроцедуры &НаКлиенте @@ -273,10 +282,167 @@ Элементы.ОсновныеСтраницы.ТекущаяСтраница = Элементы.СтраницаКомментарий; КонецПроцедуры +&НаКлиенте +Процедура АдресВСвободнойФорме(Команда) + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.addressType) Тогда + + НаборПолей = СтрРазделить(НаселенныйПунктДетально.value, ","); + Для НомерПоля = 0 По НаборПолей.ВГраница() Цикл + НаборПолей[НомерПоля] = СокрЛП(НаборПолей[НомерПоля]); + КонецЦикла; + + СтранаИзАдреса = ОпределитьСтрануМира(НаборПолей); + + Если ЗначениеЗаполнено(СтранаИзАдреса.Наименование) Тогда + НаселенныйПунктДетально.country = СтранаИзАдреса.Наименование; + НаселенныйПунктДетально.countryCode = СтранаИзАдреса.КодСтраны; + Страна = СтранаИзАдреса.Ссылка; + КонецЕсли; + + ПорядковыйСписокПолей = Новый Массив; + + Если ТипЗнч(НаселенныйПунктДетально.admLevels) = Тип("Массив") + И НаселенныйПунктДетально.admLevels.Количество() > 0 Тогда + ПорядокПолей = НаселенныйПунктДетально.admLevels; + Иначе + ПорядокПолей = ПорядокПолейВАдресе(ВидКонтактнойИнформации.ВключатьСтрануВПредставление); + КонецЕсли; + + Если ЗначениеЗаполнено(СтранаИзАдреса.Наименование) Тогда + Для ПорядковыйНомерПоля = 0 По НаборПолей.ВГраница() Цикл + Если СтрСравнить(НаборПолей[ПорядковыйНомерПоля], СтранаИзАдреса.Наименование) = 0 Тогда + НаборПолей.Удалить(ПорядковыйНомерПоля); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ОчиститьПоляНаселенногоПункта(); + + Для ПорядковыйНомерПоля = 0 По ПорядокПолей.ВГраница() Цикл + + Если НаборПолей.Количество() = 0 Тогда + Прервать; + ИначеЕсли ПорядковыйНомерПоля = ПорядокПолей.ВГраница() Тогда + НаселенныйПунктДетально[ПорядокПолей[ПорядковыйНомерПоля]] = СокрЛП(СтрСоединить(НаборПолей, ", ")); + ПорядковыйСписокПолей.Добавить(ПорядокПолей[ПорядковыйНомерПоля]); + Иначе + + Если СтрСравнить(ПорядокПолей[ПорядковыйНомерПоля], "country") <> 0 Тогда + НаселенныйПунктДетально[ПорядокПолей[ПорядковыйНомерПоля]] = НаборПолей[0]; + ПорядковыйСписокПолей.Добавить(ПорядокПолей[ПорядковыйНомерПоля]); + НаборПолей.Удалить(0); + ИначеЕсли ВидКонтактнойИнформации.ВключатьСтрануВПредставление Тогда + ПорядковыйСписокПолей.Добавить(ПорядокПолей[ПорядковыйНомерПоля]); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + НаселенныйПунктДетально.admLevels = ПорядковыйСписокПолей; + + НаселенныйПунктДетально.addressType = УправлениеКонтактнойИнформациейКлиентСервер.ИностранныйАдрес(); + ОтобразитьПоляАдреса(Ложь); + ОбновитьПредставлениеАдреса(); + + Иначе + + Элементы.АдресВСвободнойФорме.Пометка = Истина; + НаселенныйПунктДетально.addressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + + ОчиститьПоляНаселенногоПункта(); + Если ПустаяСтрока(НаселенныйПунктДетально.value) Тогда + НаселенныйПунктДетально.admLevels = Новый Массив; + КонецЕсли; + + ОтобразитьПоляАдреса(Истина); + + КонецЕсли; + + Улица = НаселенныйПунктДетально.street; + ДополнительнаяИнформация = НаселенныйПунктДетально.houseNumber; + Город = НаселенныйПунктДетально.city; + Регион = НаселенныйПунктДетально.area; + ПочтовыйИндекс = НаселенныйПунктДетально.ZIPCode; + +КонецПроцедуры + + +&НаСервереБезКонтекста +Функция ОпределитьСтрануМира(НаборПолей) + + Возврат УправлениеКонтактнойИнформациейСлужебный.ОпределитьСтрануМира(НаборПолей); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Функция ПорядокПолейВАдресе(ВключатьСтрануВПредставление) + + ПорядокУровнейВАдресе = Новый Массив; + + УправлениеКонтактнойИнформациейКлиентЛокализация.ПриОпределенииПорядкаПолейАдреса(ПорядокУровнейВАдресе, Страна, ВключатьСтрануВПредставление); + + Если ПорядокУровнейВАдресе.Количество() = 0 Тогда + ПорядокПолейПоУмолчанию(ПорядокУровнейВАдресе, ВключатьСтрануВПредставление); + КонецЕсли; + + Возврат ПорядокУровнейВАдресе; + +КонецФункции + +&НаКлиенте +Процедура ОчиститьПоляНаселенногоПункта() + НаселенныйПунктДетально.street = ""; + НаселенныйПунктДетально.houseNumber = ""; + НаселенныйПунктДетально.city = ""; + НаселенныйПунктДетально.area = ""; + НаселенныйПунктДетально.ZIPCode = ""; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПредставлениеАдреса() + + ЗаполнитьПредставлениеАдреса(НаселенныйПунктДетально, ВидКонтактнойИнформации.ВключатьСтрануВПредставление); + ПредставлениеАдреса = НаселенныйПунктДетально.value; + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядокПолейПоУмолчанию(ПорядокУровнейВАдресе, ВключатьСтрануВПредставление) + + Если ВключатьСтрануВПредставление Тогда + ПорядокУровнейВАдресе.Добавить("country"); + КонецЕсли; + + ПорядокУровнейВАдресе.Добавить("zipCode"); + ПорядокУровнейВАдресе.Добавить("area"); + ПорядокУровнейВАдресе.Добавить("city"); + ПорядокУровнейВАдресе.Добавить("street"); + ПорядокУровнейВАдресе.Добавить("houseNumber"); +КонецПроцедуры + +&НаКлиенте +Функция ПредставлениеАдресаВСвободнойФорме(Знач Адрес, Знач ВключатьСтрануВПредставление) + + Если ВключатьСтрануВПредставление И Адрес.Свойство("country") И Не ПустаяСтрока(Адрес.country) Тогда + ЧастиАдреса = СтрРазделить(Адрес.value, ","); + Если ЗначениеЗаполнено(Адрес.value) И СтрСравнить(ЧастиАдреса[0], Адрес.country) = 0 Тогда + ЧастиАдреса.Удалить(0); + Адрес.Value = СтрСоединить(ЧастиАдреса, ","); + КонецЕсли; + + КонецЕсли; + + Возврат Адрес.Value; + +КонецФункции + &НаКлиенте Процедура УстановитьПиктограммуКомментария() Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); @@ -385,7 +551,6 @@ Если ДобавитьСтроку Тогда НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, Результат); - НоваяКонтактнаяИнформация.ЗначенияПолей = Результат.КонтактнаяИнформация; НоваяКонтактнаяИнформация.Значение = Результат.Значение; НоваяКонтактнаяИнформация.ДействуетС = АдресНаДату; НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина; @@ -401,7 +566,6 @@ Иначе НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина; Результат.Представление = СтрокаДействующегоАдреса.Представление; - Результат.КонтактнаяИнформация = СтрокаДействующегоАдреса.ЗначенияПолей; Результат.Значение = СтрокаДействующегоАдреса.Значение; КонецЕсли; ИначеЕсли СтрокаДействующегоАдреса <> Неопределено @@ -414,7 +578,6 @@ Если СтрСравнить(Результат.Представление, СтрокаДействующегоАдреса.Представление) <> 0 ИЛИ СтрСравнить(Результат.Комментарий, СтрокаДействующегоАдреса.Комментарий) <> 0 Тогда ЗаполнитьЗначенияСвойств(СтрокаДействующегоАдреса, Результат); - СтрокаДействующегоАдреса.ЗначенияПолей = Результат.КонтактнаяИнформация; СтрокаДействующегоАдреса.Значение = Результат.Значение; СтрокаДействующегоАдреса.ИмяРеквизита = ИмяРеквизита; СтрокаДействующегоАдреса.ЭтоИсторическаяКонтактнаяИнформация = Ложь; @@ -504,64 +667,68 @@ // * ОсновнаяСтрана - СправочникСсылка.СтраныМира // * Страна - СправочникСсылка.СтраныМира // ВозвращатьСписокЗначений - Булево +// // Возвращаемое значение: -// Структура: -// * ДанныеВыбора - Структура: -// ** Представление - Строка -// ** КонтактнаяИнформация - Строка -// ** Значение - Строка -// ** Комментарий - Строка -// ** ВведеноВСвободнойФорме - Булево -// ** ВВидеГиперссылки - Булево -// ** Вид - СправочникСсылка.ВидыКонтактнойИнформации -// ** Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации -// * ОшибкиЗаполнения - Массив из Строка +// см. НовыйРезультатВыбора // &НаСервереБезКонтекста Функция РезультатВыбора(Контекст, ВозвращатьСписокЗначений = Ложь) НаселенныйПунктДетально = Контекст.НаселенныйПунктДетально; - Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения"); + Представление = СокрЛП(СтрЗаменить(НаселенныйПунктДетально.Value, Символы.ПС, " ")); - Если Контекст.ВидКонтактнойИнформации.ВключатьСтрануВПредставление И ЗначениеЗаполнено(НаселенныйПунктДетально.country) Тогда - НаселенныйПунктДетально.Value = НаселенныйПунктДетально.country + ", " + НаселенныйПунктДетально.street; - Иначе - НаселенныйПунктДетально.Value = НаселенныйПунктДетально.street; - КонецЕсли; - - КонтактнаяИнформацияВXML = ""; - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - КонтактнаяИнформацияВXML = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзJSONВXML(НаселенныйПунктДетально, Контекст.ВидКонтактнойИнформации.Тип) - КонецЕсли; - - Результат.ДанныеВыбора = Новый Структура; - Результат.ДанныеВыбора.Вставить("Представление", НаселенныйПунктДетально.Value); - Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", КонтактнаяИнформацияВXML); - Результат.ДанныеВыбора.Вставить("Значение", УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально)); - Результат.ДанныеВыбора.Вставить("Комментарий", НаселенныйПунктДетально.Comment); - Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", - УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(НаселенныйПунктДетально)); - - // ошибки заполнения - Результат.ОшибкиЗаполнения = Новый Массив; - - Если Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес - И Контекст.ВидКонтактнойИнформации.ВидРедактирования = "Диалог" Тогда - ВВидеГиперссылки = Истина; - Иначе - ВВидеГиперссылки = Ложь; - КонецЕсли; - Результат.ДанныеВыбора.Вставить("ВВидеГиперссылки", ВВидеГиперссылки); - - // Подавляем перенос строк в возвращаемом отдельно представлении. - Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " ")); - Результат.ДанныеВыбора.Вставить("Вид", ОписаниеВидаКонтактнойИнформации(Контекст).Ссылка); - Результат.ДанныеВыбора.Вставить("Тип", Контекст.ВидКонтактнойИнформации.Тип); + Результат = НовыйРезультатВыбора(); + + Результат.ДанныеВыбора.Представление = Представление; + Результат.ДанныеВыбора.Комментарий = НаселенныйПунктДетально.Comment; + Результат.ДанныеВыбора.Вид = ОписаниеВидаКонтактнойИнформации(Контекст).Ссылка; + Результат.ДанныеВыбора.Тип = Контекст.ВидКонтактнойИнформации.Тип; + Результат.ДанныеВыбора.Значение = + УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально); + Результат.ДанныеВыбора.ВведеноВСвободнойФорме = + УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(НаселенныйПунктДетально); + Результат.ДанныеВыбора.ВВидеГиперссылки = + (Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес) + И (СтрСравнить(Контекст.ВидКонтактнойИнформации.ВидРедактирования, "Диалог") = 0); Возврат Результат; + КонецФункции +// Возвращаемое значение: +// Структура: +// * ОшибкиЗаполнения - Массив +// * ДанныеВыбора - Структура: +// ** Представление - Строка +// ** Комментарий - Строка +// ** Значение - Строка +// ** ВведеноВСвободнойФорме - Булево +// ** ВВидеГиперссылки - Булево +// ** Вид - СправочникСсылка.ВидыКонтактнойИнформации +// ** Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации +// +&НаСервереБезКонтекста +Функция НовыйРезультатВыбора() + + ДанныеВыбора = Новый Структура(); + ДанныеВыбора.Вставить("Представление", ""); + ДанныеВыбора.Вставить("Комментарий", ""); + ДанныеВыбора.Вставить("Значение", ""); + ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", Ложь); + ДанныеВыбора.Вставить("ВВидеГиперссылки", Ложь); + ДанныеВыбора.Вставить("Вид", Справочники.ВидыКонтактнойИнформации.ПустаяСсылка()); + ДанныеВыбора.Вставить("Тип", Перечисления.ТипыКонтактнойИнформации.ПустаяСсылка()); + ДанныеВыбора.Вставить("КонтактнаяИнформация", ""); // Устарело. Для обратной совместимости. + + Результат = Новый Структура; + Результат.Вставить("ОшибкиЗаполнения", Новый Массив); + Результат.Вставить("ДанныеВыбора", ДанныеВыбора); + + Возврат Результат; + +КонецФункции + + &НаСервереБезКонтекста Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов) @@ -570,7 +737,7 @@ СписокКонтактнойИнформации = Новый Массив; Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл - КонтактнаяИнформация = Новый Структура("Представление, Значение, ЗначенияПолей, ДействуетС, Комментарий"); + КонтактнаяИнформация = Новый Структура("Представление, Значение, ДействуетС, Комментарий"); ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); КонецЦикла; @@ -579,34 +746,22 @@ КонецФункции &НаСервере -Функция РезультатВыбораТолькоКомментария(КонтактнаяИнфо, Представление, Комментарий) +Функция РезультатВыбораТолькоКомментария(ЗначениеКонтактнойИнформации, Представление, Комментарий) - Если ПустаяСтрока(КонтактнаяИнфо) Тогда - - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - НоваяКонтактная = МодульУправлениеКонтактнойИнформациейЛокализация.АдресXMLВXDTO(""); - НоваяКонтактная.Комментарий = Комментарий; - НоваяКонтактная = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияXDTOВXML(НоваяКонтактная); - Иначе - НоваяКонтактная = ""; - КонецЕсли; - АдресВведенВСвободнойФорме = Ложь; - - ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнфо) Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеКонтактнойИнформации) Тогда // Копия - НоваяКонтактная = КонтактнаяИнфо; + НоваяКонтактнаяИнформация = ЗначениеКонтактнойИнформации; // Модифицируем значение "НоваяКонтактная". - УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(НоваяКонтактная, Комментарий); - АдресВведенВСвободнойФорме = УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(КонтактнаяИнфо); + УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(НоваяКонтактнаяИнформация, Комментарий); + АдресВведенВСвободнойФорме = УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(ЗначениеКонтактнойИнформации); Иначе - НоваяКонтактная = КонтактнаяИнфо; + НоваяКонтактнаяИнформация = ЗначениеКонтактнойИнформации; АдресВведенВСвободнойФорме = Ложь; КонецЕсли; Результат = Новый Структура("ДанныеВыбора, ОшибкиЗаполнения", Новый Структура, Новый СписокЗначений); - Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", НоваяКонтактная); + Результат.ДанныеВыбора.Вставить("КонтактнаяИнформация", НоваяКонтактнаяИнформация); Результат.ДанныеВыбора.Вставить("Представление", Представление); Результат.ДанныеВыбора.Вставить("Комментарий", Комментарий); Результат.ДанныеВыбора.Вставить("ВведеноВСвободнойФорме", АдресВведенВСвободнойФорме); @@ -617,47 +772,64 @@ Процедура ОтобразитьПоляПоТипуАдреса() НаселенныйПунктДетально.Country = СокрЛП(Страна); + ОбновитьПредставлениеАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтобразитьПоляАдреса(АдресВСвободнойФорме) + + Элементы.ГруппаПредставлениеАдреса.Видимость = Не АдресВСвободнойФорме; + Элементы.АдресПоПолям.Видимость = Не АдресВСвободнойФорме; + Элементы.ВСвободнойФорме.Видимость = АдресВСвободнойФорме; + Элементы.АдресВСвободнойФорме.Пометка = АдресВСвободнойФорме; КонецПроцедуры &НаСервере -Процедура УстановитьЗначениеРеквизитовПоКонтактнойИнформации(СведенияОбАдресе, ДанныеАдреса) +Процедура УстановитьЗначениеРеквизитовПоКонтактнойИнформации(ДанныеАдреса) // Общие реквизиты - СведенияОбАдресе.ПредставлениеАдреса = ДанныеАдреса.Value; - Если ДанныеАдреса.Свойство("Comment") Тогда - СведенияОбАдресе.Комментарий = ДанныеАдреса.Comment; - КонецЕсли; - - // Копия комментария для анализа измененности. - СведенияОбАдресе.КопияКомментария = СведенияОбАдресе.Комментарий; + ПредставлениеАдреса = ДанныеАдреса.value; + Комментарий = ДанныеАдреса.comment; + КопияКомментария = Комментарий; // Копия комментария для анализа измененности. СсылкаНаОсновнуюСтрану = ОсновнаяСтрана(); ДанныеСтраны = Неопределено; - Если ДанныеАдреса.Свойство("Country") И ЗначениеЗаполнено(ДанныеАдреса.Country) Тогда + Если ЗначениеЗаполнено(ДанныеАдреса.country) Тогда ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, СокрЛП(ДанныеАдреса.Country)); КонецЕсли; Если ДанныеСтраны = Неопределено Тогда // Не нашли ни в справочнике, ни в классификаторе. - СведенияОбАдресе.Страна = СсылкаНаОсновнуюСтрану; - КодСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОсновнуюСтрану, "Код"); - Если КодСтраны <> Неопределено Тогда - СведенияОбАдресе.КодСтраны = КодСтраны; + Страна = СсылкаНаОсновнуюСтрану; + ДанныеАдреса.country = Строка(Страна); + КодОсновнойСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаОсновнуюСтрану, "Код"); + Если КодОсновнойСтраны <> Неопределено Тогда + КодСтраны = КодОсновнойСтраны; + ДанныеАдреса.countryCode = КодСтраны; КонецЕсли; + Иначе - СведенияОбАдресе.Страна = ДанныеСтраны.Ссылка; - СведенияОбАдресе.КодСтраны = ДанныеСтраны.Код; + Страна = ДанныеСтраны.Ссылка; + КодСтраны = ДанныеСтраны.Код; + КонецЕсли; + Улица = ДанныеАдреса.street; + ДополнительнаяИнформация = ДанныеАдреса.houseNumber; + Город = ДанныеАдреса.city; + Регион = ДанныеАдреса.area; + ПочтовыйИндекс = ДанныеАдреса.ZIPCode; + КонецПроцедуры &НаСервере Процедура ЗаполнитьПредопределенныеВариантыАдреса() Если ЗначениеЗаполнено(Параметры.Индекс) Тогда - Индекс = Параметры.Индекс; - НаселенныйПунктДетально.ZipCode = Индекс; + ПочтовыйИндекс = Параметры.Индекс; + НаселенныйПунктДетально.ZipCode = ПочтовыйИндекс; КонецЕсли; Если ЗначениеЗаполнено(Параметры.Страна) И ПустаяСтрока(НаселенныйПунктДетально.Country) Тогда @@ -730,7 +902,7 @@ Если НайденныеСтроки.Количество() > 1 Тогда Элементы.ИсторияИзмененийГиперссылка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'История изменений (%1)'"), НайденныеСтроки.Количество()); Элементы.ИсторияИзмененийГиперссылка.Видимость = Истина; - ИначеЕсли НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].ЗначенияПолей) Тогда + ИначеЕсли НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].Значение) Тогда Элементы.ИсторияИзмененийГиперссылка.Видимость = Ложь; Иначе Элементы.ИсторияИзмененийГиперссылка.Заголовок = НСтр("ru = 'История изменений'"); @@ -788,22 +960,23 @@ Если ЭлементАдреса.Ключ = "Type" Тогда Продолжить; - ИначеЕсли ЭлементАдреса.Ключ = "Buildings" ИЛИ ЭлементАдреса.Ключ = "Apartments" Тогда - НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый Массив; Иначе НаселенныйПунктДетально[ЭлементАдреса.Ключ] = ""; КонецЕсли; КонецЦикла; - НаселенныйПунктДетально.AddressType = УправлениеКонтактнойИнформациейКлиентСервер.АдресВСвободнойФорме(); + Улица = ""; + ДополнительнаяИнформация = ""; + Город = ""; + Регион = ""; + ПочтовыйИндекс = ""; КонецПроцедуры &НаСервере Процедура УстановитьКлючИспользованияФормы() КлючСохраненияПоложенияОкна = Строка(Страна); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -848,19 +1021,6 @@ КонецФункции -&НаСервере -Функция ИзвлечьСтарыйФорматАдреса(Знач ЗначенияПолей, Знач ТипКонтактнойИнформации) - - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - Возврат МодульУправлениеКонтактнойИнформациейЛокализация.ИзвлечьСтарыйФорматАдреса(ЗначенияПолей, ТипКонтактнойИнформации, - Параметры, ОсновнаяСтрана); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - &НаСервереБезКонтекста Функция ОсновнаяСтрана() @@ -881,16 +1041,6 @@ НаселенныйПунктДетально = УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации(ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес")); ЗаполнитьЗначенияСвойств(НаселенныйПунктДетально, Данные); - Для каждого ЭлементАдреса Из НаселенныйПунктДетально Цикл - - Если СтрЗаканчиваетсяНа(ЭлементАдреса.Ключ, "ID") - И ТипЗнч(ЭлементАдреса.Значение) = Тип("Строка") - И СтрДлина(ЭлементАдреса.Значение) = 36 Тогда - НаселенныйПунктДетально[ЭлементАдреса.Ключ] = Новый УникальныйИдентификатор(ЭлементАдреса.Значение); - КонецЕсли; - - КонецЦикла; - Возврат НаселенныйПунктДетально; КонецФункции @@ -903,6 +1053,42 @@ Возврат Форма.ВидКонтактнойИнформации; КонецФункции +// Заполнить представление адреса. +// +// Параметры: +// Адрес - см. УправлениеКонтактнойИнформациейКлиентСервер.ОписаниеНовойКонтактнойИнформации +// ВключатьСтрануВПредставление - Булево +// ТипАдреса - Строка, Неопределено +// +&НаКлиенте +Процедура ЗаполнитьПредставлениеАдреса(Адрес, ВключатьСтрануВПредставление, ТипАдреса = Неопределено) + + Если ТипАдреса = Неопределено Тогда + ТипАдреса = Адрес.AddressType; + КонецЕсли; + + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(ТипАдреса)Тогда + Адрес.value = ПредставлениеАдресаВСвободнойФорме(Адрес, ВключатьСтрануВПредставление); + Адрес.admLevels = Новый Массив; + КонецЕсли; + + СписокЗаполненныхУровней = Новый Массив; + СписокЗначенийАдреса = Новый Массив; + + ПорядокУровнейВАдресе = ПорядокПолейВАдресе(ВключатьСтрануВПредставление); + + Для Каждого ИмяУровня Из ПорядокУровнейВАдресе Цикл + Если ЗначениеЗаполнено(Адрес[ИмяУровня]) Тогда + СписокЗначенийАдреса.Добавить(Адрес[ИмяУровня]); + СписокЗаполненныхУровней.Добавить(ИмяУровня); + КонецЕсли; + КонецЦикла; + + Адрес.value = СтрСоединить(СписокЗначенийАдреса, ", "); + Адрес.admLevels = СписокЗаполненныхУровней; + +КонецПроцедуры + &НаКлиентеНаСервереБезКонтекста Функция НачалоУчета() diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html deleted file mode 100644 index 8aa80ef50..000000000 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдресаВСвободнойФорме/Help/ru.html +++ /dev/null @@ -1,90 +0,0 @@ - -

            Предназначена для ввода адреса. При заполнении возможно использование шаблона и адресного классификатора.

            -

            Открывается по кнопке  Выбрать из поля Адрес в элементах списков.

            -

            Автоподбор российского адреса

            -
            • Предусмотрен автоподбор всего адреса при вводе (только при использовании веб-сервиса. Наберите в поле Город, населенный пункт поисковое слово или его часть. -
            • -
            • Обратите внимание на цветовое различие адресов: -
              • по муниципальному делению - стандартный цвет текста; -
              • -
              • по административно-территориальному делению - серый цвет.

            Ввод адреса

            -
            • В поле Страна выберите страну адреса. Редактирование адресов за пределами Евразийского экономического союза (ЕАЭС) производится в общем поле, без учета частей адреса. Страна "Россия" выбрана приложением по умолчанию, при этом поле может быть недоступным в зависимости от настроек. Для того чтобы изменить страну, нажмите  Выбрать. Выбор осуществляется из списка Классификатор стран мира (ОКСМ). -
            • -
            • Поле Индекс предназначено для ввода почтового индекса, соответствующего данному адресу. Если адрес найден в адресном классификаторе, то индекс может быть проставлен автоматически. Также по индексу, если адресный классификатор по соответствующему региону загружен, можно заполнить адрес. -
            • -
            • Поле Город, населенный пункт предназначено для ввода региона, города и т. п. При необходимости можно ввести части адреса детально, нажав  Выбрать. В открывшемся шаблоне введите данные населенного пункта. -
            • -
            • Поле Улица предназначено для выбора (нажмите кнопку  Выбрать, в списке улиц найдите нужную) или ввода улицы адреса. -
            • -
            • Поля Дом, Корпус, Квартира позволяют ввести соответствующие части адреса. Можно изменить эти варианты, выбрав дополнительные значения из выпадающего списка. -
            • -
            • Также можно  Добавить дополнительные поля для ввода других предопределенных частей адреса, таких как Строение, Литера, Сооружение, Участок, Офис, Бокс, Помещение, Комната, А/я. -
            • -
            • для ввода номера дома нажмите кнопку , в окне Выбор дома выводится список всех возможных домов и строений для введенного адреса. Дополнительные части адреса, например, корпус, также выбираются из списка. -
            • -
            • Поле Представление адреса при заполнении адреса по шаблону недоступно, заполняется приложением автоматически по мере заполнения полей адреса.

            Примеры заполнения адреса

            -Примеры даются по административно-территориальному делению.
            • Для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345" необходимо: -
              • В поле Город, населенный пункт выбрать "Санкт-Петербург г". -
              • -
              • В поле Улица выбрать "пр-кт Пискаревский". -
              • -
              • В поле Дом написать "2". -
              • -
              • В поле Корпус написать "2". -
              • -
              • Для ввода литеры необходимо  Добавить поле, выбрать из выпадающего списка значение Литера и проставить в поле значение "Щ". -
              • -
              • Вместо поля Квартира выбрать из выпадающего списка поле Офис и ввести значение "12345".
            • -
            • Для ввода адреса, содержащего другие значения полей, например "Москва, улица Адмирала Лазарева, домовладение 89, корпус 16, строение 1" необходимо: -
              • В поле Город, населенный пункт выбрать "Москва г". -
              • -
              • В поле Улица выбрать " ул. Адмирала Лазарева". -
              • -
              • Вместо поля Дом выбрать из выпадающего списка поле Домовладение, введите значение "89". -
              • -
              • В поле Корпус написать "16". -
              • -
              • Нажмите  Добавить, выберите из выпадающего списка поле Строение, проставьте в поле "1".

            Проверка заполнения адреса

            -

            Нажмите Проверить заполнение, для того чтобы проанализировать корректность заполнения адреса. Приложение производит проверку:

            -
            • проверка актуальности версии адресного классификатора с предложением обновить данные; -
            • -
            • на заполненность адреса; -
            • -
            • на наличие недопустимых символов; -
            • -
            • длины наименований реквизитов адреса; -
            • -
            • на соответствие классификатору. В клиент-серверной базе проверка адреса на соответствие классификатору производится на сервере. После проверки правильности заполнения адреса приложение выдает сообщение "Адрес введен корректно" или список ошибок. Проверка правильности невозможна для иностранных адресов, они не проверяются. Также команда становится недоступной, если адрес введен в свободной форме. -
            • -
            • Если адрес некорректный, то в приложении производится перебор вариантов нумерации (не дом, а владение; наличие корпусов, строений; буквы в номере дома). -
            • -
            • Производится поиск в исторических данных адреса, например, улица была переименована.

            История изменений

            -
            • -
              В некоторых списках можно просмотреть историю изменения адреса с помощью команды Еще - История изменений.

            Адрес на Яндекс.Картах, Адрес на Google Maps

            -
            • -
              С помощью этих команд любой адрес, введенный в приложение, можно посмотреть на картах.

            Выбор вида территориального деления

            -
            • -
              Перед заполнением адреса с помощью флажка можно выбрать:
              -
              • -
                Муниципальное деление;
                -
              • -
              • -
                Административно-территориальное деление.

            Ввод адреса в свободной форме

            -
            • Включите флажок Адрес в свободной форме меню Еще, для того чтобы при вводе адреса по шаблону ввести заведомо некорректный адрес (например, с товаром на накладной неправильный адрес поставщика, его надо временно зафиксировать для печати, но в дальнейшем его использовать нельзя). Такой адрес используется для хранения, поэтому можно рекомендовать использовать его только для единичных случаев. -
            • -
            • Напишите адрес. Проверка заполнения адреса в данном случае отключена. -
            • -
            • Для подтверждения адреса нажмите ОК. Приложением будет зафиксировано, что адрес заполнен в свободной форме и на просмотр адрес будет выводиться в таком виде.

            Заполнение адреса по почтовому индексу

            -
            • Если известен индекс адреса и адресный классификатор по соответствующему региону загружен, то с помощью команды Еще - Заполнить по почтовому индексу имеется возможность по индексу найти адрес. Для выбора выводятся только те адреса, которые соответствуют введенному индексу. Выберите нужную часть адреса, дозаполните оставшиеся поля. -
            • -
            • Если указан почтовый индекс, сведения о котором отсутствует в приложении, приложение выводит сообщение.

            Очистка адреса

            -
            • С помощью команды меню Еще - Очистить адрес можно стереть неправильно введенный адрес.

            Загрузка классификатора

            -
            • Выполните команду Еще - Загрузить классификатор. После проведения обновления адресного классификатора по выбранному региону можно продолжить редактирование адреса.

            См. также:

            - \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html index 76fb218d0..67acf2a25 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html @@ -1,22 +1,22 @@ -

            Предназначена для ввода номера телефона (факса) с использованием шаблона.

            -

            Открывается из табличной части документов или элементов списков - носителей контактной информации по кнопке  Выбрать.

            +

            Предназначена для ввода номера телефона (факса) с использованием шаблона.

            +

            Открывается из табличной части документов или элементов списков - носителей контактной информации по кнопке Выбрать.

            В шаблоне ввода номера телефона для ускорения ввода новых телефонных номеров в поля с кодом страны и города автоматически подставляются значения, введенные в предыдущий раз. Дополнительно для кода города запоминаются 10 ранее введенных кодов, которые можно быстро выбрать из выпадающего списка.

            Ввод по шаблону

            Для того чтобы ввести телефон (факс), необходимо заполнить поля:

            -
            • Код страны - приложение автоматически добавляет "+" к коду страны; +
              • Код страны - приложение автоматически добавляет "+" к коду страны;
              • Код города - автоматически заключается в скобки;
                • В шаблоне ввода номера телефона для ускорения ввода новых телефонных номеров в поля с кодом страны и города автоматически подставляются значения, введенные в предыдущий раз. Дополнительно для кода города запоминаются 10 ранее введенных кодов, которые можно быстро выбрать из выпадающего списка;
              • Номер телефона - пишется в произвольной форме;
              • -
              • Добавочный номер - перед цифрами добавочного номера приложение автоматически проставляет доб; +
              • Добавочный номер - перед цифрами добавочного номера приложение автоматически проставляет доб;
              • Комментарий - введите дополнительную информацию о телефоне.

              Ввод по маске

              Также можно ввести телефон (факс) в поле в соответствии с маской (если настроена маска для ввода телефона), необходимо заполнить поля:

              -
              • Номер телефона - пишется в соответствии с маской; 
              • -
              • Комментарий - введите дополнительную информацию о телефоне.

              Очистка номера телефона (факса)

              -
              • Для того чтобы удалить ошибочно введенный номер телефона (факса) и начать заполнение заново, воспользуйтесь командой Еще - Очистить номер телефона.

              См. также:

              +
              • Номер телефона - пишется в соответствии с маской;
              • +
              • Комментарий - введите дополнительную информацию о телефоне.

              Очистка номера телефона (факса)

              +
              • Для того чтобы удалить ошибочно введенный номер телефона (факса) и начать заполнение заново, воспользуйтесь командой Еще - Очистить номер телефона.

              См. также:

              • Виды контактной информации.
              • Ввод контактной информации. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index 012755d86..ee4df7c6f 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -48,11 +48,11 @@ Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); ЭтоНовый = Ложь; - ЗначенияПолей = ОпределитьЗначениеАдреса(Параметры); + ЗначенияПолей = ОпределитьЗначениеКонтактнойИнформации(Параметры); Если НЕ ВводитьНомерПоМаске И Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - - ПодсказкиПриВводеТелефона = Обработки["РасширенныйВводКонтактнойИнформации"].ПодсказкиПриВводеТелефона(); + МодульРасширенныйВводКонтактнойИнформации = ОбщегоНазначения.ОбщийМодуль("Обработки.РасширенныйВводКонтактнойИнформации"); + ПодсказкиПриВводеТелефона = МодульРасширенныйВводКонтактнойИнформации.ПодсказкиПриВводеТелефона(); Элементы.КодСтраны.ПодсказкаВвода = ПодсказкиПриВводеТелефона.КодСтраны; Элементы.КодГорода.ПодсказкаВвода = ПодсказкиПриВводеТелефона.КодГорода; Элементы.НомерТелефона.ПодсказкаВвода = ПодсказкиПриВводеТелефона.НомерТелефона; @@ -68,38 +68,44 @@ Данные = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Телефон); Иначе - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); - - Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда - РезультатыЧтения = Новый Структура; - КонтактнаяИнформация = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); - Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда - // Распознали с ошибками, сообщим при открытии. - ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; - КонтактнаяИнформация.Представление = Параметры.Представление; - КонецЕсли; - - Иначе - Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - КонтактнаяИнформация = МодульУправлениеКонтактнойИнформациейЛокализация.ДесериализацияТелефона(ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); - Иначе - КонтактнаяИнформация = МодульУправлениеКонтактнойИнформациейЛокализация.ДесериализацияФакса(ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); - КонецЕсли; - КонецЕсли; + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + РезультатыЧтения = Новый Структура; + КонтактнаяИнформация = Неопределено; + + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнойИнформацииИзXML(ЗначенияПолей, КонтактнаяИнформация, ТипКонтактнойИнформации, РезультатыЧтения); + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда + // Распознали с ошибками, сообщим при открытии. + ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; + КонтактнаяИнформация.Представление = Параметры.Представление; + КонецЕсли; + + Иначе + КонтактнаяИнформация = Неопределено; + Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертацииТелефонаВОбъектXDTO(ЗначенияПолей, + КонтактнаяИнформация, Параметры.Представление, ТипКонтактнойИнформации); + + Иначе + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертацииФаксаВОбъектXDTO(ЗначенияПолей, + КонтактнаяИнформация, Параметры.Представление, ТипКонтактнойИнформации); + + КонецЕсли; + КонецЕсли; + + Если КонтактнаяИнформация <> Неопределено Тогда Данные = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, ТипКонтактнойИнформации); Иначе Данные = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации(ТипКонтактнойИнформации); КонецЕсли; - + КонецЕсли; ЗначениеРеквизитовПоКонтактнойИнформации(Данные); Элементы.НомерТелефонаПоМаске.Видимость = ВводитьНомерПоМаске; Элементы.НомерТелефонаПоМаске.Маска = СтруктураВидКонтактнойИнформации.МаскаНомераТелефона; - Элементы.ГруппаПоляТелефона.Видимость = НЕ ВводитьНомерПоМаске; + Элементы.ГруппаПоляТелефона.Видимость = Не ВводитьНомерПоМаске; Элементы.Добавочный.Видимость = СтруктураВидКонтактнойИнформации.ТелефонСДобавочнымНомером; Элементы.ОчиститьТелефон.Доступность = Не Параметры.ТолькоПросмотр; @@ -363,27 +369,24 @@ &НаСервере Функция РезультатВыбораТолькоКомментария() - КонтактнаяИнфо = ОпределитьЗначениеАдреса(Параметры); - Если ПустаяСтрока(КонтактнаяИнфо) Тогда - - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); + ЗначениеКонтактнойИнформации = ОпределитьЗначениеКонтактнойИнформации(Параметры); + Если ПустаяСтрока(ЗначениеКонтактнойИнформации) Тогда Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - КонтактнаяИнфо = МодульУправлениеКонтактнойИнформациейЛокализация.ДесериализацияТелефона("", "", ТипКонтактнойИнформации); + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертацииТелефонаВОбъектXDTO("", ЗначениеКонтактнойИнформации, "", ТипКонтактнойИнформации); Иначе - КонтактнаяИнфо = МодульУправлениеКонтактнойИнформациейЛокализация.ДесериализацияФакса("", "", ТипКонтактнойИнформации); + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертацииФаксаВОбъектXDTO("", ЗначениеКонтактнойИнформации, "", ТипКонтактнойИнформации); КонецЕсли; - УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнфо, Комментарий); - КонтактнаяИнфо = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(КонтактнаяИнфо); - КонецЕсли; - - ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнфо) Тогда - УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(КонтактнаяИнфо, Комментарий); + + УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(ЗначениеКонтактнойИнформации, Комментарий); + ЗначениеКонтактнойИнформации = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(ЗначениеКонтактнойИнформации); + + ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначениеКонтактнойИнформации) Тогда + УправлениеКонтактнойИнформацией.УстановитьКомментарийКонтактнойИнформации(ЗначениеКонтактнойИнформации, Комментарий); КонецЕсли; Возврат Новый Структура("КонтактнаяИнформация, Представление, Комментарий", - КонтактнаяИнфо, Параметры.Представление, Комментарий); + ЗначениеКонтактнойИнформации, Параметры.Представление, Комментарий); КонецФункции // Заполняет реквизиты формы из XTDO объекта типа "Контактная информация". @@ -488,7 +491,7 @@ КонецПроцедуры &НаСервере -Функция ОпределитьЗначениеАдреса(Параметры) +Функция ОпределитьЗначениеКонтактнойИнформации(Параметры) Если ЗначениеЗаполнено(Параметры.Значение) Тогда ЗначенияПолей = Параметры.Значение; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl index f5f800566..4a4766721 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВебСайт/Module.bsl @@ -27,12 +27,15 @@ Данные = УправлениеКонтактнойИнформациейСлужебный.JSONВКонтактнуюИнформациюПоПолям(ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.ВебСтраница); Иначе - Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ДоступенМодульЛокализации() - И УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда + Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда - МодульУправлениеКонтактнойИнформациейЛокализация = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейЛокализация"); РезультатыЧтения = Новый Структура; - КонтактнаяИнформация = МодульУправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + КонтактнаяИнформация = Неопределено; + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнойИнформацииИзXML(ЗначенияПолей, КонтактнаяИнформация, ТипКонтактнойИнформации, РезультатыЧтения); + Если КонтактнаяИнформация = Неопределено Тогда + Возврат; + КонецЕсли; + Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда // Распознали с ошибками, сообщим при открытии. КонтактнаяИнформация.Представление = Параметры.Представление; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Help/ru.html index fe6b91add..cd98f20a0 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Help/ru.html @@ -4,8 +4,8 @@

                Изменение адреса

                • В окне История адреса, которое открывается с помощью гиперссылки История или в меню Еще окна Ввод адреса, можно "задним числом" изменять дату, с которой действует адрес, а также сам адрес.
                • -
                • Для этого выделите нужную строку с адресом, нажмите Изменить. После этого становится доступной кнопка  Выбрать, по которой открывается шаблон ввода адреса. +
                • Для этого выделите нужную строку с адресом, нажмите Изменить. После этого становится доступной кнопка Выбрать, по которой открывается шаблон ввода адреса.
                • В окне шаблона для актуального адреса выводится сообщение Адрес действует в настоящее время.

                См. также

                \ No newline at end of file +
              \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html index fd347831c..0ffb854dd 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html @@ -1,14 +1,14 @@ -

              После настройки необходимых видов контактной информации, используемых на предприятии или в организации, и загрузки адресного классификатора, можно приступать к заполнению контактной информации в списках и документах приложения.

              +

              После настройки необходимых видов контактной информации, используемых на предприятии или в организации, и загрузки адресного классификатора, можно приступать к заполнению контактной информации в списках и документах приложения.

              Контактную информацию можно вводить:

              • в виде произвольной строки,
              • с помощью шаблонов.

              Использование шаблонов позволяет унифицировать ввод информации, улучшает ее восприятие при просмотре и поиске в списках.

              Использование шаблона при вводе телефонов и факсов облегчает ввод информации, сокращает количество ошибок при вводе.

              -

              При вводе контактной информации доступны не только предопределенные поля, но и те поля, которые были добавлены в список Виды контактной информации в процессе работы приложения.

              +

              При вводе контактной информации доступны не только предопределенные поля, но и те поля, которые были добавлены в список Виды контактной информации в процессе работы приложения.

              Если при настройке одного или нескольких видов контактной информации включен флажок Разрешить ввод нескольких значений, то в окне для ввода предусмотрена кнопка Добавить. При нажатии на нее предлагается список возможных видов контактной информации для добавления. Например, у организации может быть несколько адресов электронной почты, веб-страниц и т.п.

              Для работы с контактной информацией можно воспользоваться командами контекстного меню по правой кнопке мыши:

              -
              • Выбрать (клавиша F4) - ввести контактную информацию по шаблону, аналогично кнопке  Выбрать. По шаблону можно ввести адрес, телефон или факс. +
                • Выбрать (клавиша F4) - ввести контактную информацию по шаблону, аналогично кнопке Выбрать. По шаблону можно ввести адрес, телефон или факс.
                • Открыть (сочетание клавиш Ctrl+Shift+F4) - просмотр введенной контактной информации (например, слишком длинный адрес можно увидеть целиком с помощью этой команды);
                • @@ -22,11 +22,11 @@
                • Выделить все (сочетание клавиш Ctrl+A).
                • -
                • Ввести комментарий - с помощью этой команды можно ввести или изменить комментарий, не открывая окно редактирования поля. Комментарии предусмотрены для всех видов контактной информации, кроме текстового поля Другое, т.к. в это поле можно ввести всю нужную информацию. Воспользуйтесь командой, затем введите текст комментария, нажмите кнопку ОК для продолжения работы в приложении. Если комментарий не пуст, то он выводится под полем контактной информации. +
                • Ввести комментарий - с помощью этой команды можно ввести или изменить комментарий, не открывая окно редактирования поля. Комментарии предусмотрены для всех видов контактной информации, кроме текстового поля Другое, т.к. в это поле можно ввести всю нужную информацию. Воспользуйтесь командой, затем введите текст комментария, нажмите кнопку ОК для продолжения работы в приложении. Если комментарий не пуст, то он выводится под полем контактной информации.
                • Адрес на Яндекс.Картах; Адрес на Google Maps - команды, которые позволяют увидеть адрес объекта на картах соответственно Яндекс или Google. Также можно эти команды найти в меню Еще в карточке ввода адреса.
                • -
                • История изменений - с помощью этой команды можно просмотреть изменения контактной информации.

                Ввод телефона по маске

                +
              • История изменений - с помощью этой команды можно просмотреть изменения контактной информации.

              Ввод телефона по маске

              Если настроена маска для ввода телефона, следует его ввести в поле ввода в соответствии с маской. Шаблон в этом случае не нужен.

              См. также:

              diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl index 00b7710f0..375a97845 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl @@ -47,24 +47,21 @@ ТипИнформации = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ВидИнформации); - ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; - Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда - - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") = Неопределено Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводАдресаВСвободнойФорме"; + Если ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда + + РасширенныйВводКонтактнойИнформации = Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации"); + Если РасширенныйВводКонтактнойИнформации = Неопределено Тогда + Возврат Метаданные.Обработки.ВводКонтактнойИнформации.Формы.ВводАдреса.ПолноеИмя(); Иначе - Возврат "Обработка.РасширенныйВводКонтактнойИнформации.Форма.ВводАдреса"; + Возврат РасширенныйВводКонтактнойИнформации.Формы.Найти("ВводАдреса").ПолноеИмя(); КонецЕсли; - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "ВебСтраница") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВебСайт"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - + ИначеЕсли ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") + Или ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда + Возврат Метаданные.Обработки.ВводКонтактнойИнформации.Формы.ВводТелефона.ПолноеИмя(); + ИначеЕсли ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда + Возврат Метаданные.Обработки.ВводКонтактнойИнформации.Формы.ВебСайт; + КонецЕсли; Возврат Неопределено; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo index 045de0ce4..2ba173105 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo @@ -9,17 +9,17 @@ ru Ввод контактной информации - DataProcessor.ВводКонтактнойИнформации.Form.ВводАдресаВСвободнойФорме + DataProcessor.ВводКонтактнойИнформации.Form.ВводАдреса ru - ВводАдресаВСвободнойФорме + ВводАдреса ru - Ввод адреса в свободной форме + Ввод адреса diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Help/ru.html b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Help/ru.html index ab02e39fd..f8c437732 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Help/ru.html +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/РедактированиеПериодаИОтбора/Help/ru.html @@ -1,29 +1,29 @@

              Предназначена для отбора данных при интерактивной синхронизации данных.

              Отбор данных для выгрузки

              -
              • Для документов используется период отбора. В поле За период нажмите  Выбрать, укажите период. Даты можно указать вручную или выбрать из календаря. С помощью ссылки Показать стандартные периоды можно быстро подобрать период. +
                • Для документов используется период отбора. В поле За период нажмите Выбрать, укажите период. Даты можно указать вручную или выбрать из календаря. С помощью ссылки Показать стандартные периоды можно быстро подобрать период.
                • Нажмите Добавить условие.
                • Выберите Поле для отбора.
                • -
                • Выберите Вид сравнения. -
                  • Виды сравнения Равно, Не равно, В группе, Не в группе предполагают выбор одного значения. С помощью видов сравнения Равно или В группе приложение отберет только те записи, которые будут полностью соответствовать указанному значению. +
                  • Выберите Вид сравнения. +
                    • Виды сравнения Равно, Не равно, В группе, Не в группе предполагают выбор одного значения. С помощью видов сравнения Равно или В группе приложение отберет только те записи, которые будут полностью соответствовать указанному значению.
                    • -
                    • Виды сравнения В списке, В группе из списка, Не в списке, Не в группе из списка предполагают выбор нескольких значений. Виды сравнения В группе из списка или Не в группе из списка доступны, если в списках для выбора значений имеются группы. +
                    • Виды сравнения В списке, В группе из списка, Не в списке, Не в группе из списка предполагают выбор нескольких значений. Виды сравнения В группе из списка или Не в группе из списка доступны, если в списках для выбора значений имеются группы.
                    • -
                    • С помощью видов сравнения В списке или В группе из списка будут отобраны элементы, которые содержат то или иное значение, перечисленное в списке. +
                    • С помощью видов сравнения В списке или В группе из списка будут отобраны элементы, которые содержат то или иное значение, перечисленное в списке.
                    • -
                    • Виды сравнения Не равно, Не в группе, Не в списке, Не в группе из списка являются отрицанием соответствующих видов сравнения. В результате выполнения условий с такими видами сравнения будут отобраны все элементы, кроме тех, которые указаны. +
                    • Виды сравнения Не равно, Не в группе, Не в списке, Не в группе из списка являются отрицанием соответствующих видов сравнения. В результате выполнения условий с такими видами сравнения будут отобраны все элементы, кроме тех, которые указаны.
                    • -
                    • Для видов сравнения Заполнено и Не заполнено не требуется выбор значения. С помощью вида сравнения Заполнено, например, можно отобрать документы, в которых не проставлена цена на товар.
                  • +
                  • Для видов сравнения Заполнено и Не заполнено не требуется выбор значения. С помощью вида сравнения Заполнено, например, можно отобрать документы, в которых не проставлена цена на товар.
                • Укажите Значение. -
                  • В зависимости от вида сравнения значение можно написать вручную или выбрать из списка. +
                    • В зависимости от вида сравнения значение можно написать вручную или выбрать из списка.
                    • С помощью команды Еще - Использовать в качестве значения поле можно указать в качестве значения поле документа или элемента списка. Выберите поле из предложенного списка.

                  Группировка условий

                  -
                  • При необходимости условий для отбора может быть несколько, в этом случае они группируются с помощью логических операций И, Или, Не с помощью кнопки Сгруппировать условия. Условия для группировки можно выделить, а затем нажать кнопку. В этом случае все выбранные условия сразу попадут в группу. +
                    • При необходимости условий для отбора может быть несколько, в этом случае они группируются с помощью логических операций И, Или, Не с помощью кнопки Сгруппировать условия. Условия для группировки можно выделить, а затем нажать кнопку. В этом случае все выбранные условия сразу попадут в группу.
                    • -
                    •  Для отмены группировки условий выделите их, выполните команду Еще - Разгруппировать. +
                    • Для отмены группировки условий выделите их, выполните команду Еще - Разгруппировать.
                    • Можно создать группы для условий с помощью команды Еще - Добавить новую группу, а затем уже перетащить туда нужные условия с помощью мыши или создать в группе новые условия.

                    См. также:

                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl index 7b598aea4..1a686e38e 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Forms/Форма/Module.bsl @@ -707,35 +707,10 @@ КонецЕсли; КонецЕсли; ЗаписьXML.ЗаписатьАтрибут("F_String", XMLСтрока(Стр.ОтборСтрокой)); - Если Стр.Отбор.Элементы.Количество() > 0 Тогда - - Для Каждого ЭлементОтбора Из Стр.Отбор.Элементы Цикл - ЗаписьXML.ЗаписатьНачалоЭлемента("Filter"); - ЗаписьXML.ЗаписатьАтрибут("Comp", XMLСтрока(СокрЛП(ЭлементОтбора.ВидСравнения))); - ЗаписьXML.ЗаписатьАтрибут("Present", XMLСтрока(СокрЛП(ЭлементОтбора.Представление))); - - Если ЗначениеЗаполнено(ЭлементОтбора.ЛевоеЗначение) Тогда - ЗаписатьЗначениеОтбора(ЭлементОтбора.ЛевоеЗначение, "_L", ЗаписьXML) - КонецЕсли; - - Если ЗначениеЗаполнено(ЭлементОтбора.ПравоеЗначение) Тогда - - Если ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("СписокЗначений") Тогда - - ЗаписатьМножественноеЗначениеОтбора(ЭлементОтбора.ПравоеЗначение, "_R", ЗаписьXML) - - Иначе - - ЗаписатьЗначениеОтбора(ЭлементОтбора.ПравоеЗначение, "_R", ЗаписьXML) - - КонецЕсли; - - КонецЕсли; - - ЗаписьXML.ЗаписатьКонецЭлемента();//Filter - КонецЦикла; - - КонецЕсли; + + Текст = ОбщегоНазначения.ЗначениеВСтрокуXML(Стр.Отбор); + ЗаписьXML.ЗаписатьБезОбработки(Текст); + ЗаписьXML.ЗаписатьКонецЭлемента(); //Object КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); //Objects @@ -745,39 +720,6 @@ Возврат АдресВХранилище; КонецФункции -&НаСервере -Процедура ЗаписатьМножественноеЗначениеОтбора(Знач ЭлементОтбора_Значение, Постфикс, ЗаписьXML) - - ЗаписьXML.ЗаписатьАтрибут("Type" + Постфикс, Строка(ТипЗнч(ЭлементОтбора_Значение))); - - Для Каждого ЭлементСпискаЗначений Из ЭлементОтбора_Значение Цикл - - ЗаписьXML.ЗаписатьНачалоЭлемента("Array"); - ЗаписатьЗначениеОтбора(ЭлементСпискаЗначений.Значение, Постфикс, ЗаписьXML); - ЗаписьXML.ЗаписатьКонецЭлемента(); - - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ЗаписатьЗначениеОтбора(Знач ЭлементОтбора_Значение, Постфикс, ЗаписьXML) - ТипДанных = ТипЗнч(ЭлементОтбора_Значение); - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных); - - Если ОбъектМетаданных <> Неопределено Тогда - ЗаписьXML.ЗаписатьАтрибут("Type" + Постфикс, ОбъектМетаданных.ПолноеИмя()); - Иначе - ЗаписьXML.ЗаписатьАтрибут("Type" + Постфикс, Строка(ТипДанных)); - КонецЕсли; - Если XMLТип(ТипДанных) <> Неопределено Тогда - ЗаписьXML.ЗаписатьАтрибут("Val" + Постфикс, XMLСтрока(ЭлементОтбора_Значение)); - Иначе - ЗаписьXML.ЗаписатьАтрибут("Val" + Постфикс, XMLСтрока(Строка(ЭлементОтбора_Значение))); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьВидимость() Элементы.ФормаПрервать.Видимость = Ложь; @@ -986,35 +928,6 @@ Возврат Задание.ПолучитьСообщенияПользователю(Истина); КонецФункции -&НаСервереБезКонтекста -Функция СоответствияОтборовСКД() - - СоответствиеОтборов = Новый Соответствие; - СоответствиеОтборов.Вставить("Больше", ВидСравненияКомпоновкиДанных.Больше); - СоответствиеОтборов.Вставить("Больше или равно", ВидСравненияКомпоновкиДанных.БольшеИлиРавно); - СоответствиеОтборов.Вставить("В группе", ВидСравненияКомпоновкиДанных.ВИерархии); - СоответствиеОтборов.Вставить("В списке", ВидСравненияКомпоновкиДанных.ВСписке); - СоответствиеОтборов.Вставить("В группе из списка", ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); - СоответствиеОтборов.Вставить("Заполнено", ВидСравненияКомпоновкиДанных.Заполнено); - СоответствиеОтборов.Вставить("Меньше", ВидСравненияКомпоновкиДанных.Меньше); - СоответствиеОтборов.Вставить("Меньше или равно", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); - СоответствиеОтборов.Вставить("Начинается с", ВидСравненияКомпоновкиДанных.НачинаетсяС); - СоответствиеОтборов.Вставить("Не в группе", ВидСравненияКомпоновкиДанных.НеВИерархии); - СоответствиеОтборов.Вставить("Не в списке", ВидСравненияКомпоновкиДанных.НеВСписке); - СоответствиеОтборов.Вставить("Не в группе из списка", ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); - СоответствиеОтборов.Вставить("Не заполнено", ВидСравненияКомпоновкиДанных.НеЗаполнено); - СоответствиеОтборов.Вставить("Не начинается с", ВидСравненияКомпоновкиДанных.НеНачинаетсяС); - СоответствиеОтборов.Вставить("Не соответствует шаблону", ВидСравненияКомпоновкиДанных.НеПодобно); - СоответствиеОтборов.Вставить("Не равно", ВидСравненияКомпоновкиДанных.НеРавно); - СоответствиеОтборов.Вставить("Не содержит", ВидСравненияКомпоновкиДанных.НеСодержит); - СоответствиеОтборов.Вставить("Соответствует шаблону", ВидСравненияКомпоновкиДанных.Подобно); - СоответствиеОтборов.Вставить("Равно", ВидСравненияКомпоновкиДанных.Равно); - СоответствиеОтборов.Вставить("Содержит", ВидСравненияКомпоновкиДанных.Содержит); - - Возврат СоответствиеОтборов; - -КонецФункции - &НаСервере Процедура ПрерватьВыгрузкуЗагрузкуСервер() МодульДлительныеОперации = ОбщегоНазначения.ОбщийМодуль("ДлительныеОперации"); @@ -1056,94 +969,6 @@ #Область ЗагрузкаНастроекВыгрузки -&НаСервере -Функция МножественноеЗначениеОтбора(ЧтениеXML, ТипЗначенияОтбора, ЗначениеОтбора) - - Пока ЧтениеXML.Прочитать() Цикл - - Если ЧтениеXML.Имя = "Filter" - И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда - - Возврат ЗначениеОтбора; - - КонецЕсли; - - Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента - ИЛИ ЧтениеXML.Имя <> "Array" Тогда - - Продолжить; - - КонецЕсли; - - ЗначениеОтбораЭлемента = Неопределено; - ТипЗначенияОтбораЭлемента = Неопределено; - Пока ЧтениеXML.ПрочитатьАтрибут() Цикл - - Если ЧтениеXML.Имя = "Val_R" Тогда - - ЗначениеОтбораЭлемента = ЧтениеXML.Значение; - - ИначеЕсли ЧтениеXML.Имя = "Type_R" Тогда - - ТипЗначенияОтбораЭлемента = ЧтениеXML.Значение; - - КонецЕсли; - - КонецЦикла; - - ЗначениеОтбора.Добавить(ЕдиничноеЗначениеОтбора(ТипЗначенияОтбораЭлемента, ЗначениеОтбораЭлемента)); - - КонецЦикла; - - Возврат ЗначениеОтбора; - -КонецФункции - -&НаСервере -Функция ЕдиничноеЗначениеОтбора(ТипЗначенияОтбора, ЗначениеОтбора) - - ПолноеИмяЭлементаОтбора = Метаданные.НайтиПоПолномуИмени(ТипЗначенияОтбора); - Если ПолноеИмяЭлементаОтбора <> Неопределено Тогда - - МенеджерОбъектаОтбора = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ТипЗначенияОтбора); - Если СтрНайти(ВРег(ТипЗначенияОтбора), "ПЕРЕЧИСЛЕНИЕ") > 0 Тогда - - Возврат МенеджерОбъектаОтбора[ЗначениеОтбора]; - - Иначе - - Возврат МенеджерОбъектаОтбора.ПолучитьСсылку(Новый УникальныйИдентификатор(ЗначениеОтбора)); - - КонецЕсли; - - Иначе - - Возврат XMLЗначение(Тип(ТипЗначенияОтбора), ЗначениеОтбора); - - КонецЕсли; - -КонецФункции - -&НаСервере -Функция ПривестиЗначениеОтбораКЗначениюСКД(ЧтениеXML, ТипЗначенияОтбора, ЗначениеОтбора) - - Если ТипЗначенияОтбора = Тип("СписокЗначений") Тогда - - ЗначениеОтбора = Новый СписокЗначений; - Возврат МножественноеЗначениеОтбора(ЧтениеXML, ТипЗначенияОтбора, ЗначениеОтбора); - - ИначеЕсли ЗначениеОтбора <> Неопределено Тогда - - Возврат ЕдиничноеЗначениеОтбора(ТипЗначенияОтбора, ЗначениеОтбора); - - Иначе - - Возврат Неопределено; - - КонецЕсли; - -КонецФункции - &НаСервере Процедура ПрочитатьЗначениеПериода(ЧтениеXML) @@ -1196,53 +1021,6 @@ КонецПроцедуры -&НаСервере -Процедура ПрочитатьЗначениеОтборовСКД(ЧтениеXML, СтрокаОтбора) - - СоответствияОтборовСКД = СоответствияОтборовСКД(); - - ТипЗначенияОтбора = Неопределено; - ЗначениеОтбора = Неопределено; - Пока ЧтениеXML.ПрочитатьАтрибут() Цикл - - Если ЧтениеXML.Имя = "Present" Тогда - - СтрокаОтбора.Представление = XMLЗначение(Тип("Строка"), ЧтениеXML.Значение); - - ИначеЕсли ЧтениеXML.Имя = "Comp" Тогда - - СтрВидСравнения = СокрЛП(XMLЗначение(Тип("Строка"), ЧтениеXML.Значение)); - Если ЗначениеЗаполнено(СтрВидСравнения) Тогда - - СтрокаОтбора.ВидСравнения = СоответствияОтборовСКД[СтрВидСравнения]; - - КонецЕсли; - - ИначеЕсли ЧтениеXML.Имя = "Val_L" Тогда - - СтрокаОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СокрЛП(XMLЗначение(Тип("Строка"), ЧтениеXML.Значение))); - - ИначеЕсли ЧтениеXML.Имя = "Val_R" Тогда - - ЗначениеОтбора = ЧтениеXML.Значение; - - ИначеЕсли ЧтениеXML.Имя = "Type_R" Тогда - - ТипЗначенияОтбора = ЧтениеXML.Значение; - Если СокрЛП(Тип("СписокЗначений")) = ТипЗначенияОтбора Тогда - - ТипЗначенияОтбора = Тип("СписокЗначений"); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - СтрокаОтбора.ПравоеЗначение = ПривестиЗначениеОтбораКЗначениюСКД(ЧтениеXML, ТипЗначенияОтбора, ЗначениеОтбора); - -КонецПроцедуры - &НаСервере Процедура ЗагрузитьНастройкиВыгрузкиНаСервере() @@ -1275,10 +1053,12 @@ ИначеЕсли ЧтениеXML.Имя = "Filter" Тогда - ОтборСКД = НоваяСтрокаОтбораСКД.Отбор; // ОтборКомпоновкиДанных - СтрокаОтбора = ОтборСКД.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ПрочитатУзел(ЧтениеXML, ЗаписьXML); + Текст = ЗаписьXML.Закрыть(); - ПрочитатьЗначениеОтборовСКД(ЧтениеXML, СтрокаОтбора); + НоваяСтрокаОтбораСКД.Отбор = ОбщегоНазначения.ЗначениеИзСтрокиXML(Текст); КонецЕсли; @@ -1291,6 +1071,31 @@ КонецПроцедуры +&НаСервере +Процедура ПрочитатУзел(ЧтениеXML, ЗаписьXML) + + ЗаписьXML.ЗаписатьНачалоЭлемента(ЧтениеXML.Имя); + Для Сч = 0 По ЧтениеXML.КоличествоАтрибутов() - 1 Цикл + ИмяАтрибута = ЧтениеXML.ИмяАтрибута(Сч); + ЗначениеАтрибута = ЧтениеXML.ЗначениеАтрибута(Сч); + ЗаписьXML.ЗаписатьАтрибут(ИмяАтрибута, ЗначениеАтрибута); + КонецЦикла; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + ПрочитатУзел(ЧтениеXML, ЗаписьXML) + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда + ЗаписьXML.ЗаписатьТекст(ЧтениеXML.Значение); + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + ЗаписьXML.ЗаписатьКонецЭлемента(); + Возврат; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Help/ru.html b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Help/ru.html index 64bf46475..c26db10e0 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Help/ru.html +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Help/ru.html @@ -12,7 +12,7 @@
                  • Настроить состав выгружаемых данных:
                    1. Выбрать объекты метаданных
                    2. При необходимости указать отбор по периоду для документов -
                    3. При необходимости настроить произвольные отборы для справочников и документов
                  • Выполненные настройки отборов можно сохранить в файл и использовать при следующих сеансах работы (кнопки Сохранить настройки и Восстановить настройки).
                  •  

                    +
                  • При необходимости настроить произвольные отборы для справочников и документов
                  • Выполненные настройки отборов можно сохранить в файл и использовать при следующих сеансах работы (кнопки Сохранить настройки и Восстановить настройки).
                  • Для загрузки данных необходимо указать путь к файлу, содержащему данные для загрузки

                    Режим разработчика

                    Режим можно включить с помощью кнопки Еще. Предоставляет следующие дополнительные возможности:

                    diff --git a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Templates/СхемаКомпоновкиДанных/Template.dcs b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Templates/СхемаКомпоновкиДанных/Template.dcs index c72eabcfd..f6bede0cc 100644 --- a/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Templates/СхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/DataProcessors/ВыгрузкаЗагрузкаEnterpriseData/Templates/СхемаКомпоновкиДанных/Template.dcs @@ -91,6 +91,12 @@ Тип Тип + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип</v8:content> + </v8:item> + ОбщийИсточникДанных ВЫБРАТЬ diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form index a068dd2de..f9686ec1a 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -494,540 +494,6 @@ false - - ЗапросПароляПользователя - 53 - - ГруппаЗапросаПароля - 131 - - Декорация2 - 63 - - <key>ru</key> - <value>Введите пароль для входа в приложение в Интернете</value> - - true - true - - true - - - Декорация2ExtendedTooltip - 90 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 64 - true - - Label - true - - Left - - - - ГруппаВводаПароля - 59 - - WSПароль - 54 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - WSПароль - - - WSПарольExtendedTooltip - 92 - Label - true - true - - Left - - - - WSПарольКонтекстноеМеню - 55 - true - - InputField - true - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - true - Normal - - - - ЗабылиПароль - 58 - - <key>ru</key> - <value>Забыли пароль?</value> - - true - true - - true - - - ЗабылиПарольExtendedTooltip - 93 - Label - true - true - - Left - - - Hyperlink - Form.Command.ЗабылиПароль - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Ввода пароля</value> - - - ГруппаВводаПароляРасширеннаяПодсказка - 91 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Запроса пароля</value> - - - ГруппаЗапросаПароляРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - UsualGroup - - Vertical - NormalSeparation - true - true - Auto - Auto - - - - ГруппаПредупрежденияДолгойСинхронизации - 136 - - ГруппаДекорацияПредупреждение - 146 - - Декорация3 - 143 - true - true - - true - - - Декорация3РасширеннаяПодсказка - 145 - Label - true - true - - Left - - - - Декорация3КонтекстноеМеню - 144 - true - - true - true - - - CommonPicture.Предупреждение - - - - true - true - - true - - - <key>ru</key> - <value>Декорация предупреждение</value> - - - ru - Декорация предупреждения - - - ГруппаДекорацияПредупреждениеРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - - ГруппаТекстПредупреждение - 141 - - Декорация1 - 133 - - <key>ru</key> - <value>В некоторых случаях синхронизация данных может занять длительное время: - - медленный канал связи; - - большой объем данных; - - доступно обновление приложения в Интернете.</value> - - true - true - - true - - - Декорация1РасширеннаяПодсказка - 135 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 134 - true - - Label - true - - Left - - - - НеНапоминатьОДолгойСинхронизации - 138 - - <key>ru</key> - <value>Больше не напоминать</value> - - true - true - - true - - - НеНапоминатьОДолгойСинхронизации - - Right - - НеНапоминатьОДолгойСинхронизацииРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - - НеНапоминатьОДолгойСинхронизацииКонтекстноеМеню - 139 - true - - CheckBoxField - Enter - true - Left - true - - - - Декорация4 - 148 - true - true - - true - - - Декорация4РасширеннаяПодсказка - 150 - Label - true - true - - Left - - - - Декорация4КонтекстноеМеню - 149 - true - - Label - true - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Текст предупреждение</value> - - - ru - Текст предупреждения - - - ГруппаТекстПредупреждениеРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Предупреждения долгой синхронизации</value> - - - ГруппаПредупрежденияДолгойСинхронизацииРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - КоманднаяПанельВыполненияОбмена - 60 - - ВыполнитьОбмен - 62 - - <key>ru</key> - <value>Синхронизировать</value> - - true - true - - true - - true - - ВыполнитьОбменExtendedTooltip - 95 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбмен - Auto - true - true - true - UserCmds - Auto - - - ФормаЗакрыть2 - 70 - true - true - - true - - - ФормаЗакрыть2ExtendedTooltip - 96 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель выполнения обмена</value> - - - ru - Командная панель закрыть - - - КоманднаяПанельВыполненияОбменаExtendedTooltip - 94 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Запрос пароля пользователя</value> - - - ru - Загрузка данных - - - ЗапросПароляПользователяExtendedTooltip - 89 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - ОжиданиеСинхронизацииДанных 2 @@ -2244,8 +1710,8 @@ 40 <key>ru</key> - <value>Получено обновление программы из "%1". -Необходимо установить обновление программы, после чего синхронизация данных будет продолжена. Обратитесь к администратору.</value> + <value>Получено обновление приложения из "%1". +Необходимо установить обновление приложения, после чего синхронизация данных будет продолжена. Обратитесь к администратору.</value> true true @@ -2309,8 +1775,8 @@ 43 <key>ru</key> - <value>Получено обновление программы из "%1". -Необходимо установить обновление программы, после чего синхронизация данных будет продолжена.</value> + <value>Получено обновление приложения из "%1". +Необходимо установить обновление приложения, после чего синхронизация данных будет продолжена.</value> true true @@ -2654,7 +2120,7 @@ <key>ru</key> <value>Изменены расширения конфигурации. -Чтобы продолжить работу с учетом сделанных изменений, необходимо перезапустить программу.</value> +Чтобы продолжить работу с учетом сделанных изменений, необходимо перезапустить приложение.</value> true true @@ -3055,7 +2521,7 @@ 261 <key>ru</key> - <value>Перезапустить программу</value> + <value>Перезапустить приложение</value> true true @@ -3112,7 +2578,7 @@ <key>ru</key> - <value>Командная панель установить закрыть</value> + <value>Командная панель перезагрузить</value> КоманднаяПанельПерезагрузитьРасширеннаяПодсказка @@ -3479,10 +2945,6 @@ WSПароль - - <key>ru</key> - <value>Пароль</value> - 11 String @@ -3498,7 +2960,7 @@ - ВидТранспортаСообщений + УдалитьВидТранспортаСообщений 12 EnumRef.ВидыТранспортаСообщенийОбмена @@ -3697,10 +3159,6 @@ НеНапоминатьОДолгойСинхронизации - - <key>ru</key> - <value>Больше не напоминать</value> - 24 Boolean @@ -4103,6 +3561,31 @@ true + + ИдентификаторТранспорта + 55 + + String + + + + true + + + true + + + + ДанныеАутентификации + 56 + + + true + + + true + + ПерейтиВЖурналРегистрации @@ -4147,28 +3630,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ЗабылиПароль</name> - <title> - <key>ru</key> - <value>Забыли пароль?</value> - - 3 - - ru - Забыли пароль - - - true - - - - ЗабылиПароль - - - DontUse - Auto - ВыполнитьОбмен @@ -4239,12 +3700,12 @@ <name>ПерезапуститьПрограмму</name> <title> <key>ru</key> - <value>Перезапустить программу</value> + <value>Перезапустить приложение</value> 7 ru - Перезапустить программу + Перезапустить приложение true diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index bcfe362b1..1861227c7 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -19,31 +19,47 @@ Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ОбменМеждуПриложениямиВСервисе); Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + ДанныеАутентификации = ТранспортСообщенийОбмена.ПарольСинхронизацииДанных(УзелИнформационнойБазы); + Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); Иначе - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Не заданы параметры формы. Форма не может быть открыта.'"), Отказ); + Текст = НСтр("ru = 'Не заданы параметры формы. Форма не может быть открыта.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ОбменДаннымиСервер.СообщитьОбОшибке(Текст, Отказ); Возврат; КонецЕсли; КонецЕсли; - + УстановитьПривилегированныйРежим(Истина); НаименованиеКорреспондента = Строка(УзелИнформационнойБазы); - - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелИнформационнойБазы); - ВидТранспортаСообщений = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонечнаяТочкаКорреспондента = НастройкиТранспорта.WSКонечнаяТочкаКорреспондента; + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию(УзелИнформационнойБазы, ИдентификаторТранспорта); + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + + Текст = НСтр("ru = 'Не заданы настройки подключения по умолчанию. + |Синхронизация не может быть продолжена.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ВызватьИсключение Текст; + + КонецЕсли; ВыполнитьОтправкуДанных = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ВыполнитьОтправкуДанных(УзелИнформационнойБазы); УстановитьПривилегированныйРежим(Ложь); - - ОбменЧерезВнутреннююПубликацию = ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И ЗначениеЗаполнено(КонечнаяТочкаКорреспондента); + + Если ИдентификаторТранспорта = "SM" И НастройкиТранспорта.ВнутренняяПубликация Тогда + ОбменЧерезВнутреннююПубликацию = Истина; + ОбластьДанныхКорреспондента = НастройкиТранспорта.ОбластьДанныхКорреспондента; + Иначе + ОбменЧерезВнутреннююПубликацию = Ложь; + КонецЕсли; // Инициализируем роли пользователя. РольДоступнаАдминистрированиеОбменовДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); @@ -52,7 +68,7 @@ НеНапоминатьОДолгойСинхронизации = Истина; ПроверятьРасхождениеВерсий = Не ОбменМеждуПриложениямиВСервисе; - ПодключениеЧерезВнешнееСоединение = (ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.COM); + ПодключениеЧерезВнешнееСоединение = Ложь; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") И ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто() Тогда @@ -78,48 +94,10 @@ ПарольСинхронизацииСохранен = Ложь; // Пароль сохранен в безопасном хранилище (доступен в фоновом задании) WSПароль = ""; - Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) Тогда - - // Это РИБ и обмен по WS, используем текущего пользователя и пароль из сессии. - ИспользоватьТекущегоПользователяДляАутентификации = Истина; - ПарольСинхронизацииЗадан = ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы); - - Иначе - - // Это не РИБ, читаем данные из настроек транспорта. - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелИнформационнойБазы); - ПарольСинхронизацииЗадан = НастройкиТранспорта.WSЗапомнитьПароль; - Если ПарольСинхронизацииЗадан Тогда - ПарольСинхронизацииСохранен = Истина; - ИспользоватьСохраненныеПараметрыАутентификации = Истина; - Иначе - // Используем данные из сессии, только если их нет в регистре. - ПарольСинхронизацииЗадан = ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы); - Если ПарольСинхронизацииЗадан Тогда - ИспользоватьСохраненныеПараметрыАутентификации = Истина; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - ЕстьОшибки = ((ОбменДаннымиСервер.ГлавныйУзел() = УзелИнформационнойБазы) И КонфигурацияИзменена()); - ФоновоеЗаданиеИспользоватьПрогресс = Не ОбменМеждуПриложениямиВСервисе - И Не ОбменЧерезВнутреннююПубликацию - И Не (ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS); - - ЕстьСтраницаЗапросаПароля = Не ЕстьОшибки - И (ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS) - И Не (ПарольСинхронизацииЗадан И НеНапоминатьОДолгойСинхронизации) - И Не ОбменЧерезВнутреннююПубликацию; - - Элементы.ГруппаПредупрежденияДолгойСинхронизации.Видимость = ЕстьСтраницаЗапросаПароля И Не НеНапоминатьОДолгойСинхронизации; - Элементы.ГруппаЗапросаПароля.Видимость = ЕстьСтраницаЗапросаПароля И Не ПарольСинхронизацииЗадан; - + ФоновоеЗаданиеИспользоватьПрогресс = ТранспортСообщенийОбмена.ПараметрТранспорта(ИдентификаторТранспорта, "ИспользоватьПрогресс"); + КлючСохраненияПоложенияОкна = ?(ПарольСинхронизацииЗадан И НеНапоминатьОДолгойСинхронизации, "ПарольСинхронизацииЗадан", "") + "/" + ?(НеНапоминатьОДолгойСинхронизации, "НеНапоминатьОДолгойСинхронизации", ""); @@ -182,8 +160,6 @@ ОбменДаннымиКлиент.ОткрытьФормуПослеЗакрытияТекущей(ЭтотОбъект, "Обработка.ВыполнениеОбменаДанными.Форма.Форма", ПараметрыФормы, ПараметрыОткрытия); - Иначе - СохранитьФлагВопросаОДолгойСинхронизации(); КонецЕсли; КонецПроцедуры @@ -214,13 +190,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ЗабылиПароль(Команда) - - ОбменДаннымиКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); - -КонецПроцедуры - &НаКлиенте Процедура ВыполнитьОбмен(Команда) @@ -529,8 +498,7 @@ // ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ //////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ПРОЦЕДУРЫ И ФУНКЦИИ +#Область РазделПроцедурыИФункции &НаКлиенте Процедура ЗапуститьПереходДалее() @@ -553,18 +521,6 @@ КонецПроцедуры -&НаКлиенте -Процедура СохранитьФлагВопросаОДолгойСинхронизации() - - Настройки = Неопределено; - Если СохранитьФлагВопросаОДолгойСинхронизацииСервер(Не НеНапоминатьОДолгойСинхронизации, Настройки) Тогда - ИзмененныеНастройки = Новый Массив; - ИзмененныеНастройки.Добавить(Настройки); - Оповестить("ИзмененыНастройкиПользователя", ИзмененныеНастройки, ЭтотОбъект); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ИнициализироватьПеременныеОбработки() @@ -619,75 +575,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ИнициализироватьПараметрыАутентификации(ПараметрыАутентификации) - - Если ИспользоватьСохраненныеПараметрыАутентификации Тогда - Если Не ПарольСинхронизацииСохранен Тогда - ПараметрыАутентификации = Новый Структура; - ПараметрыАутентификации.Вставить("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации); - КонецЕсли; - Иначе - ПараметрыАутентификации = Новый Структура; - ПараметрыАутентификации.Вставить("ИспользоватьТекущегоПользователя", ИспользоватьТекущегоПользователяДляАутентификации); - Если Не ПарольСинхронизацииЗадан Тогда - ПараметрыАутентификации.Вставить("Пароль", WSПароль); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключение(ЕстьПодключение) - - ПараметрыАутентификации = Неопределено; - ИнициализироватьПараметрыАутентификации(ПараметрыАутентификации); - - ПроверитьПодключениеНаСервере(ЕстьПодключение, ПараметрыАутентификации); - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьПодключениеНаСервере(ЕстьПодключение, ПараметрыАутентификации) - - УстановитьПривилегированныйРежим(Истина); - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); - - СинхронизацияДанныхОтключена = Ложь; - СообщениеОбОшибкеПользователю = ""; - НастройкаЗавершена = Истина; - ПолученыДанныеДляСопоставления = Ложь; - - ЕстьПодключение = ОбменДаннымиВебСервис.ЕстьПодключениеККорреспонденту(УзелИнформационнойБазы, - ПараметрыПодключения, СообщениеОбОшибкеПользователю, НастройкаЗавершена, ПолученыДанныеДляСопоставления); - - Если Не ЕстьПодключение Тогда - СообщениеОбОшибке = НСтр("ru = 'Не удалось подключиться к приложению в Интернете, по причине ""%1"". - |Убедитесь, что: - |- введен правильный пароль; - |- указан корректный адрес для подключения; - |- приложение доступно по указанному в настройках адресу; - |- настройка синхронизации не была удалена в приложении в Интернете. - |Повторите попытку синхронизации.'"); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, СообщениеОбОшибкеПользователю); - Если ЕстьСтраницаЗапросаПароля Тогда - ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); - КонецЕсли; - СинхронизацияДанныхОтключена = Истина; - ИначеЕсли Не НастройкаЗавершена Тогда - СообщениеОбОшибкеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и завершите в ней настройку синхронизации. Выполнение обмена данными отменено.'"), - НаименованиеКорреспондента); - СинхронизацияДанныхОтключена = Истина; - ИначеЕсли ПолученыДанныеДляСопоставления Тогда - СообщениеОбОшибкеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и выполните загрузку сообщения для сопоставления данных. Выполнение обмена данными отменено.'"), - НаименованиеКорреспондента); - СинхронизацияДанныхОтключена = Истина; - КонецЕсли; - -КонецПроцедуры - &НаСервереБезКонтекста Функция ДанныеОтбораЖурналаРегистрации(УзелИнформационнойБазы) @@ -707,26 +594,6 @@ КонецФункции -&НаСервереБезКонтекста -Функция СохранитьФлагВопросаОДолгойСинхронизацииСервер(Знач Флаг, Настройки = Неопределено) - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") - И ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто() Тогда - - МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота"); - НадоСохранять = Флаг <> МодульАвтономнаяРабота.ФлагНастройкиВопросаОДолгойСинхронизации(); - - Если НадоСохранять Тогда - МодульАвтономнаяРабота.ФлагНастройкиВопросаОДолгойСинхронизации(Флаг, Настройки); - КонецЕсли; - - Иначе - НадоСохранять = Ложь; - КонецЕсли; - - Возврат НадоСохранять; -КонецФункции - &НаСервереБезКонтекста Процедура ЗавершитьВыполнениеДлительнойОперации(ИдентификаторЗадания) ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); @@ -809,9 +676,11 @@ Процедура ОтменитьОчередьИПродолжитьНаСервере() МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация"); - МодульОбменДаннымиВнутренняяПубликация.ОтменитьОчередьЗадач(УзелИнформационнойБазы, + МодульОбменДаннымиВнутренняяПубликация.ОтменитьОчередьЗадач( + УзелИнформационнойБазы, СценарийВыполненияЧерезВнутреннююПубликацию, - ИдентификаторОбменаЧерезВнутреннююПубликацию); + ИдентификаторОбменаЧерезВнутреннююПубликацию, + ОбластьДанныхКорреспондента); КонецПроцедуры @@ -929,7 +798,7 @@ &НаКлиенте Процедура ПриНачалеВыгрузкиДанных(Отказ) - + Если ОбменМеждуПриложениямиВСервисе Тогда ПродолжитьОжидание = Истина; ПриНачалеВыгрузкиДанныхНаСервере(ПродолжитьОжидание); @@ -1186,58 +1055,26 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Страницы обмена через Веб-сервис +#Область СтраницыОбменаЧерезВебСервис &НаКлиенте -Функция Подключаемый_ЗапросПароляПользователя_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) +Процедура АвторизацияЗавершение(Результат, ДополнительныеПараметры) Экспорт - Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); - - Элементы.ВыполнитьОбмен.КнопкаПоУмолчанию = Истина; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_ЗапросПароляПользователя_ПриПереходеДалее(Отказ) - - Если Не ПарольСинхронизацииЗадан - И ПустаяСтрока(WSПароль) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указан пароль.'"), , "WSПароль", , Отказ); - Возврат Неопределено; + Если Результат = Неопределено Тогда + Закрыть(); КонецЕсли; - СохранитьФлагВопросаОДолгойСинхронизации(); + // Проверка подключения? -КонецФункции + ВыполнитьПереходДалее(); + +КонецПроцедуры -&НаКлиенте -Функция Подключаемый_ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ПодключениеЧерезВнешнееСоединение Тогда - ОбменДаннымиКлиент.ПроверитьИЗарегистрироватьCOMСоединитель(УзелИнформационнойБазы); - Возврат Неопределено; - КонецЕсли; - - ЕстьПодключение = Ложь; - ПроверитьПодключение(ЕстьПодключение); - Если ЕстьПодключение Тогда - WSПароль = Строка(Новый УникальныйИдентификатор); - ИспользоватьСохраненныеПараметрыАутентификации = Истина; - ПарольСинхронизацииЗадан = Истина; - Иначе - Если ЕстьСтраницаЗапросаПароля Тогда - Отказ = Истина; - КонецЕсли; - КонецЕсли; - ПерейтиДалее = Не Отказ; - -КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ОБРАБОТКИ ФОНОВЫХ ЗАДАНИЙ +#КонецОбласти + +#Область РазделОбработкиФоновыхЗаданий &НаКлиенте Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(Действие, ИмяЗадания, Отказ) @@ -1248,7 +1085,9 @@ ПараметрыЗадания.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); ПараметрыЗадания.Вставить("ВыполнятьЗагрузку", ФоновоеЗаданиеВыполняемоеДействие = 1); ПараметрыЗадания.Вставить("ВыполнятьВыгрузку", ФоновоеЗаданиеВыполняемоеДействие = 2); - ПараметрыЗадания.Вставить("ВидТранспортаСообщенийОбмена", ВидТранспортаСообщений); + ПараметрыЗадания.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + ПараметрыЗадания.Вставить("ДанныеАутентификации", ДанныеАутентификации); + ПараметрыЗадания.Вставить("ДлительнаяОперация", ДлительнаяОперация); ПараметрыЗадания.Вставить("ИдентификаторДлительнойОперации", ИдентификаторДлительнойОперации); ПараметрыЗадания.Вставить("ИдентификаторФайлаСообщенияВСервисе", ИдентификаторФайлаСообщенияВСервисе); @@ -1319,54 +1158,7 @@ Процедура РезультатВыполненияФоновогоЗадания() ФоновоеЗаданиеПолучитьРезультатНаСервере(); - - // Если обмен данных выполняется с приложением в интернете, то надо дождаться окончания выполнения синхронизации - // на стороне корреспондента. - Если ДлительнаяОперация Тогда - СчетчикПовторовПриОшибкеПодключения = 0; - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 0.1, Истина); - Иначе - ПодключитьОбработчикОжидания("ЗавершениеДлительнойОперации", 0.1, Истина); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработчикОжиданияДлительнойОперации() - - ДлительнаяОперацияЗавершенаСОшибкой = Ложь; - СообщениеОбОшибке = ""; - - ПараметрыАутентификации = Неопределено; - ИнициализироватьПараметрыАутентификации(ПараметрыАутентификации); - - СостояниеОперации = СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторДлительнойОперации, - УзелИнформационнойБазы, - ПараметрыАутентификации, - СообщениеОбОшибке); - - Если СостояниеОперации = Неопределено - И СчетчикПовторовПриОшибкеПодключения < 5 Тогда - СчетчикПовторовПриОшибкеПодключения = СчетчикПовторовПриОшибкеПодключения + 1; - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 30, Истина); - Возврат; - КонецЕсли; - - Если СостояниеОперации = "Active" Тогда - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 30, Истина); - Иначе - Если СостояниеОперации <> "Completed" Тогда - ДлительнаяОперацияЗавершенаСОшибкой = Истина; - ЕстьОшибки = Истина; - КонецЕсли; - - ДлительнаяОперация = Ложь; - ДлительнаяОперацияЗавершена = Истина; - ИдентификаторДлительнойОперации = ""; - - ПодключитьОбработчикОжидания("ЗавершениеДлительнойОперации", 0.1, Истина); - КонецЕсли; + ЗавершениеДлительнойОперации(); КонецПроцедуры @@ -1446,19 +1238,6 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); ПараметрыЗадания.Вставить("ДатаНачалаОперации", ДатаНачалаОперации); - ПараметрыАутентификации = Неопределено; - Если Не ПарольСинхронизацииСохранен Тогда - Если ИспользоватьТекущегоПользователяДляАутентификации Тогда - ПараметрыАутентификации = Новый Структура; - ПараметрыАутентификации.Вставить("ИспользоватьТекущегоПользователя", Истина); - ПараметрыАутентификации.Вставить("Пароль", - ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелИнформационнойБазы)); - Иначе - ПараметрыАутентификации = ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелИнформационнойБазы); - КонецЕсли; - КонецЕсли; - ПараметрыЗадания.Вставить("ПараметрыАутентификации", ПараметрыАутентификации); - Результат = ДлительныеОперации.ВыполнитьВФоне( ПараметрыЗадания.ИмяЗадания, ПараметрыЗадания, @@ -1564,34 +1343,9 @@ КонецПроцедуры -&НаСервереБезКонтекста -Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторДлительнойОперации, - УзелИнформационнойБазы, - ПараметрыАутентификации, - СообщениеОбОшибке) - - СостояниеОперации = Неопределено; - Попытка - СостояниеОперации = ОбменДаннымиСлужебный.СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторДлительнойОперации, - УзелИнформационнойБазы, - ПараметрыАутентификации, - СообщениеОбОшибке); - Исключение - Информация = ИнформацияОбОшибке(); - СообщениеОбОшибке = ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - КонецПопытки; - - Возврат СостояниеОперации; - -КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ +#Область ИнициализацияПереходов &НаСервере Процедура ЗаполнитьТаблицуПереходов() @@ -1626,17 +1380,7 @@ ТаблицаПереходовНоваяСтрока(ИмяСтраницыСинхронизацияВыгрузка, "Подключаемый_ВыгрузкаДанных_ПриОткрытии", Истина, "Подключаемый_ВыгрузкаДанных_ОбработкаДлительнойОперации"); ТаблицаПереходовНоваяСтрока(ИмяСтраницыСинхронизацияВыгрузка, , Истина, "Подключаемый_ВыгрузкаДанных_ОбработкаДлительнойОперации_Окончание"); Иначе - - Если ЕстьСтраницаЗапросаПароля Тогда - СтрокаПерехода = ТаблицаПереходовНоваяСтрока("ЗапросПароляПользователя", "Подключаемый_ЗапросПароляПользователя_ПриОткрытии"); - СтрокаПерехода.ИмяОбработчикаПриПереходеДалее = "Подключаемый_ЗапросПароляПользователя_ПриПереходеДалее"; - КонецЕсли; - - Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - ТаблицаПереходовНоваяСтрока("ОжиданиеСинхронизацииДанных", , Истина, "Подключаемый_ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); - КонецЕсли; - + Если ВыполнитьОтправкуДанных Тогда // Отправка ТаблицаПереходовНоваяСтрока(ИмяСтраницыСинхронизацияВыгрузка, "Подключаемый_ВыгрузкаДанных_ПриОткрытии", Истина, "Подключаемый_ВыгрузкаДанных_ОбработкаДлительнойОперации"); @@ -1668,8 +1412,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ +#КонецОбласти + +#Область РазделОбработчиковСобытийПереходов //////////////////////////////////////////////////////////////////////////////// // Общие страницы обмена @@ -1689,4 +1434,6 @@ +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl index 1f0d8314a..446e1f18a 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl @@ -21,18 +21,7 @@ ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ЗаполнитьЗначенияСвойств(ПараметрыОбмена, ПараметрыЗадания, - "ВидТранспортаСообщенийОбмена,ВыполнятьЗагрузку,ВыполнятьВыгрузку"); - - Если ПараметрыЗадания.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ПараметрыОбмена.ДлительнаяОперация = ПараметрыЗадания.ДлительнаяОперация; - ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; - ПараметрыОбмена.ИдентификаторОперации = ПараметрыЗадания.ИдентификаторДлительнойОперации; - ПараметрыОбмена.ИдентификаторФайла = ПараметрыЗадания.ИдентификаторФайлаСообщенияВСервисе; - ПараметрыОбмена.ПараметрыАутентификации = ПараметрыЗадания.ПараметрыАутентификации; - ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; - - КонецЕсли; + "ИдентификаторТранспорта,ВыполнятьЗагрузку,ВыполнятьВыгрузку,ДанныеАутентификации"); ОбменДаннымиСервер.ПроверитьВозможностьЗапускаОбмена(ПараметрыЗадания.УзелИнформационнойБазы, ПараметрыЗадания.Отказ); @@ -43,48 +32,12 @@ ПараметрыОбмена, ПараметрыЗадания.Отказ); - Если ПараметрыЗадания.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ПараметрыЗадания.ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; - ПараметрыЗадания.ИдентификаторДлительнойОперации = ПараметрыОбмена.ИдентификаторОперации; - ПараметрыЗадания.ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; - - Если ЗначениеЗаполнено(ПараметрыЗадания.ИдентификаторДлительнойОперации) Тогда - // Если задание выполняется на корреспонденте, то необходимо будет загрузить полученный файл в базу позднее. - ПараметрыЗадания.ИдентификаторФайлаСообщенияВСервисе = ПараметрыОбмена.ИдентификаторФайла; - Иначе - // Файл с данными уже получен и загружен в базу, загружать его дополнительно нет необходимости. - ПараметрыЗадания.ИдентификаторФайлаСообщенияВСервисе = ""; - КонецЕсли; - - КонецЕсли; - КонецЕсли; ПоместитьВоВременноеХранилище(ПараметрыЗадания, АдресХранилища); КонецПроцедуры -// Запускает загрузку полученного из интернета файла, используется в фоновом задании. -// -// Параметры: -// ПараметрыЗадания - Структура - параметры, необходимые для выполнения процедуры. -// АдресХранилища - Строка - адрес временного хранилища. -// -Процедура ВыполнитьЗагрузкуПолученногоИзИнтернетаФайла(ПараметрыЗадания, АдресХранилища) Экспорт - - ОбменДаннымиВебСервис.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - ПараметрыЗадания.Отказ, - ПараметрыЗадания.УзелИнформационнойБазы, - ПараметрыЗадания.ИдентификаторФайлаСообщенияВСервисе, - ПараметрыЗадания.ДатаНачалаОперации, - ПараметрыЗадания.ПараметрыАутентификации); - - ПараметрыЗадания.ИдентификаторФайлаСообщенияВСервисе = ""; - ПоместитьВоВременноеХранилище(ПараметрыЗадания, АдресХранилища); - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form index a5b86c4d9..1ed98e3d4 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыбранныеЭлементы/Form.form @@ -394,6 +394,7 @@ ListSettings LoadDynamicListSettings SaveDynamicListSettings + SearchHistory СписокСсылка 87 diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index d8962a9ed..60addee1f 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -264,6 +264,10 @@ СвойстваДополнительныхРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ДополнительныеРеквизиты, "ТипЗначения, МногострочноеПолеВвода"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + КонецЕсли; + // Выполнение операций изменения. Для Каждого Операция Из Параметры.ИзменяемыеРеквизиты Цикл @@ -283,26 +287,9 @@ Продолжить; КонецЕсли; - НайденнаяСтрока = ИзменяемыйОбъект.ДополнительныеРеквизиты.Найти(Операция.Свойство, "Свойство"); - СвойстваРеквизита = СвойстваДополнительныхРеквизитов[Операция.Свойство]; - СоставнойТип = СвойстваРеквизита.ТипЗначения.Типы().Количество() > 1; - Если (СоставнойТип И Значение <> Неопределено) - Или (Не СоставнойТип И ЗначениеЗаполнено(Значение)) Тогда - Если НайденнаяСтрока = Неопределено Тогда - НайденнаяСтрока = ИзменяемыйОбъект.ДополнительныеРеквизиты.Добавить(); - НайденнаяСтрока.Свойство = Операция.Свойство; - КонецЕсли; - НайденнаяСтрока.Значение = Значение; - - МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); - Если МодульУправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку(СвойстваРеквизита.ТипЗначения, СвойстваРеквизита.МногострочноеПолеВвода) Тогда - НайденнаяСтрока.ТекстоваяСтрока = Значение; - КонецЕсли; - Иначе - Если НайденнаяСтрока <> Неопределено Тогда - ИзменяемыйОбъект.ДополнительныеРеквизиты.Удалить(НайденнаяСтрока); - КонецЕсли; - КонецЕсли; + ЗначенияСвойств = Новый Соответствие; + ЗначенияСвойств.Вставить(Операция.Свойство, Значение); + МодульУправлениеСвойствами.УстановитьСвойстваУОбъекта(ИзменяемыйОбъект, ЗначенияСвойств); ИмяРеквизитаФормы = ПрефиксИмениДопРеквизита() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); Результат.ИзменяемыеДопРеквизитыОбъекта.Вставить(ИмяРеквизитаФормы, Значение); @@ -313,11 +300,15 @@ Продолжить; КонецЕсли; - МенеджерЗаписи = РегистрыСведений["ДополнительныеСведения"].СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Объект = ИзменяемыйОбъект.Ссылка; - МенеджерЗаписи.Свойство = Операция.Свойство; - МенеджерЗаписи.Значение = Значение; - Результат.МассивЗаписейДопСведений.Добавить(МенеджерЗаписи); + ТаблицаСвойств = Новый ТаблицаЗначений; + ТаблицаСвойств.Колонки.Добавить("Свойство"); + ТаблицаСвойств.Колонки.Добавить("Значение"); + + ОписаниеСвойства = ТаблицаСвойств.Добавить(); + ОписаниеСвойства.Свойство = Операция.Свойство; + ОписаниеСвойства.Значение = Значение; + + МодульУправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ИзменяемыйОбъект.Ссылка, ТаблицаСвойств); ИмяРеквизитаФормы = ПрефиксИмениДопСведения() + СтрЗаменить(Строка(Операция.Свойство.УникальныйИдентификатор()), "-", "_"); Результат.ИзменяемыеДопСведенияОбъекта.Вставить(ИмяРеквизитаФормы, Значение); diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo index 50807c6db..e32e81be3 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ГрупповоеИзменениеРеквизитов.mdo @@ -169,19 +169,6 @@ - - АдресДвоичныхДанныхВнешнейОбработки - - ru - Адрес двоичных данных внешней обработки - - - String - - - - - Форма diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Help/ru.html b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Help/ru.html index f032574e3..150527c18 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Help/ru.html +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Forms/АрхивАнкет/Help/ru.html @@ -1,7 +1,7 @@ -

                    Предназначен для просмотра анкет, работа над которыми была завершена.

                    +

                    Предназначен для просмотра анкет, работа над которыми была завершена.

                    Открывается с рабочего стола респондента по команде Архив анкет.

                    -

                    В списке отображаются анкеты, у которых составитель установил флажок Показывать в архиве анкет.

                    +

                    В списке отображаются анкеты, у которых составитель установил флажок Показывать в архиве анкет.

                    В списке выводится:

                    • Анкета - наименование анкеты;
                    • Дата заполнения - дата и время окончания работы над анкетой.

                    Просмотр анкеты

                    diff --git a/SSL/src/DataProcessors/ДоступныеАнкеты/Help/ru.html b/SSL/src/DataProcessors/ДоступныеАнкеты/Help/ru.html index 441f123bd..e5103864d 100644 --- a/SSL/src/DataProcessors/ДоступныеАнкеты/Help/ru.html +++ b/SSL/src/DataProcessors/ДоступныеАнкеты/Help/ru.html @@ -1,6 +1,6 @@ -

                    Предназначен для просмотра и редактирования анкет, доступных респонденту.

                    -

                    После входа в приложение респондента для него открывается список Доступные анкеты. В списке выводятся наименования анкет.

                    +

                    Предназначен для просмотра и редактирования анкет, доступных респонденту.

                    +

                    После входа в приложение респондента для него открывается список Доступные анкеты. В списке выводятся наименования анкет.

                    Если опрос был запланирован с ограничением по времени проведения, то в списке доступных анкет после названия анкеты будет указан срок, до которого необходимо ее заполнить.

                    Если анкета уже заполнялась ранее, но не была завершена (составителем разрешено ее заполнение в несколько подходов), то в списке доступных анкет указывается дата ее последнего редактирования.

                    Ранее заполненные анкеты респондент может посмотреть по команде Архив анкет.

                    diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 2f0ed409f..3d5210b73 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -1365,22 +1365,101 @@ Auto InCommandBarAndInAdditionalSubmenu
                    - - ПросмотрТекущегоСобытияВОтдельномОкне - 38 + + ГруппаОткрыть + 537 + + ПросмотрТекущегоСобытияВОтдельномОкне + 38 + + <key>ru</key> + <value>Открыть</value> + + true + true + + true + + false + + ПросмотрТекущегоСобытияВОтдельномОкнеРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.Command.ПросмотрСобытия + Normal + PictureAndText + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + ОткрытьДанныеДляПросмотра + 40 + + <key>ru</key> + <value>Открыть данные для просмотра</value> + + true + true + + true + + false + + ОткрытьДанныеДляПросмотраРасширеннаяПодсказка + 127 + 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> - true - true - - true - - false - ПросмотрТекущегоСобытияВОтдельномОкнеРасширеннаяПодсказка - 126 + ГруппаОткрытьРасширеннаяПодсказка + 538 Label true true @@ -1388,62 +1467,9 @@ Left - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне - Normal - PictureAndText - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - ОткрытьДанныеДляПросмотра - 40 - - <key>ru</key> - <value>Открыть данные для просмотра</value> - - true - true - - true - - false - - ОткрытьДанныеДляПросмотраРасширеннаяПодсказка - 127 - Label - true - true - - Left - - - Form.Command.ОткрытьДанныеДляПросмотра - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto + + Compact + КомандыОтбора @@ -1453,7 +1479,7 @@ 108 <key>ru</key> - <value>Интервал</value> + <value>Интервал...</value> true true @@ -1478,22 +1504,101 @@ UserCmds Auto - - УстановитьОтбор - 42 - - <key>ru</key> - <value>Установить отбор</value> - + + ГруппаОтборы + 535 + + УстановитьОтбор + 42 + + <key>ru</key> + <value>Установить отбор...</value> + + true + true + + true + + false + + УстановитьОтборРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Form.Command.УстановитьОтбор + Normal + PictureAndText + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + + + УстановитьОтборПоЗначению + 43 + + <key>ru</key> + <value>Установить отбор по значению в колонке</value> + + true + true + + true + + false + + УстановитьОтборПоЗначениюРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + Form.Command.УстановитьОтборПоЗначению + Normal + Auto + true + true + UserCmds + + Style.ButtonTextColor + + + Style.ButtonBackColor + + + Style.BorderColor + + Auto + true true true - false + + <key>ru</key> + <value>Отборы</value> + - УстановитьОтборРасширеннаяПодсказка - 123 + ГруппаОтборыРасширеннаяПодсказка + 536 Label true true @@ -1501,62 +1606,9 @@ Left - Form.Command.УстановитьОтбор - Normal - PictureAndText - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - УстановитьОтборПоЗначениюВТекущейКолонке - 43 - - <key>ru</key> - <value>Установить отбор по значению в текущей колонке</value> - - true - true - - true - - false - - УстановитьОтборПоЗначениюВТекущейКолонкеРасширеннаяПодсказка - 124 - Label - true - true - - Left - - - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto + + Compact + ОтключитьОтбор @@ -1721,7 +1773,7 @@ Left
                    - Form.Command.ОбновитьТекущийСписок + Form.Command.ОбновитьСписок Normal Auto true @@ -2001,7 +2053,7 @@ Left - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке + Form.Command.УстановитьОтборПоЗначению Normal Auto true @@ -2092,7 +2144,7 @@ Left - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Form.Command.ПросмотрСобытия Normal Auto true @@ -3386,7 +3438,7 @@ Left - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Form.Command.ПросмотрСобытия Normal PictureAndText true @@ -3539,7 +3591,7 @@ Left - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке + Form.Command.УстановитьОтборПоЗначению Normal Auto true @@ -3719,7 +3771,7 @@ Left - Form.Command.ОбновитьТекущийСписок + Form.Command.ОбновитьСписок Normal Auto true @@ -3999,7 +4051,7 @@ Left - Form.Command.УстановитьОтборПоЗначениюВТекущейКолонке + Form.Command.УстановитьОтборПоЗначению Normal Auto true @@ -4090,7 +4142,7 @@ Left - Form.Command.ПросмотрТекущегоСобытияВОтдельномОкне + Form.Command.ПросмотрСобытия Normal Auto true @@ -5046,7 +5098,7 @@ - ПросмотрТекущегоСобытияВОтдельномОкне + ПросмотрСобытия <key>ru</key> <value>Открыть</value> @@ -5054,15 +5106,12 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Просмотр текущего события в отдельном окне</value> + <value>Просмотр события в отдельном окне</value> </toolTip> <use> <common>true</common> </use> <shortcut>F2</shortcut> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.Properties</picture> - </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ПросмотрТекущегоСобытияВОтдельномОкне</name> @@ -5148,15 +5197,15 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>УстановитьОтборПоЗначениюВТекущейКолонке</name> + <name>УстановитьОтборПоЗначению</name> <title> <key>ru</key> - <value>Установить отбор по значению в текущей колонке</value> + <value>Установить отбор по значению в колонке</value> 5 ru - Установить отбор по значению в текущей колонке + Установить отбор по значению в колонке true @@ -5198,15 +5247,15 @@ Auto - ОбновитьТекущийСписок + ОбновитьСписок <key>ru</key> - <value>Обновить текущий список</value> + <value>Обновить список</value> 8 ru - Обновить текущий список + Обновить список событий true @@ -5233,11 +5282,15 @@ true + + CommonPicture.Скачать + ВыгрузитьЖурналДляПередачиВТехподдержку + TextPicture Auto Auto diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index ddc8eda25..61dd96b05 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -210,7 +210,7 @@ Элемент.ТекущийЭлемент <> Элементы.Дата И Элемент.ТекущийЭлемент <> Элементы.Дата2; - Элементы.УстановитьОтборПоЗначениюВТекущейКолонке.Доступность + Элементы.УстановитьОтборПоЗначению.Доступность = ДоступенОтборПоЗначениюВТекущейКолонке; Элементы.УстановитьОтборПоЗначениюВТекущейКолонке2.Доступность diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form index e555ada54..544683b0b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form @@ -384,21 +384,81 @@ КоманднаяПанельВажность 313 - - УстановитьФлажки - 243 - - <key>ru</key> - <value>Установить флажки</value> - + + ГруппаФлажкиВажность + 362 + + УстановитьФлажки + 243 + + <key>ru</key> + <value>Установить флажки</value> + + true + true + + true + + + УстановитьФлажкиРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + Form.Command.УстановитьФлажкиВажности + Normal + Auto + true + true + UserCmds + Auto + + + СнятьФлажки + 245 + + <key>ru</key> + <value>Снять флажки</value> + + true + true + + true + + + СнятьФлажкиРасширеннаяПодсказка + 246 + Label + true + true + + Left + + + Form.Command.СнятьФлажкиВажности + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Важность</value> + - УстановитьФлажкиРасширеннаяПодсказка - 244 + ГруппаФлажкиВажностьРасширеннаяПодсказка + 363 Label true true @@ -406,43 +466,9 @@ Left - Form.Command.УстановитьФлажкиВажности - Normal - Auto - true - true - UserCmds - Auto - - - СнятьФлажки - 245 - - <key>ru</key> - <value>Снять флажки</value> - - true - true - - true - - - СнятьФлажкиРасширеннаяПодсказка - 246 - Label - true - true - - Left - - - Form.Command.СнятьФлажкиВажности - Normal - Auto - true - true - UserCmds - Auto + + Compact + true true @@ -2308,17 +2334,161 @@ Auto + + ФормаСохранитьЗначения + 364 + true + true + + true + + + ФормаСохранитьЗначенияРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + Form.StandardCommand.SaveValues + Normal + Auto + true + true + UserCmds + Auto + + + ФормаВосстановитьЗначения + 368 + true + true + + true + + + ФормаВосстановитьЗначенияРасширеннаяПодсказка + 369 + Label + true + true + + Left + + + Form.StandardCommand.RestoreValues + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиФормы + 360 + + СохранитьНастройкиВФайл + 356 + + <key>ru</key> + <value>Сохранить настройки в файл...</value> + + true + true + + true + + + СохранитьНастройкиВФайлРасширеннаяПодсказка + 357 + Label + true + true + + Left + + + Form.Command.СохранитьНастройкиВФайл + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ЗагрузитьНастройкиИзФайла + 358 + + <key>ru</key> + <value>Загрузить настройки из файла...</value> + + true + true + + true + + + ЗагрузитьНастройкиИзФайлаРасширеннаяПодсказка + 359 + Label + true + true + + Left + + + Form.Command.ЗагрузитьНастройкиИзФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Форма группа1</value> + + + НастройкиФормыРасширеннаяПодсказка + 361 + Label + true + true + + Left + + + + Left + true NotificationProcessing ОбработкаОповещения + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере DontBlock + UseList true true Vertical @@ -2352,6 +2522,9 @@ СписокПользователей.ValueType + + СписокПользователей + String @@ -2371,6 +2544,9 @@ true + + События + @@ -2400,6 +2576,9 @@ Компьютеры.ValueType + + Компьютеры + String @@ -2429,6 +2608,9 @@ Приложения.ValueType + + Приложения + String @@ -2458,6 +2640,9 @@ Важность.ValueType + + Важность + String @@ -2482,6 +2667,9 @@ true + + Комментарий + Метаданные @@ -2508,6 +2696,9 @@ Метаданные.ValueType + + Метаданные + String @@ -2540,6 +2731,9 @@ true + + Данные + ПредставлениеДанных @@ -2559,6 +2753,9 @@ true + + ПредставлениеДанных + СтатусТранзакции @@ -2585,6 +2782,9 @@ СтатусТранзакции.ValueType + + СтатусТранзакции + String @@ -2609,6 +2809,9 @@ true + + Транзакция + СтрСеансы @@ -2627,6 +2830,9 @@ true + + СтрСеансы + Сеансы @@ -2674,6 +2880,9 @@ РабочиеСерверы.ValueType + + РабочиеСерверы + String @@ -2706,6 +2915,9 @@ ОсновныеIPПорты.ValueType + + ОсновныеIPПорты + Number @@ -2740,6 +2952,9 @@ ВспомогательныеIPПорты.ValueType + + ВспомогательныеIPПорты + Number @@ -2807,6 +3022,9 @@ true + + ИнтервалОтбораДатаНачала + ИнтервалОтбораДатаОкончания @@ -2825,6 +3043,9 @@ true + + ИнтервалОтбораДатаОкончания + СобытияОтображаемые @@ -2892,6 +3113,9 @@ true + + РазделениеДанныхСеанса + @@ -2912,6 +3136,9 @@ true + + ДанныеНесколькоЗначений + ДанныеСписок @@ -2929,6 +3156,9 @@ true + + ДанныеСписок + Boolean @@ -2960,6 +3190,9 @@ true + + ОбластиДанных + @@ -3110,6 +3343,42 @@ DontUse Auto + + СохранитьНастройкиВФайл + + <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 new file mode 100644 index 000000000..b5219b5f2 --- /dev/null +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Help/ru.html @@ -0,0 +1,24 @@ + +

                    С помощью отборов можно отфильтровать события в журнале регистрации.

                    +
                    • В поле Интервал выберите период, укажите Начало и Окончание периода;
                    • +
                    • В списке Важность с помощью флажков выберите один или несколько видов событий(Ошибка, Предупреждение, Информация, Примечание), по которым нужно произвести отбор. По умолчанию установлены все флажки;
                    • +
                    • В поле События выберите значения из списка с помощью флажков (по умолчанию установлены все флажки). В событиях со сложными структурами данных наглядно видно их содержимое как в карточке событий, так и в самом журнале;
                    • +
                    • В поле Пользователи выберите значения из списка с помощью флажков (в этом списке указываются только пользователи, отраженные в журнале регистрации. По умолчанию флажки сняты);
                    • +
                    • В поле Приложения выберите значения из списка с помощью флажков (Конфигуратор, Тонкий клиент, Фоновое задание. По умолчанию флажки сняты);
                    • +
                    • В поле Компьютеры выберите нужные значения из списка с помощью флажков (по умолчанию флажки сняты);
                    • +
                    • В поле Сеансы перечислите через ";" нужные номера сеансов;
                    • +
                    • В группе полей Данные можно выбрать для поиска один из видов отбора: +
                      • В поле Метаданные выберите нужные значения из списка (список упорядочен по типу данных) для отбора с помощью флажков:выберите нужное наименование списка, документа и т.д. например, "справочник Классификатор банков РФ";
                      • +
                      • В поле Данные можно произвести выбор элементов для поиска из списков приложения: +
                        • выберите Тип данных, например, "Банк";
                        • +
                        • из соответствующего списка приложения, например, "Классификатора банков РФ", выберите конкретный объект приложения, например, "Сбербанк";
                        • +
                        • с помощью флажка Несколько значений можно выбрать события по нескольким интересующим ссылкам.
                    • +
                    • В поле Представление данных наберите данные для поиска вручную или скопируйте из списка;
                    • +
                    • В группе полей Транзакция выберите из списка с помощью флажков Статус транзакции (Нет транзакции, Зафиксирована, Не завершена, Отменена). По умолчанию установлены все флажки. Также возможен отбор по полю Идентификатор транзакции.
                    • +
                    • В группе полей Прочее можно выбрать с помощью флажков для отбора Рабочие серверы, Основные IP-порты, Вспомогательные IP-порты, также можно провести отбор по полю Комментарий.
                    • +
                    • После указания полей для отбора нажмите ОК. После этого события будут отобраны и ссылка примет вид перечисления критериев отбора.
                    • +
                    • Отображаются записи, удовлетворяющие заданным критериям отбора в количестве, не большем, чем значение поля Показывать.
                    • +
                    • С помощью команды Еще - Сохранить настройки файл можно сохранить настройки. Для этого укажите путь на компьютере, настройки сохраняются в формате XML.
                    • +
                    • Ранее сохраненные настройки можно загрузить из файла на компьютере с помощью кнопки Загрузить настройки из файла.


                    +

                    См. также:

                    + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index 40170509f..ae2fe9832 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -77,6 +77,27 @@ КонецПроцедуры +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + СобытияОтображаемые.Очистить(); + + Если События.Количество() = 0 Тогда + События = СобытияПоУмолчанию; + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда + СобытияОтображаемые = События.Скопировать(); + КонецЕсли; + + Элементы.Данные.Видимость = НЕ ДанныеНесколькоЗначений; + Элементы.ДанныеСписок.Видимость = ДанныеНесколькоЗначений; + + ОбновитьЗаголовкиГруппФормы(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -273,6 +294,29 @@ КонецЦикла; КонецПроцедуры +&НаКлиенте +Процедура СохранитьНастройкиВФайл(Команда) + + АдресВременногоХранилища = СохранитьНастройкиВоВременноеХранилище(); + + ПараметрыСохраненияФайла = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохраненияФайла.Диалог.Фильтр = НСтр("ru = 'Настройки журнала регистрации'") + "(*.xml)|*.xml"; + ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, АдресВременногоХранилища, "Settings.xml", ПараметрыСохраненияФайла); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройкиИзФайла(Команда) + + ПараметрыЗагрузкиФайла = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузкиФайла.Диалог.Заголовок = НСтр("ru = 'Выберите файл с настройками отбора журнала регистрации'"); + ПараметрыЗагрузкиФайла.Диалог.Фильтр = НСтр("ru = 'Файл xml'") + "(*.xml)|*.xml"; + + ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьНастройкиИзФайлаЗавершение", ЭтотОбъект); + ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузкиФайла); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -630,4 +674,419 @@ КонецФункции +&НаСервере +Процедура ОбновитьЗаголовкиГруппФормы() + + КоличествоОтмеченныхСтатусов = ОбщегоНазначенияКлиентСервер.ОтмеченныеЭлементы(СтатусТранзакции).Количество(); + Если КоличествоОтмеченныхСтатусов <> СтатусТранзакции.Количество() + Или ЗначениеЗаполнено(Транзакция) Тогда + Элементы.ГруппаТранзакции.Заголовок = Элементы.ГруппаТранзакции.Заголовок + " *"; + КонецЕсли; + + Если ЗначениеЗаполнено(РабочиеСерверы) + Или ЗначениеЗаполнено(ОсновныеIPПорты) + Или ЗначениеЗаполнено(ВспомогательныеIPПорты) Тогда + Элементы.ГруппаПрочее.Заголовок = Элементы.ГруппаПрочее.Заголовок + " *"; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СохранитьНастройкиВоВременноеХранилище() + + СохраняемыеНастройки = СохраняемыеНастройки(); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + ЗаписьXML.ЗаписатьНачалоЭлемента("Filters"); + + ЗаписьXML.ЗаписатьНачалоЭлемента("MainFilters"); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, СохраняемыеНастройки, НазначениеТипаXML.Явное); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Если ДанныеНесколькоЗначений Тогда + Для Каждого ОтбираемыеДанные Из ДанныеСписок Цикл + ЗаписьXML.ЗаписатьНачалоЭлемента("DataFilters"); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОтбираемыеДанные.Значение, НазначениеТипаXML.Явное); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + ИначеЕсли ЗначениеЗаполнено(Данные) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("DataFilters"); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Данные, НазначениеТипаXML.Явное); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + СтрокаXML = ЗаписьXML.Закрыть(); + + ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаXML); + АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); + + Возврат АдресВременногоХранилищаФайла; + +КонецФункции + +&НаСервере +Функция СохраняемыеНастройки() + + СохраняемыеНастройки = Новый СписокЗначений(); + СохраняемыеНастройки.Добавить(Важность, "Level"); + Если ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда + СохраняемыеНастройки.Добавить(Новый СписокЗначений(), "Event"); + Иначе + СохраняемыеНастройки.Добавить(События, "Event"); + КонецЕсли; + СохраняемыеНастройки.Добавить(Метаданные, "Metadata"); + СохраняемыеНастройки.Добавить(ИнтервалОтбораДатаНачала, "StartDate"); + СохраняемыеНастройки.Добавить(ИнтервалОтбораДатаОкончания, "EndDate"); + СохраняемыеНастройки.Добавить(СписокПользователей, "User"); + СохраняемыеНастройки.Добавить(Приложения, "ApplicationName"); + СохраняемыеНастройки.Добавить(Компьютеры, "Computer"); + СохраняемыеНастройки.Добавить(СтрСеансы, "Sessions"); + СохраняемыеНастройки.Добавить(ПредставлениеДанных, "DataPresentation"); + СохраняемыеНастройки.Добавить(СтатусТранзакции, "TransactionStatus"); + СохраняемыеНастройки.Добавить(РабочиеСерверы, "ServerName"); + СохраняемыеНастройки.Добавить(РазделениеДанныхСеанса, "SessionDataSeparation"); + СохраняемыеНастройки.Добавить(Транзакция, "TransactionID"); + СохраняемыеНастройки.Добавить(Комментарий, "Comment"); + СохраняемыеНастройки.Добавить(ОсновныеIPПорты, "Port"); + СохраняемыеНастройки.Добавить(ВспомогательныеIPПорты, "SyncPort"); + СохраняемыеНастройки.Добавить(ОбластиДанных, "DataArea"); + + Возврат СохраняемыеНастройки; + +КонецФункции + +&НаКлиенте +Процедура ЗагрузитьНастройкиИзФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗагрузитьНастройкиИзФайлаНаСервере(Результат.Хранение); + ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки отбора'"),, НСтр("ru = 'Настройки отбора загружены'")); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьНастройкиИзФайлаНаСервере(АдресВоВременномХранилище) + + СписокПараметровОтбораИзФайла = НастройкиИзФайла(АдресВоВременномХранилище); + + ПрименитьНастройкиИзФайла(СписокПараметровОтбораИзФайла); + + СобытияОтображаемые.Очистить(); + Если События.Количество() = 0 Тогда + События = СобытияПоУмолчанию; + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда + СобытияОтображаемые = События.Скопировать(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция НастройкиИзФайла(АдресВоВременномХранилище) + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); + + СтрокаXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + + МассивДанных = Новый Массив; + НастройкиОтбора = Новый СписокЗначений; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + Если ЧтениеXML.Имя = "MainFilters" Тогда + ЧтениеXML.Прочитать(); + НастройкиОтбора = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + ИначеЕсли ЧтениеXML.Имя = "DataFilters" Тогда + ЧтениеXML.Прочитать(); + ТипXML = СериализаторXDTO.ПолучитьXMLТип(ЧтениеXML); + Если ТипXML = XMLТип(Тип("Строка")) + Или ТипXML = XMLТип(Тип("Дата")) + Или ТипXML = XMLТип(Тип("Число")) + Или ТипXML = XMLТип(Тип("Булево")) Тогда + МассивДанных.Добавить(СериализаторXDTO.ПрочитатьXML(ЧтениеXML)); + Иначе + Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + Если ЗначениеЗаполнено(Значение) + И ТипЗнч(Значение) <> Тип("Строка") + И ОбщегоНазначения.СсылкаСуществует(Значение) Тогда + МассивДанных.Добавить(Значение); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + НастройкиОтбора.Добавить(МассивДанных, "Data"); + + ЧтениеXML.Закрыть(); + + Возврат НастройкиОтбора; + +КонецФункции + +&НаСервере +Процедура ПрименитьНастройкиИзФайла(СписокПараметровОтбора) + + ДоступныеОтборы = ДоступныеОтборыЖурналаРегистрации(); + + Для Каждого ПараметрОтбора Из СписокПараметровОтбора Цикл + + ИмяПараметра = ПараметрОтбора.Представление; + Значение = ПараметрОтбора.Значение; + + Если ВРег(ИмяПараметра) = ВРег("StartDate") Тогда + // ДатаНачала/StartDate + ИнтервалОтбора.ДатаНачала = Значение; + ИнтервалОтбораДатаНачала = Значение; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("EndDate") Тогда + // ДатаОкончания/EndDate + ИнтервалОтбора.ДатаОкончания = Значение; + ИнтервалОтбораДатаОкончания = Значение; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("User") Тогда + // Пользователь/User + СписокПользователей = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Пользователь"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Event") Тогда + // Событие/Event + События = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Событие"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Computer") Тогда + // Компьютер/Computer + Компьютеры = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Компьютер"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("ApplicationName") Тогда + // ИмяПриложения/ApplicationName + Приложения = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "ИмяПриложения"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Comment") Тогда + // Комментарий/Comment + Комментарий = Значение; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Metadata") Тогда + // Метаданные/Metadata + Метаданные = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "Метаданные"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Data") Тогда + // Данные/Data + Если ЗначениеЗаполнено(Значение) И Значение.Количество() > 1 Тогда + ДанныеНесколькоЗначений = Истина; + ДанныеСписок.ЗагрузитьЗначения(Значение); + ИначеЕсли ЗначениеЗаполнено(Значение) И Значение.Количество() = 1 Тогда + ДанныеНесколькоЗначений = Ложь; + Данные = Значение[0]; + Иначе + Данные = Неопределено; + ДанныеСписок.Очистить(); + КонецЕсли; + + Элементы.Данные.Видимость = НЕ ДанныеНесколькоЗначений; + Элементы.ДанныеСписок.Видимость = ДанныеНесколькоЗначений; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("DataPresentation") Тогда + // ПредставлениеДанных/DataPresentation + ПредставлениеДанных = Значение; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("TransactionID") Тогда + // Транзакция/TransactionID + Транзакция = Значение; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("ServerName") Тогда + // РабочийСервер/ServerName + РабочиеСерверы = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "РабочийСервер"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Sessions") Тогда + // Сеансы/Sessions + СтрСеансы = Значение; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Port") Тогда + // ОсновнойIPПорт/Port + ОсновныеIPПорты = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "ОсновнойIPПорт"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("SyncPort") Тогда + // ВспомогательныйIPПорт/SyncPort + ВспомогательныеIPПорты = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы, "ВспомогательныйIPПорт"); + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("Level") Тогда + // Уровень/Level + Для Каждого ЭлементСпискаЗначений Из Важность Цикл + ЗначениеНастройки = Значение.НайтиПоЗначению(ЭлементСпискаЗначений.Значение); + Если ЗначениеНастройки <> Неопределено Тогда + ЭлементСпискаЗначений.Пометка = ЗначениеНастройки.Пометка; + Иначе + ЭлементСпискаЗначений.Пометка = Ложь; + КонецЕсли; + КонецЦикла; + + ИначеЕсли ВРег(ИмяПараметра) = ВРег("TransactionStatus") Тогда + // СтатусТранзакции/TransactionStatus + Для Каждого ЭлементСпискаЗначений Из СтатусТранзакции Цикл + ЗначениеНастройки = Значение.НайтиПоЗначению(ЭлементСпискаЗначений.Значение); + Если ЗначениеНастройки <> Неопределено Тогда + ЭлементСпискаЗначений.Пометка = ЗначениеНастройки.Пометка; + Иначе + ЭлементСпискаЗначений.Пометка = Ложь; + КонецЕсли; + КонецЦикла; + + ИначеЕсли Элементы.РазделениеДанныхСеанса.Видимость И ВРег(ИмяПараметра) = ВРег("SessionDataSeparation") Тогда + // РазделениеДанныхСеанса/SessionDataSeparation + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + РазделениеДанныхСеанса = ДоступныеРазделителиДанныхСеанса(Значение); + КонецЕсли; + + ИначеЕсли Элементы.ОбластиДанных.Видимость И ВРег(ИмяПараметра) = ВРег("DataArea") Тогда + // ОбластиДанных/DataArea + ОбластиДанных = ДоступныеЗначенияОтбора(Значение, ДоступныеОтборы.РазделениеДанныхСеансаЗначения, + "ОбластьДанныхОсновныеДанные"); + РазделениеДанныхСеанса = СписокВсехРазделителей(ОбластиДанных); + + КонецЕсли; + + КонецЦикла; + + ОбновитьЗаголовкиГруппФормы(); + +КонецПроцедуры + +&НаСервере +Функция ДоступныеЗначенияОтбора(ЗначениеОтбора, ДоступныеОтборы, ИмяПараметраОтбора) + + Результат = Новый СписокЗначений(); + + ДоступныеЗначенияОтбора = ДоступныеОтборы[ИмяПараметраОтбора]; + + Если ТипЗнч(ДоступныеЗначенияОтбора) = Тип("Массив") Тогда + Для Каждого ЭлементОтбора Из ЗначениеОтбора Цикл + Если ДоступныеЗначенияОтбора.Найти(ЭлементОтбора.Значение) <> Неопределено Тогда + Результат.Добавить(ЭлементОтбора.Значение, ЭлементОтбора.Представление); + КонецЕсли; + КонецЦикла; + + ИначеЕсли ТипЗнч(ДоступныеЗначенияОтбора) = Тип("Соответствие") Тогда + Для Каждого ЭлементОтбора Из ЗначениеОтбора Цикл + Если ДоступныеЗначенияОтбора[ЭлементОтбора.Значение] <> Неопределено Тогда + Результат.Добавить(ЭлементОтбора.Значение, ЭлементОтбора.Представление); + КонецЕсли; + КонецЦикла; + + ИначеЕсли ТипЗнч(ДоступныеЗначенияОтбора) = Тип("СписокЗначений") Тогда + Для Каждого ЭлементОтбора Из ЗначениеОтбора Цикл + НайденноеЗначение = ДоступныеЗначенияОтбора.НайтиПоЗначению(ЭлементОтбора.Представление); + Если НайденноеЗначение <> Неопределено Тогда + Результат.Добавить(НайденноеЗначение.Представление, НайденноеЗначение.Значение); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ДоступныеОтборыЖурналаРегистрации() + + ОтбираемыеПараметры = "Пользователь, Событие, Компьютер, ИмяПриложения, Метаданные, РабочийСервер, + | ОсновнойIPПорт, ВспомогательныйIPПорт, РазделениеДанныхСеанса.ОбластьДанныхОсновныеДанные"; + + ДоступныеПараметрыОтбора = ПолучитьЗначенияОтбораЖурналаРегистрации(ОтбираемыеПараметры); + + СписокПользователейДляОтбора = Новый СписокЗначений; + + ЗначенияОтбораПользователи = ДоступныеПараметрыОтбора["Пользователь"]; + + Для Каждого ЭлементСоответствия Из ЗначенияОтбораПользователи Цикл + + СписокПользователейДляОтбора.Добавить(ЭлементСоответствия.Значение, Строка(ЭлементСоответствия.Ключ)); + + КонецЦикла; + + УстановитьПривилегированныйРежим(Истина); + ПустойПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(""); + УстановитьПривилегированныйРежим(Ложь); + СписокПользователейДляОтбора.Добавить(Пользователи.ПолноеИмяНеуказанногоПользователя(), + Строка(ПустойПользовательИБ.УникальныйИдентификатор)); + + ДоступныеПараметрыОтбора["Пользователь"] = СписокПользователейДляОтбора; + + Если НЕ ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда + ДоступныеПараметрыОтбора.РазделениеДанныхСеансаЗначения["ОбластьДанныхОсновныеДанные"].Вставить("", НСтр("ru = '<Не задано>'")); + КонецЕсли; + + ОбработатьДоступныеПараметрыОтбора(ДоступныеПараметрыОтбора); + + Возврат ДоступныеПараметрыОтбора; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ОбработатьДоступныеПараметрыОтбора(ДоступныеПараметрыОтбора) + + Для Каждого ПараметрОтбора Из ДоступныеПараметрыОтбора Цикл + Если ПараметрОтбора.Ключ = "РазделениеДанныхСеансаЗначения" Тогда + ПреобразованныйНабор = Новый Соответствие; + Для Каждого ЭлементСоответствия Из ПараметрОтбора.Значение["ОбластьДанныхОсновныеДанные"] Цикл + ПреобразованныйНабор.Вставить(Формат(ЭлементСоответствия.Ключ, "ЧГ="), ЭлементСоответствия.Значение); + КонецЦикла; + + ПараметрОтбора.Значение["ОбластьДанныхОсновныеДанные"] = ПреобразованныйНабор; + + КонецЕсли + КонецЦикла; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДоступныеРазделителиДанныхСеанса(Значение) + + Результат = Новый СписокЗначений; + + РазделениеДанныхСоответствие = Новый Соответствие; + Если Значение.Количество() > 0 Тогда + Для Каждого РазделительСеанса Из Значение Цикл + РазделениеДанныхМассив = СтрРазделить(РазделительСеанса.Значение, "="); + РазделениеДанныхСоответствие.Вставить(РазделениеДанныхМассив[0], РазделениеДанныхМассив[1]); + КонецЦикла; + КонецЕсли; + + Если РазделениеДанныхСоответствие.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + + Если ОбщийРеквизит.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.НеИспользовать Тогда + Продолжить; + КонецЕсли; + + НайденноеЗначениеРазделителя = РазделениеДанныхСоответствие[ОбщийРеквизит.Имя]; + Если НайденноеЗначениеРазделителя <> Неопределено Тогда + ЗначениеРазделителя = ОбщийРеквизит.Имя + "=" + НайденноеЗначениеРазделителя; + ПредставлениеРазделителя = ОбщийРеквизит.Синоним + " = " + НайденноеЗначениеРазделителя; + Результат.Добавить(ЗначениеРазделителя, ПредставлениеРазделителя); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html index 616976978..bc879f855 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html @@ -1,9 +1,9 @@ -

                    Просмотр свойств события в приложении, отраженного в журнале регистрации.

                    -

                    Отображает полную информацию о событии в приложении, а не только те данные, которые показываются в журнале регистрации:

                    +

                    Просмотр свойств события в приложении, отраженного в журнале регистрации.

                    +

                    Отображает полную информацию о событии в приложении, а не только те данные, которые показываются в журнале регистрации:

                    • -
                      Пользователь - полное имя пользователя;
                      +
                      Пользователь - полное имя пользователя;
            • @@ -11,7 +11,7 @@
            • -
              Приложение - например, Тонкий клиент; 
              +
              Приложение - например, Тонкий клиент;
            • Компьютер - сетевое имя компьютера;
              @@ -20,13 +20,13 @@
              Группа полей Данные:
              • -
                Метаданные - тип объекта приложения и его наименование: список, вид документа и т.п.;
                +
                Метаданные - тип объекта приложения и его наименование: список, вид документа и т.п.;
              • -
                Данные - указание объекта приложения: указывается конкретный элемент списка, документ и т.п.;
                +
                Данные - указание объекта приложения: указывается конкретный элемент списка, документ и т.п.;
              • -

                Представление - указание объекта приложения.

              +

              Представление - указание объекта приложения.

          • Группа полей Событие:
            • @@ -35,7 +35,7 @@
            • Группа полей Сеанс - полная информация о сеансе, в котором произошло данное событие:
              • -
                Номер - номер сеанса; 
                +
                Номер - номер сеанса;
              • Рабочий сервер;
                @@ -51,6 +51,6 @@
                Идентификатор;
              • -
                Статус завершения транзакции - например, Зафиксирована.

            В журнале регистрации предусмотрена возможность управления составом отображаемых колонок, что позволяет настроить отображение только важной информации.

            +
            Статус завершения транзакции - например, Зафиксирована.

          В журнале регистрации предусмотрена возможность управления составом отображаемых колонок, что позволяет настроить отображение только важной информации.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index 11b648b41..08ba0bcda 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -1,8 +1,8 @@ -

          Администратору приложения часто требуется выяснить, какие события происходили в приложении в определенный момент времени или какие действия выполнял тот или иной пользователь. Для этих целей предназначен журнал регистрации.

          -

          В журнале регистрации могут фиксироваться основные действия, выполняемые по модификации данных, выполнению регламентных операций, подключению и отключению от приложения и т.д. Настройка журнала производится в Конфигураторе.

          -

          Открыть журнал регистрации можно по соответствующей команде раздела Администрирование - Обслуживание.

          -

          При работе с приложением могут возникать события следующих видов, каждый из которых отображается в журнале регистрации специальным значком:

          +

          Администратору приложения часто требуется выяснить, какие события происходили в приложении в определенный момент времени или какие действия выполнял тот или иной пользователь. Для этих целей предназначен журнал регистрации.

          +

          В журнале регистрации могут фиксироваться основные действия, выполняемые по модификации данных, выполнению регламентных операций, подключению и отключению от приложения и т.д. Настройка журнала производится в Конфигураторе.

          +

          Открыть журнал регистрации можно по соответствующей команде раздела Администрирование - Обслуживание.

          +

          При работе с приложением могут возникать события следующих видов, каждый из которых отображается в журнале регистрации специальным значком:

          @@ -14,16 +14,16 @@
          Дата, время - помимо даты и времени проставляется значок, отображающий вид события;
        • -
          Пользователь - полное имя пользователя;
          +
          Пользователь - полное имя пользователя;
        • Компьютер - сетевое имя компьютера;
        • -
          Приложение - например, Тонкий клиент; 
          +
          Приложение - например, Тонкий клиент;
        • -
          Сеанс - номер сеанса; 
          +
          Сеанс - номер сеанса;
        • Событие - тип события;
          @@ -32,79 +32,34 @@
          Данные, Комментарий - указание объекта приложения: указывается конкретный элемент списка, документ и т.п.; в комментарии - краткое описание события;
        • -
          Метаданные - тип объекта приложения и его наименование: список, вид документа и т.п.
        • Для того чтобы настроить количество, видимость и взаимное расположение колонок журнала регистрации, нажмите Еще - Изменить форму.

          +
          Метаданные - тип объекта приложения и его наименование: список, вид документа и т.п.

          Для того чтобы настроить количество, видимость и взаимное расположение колонок журнала регистрации, нажмите Еще - Изменить форму.

          Сохранение журнала регистрации на компьютер

          -
          • Нажмите Выгрузить в файл, укажите путь для сохранения журнала на компьютер. Журнал сохраняется в виде файла XML, просмотреть его можно, например, в приложении MS Excel.

          Обновление списка событий

          -
          • Список событий не является динамическим списком. Для того чтобы увидеть события, которые попали в журнал регистрации после его открытия, нажмите  Обновить текущий список или клавишу F5. 

          Количество событий

          +
          • Нажмите Выгрузить в файл, укажите путь для сохранения журнала на компьютер. Журнал сохраняется в виде файла XML, просмотреть его можно, например, в приложении MS Excel.

          Обновление списка событий

          +
          • Список событий не является динамическим списком. Для того чтобы увидеть события, которые попали в журнал регистрации после его открытия, нажмите Обновить текущий список или клавишу F5.

          Количество событий

          • Журнал отображает фиксированное количество записей, которое указывается в поле Показывать (По умолчанию равно 200). Кроме предопределенных значений (200, 500, 1000 и 10000 событий) можно ввести произвольное количество событий, которое будет сохранено.

          Отборы

          С помощью отборов можно отфильтровать события в журнале регистрации.

          • -
            В поле быстрого отбора Критичность выберите значения Ошибки или Предупреждения, для того чтобы увидеть определенные виды событий. По умолчанию в журнале показаны Все события.
            +
            В поле быстрого отбора Критичность выберите значения Ошибки или Предупреждения, для того чтобы увидеть определенные виды событий. По умолчанию в журнале показаны Все события.
          • -
            Для быстрой установки периода просмотра событий журнала нажмите Интервал. Также к установке интервалов дат можно перейти с помощью двойного щелчка по содержимому колонки Дата, Время.
            +
            Для быстрой установки периода просмотра событий журнала нажмитеИнтервал. Также к установке интервалов дат можно перейти с помощью двойного щелчка по содержимому колонки Дата, Время.
          • -
            Выделите данные в одной из колонок журнала, нажмите Установить отбор по значению в текущей колонке. Будут отобраны события журнала, содержащие эти данные. Также можно найти эту команду в контекстном меню по правой кнопке мыши.
            +
            Выделите данные в одной из колонок журнала, нажмите Установить отбор по значению в текущей колонке. Будут отобраны события журнала, содержащие эти данные. Также можно найти эту команду в контекстном меню по правой кнопке мыши.
          • -
            Для того чтобы отобрать события по одному или нескольким критериям, нажмитеУстановить отбор. Также можно пройти по ссылке в поле Отбор. Если заданы какие-либо отборы (в том числе и быстрые), ссылка принимает значение критериев отбора, если никаких отборов не установлено, то принимает значение Не установлен. Производится установка фильтров отбора:
            +
            Для того чтобы отобрать события по одному или нескольким критериям, нажмитеУстановить отбор. Также можно пройти по ссылке в поле Отбор. Если заданы какие-либо отборы (в том числе и быстрые), ссылка принимает значение критериев отбора, если никаких отборов не установлено, то принимает значение Не установлен.
          • +
          • +
            Для того чтобы отключить все отборы (в том числе и быстрые), нажмите Отключить отбор или выполните команду Еще - Отключить отбор. Эту команду также можно найти в контекстном меню по правой кнопке мыши.

          Просмотр события

          • -
            В поле Интервал выберите период, укажите Начало и Окончание периода;
            +
            Для просмотра детальной информации о событии выделите его в списке, нажмите Открыть. Можно найти эту команду в контекстном меню по правой кнопке мыши.
          • -
            В списке Важность с помощью флажков выберите один или несколько видов событий(Ошибка, Предупреждение, Информация, Примечание), по которым нужно произвести отбор. По умолчанию установлены все флажки;
            -
          • -
          • -
            В поле События выберите значения из списка с помощью флажков (по умолчанию установлены все флажки). В событиях со сложными структурами данных наглядно видно их содержимое как в карточке событий, так и в самом журнале;
            -
          • -
          • -
            В поле Пользователи выберите значения из списка с помощью флажков (в этом списке указываются только пользователи, отраженные в журнале регистрации. По умолчанию флажки сняты);
            -
          • -
          • -
            В поле Приложения выберите значения из списка с помощью флажков (Конфигуратор, Тонкий клиент, Фоновое задание. По умолчанию флажки сняты);
            -
          • -
          • -
            В поле Компьютеры выберите нужные значения из списка с помощью флажков (по умолчанию флажки сняты);
            -
          • -
          • -
            В поле Сеансы перечислите через ";" нужные номера сеансов;
            -
          • -
          • В группе полей Данные можно выбрать для поиска один из видов отбора: +
            Также можно просмотреть событие с помощью двойного щелчка мыши по нужной строке.

          Просмотр объекта приложения

          +

          Если с событием связан некоторый объект приложения, то этот объект можно открыть для просмотра.

          • -
            В поле Метаданные выберите нужные значения из списка (список упорядочен по типу данных) для отбора с помощью флажков:выберите нужное наименование списка, документа и т.д. например, "справочник Классификатор банков РФ";
            -
          • -
          • В поле Данные можно произвести выбор элементов для поиска из списков приложения: -
            • -
              выберите Тип данных, например, "Банк"; 
              -
            • -
            • -
              Из соответствующего списка приложения, например, "Классификатора банков РФ", выберите конкретный объект приложения, например, "Сбербанк";
          -
        • -
          в поле Представление данных наберите данные для поиска вручную или скопируйте из списка;
          -
        • -
        • -
          В группе полей Транзакция выберите из списка с помощью флажков Статус транзакции (Нет транзакции, Зафиксирована, Не завершена, Отменена). По умолчанию установлены все флажки. Также возможен отбор по полю Идентификатор транзакции.
          -
        • -
        • -
          В группе полей Прочее можно выбрать с помощью флажков для отбора Рабочие серверы, Основные IP-порты, Вспомогательные IP-порты, также можно провести отбор по полю Комментарий.
        • -
        • -
          После указания полей для отбора нажмите ОК. После этого события будут отобраны и ссылка примет вид перечисления критериев отбора.
          -
        • -
        • -
          Отображаются записи, удовлетворяющие заданным критериям отбора в количестве, не большем, чем значение поля Показывать.
          -
        • -
        • -
          Для того чтобы отключить все отборы (в том числе и быстрые), нажмите Отключить отбор или выполните команду Еще - Отключить отбор. Эту команду также можно найти в контекстном меню по правой кнопке мыши.
        • Просмотр события

          -
          • -
            Для просмотра детальной информации о событии выделите его в списке, нажмите  Открыть. Можно найти эту команду в контекстном меню по правой кнопке мыши.
            -
          • -
          • -
            Также можно просмотреть событие с помощью двойного щелчка мыши по нужной строке. 

          Просмотр объекта приложения

          -

          Если с событием связан некоторый объект приложения, то этот объект можно открыть для просмотра.

          -
          • -
            Выделите нужные данные в колонке Данные, Комментарий соответствующего события и нажмите  Открыть данные для просмотра. Также можно найти эту команду в контекстном меню по правой кнопке мыши.
            +
            Выделите нужные данные в колонке Данные, Комментарий соответствующего события и нажмите Открыть данные для просмотра. Также можно найти эту команду в контекстном меню по правой кнопке мыши.
          • Открыть данные для просмотра можно также двойным щелчком мыши по содержимому колонки Данные, Комментарий.

          См. также:

          diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo b/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo index 746830b5b..0a4b366f8 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ЖурналРегистрации.mdo @@ -32,6 +32,11 @@ ruОтбор журнала регистрации + + + ru + + PersonalComputerMobileDevice diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form index 1825f2be6..4aef0ef18 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form @@ -619,7 +619,7 @@ 609 <key>ru</key> - <value>Для загрузки данных необходимо, сохранить бланк в файл для заполнения в другом приложении. + <value>Для загрузки данных необходимо сохранить бланк в файл для заполнения в другом приложении. Затем загрузить заполненную таблицу в одном из форматов: • Книги Microsoft Excel 97 (.xls) и Excel 2007 (.xlsx) • Электронные таблицы LibreOffice Calc (.ods) diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html index 22d131c6f..7b7908c0c 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html @@ -1,15 +1,15 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Предоставляет возможность загрузки данных из файла в документы и списки.</p> <h2>Загрузка данных из файла в списки и документы</h2> -<p>Открывается из документов и элементов списков с помощью кнопки <strong>Загрузить из файла</strong>. </p> -<p>С помощью команды <strong>Загрузка данных из файла</strong> для администратора имеется возможность <a href="#3">загрузки данных в произвольный список</a> приложения.</p> +<p>Открывается из документов и элементов списков с помощью кнопки <strong>Загрузить из файла</strong>. </p> +<p>С помощью команды <strong>Загрузка данных из файла</strong> для администратора имеется возможность <a href="#3">загрузки данных в произвольный список</a> приложения.</p> <p>С помощью кнопки выберите, как будут загружаться данные: </p> <ul><li> <div><a href="#1">заполнение таблицы в приложении</a>; </div> </li> <li> <div><a href="#2">загрузка из внешнего файла</a>.</div></li></ul><h3><a name="1">Заполнение таблицы</a></h3> -<ul><li>С помощью кнопки <strong>Заполнение таблицы</strong> (включена по умолчанию) можно перейти к вводу данных в таблицу для последующей загрузки в документ непосредственно в приложении. +<ul><li>С помощью кнопки <strong>Заполнение таблицы</strong> (включена по умолчанию) можно перейти к вводу данных в таблицу для последующей загрузки в документ непосредственно в приложении. </li> <li>Таблицу можно заполнить, скопировав данные в таблицу из внешнего файла через буфер обмена. </li> @@ -26,36 +26,36 @@ <li>Можно заполнить внешние файлы для загрузки в документы. Заполните файл по рекомендованным правилам (обязательные для заполнения поля выделены в таблице жирным шрифтом). </li> <li>С помощью кнопки <strong>Загрузить таблицу из файла</strong> можно загрузить данные из внешнего файла. Выберите путь к файлу на компьютере.</li></ul><h3><a name="4">Сопоставление данных</a></h3> -<ul><li>После загрузки данных приложения производит автоматическое сопоставление данных. Если автоматическое сопоставление не состоялось, то данные выводятся для сопоставления вручную. +<ul><li>После загрузки данных приложения производит автоматическое сопоставление данных. Если автоматическое сопоставление не состоялось, то данные выводятся для сопоставления вручную. </li> -<li>Для того чтобы просмотреть сопоставленные или несопоставленные данные, можно использовать отбор с помощью поля <strong>Показывать</strong>. Несопоставленные данные помечаются красным. </li> -<li>С помощью соответствующей кнопки можно <strong>Разрешить неоднозначность</strong>. Для этого в таблице выводятся совпадающие элементы. Необходимо выбрать один из них для загрузки.</li> -<li>Для того чтобы вручную сопоставить данные, откройте соответствующий список приложений, найдите в нем подходящее значение или введите новое, затем нажмите <strong>Выбрать</strong>. +<li>Для того чтобы просмотреть сопоставленные или несопоставленные данные, можно использовать отбор с помощью поля <strong>Показывать</strong>. Несопоставленные данные помечаются красным. </li> +<li>С помощью соответствующей кнопки можно <strong>Разрешить неоднозначность</strong>. Для этого в таблице выводятся совпадающие элементы. Необходимо выбрать один из них для загрузки.</li> +<li>Для того чтобы вручную сопоставить данные, откройте соответствующий список приложений, найдите в нем подходящее значение или введите новое, затем нажмите <strong>Выбрать</strong>. </li> <li>Кроме обязательных полей, сопоставляться могут также и необязательные. При загрузке поле можно сопоставить и включить в документ с помощью кнопки <strong>Выбрать из списка</strong>. Если нужного элемента в списке нет, то его можно <strong>Создать</strong> с помощью соответствующей кнопки. </li> -<li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля.</li></ul><h2><a name="3">Загрузка данных в произвольный список</a> приложения (только для администратора)</h2> +<li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля.</li></ul><h2><a name="3">Загрузка данных в произвольный список</a> приложения (только для администратора)</h2> <ul><li><strong>Загрузку данных из файла</strong> в произвольный список администратору можно произвести по соответствующей команде. </li> -<li>В этом случае для загрузки данных можно выбрать один из списков приложения. Можно загружать в списки контактную информацию, а также дополнительные реквизиты и сведения. +<li>В этом случае для загрузки данных можно выбрать один из списков приложения. Можно загружать в списки контактную информацию, а также дополнительные реквизиты и сведения. <ul><li>После выбора списка для загрузки данных нажмите кнопку <strong>Далее</strong>. Выберите с помощью кнопок, как будут загружаться данные: <ul><li>Приложение предлагает <a href="#1">таблицу для заполнения</a>. </li> <li>Также можно загрузить <a href="#2">данные из внешнего файла</a>. </li></ul></li></ul></li></ul><h3>Сопоставление данных (только для администратора)</h3> <ul><li>Заполнив таблицу или скачав данные из файла, нажмите кнопку <strong>Далее</strong>. Необходимо провести сопоставление данных. </li> -<li>Поведение приложения при сопоставлении данных можно настроить: +<li>Поведение приложения при сопоставлении данных можно настроить: <ul><li>С помощью переключателя выбрать, как поступать с <strong>Сопоставленными</strong> элементами: <strong>Обновлять</strong> или <strong>Пропускать</strong> (по умолчанию). </li> <li>С помощью переключателя выбрать, как поступать с <strong>Несопоставленными</strong> элементами: <strong>Создавать</strong> (по умолчанию) или <strong>Пропускать</strong>.</li></ul></li> <li>Данные будут автоматически сопоставлены, если соответствия не будет найдено, таблица выводится с предложением сопоставить данные. -<ul><li>В некоторых списках существует возможность автоматического создания несопоставленных данных. Такие данные помечаются надписью <strong><Создан></strong>. Для автоматического создания в списке выберите <strong>Создавать</strong> с помощью переключателя (выбрано по умолчанию). +<ul><li>В некоторых списках существует возможность автоматического создания несопоставленных данных. Такие данные помечаются надписью <strong><Создан></strong>. Для автоматического создания в списке выберите <strong>Создавать</strong> с помощью переключателя (выбрано по умолчанию). </li> <li>После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку <strong>Загрузить данные</strong>. </li></ul></li> -<li>После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля. Результаты загрузки выводятся на просмотр. +<li>После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля. Результаты загрузки выводятся на просмотр. <ul><li>С помощью поля <strong>Показывать</strong> можно вывести <strong>Все</strong>, <strong>Новые</strong>, <strong>Обновленные</strong> и <strong>Пропущенные</strong> элементы. </li> -<li>Несколько выделенных строк можно <strong>Сохранить</strong> в файл, подкорректировать и позднее загрузить повторно. +<li>Несколько выделенных строк можно <strong>Сохранить</strong> в файл, подкорректировать и позднее загрузить повторно. </li> <li>В списке можно изменить введенные элементы, если они не устраивают. Для изменения нескольких выделенных элементов нажмите кнопку <strong>Изменить реквизиты</strong>. </li> diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index a6063baae..43dda2281 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -1674,11 +1674,11 @@ Для каждого СтрокаВвода Из Справочник.ВводПоСтроке Цикл Если СтрокаВвода.Имя = "Код" И НЕ Справочник.Автонумерация Тогда ТекстУсловияВВодаПоСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "СправочникСопоставления.%1.Код %2 ТаблицаСопоставления.%3", // АПК:1297 Фрагмент запроса не локализуется. + "СправочникСопоставления.%1.Код %2 ТаблицаСопоставления.%3", // АПК:1297 фрагмент запроса не локализуется. ИмяКолонкиСправочника, ТипСравнения, Колонка.ИмяКолонки); Иначе ТекстУсловияВВодаПоСтроке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "СправочникСопоставления.%1.%2 %3 ТаблицаСопоставления.%4", // АПК:1297 Фрагмент запроса не локализуется. + "СправочникСопоставления.%1.%2 %3 ТаблицаСопоставления.%4", // АПК:1297 фрагмент запроса не локализуется. ИмяКолонкиСправочника, СтрокаВвода.Имя, ТипСравнения, Колонка.ИмяКолонки); КонецЕсли; ТекстУсловияСправочник.Добавить(ТекстУсловияВВодаПоСтроке); @@ -2112,7 +2112,7 @@ Процедура ПоказатьИнформационнуюСтрокуПроОбязательныеКолонки() Если Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаВариантЗагрузкаИзФайла Тогда - ТекстПодсказки = НСтр("ru = 'Для загрузки данных необходимо, сохранить бланк в файл для заполнения в другом приложении. + ТекстПодсказки = НСтр("ru = 'Для загрузки данных необходимо сохранить бланк в файл для заполнения в другом приложении. |Затем загрузить заполненную таблицу в одном из форматов: |• Книги Microsoft Excel 97 (.xls) и Excel 2007 (.xlsx) |• Электронные таблицы LibreOffice Calc (.ods) diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html index 58b8f73d7..6fd77400f 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html @@ -1,8 +1,8 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18212"></meta></head><body> -<p>Предоставляет возможность загрузки табличных данных из файлов в произвольные списки и табличные части документов. Например, для разового переноса нормативно-справочной информации при переходе с других приложений, или для регулярной загрузки данных в табличные части при заполнении документов.</p> +<p>Предоставляет возможность загрузки табличных данных из файлов в произвольные списки и табличные части документов. Например, для разового переноса нормативно-справочной информации при переходе с других приложений, или для регулярной загрузки данных в табличные части при заполнении документов.</p> <h3>Преимущества загрузки данных из файла</h3> -<ul><li>Позволяет задействовать для ввода данных возможности других приложений (например, можно вводить данные в Excel, а потом загрузить их в приложение); +<ul><li>Позволяет задействовать для ввода данных возможности других приложений (например, можно вводить данные в Excel, а потом загрузить их в приложение); </li> -<li>Не требует для ввода данных в файл наличия на компьютере приложения 1С:Предприятие, т.е. ввод данных в такой файл может осуществляться в удаленных офисах, небольших складах, тачках розничных продаж, т.е. там, где может не быть возможности наладить полноценную работу приложения 1С:Предприятие (например, компьютер уже устарел для работы с данным приложением); +<li>Не требует для ввода данных в файл наличия на компьютере приложения 1С:Предприятие, т.е. ввод данных в такой файл может осуществляться в удаленных офисах, небольших складах, тачках розничных продаж, т.е. там, где может не быть возможности наладить полноценную работу приложения 1С:Предприятие (например, компьютер уже устарел для работы с данным приложением); </li> -<li>Позволяет подключить к вводу данных дополнительные кадры. Ввод данных во внешний файл требует только соблюдения структуры таблицы, а также знания правил ввода в том приложении, для которой он предназначен, например, Excel, поэтому может быть поручен сотрудникам, которые имеют только начальные навыки работы с компьютером. </li></ul><p> </p></body></html> \ No newline at end of file +<li>Позволяет подключить к вводу данных дополнительные кадры. Ввод данных во внешний файл требует только соблюдения структуры таблицы, а также знания правил ввода в том приложении, для которой он предназначен, например, Excel, поэтому может быть поручен сотрудникам, которые имеют только начальные навыки работы с компьютером. </li></ul><p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index ff724703e..c1c4104ea 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -113,10 +113,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Запрос = МодульДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Перечисления["ВидыДополнительныхОтчетовИОбработок"].ДополнительнаяОбработка, - Неопределено, Ложь, Перечисления["СпособыВызоваДополнительныхОбработок"].ЗагрузкаДанныхИзФайла); - ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); // см. ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам - + ТаблицаКоманд = МодульДополнительныеОтчетыИОбработки.ДополнительныеКомандыЗагрузкиДанныхИзФайла(); Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл ИнформацияОТипеЗагрузки = НоваяИнформацияОТипеЗагрузки(); @@ -1701,22 +1698,17 @@ Попытка ЗагруженныйШаблонСДанными.Прочитать(ИмяВременногоФайла); Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - Если Не ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории(КатегорияОшибки.ОшибкаДоступаКЛокальномуФайлу, Истина) Тогда + Если Не ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории(КатегорияОшибки.ОшибкаДоступаКЛокальномуФайлу) Тогда ВызватьИсключение; КонецЕсли; - // Замена непредвиденной ошибки на ошибку для пользователя. Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке); УточненныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 | |Убедитесь в корректности данных в файле.'"), Уточнение.Текст); - ВызватьИсключение(УточненныйТекст,,,, ИнформацияОбОшибке); - КонецПопытки; НомерСтрокиСШапкойТаблицы = ?(ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ИнформацияПоКолонкам), 2, 1); @@ -1725,7 +1717,8 @@ ТабличныйДокументВТаблицуЗначений(ЗагруженныйШаблонСДанными, ИнформацияПоКолонкам, Адрес); ЗагруженныеДанные = ПолучитьИзВременногоХранилища(Адрес); - ОбластьВывода = ШаблонСДанными.ПолучитьОбласть(НомерСтрокиСШапкойТаблицы + 1, 1, НомерСтрокиСШапкойТаблицы + 1, ЗагруженныеДанные.Колонки.Количество()); + ОбластьВывода = ШаблонСДанными.ПолучитьОбласть(НомерСтрокиСШапкойТаблицы + 1, 1, НомерСтрокиСШапкойТаблицы + 1, + ЗагруженныеДанные.Колонки.Количество()); Для Счетчик = 1 По ЗагруженныеДанные.Колонки.Количество() Цикл ОбластьЗаполнения = ОбластьВывода.Область(1, Счетчик, 1, Счетчик); diff --git a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl index 0d9cd702d..49f89c463 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКлассификатораБанков/ManagerModule.bsl @@ -369,8 +369,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Запись обработанных данных +#Область ЗаписьОбработанныхДанных // Параметры: // СведенияОБанке - см. ДанныеОрганизации @@ -451,14 +450,7 @@ БанкОбъект.Родитель = Регион.Ссылка; КонецЕсли; - Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Страна = "РФ"; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульРаботаСАдресамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресамиКлиентСервер"); - Страна = МодульРаботаСАдресамиКлиентСервер.ОсновнаяСтрана(); - КонецЕсли; - ОбновитьЗначениеРеквизита(БанкОбъект, "Страна", Страна); - КонецЕсли; + ОбновитьЗначениеРеквизита(БанкОбъект, "КодСтраны", "643"); // Российская Федерация Если БанкОбъект.ПометкаУдаления Тогда БанкОбъект.ПометкаУдаления = Ложь; @@ -520,8 +512,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Определяет нужно ли обновление данных классификатора. // @@ -568,7 +561,7 @@ КонецЕсли; СведенияОКлассификаторе = НовоеОписаниеКлассификатора(ВерсияКлассификатора, ТекущаяДатаСеанса()); УстановитьПривилегированныйРежим(Истина); - Константы.ВерсияКлассификатораБанков.Установить(Новый ХранилищеЗначения(СведенияОКлассификаторе)); + Константы.ВерсияКлассификатораБанков.Установить(Новый ХранилищеЗначения(СведенияОКлассификаторе, Новый СжатиеДанных(9))); УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры @@ -602,7 +595,8 @@ | СправочникБИК.МеждународноеНаименование КАК МеждународноеНаименование, | СправочникБИК.ГородМеждународный КАК ГородМеждународный, | СправочникБИК.АдресМеждународный КАК АдресМеждународный, - | СправочникБИК.Страна КАК Страна, + | СправочникБИК.КодСтраны КАК КодСтраны, + | """" КАК Страна, | СправочникБИКРКЦ.Код КАК БИКРКЦ, | СправочникБИКРКЦ.Наименование КАК НаименованиеРКЦ, | СправочникБИКРКЦ.КоррСчет КАК КоррСчетРКЦ, @@ -631,7 +625,16 @@ Запрос.УстановитьПараметр("КоррСчет", КоррСчет); Запрос.УстановитьПараметр("ТолькоАктуальные", ТолькоАктуальные); - Возврат Запрос.Выполнить().Выгрузить(); + СведенияБИК = Запрос.Выполнить().Выгрузить(); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + КодыСтран = МодульУправлениеКонтактнойИнформациейСлужебный.КодыСтран(); + Для Каждого СтрокаТаблицы Из СведенияБИК Цикл + СтрокаТаблицы.Страна = КодыСтран[СтрокаТаблицы.КодСтраны]; + КонецЦикла; + КонецЕсли; + + Возврат СведенияБИК; КонецФункции @@ -649,4 +652,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты_ru/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты_ru/Help/ru.html index 5238a7ac0..54f68c530 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты_ru/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПараметрыПрописиВалюты_ru/Help/ru.html @@ -3,7 +3,7 @@ <p>Для того чтобы в печатных формах правильно указывалось наименование валюты прописью, необходимо задать параметры прописи целой и дробной части валюты. </p> <ul><li><strong>Целая часть</strong> - укажите параметры склонения целой части валюты: <strong>Род</strong> и соответствующие шаблоны склонения в единственном и множественном числе. </li><li><strong>Дробная часть</strong> - укажите параметры склонения дробной части валюты: <strong>Род</strong> и соответствующие шаблоны склонения в единственном и множественном числе. -</li><li><strong>Число разрядов дробной части</strong> - в случае если дробная часть в печатных формах отображается числом, то можно установить нужное количество разрядов при выводе печатных форм документов. Например, если установлено количество разрядов 1 знак, то сумма по документу будет отображена, как 150,2 евро, а если 2 знака, то – 150,20 евро. +</li><li><strong>Число разрядов дробной части</strong> - в случае если дробная часть в печатных формах отображается числом, то можно установить нужное количество разрядов при выводе печатных форм документов. Например, если установлено количество разрядов 1 знак, то сумма по документу будет отображена, как 150,2 евро, а если 2 знака, то – 150,20 евро. </li><li><strong>Пример прописи суммы</strong> - число, введенное в поле <strong>Сумма</strong>, будет написано по указанным параметрам прописи валюты. Используйте эту возможность для проверки параметров прописи валюты.</li></ul><p>Параметры прописи валюты заполнены по умолчанию для основных валют: <strong>рубль</strong>, <strong>Евро</strong>, <strong>доллар</strong>. Для остальных валют их необходимо заполнить самостоятельно.</p> <h3>См. также: </h3> <ul><li><a href="Catalog.Валюты/Help">Валюты</a> diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html index 5c99803d7..06722b31b 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/ПодборВалютИзКлассификатора/Help/ru.html @@ -1,11 +1,11 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> -<p>Содержит общую информацию о <a href="Catalog.Валюты/Help">валютах</a> и предназначен для добавления новых валют (рекомендуется для корректного заполнения данных о <a href="Catalog.Валюты.Form.ФормаЭлемента/Help">валюте</a>).</p> +<p>Содержит общую информацию о <a href="Catalog.Валюты/Help">валютах</a> и предназначен для добавления новых валют (рекомендуется для корректного заполнения данных о <a href="Catalog.Валюты.Form.ФормаЭлемента/Help">валюте</a>).</p> <p>В Общероссийском классификаторе валют выводится:</p> <ul><li> -<div><strong>Цифр. код</strong> - числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет (с портала 1С:ИТС).</div> +<div><strong>Цифр. код</strong> - числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет (с портала 1С:ИТС).</div> </li> <li> -<div><strong>Симв. код</strong> - используется как краткое наименование и основное представление валюты.</div> +<div><strong>Симв. код</strong> - используется как краткое наименование и основное представление валюты.</div> </li> <li> <div><strong>Наименование валюты</strong> - полное наименование.</div> @@ -14,11 +14,11 @@ <div><strong>Страны и территории</strong> - указываются страны или территории, в которых данная валюта используется в качестве основной.</div> </li> <li> -<div><strong>Загружается из сети Интернет</strong> - если флажок включен, то валюта может <a href="DataProcessor.ЗагрузкаКурсовВалют/Help">загружаться с портала 1С:ИТС</a>.</div></li></ul><h3>Добавление валюты из классификатора в список валют</h3> +<div><strong>Загружается из сети Интернет</strong> - если флажок включен, то валюта может <a href="DataProcessor.ЗагрузкаКурсовВалют/Help">загружаться с портала 1С:ИТС</a>.</div></li></ul><h3>Добавление валюты из классификатора в список валют</h3> <ul><li> <div>Выделив одну или несколько валют, нажмите кнопку <strong>Выбрать</strong>.</div> </li> <li> -<div>Воспользуйтесь двойным щелчком мыши по валюте для добавления валюты в список валют.</div></li></ul><h3>См. также: </h3> +<div>Воспользуйтесь двойным щелчком мыши по валюте для добавления валюты в список валют.</div></li></ul><h3>См. также: </h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html index 3cc9cdce0..226279b68 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html @@ -1,12 +1,12 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Загрузка курсов <a href="Catalog.Валюты/Help">валют</a> производится на портале 1С:ИТС.</p> -<p>Окно загрузки <a href="InformationRegister.КурсыВалют/Help">курсов</a> состоит из двух частей:</p> +<p>Окно загрузки <a href="InformationRegister.КурсыВалют/Help">курсов</a> состоит из двух частей:</p> <ul><li>Период: <ul><li><strong>С</strong> - дата начала периода загрузки курсов валют. </li> <li> <div><strong>По</strong> - дата окончания периода загрузки курсов валют.</div></li></ul></li> -<li>Список валют - заполняется по умолчанию из списка <strong>Валюты </strong>только теми <a href="Catalog.Валюты.Form.ФормаЭлемента/Help">валютами</a>, у которых установлен флажок <strong>Загружается из интернета</strong>. В списке выводится: +<li>Список валют - заполняется по умолчанию из списка <strong>Валюты </strong>только теми <a href="Catalog.Валюты.Form.ФормаЭлемента/Help">валютами</a>, у которых установлен флажок <strong>Загружается из интернета</strong>. В списке выводится: <ul><li><strong>Загружать</strong> - включите флажок для загрузки курсов валюты за указанный период. </li> <li><strong>Симв. код</strong> - используется как основное представление валюты. @@ -15,22 +15,22 @@ </li> <li><strong>Дата курса</strong> - дата загруженного курса валюты. </li> -<li><strong>Курс</strong> - выводится курс на указанную дату. +<li><strong>Курс</strong> - выводится курс на указанную дату. </li> <li><strong>Кратность</strong> - количество котировочных единиц, не выводится, если равна 1.</li></ul></li> -<li>в список можно добавить дополнительные поля по команде <strong>Еще - Изменить форму</strong>: -<ul><li><strong>Цифр. код</strong> - уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет.</li></ul></li></ul><h3>Загрузка курсов выбранных валют </h3> +<li>в список можно добавить дополнительные поля по команде <strong>Еще - Изменить форму</strong>: +<ul><li><strong>Цифр. код</strong> - уникальный числовой код, служит для идентификации валюты при загрузке курсов из сети Интернет.</li></ul></li></ul><h3>Загрузка курсов выбранных валют </h3> <ul><li> <div>Укажите начало и окончание периода для загрузки курсов в полях <strong>С</strong> и <strong>По</strong>.</div> </li> <li> -<div>Выберите нужные валюты с помощью флажка <strong>Загружать</strong> или все валюты с помощью кнопки <img src="StdPicture.CheckAll"></img>. </div> +<div>Выберите нужные валюты с помощью флажка <strong>Загружать</strong> или все валюты с помощью кнопки <img src="StdPicture.CheckAll"></img>. </div> </li> <li> <div>Снять выбор всех валют можно с помощью кнопки <img src="StdPicture.UncheckAll"></img>.</div> </li> <li> -<div>Нажмите <strong>Загрузить и закрыть</strong>.</div></li></ul><h3>См. также: </h3> +<div>Нажмите <strong>Загрузить и закрыть</strong>.</div></li></ul><h3>См. также: </h3> <ul><li><a href="DataProcessor.ЗагрузкаКурсовВалют.Form.ПодборВалютИзКлассификатора/Help">Общероссийский классификатор валют</a>; </li> <li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl index 8367c77c5..2dbadd436 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ManagerModule.bsl @@ -56,13 +56,13 @@ #Область СлужебныеПроцедурыИФункции -// Добавляет в справочник валют валюты из классификатора. +// Добавляет в справочник валюты из классификатора. // // Параметры: -// Коды - Массив - цифровые коды добавляемых валют. +// Коды - Массив из Строка - цифровые коды добавляемых валют. // // Возвращаемое значение: -// Массив, СправочникСсылка.Валюты - ссылки созданных валют. +// Массив из СправочникСсылка.Валюты // Функция ДобавитьВалютыПоКоду(Знач Коды) Экспорт @@ -111,8 +111,6 @@ // Процедура ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют); - ИмяСобытия = ИмяСобытияЖурналаРегистрации(); ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, , , @@ -121,7 +119,7 @@ ТекущаяДата = НачалоДня(ТекущаяДатаСеанса()); ПриЗагрузкеВозниклиОшибки = Ложь; - ВалютыЗагружаемыеИзИнтернета = ВалютыЗагружаемыеИзИнтернета(); + ВалютыЗагружаемыеИзИнтернета = Справочники.Валюты.ВалютыЗагружаемыеИзИнтернета(); Если ПараметрыЗагрузки = Неопределено Тогда РегламентныеЗаданияСервер.УстановитьСлужебногоПользователяРегламентногоЗадания( @@ -259,6 +257,7 @@ Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт Зависимость = Настройки.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют; + Зависимость.ОбращаетсяКВнешнимРесурсам = Истина; Зависимость.ДоступноВМоделиСервиса = Ложь; Зависимость.ДоступноВАвтономномРабочемМесте = Ложь; КонецПроцедуры @@ -617,31 +616,6 @@ Возврат Результат; КонецФункции -// Возвращаемое значение: -// Массив из СправочникСсылка.Валюты -// -Функция ВалютыЗагружаемыеИзИнтернета() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ТекстЗапроса = - "ВЫБРАТЬ - | Валюты.Ссылка КАК Ссылка - |ИЗ - | Справочник.Валюты КАК Валюты - |ГДЕ - | НЕ Валюты.ПометкаУдаления - | И Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета) - | И Валюты.Код В(&ЗагружаемыеПоКлассификатору)"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ЗагружаемыеПоКлассификатору", КодыВалютЗагружаемыхИзИнтернета()); - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Возврат Результат; - -КонецФункции - Функция КодыВалютЗагружаемыхИзИнтернета() Экспорт КлассификаторТаблица = КлассификаторВалют(); diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl index 36181f11a..613fef37e 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl @@ -11,10 +11,28 @@ #Область СлужебныйПрограммныйИнтерфейс // Инициализирует колонки таблицы правил регистрации объектов. -// -// Параметры: -// Нет. // +// Возвращаемое значение: +// ТаблицаЗначений: +// * ОбъектНастройки - Строка +// * ОбъектМетаданныхИмя - Строка +// * ИмяПланаОбмена - Строка +// * ИмяРеквизитаФлага - Строка +// * ТекстЗапроса - Строка +// * СвойстваОбъекта - Структура +// * СвойстваОбъектаСтрокой - Строка +// * ПравилоПоСвойствамОбъектаПустое - Булево +// * ОтборПоСвойствамПланаОбмена - ДеревоЗначений из см.ИнициализацияТаблицыОтборПоСвойствамПланаОбмена +// * ОтборПоСвойствамОбъекта - ДеревоЗначений из см.ИнициализацияТаблицыОтборПоСвойствамОбъекта +// * ПередОбработкой - Строка +// * ПриОбработке - Строка +// * ПриОбработкеДополнительный - Строка +// * ПослеОбработки - Строка +// * ЕстьОбработчикПередОбработкой - Булево +// * ЕстьОбработчикПриОбработке - Булево +// * ЕстьОбработчикПриОбработкеДополнительный - Булево +// * ЕстьОбработчикПослеОбработки - Булево +// Функция ИнициализацияТаблицыПРО() Экспорт ПравилаРегистрацииОбъектов = Новый ТаблицаЗначений; @@ -54,11 +72,20 @@ КонецФункции -// Инициализирует колонки таблицы правил регистрации по свойствам. -// -// Параметры: -// Нет. +// Инициализирует колонки таблицы правил регистрации по свойствам плана обмена. // +// Возвращаемое значение: +// ДеревоЗначений: +// * ЭтоГруппа - Булево +// * БулевоЗначениеГруппы - Строка +// * СвойствоОбъекта - Строка +// * ВидСравнения - Строка +// * ЭтоСтрокаКонстанты - Булево +// * ТипСвойстваОбъекта - Строка +// * ПараметрУзла - Строка +// * ТабличнаяЧастьПараметраУзла - Строка +// * ЗначениеКонстанты - Произвольный +// Функция ИнициализацияТаблицыОтборПоСвойствамПланаОбмена() Экспорт ШаблонДерева = Новый ДеревоЗначений; @@ -82,11 +109,20 @@ КонецФункции -// Инициализирует колонки таблицы правил регистрации по свойствам. -// -// Параметры: -// Нет. +// Инициализирует колонки таблицы правил регистрации по свойствам объекта. // +// Возвращаемое значение: +// ДеревоЗначений: +// * ЭтоГруппа - Булево +// * ЭтоОператорИ - Булево +// * СвойствоОбъекта - Строка +// * КлючСвойстваОбъекта - Строка +// * ВидСравнения - Строка +// * ТипСвойстваОбъекта - Строка +// * ВидЭлементаОтбора - Строка +// * ЗначениеКонстанты - Произвольный +// * ЗначениеСвойства - Произвольный +// Функция ИнициализацияТаблицыОтборПоСвойствамОбъекта() Экспорт ШаблонДерева = Новый ДеревоЗначений; diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index 33d63335b..2b056c396 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -30,8 +30,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Выполняет синтаксический анализ XML-файла с правилами регистрации. Заполняет значения коллекций по данным файла; // Подготавливает зачитанные правила для проигрывателя ПРО ("компиляция" правил). @@ -110,8 +109,9 @@ Формат(Регистрация.ДатаВремяСоздания, "ДЛФ=DD")); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Загрузка правил регистрации объектов (ПРО). +#КонецОбласти + +#Область ЗагрузкаПравилРегистрацииОбъектовПРО Процедура ЗагрузитьРегистрациюИзФайла(ИмяФайла, ТолькоИнформация) @@ -687,8 +687,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Компиляция правил регистрации объектов (ПРО) по свойствам Плана обмена. +#КонецОбласти + +#Область КомпиляцияПравилРегистрацииОбъектовПРОПоСвойствамПланаОбмена Процедура ПодготовитьПравилоРегистрацииПоСвойствамПланаОбмена(ПРО) Экспорт @@ -714,9 +715,9 @@ КонецЕсли; ТекстЗапроса = ТекстВыборкиПолей + Символы.ПС - + "ИЗ" + Символы.ПС + ТекстТаблицДанных + Символы.ПС // @query-part + + "ИЗ" + Символы.ПС + ТекстТаблицДанных + Символы.ПС + "ГДЕ" + Символы.ПС + ТекстУсловия - + Символы.ПС + "[ОбязательныеУсловия]"; + + Символы.ПС + "[ОбязательныеУсловия]"; // @query-part // // Присваиваем полученные значения переменных. @@ -897,8 +898,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Компиляция правил регистрации объектов (ПРО) по свойствам Объекта. +#КонецОбласти + +#Область КомпиляцияПравилРегистрацииОбъектовПРОПоСвойствамОбъекта Процедура ПодготовитьПравилоРегистрацииПоСвойствамОбъекта(ПРО) @@ -935,8 +937,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные служебные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеСлужебныеПроцедурыИФункции Процедура СообщитьОбОшибкеОбработки(Код = -1, ОписаниеОшибки = "") @@ -1047,8 +1050,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Для работы с объектом XMLЧтение. +#КонецОбласти + +#Область ДляРаботыСОбъектомXMLЧтение // Читает значение атрибута по имени из указанного объекта, приводит значение // к указанному примитивному типу. @@ -1171,8 +1175,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные функции-свойства. +#КонецОбласти + +#Область ЛокальныеСлужебныеФункцииСвойства Функция КлючСообщенияЖурналаРегистрации() @@ -1180,8 +1185,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Инициализация реквизитов и модульных переменных. +#КонецОбласти + +#Область ИнициализацияРеквизитовИМодульныхПеременных // Инициализирует реквизиты обработки и модульные переменные. // @@ -1253,6 +1259,8 @@ #КонецОбласти +#КонецОбласти + #Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form index b63e3aa33..9c6c047a3 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form @@ -2398,7 +2398,7 @@ <id>2</id> <toolTip> <key>ru</key> - <value>Вернутся на предыдущий шаг</value> + <value>Вернуться на предыдущий шаг</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Help/ru.html b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Help/ru.html index c522707d5..c3f590b79 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Help/ru.html @@ -1,27 +1,27 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Позволяет заменить один или несколько элементов на выбранный элемент.</p> -<p>Такая возможность востребована при <a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">удалении</a> элементов, например, т.к. для окончательного удаления элемента необходимо избавиться от ссылок на него.</p> -<p>Открывается по кнопке <strong>Заменить и удалить</strong> из списков приложения. Также можно воспользоваться командой <strong>Заменить во всех местах использования</strong> из окна <strong>Удаление помеченных объектов</strong>.</p> +<p>Такая возможность востребована при <a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">удалении</a> элементов, например, т.к. для окончательного удаления элемента необходимо избавиться от ссылок на него.</p> +<p>Открывается по кнопке <strong>Заменить и удалить</strong> из списков приложения. Также можно воспользоваться командой <strong>Заменить во всех местах использования</strong> из окна <strong>Удаление помеченных объектов</strong>.</p> <p>Можно автоматически заменить все ссылки на удаляемые элементы ссылками на выбранный элемент.Все указанные элементы будут помечены на удаление или удалены непосредственно, если пользователь обладает административными правами.</p> <p>Выводятся все элементы соответствующего списка, в том числе помеченные на удаление. </p> <h3>Просмотр элемента списка</h3> -<ul><li>Выполните команду <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong> для просмотра выбранного элемента. </li></ul><h3>Работа с документами</h3> -<ul><li>Для документов предусмотрен отбор по периоду. Если документов в списке много, можно воспользоваться этим отбором. Для этого выполните команду <strong>Установить период </strong>контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>. +<ul><li>Выполните команду <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong> для просмотра выбранного элемента. </li></ul><h3>Работа с документами</h3> +<ul><li>Для документов предусмотрен отбор по периоду. Если документов в списке много, можно воспользоваться этим отбором. Для этого выполните команду <strong>Установить период </strong>контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>. </li> <li>Также для документов предусмотрены команды <strong>Еще - Провести</strong> (<strong>Отмена проведения</strong>).</li></ul><h3>Замена элементов</h3> <ul><li>Выберите элемент, на который необходимо заменить выделенные элементы. </li> -<li>Внизу списка в информационной строке указываются реквизиты элемента, который выбран для замены. Также для пользователей с административными правами предоставляется возможность выбора. Щелкните на ссылку и укажите, что заменяемые элементы будут: +<li>Внизу списка в информационной строке указываются реквизиты элемента, который выбран для замены. Также для пользователей с административными правами предоставляется возможность выбора. Щелкните на ссылку и укажите, что заменяемые элементы будут: <ul><li><strong>помечены на удаление</strong>; </li> <li><strong>удалены безвозвратно</strong>.</li></ul></li> -<li>Нажмите <strong>Заменить</strong> для замены всех ссылок.</li></ul><p>В случае возникновения ошибок в процессе обработки элементов будет выведен список необработанных объектов. В нижней части списка выводится описание причины невозможности обработки по выделенному элементу. В списке можно:</p> -<ul><li>Открыть элемент для просмотра, нажав <strong>Изменить</strong> или двойным щелчком мыши; +<li>Нажмите <strong>Заменить</strong> для замены всех ссылок.</li></ul><p>В случае возникновения ошибок в процессе обработки элементов будет выведен список необработанных объектов. В нижней части списка выводится описание причины невозможности обработки по выделенному элементу. В списке можно:</p> +<ul><li>Открыть элемент для просмотра, нажав <strong>Изменить</strong> или двойным щелчком мыши; </li> -<li>Попытаться еще раз заменить элемент, нажав <strong>Повторить замену</strong>; +<li>Попытаться еще раз заменить элемент, нажав <strong>Повторить замену</strong>; </li> <li>Нажать <strong>Назад</strong> и подобрать для замены другой элемент; </li> -<li>Нажать <strong>Закрыть</strong> для возвращения в приложение.</li></ul><h3>См. также:</h3> +<li>Нажать <strong>Закрыть</strong> для возвращения в приложение.</li></ul><h3>См. также:</h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl index 802beca8c..e7373e301 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -93,7 +93,7 @@ // 3. Проблемы замены ссылок. Шаг = ДобавитьШагМастера(Элементы.ШагПовторЗамены); Шаг.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'"); - Шаг.КнопкаНазад.Подсказка = НСтр("ru = 'Вернутся к выбору целевого элемента'"); + Шаг.КнопкаНазад.Подсказка = НСтр("ru = 'Вернуться к выбору целевого элемента'"); Шаг.КнопкаДалее.Заголовок = НСтр("ru = 'Повторить замену >'"); Шаг.КнопкаДалее.Подсказка = НСтр("ru = 'Повторить замену элементов'"); Шаг.КнопкаОтмена.Заголовок = НСтр("ru = 'Закрыть'"); @@ -107,7 +107,7 @@ // Обновление элементов формы. НастройкиМастера.ТекущийШаг = ШагВыбор; - ВидимостьДоступность(ЭтотОбъект); + УстановитьВидимостьДоступность(ЭтотОбъект); КонецПроцедуры @@ -306,8 +306,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс мастера +#Область ПереключениеСтраницМастера // Инициализирует структуры мастера. // @@ -402,9 +401,8 @@ Возврат ОписаниеШага; КонецФункции -// Обновляет видимость и доступность элементов формы в соответствии с текущим шагом мастера. &НаКлиентеНаСервереБезКонтекста -Процедура ВидимостьДоступность(Форма) +Процедура УстановитьВидимостьДоступность(Форма) Элементы = Форма.Элементы; НастройкиМастера = Форма.НастройкиМастера; @@ -462,13 +460,14 @@ НастройкиМастера.ТекущийШаг = ОписаниеШага; // Обновление видимости. - ВидимостьДоступность(ЭтотОбъект); + УстановитьВидимостьДоступность(ЭтотОбъект); ПриАктивацииШагаМастера(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// События мастера +#КонецОбласти + +#Область СобытияМастера &НаКлиенте Процедура ПриАктивацииШагаМастера() @@ -567,8 +566,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры замены и объединения элементов +#КонецОбласти + +#Область СлужебныеПроцедурыЗаменыИОбъединенияЭлементов &НаКлиенте Процедура ШагВыборЦелевогоЭлементаПриНажатииКнопкиДалее() @@ -859,9 +859,9 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолеВладелец", ?(ЕстьВладельцы, "Владелец", "НЕОПРЕДЕЛЕНО")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа", ?(ЕстьГруппы, "ЭтоГруппа", "ЛОЖЬ")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеВладелец", - ?(ЕстьВладельцы, "ЦелеваяТаблица.Владелец = &Владелец", "ИСТИНА")); // @query-part + ?(ЕстьВладельцы, "ЦелеваяТаблица.Владелец = &Владелец", "ИСТИНА")); // @query-part-2 ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеГруппа", - ?(ЕстьГруппы, "НЕ ЦелеваяТаблица.ЭтоГруппа", "ИСТИНА")); // @query-part + ?(ЕстьГруппы, "НЕ ЦелеваяТаблица.ЭтоГруппа", "ИСТИНА")); // @query-part-2 Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("НаборСсылок", МассивСсылок); @@ -901,8 +901,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с длительными операциями +#КонецОбласти + +#Область РаботаСДлительнымиОперациями &НаКлиенте Процедура НачатьЗаменуСсылок() @@ -1060,8 +1061,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции мастера +#КонецОбласти + +#Область СлужебныеПроцедурыИФункцииМастера // Описание настроек кнопки мастера. // @@ -1100,4 +1102,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form index e7840e988..830f1421d 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form @@ -3272,7 +3272,7 @@ <id>4</id> <toolTip> <key>ru</key> - <value>Вернутся на предыдущий шаг</value> + <value>Вернуться на предыдущий шаг</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Help/ru.html b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Help/ru.html index af533440e..1102b76d0 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Help/ru.html @@ -1,30 +1,30 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> <p>Предназначено для устранения дублирующихся данных. </p> -<p>Открывается из списков приложения по команде <strong>Еще - Объединить выделенные</strong>. Объединить можно несколько элементов, предварительно выделив их.</p> -<p>В списке элементов для объединения выводится:</p> +<p>Открывается из списков приложения по команде <strong>Еще - Объединить выделенные</strong>. Объединить можно несколько элементов, предварительно выделив их.</p> +<p>В списке элементов для объединения выводится:</p> <ul><li><strong>Наименование</strong>, </li> <li><strong>Код</strong>, </li> -<li><strong>Мест использования</strong> - выводится количество вхождений данного элемента или фраза <strong>Не используется</strong>.</li></ul><h3>Объединение элементов</h3> -<ul><li>По умолчанию первый элемент в списке помечен значком <img src="StdPicture.MoveRight" width="16" height="16"></img> как цель для объединения. +<li><strong>Мест использования</strong> - выводится количество вхождений данного элемента или фраза <strong>Не используется</strong>.</li></ul><h3>Объединение элементов</h3> +<ul><li>По умолчанию первый элемент в списке помечен значком <img src="StdPicture.MoveRight" width="16" height="16"></img> как цель для объединения. </li> -<li>Выделите "правильный" элемент из списка, который необходимо оставить в приложении, нажмите <img src="StdPicture.MoveRight"></img><strong>Отметить как оригинал</strong>. После этого данный элемент будет помечен значком <img src="StdPicture.MoveRight" width="16" height="16"></img>как цель для объединения элементов. +<li>Выделите "правильный" элемент из списка, который необходимо оставить в приложении, нажмите <img src="StdPicture.MoveRight"></img><strong>Отметить как оригинал</strong>. После этого данный элемент будет помечен значком <img src="StdPicture.MoveRight" width="16" height="16"></img>как цель для объединения элементов. </li> -<li>Снизу списка выводится, сколько элементов объединить и наименование элемента, который будет оставлен в приложении. Указывается, что остальные элементы будут <strong>помечены на удаление</strong> (ссылка, которую может <a href="#1">изменить</a> администратор). +<li>Снизу списка выводится, сколько элементов объединить и наименование элемента, который будет оставлен в приложении. Указывается, что остальные элементы будут <strong>помечены на удаление</strong> (ссылка, которую может <a href="#1">изменить</a> администратор). </li> <li>Нажмите <strong>Объединить</strong>. </li> -<li>После объединения в приложении остается выбранный элемент, а все остальные указанные элементы заменяются во всех местах использования на выбранный и помечаются на <a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">удаление</a> (<a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a> с административными правами может сразу удалить элементы безвозвратно). +<li>После объединения в приложении остается выбранный элемент, а все остальные указанные элементы заменяются во всех местах использования на выбранный и помечаются на <a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">удаление</a> (<a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a> с административными правами может сразу удалить элементы безвозвратно). </li> -<li>В случае возникновения ошибок в процессе обработки элементов выводится список необработанных объектов с описанием причины невозможности обработки, например, если элементы принадлежат к разным группам списка, у которых разный учет, то объединение невозможно. +<li>В случае возникновения ошибок в процессе обработки элементов выводится список необработанных объектов с описанием причины невозможности обработки, например, если элементы принадлежат к разным группам списка, у которых разный учет, то объединение невозможно. </li> <li> <p>Для продолжения объединения необходимо устранить причину ошибок, т.е. изменить состав элементов.</p></li></ul><h3>Изменение состава элементов в списке</h3> -<ul><li>Если перечисленные элементы не устраивают, можно <img src="StdPicture.CreateListItem"></img> <strong>Добавить новый элемент</strong>. В открывшемся списке можно <strong>Выбрать</strong> существующий элемент или ввести новый. +<ul><li>Если перечисленные элементы не устраивают, можно <img src="StdPicture.CreateListItem"></img><strong>Добавить новый элемент</strong>. В открывшемся списке можно <strong>Выбрать</strong> существующий элемент или ввести новый. </li> -<li>Если в списке больше 2 элементов, то ненужные элементы можно <strong>Удалить</strong> из списка для объединения с помощью соответствующей команды <strong>Еще</strong>.</li></ul><h3>Просмотр элементов</h3> -<ul><li>Выделите нужный элемент, нажмите <strong>Открыть</strong>.</li></ul><h3>Просмотр ссылок на элементы списка</h3> -<ul><li>С помощью ссылки <strong>Все места использования</strong> в нижней части списка можно перейти к просмотру отчета <a href="Report.МестаИспользованияСсылок/Help">Места использования</a> по элементам, входящим в список.</li></ul><h3><a name="#1">Настройка удаления элементов (для администраторов)</a></h3> -<ul><li>Если пользователь обладает административными правами, то помеченные приложением на удаление элементы он может удалить окончательно, изменив размещенную внизу списка ссылку <strong>помечены на удаление</strong> на <strong>удалены безвозвратно</strong>.</li></ul><h3>См. также:</h3> +<li>Если в списке больше 2 элементов, то ненужные элементы можно <strong>Удалить</strong> из списка для объединения с помощью соответствующей команды <strong>Еще</strong>.</li></ul><h3>Просмотр элементов</h3> +<ul><li>Выделите нужный элемент, нажмите <strong>Открыть</strong>.</li></ul><h3>Просмотр ссылок на элементы списка</h3> +<ul><li>С помощью ссылки <strong>Все места использования</strong> в нижней части списка можно перейти к просмотру отчета <a href="Report.МестаИспользованияСсылок/Help">Места использования</a> по элементам, входящим в список.</li></ul><h3><a name="#1">Настройка удаления элементов (для администраторов)</a></h3> +<ul><li>Если пользователь обладает административными правами, то помеченные приложением на удаление элементы он может удалить окончательно, изменив размещенную внизу списка ссылку <strong>помечены на удаление</strong> на <strong>удалены безвозвратно</strong>.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl index bd6ae56cc..81ca0a3e5 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -69,7 +69,7 @@ // 5. Проблемы замены ссылок. Шаг = ДобавитьШагМастера(Элементы.ШагПовторОбъединения); Шаг.КнопкаНазад.Заголовок = НСтр("ru = '< В начало'"); - Шаг.КнопкаНазад.Подсказка = НСтр("ru = 'Вернутся к выбору основного элемента'"); + Шаг.КнопкаНазад.Подсказка = НСтр("ru = 'Вернуться к выбору основного элемента'"); Шаг.КнопкаДалее.КнопкаПоУмолчанию = Истина; Шаг.КнопкаДалее.Заголовок = НСтр("ru = 'Повторить'"); Шаг.КнопкаДалее.Подсказка = НСтр("ru = 'Повторить объединение'"); @@ -376,8 +376,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс мастера +#Область ПереключениеСтраницМастера &НаСервере Процедура ИнициализироватьНастройкиПошаговогоМастера() @@ -514,8 +513,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// События мастера +#КонецОбласти + +#Область СобытияМастера &НаКлиенте Процедура ПриАктивацииШагаМастера() @@ -600,8 +600,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры объединения элементов +#КонецОбласти + +#Область СлужебныеПроцедурыОбъединенияЭлементов &НаСервере Процедура УстановитьУсловноеОформление() @@ -983,8 +984,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с длительными операциями +#КонецОбласти + +#Область РаботаСДлительнымиОперациями &НаКлиенте Процедура НачатьОпределениеМестИспользования() @@ -1231,8 +1233,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции мастера +#КонецОбласти + +#Область СлужебныеПроцедурыИФункцииМастера // Описание настроек кнопки мастера. // @@ -1271,4 +1274,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl index ca37d39f7..6e9b7d936 100644 --- a/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеГрафиковРаботы/ManagerModule.bsl @@ -20,8 +20,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы // Создает график работы на основе производственного календаря Российской Федерации по шаблону "Пятидневка". // @@ -54,4 +53,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html index 86f31c550..36772bb20 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/Forms/ПодборКалендарейИзКлассификатора/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.16428"></meta></head><body> -<p>Предназначен для добавления новых <a href="Catalog.ПроизводственныеКалендари/Help">производственных календарей</a> (рекомендуется).</p> -<p>По умолчанию в приложении установлен и используется в работе <strong>Производственный календарь РФ Российская федерация</strong>.</p> -<p><strong>Производственный календарь РФ</strong> (который является общегосударственным) является базовым, входит в поставляемые данные приложения и обновляется по мере утверждения календаря и переносов праздников в РФ.</p> -<p>Также в приложении предусмотрены региональные производственные календари.</p> +<p>Предназначен для добавления новых <a href="Catalog.ПроизводственныеКалендари/Help">производственных календарей</a> (рекомендуется).</p> +<p>По умолчанию в приложении установлен и используется в работе <strong>Производственный календарь РФ Российская федерация</strong>.</p> +<p><strong>Производственный календарь РФ</strong> (который является общегосударственным) является базовым, входит в поставляемые данные приложения и обновляется по мере утверждения календаря и переносов праздников в РФ.</p> +<p>Также в приложении предусмотрены региональные производственные календари.</p> <p>Региональный производственный календарь формируется на основании базового календаря - <strong>Производственного календаря РФ</strong>. При изменении федерального календаря автоматически обновляются региональные календари в классификаторе.</p> <p>Региональные производственные календари в списке упорядочены по коду региона.</p> <p>Приложение позволяет по ИНН определить региональный производственный календарь.</p> <p>В классификаторе производственных календарей выводится:</p> <ul><li><strong>Наименование </strong>- полное наименование. </li> -<li><strong>Код</strong> - код календаря соответствует общепринятому коду региона.</li></ul><h3>Добавление производственного календаря из классификатора в список производственных календарей</h3> +<li><strong>Код</strong> - код календаря соответствует общепринятому коду региона.</li></ul><h3>Добавление производственного календаря из классификатора в список производственных календарей</h3> <ul><li> <div>Выделив производственный календарь, нажмите кнопку <strong>Выбрать</strong>.</div> </li> <li> -<div>Воспользуйтесь двойным щелчком мыши по производственному календарю для добавления в список производственных календарей.</div></li></ul><h3>См. также: </h3> +<div>Воспользуйтесь двойным щелчком мыши по производственному календарю для добавления в список производственных календарей.</div></li></ul><h3>См. также: </h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl index bbde00785..ebea3a6b6 100644 --- a/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаполнениеКалендарныхГрафиков/ManagerModule.bsl @@ -57,7 +57,7 @@ Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт - Возврат "3.1.10.483"; + Возврат "3.1.11.133"; КонецФункции diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html index 62b6419cb..5df2ee54c 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html @@ -1,10 +1,10 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> -<p>Предназначена для просмотра событий доступа к персональным данным, зарегистрированным в приложении.</p> +<p>Предназначена для просмотра событий доступа к персональным данным, зарегистрированным в приложении.</p> <p>Открывается по команде <strong>Защита персональных данных</strong> в разделе <strong>Администрирование - Поддержка и обслуживание</strong>.</p> -<p>Согласно Федеральному закону от 27.06.2006 №152-Ф3 "О персональных данных" и подзаконным актам в приложении реализована регистрация следующих событий:</p> +<p>Согласно Федеральному закону от 27.06.2006 №152-Ф3 "О персональных данных" и подзаконным актам в приложении реализована регистрация следующих событий:</p> <ul><li>вход в приложение; </li> -<li>выход из приложения; +<li>выход из приложения; </li> <li>аутентификация; </li> @@ -12,10 +12,10 @@ </li> <li>доступ к персональным данным; </li> -<li>отказ в доступе к персональным данным.</li></ul><p>В приложении могут регистрироваться события доступа к персональным данным с указанием субъекта. Для этого необходимо настроить регистрацию событий доступа к персональным данным.</p> -<p>Регистрация почти всех событий (кроме событий доступа к персональным данным) в приложении выполняется по умолчанию. Для регистрации событий доступа к персональным данным физических лиц администратору приложения необходимо выполнить команду <strong>Поддержка и обслуживание - Регистрация событий доступа к персональным данным</strong> раздела <strong>Администрирование</strong>. Далее необходимо установить флажок <strong>Личные данные</strong> для регистрации доступа к личным данным, установить флажок <strong>Паспортные данные</strong> для регистрации доступа к паспортным данным. После этого приложение автоматически регистрирует события доступа к этим данным в списке событий.</p> -<p>Администратор открывает список событий, устанавливает отбор по периоду и по событию, получает список зарегистрированных в приложении событий. Полученный список можно вывести на печать стандартными средствами приложения.</p> -<p>События, связанные с защитой персональных данных, фиксируются в приложении автоматически. Зарегистрированные в приложении события можно увидеть в списке.</p> +<li>отказ в доступе к персональным данным.</li></ul><p>В приложении могут регистрироваться события доступа к персональным данным с указанием субъекта. Для этого необходимо настроить регистрацию событий доступа к персональным данным.</p> +<p>Регистрация почти всех событий (кроме событий доступа к персональным данным) в приложении выполняется по умолчанию. Для регистрации событий доступа к персональным данным физических лиц администратору приложения необходимо выполнить команду <strong>Поддержка и обслуживание - Регистрация событий доступа к персональным данным</strong> раздела <strong>Администрирование</strong>. Далее необходимо установить флажок <strong>Личные данные</strong> для регистрации доступа к личным данным, установить флажок <strong>Паспортные данные</strong> для регистрации доступа к паспортным данным. После этого приложение автоматически регистрирует события доступа к этим данным в списке событий.</p> +<p>Администратор открывает список событий, устанавливает отбор по периоду и по событию, получает список зарегистрированных в приложении событий. Полученный список можно вывести на печать стандартными средствами приложения.</p> +<p>События, связанные с защитой персональных данных, фиксируются в приложении автоматически. Зарегистрированные в приложении события можно увидеть в списке.</p> <p>Каждое событие фиксируется в отдельной строке списка. Важные события (с точки зрения доступа к персональным данным) выделяются в списке цветом. В списке выводится:</p> <ul><li><strong>Дата, время</strong> - помимо даты и времени значком отображается вид события; </li> @@ -23,17 +23,17 @@ </li> <li><strong>Пользователь</strong>, связанный с событием; <a name="СтандартныеПодсистемы.Пользователи"> </a></li> -<li><a name="СтандартныеПодсистемы.Пользователи"><strong>Сведения о событии</strong> - дополнительная информация о событии (текущий пользователь ОС, который заходил в приложение, справочник приложения, связанный с персональными данными, в который заходил </a><a href="Catalog.Пользователи/Help">пользователь</a> и т.п.).</li></ul><h3>Просмотр события</h3> +<li><a name="СтандартныеПодсистемы.Пользователи"><strong>Сведения о событии</strong> - дополнительная информация о событии (текущий пользователь ОС, который заходил в приложение, справочник приложения, связанный с персональными данными, в который заходил </a><a href="Catalog.Пользователи/Help">пользователь</a> и т.п.).</li></ul><h3>Просмотр события</h3> <ul><li> -<div>Для просмотра детальной информации о событии можно воспользоваться двойным щелчком мыши или кнопкой <img src="StdPicture.Properties"></img> <strong>Просмотр текущего события</strong>.</div> +<div>Для просмотра детальной информации о событии можно воспользоваться двойным щелчком мыши или кнопкой <img src="StdPicture.Properties"></img><strong>Просмотр текущего события</strong>.</div> </li> <li> <div>Также можно воспользоваться командой контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</div></li></ul><h3>Отбор событий</h3> <ul><li>В списке показаны не все события, а то количество, которое задано в поле <strong>Количество отбираемых событий</strong>. </li> -<li>С помощью кнопки <img src="StdPicture.SetDateInterval"></img> <strong>Установить интервал дат для просмотра</strong> можно управлять интервалом показа событий, также можно воспользоваться двойным щелчком по содержимому колонки <strong>Дата, время</strong>. +<li>С помощью кнопки <img src="StdPicture.SetDateInterval"></img><strong>Установить интервал дат для просмотра</strong> можно управлять интервалом показа событий, также можно воспользоваться двойным щелчком по содержимому колонки <strong>Дата, время</strong>. </li> -<li>С помощью кнопок <strong>Установить отбор по значению в текущей колонке</strong> и <strong>Отключить отбор</strong> можно управлять отбором событий. +<li>С помощью кнопок <strong>Установить отбор по значению в текущей колонке</strong> и <strong>Отключить отбор</strong> можно управлять отбором событий. <ul><li>Для этого выделите нужное событие в списке (например, <strong>Доступ</strong>), затем нажмите кнопку <strong>Установить отбор по значению в текущей колонке</strong>. </li></ul></li> <li>Также можно воспользоваться командами контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>См. также:</h3> <ul><li> diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Информация/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Информация/Form.form index b481227ec..d967cea8c 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Информация/Form.form +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Информация/Form.form @@ -397,8 +397,8 @@ <key>ru</key> <value><b>Для передачи расписки в бумажном виде: </> - 1.Распечатайте и подпишите <link ПечатьСертификата>бланк квалифицированного сертификата</>. - 2.Передайте бланк сертификата обслуживающему вас партнеру.</value> + 1. Распечатайте и подпишите <link ПечатьСертификата>бланк квалифицированного сертификата</>. + 2. Передайте бланк сертификата обслуживающему вас партнеру.</value> truetrue diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ИнформацияОДоступностиВыпуска/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ИнформацияОДоступностиВыпуска/Module.bsl index d3143ccd0..14db83a89 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ИнформацияОДоступностиВыпуска/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/ИнформацияОДоступностиВыпуска/Module.bsl @@ -36,7 +36,7 @@ &НаКлиенте Процедура БольшеНеПредупреждатьПриИзменении(Элемент) - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата", "ПоказыватьИнформациюОДоступностиВыпускаСертификатаДляРуководителей", Не БольшеНеПредупреждать); diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form index 4c506b86c..0ad6bb82a 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Form.form @@ -1888,31 +1888,6 @@ true - - ВладелецАдресРегистрацииXML - 25 - - String - - - - true - - - true - - - - ВидКонтактнойИнформации - 26 - - - true - - - true - - ВидКонтактнойИнформацииТелефон 27 diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl index 44ff709c8..3888480c2 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОВладельцеСертификата/Module.bsl @@ -21,16 +21,8 @@ ЗаполнитьСведенияОВладельце(ЭтотОбъект, Параметры.СведенияОВладельце); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - ВидКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Адрес); - - ВидКонтактнойИнформации.НастройкиПроверки.ТолькоНациональныйАдрес = Истина; - - ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Телефон); - + ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); КонецЕсли; Если СведенияОВладельце.ЭтоФизическоеЛицо Тогда @@ -315,9 +307,7 @@ ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформацииТелефон, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); - ПараметрыФормы.Вставить("Заголовок", ЗаголовокФормы); - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); КонецПроцедуры @@ -349,8 +339,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ПараметрыВидаКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыАдресаЭлектроннойПочты(); ЭлектроннаяПочта = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( - ЭлектроннаяПочта, Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты); + ЭлектроннаяПочта, ПараметрыВидаКонтактнойИнформации.Тип); КонецЕсли; ЗаполнитьЗначенияСвойств(СведенияОВладельце, ЭтотОбъект); @@ -364,7 +355,6 @@ КонецЕсли; СведенияОВладельце.ВладелецТелефон = ВладелецТелефонXML; - СведенияОВладельце.ВладелецАдресРегистрации = ВладелецАдресРегистрацииXML; Возврат Истина; diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl index c6cf9172d..5a7b4047a 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/СведенияОбОрганизации/Module.bsl @@ -14,12 +14,8 @@ ЗаполнитьСведенияОбОрганизации(ЭтотОбъект, Параметры.СведенияОбОрганизации); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - - ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации( - Перечисления["ТипыКонтактнойИнформации"].Телефон); - + ВидКонтактнойИнформацииТелефон = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); КонецЕсли; Если Параметры.ТолькоПросмотр Тогда @@ -232,9 +228,7 @@ ПараметрыФормы = МодульУправлениеКонтактнойИнформациейКлиент.ПараметрыФормыКонтактнойИнформации( ВидКонтактнойИнформацииТелефон, ЭтотОбъект[ИмяРеквизита + "XML"], ЭтотОбъект[ИмяРеквизита]); - ПараметрыФормы.Вставить("Заголовок", ЗаголовокФормы); - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыФормы, Элемент); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form index ba9cf4b53..723d8daf4 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Form.form @@ -8,23 +8,167 @@ ШапкаЗаявления 813 - ГруппаОбработкаЗаявления - 766 - - ОбновитьСостояниеОбработкиЗаявления - 768 + ГруппаОбработкаЗаявленияСправка + 1032 + + ГруппаОбработкаЗаявления + 766 + + ОбновитьСостояниеОбработкиЗаявления + 768 + + <key>ru</key> + <value>Обновить состояние обработки заявления</value> + + true + true + + true + + + ОбновитьСостояниеОбработкиЗаявленияРасширеннаяПодсказка + 769 + Label + true + true + + Left + + + UsualButton + Form.Command.ОбновитьСостояниеОбработкиЗаявления + Normal + Auto + true + true + UserCmds + + Style.ToolTipBackColor + + Auto + + + ДекорацияСостояние + 910 + + <key>ru</key> + <value>Состояние заявления</value> + + true + true + + true + + + ДекорацияСостояниеРасширеннаяПодсказка + 912 + Label + true + true + + Left + + + + ДекорацияСостояниеКонтекстноеМеню + 911 + true + + Label + 60 + true + true + + Left + + + + НапомнитьОГотовности + 887 + + <key>ru</key> + <value>Напомнить о готовности</value> + + true + true + + true + + + НапомнитьОГотовности + + Right + + OnChange + НапомнитьОГотовностиПриИзменении + + + НапомнитьОГотовностиРасширеннаяПодсказка + 889 + Label + true + true + + Left + + + + НапомнитьОГотовностиКонтекстноеМеню + 888 + true + + CheckBoxField + Right + Enter + true + Left + true + + + true + true + + true + <key>ru</key> - <value>Обновить состояние обработки заявления</value> + <value>Обработка заявления</value> + true + Top + + ГруппаОбработкаЗаявленияРасширеннаяПодсказка + 767 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + + Style.ToolTipBackColor + + Auto + Auto + + + + Справка + 1030 true true true - ОбновитьСостояниеОбработкиЗаявленияРасширеннаяПодсказка - 769 + СправкаРасширеннаяПодсказка + 1031 Label true true @@ -33,94 +177,17 @@ UsualButton - Form.Command.ОбновитьСостояниеОбработкиЗаявления + Form.StandardCommand.Help Normal - Auto + Picture true true - UserCmds - - Style.ToolTipBackColor - - Auto - - - ДекорацияСостояние - 910 - - <key>ru</key> - <value>Состояние заявления</value> - - true - true - - true - - - ДекорацияСостояниеРасширеннаяПодсказка - 912 - Label - true - true - - Left - - - - ДекорацияСостояниеКонтекстноеМеню - 911 - true - - Label - 60 - true - true - - Left - - - - НапомнитьОГотовности - 887 - - <key>ru</key> - <value>Напомнить о готовности</value> - - true - true - - true - - - НапомнитьОГотовности - - Right - - OnChange - НапомнитьОГотовностиПриИзменении - - - НапомнитьОГотовностиРасширеннаяПодсказка - 889 - Label - true - true - - Left - - - - НапомнитьОГотовностиКонтекстноеМеню - 888 - true - - CheckBoxField Right - Enter - true - Left - true - + UserCmds + + StdPicture.FormHelp + + Auto true true @@ -129,13 +196,13 @@ <key>ru</key> - <value>Обработка заявления</value> + <value>Обработка заявления и справка</value> true Top - ГруппаОбработкаЗаявленияРасширеннаяПодсказка - 767 + ГруппаОбработкаЗаявленияСправкаРасширеннаяПодсказка + 1033 Label true true @@ -148,9 +215,6 @@ AlwaysHorizontal true true - - Style.ToolTipBackColor - Auto Auto @@ -855,6 +919,97 @@ Auto + + ГруппаТарифы + 1023 + + ПредставлениеТарифа + 1025 + + <key>ru</key> + <value>Тариф</value> + + true + true + + true + + + ДанныеЗаявления.ПредставлениеТарифа + + Button + + OnChange + ПредставлениеТарифаПриИзменении + + + ПредставлениеТарифаРасширеннаяПодсказка + 1027 + Label + true + true + Left + + Left + + + + ПредставлениеТарифаКонтекстноеМеню + 1026 + true + + InputField + true + Enter + true + Left + true + + 20 + true + false + true + true + false + false + false + true + true + true + true + Normal + DontUse + + + true + true + + true + + + <key>ru</key> + <value>Тарифы</value> + + + ГруппаТарифыРасширеннаяПодсказка + 1024 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + ГруппаБумажноеПродление 861 @@ -1099,10 +1254,6 @@ ДокументыПартнер - - ru - Партнер фирмы 1С, который будет обрабатывать заявление. - Button OnChange @@ -1111,6 +1262,7 @@ ДокументыПартнерРасширеннаяПодсказка 514 + true Label true true @@ -1161,28 +1313,123 @@ - - ДокументыПартнерИНН - 335 - - <key>ru</key> - <value>ИНН партнера</value> - + + ГруппаРеквизитыОбслуживающейОрганизации + 1028 + + ДокументыПартнерИНН + 335 + + <key>ru</key> + <value>ИНН партнера</value> + + true + true + + true + + + ДокументыПартнерИНН + + + OnChange + ДокументыПартнерИННПриИзменении + + + ДокументыПартнерИННРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + + ДокументыПартнерИННКонтекстноеМеню + 336 + true + + InputField + Enter + true + Left + true + + 14 + true + true + false + true + true + true + true + Normal + + + + ДокументыПартнерКПП + 338 + + <key>ru</key> + <value>КПП партнера</value> + + true + true + + true + + + ДокументыПартнерКПП + + + OnChange + ДокументыПартнерКПППриИзменении + + + ДокументыПартнерКППРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + + ДокументыПартнерКППКонтекстноеМеню + 339 + true + + InputField + Enter + true + Left + true + + 14 + true + true + false + true + true + true + true + Normal + + true true true - - ДокументыПартнерИНН - - - OnChange - ДокументыПартнерИННПриИзменении - + + <key>ru</key> + <value>Реквизиты обслуживающей организации</value> + - ДокументыПартнерИННРасширеннаяПодсказка - 337 + ГруппаРеквизитыОбслуживающейОрганизацииРасширеннаяПодсказка + 1029 Label true true @@ -1190,77 +1437,14 @@ Left - - ДокументыПартнерИННКонтекстноеМеню - 336 - true - - InputField - Enter - true - Left - true - - 14 - true - true - false - true - true - true - true - Normal - - - - ДокументыПартнерКПП - 338 - - <key>ru</key> - <value>КПП партнера</value> - - true - true - - true - - - ДокументыПартнерКПП - - - OnChange - ДокументыПартнерКПППриИзменении - - - ДокументыПартнерКППРасширеннаяПодсказка - 340 - Label - true - true - - Left - - - - ДокументыПартнерКППКонтекстноеМеню - 339 - true - - InputField - Enter - true - Left - true - - 14 - true - true - false - true - true - true - true - Normal + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto true @@ -1508,7 +1692,7 @@ 951 <key>ru</key> - <value>Программа для работы с электронной подписью должна быть установлена на компьютере</value> + <value>Приложение для работы с электронной подписью должно быть установлено на компьютере</value> Label true @@ -1587,7 +1771,7 @@ 3 <key>ru</key> - <value>Программа для работы с электронной подписью должна быть установлена на компьютере</value> + <value>Приложение для работы с электронной подписью должно быть установлено на компьютере</value> Label true @@ -1998,6 +2182,7 @@ MoveUp OutputList SearchEverywhere + SearchHistory SelectAll ShowMultipleSelection ShowRowRearrangement @@ -2525,6 +2710,155 @@ Auto + + ГруппаСНИЛС + 1012 + + ДекорацияСНИЛС + 1014 + + <key>ru</key> + <value>СНИЛС:</value> + + true + true + + true + + + ДекорацияСНИЛСРасширеннаяПодсказка + 1016 + Label + true + true + + Left + + + + ДекорацияСНИЛСКонтекстноеМеню + 1015 + true + + Label + true + true + + Style.ЗаявлениеНаВыпускСертификатаЗаголовокКлючевогоПоляШрифт + + + Left + + + + ВыбратьСНИЛС + 1017 + + <key>ru</key> + <value><link ВыбратьДокумент>выбрать файл</></value> + + true + true + + true + + + ВыбратьСНИЛСРасширеннаяПодсказка + 1019 + Label + true + true + + Left + + + + ВыбратьСНИЛСКонтекстноеМеню + 1018 + true + + true + Label + true + true + + + URLProcessing + ВыбратьДокументОбработкаНавигационнойСсылки + + Left + + + + ОчиститьСНИЛС + 1020 + + <key>ru</key> + <value>Очистить</value> + + true + true + + true + + + ОчиститьСНИЛСРасширеннаяПодсказка + 1022 + Label + true + true + + Left + + + + ОчиститьСНИЛСКонтекстноеМеню + 1021 + true + + true + true + + + Click + ОчиститьДокумент + + + StdPicture.InputFieldClear + + true + AsFileRef + + + true + true + + true + + + <key>ru</key> + <value>СНИЛС</value> + + + ГруппаСНИЛСРасширеннаяПодсказка + 1013 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + NormalSeparation + true + true + Auto + Auto + + ГруппаДоверенность 930 @@ -3181,13 +3515,13 @@ ГруппаТребуетсяПомощь - 789 - - ТехническаяИнформация - 815 + 1052 + + ДекорацияСертификаты + 1044 <key>ru</key> - <value>Техническая информация</value> + <value>В случае необходимости установки выпущенного сертификата средствами электронной подписи и шифрования сохраните <link Сертификат>сертификат</> и <link КорневойСертификат>корневой сертификат</> на компьютер.</value> true true @@ -3195,8 +3529,8 @@ true - ТехническаяИнформацияРасширеннаяПодсказка - 816 + ДекорацияСертификатыРасширеннаяПодсказка + 1046 Label true true @@ -3204,21 +3538,159 @@ Left - Hyperlink - Form.Command.ТехническаяИнформация - Normal - Auto - true + + ДекорацияСертификатыКонтекстноеМеню + 1045 + true + + true + Label + 45 true - UserCmds - Auto + + + URLProcessing + ДекорацияСертификатыОбработкаНавигационнойСсылки + + Left + + + + ГруппаОбращенияВТехническуюПоддержку + 1054 + + ОписаниеОбращенияВПоддержку + 1056 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 1058 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 1057 + true + + Label + true + true + + Left + + + + ВопросВПоддержку + 1059 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 1060 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 1061 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 1062 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.Скачать + + Auto + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 1055 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + ДекорацияОписание 802 <key>ru</key> - <value>Описание, условия и цены</value> + <value>Описание и условия</value> true true @@ -3299,9 +3771,10 @@ ru Требуется помощь? + Center ГруппаТребуетсяПомощьРасширеннаяПодсказка - 790 + 1053 Label true true @@ -5316,6 +5789,132 @@ true + + АдресФайлаСНИЛС + 106 + + String + + + + true + + + true + + + + Тарифы + 107 + + ValueTable + + + true + + + true + + + Код + 1 + + String + + + + true + + + true + + + + Описание + 2 + + String + + + + true + + + true + + + + Представление + 5 + + String + + + + true + + + true + + + + ТипПровайдера + 3 + + String + + + + true + + + true + + + + + ПродлениеСертификатаСтороннегоУЦ + 111 + + Boolean + + + true + + + true + + + + АдресЗаявлениеНаПодключение + 108 + + String + + + + true + + + true + + + + СтоимостьЛицензииКриптоПро + 112 + + Number + + 9 + + + + true + + + true + + УказатьСведенияОбОрганизации @@ -5417,22 +6016,21 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ТехническаяИнформация</name> + <name>ИнформацияДляОтправкиВПоддержку</name> <title> <key>ru</key> - <value>Техническая информация</value> + <value>Информация для отправки в поддержку</value> 4 - - ru - Техническая информация - true + + CommonPicture.Скачать + - ТехническаяИнформация + ИнформацияДляОтправкиВПоддержку Auto @@ -5546,6 +6144,31 @@ Auto Auto + + ВопросВПоддержку + + <key>ru</key> + <value>Вопрос в поддержку</value> + + 2 + + ru + Вопрос в поддержку + + + true + + + CommonPicture.ОтправитьЭлектронноеПисьмо + + + + ВопросВПоддержку + + + Auto + Auto + СертификатСсылка diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html index b4e782111..46332d037 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Help/ru.html @@ -1,16 +1,20 @@ -

          Предназначена для подготовки заявления на выпуск нового квалифицированного сертификата в удостоверяющий центр 1С.

          +

          Предназначена для подготовки заявления на выпуск нового квалифицированного сертификата в удостоверяющий центр 1С.

          Заполните необходимые поля. Рекомендуется выбирать данные из списка, это значительно уменьшает вероятность ошибок и повышает скорость заполнения. Приложение проверяет правильность заполнения реквизитов, если они были неправильно заполнены, выводится сообщение об ошибке.

          -
          • Организация - выберите организацию из списка. Если данные организации были заполнены, то автоматически заполняются поля:
          • -
            • Владелец сертификата - для юридических лиц по умолчанию выбирается директор организации, но можно выбрать другого сотрудника из списка. Для ИП в это поле дублируются его данные.
            • -
            • Подписант заявления, его Должность - заполняются автоматически из данных организации. Для ИП недоступны.
            • -
            • Основание - заполняется автоматически из данных организации, для ИП недоступно.
          • Обслуживающая организация (партнер 1С) - выберите из списка. После этого автоматически заполняются поля:
          • +

            В поле Оформить выберите с помощью выпадающего списка способ оформления заявление:

            +
            • В бумажном виде;
            • +
            • В электронном виде:
            • +
              • Для продления сертификата - выберите сертификат, которым будет подписано заявление, оформленное в электронном виде;
            • Физическое лицо - выберите владельца или заполните поля вручную.
            • +
            • Тариф - выберите тариф 1С:Подписи. Тариф включает в себя получение сертификата усиленной квалифицированной электронной подписи от УЦ ООО "НЦП 1С". Подробная информация о тарифе см. на сайте.
            • +
            • Обслуживающая организация - выберите из списка (доступно при заполнении в бумажном виде). После этого автоматически заполняются поля:
              • ИНН партнера;
              • -
              • КПП партнера.

            Создание ключа электронной подписи

            -
            • В поле С помощью приложения выберите приложение - криптопровайдер из списка установленных на компьютере. Создание ключа производится при печати заявления.

            Сохранение заявления

            +
          • КПП партнера.

          Создание ключа электронной подписи

          +
          • В поле С помощью приложения выберите приложение из списка установленных на компьютере. Создание ключа производится при печати заявления.
          • +
          • С помощью флажка можно Включить лицензию КриптоПро CSP.
          • С помощью ссылки выбрать файл прикрепите скан паспорта и СНИЛС.

          Печать

          +
          • С помощью ссылки текст заявления можно просмотреть и распечатать подготовленное заявление на принтере.

          Сохранение заявления

          • Заявление сохраняется автоматически на стадии подготовки и хранится в списке сертификатов. В любой момент к нему можно вернуться и продолжить работу.

          Соглашение

          -
          • Перейдите по ссылке и прочтите условия соглашения о присоединении к регламенту удостоверяющего центра (УЦ). По гиперссылке можно перейти к просмотру информации об УЦ. 
          +
          • Перейдите по ссылке и прочтите условия соглашения о присоединении к регламенту удостоверяющего центра (УЦ). По гиперссылке можно перейти к просмотру информации об УЦ.

          Отправка заявления

          • Для отправки заявления необходимо подготовить комплект документов (нажмите на ссылку для просмотра списка необходимых документов);
          • Нажмите Отправить заявление.

          Ожидание обработки заявления

          diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl index 87d22df1d..f73cb7ab2 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Forms/Форма/Module.bsl @@ -38,6 +38,7 @@ Элементы.НаименованиеСокращенное.Видимость = Ложь; Элементы.ВладелецСертификатаСтрокой.Видимость = Ложь; Элементы.ОчиститьПаспорт.Видимость = Ложь; + Элементы.ОчиститьСНИЛС.Видимость = Ложь; Элементы.ОчиститьДоверенность.Видимость = Ложь; ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); @@ -57,6 +58,7 @@ Попытка ЗагрузитьЗаявление(); Если ЗначениеЗаполнено(ДанныеЗаявления.СертификатОснование) Тогда + ПродлениеСертификатаСтороннегоУЦ = СертификатВыпущенСтороннимУЦ(ДанныеЗаявления.СертификатОснование); СертификатОснованиеДействуетДо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( ДанныеЗаявления.СертификатОснование, "ДействителенДо"); КонецЕсли; @@ -67,6 +69,7 @@ КонецПопытки; ИначеЕсли ЗначениеЗаполнено(Параметры.СертификатОснование) Тогда + ПродлениеСертификатаСтороннегоУЦ = СертификатВыпущенСтороннимУЦ(Параметры.СертификатОснование); СкопироватьЗаявление(Параметры.СертификатОснование); ПриИзмененииОрганизацииНаСервере(Истина); Иначе @@ -76,14 +79,14 @@ Объект.Пользователь = Объект.Добавил; Если ЗаявлениеДляФизическихЛицДоступно - И ЗначениеЗаполнено(Параметры.ФизическоеЛицо) Тогда + И ЗначениеЗаполнено(Параметры.ФизическоеЛицо) Тогда ЭтоФизическоеЛицо = Истина; Сотрудник = Параметры.ФизическоеЛицо; СозданиеПоПараметруФизическоеЛицо = Истина; ИначеЕсли ЗаявлениеДляОрганизацийДоступно - И ЗначениеЗаполнено(Параметры.Организация) Тогда + И ЗначениеЗаполнено(Параметры.Организация) Тогда Организация = Параметры.Организация; СозданиеПоПараметруОрганизация = Истина; @@ -113,6 +116,8 @@ Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Ложь; + ПодсказкаОбслуживающейОрганизации = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Узнать контакты партнера можно на сайте.'"), СсылкаНаКонтактыПартнеров()); ПодсказкаДляПрограммы = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Для создания запроса на сертификат используется приложение электронной подписи и шифрования %1 или %2 или активный ключевой носитель (Рутокен или JaCarta). |По вопросам работы приложения обратитесь к его документации или воспользуйтесь дополнительной инструкцией на сайте 1С. @@ -125,11 +130,25 @@ ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро(), ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); + Элементы.ДокументыПартнерРасширеннаяПодсказка.Заголовок = ПодсказкаОбслуживающейОрганизации; Элементы.ПрограммаРасширеннаяПодсказка.Заголовок = ПодсказкаДляПрограммы; Элементы.ПредставлениеПрограммыРасширеннаяПодсказка.Заголовок = ПодсказкаДляПрограммы; Элементы.ДекорацияПрограмма.Видимость = Ложь; СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаОбращенияВТехническуюПоддержку.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаКлиенте @@ -137,9 +156,12 @@ ПрограммыАвто = Новый Соответствие; - Если Не ТолькоПросмотрЗаявления И ДанныеЗаявления.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено") Тогда - ОтобразитьПоискПриложений(Истина); - ПодключитьОбработчикОжидания("ПриИзмененииСоставаИлиНастроекПрограмм", 0.1, Истина); + Если Не ТолькоПросмотрЗаявления Тогда + ОтобразитьИнформациюОТарифах(); + Если ДанныеЗаявления.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено") Тогда + ОтобразитьПоискПриложений(Истина); + ПодключитьОбработчикОжидания("ПриИзмененииСоставаИлиНастроекПрограмм", 0.1, Истина); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -258,9 +280,8 @@ ОчиститьСообщения(); ПриПотереГотовности(ЭтотОбъект); - ПодключитьОбработчикОжидания( - "ЭлектронноеПродлениеПриИзмененииОбработчикОжидания", 0.1, Истина); - + ПодключитьОбработчикОжидания("ЭлектронноеПродлениеПриИзмененииОбработчикОжидания", 0.1, Истина); + КонецПроцедуры &НаКлиенте @@ -268,10 +289,16 @@ ПриПотереГотовности(ЭтотОбъект); - Если ЗначениеЗаполнено(ДанныеЗаявления.СертификатОснование) Тогда - СкопироватьЗаявление(ДанныеЗаявления.СертификатОснование); + Если Не ЗначениеЗаполнено(ДанныеЗаявления.СертификатОснование) Тогда + Возврат; КонецЕсли; + ПродлениеСертификатаСтороннегоУЦ = СертификатВыпущенСтороннимУЦ(ДанныеЗаявления.СертификатОснование); + + СкопироватьЗаявление(ДанныеЗаявления.СертификатОснование); + + УстановитьОтображениеРеквизитовЗависимыхОтВидаПродления(); + КонецПроцедуры &НаКлиенте @@ -299,6 +326,18 @@ СтандартнаяОбработка = Ложь; + ВыбратьДокументОбработкаНавигационнойСсылкиПродолжение(Элемент, НавигационнаяСсылкаФорматированнойСтроки); + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ВыбратьДокументОбработкаНавигационнойСсылкиПродолжение(Элемент, НавигационнаяСсылкаФорматированнойСтроки) + + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + Если НавигационнаяСсылкаФорматированнойСтроки = "ВыбратьДокумент" Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПослеДобавленияДокумента", ЭтотОбъект, Элемент.Имя); @@ -308,7 +347,7 @@ ПараметрыЗагрузки.Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сканированные документы (%1)'"), "*.pdf;*.png;*.jpg;*.zip") + "|*.pdf;*.png;*.jpg;*.jpeg;*.zip"; - + ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки); @@ -331,7 +370,43 @@ Процедура НапомнитьОГотовностиПриИзменении(Элемент) ПодключитьОбработчикОжидания("ОбработчикОжиданияНапомнитьОГотовности", 0.1, Истина); + +КонецПроцедуры +&НаКлиенте +Процедура ПредставлениеТарифаПриИзменении(Элемент) + + Если ПустаяСтрока(ДанныеЗаявления.ПредставлениеТарифа) Тогда + Если Тарифы.Количество() > 0 Тогда + СвойстваТарифа = Тарифы[0]; + Иначе + СвойстваТарифа = СвойстваБазовогоТарифа(); + БазовыйТариф = Тарифы.Добавить(); + ЗаполнитьЗначенияСвойств(БазовыйТариф, СвойстваТарифа); + КонецЕсли; + ДанныеЗаявления.КодТарифа = СвойстваТарифа.Код; + ДанныеЗаявления.ПредставлениеТарифа = СвойстваТарифа.Представление; + ДанныеЗаявления.ОписаниеТарифа = СвойстваТарифа.Описание; + КонецЕсли; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Представление", ДанныеЗаявления.ПредставлениеТарифа); + ВыбранныйТариф = Тарифы.НайтиСтроки(ПараметрыОтбора)[0]; + ДанныеЗаявления.КодТарифа = ВыбранныйТариф.Код; + ДанныеЗаявления.ОписаниеТарифа = ВыбранныйТариф.Описание; + + Элементы.ПредставлениеТарифаРасширеннаяПодсказка.Заголовок = ПодробноеОписаниеТарифа(); + + Если Не ЗаполнитьСписокПрограмм() Тогда + Возврат; + КонецЕсли; + +#Если ВебКлиент Тогда + ПодключитьОбработчикОжидания("ЗаполнитьПрограммуПослеИзмененияТарифа", 0.3, Истина); +#Иначе + ПодключитьОбработчикОжидания("ЗаполнитьПрограммуПослеИзмененияТарифа", 0.1, Истина); +#КонецЕсли + КонецПроцедуры #Область Организация @@ -413,6 +488,17 @@ КонецПроцедуры +&НаКлиенте +Процедура ДекорацияСертификатыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ЭлектроннаяПодписьСлужебныйКлиент.СохранитьСертификат( + Неопределено, + ?(НавигационнаяСсылкаФорматированнойСтроки = "Сертификат", АдресСертификата, АдресКорневогоСертификата), + ?(НавигационнаяСсылкаФорматированнойСтроки = "Сертификат", ИмяФайлаБезРасширения(), НСтр("ru = 'Корневой сертификат'"))); + +КонецПроцедуры + #КонецОбласти #Область ВладелецСертификата @@ -820,7 +906,7 @@ Доступность = Ложь; СозданиеКлючаИЗапросаНаСертификатНачало(); - + КонецПроцедуры &НаКлиенте @@ -914,36 +1000,26 @@ РезультатОбновления = ОбновитьСостояниеОбработкиЗаявленияНаСервере(); СостояниеОбработкиЗаявленияАктуально = Истина; Если РезультатОбновления = Истина Тогда - УстановитьПолученныйСертификат(); - ИначеЕсли ЗначениеЗаполнено(ДанныеЗаявления.СостояниеОбработкиЗаявления) Тогда - ПоказатьПредупреждение(Неопределено, - ДанныеЗаявления.СостояниеОбработкиЗаявления); + ПоказатьПредупреждение(Неопределено, ДанныеЗаявления.СостояниеОбработкиЗаявления); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ТехническаяИнформация(Команда) +Процедура ВопросВПоддержку(Команда) - ПараметрыВывода = Новый Структура(); - ПараметрыВывода.Вставить("ИмяФайла", ИмяФайлаБезРасширения()); - ПараметрыВывода.Вставить("ИдентификаторАбонента", ДанныеЗаявления.ИдентификаторАбонента); - ПараметрыВывода.Вставить("ИдентификаторДокументооборота", ДанныеЗаявления.ИдентификаторДокументооборота); - ПараметрыВывода.Вставить("АдресСертификата", АдресСертификата); - ПараметрыВывода.Вставить("АдресОтветаСервиса", АдресОтветаСервиса); - ПараметрыВывода.Вставить("АдресЗапросаНаСертификат", АдресЗапросаНаСертификат); - ПараметрыВывода.Вставить("АдресКорневогоСертификата", АдресКорневогоСертификата); - ПараметрыВывода.Вставить("СостояниеЗаявления", ДанныеЗаявления.СостояниеЗаявления); - ПараметрыВывода.Вставить("СостояниеОбработкиЗаявления", ДанныеЗаявления.СостояниеОбработкиЗаявления); - ПараметрыВывода.Вставить("ДатаОбновленияСостояния", ДанныеЗаявления.ДатаОбновленияСостояния); - ПараметрыВывода.Вставить("СостояниеОбработкиЗаявленияАктуально", СостояниеОбработкиЗаявленияАктуально); + ВыгрузитьТехническуюИнформацию(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) + + Элементы.ГруппаТребуетсяПомощь.Скрыть(); + ВыгрузитьТехническуюИнформацию(Истина); - ОткрытьФорму( - "Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ТехническаяИнформация", - ПараметрыВывода, ЭтотОбъект); - КонецПроцедуры &НаКлиенте @@ -1113,6 +1189,12 @@ АдресЗапросаНаСертификат = ПоместитьВоВременноеХранилище(Содержание.ЗапросНаСертификат, УникальныйИдентификатор); КонецЕсли; + Если Содержание.Свойство("ЗаявлениеНаПодключение") + И ТипЗнч(Содержание.ЗаявлениеНаПодключение) = Тип("ДвоичныеДанные") Тогда + + АдресЗаявлениеНаПодключение = ПоместитьВоВременноеХранилище(Содержание.ЗаявлениеНаПодключение, УникальныйИдентификатор); + КонецЕсли; + Если Содержание.Свойство("Сертификат") И ТипЗнч(Содержание.Сертификат) = Тип("ДвоичныеДанные") Тогда @@ -1235,9 +1317,9 @@ КопияСвойств = Новый Структура(КопируемыеСвойства); ЗаполнитьЗначенияСвойств(КопияСвойств, Содержание); ЗаполнитьЗначенияСвойств(ЭтотОбъект, КопияСвойств); - + Иначе - + ДозаполнитьПоПредыдущемуЗаявлениюИлиСертификату(ДанныеСертификатаОснования); КонецЕсли; @@ -1250,8 +1332,7 @@ СертификатОснованиеДействуетДо = ДанныеСертификатаОснования.ДействителенДо; - ДанныеЗаявленияМенеджерЗаписи.ОформленоВЭлектронномВиде = ПроверитьСертификатНаВозможностьЭлектронногоПродления( - ДанныеСертификатаОснования, Ложь); + ДанныеЗаявленияМенеджерЗаписи.ОформленоВЭлектронномВиде = ПроверитьСертификатНаВозможностьЭлектронногоПродления(ДанныеСертификатаОснования, Ложь); ЗначениеВРеквизитФормы(ДанныеЗаявленияМенеджерЗаписи, "ДанныеЗаявления"); @@ -1284,29 +1365,34 @@ | ПО ЗаявленияНаВыпускСертификата.Сертификат = СертификатыКлючейЭлектроннойПодписиИШифрования.Ссылка |ГДЕ | СертификатыКлючейЭлектроннойПодписиИШифрования.Ссылка = &Ссылка"; - + Запрос.УстановитьПараметр("Ссылка", Сертификат); ДанныеСертификата= Запрос.Выполнить().Выбрать(); ДанныеСертификата.Следующий(); - + Возврат ДанныеСертификата; - + КонецФункции -&НаСервереБезКонтекста -Функция ПроверитьСертификатНаВозможностьЭлектронногоПродления(Знач ДанныеСертификата, СообщатьОбОшибках = Истина) - +&НаСервере +Функция ПроверитьСертификатНаВозможностьЭлектронногоПродления(Знач ДанныеСертификата, Знач СообщатьОбОшибках = Истина) + Если ТипЗнч(ДанныеСертификата) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда ДанныеСертификата = ДанныеСертификата(ДанныеСертификата); КонецЕсли; - + ВозможноЭлектронноеПродление = Истина; ШаблонСообщения = ""; - - Если ДанныеСертификата.СостояниеЗаявления = Неопределено Тогда - ВозможноЭлектронноеПродление = Ложь; - ШаблонСообщения = НСтр("ru = 'Для сертификата ""%1"" не найдено предыдущее заявление, электронное продление невозможно.'"); - ИначеЕсли ДанныеСертификата.СостояниеЗаявления <> Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда + + Если ДанныеСертификата.СостояниеЗаявления = Неопределено И Не ПродлениеСертификатаСтороннегоУЦ Тогда + + // Если не нашли в ИБ учетную запись, то подготавливаем заявление как при продлении сертификата стороннего УЦ. + ПродлениеСертификатаСтороннегоУЦ = Истина; + УстановитьОтображениеРеквизитовЗависимыхОтВидаПродления(); + + ИначеЕсли ДанныеСертификата.СостояниеЗаявления <> Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено + И Не ПродлениеСертификатаСтороннегоУЦ Тогда + Если СообщатьОбОшибках Тогда ШаблонСообщения = НСтр("ru = 'Для ""%1"" электронное продление невозможно, статус заявления продлеваемого сертификата ""%2""'"); ОбщегоНазначения.СообщитьПользователю( @@ -1314,8 +1400,11 @@ ДанныеСертификата.СертификатПредставление, ДанныеСертификата.СостояниеЗаявления), ДанныеСертификата.Ссылка); КонецЕсли; + Возврат Ложь; + Иначе + ТекущаяДата = ТекущаяУниверсальнаяДата(); Если Не ЗначениеЗаполнено(ДанныеСертификата.ДействителенДо) Тогда ВозможноЭлектронноеПродление = Ложь; @@ -1331,16 +1420,17 @@ ДанныеСертификата.СертификатПредставление), ДанныеСертификата.Ссылка); КонецЕсли; + КонецЕсли; - + Если Не ВозможноЭлектронноеПродление И СообщатьОбОшибках Тогда ОбщегоНазначения.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ДанныеСертификата.СертификатПредставление), ДанныеСертификата.Ссылка); КонецЕсли; - + Возврат ВозможноЭлектронноеПродление; - + КонецФункции &НаСервере @@ -1436,6 +1526,7 @@ ОбновитьЗначение(Содержание, "ПрограммаИдентификатор"); ОбновитьЗначение(Содержание, "КлючНаТокене"); ОбновитьЗначение(Содержание, "ЗапросНаСертификат", ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат)); + ОбновитьЗначение(Содержание, "ЗаявлениеНаПодключение", ПолучитьИзВременногоХранилища(АдресЗаявлениеНаПодключение)); ОбновитьЗначение(Содержание, "ОткрытаяЧастьКлючаЭП"); ОбновитьЗначение(Содержание, "ИдентификаторКлючаСубъекта"); ОбновитьЗначение(Содержание, "ДокументыПоляСертификата"); @@ -1478,7 +1569,7 @@ ДанныеЗаявленияМенеджерЗаписи.Сертификат = ТекущийОбъект.Ссылка; ДанныеЗаявленияМенеджерЗаписи.ДляФизическогоЛица = ЭтоФизическоеЛицо; - ДанныеЗаявленияМенеджерЗаписи.СодержаниеЗаявления = Новый ХранилищеЗначения(Содержание); + ДанныеЗаявленияМенеджерЗаписи.СодержаниеЗаявления = Новый ХранилищеЗначения(Содержание, Новый СжатиеДанных(9)); ДанныеЗаявленияМенеджерЗаписи.Записать(); Модифицированность = Ложь; @@ -1562,9 +1653,9 @@ СертификатПолучен = СертификатПолучен(ЭтотОбъект); Если ДанныеЗаявления.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено - Или СертификатПолучен Тогда - - Если ДоступныНапоминанияПользователя И НапомнитьОГотовности Тогда + Или СертификатПолучен Тогда + + Если ДоступныНапоминанияПользователя И НапомнитьОГотовности Тогда НапомнитьОГотовности = Ложь; ЭлектроннаяПодписьСлужебный.ИзменитьОтметкуОНапоминании( Объект.Ссылка, Ложь, "АвтоматическоеНапоминаниеОбИзмененииСостоянияЗаявления"); @@ -1605,6 +1696,7 @@ Элементы.ГруппаВладелецСертификата.ТолькоПросмотр = ТолькоПросмотрЭлементов; Элементы.ГруппаОбслуживающаяОрганизация.ТолькоПросмотр = ТолькоПросмотрЭлементов; Элементы.ГруппаВидПродления.ТолькоПросмотр = ТолькоПросмотрЭлементов; + Элементы.ГруппаТарифы.ТолькоПросмотр = ТолькоПросмотрЭлементов; Элементы.ДекорацияУсловияСоглашения.Видимость = Не ЗаявлениеОтправлено; Элементы.ОтправитьЗаявление.Видимость = Не ТолькоПросмотрЭлементов; @@ -1616,7 +1708,12 @@ Элементы.Закрыть.Видимость = Ложь; КонецЕсли; - Элементы.ДекорацияСостояние.Заголовок = СтрШаблон("%1", ДанныеЗаявления.СостояниеЗаявления); + Если ДанныеЗаявления.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено Тогда + Элементы.ДекорацияСостояние.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Отправлено. Уточнить срок отработки заявки можно у обслуживающей организации.'"), СсылкаНаКонтактыПартнеров()); + Иначе + Элементы.ДекорацияСостояние.Заголовок = СтрШаблон("%1", ДанныеЗаявления.СостояниеЗаявления); + КонецЕсли; Если СертификатКУстановке Тогда Если ДанныеЗаявления.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоРаспискаНеОтправлена @@ -1646,23 +1743,26 @@ КонецЕсли; Элементы.ОбновитьСостояниеОбработкиЗаявления.Доступность = Не ТолькоПросмотрЗаявления; - - Элементы.СведенияОЗаявленииИВладельцеСертификата.Видимость = ЗаявлениеОтправлено И ДанныеЗаявления.ОформленоВЭлектронномВиде; + + Элементы.СведенияОЗаявленииИВладельцеСертификата.Видимость = ЗаявлениеОтправлено И ДанныеЗаявления.ОформленоВЭлектронномВиде И Не ПродлениеСертификатаСтороннегоУЦ; Элементы.СодержаниеСертификата.Видимость = СертификатПолучен; - + Элементы.ГруппаПаспорт.Видимость = Не ЗаявлениеОтправлено; - Элементы.ГруппаДоверенность.Видимость = Не ЗаявлениеОтправлено И Не ЭтоФизическоеЛицо + Элементы.ГруппаСНИЛС.Видимость = Не ЗаявлениеОтправлено; + Элементы.ГруппаДоверенность.Видимость = Не ЗаявлениеОтправлено И Не ЭтоФизическоеЛицо И Не ЭтоИндивидуальныйПредприниматель И Не ЗаявлениеДляРуководителейЮридическихЛицДоступно; Элементы.ОтправитьЗаявление.Доступность = Не ТолькоПросмотрЭлементов; Элементы.НапомнитьОГотовности.Видимость = ДоступныНапоминанияПользователя - И (ДанныеЗаявления.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено); - + И (ДанныеЗаявления.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено); + ВидимостьПрограммы = ЗначениеЗаполнено(Объект.Программа); Элементы.Программа.Видимость = ВидимостьПрограммы; Элементы.ПредставлениеПрограммы.Видимость = Не ВидимостьПрограммы; Элементы.ГруппаЛицензияКриптоПро.Видимость = ВыбранаПрограммаКриптоПро(ПрограммаИдентификатор, СписокПрограмм, Объект.Программа); + Элементы.ДекорацияСертификаты.Видимость = СертификатПолучен; + КонецПроцедуры &НаСервере @@ -1671,9 +1771,10 @@ ЭлектронноеПродление = ДанныеЗаявления.ОформленоВЭлектронномВиде; Элементы.СертификатОснование.Видимость = ЭлектронноеПродление; - Элементы.ГруппаБумажноеПродление.Видимость = Не ЭлектронноеПродление; - Элементы.ГруппаПечатьЗаявления.Видимость = Не ЭлектронноеПродление; + Элементы.ГруппаБумажноеПродление.Видимость = Не ЭлектронноеПродление Или ПродлениеСертификатаСтороннегоУЦ; + Элементы.ДекорацияПередачаКомплекта.Видимость = Не ЭлектронноеПродление Или ПродлениеСертификатаСтороннегоУЦ; Элементы.ГруппаЭлектронноеПродление.Видимость = ЭлектронноеПродление; + Элементы.ГруппаСНИЛС.Видимость = ЭлектронноеПродление И ПродлениеСертификатаСтороннегоУЦ; Элементы.ОтправитьЗаявление.Заголовок = ?(ЭлектронноеПродление, НСтр("ru='Подписать и отправить заявление'"), НСтр("ru='Отправить заявление'")); @@ -1702,6 +1803,13 @@ КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция СсылкаНаКонтактыПартнеров() + + Возврат "https://its.1c.ru/db/aboutitsnew/content/23/hdoc?order[comment]=%D0%97%D0%B0%D0%BA%D0%B0%D0%B7%20%D0%BD%D0%B0%201%D0%A1:%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C"; + +КонецФункции + #КонецОбласти #Область ЗаполнениеРеквизитов @@ -1845,7 +1953,7 @@ КонецПроцедуры &НаСервере -Процедура ЗаполнитьТипыЗначения(РеквизитТип, Элемент, ОписаниеТипов); +Процедура ЗаполнитьТипыЗначения(РеквизитТип, Элемент, ОписаниеТипов) РеквизитТип = Неопределено; @@ -1900,7 +2008,6 @@ КонецПроцедуры - #КонецОбласти #Область ИзменениеОсновныхРеквизитов @@ -2159,7 +2266,7 @@ УстановитьРеквизитыВладельца(Реквизиты); Если Не ЭтоОбработкаОповещения - И ЗначениеЗаполнено(ДанныеЗаявления.СостояниеЗаявления) Тогда + И ЗначениеЗаполнено(ДанныеЗаявления.СостояниеЗаявления) Тогда ПроверитьЗаполнениеОсновныхРеквизитов(); КонецЕсли; @@ -2387,7 +2494,7 @@ Если ДанныеЗаявления.ОформленоВЭлектронномВиде Тогда Если ЗначениеЗаполнено(ДанныеЗаявления.СертификатОснование) Тогда ПроверитьСертификатНаВозможностьЭлектронногоПродления(ДанныеЗаявления.СертификатОснование); - КонецЕсли; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -2703,8 +2810,9 @@ И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ПараметрыВидаКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыАдресаЭлектроннойПочты(); СвойстваСубъектаСертификата.ЭлектроннаяПочта = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON( - СвойстваСубъектаСертификата.ЭлектроннаяПочта, Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты); + СвойстваСубъектаСертификата.ЭлектроннаяПочта, ПараметрыВидаКонтактнойИнформации.Тип); КонецЕсли; УстановитьРеквизитИзСертификата(СведенияОВладельце, "ЭлектроннаяПочта", СвойстваСубъектаСертификата, "ЭлектроннаяПочта"); @@ -2810,11 +2918,18 @@ Результат = Не ОбработкаМодуль.ПроверитьЗаполнениеРеквизитов(ЭтотОбъект, ПроверяемыеРеквизиты, ДокументыПартнерЭтоИП, Ложь); - Если Не ЗначениеЗаполнено(Объект.Программа) И Не ЗначениеЗаполнено(ПрограммаИдентификатор) Тогда - ТекстОшибки = НСтр("ru = 'Программа:'") + " " + ОбработкаМодуль.ТекстОшибкиПолеНеЗаполнено(); + Если Не ЗначениеЗаполнено(Объект.Программа) И ПустаяСтрока(ПрограммаИдентификатор) Тогда + + Если Не ПустаяСтрока(ПредставлениеПрограммы) Тогда + ПредставлениеПрограммы = ""; + КонецЕсли; + + ТекстОшибки = НСтр("ru = 'Приложение:'") + " " + ОбработкаМодуль.ТекстОшибкиПолеНеЗаполнено(); ОбработкаМодуль.СообщитьПользователю(ЭтотОбъект, ТекстОшибки, ?(Элементы.Программа.Видимость, "Объект.Программа", "ПредставлениеПрограммы")); + Результат = Ложь; + КонецЕсли; Возврат Результат; @@ -3115,6 +3230,8 @@ Возврат; КонецЕсли; + ЗаписатьЗаявлениеНаСервере(Документ); + ИдентификаторПечатнойФормы = "ЗаявлениеНаВыпускСертификат"; НазваниеПечатнойФормы = НСтр("ru = 'Заявление на выпуск сертификата'"); @@ -3140,7 +3257,21 @@ КонецПроцедуры &НаСервере -Функция ПодготовленныйДокумент() +Процедура ЗаписатьЗаявлениеНаСервере(Знач Документ) + + ПотокЗаявлениеНаПодключение = Новый ПотокВПамяти(); + Документ.Записать(ПотокЗаявлениеНаПодключение, ТипФайлаТабличногоДокумента.PDF); + + ЧтениеПотока = Новый ЧтениеДанных(ПотокЗаявлениеНаПодключение); + РезультатЧтения = ЧтениеПотока.Прочитать(); + + ДвоичныеДанныеЗаявлениеНаПодключение = ПотокЗаявлениеНаПодключение.ЗакрытьИПолучитьДвоичныеДанные(); + АдресЗаявлениеНаПодключение = ПоместитьВоВременноеХранилище(ДвоичныеДанныеЗаявлениеНаПодключение, УникальныйИдентификатор); + +КонецПроцедуры + +&НаСервере +Функция ПодготовленныйДокумент() Макет = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет( ?(ЭтоИндивидуальныйПредприниматель Или ЭтоФизическоеЛицо, @@ -3307,10 +3438,56 @@ СвойстваСубъектаСертификата = ЭлектроннаяПодпись.СвойстваСубъектаСертификата(СертификатКриптографии); СвойстваИздателяСертификата = ЭлектроннаяПодпись.СвойстваИздателяСертификата(СертификатКриптографии); - РасширенныеДанныеДляПечатиСертификата = ЭлектроннаяПодписьСлужебный.РасширенныеДанныеДляПечатиСертификата( - ДанныеСертификата); - Макет = Обработки.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.ПолучитьМакет("Сертификат"); + + Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ДоступныДополнительныеСвойстваСертификата() Тогда + РасширенныеДанныеДляПечатиСертификата = Новый Структура("ТипИдентификации, СКЗИ, Заключение, СКЗИ_УЦ, ЗаключениеУЦ, Подпись"); + РасширенныеДанныеДляПечатиСертификата.ТипИдентификации = СертификатКриптографии.ДополненияСертификата.Получить( + "1.2.643.100.114"); + РасширенныеДанныеДляПечатиСертификата.Подпись = СертификатКриптографии.ЗначениеПодписи; + + ДанныеУЦ = СертификатКриптографии.ДополненияСертификата.Получить("1.2.643.100.112"); + Если ДанныеУЦ <> Неопределено И ДанныеУЦ.Количество() = 4 Тогда + РасширенныеДанныеДляПечатиСертификата.СКЗИ = ДанныеУЦ[0]; + РасширенныеДанныеДляПечатиСертификата.СКЗИ_УЦ = ДанныеУЦ[1]; + РасширенныеДанныеДляПечатиСертификата.Заключение = ДанныеУЦ[2]; + РасширенныеДанныеДляПечатиСертификата.ЗаключениеУЦ = ДанныеУЦ[3]; + КонецЕсли; + + Если ЗначениеЗаполнено(СертификатКриптографии.УниверсальнаяДатаНачалаЗакрытогоКлюча) И ЗначениеЗаполнено( + СертификатКриптографии.УниверсальнаяДатаОкончанияЗакрытогоКлюча) Тогда + + Макет.Параметры.ПериодДействияЗакрытогоКлюча = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 по %2'"), Формат(СертификатКриптографии.УниверсальнаяДатаНачалаЗакрытогоКлюча, НСтр( + "ru = 'ДФ=''dd MMMM yyyy ""г."" H:mm:ss'''")), Формат( + СертификатКриптографии.УниверсальнаяДатаОкончанияЗакрытогоКлюча, НСтр("ru = 'ДФ=''dd MMMM yyyy ""г."" H:mm:ss'''"))); + + КонецЕсли; + Макет.Параметры.Алгоритм = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредставлениеАлгоритмаПодписи( + СвойстваСертификата.АлгоритмОткрытогоКлюча, Истина, Истина); + Иначе + + РасширенныеДанныеДляПечатиСертификата = ЭлектроннаяПодписьСлужебный.РасширенныеДанныеДляПечатиСертификата( + ДанныеСертификата); + + Если ЗначениеЗаполнено(СвойстваСертификата.ДатаНачалаЗакрытогоКлюча) И ЗначениеЗаполнено( + СвойстваСертификата.ДатаОкончанияЗакрытогоКлюча) Тогда + + Макет.Параметры.ПериодДействияЗакрытогоКлюча = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 по %2'"), Формат(СвойстваСертификата.ДатаНачалаЗакрытогоКлюча + - ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), НСтр( + "ru = 'ДФ=''dd MMMM yyyy ""г."" H:mm:ss'''")), Формат( + СвойстваСертификата.ДатаОкончанияЗакрытогоКлюча + - ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), НСтр( + "ru = 'ДФ=''dd MMMM yyyy ""г."" H:mm:ss'''"))); + + КонецЕсли; + + Макет.Параметры.Алгоритм = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( + АдресСертификата, Истина); + + КонецЕсли; + ЗаполнитьЗначенияСвойств(Макет.Параметры, РасширенныеДанныеДляПечатиСертификата); ТипИдентификацииДляПечати = ""; @@ -3325,7 +3502,7 @@ НСтр("ru = '%1 по %2'"), Формат(СертификатКриптографии.ДатаНачала, НСтр("ru = 'ДФ=''dd MMMM yyyy ""г."" H:mm:ss'''")), Формат(СертификатКриптографии.ДатаОкончания, НСтр("ru = 'ДФ=''dd MMMM yyyy ""г."" H:mm:ss'''"))); - + Макет.Параметры.НаименованиеУЦ = СвойстваИздателяСертификата.ОбщееИмя; Макет.Параметры.АдресУЦ = АдресИзСертификатаКриптографии(СвойстваИздателяСертификата); @@ -3367,8 +3544,6 @@ Макет.Параметры.ТипИдентификации = ТипИдентификацииДляПечати; КонецЕсли; - Макет.Параметры.Алгоритм = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата( - АдресСертификата, Истина); Макет.Параметры.Класс = НСтр("ru = 'Класс средства ЭП КС1 (OID 1.2.643.100.113.1); Класс средства ЭП КС2 (OID 1.2.643.100.113.2)'"); Макет.Параметры.КлассУЦ = НСтр("ru = 'КС2'"); Макет.Параметры.ОбластьИспользования = НСтр("ru = 'Цифровая подпись, Неотрекаемость, Шифрование ключей, Шифрование данных'"); @@ -3429,7 +3604,6 @@ КонецПроцедуры - &НаКлиенте Процедура ПечатьЗаявленияПослеУстановкиРасширенияДляРаботыСКриптографией(Результат, Контекст) Экспорт @@ -3479,9 +3653,7 @@ КонецЕсли; ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр( - "ru = 'Для создания ключа электронной подписи требуется установка внешней компоненты %1.'"), - "ExtraCryptoAPI"); + НСтр("ru = 'Для создания ключа электронной подписи требуется установка внешней компоненты %1.'"), "ExtraCryptoAPI"); Попытка ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина, ТекстПояснения); @@ -3494,10 +3666,11 @@ Контекст.Вставить("ОбъектКомпоненты", ОбъектКомпоненты); Контекст.Вставить("СвойстваТокена", СвойстваТокена); + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); Попытка НастройкиТокена = Ждать ОбъектКомпоненты.PKCS11ПолучитьНастройкиБэкендаПоУмолчаниюАсинх(СвойстваТокена.Токен); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОшибкаКомпоненты(ОбъектКомпоненты); НастройкиТокена = НастройкиТокена.Значение; Исключение Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -3544,10 +3717,11 @@ КонтейнерКлючаИмя = Прав(СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", ""), 32); ТипМеханизмаГенерацииКлючевойПары = СвойстваТокена.ТипМеханизмаГенерацииКлючевойПары; + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); Попытка Результат = Ждать ОбъектКомпоненты.PKCS11СоздатьКлючевуюПаруАсинх(СвойстваТокена.Слот, ПинКод, ТипМеханизмаГенерацииКлючевойПары, КонтейнерКлючаИмя); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОшибкаКомпоненты(ОбъектКомпоненты); Исключение Ошибка = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); КонтейнерКлючаИмя = ""; @@ -3579,11 +3753,13 @@ РасширенныеАтрибутыJSON = СтрокаJSON(РасширенныеАтрибуты); + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); + Попытка РезультатЗапрос = Ждать ОбъектКомпоненты.PKCS11СоздатьCSRАсинх(СвойстваТокена.Слот, ПинКод, КонтейнерКлючаИмя, АтрибутыJSON, РасширенныеАтрибутыJSON); РезультатОткрытыйКлюч = Ждать ОбъектКомпоненты.PKCS11ПолучитьОткрытыйКлючАсинх(СвойстваТокена.Слот, ПинКод, КонтейнерКлючаИмя); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОшибкаКомпоненты(ОбъектКомпоненты); Исключение @@ -3612,13 +3788,18 @@ КонецПроцедуры &НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатНаТокенеПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт +Асинх Процедура СоздатьКлючИЗапросНаСертификатНаТокенеПослеПолученияРазрешений(РазрешенияПолучены, Контекст) Экспорт Если Не РазрешенияПолучены Тогда ОбработатьЗаявлениеПослеСозданияКлючаИЗапросаНаСертификат(Ложь, Контекст); Возврат; КонецЕсли; + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); ПараметрыЗагрузки.Интерактивно = Ложь; ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; @@ -3649,7 +3830,7 @@ Возврат; КонецЕсли; - Модифицированность = Истина; + Модифицированность = Истина; ДокументыПоляСертификата = Контекст.ПоляСертификата; АдресЗапросаНаСертификат = ПомещенныеФайлы[0].Хранение; ОткрытаяЧастьКлючаЭП = ПредставлениеДвоичныхДанных(Контекст.ТекущаяОткрытаяЧастьКлючаЭП); @@ -3717,11 +3898,7 @@ Возврат; КонецЕсли; - Если ДанныеЗаявления.ОформленоВЭлектронномВиде Тогда - ПодключитьОбработчикОжидания("ПодтвердитьДанныеЗаявленияПослеСозданияКлючаИЗапросаНаСертификатОбработчикОжидания", 0.1, Истина); - Иначе - ПодключитьОбработчикОжидания("ПечатьЗаявленияПослеСозданияКлючаИЗапросаНаСертификатОбработчикОжидания", 0.1, Истина); - КонецЕсли; + ПодключитьОбработчикОжидания("ПечатьЗаявленияПослеСозданияКлючаИЗапросаНаСертификатОбработчикОжидания", 0.1, Истина); КонецПроцедуры @@ -3763,7 +3940,7 @@ // Заявление для сотрудников юридических лиц. - ПоказыватьИнформациюОДоступностиОтправкиЗаявления = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить( + ПоказыватьИнформациюОДоступностиОтправкиЗаявления = ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекЗагрузить( "ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата", "ПоказыватьИнформациюОДоступностиВыпускаСертификатаДляРуководителей", Истина); @@ -3946,7 +4123,6 @@ КонецПроцедуры - #КонецОбласти #Область ОтправкаЗаявленияВЭлектронномВиде @@ -3965,13 +4141,21 @@ Отказ = Истина; КонецЕсли; Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнен продлеваемый сертификат'"),,,, Отказ); + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнен продлеваемый сертификат'"),,,, Отказ); + КонецЕсли; + + Если Не ДокументыПечатались Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Документы еще не печатались. Заявление не будет принято пока не будут получены печатные документы.'"),,,, Отказ); КонецЕсли; Если Не ЗначениеЗаполнено(АдресФайлаПаспорт) Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не выбран файл скана паспорта'"),,,, Отказ); КонецЕсли; + Если Не ЗначениеЗаполнено(АдресФайлаСНИЛС) И ПродлениеСертификатаСтороннегоУЦ Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не выбран файл скана СНИЛС'"),,,, Отказ); + КонецЕсли; + Если Не ЭтоФизическоеЛицо И Не ЭтоИндивидуальныйПредприниматель И Не ЗначениеЗаполнено(АдресФайлаДоверенность) И Не ЗаявлениеДляРуководителейЮридическихЛицДоступно Тогда @@ -3983,7 +4167,11 @@ КонецЕсли; Если ДокументыПечатались И Не Модифицированность Тогда - ОбработатьЗаявлениеПослеСозданияКлючаИЗапросаНаСертификат(Истина, Неопределено); + Если ПродлениеСертификатаСтороннегоУЦ Тогда + ПродолжитьОтправкуЗаявлениеНаПродлениеСертификатаСтороннегоУЦ(); + Возврат; + КонецЕсли; + ПодключитьОбработчикОжидания("ПодтвердитьДанныеЗаявленияПослеСозданияКлючаИЗапросаНаСертификатОбработчикОжидания", 0.1, Истина); Возврат; КонецЕсли; @@ -4002,6 +4190,14 @@ КонецПроцедуры +&НаКлиенте +Процедура ПродолжитьОтправкуЗаявлениеНаПродлениеСертификатаСтороннегоУЦ() + + Оповещение = Новый ОписаниеОповещения("СформироватьИОтправитьФайлыЗаявления", ЭтотОбъект); + ПроверитьИнтернетПоддержку(Оповещение); + +КонецПроцедуры + &НаКлиенте Процедура ПодтвердитьДанныеЗаявленияПослеСозданияКлючаИЗапросаНаСертификатОбработчикОжидания() @@ -4033,10 +4229,8 @@ ПослеЗаписи(); УстановитьСертификатПослеПодтвержденияИнформации(); КонецЕсли; - - ИначеЕсли ДополнительныеПараметры = "ИнформацияЗаявления" Тогда - ДокументыПечатались = Истина; + ИначеЕсли ДополнительныеПараметры = "ИнформацияЗаявления" Тогда Если Модифицированность Тогда ДанныеЗаявления.СостояниеЗаявления = ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.Подготовлено"); @@ -4046,6 +4240,7 @@ Оповещение = Новый ОписаниеОповещения("СформироватьИОтправитьФайлыЗаявления", ЭтотОбъект); ПроверитьИнтернетПоддержку(Оповещение); + КонецЕсли; КонецПроцедуры @@ -4078,7 +4273,7 @@ Возврат; КонецЕсли; - + ДанныеДляПодписания = Новый Массив; // Массив из НовыйОписаниеДанных ОписаниеДанных = НовыйОписаниеДанных(); @@ -4093,9 +4288,26 @@ "ОткрытьФайлОбработкаОповещения", ЭтотОбъект, Новый Структура("АдресФайла, ИмяФайла", ЗаявлениеXML, ИмяФайла + ".xml")); ДанныеДляПодписания.Добавить(ОписаниеДанных); - + + ОписаниеДанных = НовыйОписаниеДанных(); + ОписаниеДанных.Данные = АдресЗаявлениеНаПодключение; + ОписаниеДанных.ОписаниеДляПакета.ИдентификаторДокумента = НовыйСжатыйУникальныйИдентификатор(); + ОписаниеДанных.ОписаниеДляПакета.ТипДокумента = "ЗаявлениеНаПодключение"; + ОписаниеДанных.ОписаниеДляПакета.ТипСодержимого = "pdf"; + ИмяФайла = НовыйСжатыйУникальныйИдентификатор(); + ОписаниеДанных.ОписаниеДляПакета.ИмяФайла = ИмяФайла + ".bin"; + ОписаниеДанных.Представление.Представление = НСтр("ru = 'Заявление на подключение (файл сформирован)'"); + ОписаниеДанных.Представление.Значение = Новый ОписаниеОповещения( + "ОткрытьФайлОбработкаОповещения", ЭтотОбъект, Новый Структура("АдресФайла, ИмяФайла", АдресЗаявлениеНаПодключение, ИмяФайла + ".pdf")); + + ДанныеДляПодписания.Добавить(ОписаниеДанных); + ПриложитьДокумент(ДанныеДляПодписания, "Паспорт"); + Если ПродлениеСертификатаСтороннегоУЦ Тогда + ПриложитьДокумент(ДанныеДляПодписания, "СНИЛС"); + КонецЕсли; + Если Не ЭтоФизическоеЛицо И Не ЭтоИндивидуальныйПредприниматель И Не ЗаявлениеДляРуководителейЮридическихЛицДоступно Тогда @@ -4105,7 +4317,7 @@ ОтборСертификатов = Новый Массив; // Массив из СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования ОтборСертификатов.Добавить(ДанныеЗаявления.СертификатОснование); - + ОписаниеДанныхДляПодписания = Новый Структура; ОписаниеДанныхДляПодписания.Вставить("ОповеститьОбОкончанииСрокаДействия", Ложь); ОписаниеДанныхДляПодписания.Вставить("НаборДанных", ДанныеДляПодписания); @@ -4165,7 +4377,7 @@ ОтборСертификатов = Новый Массив; // Массив из СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования ОтборСертификатов.Добавить(ДанныеЗаявления.СертификатОснование); - + ОписаниеДанныхДляПодписания = Новый Структура; ОписаниеДанныхДляПодписания.Вставить("ОповеститьОбОкончанииСрокаДействия", Ложь); ОписаниеДанныхДляПодписания.Вставить("НаборДанных", ДанныеДляПодписания); @@ -4271,14 +4483,13 @@ КонецПроцедуры &НаСервере -Функция СформироватьИОтправитьПакетЗаявленияНаЭлектронноеПродление(ОписаниеДанных, ТипТранзакции, ОписаниеОшибки) +Функция СформироватьИОтправитьПакетЗаявленияНаЭлектронноеПродление(ОписаниеДанных, ТипТранзакции, ОписаниеОшибки) ПакетДляОтправки = ПакетЗаявления(ОписаниеДанных, ТипТранзакции); Возврат ОтправитьЗаявлениеНаСервере(ПакетДляОтправки, ТипТранзакции, ОписаниеОшибки); - + КонецФункции - #КонецОбласти #Область ОтправкаЗаявленияОбщиеПроцедурыИФункции @@ -4370,7 +4581,7 @@ Иначе ИдентификаторДокументооборота = ДанныеЗаявления.ИдентификаторДокументооборота; КонецЕсли; - + ИмяФайлаОписания = ВременныйКаталог + "packageDescription.xml"; ИмяФайлаПакета = ВременныйКаталог + ИдентификаторДокументооборота + ".zip"; @@ -4489,7 +4700,7 @@ Возврат Истина; КонецЕсли; - ОписаниеОшибки.Код = КодОшибкиПортала("SendPacket", КодРезультата); + ОписаниеОшибки.Код = КодОшибкиПортала("SendPacket", КодРезультата); УзелDOM = ПостроительDOM.ПолучитьЭлементыПоИмени("errorMessage"); Если УзелDOM.Количество() > 0 Тогда ОписаниеОшибки.Текст = УзелDOM[0].ТекстовоеСодержимое; @@ -4516,10 +4727,10 @@ Билет = ТикетАутентификацииНаПорталеПоддержки(ОписаниеОшибки); Если Билет = Неопределено Тогда Возврат Ложь; - КонецЕсли; + КонецЕсли; ЗаявлениеXML = ЗаявлениеXMLДляБумажногоПродления(Билет); ПакетДляОтправки = ПакетЗаявления(ЗаявлениеXML, ТипТранзакции); - КонецЕсли; + КонецЕсли; Доступность = Ложь; Если Не ОтправитьЗаявлениеНаПортал(ПакетДляОтправки, ТипТранзакции, ОписаниеОшибки) Тогда @@ -4540,7 +4751,7 @@ Доступность = Истина; Элементы.ГруппаОбработкаЗаявления.Видимость = Истина; - + ЗаписатьЗаявление(); УстановитьВидимостьИДоступность(); @@ -4628,7 +4839,7 @@ КонецЕсли; ЗаполнитьПрограмму(); - + КонецПроцедуры &НаКлиенте @@ -4709,18 +4920,6 @@ КонецФункции -&НаКлиенте -Асинх Функция ПолучитьОшибкуКомпоненты(ОбъектКомпоненты) - Ошибка = Ждать ОбъектКомпоненты.ПолучитьСписокОшибокАсинх(); - - Если Не ЗначениеЗаполнено(Ошибка) Тогда - Возврат Истина; - КонецЕсли; - - ВызватьИсключение Ошибка; - -КонецФункции - &НаКлиенте Функция ТипМеханизмаГенерацииКлючевойПары(Механизмы, Представление) @@ -4834,6 +5033,7 @@ КонецЕсли; ПоказатьДобавлениеВСправочник(ВыбранноеЗначение); + КонецПроцедуры &НаКлиенте @@ -4933,6 +5133,8 @@ ЕстьУстройства = Ложь; ЕстьПрограммы = Ложь; + ТипПровайдера = ТипПровайдераВыбранногоТарифа(); + Для Каждого Элемент Из СписокТокенов Цикл Если ЗначениеЗаполнено(Элемент.Ошибка) Тогда ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Элемент.Ошибка; @@ -4940,18 +5142,22 @@ ЕстьУстройства = Истина; КонецЦикла; - Для Каждого Элемент Из НовыйСписокПрограмм Цикл - ЗаполнитьЗначенияСвойств(СписокПрограмм.Добавить(), Элемент); + Если ТипПровайдера <> "hardware" Тогда + Для Каждого Элемент Из НовыйСписокПрограмм Цикл + ЗаполнитьЗначенияСвойств(СписокПрограмм.Добавить(), Элемент); + КонецЦикла; ЕстьПрограммы = Истина; - КонецЦикла; + КонецЕсли; - Для Каждого Элемент Из СписокТокенов Цикл - НоваяСтрока = СписокПрограмм.Добавить(); - НоваяСтрока.Идентификатор = Элемент.ПрограммаИдентификатор; - НоваяСтрока.Представление = Элемент.Представление; - НоваяСтрока.ИмяПрограммы = Элемент.ПрограммаИмя; - НоваяСтрока.ТипПрограммы = Элемент.ПрограммаТип; - КонецЦикла; + Если ТипПровайдера <> "software" Тогда + Для Каждого Элемент Из СписокТокенов Цикл + НоваяСтрока = СписокПрограмм.Добавить(); + НоваяСтрока.Идентификатор = Элемент.ПрограммаИдентификатор; + НоваяСтрока.Представление = Элемент.Представление; + НоваяСтрока.ИмяПрограммы = Элемент.ПрограммаИмя; + НоваяСтрока.ТипПрограммы = Элемент.ПрограммаТип; + КонецЦикла; + КонецЕсли; Возврат ЕстьУстройства Или ЕстьПрограммы; @@ -4969,7 +5175,6 @@ Если ЗначениеЗаполнено(ТекстОшибки) Тогда ВариантАлгоритмов = "2012"; КонецЕсли; - КонецЕсли; Если Не ЗначениеЗаполнено(ВариантАлгоритмов) Тогда @@ -4985,6 +5190,10 @@ ИдентификаторыНастроек.Вставить("CryptoPro2001", Истина); КонецЕсли; + ЭтоСеансWindows = ОбщегоНазначения.ЭтоWindowsКлиент() Или ОбщегоНазначения.ЭтоWindowsСервер(); + ЭтоСеансLinux = ОбщегоНазначения.ЭтоLinuxКлиент() Или ОбщегоНазначения.ЭтоLinuxСервер(); + ЭтоСеансMacOS = ОбщегоНазначения.ЭтоMacOSКлиент(); + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -4993,6 +5202,7 @@ | Программы.ТипПрограммы КАК ТипПрограммы |ИЗ | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы"; + Программы = Запрос.Выполнить().Выгрузить(); Настройки = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеНастройкиПрограмм(); @@ -5002,6 +5212,13 @@ Продолжить; КонецЕсли; + Если ЭтоСеансWindows И Настройка.НетВWindows + Или ЭтоСеансLinux И Настройка.НетВLinux + Или ЭтоСеансMacOS И Настройка.НетВMacOS + Или Настройка.Неактуальная Тогда + Продолжить; + КонецЕсли; + Строка = НовыйЭлементСпискаПрограмм(); ЗаполнитьЗначенияСвойств(Строка, Настройка); @@ -5059,15 +5276,8 @@ &НаКлиенте Процедура ЗаполнитьПрограмму(Оповещение = Неопределено) - Если ЗначениеЗаполнено(Объект.Программа) - И СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Объект.Программа)).Количество() > 0 - Или ЗначениеЗаполнено(ПрограммаИдентификатор) Тогда - - ПослеВыбораПрограммы(Ложь, Оповещение); - Возврат; - КонецЕсли; - Объект.Программа = Неопределено; + ПрограммаИдентификатор = Неопределено; Если КлючНаТокене И СписокТокенов.Количество() > 0 Тогда ЗаполнитьТокен(СписокТокенов[0]); @@ -5085,6 +5295,7 @@ &НаКлиенте Процедура ЗаполнитьТокен(СвойстваТокена) + ПрограммаИдентификатор = СвойстваТокена.ПрограммаИдентификатор; Объект.Программа = Неопределено; ПрограммаИмя = СвойстваТокена.ПрограммаИмя; @@ -5093,6 +5304,7 @@ УстановитьВидимостьПрограммы(); КлючНаТокене = Истина; ПодключитьОбработчикОжидания("ПослеВыбораПрограммыОбработчикОжидания", 0.1, Истина); + КонецПроцедуры // Параметры: @@ -5113,6 +5325,8 @@ КонецЕсли; КонецЕсли; + ПредставлениеПрограммы = ПоставляемоеПредставлениеПрограммы(СписокПрограмм, + ?(ЗначениеЗаполнено(Объект.Программа), Объект.Программа, ПрограммаИдентификатор)); ПослеВыбораПрограммы(Ложь, Контекст.Оповещение); Возврат; @@ -5287,6 +5501,10 @@ Строки = СписокПрограмм.НайтиСтроки(Новый Структура("Ссылка", Программа)); КонецЕсли; + Если Строки.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; + Возврат Строки[0].Представление; КонецФункции @@ -5384,7 +5602,7 @@ УзелDOM = ПостроительDOM.ПолучитьЭлементыПоИмени("algorithm"); ВариантАлгоритмов = ?(УзелDOM.Количество() > 0, УзелDOM[0].ТекстовоеСодержимое, ""); Если ВариантАлгоритмов <> "2001" - И ВариантАлгоритмов <> "2012" Тогда + И ВариантАлгоритмов <> "2012" Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Следующий ответ сервера не соответствует ожидаемому в части элемента ""%1"": @@ -5457,6 +5675,7 @@ ЗаписьXML.ЗаписатьАтрибут("ВерсПрог", "1С"); // АПК:1036 внешний идентификатор ЗаписьXMLЭлемент(ЗаписьXML, "ТипЗаявления", "1"); + ЗаписьXMLЭлемент(ЗаписьXML, "ВидСертификатаКод", ДанныеЗаявления.КодТарифа); ЗаписьXMLЭлемент(ЗаписьXML, "ПризнакЮридическогоЛица", ПризнакЮридическогоЛица); ЗаписьXMLЭлемент(ЗаписьXML, "ПризнакФизическогоЛица", ЭтоФизическоеЛицо); ЗаписьXMLЭлемент(ЗаписьXML, "ИНН", ?(ЭтоФизическоеЛицо, ВладелецИНН, ИНН)); @@ -5557,7 +5776,7 @@ МассивОписаний = Новый Массив; // Массив из НовыйОписаниеДанных МассивОписаний.Добавить(ОписаниеДанных); - + Возврат МассивОписаний; КонецФункции @@ -5580,8 +5799,11 @@ ЗаписьXML.ЗаписатьАтрибут("ДатаВремяФормирования", XMLСтрока(ТекущаяДатаСеанса())); ЗаписьXML.ЗаписатьАтрибут("ВерсПрог", "1С"); // АПК:1036 внешний идентификатор - ЗаписьXMLЭлемент(ЗаписьXML, "ТипЗаявления", "3"); - ЗаписьXMLЭлемент(ЗаписьXML, "УчетнаяЗапись", ДанныеЗаявления.ИдентификаторАбонента); + ЗаписьXMLЭлемент(ЗаписьXML, "ТипЗаявления", ?(ПродлениеСертификатаСтороннегоУЦ, "2", "3")); + ЗаписьXMLЭлемент(ЗаписьXML, "ВидСертификатаКод", ДанныеЗаявления.КодТарифа); + Если Не ПродлениеСертификатаСтороннегоУЦ Тогда + ЗаписьXMLЭлемент(ЗаписьXML, "УчетнаяЗапись", ДанныеЗаявления.ИдентификаторАбонента); + КонецЕсли; ЗаписьXMLЭлемент(ЗаписьXML, "ПризнакЮридическогоЛица", ПризнакЮридическогоЛица); ЗаписьXMLЭлемент(ЗаписьXML, "ПризнакФизическогоЛица", ЭтоФизическоеЛицо); ЗаписьXMLЭлемент(ЗаписьXML, "ИНН", ?(ЭтоФизическоеЛицо, ВладелецИНН, ИНН)); @@ -5660,6 +5882,13 @@ ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ВладелецЭЦП. ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента ВладельцыЭЦП. + Если ПродлениеСертификатаСтороннегоУЦ Тогда + ЗаписьXMLЭлемент(ЗаписьXML, "ИННПартнера", ДокументыПартнерИНН); + Если Не ДокументыПартнерЭтоИП Тогда + ЗаписьXMLЭлемент(ЗаписьXML, "КПППартнера", ДокументыПартнерКПП); + КонецЕсли; + КонецЕсли; + ЗаписьXMLЭлемент(ЗаписьXML, "БилетПользователя", Билет); ЗаписьXML.ЗаписатьКонецЭлемента(); // КонецЭлемента Заявление. @@ -5681,7 +5910,6 @@ КонецФункции - &НаСервере Функция УдостоверяющийЦентр() @@ -5855,10 +6083,8 @@ Иначе СоздатьОбъектКриптографии(Новый ОписаниеОповещения( "СоздатьКлючИЗапросНаСертификатПослеСозданияОбъектаКриптографии", ЭтотОбъект, Контекст), - НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат - |установите расширение для работы с 1С:Предприятием.'"), - НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат - |установите внешнюю компоненту.'")); + НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат установите расширение для работы с 1С:Предприятием.'"), + НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат установите внешнюю компоненту.'")); КонецЕсли; КонецПроцедуры @@ -6193,7 +6419,7 @@ КонецПроцедуры &НаКлиенте -Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлючПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт +Асинх Процедура СоздатьКлючИЗапросНаСертификатПослеВызоваПолучитьОткрытыйКлючПослеПолученияСписокОшибок(СписокОшибок, Контекст) Экспорт Если Не ВозможноПродолжениеПослеОперацииКомпоненты() Тогда Возврат; @@ -6204,6 +6430,11 @@ Возврат; КонецЕсли; + ВыполняетсяУстановкаДополнительныхКомпонент = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ВыполнитьУстановкуДополнительныхКомпонентПослеПроверкиРасширенияРаботыС1СПредприятием(); + Если ВыполняетсяУстановкаДополнительныхКомпонент Тогда + Возврат; + КонецЕсли; + Результат = Контекст.РезультатПослеВызоваПолучитьОткрытыйКлюч; Контекст.Вставить("ТекущаяОткрытаяЧастьКлючаЭП", Результат); @@ -6669,7 +6900,7 @@ Контекст.Вставить("ОбработкаПродолжения", ОбработкаПродолжения); Контекст.Вставить("НазначениеВнешнейКомпонентыКриптографии", НазначениеВнешнейКомпонентыКриптографии); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия( Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст), НазначениеРасширенияДляРаботыСФайлами, Ложь); @@ -6848,7 +7079,7 @@ ПоказатьПредупреждение( Новый ОписаниеОповещения("СоздатьОбъектКриптографииПослеПредупрежденияОбОшибке", ЭтотОбъект, Контекст), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Программа электронной подписи не доступна через внешнюю компоненту по причине: + НСтр("ru = 'Приложение электронной подписи не доступно по причине: |%1'"), ТекстОшибки)); @@ -6897,7 +7128,7 @@ Процедура УстановитьПолученныйСертификат() Если Не ЗначениеЗаполнено(Объект.Программа) И Не ЗначениеЗаполнено(ПрограммаИдентификатор) Тогда - ТекстОшибки = НСтр("ru = 'Программа: Поле не заполнено.'"); + ТекстОшибки = НСтр("ru = 'Поле не заполнено.'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки,, "Объект.Программа"); Возврат; КонецЕсли; @@ -6931,12 +7162,12 @@ КонецЕсли; КонецПроцедуры - + &НаКлиенте Процедура УстановитьСертификатВКонтейнер(Оповещение) Если СписокПрограмм.Количество() = 0 - И Не ЗаполнитьСписокПрограмм(ОшибкаУстановкиСертификата) Тогда + И Не ЗаполнитьСписокПрограмм(ОшибкаУстановкиСертификата) Тогда ВыполнитьОбработкуОповещения(Оповещение, Ложь); Возврат; @@ -6986,6 +7217,51 @@ Возврат; КонецЕсли; + ДД = ПолучитьИзВременногоХранилища(АдресСертификата); + + СертификатКриптографии = Новый СертификатКриптографии(); + Ждать СертификатКриптографии.ИнициализироватьАсинх(ДД); + + СертификатНайденНаТокене = Ложь; + СертификатыНаТокене = Ждать ЭлектроннаяПодписьКлиентЛокализация.СертификатыНаТокене(СвойстваТокена,,Истина); + Если ЗначениеЗаполнено(СертификатыНаТокене.Ошибка) Тогда + ОшибкаУстановкиСертификата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1: %2.'"), ПредставлениеПрограммы, СертификатыНаТокене.Ошибка); + ПослеУстановкиСертификата(Ложь, Контекст); + Иначе + Для Каждого СертификатНаТокене Из СертификатыНаТокене.Сертификаты Цикл + СертификатКриптографииНаТокене = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СертификатИзСтроки(СертификатНаТокене); + Если ТипЗнч(СертификатКриптографииНаТокене) = Тип("Строка") Тогда + Продолжить; + КонецЕсли; + Если СертификатКриптографииНаТокене.Отпечаток = СертификатКриптографии.Отпечаток + И СертификатКриптографииНаТокене.СерийныйНомер = СертификатКриптографии.СерийныйНомер Тогда + СертификатНайденНаТокене = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если СертификатНайденНаТокене Тогда + УстановитьСертификатПослеУстановкиНаТокен(Контекст); + Возврат; + КонецЕсли; + + Контекст.Вставить("СвойстваТокена", СвойстваТокена); + Контекст.Вставить("ДанныеСертификата", ДД); + + ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУстановкуПослеВводаПинКода", ЭтотОбъект, Контекст); + ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ВводПинКода",, ЭтотОбъект, Истина, + ,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ПродолжитьУстановкуПослеВводаПинКода(ПинКод, Контекст) Экспорт + + СвойстваТокена = Контекст.СвойстваТокена; + СертификатBase64 = Base64Строка(Контекст.ДанныеСертификата); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр( "ru = 'Для импорта сертификата на токен требуется установка внешней компоненты %1.'"), @@ -6999,47 +7275,11 @@ Возврат; КонецПопытки; - Контекст.Вставить("ОбъектКомпоненты", ОбъектКомпоненты); - Контекст.Вставить("СвойстваТокена", СвойстваТокена); - - Попытка - НастройкиТокена = Ждать ОбъектКомпоненты.PKCS11ПолучитьНастройкиБэкендаПоУмолчаниюАсинх(СвойстваТокена.Токен); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); - НастройкиТокена = НастройкиТокена.Значение; - Исключение - ОшибкаУстановкиСертификата = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ПослеУстановкиСертификата(Ложь, Контекст); - Возврат; - КонецПопытки; - - Попытка - Ждать ОбъектКомпоненты.PKCS11ИнициализацияАсинх(НастройкиТокена); - Исключение - ОшибкаУстановкиСертификата = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ПослеУстановкиСертификата(Ложь, Контекст); - Возврат; - КонецПопытки; - - Ждать ОбъектКомпоненты.ПолучитьСписокОшибокАсинх(); - - ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУстановкуПослеВводаПинКода", ЭтотОбъект, Контекст); - ОткрытьФорму("Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Форма.ВводПинКода",, ЭтотОбъект, Истина, - ,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - -КонецПроцедуры - -&НаКлиенте -Асинх Процедура ПродолжитьУстановкуПослеВводаПинКода(ПинКод, Контекст) Экспорт - - СвойстваТокена = Контекст.СвойстваТокена; - - ДД = ПолучитьИзВременногоХранилища(АдресСертификата); - СертификатBase64 = Base64Строка(ДД); - ОбъектКомпоненты = Контекст.ОбъектКомпоненты; + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОчиститьОшибкиКомпоненты(ОбъектКомпоненты); Попытка Результат = Ждать ОбъектКомпоненты.PKCS11ИмпортироватьСертификатАсинх(СвойстваТокена.Слот, ПинКод, СертификатBase64, КонтейнерКлючаИмя); - Ждать ПолучитьОшибкуКомпоненты(ОбъектКомпоненты); + Ждать ЭлектроннаяПодписьКлиентЛокализация.ОшибкаКомпоненты(ОбъектКомпоненты); Исключение ОшибкаУстановкиСертификата = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ПослеУстановкиСертификата(Ложь, Контекст); @@ -7048,13 +7288,7 @@ Если Результат.Значение = Истина Тогда - ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии(); - ПараметрыСоздания.ПоказатьОшибку = Неопределено; - - ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии( - Новый ОписаниеОповещения("УстановитьВЛичноеХранилищеПослеСозданияМенеджераКриптографии", - ЭтотОбъект, Контекст), - "ПолучениеСертификатов", ПараметрыСоздания); + УстановитьСертификатПослеУстановкиНаТокен(Контекст); Иначе ПослеУстановкиСертификата(Ложь, Контекст); @@ -7062,6 +7296,17 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьСертификатПослеУстановкиНаТокен(Контекст) + ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии(); + ПараметрыСоздания.ПоказатьОшибку = Неопределено; + + ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии( + Новый ОписаниеОповещения("УстановитьВЛичноеХранилищеПослеСозданияМенеджераКриптографии", + ЭтотОбъект, Контекст), + "ПолучениеСертификатов", ПараметрыСоздания); +КонецПроцедуры + &НаКлиенте Асинх Процедура УстановитьВЛичноеХранилищеПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт @@ -7174,7 +7419,7 @@ Если Результат <> Истина Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения( + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Новый ОписаниеОповещения( "УстановитьСертификатПриОшибкеСозданияОбъектаКриптографииПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект)); Иначе @@ -7967,6 +8212,241 @@ КонецФункции +#КонецОбласти + +#Область Тарифы + +&НаКлиенте +Процедура ОтобразитьИнформациюОТарифах() + + Элементы.ПредставлениеТарифа.СписокВыбора.Очистить(); + ТолькоПросмотрЭлементов = ТолькоПросмотрЗаявления Или ЗаявлениеОтправлено(ЭтотОбъект); + + Если ТолькоПросмотрЭлементов Тогда + + Если ПустаяСтрока(ДанныеЗаявления.КодТарифа) Тогда + Элементы.ГруппаТарифы.Видимость = Ложь; + Иначе + ВыбранныйТариф = Тарифы.Добавить(); + ВыбранныйТариф.Код = ДанныеЗаявления.КодТарифа; + ВыбранныйТариф.Представление = ДанныеЗаявления.ПредставлениеТарифа; + ВыбранныйТариф.Описание = ДанныеЗаявления.ОписаниеТарифа; + + Элементы.ПредставлениеТарифа.Вид = ВидПоляФормы.ПолеНадписи; + Элементы.ПредставлениеТарифа.Ширина = 20; + Элементы.ПредставлениеТарифа.РастягиватьПоГоризонтали = Ложь; + КонецЕсли; + + Иначе + + ПолучитьИнформациюОТарифахНаСервере(); + + Если Тарифы.Количество() = 1 Тогда + Элементы.ПредставлениеТарифа.Вид = ВидПоляФормы.ПолеНадписи; + Элементы.ПредставлениеТарифа.Ширина = 20; + Элементы.ПредставлениеТарифа.РастягиватьПоГоризонтали = Ложь; + Иначе + Элементы.ПредставлениеТарифа.Вид = ВидПоляФормы.ПолеВвода; + Для Каждого Тариф Из Тарифы Цикл + Элементы.ПредставлениеТарифа.СписокВыбора.Добавить(Тариф.Представление); + КонецЦикла; + КонецЕсли; + + Если ПустаяСтрока(ДанныеЗаявления.КодТарифа) Тогда + ДанныеЗаявления.КодТарифа = Тарифы[0].Код; + ДанныеЗаявления.ПредставлениеТарифа = Тарифы[0].Представление; + ДанныеЗаявления.ОписаниеТарифа = Тарифы[0].Описание; + КонецЕсли; + + Элементы.ВключатьЛицензиюКриптоПроВСертификат.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Включить лицензию КриптоПро CSP (%1)'"), + ?(СтоимостьЛицензииКриптоПро > 0, Строка(СтоимостьЛицензииКриптоПро) + " ₽", "платно")); + + КонецЕсли; + + Элементы.ПредставлениеТарифаРасширеннаяПодсказка.Заголовок = ПодробноеОписаниеТарифа(); + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьИнформациюОТарифахНаСервере() + + Тарифы.Очистить(); + + Попытка + + ВебСервис = ВебСервисУЦ(); + Фабрика = ВебСервис.Определение.ФабрикаXDTO; + URIПространстваИмен = ВебСервис.ТочкаПодключения.Интерфейс.URIПространстваИмен; + + СвойстваФункции = Фабрика.Пакеты.Получить(URIПространстваИмен).КорневыеСвойства.Получить("GetTarifInfo1C"); + Если СвойстваФункции = Неопределено Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В веб-сервисе ""%1"" не определена обязательная функция ""%2"".'"), + ВебСервис.ТочкаПодключения.Местоположение + "?wsdl", + "GetTarifInfo1C"); + + КонецЕсли; + + ТипПустогоПараметра = СвойстваФункции.Тип; + ЗначениеПустогоПараметра = Фабрика.Создать(ТипПустогоПараметра); + + Ответ = ВебСервис.GetTarifInfo1C(ЗначениеПустогоПараметра); + + Для Каждого ИнформацияОТарифе Из Ответ.TarifInfo1CData.TarifInfo1CResult.Tariffs.Tariff Цикл + Если ИнформацияОТарифе.IsCryptoPro = Истина Тогда + СтоимостьЛицензииКриптоПро = ИнформацияОТарифе.Price; + Иначе + НовыйТариф = Тарифы.Добавить(); + НовыйТариф.Код = ИнформацияОТарифе.Code; + НовыйТариф.Представление = ИнформацияОТарифе.Name + ?(ИнформацияОТарифе.Price > 0, " (" + ИнформацияОТарифе.Price + " ₽)", ""); + НовыйТариф.Описание = ИнформацияОТарифе.Description; + НовыйТариф.ТипПровайдера = ИнформацияОТарифе.ProviderType; + КонецЕсли; + КонецЦикла; + + Исключение + + Тарифы.Очистить(); + НовыйТариф = Тарифы.Добавить(); + СвойстваБазовогоТарифа = СвойстваБазовогоТарифа(); + ЗаполнитьЗначенияСвойств(НовыйТариф, СвойстваБазовогоТарифа); + + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Функция ПодробноеОписаниеТарифа() + + Возврат СтроковыеФункцииКлиент.ФорматированнаяСтрока(ДанныеЗаявления.ОписаниеТарифа); + +КонецФункции + +&НаКлиенте +Функция ТипПровайдераВыбранногоТарифа() + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("Код", ДанныеЗаявления.КодТарифа); + + НайденныеТарифы = Тарифы.НайтиСтроки(ПараметрыОтбора); + + Если НайденныеТарифы.Количество() = 0 Тогда + Если ЗаявлениеОтправлено(ЭтотОбъект) Тогда + Возврат "all"; + Иначе + ДанныеЗаявления.КодТарифа = Тарифы[0].Код; + ДанныеЗаявления.ПредставлениеТарифа = Тарифы[0].Представление; + ДанныеЗаявления.ОписаниеТарифа = Тарифы[0].Описание; + Возврат ?(ПустаяСтрока(Тарифы[0].ТипПровайдера), "all", Тарифы[0].ТипПровайдера); + КонецЕсли; + КонецЕсли; + + ВыбранныйТариф = НайденныеТарифы[0]; + + Возврат ВыбранныйТариф.ТипПровайдера; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция СвойстваБазовогоТарифа() + + Результат = Новый Структура; + + Результат.Вставить("Код", "base"); + Результат.Вставить("Представление", НСтр("ru = '1С:Подпись.Базовый'")); + Результат.Вставить("Описание", НСтр("ru = 'Подходит для ЭДО с контрагентами, сдачи отчетности, работы с Гос. Порталами.'")); + Результат.Вставить("ТипПровайдера", "all"); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ЗаполнитьПрограммуПослеИзмененияТарифа() + + ЗаполнитьПрограмму(); + +КонецПроцедуры + +#КонецОбласти + +#Область ТехническаяИнформация + +&НаКлиенте +Процедура ВыгрузитьТехническуюИнформацию(ВыгрузитьАрхив) + + ЗаявлениеОтправлено = ЗаявлениеОтправлено(ЭтотОбъект); + + Если ЗаявлениеОтправлено И Не СостояниеОбработкиЗаявленияАктуально Тогда + ПоказатьПредупреждение(, + НСтр("ru = 'Для сбора технической информации о возникшей проблеме обновите состояние заявления.'")); + Возврат; + КонецЕсли; + + Сведения = Новый Массив; + + Если ЗаявлениеОтправлено Тогда + Сведения.Добавить(НСтр("ru = 'Идентификатор документооборота'") + + ": " + Строка(ДанныеЗаявления.ИдентификаторДокументооборота)); + Сведения.Добавить(НСтр("ru = 'Состояние обработки заявления'") + + " (" + Формат(ДанныеЗаявления.ДатаОбновленияСостояния, "ДЛФ=DT") + ")" + + ":" + Символы.ПС + ДанныеЗаявления.СостояниеОбработкиЗаявления + Символы.ПС); + Иначе + Сведения.Добавить(НСтр("ru = 'Заявление не отправлено'") + + ":" + Символы.ПС + ДанныеЗаявления.СостояниеОбработкиЗаявления + Символы.ПС); + КонецЕсли; + + ОписаниеФайлов = ОписаниеФайлов(Сведения, ВыгрузитьАрхив); + + Если ВыгрузитьАрхив Тогда + ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( + СтрСоединить(Сведения, Символы.ПС), Неопределено, , ОписаниеФайлов); + Иначе + ПараметрыСообщения = Новый Структура("Тема, Сообщение", НСтр("ru = 'Проблема при подаче заявления на сертификат электронной подписи'")); + ЭлектроннаяПодписьСлужебныйКлиент.СформироватьТехническуюИнформацию( + СтрСоединить(Сведения, Символы.ПС), ПараметрыСообщения, , ОписаниеФайлов); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ОписаниеФайлов(Сведения, ВыгрузитьАрхив) + + Индекс = Сведения.Количество(); + + ОписаниеФайлов = Новый Массив; + Если ВыгрузитьАрхив Тогда + ДобавитьОписаниеФайла(ОписаниеФайлов, Сведения, НСтр("ru = 'Запрос на сертификат'"), "p10", АдресЗапросаНаСертификат); + КонецЕсли; + ДобавитьОписаниеФайла(ОписаниеФайлов, Сведения, НСтр("ru = 'Полученный корневой сертификат'"), "cer", АдресКорневогоСертификата); + ДобавитьОписаниеФайла(ОписаниеФайлов, Сведения, НСтр("ru = 'Полученный сертификат'"), "cer", АдресСертификата); + + Если ОписаниеФайлов.Количество() > 0 Тогда + Сведения.Вставить(Индекс, НСтр("ru = 'Приложенные файлы:'")); + Сведения.Добавить(Символы.ПС); + КонецЕсли; + + Возврат ОписаниеФайлов; + +КонецФункции + +&НаКлиенте +Процедура ДобавитьОписаниеФайла(ОписаниеФайлов, Сведения, Описание, Расширение, АдресДанных) + + Если Не ЗначениеЗаполнено(АдресДанных) Тогда + Возврат; + КонецЕсли; + + ИмяФайла = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПодготовитьСтрокуДляИмениФайла( + Описание) + "." + Расширение; + Сведения.Добавить(ИмяФайла); + ОписаниеФайлов.Добавить(Новый Структура("Имя, Данные", ИмяФайла, АдресДанных)); + +КонецПроцедуры + + #КонецОбласти #Область Прочее @@ -8144,16 +8624,15 @@ СоздатьЗапросВОблачныйСервис(Новый ОписаниеОповещения( "ОбработатьЗаявлениеПослеСозданияКлючаИЗапросаНаСертификат", ЭтотОбъект)); ИначеЕсли КлючНаТокене Тогда - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами( - Новый ОписаниеОповещения("СоздатьКлючИЗапросНаСертификатНаТокенеПослеПодключенияРасширенияРаботыСФайлами", - ЭтотОбъект), НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат - |установите расширение для работы с 1С:Предприятием.'"), Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия( + Новый ОписаниеОповещения("СоздатьКлючИЗапросНаСертификатНаТокенеПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект), + НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат установите расширение для работы с 1С:Предприятием.'"), + Ложь); Возврат; Иначе ЭлектроннаяПодписьКлиент.УстановитьРасширение(Ложь, Новый ОписаниеОповещения( "ПечатьЗаявленияПослеУстановкиРасширенияДляРаботыСКриптографией", ЭтотОбъект), - НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат - |установите расширение для работы с 1С:Предприятием.'")); + НСтр("ru = 'Для создания ключа электронной подписи и запроса на сертификат установите расширение для работы с 1С:Предприятием.'")); КонецЕсли; КонецПроцедуры @@ -8226,7 +8705,7 @@ Процедура ЗаполнитьЗаголовкиРеквизитов() Реквизиты = ПолучитьРеквизиты(); - Для каждого Реквизит Из Реквизиты Цикл + Для Каждого Реквизит Из Реквизиты Цикл ЗаголовкиРеквизитов.Добавить(Реквизит.Имя, Реквизит.Заголовок); КонецЦикла; @@ -8317,6 +8796,20 @@ КонецФункции +&НаСервереБезКонтекста +Функция СертификатВыпущенСтороннимУЦ(Знач СертификатОснование) + + ДанныеСертификата = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СертификатОснование, "ДанныеСертификата").Получить(); + Если ДанныеСертификата = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Сертификат = Новый СертификатКриптографии(ДанныеСертификата); + СвойстваИздателяСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваИздателяСертификата(Сертификат); + + Возврат СвойстваИздателяСертификата.ОГРН <> "1047796526546"; // ООО "НПЦ "1С" + +КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl index c6fc95f7e..e8ebae072 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/ManagerModule.bsl @@ -89,7 +89,7 @@ СписокСертификатов = Новый СписокЗначений; Запрос = Новый Запрос; - Запрос.Текст ="ВЫБРАТЬ + Запрос.Текст = "ВЫБРАТЬ | ЗаявленияНаВыпускСертификата.Сертификат, | ЗаявленияНаВыпускСертификата.СостояниеЗаявления, | Представление(ЗаявленияНаВыпускСертификата.Сертификат) КАК Представление @@ -118,10 +118,10 @@ Если Выборка.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен Тогда Состояние = НСтр("ru = 'Требуется установка'"); ИначеЕсли Выборка.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоРаспискаНеОтправлена Тогда - Состояние = НСтр("ru = 'Требуется расписка'"); + Состояние = НСтр("ru = 'Требуется расписка'"); ИначеЕсли Выборка.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда - Состояние = НСтр("ru = 'Заявление исполнено'"); - Иначе + Состояние = НСтр("ru = 'Заявление исполнено'"); + Иначе Состояние = Выборка.СостояниеЗаявления; КонецЕсли; @@ -129,9 +129,9 @@ СтрШаблон("%1 (%2)", Выборка.Представление, Состояние)); КонецЦикла; - + Возврат СписокСертификатов; - + КонецФункции Процедура ДополнитьЗапросПриДобавленииСертификатов(ТекстЗапроса) Экспорт @@ -149,7 +149,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ДополнительноеСоединение", " | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаявленияНаВыпускСертификата КАК ЗаявленияНаВыпускСертификата - | ПО Сертификаты.Ссылка = ЗаявленияНаВыпускСертификата.Сертификат"); + | ПО Сертификаты.Ссылка = ЗаявленияНаВыпускСертификата.Сертификат"); КонецПроцедуры @@ -358,7 +358,6 @@ ПараметрыРеквизитаДляПроверки.Вставить("Имя", ИмяРеквизита); Если ИмяРеквизита = "Телефон" Или ИмяРеквизита = "ЮридическийАдрес" - Или ИмяРеквизита = "ВладелецАдресРегистрации" Или ИмяРеквизита = "ВладелецТелефон" Тогда ПараметрыРеквизитаДляПроверки.Вставить("Значение", Форма[ИмяРеквизита + "XML"]); Иначе @@ -721,7 +720,7 @@ // СписокВыбора - СписокЗначений // Процедура ЗаполнитьСписокВыбораСостоянияЗаявления(СписокВыбора) Экспорт - СписокВыбора.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.ПустаяСсылка(), НСтр("ru = 'Любое'")); + СписокВыбора.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.ПустаяСсылка(), НСтр("ru = 'Все заявления'")); СписокВыбора.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено); СписокВыбора.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.Подготовлено); СписокВыбора.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отправлено); @@ -779,6 +778,8 @@ Функция ВебСервисУЦ(Таймаут = Неопределено) Экспорт + ЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам(Истина); + ПараметрыПодключения = ОбщегоНазначения.ПараметрыПодключенияWSПрокси(); ПараметрыПодключения.АдресWSDL = "https://regservice.1c.ru/regservice/regservice.asmx?wsdl"; ПараметрыПодключения.URIПространстваИмен = "http://regservice.keydisk.ru/"; @@ -955,7 +956,7 @@ ДанныеЗаявления.Записать(); Объект = Сертификат.ПолучитьОбъект(); - Наименование = СокрП(Объект.Фамилия + " " + Объект.Имя + " " + Объект.Отчество) + " (" + НСтр("ru = 'Удалить'") + ")"; + Наименование = СокрП(Объект.Фамилия + " " + Объект.Имя + " " + Объект.Отчество) + " (" + НСтр("ru = 'Заявление отклонено'") + ")"; ИзменитьТекстНапоминанийПользователя(Сертификат, "АвтоматическоеНапоминаниеОбИзмененииСостоянияЗаявления", @@ -964,12 +965,12 @@ Объект.Наименование = Наименование; Объект.ДатаПолученияСертификата = Дата(1,1,1); Объект.Записать(); - + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; + КонецПопытки; Возврат Ложь; КонецЕсли; @@ -1125,7 +1126,7 @@ Объект.ДатаПолученияСертификата = ТекущаяДатаСеанса(); Если Объект.ДанныеСертификата.Получить() <> ДанныеСертификата Тогда - Объект.ДанныеСертификата = Новый ХранилищеЗначения(ДанныеСертификата); + Объект.ДанныеСертификата = Новый ХранилищеЗначения(ДанныеСертификата, Новый СжатиеДанных(9)); КонецЕсли; Содержание = ДанныеЗаявления.СодержаниеЗаявления.Получить(); @@ -1133,7 +1134,7 @@ Содержание.Вставить("Сертификат", ДанныеСертификата); Содержание.Вставить("КорневойСертификат", ДанныеКорневогоСертификата); - ДанныеЗаявления.СодержаниеЗаявления = Новый ХранилищеЗначения(Содержание); + ДанныеЗаявления.СодержаниеЗаявления = Новый ХранилищеЗначения(Содержание, Новый СжатиеДанных(9)); Если ПервоначальноеСостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.ИсполненоСертификатНеУстановлен ИЛИ ПервоначальноеСостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено Тогда @@ -1152,19 +1153,78 @@ ИзменитьТекстНапоминанийПользователя(ДанныеЗаявления.СертификатОснование, "АвтоматическоеНапоминаниеОПродленииСертификата", НовыйТекстНапоминания); - КонецЕсли; + КонецЕсли; Объект.Записать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; - КонецПопытки; + КонецПопытки; Возврат Истина; КонецФункции +Процедура ДополнитьТаблицуСертификатовЗаявлениями(Сертификаты) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Сертификаты.Ссылка КАК Ссылка, + | Сертификаты.Наименование КАК Представление, + | Сертификаты.Организация КАК Организация + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗаявленияНаВыпускСертификата КАК ЗаявленияНаВыпускСертификата + | ПО Сертификаты.Ссылка = ЗаявленияНаВыпускСертификата.Сертификат + |ГДЕ + | Сертификаты.ПометкаУдаления = ЛОЖЬ + | И НЕ ЗаявленияНаВыпускСертификата.СостояниеЗаявления В (&СостоянияЗаявления) + | И Сертификаты.Пользователь = &ПользовательСертификата + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Сертификаты.Ссылка, + | Сертификаты.Наименование, + | Сертификаты.Организация + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗаявленияНаВыпускСертификата КАК ЗаявленияНаВыпускСертификата + | ПО Сертификаты.Ссылка = ЗаявленияНаВыпускСертификата.Сертификат + |ГДЕ + | Сертификаты.ПометкаУдаления = ЛОЖЬ + | И НЕ ЗаявленияНаВыпускСертификата.СостояниеЗаявления В (&СостоянияЗаявления) + | И Сертификаты.Ссылка В + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | СертификатыКлючейЭлектроннойПодписиИШифрованияПользователиПереопределяемый.Ссылка КАК Ссылка + | ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Пользователи КАК СертификатыКлючейЭлектроннойПодписиИШифрованияПользователиПереопределяемый + | ГДЕ + | СертификатыКлючейЭлектроннойПодписиИШифрованияПользователиПереопределяемый.Пользователь = &ПользовательСертификата)"; + + Запрос.УстановитьПараметр("ПользовательСертификата", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяУниверсальнаяДата()); + СостоянияЗаявления = Новый Массив; + СостоянияЗаявления.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.Исполнено); + СостоянияЗаявления.Добавить(Перечисления.СостоянияЗаявленияНаВыпускСертификата.Отклонено); + Запрос.УстановитьПараметр("СостоянияЗаявления", СостоянияЗаявления); + + РезультатЗапроса = Запрос.Выполнить(); + + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + Строка = Сертификаты.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Выборка); + Строка.ЭтоЗаявление = Истина; + Строка.ЕстьВСправочнике = Истина; + Строка.СостояниеСертификата = 5; + КонецЦикла; + +КонецПроцедуры + #Область РегламентноеЗадание // См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий diff --git a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/Сертификат/Template.mxlx b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/Сертификат/Template.mxlx index c7190ec65..4867b7a3d 100644 --- a/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/Сертификат/Template.mxlx +++ b/SSL/src/DataProcessors/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Templates/Сертификат/Template.mxlx @@ -669,7 +669,7 @@ - 9 + 17 ru @@ -680,7 +680,7 @@ - 10 + 18 ОткрытыйКлюч @@ -688,6 +688,29 @@ 30 + + + + 17 + + + ru + Действие ключа электронной подписи: + + + + + + + + 18 + ПериодДействияЗакрытогоКлюча + + + + + + 31 11 @@ -704,7 +727,7 @@ - 31 + 32 @@ -726,7 +749,7 @@ - 32 + 33 @@ -747,64 +770,33 @@ - - 33 - - 4d50478e-ad6a-4d8e-a71e-48a59cebe679 - - - 17 - - - - - 17 - - - - - 17 - - - - - 17 - - - - - 18 - - - - 34 4d50478e-ad6a-4d8e-a71e-48a59cebe679 - 17 + 19 - 17 + 19 - 17 + 19 - 17 + 19 - 18 + 20 @@ -815,13 +807,7 @@ 4d50478e-ad6a-4d8e-a71e-48a59cebe679 - 17 - - - ru - Подпись владельца сертификата - - + 19 @@ -831,30 +817,17 @@ - 17 - - - ru - / - - + 19 + + + + + 19 20 - Владелец - - - - - 18 - - - ru - / - - @@ -863,30 +836,48 @@ 36 4d50478e-ad6a-4d8e-a71e-48a59cebe679 + + + 19 + + + ru + Подпись владельца сертификата + + + + 21 - + + + + + 19 + + + ru + / + + 22 + Владелец - 17 - - - - - 17 - - - - - 17 + 20 + + + ru + / + + @@ -897,28 +888,28 @@ 4d50478e-ad6a-4d8e-a71e-48a59cebe679 - 21 + 23 - 22 + 24 - 17 + 19 - 17 + 19 - 17 + 19 @@ -926,19 +917,51 @@ 38 - true + 4d50478e-ad6a-4d8e-a71e-48a59cebe679 + + + 23 + + + + + + 24 + + + + + 19 + + + + + 19 + + + + + 19 + + 39 - 23 + true + + + + 40 + + 25 true true - 40 - 40 + 41 + 41 0 0 @@ -965,7 +988,7 @@ 1 - 30 + 31 0 1 @@ -984,7 +1007,7 @@ Rows 17 - 37 + 38 -1 -1 @@ -1122,6 +1145,23 @@ Top Wrap + + 1 + 0 + #C8C8C8 + 363 + Top + Wrap + + + 2 + 0 + #C8C8C8 + 454 + Top + Wrap + Parameter + 2 diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Help/ru.html index ab02e39fd..f8c437732 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Help/ru.html +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Help/ru.html @@ -1,29 +1,29 @@

          Предназначена для отбора данных при интерактивной синхронизации данных.

          Отбор данных для выгрузки

          -
          • Для документов используется период отбора. В поле За период нажмите  Выбрать, укажите период. Даты можно указать вручную или выбрать из календаря. С помощью ссылки Показать стандартные периоды можно быстро подобрать период. +
            • Для документов используется период отбора. В поле За период нажмите Выбрать, укажите период. Даты можно указать вручную или выбрать из календаря. С помощью ссылки Показать стандартные периоды можно быстро подобрать период.
            • Нажмите Добавить условие.
            • Выберите Поле для отбора.
            • -
            • Выберите Вид сравнения. -
              • Виды сравнения Равно, Не равно, В группе, Не в группе предполагают выбор одного значения. С помощью видов сравнения Равно или В группе приложение отберет только те записи, которые будут полностью соответствовать указанному значению. +
              • Выберите Вид сравнения. +
                • Виды сравнения Равно, Не равно, В группе, Не в группе предполагают выбор одного значения. С помощью видов сравнения Равно или В группе приложение отберет только те записи, которые будут полностью соответствовать указанному значению.
                • -
                • Виды сравнения В списке, В группе из списка, Не в списке, Не в группе из списка предполагают выбор нескольких значений. Виды сравнения В группе из списка или Не в группе из списка доступны, если в списках для выбора значений имеются группы. +
                • Виды сравнения В списке, В группе из списка, Не в списке, Не в группе из списка предполагают выбор нескольких значений. Виды сравнения В группе из списка или Не в группе из списка доступны, если в списках для выбора значений имеются группы.
                • -
                • С помощью видов сравнения В списке или В группе из списка будут отобраны элементы, которые содержат то или иное значение, перечисленное в списке. +
                • С помощью видов сравнения В списке или В группе из списка будут отобраны элементы, которые содержат то или иное значение, перечисленное в списке.
                • -
                • Виды сравнения Не равно, Не в группе, Не в списке, Не в группе из списка являются отрицанием соответствующих видов сравнения. В результате выполнения условий с такими видами сравнения будут отобраны все элементы, кроме тех, которые указаны. +
                • Виды сравнения Не равно, Не в группе, Не в списке, Не в группе из списка являются отрицанием соответствующих видов сравнения. В результате выполнения условий с такими видами сравнения будут отобраны все элементы, кроме тех, которые указаны.
                • -
                • Для видов сравнения Заполнено и Не заполнено не требуется выбор значения. С помощью вида сравнения Заполнено, например, можно отобрать документы, в которых не проставлена цена на товар.
              • +
              • Для видов сравнения Заполнено и Не заполнено не требуется выбор значения. С помощью вида сравнения Заполнено, например, можно отобрать документы, в которых не проставлена цена на товар.
            • Укажите Значение. -
              • В зависимости от вида сравнения значение можно написать вручную или выбрать из списка. +
                • В зависимости от вида сравнения значение можно написать вручную или выбрать из списка.
                • С помощью команды Еще - Использовать в качестве значения поле можно указать в качестве значения поле документа или элемента списка. Выберите поле из предложенного списка.

              Группировка условий

              -
              • При необходимости условий для отбора может быть несколько, в этом случае они группируются с помощью логических операций И, Или, Не с помощью кнопки Сгруппировать условия. Условия для группировки можно выделить, а затем нажать кнопку. В этом случае все выбранные условия сразу попадут в группу. +
                • При необходимости условий для отбора может быть несколько, в этом случае они группируются с помощью логических операций И, Или, Не с помощью кнопки Сгруппировать условия. Условия для группировки можно выделить, а затем нажать кнопку. В этом случае все выбранные условия сразу попадут в группу.
                • -
                •  Для отмены группировки условий выделите их, выполните команду Еще - Разгруппировать. +
                • Для отмены группировки условий выделите их, выполните команду Еще - Разгруппировать.
                • Можно создать группы для условий с помощью команды Еще - Добавить новую группу, а затем уже перетащить туда нужные условия с помощью мыши или создать в группе новые условия.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html index 9e2dd02ea..8f3eff397 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html @@ -2,7 +2,7 @@

                Предназначена для сохранения настройки выгрузки.

                Открывается с помощью кнопки Настройки из окна Интерактивное изменение выгрузки.

                В списке приводятся Ранее сохраненные настройки.

                -

                Заполните Имя сохраняемой настройки. Двойным щелчком мыши можно выбрать из списка одну из ранее сохраненных настроек для перезаписи.

                +

                Заполните Имя сохраняемой настройки. Двойным щелчком мыши можно выбрать из списка одну из ранее сохраненных настроек для перезаписи.

                Нажмите Сохранить. Последняя отправка сохраняется автоматически.

                См. также:

                • Помощник интерактивной синхронизации данных; diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html index 3e74a4d5e..a244f545a 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html @@ -1,19 +1,19 @@ -

                  Отчет предназначен для выдачи статистики по составу отправляемых данных при синхронизации. 

                  +

                  Отчет предназначен для выдачи статистики по составу отправляемых данных при синхронизации.

                  Отчет можно посмотреть по ссылке Отчет о составе отправляемых данных из Помощника интерактивной синхронизации. Формируется автоматически.

                  -

                  В заголовке отчета выводится наименование приложения, с которой производится синхронизация данных, а также дата и время формирования отчета.

                  +

                  В заголовке отчета выводится наименование приложения, с которой производится синхронизация данных, а также дата и время формирования отчета.

                  Состоит из колонок:

                  -
                  • Данные - перечень объектов приложения (списков и документов), которые участвуют в синхронизации. +
                    • Данные - перечень объектов приложения (списков и документов), которые участвуют в синхронизации.
                    • Выбрано:
                      • По общим правилам;
                      • -
                      • Дополнительно - выбрано на странице Помощника интерактивной синхронизации;
                    • +
                    • Дополнительно - выбрано на странице Помощника интерактивной синхронизации;
                  • Всего объектов в базе;
                  • Не будет отправлено - количество элементов в выбранных объектах, которые не будут отправлены;
                  • -
                  • Будет отправлено - количество элементов в выбранных объектах, которые будут отправлены. 

                  В отчете подсчитывается общее количество отправляемых элементов.

                  +
                • Будет отправлено - количество элементов в выбранных объектах, которые будут отправлены.

                В отчете подсчитывается общее количество отправляемых элементов.

                В состав отправляемых данных могут быть включены дополнительные объекты для обеспечения целостности данных.

                В нижней части списка приводятся также:

                Правила синхронизации данных - подробная формулировка правил синхронизации, которые были приняты для этой информационной базы;

                diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html index aea97b83d..3f01c8dc1 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html @@ -1,20 +1,20 @@

                Предназначена для отбора данных, которые будут отправлены при синхронизации данных в другое приложение .

                -

                Открыть список можно, нажав на ссылку в поле С отбором для добавления данных на странице Данные для отправки Помощника интерактивной синхронизации данных. 

                +

                Открыть список можно, нажав на ссылку в поле С отбором для добавления данных на странице Данные для отправки Помощника интерактивной синхронизации данных.

                Отправляемые данные

                -
                • Нажмите Подобрать, для того чтобы выбрать данные для отправки и заполнить список. Объекты приложения для выбора выводятся в виде дерева. Выделите нужные, нажмите Выбрать. Данные размещаются в списке для отправки. +
                  • Нажмите Подобрать, для того чтобы выбрать данные для отправки и заполнить список. Объекты приложения для выбора выводятся в виде дерева. Выделите нужные, нажмите Выбрать. Данные размещаются в списке для отправки.
                  • -
                  • Для удаления данных из списка нажмите Еще - Удалить. +
                  • Для удаления данных из списка нажмите Еще - Удалить.
                  • -
                  • Список отправляемых данных состоит из колонок: -
                    • Данные для отправки - выбранные для отправки объекты приложения перечисляются в этой колонке; +
                    • Список отправляемых данных состоит из колонок: +
                      • Данные для отправки - выбранные для отправки объекты приложения перечисляются в этой колонке;
                      • Отбор - По умолчанию выбраны Все объекты (ссылка). Нажмите ссылку, для того чтобы отобрать нужные элементы выбранных списков.
                      • -
                      • К отправке/всего - подсчитывается количество выбранных элементов и общее количество элементов списков. Нажмите на ссылку Будет отправлено внизу списка, для того чтобы пересчитать выбранные элементы.
                    • +
                    • К отправке/всего - подсчитывается количество выбранных элементов и общее количество элементов списков. Нажмите на ссылку Будет отправлено внизу списка, для того чтобы пересчитать выбранные элементы.
                  • Нажмите ОК для подтверждения своего выбора и возвращения в Помощник для продолжения настройки синхронизации данных.

                  Просмотр состава данных выгрузки

                  Сохранение настроек выгрузки и их использование

                  • -
                    С помощью кнопки Настройки можно сохранить введенные настройки для отбора данных или использовать ранее сохраненные. Приложение предлагает использовать предыдущие настройки, например сохраненную автоматически, для этого выберите из предлагаемого списка значение Последняя отправка. Можно выбрать из списка ранее сохраненную настройку. Можно сохранить свои настройки. Для этого нажмите Сохранить текущую настройку. Напишите наименование сохраняемой настройки, нажмите Сохранить.

                  Подсчет количества отправляемых объектов

                  -
                  • В нижней части списка в поле Будет отправлено нажмите на ссылку, для того чтобы рассчитать количество отправляемых объектов. После подсчета в колонке списка К отправке/Всего соответственно проставляется количество элементов и ссылка принимает значение итоговой суммы отправляемых элементов.
                  \ No newline at end of file +
                  С помощью кнопки Настройки можно сохранить введенные настройки для отбора данных или использовать ранее сохраненные. Приложение предлагает использовать предыдущие настройки, например сохраненную автоматически, для этого выберите из предлагаемого списка значение Последняя отправка. Можно выбрать из списка ранее сохраненную настройку. Можно сохранить свои настройки. Для этого нажмите Сохранить текущую настройку. Напишите наименование сохраняемой настройки, нажмите Сохранить.

                Подсчет количества отправляемых объектов

                +
                • В нижней части списка в поле Будет отправлено нажмите на ссылку, для того чтобы рассчитать количество отправляемых объектов. После подсчета в колонке списка К отправке/Всего соответственно проставляется количество элементов и ссылка принимает значение итоговой суммы отправляемых элементов.
                \ No newline at end of file diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl index a5961541c..8eba0669c 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -1255,7 +1255,12 @@ КонецФункции // Возвращает структуру с реквизитами объекта. -// +// +// Возвращаемое значение: +// Структура - этот объект в структуру для фонового: +// * КомпоновщикОтбораВсехДокументов - КомпоновщикМакетаКомпоновкиДанных +// * НастройкиКомпоновщикаОтбораВсехДокументов - НастройкиКомпоновкиДанных +// Функция ЭтотОбъектВСтруктуруДляФонового() Экспорт СтруктураРезультата = Новый Структура(); diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs index fc753ee6e..61c36b41d 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Templates/СхемаКомпоновкиДанных/Template.dcs @@ -156,6 +156,12 @@ Тип Тип + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип</v8:content> + </v8:item> + ОбщийИсточникДанных ВЫБРАТЬ diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html index 1090df49f..3b0d72f4b 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html @@ -1,16 +1,16 @@ -

                Предназначена для просмотра справочной, нормативной и другой информации, поставляемой в составе приложения.

                -

                Для базовых версий показ дополнительной информации при начале работы приложения выполняется всегда.

                -

                Открывается по команде Информация при запуске из группы Информация на странице Главное. При открытии сразу показывается одна из страниц дополнительной информации.

                +

                Предназначена для просмотра справочной, нормативной и другой информации, поставляемой в составе приложения.

                +

                Для базовых версий показ дополнительной информации при начале работы приложения выполняется всегда.

                +

                Открывается по команде Информация при запуске из группы Информация на странице Главное. При открытии сразу показывается одна из страниц дополнительной информации.

                Навигация

                • С помощью кнопки Главная страница можно вернуться к информации на главной странице.
                • -
                • В командной панели размещены навигационные кнопки  Назад и  Вперед, с помощью которых осуществляется переход по уже просмотренным страницам, а также пункты меню, соответствующие названиям разделов дополнительной информации. При выборе в командной панели раздела открывается список страниц дополнительной информации, относящихся к данному разделу. Страница показывается при выборе пункта меню с названием страницы. +
                • В командной панели размещены навигационные кнопки Назад и Вперед, с помощью которых осуществляется переход по уже просмотренным страницам, а также пункты меню, соответствующие названиям разделов дополнительной информации. При выборе в командной панели раздела открывается список страниц дополнительной информации, относящихся к данному разделу. Страница показывается при выборе пункта меню с названием страницы.
                • -
                • Текст страницы может содержать ссылки на другие страницы дополнительной информации (внутренние ссылки), а также ссылки на разделы сайтов, размещенных в сети Интернет (внешние ссылки). Для перехода по внешним ссылкам необходимо, чтобы компьютер имел доступ в сеть Интернет.

                Получение информации об ИТС

                +
              • Текст страницы может содержать ссылки на другие страницы дополнительной информации (внутренние ссылки), а также ссылки на разделы сайтов, размещенных в сети Интернет (внешние ссылки). Для перехода по внешним ссылкам необходимо, чтобы компьютер имел доступ в сеть Интернет.

              Получение информации об ИТС

              • С помощью кнопки Поддержка можно получить информацию об ИТС (информационно-технологическом сопровождении) и условиях его получения.

              Показывать при начале работы - недоступно в базовых версиях

              -
              • Для ПРОФ-версий доступна настройка показа дополнительной информации при начале работы приложения. Если дополнительная информация показывается в режиме рабочего стола, то в командной панели размещается флажок Показывать при начале работы. +
                • Для ПРОФ-версий доступна настройка показа дополнительной информации при начале работы приложения. Если дополнительная информация показывается в режиме рабочего стола, то в командной панели размещается флажок Показывать при начале работы.
                • Если снять флажок, то дополнительная информация не будет показываться при начале работы.
                • -
                • Флажок Показывать при начале работы автоматически снимается два раза в месяц и после обновления версии приложения.
                \ No newline at end of file +
              • Флажок Показывать при начале работы автоматически снимается два раза в месяц и после обновления версии приложения.
              \ No newline at end of file diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Help/ru.html b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Help/ru.html index 11c24c1ec..597e70874 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Help/ru.html +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Help/ru.html @@ -1,8 +1,8 @@ -

              Открывается из списка Мои бизнес-процессы или из окна бизнес-процесса (например, Задания) по кнопке  Карта маршрута.

              -

              Ход выполнения бизнес-процесса в приложении наглядно представлен в виде карты маршрута. Карта маршрута описывает логику бизнес-процесса и весь его жизненный цикл в виде схематического изображения - последовательности прохождения точек маршрута. Точка маршрута отражает этап бизнес-процесса, связанный с выполнением, как правило, одной операции. При переходе бизнес-процесса в какую-либо точку маршрута, предусматривающую действия конкретного исполнителя, формируется задача. После того как исполнитель отметит задачу как выполненную, бизнес-процесс автоматически перейдет к следующей точке маршрута. Таким образом, с помощью выполнения задач бизнес-процесс продвигается к точке своего завершения.

              -

              При работе с приложением предусмотрена возможность отображения актуальной карты маршрута для конкретного бизнес-процесса, с учетом пройденных и активных точек маршрута. Пройденные (выполненные) точки маршрута обозначаются штриховкой.

              -

              В каждой точке маршрута доступно одно или несколько действий, меняющих состояние бизнес-процесса.

              +

              Открывается из списка Мои бизнес-процессы или из окна бизнес-процесса (например, Задания) по кнопке Карта маршрута.

              +

              Ход выполнения бизнес-процесса в приложении наглядно представлен в виде карты маршрута. Карта маршрута описывает логику бизнес-процесса и весь его жизненный цикл в виде схематического изображения - последовательности прохождения точек маршрута. Точка маршрута отражает этап бизнес-процесса, связанный с выполнением, как правило, одной операции. При переходе бизнес-процесса в какую-либо точку маршрута, предусматривающую действия конкретного исполнителя, формируется задача. После того как исполнитель отметит задачу как выполненную, бизнес-процесс автоматически перейдет к следующей точке маршрута. Таким образом, с помощью выполнения задач бизнес-процесс продвигается к точке своего завершения.

              +

              При работе с приложением предусмотрена возможность отображения актуальной карты маршрута для конкретного бизнес-процесса, с учетом пройденных и активных точек маршрута. Пройденные (выполненные) точки маршрута обозначаются штриховкой.

              +

              В каждой точке маршрута доступно одно или несколько действий, меняющих состояние бизнес-процесса.

          - Ошибка;
          - Предупреждение;
          @@ -42,6 +42,6 @@
          Действие Кто выполняет

          Исполнитель и проверяющий

          -

          С помощью кнопки Перенаправить задача появляется в списке задач другого исполнителя.

          Просмотр задач по точке маршрута бизнес-процесса

          +

          С помощью кнопки Перенаправить задача появляется в списке задач другого исполнителя.

          Просмотр задач по точке маршрута бизнес-процесса

          • -
            Для того чтобы просмотреть список задач по точке маршрута бизнес-процесса, нажмите кнопку Показать задачи для точки маршрута. Также для этого можно воспользоваться двойным щелчком мыши по точке маршрута.
          \ No newline at end of file +
          Для того чтобы просмотреть список задач по точке маршрута бизнес-процесса, нажмите кнопку Показать задачи для точки маршрута. Также для этого можно воспользоваться двойным щелчком мыши по точке маршрута.
          \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index cdc71490c..533843d04 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -373,6 +373,11 @@ КомпонентыОбмена.ИспользоватьТранзакции = Ложь; КонецЕсли; +#Если ВнешнееСоединение Тогда + РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив( + УзелОбменаЗагрузкаДанных, ИмяФайлаОбмена); +#КонецЕсли + ОбменДаннымиXDTOСервер.ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена); // Расширения формата может инициализировать только после того, как узнаем версию формата из файла сообщения @@ -472,9 +477,9 @@ // // Параметры: // ТаблицыДляЗагрузки - Массив из Строка - массив типов, которые необходимо загрузить из сообщения обмена. -// Например, для загрузки из сообщения обмена только элементов справочника "Контрагенты": +// Например, для загрузки из сообщения обмена только элементов справочника "Демо: Контрагенты": // ТаблицыДляЗагрузки = Новый Массив; -// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); +// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Валюты"); // Список всех типов, которые содержаться в текущем сообщении обмена, // можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). // @@ -643,9 +648,9 @@ // // Параметры: // ТаблицыДляЗагрузки - Массив из Строка - массив типов, которые необходимо загрузить из сообщения обмена. -// Например, для загрузки из сообщения обмена только элементов справочника "Контрагенты": +// Например, для загрузки из сообщения обмена только элементов справочника "Демо: Контрагенты": // ТаблицыДляЗагрузки = Новый Массив; -// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); +// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Валюты"); // Список всех типов, которые содержаться в текущем сообщении обмена, // можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). // @@ -762,8 +767,6 @@ ТекстовыйДокумент.ДобавитьСтроку(ДанныеВыгрузкиXML); ТекстовыйДокумент.Записать(ИмяФайлаОбмена, , Символы.ПС); - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(УзелОбменаЗагрузкаДанных, ИмяФайлаОбмена); - ВыполнитьЗагрузкуДанных(); УдалитьФайлы(ИмяФайлаОбмена); diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index e0c864fa7..045b7def4 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -20,8 +20,7 @@ // ПВД - правило выгрузки данных. // ПОД - правило очистки данных. -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПЕРЕМЕННЫЕ +#Область ЭкспортныеПеременные Перем КлючСообщенияЖурналаРегистрации Экспорт; // строка сообщения для фиксации ошибок в журнале регистрации. @@ -29,8 +28,9 @@ Перем Запросы Экспорт; // Структура, содержащая используемые запросы. -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ МОДУЛЯ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ (ОБЩИЕ ДЛЯ ВЫГРУЗКИ И ЗАГРУЗКИ) +#КонецОбласти + +#Область ВспомогательныеПеременныеМодуляДляНаписанияАлгоритмовОбщиеДляВыгрузкиИЗагрузки Перем Конвертация; // Структура свойств конвертации (Имя, Ид, обработчики событий обмена). @@ -52,14 +52,16 @@ Перем ФлагКомментироватьОбработкуОбъектов; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ОТЛАДКИ ОБРАБОТЧИКОВ +#КонецОбласти + +#Область ПеременныеОтладкиОбработчиков Перем ОбработкаВыгрузки; Перем ОбработкаЗагрузки; -//////////////////////////////////////////////////////////////////////////////// -// ФЛАГИ НАЛИЧИЯ ГЛОБАЛЬНЫХ ОБРАБОТЧИКОВ СОБЫТИЙ +#КонецОбласти + +#Область ФлагиНаличияГлобальныхОбработчиковСобытий Перем ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта; Перем ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта; @@ -69,8 +71,9 @@ Перем ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта; Перем ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ОБРАБОТОК ОБМЕНА (ОБЩИЕ ДЛЯ ВЫГРУЗКИ И ЗАГРУЗКИ) +#КонецОбласти + +#Область ПеременныеОбработокОбменаОбщиеДляВыгрузкиИЗагрузки Перем ТипСтрока; // Тип("Строка") @@ -111,8 +114,9 @@ Перем СообщенияОбОшибках; // Соответствие. Ключ - код ошибки, Значение - описание ошибки. -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ ОБРАБОТКИ ВЫГРУЗКИ +#КонецОбласти + +#Область ПеременныеМодуляОбработкиВыгрузки Перем СчетчикНПП; // Число @@ -137,8 +141,9 @@ Перем КоличествоОбъектовКВыгрузке; //Общее количество объектов подлежащих выгрузке. -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ ОБРАБОТКИ ЗАГРУЗКИ +#КонецОбласти + +#Область ПеременныеМодуляОбработкиЗагрузки Перем КоличествоВыполненныхОтложенныхДвиженийДокументов; Перем НомерПоследнегоПоискаПоСсылке; @@ -172,8 +177,9 @@ Перем КоличествоОбъектовКЗагрузке; Перем РазмерФайлаСообщенияОбмена; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ДЛЯ ЗНАЧЕНИЙ СВОЙСТВ +#КонецОбласти + +#Область ПеременныеДляЗначенийСвойств Перем ПолеФлагОшибки; Перем ПолеРезультатВыполненияОбмена; @@ -223,6 +229,8 @@ #КонецОбласти +#КонецОбласти + #Область ПрограммныйИнтерфейс #Область ЭкспортныеСвойства @@ -2412,6 +2420,11 @@ УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); КонецЕсли; +#Если ВнешнееСоединение Тогда + РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив( + УзелОбменаЗагрузкаДанных, ИмяФайлаОбмена); +#КонецЕсли + НачатьЧтениеСообщения(ЧтениеСообщения); ОбменДаннымиСлужебный.ОтключитьОбновлениеКлючейДоступа(Истина); @@ -4131,7 +4144,7 @@ КонецЕсли; - конецЕсли; + КонецЕсли; ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта ИЛИ ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоМассива @@ -4676,12 +4689,15 @@ КонецФункции // Сохраняет в протокол выполнения (или выводит на экран) сообщения указанной структуры. -// +// // Параметры: // Код - Число - код сообщения. // СтруктураЗаписи - Структура - структура записи протокола. // ВзвестиФлагОшибок - если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. // +// Возвращаемое значение: +// Строка - см. СтрокаСообщенияОбОшибке +// Функция ЗаписатьВПротоколВыполнения(Код = "", СтруктураЗаписи=Неопределено, ВзвестиФлагОшибок=Истина, @@ -13375,7 +13391,23 @@ #Область ПроцедурыИФункцииКомпиляцииПравилОбменаВСтруктуру -// возвращает структуру правил обмена. +// Параметры: +// Источник - Строка - имя временного файла с правилами +// +// Возвращаемое значение: +// - Неопределено +// - Структура: +// * ВерсияФорматаХраненияПравил - Число +// * Конвертация - см. Конвертация +// * ТаблицаНастройкиПараметров - см. ИнициализацияТаблицыНастройкиПараметров +// * ТаблицаПравилВыгрузки - см. КоллекцияПравилаВыгрузкиДанных +// * ТаблицаПравилКонвертации - см. КоллекцияПравилаКонвертации +// * Алгоритмы - Структура +// * Параметры - Структура +// * Запросы - Структура +// * XMLПравила - Строка - xml-строка правил обмена +// * СтрокаТиповДляПриемника - Строка - xml-строка с типами +// Функция ПравилаОбмена(Источник) Экспорт ЗагрузитьПравилаОбмена(Источник, "XMLФайл"); @@ -14353,8 +14385,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Глобальные обработчики +#Область ГлобальныеОбработчики Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПравилОбмена() @@ -14598,8 +14629,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ПКО +#КонецОбласти + +#Область ОбработчикиПКО Процедура ВыполнитьОбработчик_ПКО_ПередВыгрузкойОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, @@ -14856,8 +14888,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ПКС +#КонецОбласти + +#Область ОбработчикиПКС Процедура ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, @@ -15014,8 +15047,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ПКГС +#КонецОбласти + +#Область ОбработчикиПКГС Процедура ВыполнитьОбработчик_ПКГС_ПередОбработкойВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать) @@ -15188,8 +15222,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ПВД +#КонецОбласти + +#Область ОбработчикиПВД Процедура ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных) @@ -15275,8 +15310,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ПОД +#КонецОбласти + +#Область ОбработчикиПОД Процедура ВыполнитьОбработчик_ПОД_ПередОбработкойПравила(Правило, Отказ, ИсходящиеДанные, ВыборкаДанных) @@ -15328,8 +15364,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики Параметров +#КонецОбласти + +#Область ОбработчикиПараметров Процедура ВыполнитьОбработчик_Параметры_ПослеЗагрузкиПараметра(Имя, Значение) @@ -15350,6 +15387,8 @@ #КонецОбласти +#КонецОбласти + #Область Константы Функция ВерсияФорматаСообщенияОбмена() @@ -18104,8 +18143,6 @@ ТекстовыйДокумент.Записать(ИмяОбщегоФайла, , Символы.ПС); ТекстовыйДокумент = Неопределено; - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(УзелОбменаЗагрузкаДанных, ИмяОбщегоФайла); - УдалитьФайлы(ВременныйКаталогДляСборкиАрхива); КонецПроцедуры @@ -18165,4 +18202,4 @@ #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 00d57066b..1ef5ec06d 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -10,8 +10,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Выполняет загрузку данных из файла сообщения обмена. // @@ -789,8 +788,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные функции-свойства. +#КонецОбласти + +#Область ЛокальныеСлужебныеФункцииСвойства Функция ИмяФайлаСообщенияОбмена() @@ -804,8 +804,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Описания ошибок контекста выполнения. +#КонецОбласти + +#Область ОписанияОшибокКонтекстаВыполнения Функция ОшибкаОткрытияФайлаСообщенияОбмена() @@ -891,6 +892,8 @@ #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонструкторФормул/Help/ru.html b/SSL/src/DataProcessors/КонструкторФормул/Help/ru.html index 601317527..525438748 100644 --- a/SSL/src/DataProcessors/КонструкторФормул/Help/ru.html +++ b/SSL/src/DataProcessors/КонструкторФормул/Help/ru.html @@ -1,17 +1,17 @@
          Предназначена для составления формулы из доступных полей и операторов.
          -
          Открывается из окна Выбор поля отчета (см. Настройки отчета) - с помощью кнопки Добавить формулу.
          -

          Построение формулы

          +
          Открывается из окна Выбор поля отчета (см. Настройки отчета) - с помощью кнопки Добавить формулу.
          +

          Построение формулы

          • -
            Заполните поле Наименование для сохранения формулы.
          • -
          • Выберите поля и операторы для построения формулы, пользуясь списками в нижней части окна. 
          • +
            Заполните поле Наименование для сохранения формулы.
            +
          • Выберите поля и операторы для построения формулы, пользуясь списками в нижней части окна.
          • Можно найти нужные операторы или поля, написав их наименования или его часть в полях для поиска.
          • -
          • Для сохранения формулы нажмите кнопку Завершить редактирование.
          -

          Проверка формулы

          +
        • Для сохранения формулы нажмите кнопку Завершить редактирование.
        • +

          Проверка формулы

          -
          • После составления формулы нажмите Проверить формулу.

          См. также:

          +
          • После составления формулы нажмите Проверить формулу.

          См. также:

          diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index b005bc9f7..7c2702b81 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -18,10 +18,8 @@ ПропуститьПерезапуск = Параметры.ПропуститьПерезапуск; - МакетДокумента = Обработки.ЛегальностьПолученияОбновлений.ПолучитьМакет( - "УсловияРаспространенияОбновлений"); + ТекстПредупреждения = ТекстИзМакетаУсловияРаспространенияОбновлений(); - ТекстПредупреждения = МакетДокумента.ПолучитьТекст(); ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); // СтандартныеПодсистемы.ЦентрМониторинга @@ -51,6 +49,41 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ТекстИзМакетаУсловияРаспространенияОбновлений() + + КодТекущегоЯзыка = ?(ТипЗнч(ТекущийЯзык()) = Тип("Строка"), ТекущийЯзык(), ТекущийЯзык().КодЯзыка); + ИмяМакета = "УсловияРаспространенияОбновлений"; + + ИнформационныйМакет = Неопределено; + Если Метаданные.Языки.Количество() > 0 Тогда + ИнформационныйМакет = Метаданные.Обработки.ЛегальностьПолученияОбновлений.Макеты.Найти( + СтрШаблон("%1_%2", ИмяМакета, КодТекущегоЯзыка)); + КонецЕсли; + + Если ИнформационныйМакет = Неопределено Тогда + ИнформационныйМакет = Метаданные.Обработки.ЛегальностьПолученияОбновлений.Макеты.Найти(ИмяМакета); + КонецЕсли; + + Если ИнформационныйМакет = Неопределено Тогда + ИнформационныйМакет = Метаданные.Обработки.ЛегальностьПолученияОбновлений.Макеты.Найти( + СтрШаблон("%1_%2", ИмяМакета, ОбщегоНазначения.КодОсновногоЯзыка())); + КонецЕсли; + + Если ИнформационныйМакет = Неопределено Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В обработке %1 отсутствует макет %2. Требуется добавить его в конфигурацию.'"), + Метаданные.Обработки.ЛегальностьПолученияОбновлений.Имя, ИмяМакета); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); + КонецЕсли; + + МакетДокумента = Обработки.ЛегальностьПолученияОбновлений.ПолучитьМакет( + ИнформационныйМакет.Имя); + + Возврат МакетДокумента.ПолучитьТекст(); + +КонецФункции + &НаКлиенте Процедура ПриОткрытии(Отказ) diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html index 40468c1bc..476cae2b5 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html @@ -1,9 +1,9 @@

          Предназначена для проверки легальности получения обновлений.

          -

          При обновлении приложение запрашивает у администратора подтверждение, что файлы обновления были получены легальным способом.

          +

          При обновлении приложение запрашивает у администратора подтверждение, что файлы обновления были получены легальным способом.

          Выберите с помощью переключателя:

          -
          • Я подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями - в этом случае будет проведено обновление приложения. +
            • Я подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями - в этом случае будет проведено обновление приложения.
            • -
            • Я НЕ подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями - в этом случае работа приложения будет завершена.

            Приводятся Условия распространения обновлений приложений "1С:Предприятие", в тексте которых размещены полезные сведения и ссылки: о договоре на ИТС, поддержке программных продуктов, партнерах фирмы "1С".

            -

            По умолчанию включен флажок Разрешить автоматическую отправку сведений об использовании приложения в фирму "1С". В этом случае в фирму "1С" будут автоматически отправляться отчеты об использовании приложения. Собранные сведения являются обезличенными и содержат только статистические показатели.

            -

            Подготовка и отправка отчетов не замедлит работу приложения, при этом отчеты об использовании приложения помогут разработчикам определить, над чем стоит поработать в первую очередь. Поэтому флажок не рекомендуется выключать.

            \ No newline at end of file +
          • Я НЕ подтверждаю легальность получения обновления в соответствии с вышеизложенными условиями - в этом случае работа приложения будет завершена.

          Приводятся Условия распространения обновлений приложений "1С:Предприятие", в тексте которых размещены полезные сведения и ссылки: о договоре на ИТС, поддержке программных продуктов, партнерах фирмы "1С".

          +

          По умолчанию включен флажок Разрешить автоматическую отправку сведений об использовании приложения в фирму "1С". В этом случае в фирму "1С" будут автоматически отправляться отчеты об использовании приложения. Собранные сведения являются обезличенными и содержат только статистические показатели.

          +

          Подготовка и отправка отчетов не замедлит работу приложения, при этом отчеты об использовании приложения помогут разработчикам определить, над чем стоит поработать в первую очередь. Поэтому флажок не рекомендуется выключать.

          \ 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..1fdaf9724 --- /dev/null +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/ManagerModule.bsl @@ -0,0 +1,33 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() Экспорт + + Результат = Истина; + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() + Или ОбщегоНазначения.РазделениеВключено() + Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Возврат Ложь; + КонецЕсли; + + Настройки = Новый Структура; + Настройки.Вставить("ТребуетсяПроверитьЛегальностьПолученияОбновления", Результат); + ПроверкаЛегальностиПолученияОбновленияПереопределяемый.ПриОпределенииНастроек(Настройки); + + Результат = Настройки.ТребуетсяПроверитьЛегальностьПолученияОбновления; + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html index c21e5e654..301f8f244 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html @@ -1,9 +1,9 @@ -

          В случае если в кластере серверов 1С:Предприятия для данной информационной базы используются профили безопасности, ограничивающие доступ к внешним (относительно кластера серверов 1С:Предприятия) ресурсам, то для корректной работы приложения требуется внести изменения в состав разрешений в профиле безопасности.

          -

          В списке перечислены внешние ресурсы, возможность использования которых будет разрешена.

          +

          В случае если в кластере серверов 1С:Предприятия для данной информационной базы используются профили безопасности, ограничивающие доступ к внешним (относительно кластера серверов 1С:Предприятия) ресурсам, то для корректной работы приложения требуется внести изменения в состав разрешений в профиле безопасности.

          +

          В списке перечислены внешние ресурсы, возможность использования которых будет разрешена.

          Для подтверждения нажмите Применить изменения.

          Кроме того, дополнительно необходимо убедиться, что:

          -
          • доступ к внешним ресурсам не блокируется другим программным обеспечением, установленным на сервере (антивирусы, приложения ограничения трафика); +
            • доступ к внешним ресурсам не блокируется другим программным обеспечением, установленным на сервере (антивирусы, приложения ограничения трафика);
            • -
            • настроены необходимые права в учетных записях пользователей операционной системы, от имени которых выполняется запуск рабочих серверов кластера 1С:Предприятие.

            См. также:

            +
          • настроены необходимые права в учетных записях пользователей операционной системы, от имени которых выполняется запуск рабочих серверов кластера 1С:Предприятие.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index df5e57c85..b62731733 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -354,9 +354,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Применение запросов разрешений на использование внешних ресурсов. -// +#Область ПрименениеЗапросовРазрешенийНаИспользованиеВнешнихРесурсов // Применяет изменения разрешений в профилях безопасности в кластере серверов по сценарию. // @@ -433,4 +431,6 @@ КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html index a8d382fae..cd2c0d8cc 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html @@ -5,45 +5,45 @@ TD { VERTICAL-ALIGN: top } -

          В данной панели осуществляется настройка использования для информационной базы профилей безопасности кластера серверов 1С:Предприятия. Профили безопасности предназначены для контроля за использованием приложением внешних ресурсов (относительно кластера серверов 1С:Предприятия).

          -

          Находится в разделе Администрирование - Поддержка и обслуживание - Безопасность.

          +

          В данной панели осуществляется настройка использования для информационной базы профилей безопасности кластера серверов 1С:Предприятия. Профили безопасности предназначены для контроля за использованием приложением внешних ресурсов (относительно кластера серверов 1С:Предприятия).

          +

          Находится в разделе Администрирование - Поддержка и обслуживание - Безопасность.

          Режим использования профилей безопасности

          -

          С помощью переключателя можно выбрать режим использования профилей безопасности для приложения:

          +

          С помощью переключателя можно выбрать режим использования профилей безопасности для приложения:

          • Профили безопасности не используются для данной информационной базы
            • Приложение не информирует администратора о необходимости добавления внешних ресурсов в профили безопасности. -
              • Если настроить использование профилей безопасности в кластере серверов и не изменять данную настройку, попытки обращения к внешним ресурсам, не разрешенным в кластере серверов, будут приводить к ошибкам в работе приложения. +
                • Если настроить использование профилей безопасности в кластере серверов и не изменять данную настройку, попытки обращения к внешним ресурсам, не разрешенным в кластере серверов, будут приводить к ошибкам в работе приложения.
                • -
                • Если в профиле безопасности снят флажок Полный доступ к внешним отчетам и обработкам, запуск приложения будет невозможен.
            • +
            • Если в профиле безопасности снят флажок Полный доступ к внешним отчетам и обработкам, запуск приложения будет невозможен.
        • Профили безопасности для данной информационной базы настраиваются администратором в консоли кластера
          • Приложение не информирует администратора о необходимости добавления внешних ресурсов в профили безопасности
          • -
          • Администратор настраивает разрешения в профилях безопасности с помощью консоли кластера. +
          • Администратор настраивает разрешения в профилях безопасности с помощью консоли кластера.
            • При этом он может ознакомиться с перечнем разрешений, которые требуется разрешить в профиле безопасности с помощью отчета, открываемого при переходе по ссылке Требуемые разрешения на данной панели.
            • Для профиля информационной базы необходимо установить флажок Профиль безопасного режима.
            • В поле Профиль безопасности информационной базы укажите имя профиля безопасности, установленного для ИБ.
            • -
            • Если в профиле безопасности снят флажок Полный доступ к внешним отчетам и обработкам, требуется установить для него флажок Может использоваться как профиль безопасного режима и указать имя этого профиля безопасности в поле Профиль безопасности информационной базы на данной панели (иначе запуск приложения будет невозможен).
        • +
        • Если в профиле безопасности снят флажок Полный доступ к внешним отчетам и обработкам, требуется установить для него флажок Может использоваться как профиль безопасного режима и указать имя этого профиля безопасности в поле Профиль безопасности информационной базы на данной панели (иначе запуск приложения будет невозможен).
        • Предлагать автоматически настраивать разрешения в профилях безопасности при необходимости (непосредственно из приложения) -
          • При переключении в этот режим будет создан новый профиль безопасности (и назначен для информационной базы), в котором разрешены все внешние ресурсы, требуемые для корректной работы приложения. +
            • При переключении в этот режим будет создан новый профиль безопасности (и назначен для информационной базы), в котором разрешены все внешние ресурсы, требуемые для корректной работы приложения.
            • -
            • Управление разрешениями в профилях безопасности выполняется самим приложением. +
            • Управление разрешениями в профилях безопасности выполняется самим приложением.
            • Управление профилями выполняется из самого приложения.
            • -
            • Если при редактировании каких-либо настроек приложения возникает необходимость предоставления доступа к новому внешнему ресурсу, администратору отображается диалог с перечнем разрешений. +
            • Если при редактировании каких-либо настроек приложения возникает необходимость предоставления доступа к новому внешнему ресурсу, администратору отображается диалог с перечнем разрешений.
              • Если администратор согласен - он вводит параметры аутентификации в кластере и нажимает Далее.
              • Разрешения в профилях безопасности предоставляются автоматически.

          Требуемые разрешения

          Команда недоступна в случае, если настройка Режим использования профилей безопасности установлена в значение Профили безопасности не используются для данной информационной базы.

          -
          • Нажмите Требуемые разрешения, для того чтобы вывести отчет о внешних ресурсах, которые должны быть разрешены в профилях безопасности для корректной работы приложения.

          Профиль безопасности информационной базы

          +
          • Нажмите Требуемые разрешения, для того чтобы вывести отчет о внешних ресурсах, которые должны быть разрешены в профилях безопасности для корректной работы приложения.

          Профиль безопасности информационной базы

          Поле недоступно для редактирования, если настройка Режим использования профилей безопасности установлена в значение Предлагать автоматически настраивать разрешения в профилях безопасности при необходимости (непосредственно из приложения).

          -

          Если настройка Режим использования профилей безопасности установлена в значение Профили безопасности для данной информационной базы настраиваются администратором в консоли кластера и в профиле безопасности снят флажок Полный доступ к внешним отчетам и обработкам - для профиля безопасности следует установить флажок Может использоваться как профиль безопасного режима и указать имя этого профиля безопасности в этом поле (иначе запуск приложения будет невозможен).

          +

          Если настройка Режим использования профилей безопасности установлена в значение Профили безопасности для данной информационной базы настраиваются администратором в консоли кластера и в профиле безопасности снят флажок Полный доступ к внешним отчетам и обработкам - для профиля безопасности следует установить флажок Может использоваться как профиль безопасного режима и указать имя этого профиля безопасности в этом поле (иначе запуск приложения будет невозможен).

          • В поле Профиль безопасности информационной базы введите имя использующегося профиля безопасности (в кластере серверов 1С:Предприятия).

          Восстановление настроек профилей безопасности

          Команда доступна только если настройка Режим использования профилей безопасности установлена в значение Предлагать автоматически настраивать разрешения в профилях безопасности при необходимости (непосредственно из приложения).

          -

          Полностью пересоздает профили безопасности для информационной базы с учетом внешних ресурсов, которые требуются для работы приложения с учетом ее текущих настроек. Может использоваться, например, после переноса информационной базы в другой кластер серверов.

          +

          Полностью пересоздает профили безопасности для информационной базы с учетом внешних ресурсов, которые требуются для работы приложения с учетом ее текущих настроек. Может использоваться, например, после переноса информационной базы в другой кластер серверов.

          • Нажмите Восстановить настройки профилей безопасности.

          Редактирование внешней обработки или отчета

          • Нажмите Открыть внешнюю обработку или отчет. Предусмотрена возможность указать Безопасный режим, в котором будет выполняться подключение внешнего модуля.
          \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html index d5ca5ccb5..af17da2c2 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html @@ -1,7 +1,7 @@ -

          Профили безопасности - механизм версии 8.3 платформы "1С:Предприятие", позволяющий ограничивать использование информационной базой внешних (по отношению к кластеру серверов платформы "1С:Предприятие" ресурсов, такие, как каталоги файловой системы, COM-объекты (на Windows-системах), внешние (по отношению к конфигурации) программные модули на встроенном языке платформы "1С:Предприятие" (внешние отчеты и обработки, вызовы методов Выполнить и Вычислить, внешние компоненты, приложения операционной системы и Интернет-ресурсы. Таким образом, с помощью профилей безопасности можно изолировать каждую информационную базу, позволяя ей использовать только те внешние ресурсы, использование которых явно одобрено администратором.

          -

          Ранее приложение могла работать только с профилем безопасности, в котором разрешен полный доступ к внешним отчетам и обработкам. В данной версии это ограничение снято, что позволяет предоставлять для внешнего кода (в том числе, кода внешних отчетов и обработок) более строгие разрешения на использование внешних ресурсов, нежели для информационной базы.

          -

          Реализовано автоматическое управление разрешениями на доступ к внешним (относительно кластера серверов платформы "1С:Предприятие ресурсам. Таким образом, администратору не требуется самостоятельно отслеживать перечень внешних ресурсов, к которым нужно предоставить доступ (иначе приложение не сможет функционировать), вместо этого - при необходимости получения разрешения администратору выводится диалог с перечнем требуемых разрешений. В случае одобрения новых разрешений администратором, они будут автоматически добавлены в профиль безопасности в кластере серверов. При этом для приложения автоматически формируется максимально ограниченный профиль безопасности, в котором, в частности, снят признак Полный доступ к внешним отчетам и обработкам.

          -

          При работе в тонком клиенте на ОС Linux для автоматического управления разрешениями в профилях безопасности требуется установить сервер администрирования ras. А при использовании ОС Windows можно воспользоваться обоими вариантами по настройке: как через сервер администрирования ras, так с помощью подключения с использованием COM-соединения.

          -

          Автоматическое управление разрешениями можно включить, изменив значение настройки Режим использования профилей безопасности в разделе Администрирование - Поддержка и обслуживание - Безопасность.

          +

          Профили безопасности - механизм версии 8.3 платформы "1С:Предприятие", позволяющий ограничивать использование информационной базой внешних (по отношению к кластеру серверов платформы "1С:Предприятие" ресурсов, такие, как каталоги файловой системы, COM-объекты (на Windows-системах), внешние (по отношению к конфигурации) программные модули на встроенном языке платформы "1С:Предприятие" (внешние отчеты и обработки, вызовы методов Выполнить и Вычислить, внешние компоненты, приложения операционной системы и Интернет-ресурсы. Таким образом, с помощью профилей безопасности можно изолировать каждую информационную базу, позволяя ей использовать только те внешние ресурсы, использование которых явно одобрено администратором.

          +

          Ранее приложение могла работать только с профилем безопасности, в котором разрешен полный доступ к внешним отчетам и обработкам. В данной версии это ограничение снято, что позволяет предоставлять для внешнего кода (в том числе, кода внешних отчетов и обработок) более строгие разрешения на использование внешних ресурсов, нежели для информационной базы.

          +

          Реализовано автоматическое управление разрешениями на доступ к внешним (относительно кластера серверов платформы "1С:Предприятие ресурсам. Таким образом, администратору не требуется самостоятельно отслеживать перечень внешних ресурсов, к которым нужно предоставить доступ (иначе приложение не сможет функционировать), вместо этого - при необходимости получения разрешения администратору выводится диалог с перечнем требуемых разрешений. В случае одобрения новых разрешений администратором, они будут автоматически добавлены в профиль безопасности в кластере серверов. При этом для приложения автоматически формируется максимально ограниченный профиль безопасности, в котором, в частности, снят признак Полный доступ к внешним отчетам и обработкам.

          +

          При работе в тонком клиенте на ОС Linux для автоматического управления разрешениями в профилях безопасности требуется установить сервер администрирования ras. А при использовании ОС Windows можно воспользоваться обоими вариантами по настройке: как через сервер администрирования ras, так с помощью подключения с использованием COM-соединения.

          +

          Автоматическое управление разрешениями можно включить, изменив значение настройки Режим использования профилей безопасности в разделе Администрирование - Поддержка и обслуживание - Безопасность.

          Использование профилей безопасности предоставляется только при наличии версии КОРП клиентских и серверных лицензий для платформы "1С:Предприятие 8".

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index bce549979..e0b4264f9 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -10,9 +10,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Логика работы мастера настройки разрешений на использование внешних ресурсов. -// +#Область ЛогикаРаботыМастераНастройкиРазрешенийНаИспользованиеВнешнихРесурсов // Для внутреннего использования. // @@ -313,9 +311,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с таблицами разрешений. -// +#КонецОбласти + +#Область РаботаСТаблицамиРазрешений // Возвращает строку таблицы разрешений, соответствующую отбору. // Если в таблице нет строк, соответствующих отбору - может быть добавлена новая. @@ -367,5 +365,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl index 47322b39e..ac6f02260 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl @@ -246,15 +246,7 @@ КонецПопытки; Если ТребуетсяПрименениеРазрешенийВКластереСерверов() Тогда - - Попытка - ЗаблокироватьДанныеДляРедактирования(Семафор()); - Исключение - ВызватьИсключение - НСтр("ru = 'Ошибка конкурентного доступа к настройке разрешений на использование внешних ресурсов. - |Попробуйте выполнить операцию позже.'"); - КонецПопытки; - + ЗаблокироватьДанныеДляРедактирования(Семафор()); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index 95491a8de..29b60408c 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html @@ -1,40 +1,40 @@

          Предназначена для настройки резервного копирования информационной базы.

          -

          Иногда возникают ситуации, которые приводят к потере данных, например, сбои энергоснабжения, отказы компьютеров или неправильные действия в приложении. С целью уменьшения риска потери данных администратору приложения необходимо регулярно выполнять резервное копирование информационной базы, в этом случае информационную базу можно восстановить. Частота создания резервных копий зависит от интенсивности ввода новых данных в приложение. Также резервные копии рекомендуется создавать перед любыми операциями в приложении, которые связаны с изменением большого объема данных, например, перед групповым изменением объектов.

          +

          Иногда возникают ситуации, которые приводят к потере данных, например, сбои энергоснабжения, отказы компьютеров или неправильные действия в приложении. С целью уменьшения риска потери данных администратору приложения необходимо регулярно выполнять резервное копирование информационной базы, в этом случае информационную базу можно восстановить. Частота создания резервных копий зависит от интенсивности ввода новых данных в приложение. Также резервные копии рекомендуется создавать перед любыми операциями в приложении, которые связаны с изменением большого объема данных, например, перед групповым изменением объектов.

          В любой момент времени можно восстановить данные из созданной ранее резервной копии. Однако необходимо учитывать, что в восстановленной информационной базе будут только те данные, которые были введены на момент создания резервной копии. Данные, которые были введены позже, будут безвозвратно утеряны. Поэтому очень важно составить расписание резервного копирования так, чтобы снизить потери данных до минимума.

          -

          Использование резервного копирования в режиме 1С:Предприятия предусмотрено только для файлового варианта работы. В клиент-серверном варианте работы приложения для создания резервных копий рекомендуется использовать средства СУБД. Более подробную информацию об этом можно найти в книге "1С:Предприятие 8.2. Клиент-серверный вариант. Руководство администратора".

          -

          Открывается по соответствующей ссылке в предупреждении, которое выводится при запуске приложения, если резервное копирование не настроено. В данном предупреждении предлагается настроить резервное копирование информационной базы. Если проигнорировать его, то предупреждения о необходимости настроить резервное копирование будут появляться каждый час.

          -

          Также можно воспользоваться командой Настройка резервного копирования в разделе Администрирование - Обслуживание - Резервное копирование и восстановление. Под этой командой размещается информация о состоянии резервного копирования в приложении.

          +

          Использование резервного копирования в режиме 1С:Предприятия предусмотрено только для файлового варианта работы. В клиент-серверном варианте работы приложения для создания резервных копий рекомендуется использовать средства СУБД. Более подробную информацию об этом можно найти в книге "1С:Предприятие 8.2. Клиент-серверный вариант. Руководство администратора".

          +

          Открывается по соответствующей ссылке в предупреждении, которое выводится при запуске приложения, если резервное копирование не настроено. В данном предупреждении предлагается настроить резервное копирование информационной базы. Если проигнорировать его, то предупреждения о необходимости настроить резервное копирование будут появляться каждый час.

          +

          Также можно воспользоваться командой Настройка резервного копирования в разделе Администрирование - Обслуживание - Резервное копирование и восстановление. Под этой командой размещается информация о состоянии резервного копирования в приложении.

          Ограничения

          -
          • Внимание! Резервное копирование не поддерживается в случае, если пользователь Администратор, от лица которого запускается резервное копирование,имеет аутентификацию операционной системы.

          Настройка резервного копирования (файловый режим работы приложения)

          +
          • Внимание! Резервное копирование не поддерживается в случае, если пользователь Администратор, от лица которого запускается резервное копирование,имеет аутентификацию операционной системы.

          Настройка резервного копирования (файловый режим работы приложения)

          • Приложение позволяет создавать резервные копии в режиме 1С:Предприятие. Резервное копирование может выполняться как в автоматическом режиме, так и в ручном. Для выполнения резервного копирования в автоматическом режиме необходимо предварительно его настроить.

          • Включите флажок Выполнять автоматическое резервное копирование.

          • -
          • После этого с помощью переключателя можно выбрать следующие возможности: -
            • Регулярно по расписанию - выполнять резервное копирование автоматически. Перейдите по ссылке, для того чтобы настроить расписание резервного копирования. Ссылка отражает введенное расписание. Недоступно в базовых версиях. +
            • После этого с помощью переключателя можно выбрать следующие возможности: +
              • Регулярно по расписанию - выполнять резервное копирование автоматически. Перейдите по ссылке, для того чтобы настроить расписание резервного копирования. Ссылка отражает введенное расписание. Недоступно в базовых версиях.
                • При составлении расписания необходимо учитывать, что если к моменту запуска резервного копирования приложение не будет работать, то резервное копирование не выполнится.
                • Внимание! Некоторые стандартные настройки в расписании резервного копирования не поддерживаются: Повторять с паузой, Завершить после, Останавливать через. Подберите другие настройки, для того чтобы заменить их.
              • -
              • При завершении работы - при каждом выходе из приложения администратору предлагается выполнить резервное копирование. При выходе из приложения, для того чтобы началось резервное копирование, подтвердите свой выбор - нажмите кнопку Завершить. В окне Завершение работы флажок Выполнить резервное копирование по умолчанию включен. Для того чтобы при завершении работы больше не предлагалось резервное копирование, выключите флажок.
            • -
            • Выберите Каталог для сохранения резервных копий. Для этого нажмите  Выбрать, укажите путь к папке, в которую будут помещаться резервные копии, например, E:\Резервное копирование. Поле является обязательным. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель. +
            • При завершении работы - при каждом выходе из приложения администратору предлагается выполнить резервное копирование. При выходе из приложения, для того чтобы началось резервное копирование, подтвердите свой выбор - нажмите кнопку Завершить. В окне Завершение работы флажок Выполнить резервное копирование по умолчанию включен. Для того чтобы при завершении работы больше не предлагалось резервное копирование, выключите флажок.
          • +
          • Выберите Каталог для сохранения резервных копий. Для этого нажмите Выбрать, укажите путь к папке, в которую будут помещаться резервные копии, например, E:\Резервное копирование. Поле является обязательным. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель.
          • -
          • С помощью переключателя выберите срок, на протяжении которого приложение будет Хранить резервные копии, или количество хранимых резервных копий: -
            • Все - если объем устройства, на котором будет находиться каталог для резервного копирования, позволяет, можно выбрать это значение. +
            • С помощью переключателя выберите срок, на протяжении которого приложение будет Хранить резервные копии, или количество хранимых резервных копий: +
              • Все - если объем устройства, на котором будет находиться каталог для резервного копирования, позволяет, можно выбрать это значение.
              • За последние 6 мес. (по умолчанию). Можно выбрать срок хранения резервных копий.
              • -
              • Последние 10 шт. (по умолчанию). Можно ограничить количество хранимых копий. В поле Последние указывается количество старых копий, без учета новой копии.
            • -
            • Нажмите Готово, для того чтобы подтвердить свой выбор и вернуться в приложение. После этого приложение перейдет в режим автоматического резервного копирования.

            Выполнение резервного копирования сторонними средствами

            -
            • Можно отказаться от настройки автоматического резервного копирования, если резервное копирование будет осуществляться сторонними средствами, например, средствами СУБД при клиент-серверном варианте работы, или сторонними приложениями резервного копирования. +
            • Последние 10 шт. (по умолчанию). Можно ограничить количество хранимых копий. В поле Последние указывается количество старых копий, без учета новой копии.
          • +
          • Нажмите Готово, для того чтобы подтвердить свой выбор и вернуться в приложение. После этого приложение перейдет в режим автоматического резервного копирования.

          Выполнение резервного копирования сторонними средствами

          +
          • Можно отказаться от настройки автоматического резервного копирования, если резервное копирование будет осуществляться сторонними средствами, например, средствами СУБД при клиент-серверном варианте работы, или сторонними приложениями резервного копирования.
          • Для этого выключите флажок Выполнять автоматическое резервное копирование.

          Резервное копирование при хранении файлов в томах

          • При хранении файлов в томах для этих файлов также необходимо проводить резервное копирование, другими средствами.

          Ошибки при резервном копировании

          -

          Если резервное копирование завершилось неудачей, а во временном log-файле имеется запись: "Исключение в createConnection: Error, Automation server can't create object", то, скорее всего, используется 32-разрядная компонента comcntr.dll на компьютере под управлением 64-разрядной операционной системы. Для устранения данной проблемы необходимо взять 64-разрядную компоненту comcntr.dll из поставки 1С Предприятие x64 Сервер и зарегистрировать ее, запустив из командной строки:

          +

          Если резервное копирование завершилось неудачей, а во временном log-файле имеется запись: "Исключение в createConnection: Error, Automation server can't create object", то, скорее всего, используется 32-разрядная компонента comcntr.dll на компьютере под управлением 64-разрядной операционной системы. Для устранения данной проблемы необходимо взять 64-разрядную компоненту comcntr.dll из поставки 1С Предприятие x64 Сервер и зарегистрировать ее, запустив из командной строки:

          regsvr32 <каталог 64-разрядного comcntr.dll>\comcntr.dll

          -

          Важно: для того чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /C РазрешитьРаботуПользователей /UC РезервноеКопирование.

          +

          >Важно: для того чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /C РазрешитьРаботуПользователей /UC РезервноеКопирование.

          См. также:

          \ No newline at end of file +Работа с формами.
        • \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Help/ru.html b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Help/ru.html index 9be456e0f..da65ee968 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/Help/ru.html @@ -1,18 +1,18 @@ Предназначена для настройки REST-сервиса для обмена со сторонними приложениями. -
          Для работы с REST-сервисом не рекомендуется использовать какие-либо уже существующие ученые записи с целью защиты данных приложения от взлома, т.к. REST-сервис предназначен для работы со сторонними приложениями.
          +
          Для работы с REST-сервисом не рекомендуется использовать какие-либо уже существующие ученые записи с целью защиты данных приложения от взлома, т.к. REST-сервис предназначен для работы со сторонними приложениями.

          Состоит из двух вкладок:
          Авторизация - можно ввести имя пользователя и пароль для работы с REST-сервисом;
          Состав - можно определить, какие данные будут участвовать в работе автоматического REST-сервиса.

          Авторизация

          -
          Включите флажок Создать для использования автоматического REST-сервиса отдельные имя пользователя и пароль (рекомендуется).
          +
          Включите флажок Создать для использования автоматического REST-сервиса отдельные имя пользователя и пароль (рекомендуется).
          Заполните поля:
          • Имя пользователя;
          • Пароль;
          • Подтверждение пароля.

          Состав

          -

          Определите, какие данные будут участвовать в работе автоматического REST-сервиса. 

          -
          • По умолчанию список пуст. Нажмите кнопку Загрузить метаданные, для того чтобы отобразить данные приложения.
          • -
          • С помощью флажков предоставьте доступ к основным данным, которые будут участвовать в работе REST-сервиса. 
          • -
          • После предоставления доступа к основным данным приложение выводит список подчиненных (зависимых) данных, без которых работа с основными данными невозможна. Подтвердите возможность их использования.
          • +

            Определите, какие данные будут участвовать в работе автоматического REST-сервиса.

            +
            • По умолчанию список пуст. Нажмите кнопку Загрузить метаданные, для того чтобы отобразить данные приложения.
            • +
            • С помощью флажков предоставьте доступ к основным данным, которые будут участвовать в работе REST-сервиса.
            • +
            • После предоставления доступа к основным данным приложение выводит список подчиненных (зависимых) данных, без которых работа с основными данными невозможна. Подтвердите возможность их использования.
            • После предоставления доступа нажмите кнопку Сохранить и закрыть.
          \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl index dc31328a3..e11829504 100644 --- a/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкаСтандартногоИнтерфейсаOData/ManagerModule.bsl @@ -383,9 +383,9 @@ Функция ЭтоРазделенныйОбъект(Знач ОписаниеОбъекта, СвойстваРазделенияДанных = Неопределено) - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда Если СвойстваРазделенияДанных = Неопределено Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); // АПК:1386 Базовая функциональность БТС МодульВыгрузкаЗагрузкаДанныхСлужебныйСобытия = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаЗагрузкаДанныхСлужебныйСобытия"); СвойстваРазделенияДанных = Новый Структура("РазделительОсновныхДанных,РазделительВспомогательныхДанных,СлужебныеДанные"); diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html index f99f13345..879da5b64 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html @@ -1,16 +1,16 @@ -

          Выбор пользовательских настроек, которые необходимо скопировать или очистить:

          +

          Выбор пользовательских настроек, которые необходимо скопировать или очистить:

          Список состоит из трех вкладок:

          -
          • Внешний вид - выводятся настройки внешнего вида рабочего стола, форм (например, различных списков приложения) и командного интерфейса приложения. +
            • Внешний вид - выводятся настройки внешнего вида рабочего стола, форм (например, различных списков приложения) и командного интерфейса приложения.
            • Настройки отчетов - список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов.
            • -
            • Прочие настройки - выводятся персональные настройки пользователя, настройки печати табличного документа, настройки быстрого доступа к дополнительным отчетам и обработкам, настройки раздела Избранное и прочие настройки, не вошедшие в другие разделы.

            Выбор настроек

            +
          • Прочие настройки - выводятся персональные настройки пользователя, настройки печати табличного документа, настройки быстрого доступа к дополнительным отчетам и обработкам, настройки раздела Избранное и прочие настройки, не вошедшие в другие разделы.

          Выбор настроек

          • Выберите нужные настройки с помощью флажков. Для этого имеются дополнительные возможности: -
            • Нажмите кнопку  для того чтобы Пометить все настройки; +
              • Нажмите кнопку для того чтобы Пометить все настройки;
              • -
              • Нажмите кнопку  для того чтобы Снять пометку со всех настроек;
            • +
            • Нажмите кнопку для того чтобы Снять пометку со всех настроек;
          • Для копирования или очистки настроек нажмите Выбрать.

          Просмотр настроек

          -
          • Настройки отчетов и внешнего вида приложения текущего пользователя можно просмотреть с помощью двойного щелчка мыши (или с помощью команды Еще - Открыть).

          См. также:

          +
          • Настройки отчетов и внешнего вида приложения текущего пользователя можно просмотреть с помощью двойного щелчка мыши (или с помощью команды Еще - Открыть).

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl index 6ae2cf19a..8912e4dbc 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl @@ -207,8 +207,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, отвечающие за вывод настроек пользователю. +#Область ПроцедурыИФункцииОтвечающиеЗаВыводНастроекПользователю &НаКлиенте Процедура ОбновитьСписокНастроек() @@ -295,8 +294,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции &НаКлиенте Процедура ИзменитьПометку(Элемент) @@ -641,3 +641,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html index ba05c85ac..e689aa36a 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html @@ -1,18 +1,18 @@

          Необходимо выбрать одного или нескольких пользователей, которым будут скопированы настройки (у которых будут очищены настройки).

          -

          Список состоит из двух частей: в левой части списка располагаются группы, в правой отражаются входящие в них пользователи (внешние пользователи). По умолчанию выбрана группа Все пользователи (Все внешние пользователи).

          +

          Список состоит из двух частей: в левой части списка располагаются группы, в правой отражаются входящие в них пользователи (внешние пользователи). По умолчанию выбрана группа Все пользователи (Все внешние пользователи).

          Для того чтобы увидеть всех пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок Показывать пользователей дочерних групп в нижней части списка.

          Выбор пользователей

          • Выберите нужных пользователей с помощью флажков. Для этого имеются дополнительные возможности:
            • Нажмите кнопку для того чтобы Пометить всех пользователей;
            • -
            • Нажмите кнопку  для того чтобы Снять пометки со всех пользователей; +
            • Нажмите кнопку для того чтобы Снять пометки со всех пользователей;
            • -
            • Выделите с помощью левой кнопки мыши и клавиш Ctrl или Shift нужных пользователей, затем нажмите Еще - Пометить выбранные. +
            • Выделите с помощью левой кнопки мыши и клавиш Ctrl или Shift нужных пользователей, затем нажмите Еще - Пометить выбранные.
            • -
            • Выбранных пользователей выделите, затем выполните команду Еще - Снять пометку выбранных.
          • +
          • Выбранных пользователей выделите, затем выполните команду Еще - Снять пометку выбранных.
        • Для копирования или очистки настроек нажмите Выбрать.
        • Просмотр активных пользователей

          -

          См. также:

          + \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html index 1dda4ce09..f0eb9d257 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html @@ -1,36 +1,36 @@ -

          Предназначена для копирования настроек одного пользователя другим пользователям приложения. При этом скопировать можно настройки в пределах одного списка - Пользователи или Внешние пользователи.

          +

          Предназначена для копирования настроек одного пользователя другим пользователям приложения. При этом скопировать можно настройки в пределах одного списка - Пользователи или Внешние пользователи.

          Удобно использовать в случае, если настраивается несколько новых пользователей в одной группе, в которой уже есть пользователи.

          Команда для копирования настроек пользователей находится в разделе Администрирование - Настройки пользователей и прав.

          Копирование настроек пользователей

          -
          • В поле Скопировать настройки от пользователя выберите пользователя (или внешнего пользователя), чьи настройки будут использоваться для копирования другим пользователям (внешним пользователям): -
            •  нажмите  Выбрать, укажите список Пользователи (Внешние пользователи), в котором будет производиться копирование настроек. +
              • В поле Скопировать настройки от пользователя выберите пользователя (или внешнего пользователя), чьи настройки будут использоваться для копирования другим пользователям (внешним пользователям): +
                • нажмите Выбрать, укажите список Пользователи (Внешние пользователи), в котором будет производиться копирование настроек.
                • -
                • в списке Выбор пользователя (Выбор внешнего пользователя) выделите нужного пользователя (внешнего пользователя), нажмите кнопку Выбрать. Также можно дважды щелкнуть по нужному пользователю левой кнопкой мыши.
              • +
              • в списке Выбор пользователя (Выбор внешнего пользователя) выделите нужного пользователя (внешнего пользователя), нажмите кнопку Выбрать. Также можно дважды щелкнуть по нужному пользователю левой кнопкой мыши.
            • В поле Кому копировать выберите пользователей, которым необходимо скопировать настройки. Переключатель принимает значения: -
              • Выбранным пользователям - становится доступен выбор пользователей. Перейдите по ссылке Выбрать. +
                • Выбранным пользователям - становится доступен выбор пользователей. Перейдите по ссылке Выбрать.
                • Всем пользователям - после выбора значения можно перейти к следующему шагу.
              • -
              • В поле Что копировать выберите, какие настройки копировать другому пользователю или пользователям: +
              • В поле Что копировать выберите, какие настройки копировать другому пользователю или пользователям:
                • Все настройки - после этого можно перейти к копированию настроек.
                • При выборе значения Отдельные настройки появляется возможность выбора нужных настроек из списка. Перейдите по ссылке Выбрать. -
                  • в открывшемся окне Выбор настроек пользователя отметьте флажками настройки для копирования. +
                    • в открывшемся окне Выбор настроек пользователя отметьте флажками настройки для копирования.
                    • После завершения выбора ссылка принимает значение: наименование одной настройки пользователя или количество выбранных настроек.
                • -
                • Для перехода к копированию настроек с выбранными параметрами нажмите Скопировать и закрыть, для того чтобы вернуться в приложение или Скопировать, для того чтобы после завершения копирования этих настроек продолжить копирование.

                Ограничения

                +
              • Для перехода к копированию настроек с выбранными параметрами нажмите Скопировать и закрыть, для того чтобы вернуться в приложение или Скопировать, для того чтобы после завершения копирования этих настроек продолжить копирование.

              Ограничения

              • Не все пользовательские настройки можно скопировать, даже если был нажат переключатель Все настройки.
              • -
                Пользователи, которым копируются настройки внешнего вида приложения, должны завершить свои сеансы работы. Иначе настройки могут не примениться.
                +
                Пользователи, которым копируются настройки внешнего вида приложения, должны завершить свои сеансы работы. Иначе настройки могут не примениться.
              • При копировании настроек вариантов отчетов пользователи должны иметь права на работу с этими отчетами.
              • -
                Личные варианты отчетов скопировать другим пользователям невозможно.

              В этих случаях приложение выдает предупреждение, что не все настройки были скопированы. Нажмите кнопку Показать отчет, для того чтобы посмотреть, какие настройки были пропущены при копировании.

              +
              Личные варианты отчетов скопировать другим пользователям невозможно.

            В этих случаях приложение выдает предупреждение, что не все настройки были скопированы. Нажмите кнопку Показать отчет, для того чтобы посмотреть, какие настройки были пропущены при копировании.

            См. также:

            • diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html index 0a50a03e7..1b0818d15 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html @@ -1,15 +1,15 @@

              Предназначен для управления пользовательскими настройками.

              В списке можно производить просмотр, очистку и копирование пользовательских настроек отчетов, настроек внешнего вида приложения и прочих настроек.

              -

              Список настроек можно открыть из раздела Администрирование - Настройки пользователей и прав по команде Настройки пользователей.

              -
              • В этом случае в списке имеется поле Пользователь. По умолчанию поле Пользователь заполнено значением Администратор, при этом поле не может быть пустым. При этом если в приложении имеются внешние пользователи, то можно управлять и их настройками.

              Также список настроек каждого пользователя (внешнего пользователя) можно открыть по команде Настройки панели навигации.

              +

              Список настроек можно открыть из раздела Администрирование - Настройки пользователей и прав по команде Настройки пользователей.

              +
              • В этом случае в списке имеется поле Пользователь. По умолчанию поле Пользователь заполнено значением Администратор, при этом поле не может быть пустым. При этом если в приложении имеются внешние пользователи, то можно управлять и их настройками.

              Также список настроек каждого пользователя (внешнего пользователя) можно открыть по команде Настройки панели навигации.

              • В этом случае поле Пользователь отсутствует.

              Можно выполнить поиск, введя в поле "Найти" название или часть названия необходимой настройки.

              Список состоит из трех вкладок:

              -
              • Внешний вид - выводятся настройки внешнего вида рабочего стола, форм (например, различных списков приложения) и командного интерфейса приложения. +
                • Внешний вид - выводятся настройки внешнего вида рабочего стола, форм (например, различных списков приложения) и командного интерфейса приложения.
                • Настройки отчетов - список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов.
                • -
                • Прочие настройки - выводятся персональные настройки пользователя, настройки печати табличного документа, настройки быстрого доступа к дополнительным отчетам и обработкам, настройки раздела Избранное и прочие настройки.

                Копирование настроек

                +
              • Прочие настройки - выводятся персональные настройки пользователя, настройки печати табличного документа, настройки быстрого доступа к дополнительным отчетам и обработкам, настройки раздела Избранное и прочие настройки.

              Копирование настроек

              В поле Пользователь выберите нужного пользователя. Возможны действия:

              • Скопировать другим - с помощью этой команды выбранные настройки указанного пользователя можно скопировать одному или нескольким пользователям приложения.
                @@ -20,9 +20,9 @@
                Выделите нужные настройки для копирования на вкладках списка с помощью мыши и клавиш Ctrl или Shift;
              • -
                Выберите нужных пользователей в списке Выбор пользователей с помощью флажков, нажмите Выбрать. Настройки будут скопированы.
            • +
              Выберите нужных пользователей в списке Выбор пользователей с помощью флажков, нажмите Выбрать. Настройки будут скопированы.
          • -
            Еще - Скопировать другим группу настроек - действует аналогично предыдущей, но при этом в меню команды можно выбрать следующие группы настроек:
            +
            Еще - Скопировать другим группу настроек - действует аналогично предыдущей, но при этом в меню команды можно выбрать следующие группы настроек:
            • Настройки отчетов;
            • @@ -40,20 +40,20 @@
              выберите из списка пользователя, от которого необходимо скопировать настройки;
            • -
              выберите настройки, которые необходимо копировать. Действие аналогично команде Копирование настроек в разделе Администрирование - Настройки пользователей и прав. 

          Ограничения

          +
          выберите настройки, которые необходимо копировать. Действие аналогично команде Копирование настроек в разделе Администрирование - Настройки пользователей и прав.

          Ограничения

          Не все пользовательские настройки можно скопировать, даже если был нажат переключатель Все настройки.

          • -
            Пользователи, которым копируются настройки внешнего вида приложения, должны завершить свои сеансы работы. Иначе настройки могут не примениться. Для того чтобы выяснить, работают ли пользователи в данный момент с приложением, можно воспользоваться кнопкой Активные пользователи в списке Выбор пользователей.
            +
            Пользователи, которым копируются настройки внешнего вида приложения, должны завершить свои сеансы работы. Иначе настройки могут не примениться. Для того чтобы выяснить, работают ли пользователи в данный момент с приложением, можно воспользоваться кнопкой Активные пользователи в списке Выбор пользователей.
          • При копировании настроек вариантов отчетов пользователи должны иметь права на работу с этими отчетами.
          • -
            Личные варианты отчетов скопировать другим пользователям невозможно.

          В таких случаях приложение выдает предупреждение, что не все настройки были скопированы. Нажмите кнопку Показать отчет для того чтобы посмотреть, какие настройки были пропущены при копировании.

          +
          Личные варианты отчетов скопировать другим пользователям невозможно.

          В таких случаях приложение выдает предупреждение, что не все настройки были скопированы. Нажмите кнопку Показать отчет для того чтобы посмотреть, какие настройки были пропущены при копировании.

          Очистка настроек выбранного пользователя

          В поле Пользователь выберите нужного пользователя. Возможны действия:

          • -
            Очистить - производится очистка выделенных настроек выбранного пользователя (выделите настройки, которые необходимо очистить, с помощью мыши и клавиш Shift или Ctrl).
            +
            Очистить - производится очистка выделенных настроек выбранного пользователя (выделите настройки, которые необходимо очистить, с помощью мыши и клавиш Shift или Ctrl).
          • Очистить все - выберите группы настроек выбранного пользователя:
            @@ -63,27 +63,27 @@
          • Настройки отчетов и внешнего вида.

          Очистка выделенных настроек у выбранных пользователей

          • -
            Выделите настройки, которые необходимо очистить, с помощью мыши и клавиш Shift или Ctrl;
            +
            Выделите настройки, которые необходимо очистить, с помощью мыши и клавиш Shift или Ctrl;
          • -
            Нажмите Еще - Очистить все - Выделенные настройки у пользователей;
            +
            Нажмите Еще - Очистить все - Выделенные настройки у пользователей;
          • Для подтверждения своего выбора нажмите Да;
          • -
             Выберите нужных пользователей с помощью флажков в списке Выбор пользователей.
            +
            Выберите нужных пользователей с помощью флажков в списке Выбор пользователей.
          • Нажмите кнопку Выбрать для очистки настроек.

          Очистка всех настроек у всех пользователей

          -
          • Нажмите Еще - Очистить все - Все настройки у всех пользователей; +
            • Нажмите Еще - Очистить все - Все настройки у всех пользователей;
            • Для подтверждения своего выбора нажмите Очистить все.

            Просмотр настроек текущего пользователя

            -
            • Просмотр настроек доступен только для текущего пользователя приложения. В этом случае предусмотрена возможность просмотра отчетов и внешнего вида приложения с выбранными настройками. +
              • Просмотр настроек доступен только для текущего пользователя приложения. В этом случае предусмотрена возможность просмотра отчетов и внешнего вида приложения с выбранными настройками.
              • Выберите нужную настройку;
              • -
              • Нажмите Еще - Открыть.

              См. также:

              +
            • Нажмите Еще - Открыть.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl index 667f57a49..757bd49fd 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -435,8 +435,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для вывода списков настроек. +#Область ПроцедурыИФункцииДляВыводаСписковНастроек &НаКлиенте Процедура ОбновитьСписокНастроек() @@ -520,8 +519,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для расчета количества настроек. +#КонецОбласти + +#Область ПроцедурыИФункцииДляРасчетаКоличестваНастроек &НаСервере Процедура РассчитатьКоличествоНастроек() @@ -579,8 +579,9 @@ Возврат КоличествоНастроек; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, отвечающие за копирование, удаление и очистку настроек. +#КонецОбласти + +#Область ПроцедурыИФункцииОтвечающиеЗаКопированиеУдалениеИОчисткуНастроек &НаСервере Процедура СкопироватьНаСервере(ПользователиПриемник, ЛичныхНастроекОтчетов, Отчет) @@ -843,8 +844,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции &НаКлиенте Процедура Подключаемый_ВыполнитьОбработкуОповещения() @@ -1449,3 +1451,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html index f87679629..eaa97f866 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html @@ -1,26 +1,26 @@

            Предназначена для удаления пользовательских настроек.

            -

            Иногда требуется удалить пользовательские настройки, например, если из-за этих неправильных настроек работа в приложении стала невозможной. Очистить можно все настройки, в том числе и личные варианты отчетов.

            +

            Иногда требуется удалить пользовательские настройки, например, если из-за этих неправильных настроек работа в приложении стала невозможной. Очистить можно все настройки, в том числе и личные варианты отчетов.

            Команда для очистки настроек пользователей находится в разделе Администрирование - Настройки пользователей и прав.

            Очистка настроек пользователей

            -
            • С помощью переключателя Очистить настройки выберите пользователей, которым необходимо очистить настройки: +
              • С помощью переключателя Очистить настройки выберите пользователей, которым необходимо очистить настройки:
                • У выбранных пользователей - перейдите по ссылке Выбрать;
                  • Выберите список Пользователи (Внешние пользователи);
                  • -
                  • В списке Выбор пользователей включите соответствующие флажки, нажмите кнопку Выбрать; +
                  • В списке Выбор пользователей включите соответствующие флажки, нажмите кнопку Выбрать;
                  • После завершения выбора ссылка принимает значение: имя пользователя, если выбран один пользователь или количество выбранных пользователей, если выбрано несколько.
                • У всех пользователей - в этом случае можно очистить только Все настройки.
              • -
              • С помощью переключателя Что очистить выберите, какие настройки очищать: +
              • С помощью переключателя Что очистить выберите, какие настройки очищать:
                • Все настройки - при выборе нескольких пользователей или всех пользователей возможна очистка только всех настроек каждого пользователя.
                • -
                • Отдельные настройки - если в поле Очистить настройки выбран один пользователь, то есть возможность выбора отдельных настроек. +
                • Отдельные настройки - если в поле Очистить настройки выбран один пользователь, то есть возможность выбора отдельных настроек.
                  • Перейдите по ссылке Выбрать.
                  • -
                  • в открывшемся окне Выбор настроек пользователя отметьте флажками настройки для очистки. +
                  • в открывшемся окне Выбор настроек пользователя отметьте флажками настройки для очистки.
                  • После завершения выбора ссылка принимает значение: наименование одной настройки пользователя или количество выбранных настроек.
              • -
              • Для перехода к очистке настроек с выбранными параметрами нажмите Очистить и закрыть, для того чтобы вернуться в приложение или Очистить, для того чтобы после завершения копирования этих настроек продолжить очистку.

              См. также:

              +
            • Для перехода к очистке настроек с выбранными параметрами нажмите Очистить и закрыть, для того чтобы вернуться в приложение или Очистить, для того чтобы после завершения копирования этих настроек продолжить очистку.

            См. также:

            • diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html index e7013f231..f620f4675 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Help/ru.html @@ -4,7 +4,7 @@

              Управление пользовательскими настройками выполняет администратор.

              Доступные действия

              • -
                Копирование настроек - копирование пользовательских настроек от одного пользователя другим. Это может понадобиться, например, если настраивается несколько новых пользователей в одной группе, в которой уже есть пользователи.
                +
                Копирование настроек - копирование пользовательских настроек от одного пользователя другим. Это может понадобиться, например, если настраивается несколько новых пользователей в одной группе, в которой уже есть пользователи.
              • Очистка настроек - удаление настроек у всех или выбранных пользователей. Иногда требуется удалить пользовательские настройки, например, если из-за этих неправильных настроек работа в приложении стала невозможной.
                diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl index 337989809..0a54d2ba5 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -10,8 +10,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, отвечающие за получение настроек форм. +#Область ПроцедурыИФункцииОтвечающиеЗаПолучениеНастроекФорм // Получить список настроек форм для указанного пользователя Пользователь. // @@ -346,8 +345,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, отвечающие за копирование и удаление всех настроек пользователя. +#КонецОбласти + +#Область ПроцедурыИФункцииОтвечающиеЗаКопированиеИУдалениеВсехНастроекПользователя // Удаляет настройки пользователей из хранилища. // @@ -556,8 +556,8 @@ КонецЕсли; Если ЧастиИмени.Количество() > 3 - И ( ВРег(ЧастиИмени[2]) = ВРег("Форма") // @Non-NLS - Или ВРег(ЧастиИмени[2]) = ВРег("Form")) Тогда + И ( ВРег(ЧастиИмени[2]) = ВРег("Форма") + Или ВРег(ЧастиИмени[2]) = ВРег("Form")) Тогда // @Non-NLS ПолноеИмяОбъекта = ЧастиИмени[0] + "." + ЧастиИмени[1] + "." + ЧастиИмени[2] + "." + ЧастиИмени[3]; @@ -890,8 +890,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, отвечающие за копирование и удаление выбранных настроек настроек. +#КонецОбласти + +#Область ПроцедурыИФункцииОтвечающиеЗаКопированиеИУдалениеВыбранныхНастроекНастроек // Копирует пользовательские настройки отчетов. // @@ -1228,8 +1229,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для получения списка пользователей и групп пользователей. +#КонецОбласти + +#Область ПроцедурыИФункцииДляПолученияСпискаПользователейИГруппПользователей // Получает список пользователей из справочника Пользователи, отсеивая недействительных пользователей, неразделенных // пользователей при включенном разделителе, а также пользователей с пустым идентификатором. @@ -1484,8 +1486,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Формирует массив отчетов, доступных переданному пользователю. // @@ -2055,8 +2058,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для форм НастройкиПользователей и ВыборНастроек. +#КонецОбласти + +#Область ПроцедурыИФункцииДляФормНастройкиПользователейИВыборНастроек Процедура ЗаполнитьСпискиНастроек(Параметры) Экспорт ЗаполнитьСписокНастроекОтчетов(Параметры); @@ -2532,4 +2536,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form index 9f9d5b9a3..b4d5265af 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Form.form @@ -375,6 +375,12 @@ DontUse Auto + + ПоЗапросу + + Boolean + + diff --git a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl index f8d59423a..0a7966ba7 100644 --- a/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl +++ b/SSL/src/DataProcessors/НастройкиЦентраМониторинга/Forms/ОтправкаКонтактнойИнформации/Module.bsl @@ -10,10 +10,12 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ПараметрыЦентраМониторинга = Новый Структура("КонтактнаяИнформация, КонтактнаяИнформацияКомментарий"); ПараметрыЦентраМониторинга = ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); Контакты = ПараметрыЦентраМониторинга.КонтактнаяИнформация; Комментарий = ПараметрыЦентраМониторинга.КонтактнаяИнформацияКомментарий; + Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); ДанныеАутентификации = МодульИнтернетПоддержкаПользователей.ДанныеАутентификацииПользователяИнтернетПоддержки(); @@ -21,8 +23,9 @@ Логин = ДанныеАутентификации.Логин; КонецЕсли; КонецЕсли; - Если Параметры.Свойство("ПоЗапросу") Тогда - ПоЗапросу = Истина; + + ПоЗапросу = Параметры.ПоЗапросу; + Если ПоЗапросу Тогда Элементы.Заголовок.Заголовок = НСтр("ru = 'Ранее Вы подписались на отправку анонимных обезличенных отчетов об использовании программы. В результате анализа предоставленных отчетов выявлены проблемы производительности. Если Вы готовы предоставить фирме ""1С"" копию Вашей информационной базы (может быть обезличена) для расследования проблем производительности, пожалуйста, укажите свои контактные данные, чтобы сотрудники фирмы ""1С"" могли с Вами связаться. |Если Вы откажетесь, никакие идентификационные данные не будут отправлены.'"); Элементы.ФормаОтправить.Заголовок = НСтр("ru = 'Отправить контактную информацию'"); @@ -37,7 +40,6 @@ #КонецОбласти - #Область ОбработчикиКомандФормы &НаКлиенте @@ -73,22 +75,16 @@ &НаКлиенте Функция КорректноЗаполнена() РезультатПроверки = Истина; - Если ПоЗапросу Тогда - Если ПустаяСтрока(Контакты)Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); - РезультатПроверки = Ложь; - КонецЕсли; - Иначе - Если ПустаяСтрока(Контакты)Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); - РезультатПроверки = Ложь; - КонецЕсли; - Если ПустаяСтрока(Комментарий)Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнен комментарий.'"),,"Комментарий"); - РезультатПроверки = Ложь; - КонецЕсли; - КонецЕсли; - Возврат РезультатПроверки; + Если ПустаяСтрока(Контакты) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не указана контактная информация.'"),,"Контакты"); + РезультатПроверки = Ложь; + КонецЕсли; + Если Не ПоЗапросу И ПустаяСтрока(Комментарий) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не заполнен комментарий.'"),,"Комментарий"); + РезультатПроверки = Ложь; + КонецЕсли; + + Возврат РезультатПроверки; КонецФункции &НаСервере diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НеобходимоОбновитьПлатформу/Module.bsl b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НеобходимоОбновитьПлатформу/Module.bsl index 275cc8379..021e450ca 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НеобходимоОбновитьПлатформу/Module.bsl +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Forms/НеобходимоОбновитьПлатформу/Module.bsl @@ -151,7 +151,8 @@ Продолжить; КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(Платформа.ИмяБезРасширения, "8.3.21") < 0 Тогда + // Проверка установленных платформ у пользователя. Должен быть указан минимальный поддерживаемый режим совместимости. + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(Платформа.ИмяБезРасширения, "8.3.24") < 0 Тогда Продолжить; КонецЕсли; @@ -206,7 +207,7 @@ Возврат Неопределено; КонецПопытки; НомерВерсии = НомерВерсии - 1; - Если НомерВерсии < 21 Тогда // 8.3.21 + Если НомерВерсии < 24 Тогда // 8.3.24 Возврат Неопределено; КонецЕсли; ВерсияЧастями[2] = Строка(НомерВерсии); diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html index 71c615399..bec523514 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокОбновленияДляФайловойБазы/ru.html @@ -22,10 +22,10 @@ BODY {

                Скачайте дистрибутив последней версии платформы 1С:Предприятия 8.3 в сервисе 1С:Обновление -программ. При необходимости укажите логин и пароль.

                +программ. При необходимости укажите логин и пароль.

                Далее -следует выбрать актуальную (последнюю официально опубликованную) версию Технологической +следует выбрать актуальную (последнюю официально опубликованную) версию Технологической платформы 8.3.

                Для @@ -44,17 +44,17 @@ BODY {

                2. Установить новую версию 1С:Предприятия 8.3

                Если у вас -операционная система Microsoft Windows, то обратите внимание: для +операционная система Microsoft Windows, то обратите внимание: для установки приложения пользователь Windows должен обладать правами администратора. Распакуйте загруженный файл с архивом. В папке, в которую -распаковали архив, запустите файл Setup.exe и  следуйте инструкциям +распаковали архив, запустите файл Setup.exe и следуйте инструкциям приложения-установщика.

                -

                3. Создать резервную копию информационной базы

                +

                3. Создать резервную копию информационной базы

                Запустите 1С: Предприятие. В открывшемся окне Запуск 1С: Предприятия определите -и откройте папку, в которой находится нужная информационная база. Затем +и откройте папку, в которой находится нужная информационная база. Затем скопируйте файл 1Cv8.1CD в безопасное место.

                4. Начало работы с новой версией платформы

                diff --git a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокУдаленияПлатформы/ru.html b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокУдаленияПлатформы/ru.html index f6197c29e..43695d16b 100644 --- a/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокУдаленияПлатформы/ru.html +++ b/SSL/src/DataProcessors/НерекомендуемаяВерсияПлатформы/Templates/ПорядокУдаленияПлатформы/ru.html @@ -1,3 +1,3 @@ -Порядок удаления версии приложения 1С:Предприятие

                1. Введите панель управления в поле поиска на панели задач или в меню Пуск, а затем в списке результатов выберите "Панель управления".

                2. Выберите Программы > Программы и компоненты.

                3. Нажмите и удерживайте (или щелкните правой кнопкой мыши) на строке 1С:Предприятие 8 %1 с версией платформы, которую требуется удалить, а затем выберите Удалить или Удалить или изменить. Затем следуйте инструкциям на экране.
                \ No newline at end of file +Порядок удаления версии приложения 1С:Предприятие

                1. Введите панель управления в поле поиска на панели задач или в меню Пуск, а затем в списке результатов выберите "Панель управления".

                2. Выберите Программы > Программы и компоненты.

                3. Нажмите и удерживайте (или щелкните правой кнопкой мыши) на строке 1С:Предприятие 8 %1 с версией платформы, которую требуется удалить, а затем выберите Удалить или Удалить или изменить. Затем следуйте инструкциям на экране.
                \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html index c78b35528..20f054b38 100644 --- a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаОбработчика/Help/ru.html @@ -10,4 +10,4 @@

                Указывается информация о читаемых, изменяемых объектах обработчика.
                Дополнительно можно указать какие объекты необходимо блокировать пока обработчик не будет выполнен.
                В контекстном меню табличных частей Читаемый объект и Изменяемый объект доступны вспомогательные команды для заполнения этих табличных частей.

                Конфликты

                После записи обработчика на закладке Конфликты будут выведены все пересечения по читаемым/изменяемых данным с другими обработчиками.
                Для каждого возникшего конфликта необходимо указать приоритет (очередность) выполнения обработчика.

                -

                 

                \ No newline at end of file +

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Help/ru.html b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Help/ru.html index 6b0e1baf6..dc7e4bee1 100644 --- a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Help/ru.html +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Help/ru.html @@ -74,4 +74,4 @@
              • в каталоге .settings проекта конфигурации выгруженного в формате EDT разместить файл настроек cut_tugs.yml. В этом файле в формате yaml перечислены модули обновления конфигурации для которых необходимо формировать процедуры ПриДобавленииОбработчиковОбновления (шаблон файла настроек можно сгенерировать соответствующей командой расположенной в подменю формы Еще).

              Описание обработчиков обновления генерируются для модулей обновления указанных в файле настройки cut_tag.yml.
              Изменения в файлы записываются в следующем порядке:

              • сформированное описание обработчика записывается в модуль менеджера объекта обновления (рядом с процедурой обновления), в процедуру ОписаниеОбработчиковОбновления
              • в файлы модуля обновления, в процедуру ПриДобавленииОбработчиковОбновления в алфавитном порядке записывается список вызовов процедур ОписаниеОбработчиковОбновления

              При этом среди всех обработчиков записываемых модулей выбирается обработчик с максимальной сборкой конфигурации и эта сборка записывается в версии модулей обновления и корень конфигурации.

              -

               

              \ No newline at end of file +

              \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Module.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Module.bsl index b97430f33..6793532fa 100644 --- a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Module.bsl +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Module.bsl @@ -3824,7 +3824,7 @@ ИнформацияОбОшибке = Неопределено, Ключ = Неопределено) Ошибка = СоздатьОписаниеОшибки(); - Ошибка.ТипОшибки = НСтр("ru = 'Ошибка построения очереди отложенных обработчиков обновления'"); + Ошибка.ТипОшибки = НСтр("ru = 'Построение очереди отложенных обработчиков обновления'"); Ошибка.ПорядокВоспроизведения = ОписаниеОшибки; Ошибка.ОбъектМетаданных = ИмяОбъекта; diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html index 120eadcc5..a0cd26b33 100644 --- a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/Help/ru.html @@ -3,4 +3,4 @@

              Обработка предназначена для формирования и редактирования описания обработчиков обновления.
              Правила формирования описания обработчиков описаны в документации по БСП, раздел Обновление версии ИБ.

              Порядок работы с описанием обработчиков

              1. Загрузить описания обработчиков из кода конфигурации.
              2. Отредактировать описание существующих обработчиков или добавить описание новых обработчиков обновления.
              3. Проконтролировать построение очереди выполнения обработчиков обновления.
              4. Сохранить изменения в файлы git-репозитория конфигурации.

              -

               

              \ No newline at end of file +

              \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl index 7b34e004a..e58fc04d2 100644 --- a/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОписаниеОбработчиковОбновления/ObjectModule.bsl @@ -1575,7 +1575,7 @@ КонецЕсли; Иначе - ТекстИсключения = НСтр("ru = 'Ошибка при формировании очереди.'"); + ТекстИсключения = НСтр("ru = 'Невозможно сформировать очередь отложенных обработчиков обновления.'"); ВызватьИсключение ТекстИсключения; КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html index 30abb43dc..f356f3675 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Help/ru.html @@ -1,7 +1,7 @@ -

              Предназначена для настройки регламентного задания по экспорту замеров производительности.

              +

              Предназначена для настройки регламентного задания по экспорту замеров производительности.

              Это может потребоваться, например, для выполнения анализа производительности в другом приложении.

              -

              Вызывается по команде Настройки раздела Администрирование - Обслуживание - Оценка производительности. 

              +

              Вызывается по команде Настройки раздела Администрирование - Обслуживание - Оценка производительности.

              Настройка автоматического экспорта замеров производительности

              • Включите флажок Выполнять экспорт, при этом автоматически включаются флажки Выполнять экспорт в локальный каталог, Выполнять экспорт на FTP.
              • @@ -17,6 +17,6 @@
              • Для перехода к дальнейшей настройке экспорта нажмите Настроить расписание экспорта, заполните расписание.
              • -
              • Для подтверждения и возврата в приложение нажмите Записать и закрыть.

              После этого экспорт замеров производительности будет производиться автоматически. Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив.

              +
            • Для подтверждения и возврата в приложение нажмите Записать и закрыть.

            После этого экспорт замеров производительности будет производиться автоматически. Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl index cde875761..2f34dbd79 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/АвтоматическийЭкспортЗамеровПроизводительности/Module.bsl @@ -74,7 +74,7 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьКаталогЭкспортаПредложено", ЭтотОбъект); МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда - МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html index 36a62add3..dd94fb390 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Help/ru.html @@ -1,5 +1,5 @@ -

            Предназначена для импорта замеров производительности вручную для анализа в этой информационной базе.

            -

            Укажите путь к файлу на компьютере в поле Файл импорта.

            +

            Предназначена для импорта замеров производительности вручную для анализа в этой информационной базе.

            +

            Укажите путь к файлу на компьютере в поле Файл импорта.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl index f04776cb9..d84586805 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИмпортЗамеровПроизводительности/Module.bsl @@ -53,7 +53,7 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьФайлаИмпортаПредложено", ЭтотОбъект, Неопределено); МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда - МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form index 1406873df..23ff4ae4e 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Form.form @@ -558,6 +558,12 @@ Auto Auto + + КлючеваяОперация + + CatalogRef.КлючевыеОперации + + diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html index e3ab4d32d..1f8f8afd0 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Help/ru.html @@ -21,7 +21,7 @@ хорошо0.94 1.00 отлично


            -

            Укажите Период, за который будут получены замеры для дальнейшего анализа, Ключевую операцию, для которой выполняется поиск целевого времени, и Текущий APDEX согласно оценке пользователя. При выборе значение APDEX из таблицы рекомендуется выбирать минимальное подходящее значение.

            +

            Укажите Период, за который будут получены замеры для дальнейшего анализа, Ключевую операцию, для которой выполняется поиск целевого времени, и Текущий APDEX согласно оценке пользователя. При выборе значение APDEX из таблицы рекомендуется выбирать минимальное подходящее значение.

            После нажатия на кнопку Подобрать целевое время в поле Целевое время будет указано расчетное целевое время. В поле Расчетный APDEX будет указано значение APDEX, которое получается при таком значении целевого времени.

            Приложение проводит оценку производительности, для которой важно задать целевое время ключевой операции. Результаты выводятся в отчет.

            См. также:

            diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl index 1afccd66a..f95e338b7 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ПодборЦелевогоВремениКлючевойОперации/Module.bsl @@ -10,7 +10,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Параметры.Свойство("КлючеваяОперация", КлючеваяОперация); + КлючеваяОперация = Параметры.КлючеваяОперация; Если Не ЗначениеЗаполнено(Период.ДатаНачала) Тогда Период.ДатаНачала = ДобавитьМесяц(НачалоДня(ТекущаяДатаСеанса()), -3); КонецЕсли; diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html index 9443b243e..838275c86 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Help/ru.html @@ -1,7 +1,7 @@ -

            Предназначена для настройки экспорта замеров производительности вручную для анализа в других приложениях.

            -

            В приложении производится оценка производительности. Замеры производительности хранятся в приложении и могут быть экспортированы с целью анализа в других приложениях.

            -

            С помощью кнопок  заполните поля Дата начала и Дата окончания экспорта замеров производительности.

            +

            Предназначена для настройки экспорта замеров производительности вручную для анализа в других приложениях.

            +

            В приложении производится оценка производительности. Замеры производительности хранятся в приложении и могут быть экспортированы с целью анализа в других приложениях.

            +

            С помощью кнопок заполните поля Дата начала и Дата окончания экспорта замеров производительности.

            Выберите профиль ключевых операций в поле Профиль.

            Выберите путь для сохранения данных в поле Каталог экспорта.

            Напишите Имя архива для сохранения замеров.

            diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl index 7b41f7b26..b6affc68a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ЭкспортЗамеровПроизводительности/Module.bsl @@ -51,7 +51,7 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьКаталогЭкспортаПредложено", ЭтотОбъект); МодульФайловаяСистемаКлиент = Вычислить("ФайловаяСистемаКлиент"); Если ТипЗнч(МодульФайловаяСистемаКлиент) = Тип("ОбщийМодуль") Тогда - МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ОписаниеОповещения); + МодульФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения); КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html index 6071cb697..0416b9197 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html @@ -1,15 +1,15 @@

            В приложении предусмотрены встроенные средства для сбора и анализа данных о производительности работы по APDEX, которая является международным стандартом оценки производительности информационных систем.

            -

            Для того чтобы оценивать производительность, необходимо в начале работы приложения заполнить список Ключевые операции.

            -

            Оценка производительности приложения по методике APDEX состоит из следующих основных этапов:

            -
            • заполнение профилей ключевых операций (в профиле заполняются приоритет и целевое значение времени для каждой ключевой операции, предусмотренной в приложении); +

              Для того чтобы оценивать производительность, необходимо в начале работы приложения заполнить список Ключевые операции.

              +

              Оценка производительности приложения по методике APDEX состоит из следующих основных этапов:

              +

              К просмотру отчета Оценка производительности по ключевым операциям можно перейти по соответствующей ссылке раздела Администрирование - Обслуживание - Отчеты и обработки - Отчеты администратора.

              -

              Для того чтобы производить оценку производительности, включите флажок Оценка производительности. После этого в приложении будут производиться замеры производительности во время выполнения указанных ключевых операций, например, при проведении документа.

              -
              • Результаты замеров будут обработаны в отчете Оценка производительности.

              Оценка производительности

              -
              • Оценка производительности выводится в диапазоне от нуля до единицы. В зависимости от значения оценки поле с оценкой выделяется определенным цветом. Полученные оценки можно интерпретировать следующим образом: 

              +
            • на основании собранных данных - формирование отчета Оценки производительности по ключевым операциям.

            К просмотру отчета Оценка производительности по ключевым операциям можно перейти по соответствующей ссылке раздела Администрирование - Обслуживание - Отчеты и обработки - Отчеты администратора.

            +

            Для того чтобы производить оценку производительности, включите флажок Оценка производительности. После этого в приложении будут производиться замеры производительности во время выполнения указанных ключевых операций, например, при проведении документа.

            +
            • Результаты замеров будут обработаны в отчете Оценка производительности.

            Оценка производительности

            +
            • Оценка производительности выводится в диапазоне от нуля до единицы. В зависимости от значения оценки поле с оценкой выделяется определенным цветом. Полученные оценки можно интерпретировать следующим образом:

            @@ -28,13 +28,13 @@

            Шкала APDEX

            Значение

            хорошо
            0.94 1.00 отлично

            Экспорт замеров производительности

            -
            • Полученные замеры производительности приложение позволяет автоматически в фоне выгружать во внешние файлы, например, для выполнения анализа производительности в другом приложении. +
              • Полученные замеры производительности приложение позволяет автоматически в фоне выгружать во внешние файлы, например, для выполнения анализа производительности в другом приложении.
              • -
              • Для того чтобы настроить выгрузку этих данных, перейдите по ссылке Настройки раздела Администрирование - Обслуживание - Оценка производительности. +
              • Для того чтобы настроить выгрузку этих данных, перейдите по ссылке Настройки раздела Администрирование - Обслуживание - Оценка производительности.
              • Сформированные внешние файлы, а также файлы, содержащие настройки, при которых были получены эти замеры, автоматически упаковываются в ZIP-архив.
              • -
              • Для того чтобы выполнить экспорт замеров производительности вручную, нажмите Экспорт замеров. в разделе Администрирование - Обслуживание - Оценка производительности. Файл с замерами производительности можно открыть или сохранить. Для сохранения файла выберите путь к папке на компьютере.

              Импорт замеров производительности

              +
            • Для того чтобы выполнить экспорт замеров производительности вручную, нажмите Экспорт замеров. в разделе Администрирование - Обслуживание - Оценка производительности. Файл с замерами производительности можно открыть или сохранить. Для сохранения файла выберите путь к папке на компьютере.

            Импорт замеров производительности

            • Можно проанализировать замеры производительности другом приложении с помощью импорта из соответствующего файла.
            • @@ -42,4 +42,4 @@
              Для импорта воспользуйтесь ссылкой Импорт замеров в разделе Администрирование - Обслуживание - Оценка производительности.
            • -
              В поле Файл импорта с помощью кнопки  укажите путь к файлу на компьютере, нажмите кнопку Импорт.
            \ 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 26aad8229..b27872fa8 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Form.form @@ -267,6 +267,110 @@ true + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамАдресногоКлассификатора + 1959 + + ДекорацияРазрешенДоступКИнтернетСервисамАдресногоКлассификатора + 1961 + + <key>ru</key> + <value>Декорация разрешен доступ к интернет сервисам</value> + + true + true + + true + + + ДекорацияРазрешенДоступКИнтернетСервисамАдресногоКлассификатораРасширеннаяПодсказка + 1963 + Label + true + true + + Left + + + + ДекорацияРазрешенДоступКИнтернетСервисамАдресногоКлассификатораКонтекстноеМеню + 1962 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешенДоступКИнтернетСервисамАдресногоКлассификатора + 1964 + + <key>ru</key> + <value>Для разблокировки настройки необходимо включить доступ к Интернет-сервисам в настройке "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешенДоступКИнтернетСервисамАдресногоКлассификатораРасширеннаяПодсказка + 1966 + Label + true + true + + Left + + + + КомментарийРазрешенДоступКИнтернетСервисамАдресногоКлассификатораКонтекстноеМеню + 1965 + true + + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа комментарий разрешен доступ к интернет сервисам</value> + + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамАдресногоКлассификатораРасширеннаяПодсказка + 1960 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + true true @@ -553,7 +657,7 @@ 1940 <key>ru</key> - <value>Получать и отправлять сообщения в мессенджеры. Например в Telegram, VK.</value> + <value>Получать и отправлять сообщения в мессенджеры и чаты на веб-сайтах.</value> Label true @@ -660,6 +764,111 @@ true + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамСклонения + 1951 + + ДекорацияРазрешенДоступКИнтернетСервисамСклонения + 1953 + + <key>ru</key> + <value>Декорация разрешен доступ к интернет сервисам склонения</value> + + true + true + + true + + + ДекорацияРазрешенДоступКИнтернетСервисамСклоненияРасширеннаяПодсказка + 1955 + Label + true + true + + Left + + + + ДекорацияРазрешенДоступКИнтернетСервисамСклоненияКонтекстноеМеню + 1954 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешенДоступКИнтернетСервисамСклонения + 1956 + + <key>ru</key> + <value>Для разблокировки настройки необходимо включить доступ к Интернет-сервисам в настройке "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешенДоступКИнтернетСервисамСклоненияРасширеннаяПодсказка + 1958 + Label + true + true + + Left + + + + КомментарийРазрешенДоступКИнтернетСервисамСклоненияКонтекстноеМеню + 1957 + true + + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Комментарий разрешен доступ к интернет сервисам склонения</value> + + true + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамСклоненияРасширеннаяПодсказка + 1952 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + true true @@ -1512,6 +1721,110 @@ Auto + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамЦентраМониторинга + 1967 + + ДекорацияРазрешенДоступКИнтернетСервисамЦентраМониторинга + 1969 + + <key>ru</key> + <value>Декорация разрешен доступ к интернет сервисам склонения</value> + + true + true + + true + + + ДекорацияРазрешенДоступКИнтернетСервисамЦентраМониторингаРасширеннаяПодсказка + 1971 + Label + true + true + + Left + + + + ДекорацияРазрешенДоступКИнтернетСервисамЦентраМониторингаКонтекстноеМеню + 1970 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешенДоступКИнтернетСервисамЦентраМониторинга + 1972 + + <key>ru</key> + <value>Для разблокировки настройки необходимо включить доступ к Интернет-сервисам в настройке "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешенДоступКИнтернетСервисамЦентраМониторингаРасширеннаяПодсказка + 1974 + Label + true + true + + Left + + + + КомментарийРазрешенДоступКИнтернетСервисамЦентраМониторингаКонтекстноеМеню + 1973 + true + + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа комментарий разрешен доступ к интернет сервисам склонения</value> + + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамЦентраМониторингаРасширеннаяПодсказка + 1968 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + true true @@ -1655,6 +1968,88 @@ Auto + + ГруппаДоступКИнтернетСервисам + 1949 + + РазрешитьДоступКИнтернетСервисам + 1946 + + <key>ru</key> + <value>Разрешить доступ к Интернет-сервисам</value> + + true + true + + true + + + РазрешитьДоступКИнтернетСервисам + + Right + ShowBottom + + OnChange + РазрешитьДоступКИнтернетСервисамПриИзменении + + + РазрешитьДоступКИнтернетСервисамРасширеннаяПодсказка + 1948 + + <key>ru</key> + <value>При отсутствии интернета или для экономии трафика рекомендуется отключить настройку.</value> + + Label + true + true + + Left + + + + РазрешитьДоступКИнтернетСервисамКонтекстноеМеню + 1947 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Доступ к Интернет-сервисам</value> + + + ГруппаДоступКИнтернетСервисамРасширеннаяПодсказка + 1950 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Collapsible + Button + NormalSeparation + true + true + auto + Auto + Auto + + ФормаКоманднаяПанель -1 @@ -1846,6 +2241,23 @@ true + + РазрешитьДоступКИнтернетСервисам + + <key>ru</key> + <value>Разрешить доступ к Интернет-сервисам</value> + + 36 + + Boolean + + + true + + + true + + ПодключитьОтключитьОбсуждения diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html index 08bd484a0..c93e68ce4 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Help/ru.html @@ -7,16 +7,16 @@ TD { </style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>В данной панели выполняется настройка работы с сервисами Интернет-поддержки пользователей, просмотр информации о поддержке программного продукта, доступных обновлениях и др.</p> <h3>Настройки Интернет-поддержки</h3> -<ul><li><strong>Логин</strong> - сохраненный в приложении логин, используемый для входа в систему Интернет-поддержки пользователей. Для входа в систему Интернет-поддержки пользователей используется тот же логин и пароль, что и на сайтах <a href="https://portal.1c.ru/" target="_blank">portal.1c.ru</a> и <a href="https://portal.1c.eu/" target="_blank">portal.1c.eu</a>. Если у вас еще нет логина и пароля, то выполните регистрацию самостоятельно или обратитесь за помощью к партнеру фирмы "1С", с которым у Вас заключен договор ИТС. +<ul><li><strong>Логин</strong> - сохраненный в приложении логин, используемый для входа в систему Интернет-поддержки пользователей. Для входа в систему Интернет-поддержки пользователей используется тот же логин и пароль, что и на сайтах <a href="https://portal.1c.ru/" target="_blank">portal.1c.ru</a> и <a href="https://portal.1c.eu/" target="_blank">portal.1c.eu</a>. Если у вас еще нет логина и пароля, то выполните регистрацию самостоятельно или обратитесь за помощью к партнеру фирмы "1С", с которым у Вас заключен договор ИТС. </li> -<li><strong>Подключить -</strong> ввести логин и пароль для подключения ко всем сервисам Интернет-поддержки. Введенные логин и пароль будут сохранены в приложении. +<li><strong>Подключить -</strong> ввести логин и пароль для подключения ко всем сервисам Интернет-поддержки. Введенные логин и пароль будут сохранены в приложении. </li> -<li><strong>Отключить</strong> - удалить из приложения логин и пароль для подключения к сервисам Интернет-поддержки. +<li><strong>Отключить</strong> - удалить из приложения логин и пароль для подключения к сервисам Интернет-поддержки. </li> -<li><strong>Сообщение в службу технической поддержки</strong> - перейти на Портал 1С:ИТС для отправки сообщения в службу технической поддержки. К данным сообщения будет автоматически добавлена техническая информация о приложении. +<li><strong>Сообщение в службу технической поддержки</strong> - перейти на Портал 1С:ИТС для отправки сообщения в службу технической поддержки. К данным сообщения будет автоматически добавлена техническая информация о приложении. </li> -<li><strong>Монитор Портала 1С:ИТС</strong> - информация о поддержке программного продукта, версии приложения и др.</li> -<li><strong>Информационно-технологическое сопровождение (1С:ИТС)</strong> - переход на портал информационно-технологического сопровождения 1С:ИТС. </li></ul><p></p> +<li><strong>Монитор Портала 1С:ИТС</strong> - информация о поддержке программного продукта, версии приложения и др.</li> +<li><strong>Информационно-технологическое сопровождение (1С:ИТС)</strong> - переход на портал информационно-технологического сопровождения 1С:ИТС. </li></ul><p></p> <h3>Классификаторы и курсы валют</h3> <p></p> <table><tbody><tr><td colspan="2"> @@ -53,7 +53,7 @@ TD { <ul><li><strong>Отключить</strong></li></ul></td> <td> <ul><li>При необходимости подключенные обсуждения можно отключить.</li></ul></td></tr></tbody></table><h3>Обновление версии приложения</h3> -<p>В подразделе производится установка обновлений приложения, также можно просмотреть информацию о предыдущих обновлениях.</p> +<p>В подразделе производится установка обновлений приложения, также можно просмотреть информацию о предыдущих обновлениях.</p> <a name="СтандартныеПодсистемы.ОбновлениеКонфигурации"> </a> <p></p><a name="СтандартныеПодсистемы.ОбновлениеВерсииИБ"> @@ -63,7 +63,7 @@ TD { <td>С помощью этой команды можно получить информацию об обновлениях приложения и настроить автоматическую установку обновлений.</td> </tr><tr><td> <li><a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений приложения</a></li></td> -<td>Просмотр списка изменений в установленной версии приложения и рекомендаций по обновлению приложения.</td></tr><tr><td> +<td>Просмотр списка изменений в установленной версии приложения и рекомендаций по обновлению приложения.</td></tr><tr><td> <li><strong>Автоматическая проверка обновлений</strong></li></td> <td> <p>С помощью переключателя можно выбрать настройки: </p> @@ -77,7 +77,7 @@ TD { <li><strong>Загружать и устанавливать исправления (патчи) автоматически</strong></li></td> <td>Включите флажок, для того чтобы получать информацию, загружать и устанавливать доступные исправления (патчи) конфигурации в "тихом режиме" без участия пользователя. <br>При выборе становится доступной ссылка <b>Настроить расписание</b>, например <b>Каждый день, один раз в день</b>.<br><br></td></tr><tr><td> <li><a href="DataProcessor.РезультатыОбновленияПрограммы.Form.РезультатыОбновленияПрограммы/Help">Результаты обновления и дополнительная обработка данных</a></li></td> -<td>Сведения о ходе обновления версии приложения, отложенное выполнение дополнительных процедур обработки данных.</td></tr><tr><td> +<td>Сведения о ходе обновления версии приложения, отложенное выполнение дополнительных процедур обработки данных.</td></tr><tr><td> <li><strong>Детализировать ход обновления в журнале регистрации</strong></li></td> <td>При включенном флажке в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> записываются выполняемые обработчики обновления с указанием времени выполнения.</td></tr></tbody></table><h3>Склонения представлений объектов</h3> <p></p> @@ -86,7 +86,7 @@ TD { <td>включите флажок, для того чтобы разрешить использование внешнего сервиса склонения для получения представлений элементов списков в падежах (требуется подключение к Интернету).</td></tr><tr><td> <li><a href="CommonForm.НастройкаДоступаКСервисуMorpher/Help">Настройка доступа к сервису "Морфер"</a> </li></td> <td>выполните команду для перехода к вводу регистрационных данных на сервисе склонения.</td></tr></tbody></table><h3>Центр мониторинга</h3> -<p>В подразделе представлены настройки сбора, анализа и хранения технологической информации, обезличенной статистики использования конфигурации. Отчеты об использовании приложения, автоматически переданные разработчикам, помогут им определить, над чем следует поработать в первую очередь. Собранные сведения являются обезличенными и содержат только статистические показатели. Подготовка и отправка отчетов не замедлит работу приложения.</p> +<p>В подразделе представлены настройки сбора, анализа и хранения технологической информации, обезличенной статистики использования конфигурации. Отчеты об использовании приложения, автоматически переданные разработчикам, помогут им определить, над чем следует поработать в первую очередь. Собранные сведения являются обезличенными и содержат только статистические показатели. Подготовка и отправка отчетов не замедлит работу приложения.</p> <p>С помощью переключателя выберите: </p> <p></p> <p></p> @@ -104,7 +104,7 @@ TD { <table width="100%"><tbody><tr><td><a name="СтандартныеПодсистемы.ВнешниеКомпоненты"> </a> <li><a name="СтандартныеПодсистемы.ВнешниеКомпоненты"></a><a href="Catalog.ВнешниеКомпоненты/Help">Настройка внешних компонент</a></li></td> -<td>Перейдите по ссылке для настройки автообновления внешних компонент сторонних поставщиков, подключенных к приложению, с портала 1С:ИТС.</td></tr></tbody></table><h3>ЮKassa</h3> +<td>Перейдите по ссылке для настройки автообновления внешних компонент сторонних поставщиков, подключенных к приложению, с портала 1С:ИТС.</td></tr></tbody></table><h3>ЮKassa</h3> <p>В разделе производится настройка интеграции с сервисом ЮKassa.</p> <table width="100%"><tbody><tr><td> <li><strong>Выставлять счета и принимать платежи</strong></li></td> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl index 72a706805..b5b896713 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ИнтернетПоддержкаИСервисы/Module.bsl @@ -112,6 +112,18 @@ КонецПроцедуры +&НаКлиенте +Процедура РазрешитьДоступКИнтернетСервисамПриИзменении(Элемент) + + ПриИзмененииКонстантыНаСервере("РазрешитьДоступКИнтернетСервисам"); + НастройкиПрограммыКлиент.ИнтернетПоддержкаИСервисыПриИзмененииКонстанты( + ЭтотОбъект, + Элемент); + + ПриИзмененииРежимаОтправкиДанныхВЦентрМониторинга(Элемент); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -201,8 +213,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#Область ВызовСервера &НаСервере Процедура ПриИзмененииКонстантыНаСервере(ИмяКонстанты) @@ -240,8 +251,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#КонецОбласти + +#Область Клиент &НаКлиенте Процедура ПриИзмененииРежимаОтправкиДанныхВЦентрМониторинга(Элемент) @@ -266,3 +278,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form index c79eb1965..a13df114d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Form.form @@ -995,15 +995,9 @@ <id>2238</id> <title> <key>ru</key> - <value>Производительный вариант рекомендуется выбирать для клиент-серверной информационной базы, -где он значительно эффективнее стандартного варианта. + <value>Производительный вариант является основным для любых видов приложений, клиент-серверных и файловых информационных баз. -Однако в многопользовательской файловой информационной базе он может ограничивать интенсивность -одновременной работы нескольких пользователей, поэтому может потребоваться стандартный вариант. - -При этом если в файловой базе работает один пользователь, либо данные вводятся несколькими пользователями -не интенсивно, то производительный вариант не накладывает каких-либо дополнительных ограничений и -ускорит просмотр списков и формирование отчетов по сравнению со стандартным вариантом.</value> +Стандартный вариант является устаревшим и оставлен для совместимости с предыдущими версиями. Его поддержка будет прекращена в будущих релизах. Также в нем недоступны или ограниченно доступны такие возможности, как отчет о правах на конкретный документ, сведения об ограничениях доступа и другие.</value> Label true @@ -1051,6 +1045,47 @@ Normal + + СтандартныйВариантУстарел + 2319 + + <key>ru</key> + <value>Стандартный вариант устарел</value> + + true + true + + true + + + ru + Стандартный вариант работы устарел, рекомендуется производительный вариант. + + ShowRight + + СтандартныйВариантУстарелРасширеннаяПодсказка + 2321 + Label + true + true + + Left + + + + СтандартныйВариантУстарелКонтекстноеМеню + 2320 + true + + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + ОбновлениеДоступаНаУровнеЗаписей 2219 diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html index bbfaa49ac..0a27d6693 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Help/ru.html @@ -7,47 +7,47 @@ TD {

          В данной панели осуществляется администрирование пользователей и настройка прав доступа. Доступны команды:

          Пользователи

          -

          В данном подразделе сгруппированы команды для настройки внутренних и внешних пользователей приложения и настроек входа данных пользователей.

          +

          В данном подразделе сгруппированы команды для настройки внутренних и внешних пользователей приложения и настроек входа данных пользователей.

            -
          • Пользователи - администрирование пользователей, которые работают с приложением.
          • +
          • Пользователи - администрирование пользователей, которые работают с приложением.
          • -
          • Настройки входа - переход к настройкам сложности и смены паролей внутренних и внешних пользователей (можно установить отдельные настройки для внешних пользователей). Устанавливаются сроки действия паролей, ограничение работы неактивных пользователей и т.д., а также можно настроить список выбора пользователей. 
          • -
          • Восстановление паролей - переход к настройке помощи при входе в приложение и восстановление паролей пользователей. В приложении предусмотрена возможность оперативного и безопасного восстановления паролей пользователей (и внешних пользователей), которые забыли свой пароль.
          • -
          • Группы пользователей - включите флажок, для того чтобы можно было использовать группы для пользователей и внешних пользователей. Один пользователь может быть участником нескольких групп. Права доступа, указанные для группы, назначаются всем ее участникам. Использование групп имеет смысл, если пользователей приложений много.
          • +
          • Настройки входа - переход к настройкам сложности и смены паролей внутренних и внешних пользователей (можно установить отдельные настройки для внешних пользователей). Устанавливаются сроки действия паролей, ограничение работы неактивных пользователей и т.д., а также можно настроить список выбора пользователей.
          • +
          • Восстановление паролей - переход к настройке помощи при входе в приложение и восстановление паролей пользователей. В приложении предусмотрена возможность оперативного и безопасного восстановления паролей пользователей (и внешних пользователей), которые забыли свой пароль.
          • +
          • Группы пользователей - включите флажок, для того чтобы можно было использовать группы для пользователей и внешних пользователей. Один пользователь может быть участником нескольких групп. Права доступа, указанные для группы, назначаются всем ее участникам. Использование групп имеет смысл, если пользователей приложений много.
          • Регистрировать изменения участников групп пользователей - включите флажок, для того чтобы записывать дополнительные события в журнал регистрации при изменении участников групп пользователей.
          • -
          • Контроль работы пользователей - открывает отчеты администратора с группой отчетов Контроль работы пользователей для анализа работы, настроек и прав пользователей. 
          • Разрешить доступ внешним пользователям - включите флажок, для того чтобы настраивать доступ внешних пользователей и использовать их в приложении. +
          • Контроль работы пользователей - открывает отчеты администратора с группой отчетов Контроль работы пользователей для анализа работы, настроек и прав пользователей.
          • Разрешить доступ внешним пользователям - включите флажок, для того чтобы настраивать доступ внешних пользователей и использовать их в приложении.
          • -
          • Внешние пользователи - учет пользователей, которые работают с приложением "извне". В качестве внешних пользователей приложения могут выступать партнеры, респонденты различных опросов, клиенты интернет-магазина и др. Администрирование внешних пользователей выполняется аналогично пользователям приложения.

          Группы доступа

          -
          • Группы доступа - настройка прав доступа и ограничений для пользователей и групп пользователей. Группа доступа определяет совокупность действий с данными приложения, которые могут выполнять участники этой группы. +
          • Внешние пользователи - учет пользователей, которые работают с приложением "извне". В качестве внешних пользователей приложения могут выступать партнеры, респонденты различных опросов, клиенты интернет-магазина и др. Администрирование внешних пользователей выполняется аналогично пользователям приложения.

          Группы доступа

          +
          • Группы доступа - настройка прав доступа и ограничений для пользователей и групп пользователей. Группа доступа определяет совокупность действий с данными приложения, которые могут выполнять участники этой группы.
          • -
          • Ограничивать доступ на уровне записей - включите этот флажок, для того чтобы максимально гибко настраивать прав доступа пользователей к справочникам, документам и другим данным приложения. +
          • Ограничивать доступ на уровне записей - включите этот флажок, для того чтобы максимально гибко настраивать прав доступа пользователей к справочникам, документам и другим данным приложения.
          • -
          • Профили групп доступа - настройка предустановленных шаблонов групп доступа пользователей. Профили групп доступа, как правило, объединяют в себе несколько ролей. При включении пользователя в группу доступа ему назначаются все роли, заданные в профиле группы доступа.
          • +
          • Профили групп доступа - настройка предустановленных шаблонов групп доступа пользователей. Профили групп доступа, как правило, объединяют в себе несколько ролей. При включении пользователя в группу доступа ему назначаются все роли, заданные в профиле группы доступа.
          • Вариант работы - выберите с помощью выпадающего меню:
          • -
            • Производительный - рекомендуется для клиент-серверной базы, где он значительно эффективнее стандартного варианта. Если выбрать производительный вариант для файловой базы, в которой работает один пользователь или несколько пользователей, но неинтенсивно, то увеличится скорость просмотра списков и формирования отчетов.
            • -
            • Стандартный - может потребоваться для файловой базы, когда производительный вариант ограничивает интенсивность работы нескольких пользователей (параллельное добавление или изменение документов и других данных).
          • Если выбран Производительный режим работы, становится доступной следующая возможность: 
          • -
            • Обновление доступа на уровне записей - перейдите по ссылке для отслеживания хода обновления прав доступа. Также для нештатных случаев позволяет обновить доступ отдельных объектов и запланировать обновление доступа к требуемым спискам. 

          Персональные настройки пользователей

          -
          • Копирование настроек - копирование настроек контекста работы приложения от одного пользователя другим. Это бывает полезно при вводе нового пользователя. +
            • Производительный - является основным для любых видов приложений, клиент-серверных и файловых информационных баз.
            • +
            • Стандартный - является устаревшим и оставлен для совместимости с предыдущими версиями. Его поддержка будет прекращена в будущих релизах. Также в нем недоступны или ограниченно доступны такие возможности, как отчет о правах на конкретный документ, сведения об ограничениях доступа и другие.
          • Если выбран Производительный режим работы, становится доступной следующая возможность:
          • +
            • Обновление доступа на уровне записей - перейдите по ссылке для отслеживания хода обновления прав доступа. Также для нештатных случаев позволяет обновить доступ отдельных объектов и запланировать обновление доступа к требуемым спискам.

          Персональные настройки пользователей

          +
          • Копирование настроек - копирование настроек контекста работы приложения от одного пользователя другим. Это бывает полезно при вводе нового пользователя.
          • -
          • Очистка настроек - очистка настроек пользователя, группы пользователей или всех пользователей. Это восстанавливает целостность настроек и в некоторых случаях помогает нормализовать работу сеансов этого пользователя в приложении. +
          • Очистка настроек - очистка настроек пользователя, группы пользователей или всех пользователей. Это восстанавливает целостность настроек и в некоторых случаях помогает нормализовать работу сеансов этого пользователя в приложении.
          • -
          • Настройки пользователей - просмотр и управление настройками выбранного пользователя.

          Даты запрета изменения

          +
        • Настройки пользователей - просмотр и управление настройками выбранного пользователя.
        • Даты запрета изменения

            -
          • Даты запрета изменения - Включите флажок, для того чтобы использовать даты запрета изменения данных приложения. После этого становится активной команда: +
          • Даты запрета изменения - Включите флажок, для того чтобы использовать даты запрета изменения данных приложения. После этого становится активной команда:
          • -
          • Настроить - Переход к установке запрета редактирования данных приложения до определенной даты (данных прошлых периодов). +
          • Настроить - Переход к установке запрета редактирования данных приложения до определенной даты (данных прошлых периодов).
          • -
          • См. также Даты запрета загрузки данных в панели Администрирование - Синхронизация данных.

          Защита персональных данных 

          +
        • См. также Даты запрета загрузки данных в панели Администрирование - Синхронизация данных.
        • Защита персональных данных

          -
          • Настройки регистрации событий доступа к персональным данным - настройки регистрации событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных"; +
            • Настройки регистрации событий доступа к персональным данным - настройки регистрации событий доступа в соответствии с требованиями Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных";
            • -
            • Защита персональных данных - Просмотр обращений к персональным данным выбранных объектов приложения. +
            • Защита персональных данных - Просмотр обращений к персональным данным выбранных объектов приложения.
            • -
            • Уничтожать персональные данные - включите флажок, для того чтобы по истечении определенного срока уничтожать личные данные. Причиной уничтожения данных может быть истечение срока действия согласия субъекта или его отсутствие.

            Аудит доступа к данным 

            +
          • Уничтожать персональные данные - включите флажок, для того чтобы по истечении определенного срока уничтожать личные данные. Причиной уничтожения данных может быть истечение срока действия согласия субъекта или его отсутствие.

          Аудит доступа к данным

          -
          • Регистрировать доступ к данным - включите флажок, для того чтобы регистрировать события для аудита доступа к данным. 
          • -
          • Настройки - переход к настройке регистрации событий доступа к данным.
          • -
          • Журнал доступа к данным - с помощью журнала можно провести аудит доступа к определенным данным, для того чтобы узнать кто просматривал их, а также когда это было сделано.

          См. также:

          +
          • Регистрировать доступ к данным - включите флажок, для того чтобы регистрировать события для аудита доступа к данным.
          • +
          • Настройки - переход к настройке регистрации событий доступа к данным.
          • +
          • Журнал доступа к данным - с помощью журнала можно провести аудит доступа к определенным данным, для того чтобы узнать кто просматривал их, а также когда это было сделано.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl index 4bbba516d..29211bcf9 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиПользователейИПрав/Module.bsl @@ -56,6 +56,7 @@ Элементы.ОграничиватьДоступНаУровнеЗаписей.Доступность = Ложь; Элементы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Доступность = Ложь; КонецЕсли; + ОбновитьВидимостьПредупрежденияСтандартныйВариантУстарел(ЭтотОбъект); ПоддерживаетсяРегистрацияИзмененийПраваДоступа = МодульУправлениеДоступомСлужебный.ПоддерживаетсяРегистрацияИзмененийПраваДоступа(); Иначе @@ -205,7 +206,7 @@ |см. ход выполнения по ссылке ""Обновление доступа на уровне записей"".'"); Иначе ТекстВопроса = - НСтр("ru = 'Выключить производительный вариант ограничения доступа? + НСтр("ru = 'Вернуться к устаревшему стандартному варианту ограничения доступа? | |Включение займет некоторое время для перезаполнения настроек прав в приложении, |см. ход выполнения регламентного задания ""Заполнение данных для ограничения доступа"" в журнале регистрации.'"); @@ -312,8 +313,16 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьВидимостьПредупрежденияСтандартныйВариантУстарел(Форма) + + Элементы = Форма.Элементы; + Элементы.СтандартныйВариантУстарел.Видимость = + Элементы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Видимость + И Элементы.ОграничиватьДоступНаУровнеЗаписейУниверсально.Доступность + И Не Элементы.ОбновлениеДоступаНаУровнеЗаписей.Видимость; + +КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -371,6 +380,8 @@ Элементы.ОбновлениеДоступаНаУровнеЗаписей.Видимость = НаборКонстант.ОграничиватьДоступНаУровнеЗаписейУниверсально; + ОбновитьВидимостьПредупрежденияСтандартныйВариантУстарел(ЭтотОбъект); + КонецПроцедуры &НаКлиенте @@ -400,9 +411,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера - &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -438,9 +446,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер - &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) @@ -486,4 +491,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form index abffec730..2aa4cab96 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Form.form @@ -1805,7 +1805,7 @@ 2114 <key>ru</key> - <value>Синхронизация с Яндекс.Диск, Box и т.д. для упрощения редактирования файлов.</value> + <value>Синхронизация с облачными хранилищами для упрощения редактирования файлов.</value> Label true @@ -1826,6 +1826,153 @@ true
          + + СинхронизироватьФайлы1 + 2220 + + <key>ru</key> + <value>Синхронизировать файлы</value> + + false + + true + + + СинхронизироватьФайлы + + Right + ShowBottom + + СинхронизироватьФайлы1РасширеннаяПодсказка + 2222 + + <key>ru</key> + <value>Синхронизация с облачными хранилищами для упрощения редактирования файлов.</value> + + Label + true + true + + Left + + + + СинхронизироватьФайлы1КонтекстноеМеню + 2221 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаКомментарийРазрешитьЗагрузкуИзИнтернетаВСинхронизации + 2223 + + ДекорацияРазрешитьЗагрузкуИзИнтернетаВСинхронизации + 2225 + + <key>ru</key> + <value>Декорация разрешить загрузку из интернета в синхронизации</value> + + true + true + + true + + + ДекорацияРазрешитьЗагрузкуИзИнтернетаВСинхронизацииРасширеннаяПодсказка + 2227 + Label + true + true + + Left + + + + ДекорацияРазрешитьЗагрузкуИзИнтернетаВСинхронизацииКонтекстноеМеню + 2226 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешитьЗагрузкуИзИнтернетаВСинхронизации + 2228 + + <key>ru</key> + <value>Для разблокировки настройки необходимо включить доступ к Интернет-сервисам "Интернет-поддержка и сервисы" — "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешитьЗагрузкуИзИнтернетаВСинхронизацииРасширеннаяПодсказка + 2230 + Label + true + true + + Left + + + + КомментарийРазрешитьЗагрузкуИзИнтернетаВСинхронизацииКонтекстноеМеню + 2229 + true + + Label + 43 + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Комментарий разрешить загрузку из интернета в синхронизации</value> + + 43 + + ГруппаКомментарийРазрешитьЗагрузкуИзИнтернетаВСинхронизацииРасширеннаяПодсказка + 2224 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + true true @@ -2474,6 +2621,10 @@ -1 Left
          + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере @@ -2733,6 +2884,23 @@ true + + СинхронизироватьФайлы + + <key>ru</key> + <value>Синхронизировать файлы</value> + + 18 + + Boolean + + + true + + + true + + СправочникТомаХраненияФайлов diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html index f30c02beb..f9cdd815c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Help/ru.html @@ -5,30 +5,30 @@ TD { VERTICAL-ALIGN: top } </style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body class=""> -<p>В данной панели осуществляется настройка параметров загрузки, хранения и обработки файлов. </p> +<p>В данной панели осуществляется настройка параметров загрузки, хранения и обработки файлов. </p> <p>Нажмите на ссылку <b>Файлы</b> для того, чтобы перейти в список файлов, а также задать структуру папок файлов и прав доступа к ним.</p> <ul><li>В поле <strong>Хранить файлы</strong> можно указать вариант хранения файлов:</li> <ul><li><b>в информационной базе</b> - в данном случай файлы хранятся в приложении. Также если выбран данный вариант хранения файлов, то для того чтобы уменьшить нагрузку на информационную базу можно <b>Выполнить дедупликацию</b> для устранения дублей файлов;</li> -<li><strong>в томах на сервере</strong> - в данном случае файлы не будут храниться в приложении; +<li><strong>в томах на сервере</strong> - в данном случае файлы не будут храниться в приложении; </li> -<li><b>в информационной базе и томах на сервере</b>.</li></ul></ul>Если хотя бы часть файлов хранится в томах, то становятся доступными команды:<br><ul><ul><li> <a name="СтандартныеПодсистемы.РаботаСФайлами"></a><a href="Catalog.ТомаХраненияФайлов/Help">Тома хранения файлов</a> - переход к настройке подключения к томам (папкам) хранения файлов на файловом сервере.</li> +<li><b>в информационной базе и томах на сервере</b>.</li></ul></ul>Если хотя бы часть файлов хранится в томах, то становятся доступными команды:<br><ul><ul><li> <a name="СтандартныеПодсистемы.РаботаСФайлами"></a><a href="Catalog.ТомаХраненияФайлов/Help">Тома хранения файлов</a> - переход к настройке подключения к томам (папкам) хранения файлов на файловом сервере.</li> <li>С помощью ссылки <b>Перенос файлов</b> можно перейти к настройкам и перенести файлы. При смене способа хранения файлов автоматический перенос файлов не происходит, нужно перенести файлы вручную.</li> <li><b>Создавать подкаталоги с именами справочников-владельцев файлов</b> - если флажок включен, то файлы в томах будут размещены в подкаталогах с именами списков, документов и т.д., к которым присоединены файлы. Например, для точной настройки правил резервного копирования файлов в томах.</li> <li>Если выбран вариант <b>Хранить файлы в информационной базе и томах на сервере</b>, можно указать, какие типы файлов будут храниться в информационной базе:</li> -<ul><li><b>Изображения </b>(перечислены типы файлов);</li></ul><ul><li><b>Офисные документы</b> (перечислены типы файлов).</li></ul><li>Можно задать <b>Максимальный размер файла в информационной базе</b>. Если это число задано, то невозможно будет загрузить файлы большего размера.</li></ul></ul>Остальные настройки не зависят от способа хранения файлов:<br><ul><li><strong>Запретить загрузку файлов с расширениями</strong> - включите флажок, для того чтобы запретить загрузку в приложение файлов с указанными расширениями и укажите запрещенные к загрузке расширения файлов в поле ввода через пробел. +<ul><li><b>Изображения </b>(перечислены типы файлов);</li></ul><ul><li><b>Офисные документы</b> (перечислены типы файлов).</li></ul><li>Можно задать <b>Максимальный размер файла в информационной базе</b>. Если это число задано, то невозможно будет загрузить файлы большего размера.</li></ul></ul>Остальные настройки не зависят от способа хранения файлов:<br><ul><li><strong>Запретить загрузку файлов с расширениями</strong> - включите флажок, для того чтобы запретить загрузку в приложение файлов с указанными расширениями и укажите запрещенные к загрузке расширения файлов в поле ввода через пробел. </li> -<li><strong>Максимальный размер файла - </strong>введите ограничение загрузки в приложение файлов, превышающих указанный размер. По умолчанию указан размер 50 Мб. Файлы большего размера не будут загружаться в приложение.</li> -<li><strong>Расширения файлов ODF</strong> - можно указать расширения файлов открытого формата документов для офисных приложений, текст из которых также будет извлекаться для построения индекса полнотекстового поиска. Расширения указываются через пробел. По умолчанию список заполнен основными расширениями файлов. Указывать или уточнять список расширений файлов открытого формата документов нужно при использовании операционных систем фирмы Microsoft, если для приложения OpenOffice не установлено расширение IFilter. +<li><strong>Максимальный размер файла - </strong>введите ограничение загрузки в приложение файлов, превышающих указанный размер. По умолчанию указан размер 50 Мб. Файлы большего размера не будут загружаться в приложение.</li> +<li><strong>Расширения файлов ODF</strong> - можно указать расширения файлов открытого формата документов для офисных приложений, текст из которых также будет извлекаться для построения индекса полнотекстового поиска. Расширения указываются через пробел. По умолчанию список заполнен основными расширениями файлов. Указывать или уточнять список расширений файлов открытого формата документов нужно при использовании операционных систем фирмы Microsoft, если для приложения OpenOffice не установлено расширение IFilter. </li> <li><strong>Расширения текстовых файлов - </strong>введите расширения файлов, содержащих текстовые данные. Расширения указываются через пробел. <a name="СтандартныеПодсистемы.РаботаСФайлами"> </a></li> <li><a href="InformationRegister.НастройкиОчисткиФайлов/Help">Настройка очистки файлов</a> - выполните команду, для того чтобы настроить очистку ненужных файлов. </li> -<li><strong>Синхронизировать файлы с облачными сервисами</strong> - включите флажок для синхронизации с Яндекс.Диск, Box и другими облачными сервисами для упрощения редактирования файлов. +<li><strong>Синхронизировать файлы с облачными сервисами</strong> - включите флажок для синхронизации с облачными хранилищами для упрощения редактирования файлов. </li> <li><a href="InformationRegister.НастройкиСинхронизацииФайлов/Help">Настройки синхронизации</a> - перейдите по ссылке для настройки синхронизации файлов с облачными сервисами.</li></ul><h3>Преимущества хранения файлов в томах на сервере</h3> <ul><li> -<div>Нет излишней нагрузки на информационную базу. Файлы могут занимать существенный объем, значительно превышающий объем всех остальных данных информационной базы. В таком случае работа приложения существенно замедляется;</div> +<div>Нет излишней нагрузки на информационную базу. Файлы могут занимать существенный объем, значительно превышающий объем всех остальных данных информационной базы. В таком случае работа приложения существенно замедляется;</div> </li> <li> <div>Объем тома ограничен только объемом жесткого диска;</div> @@ -45,11 +45,11 @@ TD { <div>Для резервного копирования достаточно стандартных средств платформы 1С:Предприятия или СУБД.</div></li></ul><p>Необходимо помнить, что хранение файлов в информационной базе подходит только для баз с небольшим количеством (объемом) файлов. Для того чтобы сэкономить до 30% места в базе воспользуйтесь дедупликацией файлов по команде <b>Выполнить дедупликацию</b>. </p> <h3>Правила хранения файлов в томах</h3> <ul><li> -<div>Переключение флажка <strong>Хранить файлы в томах на сервере</strong> обратной силы не имеет. Если хранение файлов в томах отключили, то новые файлы добавляются в саму ИБ, а старые остаются томах. При этом папка с томом будет продолжать использоваться до того, пока в базе есть хотя бы один файл. Файлы, ранее сохраненные в тома, открываются из этих томов.</div> +<div>Переключение флажка <strong>Хранить файлы в томах на сервере</strong> обратной силы не имеет. Если хранение файлов в томах отключили, то новые файлы добавляются в саму ИБ, а старые остаются томах. При этом папка с томом будет продолжать использоваться до того, пока в базе есть хотя бы один файл. Файлы, ранее сохраненные в тома, открываются из этих томов.</div> </li> <li> -<div>Если сохранить файл в томе, а потом том удалить (внешними средствами), то файл будет не найден, даже если флажок <strong>Хранить файлы в томах на сервере</strong> уже выключен. Включение и выключение флажка не вернет пропавшие файлы.</div> +<div>Если сохранить файл в томе, а потом том удалить (внешними средствами), то файл будет не найден, даже если флажок <strong>Хранить файлы в томах на сервере</strong> уже выключен. Включение и выключение флажка не вернет пропавшие файлы.</div> </li> <li> -<div>Поэтому если приложение не находит файлы, которые хранились в томах, следует в сообщениях об ошибке (в журнале регистрации) посмотреть путь к папке с томом, проверить местонахождение этой папки, наличие в ней нужного файла, и при необходимости восстановить папку. Для осуществления такой возможности необходимо периодически проводить резервное копирование папок с томами файлов внешними средствами (например, средствами операционной системы).</div></li></ul><h3>См. также: </h3> +<div>Поэтому если приложение не находит файлы, которые хранились в томах, следует в сообщениях об ошибке (в журнале регистрации) посмотреть путь к папке с томом, проверить местонахождение этой папки, наличие в ней нужного файла, и при необходимости восстановить папку. Для осуществления такой возможности необходимо периодически проводить резервное копирование папок с томами файлов внешними средствами (например, средствами операционной системы).</div></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/НастройкиРаботыСФайлами/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl index c7a9ad7c0..fa1e0844a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/НастройкиРаботыСФайлами/Module.bsl @@ -48,13 +48,14 @@ Элементы.ГруппаУправлениеРасширениямиФайловВИБ.Видимость = ЭтоАдминистраторСистемы; Если ЭтоАдминистраторСистемы Тогда + Элементы.ГруппаДедупликация.Видимость = НаборКонстант.СпособХраненияФайлов <> "ВТомахНаДиске" И Не ДедупликацияВыполнена(); ЗначениеСпособаХраненияФайлов = НаборКонстант.СпособХраненияФайлов; УстановитьДоступностьНастроекХраненияВТомах(); + Иначе + Элементы.ГруппаДедупликация.Видимость = Ложь; КонецЕсли; - // Обновление состояния элементов. УстановитьДоступность(); - НастройкиПрограммыПереопределяемый.НастройкиРаботыСФайламиПриСозданииНаСервере(ЭтотОбъект); Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда @@ -68,10 +69,6 @@ КонецЕсли; - Если ОбщегоНазначения.РазделениеВключено() Или ДедупликацияВыполнена() Тогда - Элементы.ГруппаДедупликация.Видимость = Ложь; - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -83,6 +80,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "РазрешитьДоступКИнтернетСервисам" Тогда + УстановитьДоступность("РазрешитьДоступКИнтернетСервисам"); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -219,8 +223,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Общие параметры для всех областей данных. +#Область ОбщиеПараметрыДляВсехОбластейДанных &НаКлиенте Процедура МаксимальныйРазмерФайлаПриИзменении(Элемент) @@ -253,6 +256,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -322,22 +327,21 @@ Если Ответ <> КодВозвратаДиалога.ОК Тогда НаборКонстант.СпособХраненияФайлов = ЗначениеСпособаХраненияФайлов; НаборКонстант.ХранитьФайлыВТомахНаДиске = ЗначениеСпособаХраненияФайлов <> "ВИнформационнойБазе"; - Иначе - - Если ЗначениеСпособаХраненияФайлов = "ВИнформационнойБазе" - И НаборКонстант.ХранитьФайлыВТомахНаДиске - И Не ЕстьТомаХраненияФайлов() Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Включено хранение файлов в томах на файловом сервере, но тома еще не настроены. - |Добавляемые файлы будут сохраняться в информационной базе до тех пор, пока не будет настроен хотя бы один том хранения файлов.'")); - КонецЕсли; - - ПриИзмененииСпособаХраненияФайловНаСервере(); - ОбновитьПовторноИспользуемыеЗначения(); - ПослеИзмененияРеквизита("СпособХраненияФайлов", Ложь); - ПослеИзмененияРеквизита("ХранитьФайлыВТомахНаДиске"); - + Возврат; КонецЕсли; + + Если ЗначениеСпособаХраненияФайлов = "ВИнформационнойБазе" + И НаборКонстант.ХранитьФайлыВТомахНаДиске + И Не ЕстьТомаХраненияФайлов() Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Включено хранение файлов в томах на файловом сервере, но тома еще не настроены. + |Добавляемые файлы будут сохраняться в информационной базе до тех пор, пока не будет настроен хотя бы один том хранения файлов.'")); + КонецЕсли; + + ПриИзмененииСпособаХраненияФайловНаСервере(); + ОбновитьПовторноИспользуемыеЗначения(); + ПослеИзмененияРеквизита("СпособХраненияФайлов", Ложь); + ПослеИзмененияРеквизита("ХранитьФайлыВТомахНаДиске"); КонецПроцедуры @@ -410,7 +414,6 @@ Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - КонстантаИмя = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); УстановитьДоступность(РеквизитПутьКДанным); @@ -427,7 +430,6 @@ Константы.СпособХраненияФайлов.Установить(НаборКонстант.СпособХраненияФайлов); Константы.ХранитьФайлыВТомахНаДиске.Установить(НаборКонстант.ХранитьФайлыВТомахНаДиске); УстановитьДоступность("НаборКонстант.СпособХраненияФайлов"); - ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры @@ -446,9 +448,16 @@ КонецЕсли; Если РеквизитПутьКДанным = "НаборКонстант.СинхронизироватьФайлы" - Или РеквизитПутьКДанным = "" Тогда + Или РеквизитПутьКДанным = "РазрешитьДоступКИнтернетСервисам" + Или РеквизитПутьКДанным = "" Тогда - Элементы.НастройкиСинхронизацииФайлов.Доступность = НаборКонстант.СинхронизироватьФайлы; + РазрешитьДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); + Элементы.НастройкиСинхронизацииФайлов.Доступность = НаборКонстант.СинхронизироватьФайлы + И РазрешитьДоступКИнтернетСервисам; + Элементы.СинхронизироватьФайлы1.Видимость = Не РазрешитьДоступКИнтернетСервисам; + Элементы.СинхронизироватьФайлы.Видимость = РазрешитьДоступКИнтернетСервисам; + Элементы.ГруппаКомментарийРазрешитьЗагрузкуИзИнтернетаВСинхронизации.Видимость = Не РазрешитьДоступКИнтернетСервисам; + КонецЕсли; КонецПроцедуры @@ -463,6 +472,7 @@ НаборКонстант.СпособХраненияФайлов = "ВИнформационнойБазеИТомахНаДиске"; Элементы.ГруппаУправлениеРасширениямиФайловВИБ.Доступность = НаборКонстант.СпособХраненияФайлов = "ВИнформационнойБазеИТомахНаДиске"; + Элементы.ГруппаДедупликация.Видимость = НаборКонстант.СпособХраненияФайлов <> "ВТомахНаДиске" И Не ДедупликацияВыполнена(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html index 69cb00375..f9b58968b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Help/ru.html @@ -5,21 +5,21 @@ TD { VERTICAL-ALIGN: top } </style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>В данной панели осуществляется контроль состояния приложения, резервное копирование и восстановление, обновление версии, оптимизация быстродействия.</p> +<p>В данной панели осуществляется контроль состояния приложения, резервное копирование и восстановление, обновление версии, оптимизация быстродействия.</p> <a name="СтандартныеПодсистемы.БазоваяФункциональность"> </a><a name="СтандартныеПодсистемы.ЗавершениеРаботыПользователей"> </a><a name="СтандартныеПодсистемы.УдалениеПомеченныхОбъектов"> </a> <table><tbody><tr><td> <li><a href="DataProcessor.ЖурналРегистрации/Help">Журнал регистрации</a></li></td> -<td>Просмотр событий и действий, которые происходили в регламентных заданиях или в процессе работы пользователей в приложении.</td></tr><tr><td> +<td>Просмотр событий и действий, которые происходили в регламентных заданиях или в процессе работы пользователей в приложении.</td></tr><tr><td> <li><a href="DataProcessor.АктивныеПользователи/Help">Активные пользователи</a></li></td> -<td>Список пользователей, которые сейчас работают в приложении.</td></tr><tr><td> +<td>Список пользователей, которые сейчас работают в приложении.</td></tr><tr><td> <li><a href="DataProcessor.БлокировкаРаботыПользователей/Help">Блокировка работы пользователей</a></li></td> -<td>Установка и снятие запрета работы пользователей с приложением. При установке запрета завершается работа всех активных пользователей (включая текущего).</td></tr><tr><td> +<td>Установка и снятие запрета работы пользователей с приложением. При установке запрета завершается работа всех активных пользователей (включая текущего).</td></tr><tr><td> <li><a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">Удаление помеченных объектов</a></li></td> -<td>Окончательное удаление тех объектов приложения, которым ранее была присвоена пометка на удаление.</td></tr></tbody></table><h3>Отчеты и обработки</h3> -<p>В данном подразделе администратору предоставляются возможности по получению отчетов о работе приложения, а также внешних дополнительных отчетов и обработок по администрированию приложения. </p> +<td>Окончательное удаление тех объектов приложения, которым ранее была присвоена пометка на удаление.</td></tr></tbody></table><h3>Отчеты и обработки</h3> +<p>В данном подразделе администратору предоставляются возможности по получению отчетов о работе приложения, а также внешних дополнительных отчетов и обработок по администрированию приложения. </p> <a name="СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"> </a> <table><tbody><tr><td> @@ -27,11 +27,11 @@ TD { <td><a name="СтандартныеПодсистемы.АнализЖурналаРегистрации"> </a> <p><a name="СтандартныеПодсистемы.АнализЖурналаРегистрации"></a><a href="Report.АнализЖурналаРегистрации/Help">Отчеты по журналу регистрации</a>. </p> -<p>Отчеты для администрирования приложения.</p></td></tr><tr><td> +<p>Отчеты для администрирования приложения.</p></td></tr><tr><td> <li><strong>Дополнительные</strong><strong> отчеты по администрированию</strong></li></td> -<td>Команды <a href="CommonForm.ДополнительныеОтчетыИОбработки/Help">дополнительных отчетов</a>, подключенных к приложению.</td></tr><tr><td> +<td>Команды <a href="CommonForm.ДополнительныеОтчетыИОбработки/Help">дополнительных отчетов</a>, подключенных к приложению.</td></tr><tr><td> <li><strong>Дополнительные </strong><strong>обработки по администрированию</strong></li></td> -<td>Команды <a href="CommonForm.ДополнительныеОтчетыИОбработки/Help">дополнительных обработок</a>, подключенных к приложению.</td></tr></tbody></table><h3>Регламентные операции</h3> +<td>Команды <a href="CommonForm.ДополнительныеОтчетыИОбработки/Help">дополнительных обработок</a>, подключенных к приложению.</td></tr></tbody></table><h3>Регламентные операции</h3> <p>В подразделе доступны команды по управлению регламентными операциями:</p> <a name="СтандартныеПодсистемы.РегламентныеЗадания"> </a> @@ -42,17 +42,17 @@ TD { <td>С помощью кнопки можно снять блокировку регламентных заданий по работе с внешними ресурсами. Она автоматически устанавливается, если изменилось местоположение ИБ в связи с копированием или восстановлением из резервной копии.</td></tr><tr><td><a name="СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами"> </a> <li><a name="СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами"></a><a href="DataProcessor.УправлениеИтогамиИАгрегатами/Help">Управление итогами и агрегатами</a></li></td> -<td>Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность приложения.</td></tr></tbody></table><h3>Резервное копирование и восстановление</h3> -<p>С целью уменьшения риска потери данных необходимо регулярно выполнять резервное копирование приложения. Частота создания резервных копий зависит от интенсивности ввода новых данных.</p> +<td>Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность приложения.</td></tr></tbody></table><h3>Резервное копирование и восстановление</h3> +<p>С целью уменьшения риска потери данных необходимо регулярно выполнять резервное копирование приложения. Частота создания резервных копий зависит от интенсивности ввода новых данных.</p> <a name="СтандартныеПодсистемы.РезервноеКопированиеИБ"></a> <table><tbody><tr><td> <li><a href="DataProcessor.РезервноеКопированиеИБ.Form.РезервноеКопированиеДанных/Help">Создание резервной копии</a></li></td> -<td>Выполнение резервного копирования приложения: прямо сейчас, через некоторое время или при завершении работы.</td></tr><tr><td> +<td>Выполнение резервного копирования приложения: прямо сейчас, через некоторое время или при завершении работы.</td></tr><tr><td> <li><a href="DataProcessor.НастройкаРезервногоКопированияИБ/Help">Настройка резервного копирования</a></li></td> <td>Настройка автоматического резервного копирования по расписанию, или отключение контроля резервного копирования, если оно выполняется сторонними средствами.</td></tr><tr><td> <li><a href="DataProcessor.РезервноеКопированиеИБ.Form.ВосстановлениеДанныхИзРезервнойКопии/Help">Восстановление из резервной копии</a></li></td> -<td>Восстановление приложения из резервной копии.</td></tr></tbody></table><h3>Корректировка данных</h3> -<p>В приложении предусмотрены различные возможности поддерживать списки в порядке: изменять данные, отобранные по определенным признакам; устранять повторяющиеся элементы автоматически, при этом приложение также исправляет ссылки на удаленные элементы.</p> +<td>Восстановление приложения из резервной копии.</td></tr></tbody></table><h3>Корректировка данных</h3> +<p>В приложении предусмотрены различные возможности поддерживать списки в порядке: изменять данные, отобранные по определенным признакам; устранять повторяющиеся элементы автоматически, при этом приложение также исправляет ссылки на удаленные элементы.</p> <p></p> <a href="Catalog.ПравилаПроверкиУчета/Help"> </a><a name="СтандартныеПодсистемы.КонтрольВеденияУчета"></a><a name="СтандартныеПодсистемы.КонтрольВеденияУчета"></a> @@ -72,30 +72,30 @@ TD { <p></p><a name="СтандартныеПодсистемы.ОбновлениеВерсииИБ"></a> <table><tbody><tr><td> <li><a href="DataProcessor.УстановкаОбновлений/Help">Установка обновлений и исправлений (патчей</a>)</li></td> -<td>Переход к установке обновлений приложения или исправлений (патчей).</td> +<td>Переход к установке обновлений приложения или исправлений (патчей).</td> </tr><tr><td> <li><a href="CommonForm.УстановленныеИсправления/Help">Установленные исправления (патчи)</a></li></td> -<td>Переход к просмотру списка установленных в приложении исправлений (патчей).</td></tr><tr><td> +<td>Переход к просмотру списка установленных в приложении исправлений (патчей).</td></tr><tr><td> <li><a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений приложения</a></li></td> -<td>Просмотр списка изменений в установленной версии приложения и рекомендаций по обновлению приложения.</td></tr><tr><td> +<td>Просмотр списка изменений в установленной версии приложения и рекомендаций по обновлению приложения.</td></tr><tr><td> <li><a href="DataProcessor.РезультатыОбновленияПрограммы.Form.РезультатыОбновленияПрограммы/Help">Результаты обновления и дополнительная обработка данных</a></li></td> -<td>Сведения о ходе обновления версии приложения, отложенное выполнение дополнительных процедур обработки данных.</td></tr><tr><td> +<td>Сведения о ходе обновления версии приложения, отложенное выполнение дополнительных процедур обработки данных.</td></tr><tr><td> <li><strong>Детализировать ход обновления в журнале регистрации</strong></li></td> -<td>При включенном флажке в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> записываются выполняемые обработчики обновления с указанием времени выполнения.</td></tr><tr><td> +<td>При включенном флажке в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> записываются выполняемые обработчики обновления с указанием времени выполнения.</td></tr><tr><td> <li><a href="DataProcessor.РезультатыОбновленияПрограммы.Form.ОчисткаУстаревшихДанных/Help">Очистка устаревших данных</a></li></td> <td>Переход к очистке данных вручную, когда при реструктуризации произошла ошибка "Записи регистра стали неуникальными".</td></tr></tbody></table><h3>Оценка производительности</h3> -<p>В приложении предусмотрены встроенные средства для сбора и анализа данных о производительности ее работы по APDEX. В подразделе можно настроить параметры:</p> +<p>В приложении предусмотрены встроенные средства для сбора и анализа данных о производительности ее работы по APDEX. В подразделе можно настроить параметры:</p> <p></p> <table><tbody><tr><td> <li><strong>Оценка производительности</strong></li></td> -<td>Флажок замеров интегральной производительности приложения по методике APDEX.</td></tr><tr><td><a name="СтандартныеПодсистемы.ОценкаПроизводительности"> +<td>Флажок замеров интегральной производительности приложения по методике APDEX.</td></tr><tr><td><a name="СтандартныеПодсистемы.ОценкаПроизводительности"> </a> <li><a name="СтандартныеПодсистемы.ОценкаПроизводительности"></a><a href="Catalog.ПрофилиКлючевыхОпераций/Help">Профили ключевых операций</a></li></td> <td>Переход к настройке профилей ключевых операций.</td></tr><tr><td> -<li><a href="DataProcessor.ОценкаПроизводительности.Form.АвтоматическийЭкспортЗамеровПроизводительности/Help">Настройки оценки производительности</a></li></td> +<li><a href="DataProcessor.ОценкаПроизводительности.Form.АвтоматическийЭкспортЗамеровПроизводительности/Help">Настройки оценки производительности</a></li></td> <td>Настройки параметров оценки производительности.</td></tr><tr><td> <li><a href="DataProcessor.ОценкаПроизводительности.Form.ЭкспортЗамеровПроизводительности/Help">Экспорт замеров производительности</a></li></td> <td>Экспорт замеров производительности за произвольный период.</td></tr><tr><td> -<li><a href="DataProcessor.ОценкаПроизводительности.Form.ИмпортЗамеровПроизводительности/Help">Импорт замеров производительности</a></li></td> +<li><a href="DataProcessor.ОценкаПроизводительности.Form.ИмпортЗамеровПроизводительности/Help">Импорт замеров производительности</a></li></td> <td>Импорт замеров производительности за произвольный период.</td></tr><tr></tr></tbody></table><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/Обслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl index 3061a201c..d3015aae2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Обслуживание/Module.bsl @@ -116,6 +116,10 @@ ОбновитьНастройкиРезервногоКопирования(); ИначеЕсли ИмяСобытия = "РазрешенаРаботаСВнешнимиРесурсами" Тогда Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = Ложь; + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + ИначеЕсли ИмяСобытия = "ЗапрещенаРаботаСВнешнимиРесурсами" Тогда + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = Истина; + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); КонецЕсли; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОблачныйАрхив20") Тогда @@ -259,8 +263,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, НеобходимоОбновлятьИнтерфейс = Истина) @@ -289,8 +292,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -303,8 +307,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Процедура УстановитьПриоритетОтложеннойОбработки(ИмяЭлемента) @@ -390,4 +395,6 @@ МодульРегламентныеЗаданияСервер.РазблокироватьРаботуСВнешнимиРесурсами(); КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form index 53f5c37c4..c39fbf99a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Form.form @@ -3127,6 +3127,189 @@ <currentRowUse>Auto</currentRowUse> </extInfo> </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписи</name> + <id>2281</id> + <items xsi:type="form:FormField"> + <name>КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписи</name> + <id>2278</id> + <title> + <key>ru</key> + <value>Разрешить доступ к Интернет-сервисам</value> + + true + true + + true + + + КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписи + + Right + ShowBottom + + OnChange + Подключаемый_ПриИзмененииРеквизита + + + КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписиРасширеннаяПодсказка + 2280 + + <key>ru</key> + <value>Загружать и устанавливать списки отзыва и свежие рекомендации по устранению проблем из интернета автоматически. </value> + + Label + 86 + true + false + + Left + + + + КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписиКонтекстноеМеню + 2279 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаКомментарийРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписи + 2283 + + ДекорацияРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписи + 2285 + true + true + + true + + + ДекорацияРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписиРасширеннаяПодсказка + 2287 + Label + true + true + + Left + + + + ДекорацияРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписиКонтекстноеМеню + 2286 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписи + 2288 + + <key>ru</key> + <value>Для разблокировки настроек необходимо включить доступ к Интернет-сервисам "Интернет-поддержка и сервисы" — "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписиРасширеннаяПодсказка + 2290 + Label + true + true + + Left + + + + КомментарийРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписиКонтекстноеМеню + 2289 + true + + Label + 86 + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Комментарий разрешить загрузку из интернета в электронной подписи</value> + + 86 + + ГруппаКомментарийРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписиРасширеннаяПодсказка + 2284 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Разрешить загрузку из интернета в электронной подписи</value> + + 86 + + ГруппаРазрешитьЗагрузкуИзИнтернетаВЭлектроннойПодписиРасширеннаяПодсказка + 2282 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + true true @@ -3350,7 +3533,7 @@ ru - Открыть рабочее место для удаления помеченных + Безвозвратно удалить или восстановить объекты, помеченные на удаление. ShowBottom @@ -3919,19 +4102,6 @@ true - - ДоступнаУсовершенствованнаяПодпись - 2 - - Boolean - - - true - - - true - - КонстантаТипПодписиКриптографииПоУмолчанию @@ -4088,6 +4258,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>КонстантаРазрешитьДоступКИнтернетСервисамЭлектроннойПодписи</name> + <title> + <key>ru</key> + <value>Разрешить доступ к Интернет-сервисам</value> + + 19 + + Boolean + + + true + + + true + + ИспользованиеПрофилейБезопасности diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html index 7e19475f9..b0f654d59 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Help/ru.html @@ -5,74 +5,74 @@ TD { VERTICAL-ALIGN: top } </style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body class=""> -<p>В данной панели осуществляется настройка основных параметров приложения.</p> -<ul><li><strong>Заголовок приложения</strong> - введите текст, который будет отображаться в заголовке окна приложения. +<p>В данной панели осуществляется настройка основных параметров приложения.</p> +<ul><li><strong>Заголовок приложения</strong> - введите текст, который будет отображаться в заголовке окна приложения. </li></ul><h3>Региональные настройки</h3> <div>С помощью ссылки <b>Региональные настройки</b> можно указать:</div> -<ul><li><strong>Часовой пояс</strong> - часовой пояс, в котором ведется учет в приложении. Все даты документов и других данных в приложении хранятся в этом часовом поясе. +<ul><li><strong>Часовой пояс</strong> - часовой пояс, в котором ведется учет в приложении. Все даты документов и других данных в приложении хранятся в этом часовом поясе. </li> -<li><strong>Время текущего сеанса</strong> - с помощью этой команды можно узнать, насколько время клиента отличается от времени сервера с поправкой на часовой пояс.</li></ul><h3>Публикация информационной базы</h3> +<li><strong>Время текущего сеанса</strong> - с помощью этой команды можно узнать, насколько время клиента отличается от времени сервера с поправкой на часовой пояс.</li></ul><h3>Публикация информационной базы</h3> <ul><li> -<div>Настройки приложения <strong>Адрес в интернете</strong> и <strong>Локальный адрес</strong> предназначены для формирования ссылок на объекты информационной базы в зависимости от вида подключения пользователей к информационной базе. </div> +<div>Настройки приложения <strong>Адрес в интернете</strong> и <strong>Локальный адрес</strong> предназначены для формирования ссылок на объекты информационной базы в зависимости от вида подключения пользователей к информационной базе. </div> </li> <li> <div>Например, если такой адрес включить в рассылку писем, то из письма за одно нажатие можно перейти к форме объекта в самом приложении.</div></li></ul><h3>Параметры серверной информационной базы</h3> <ul><a name="СтандартныеПодсистемы.ПолучениеФайловИзИнтернета"> </a> -<li><a name="СтандартныеПодсистемы.ПолучениеФайловИзИнтернета"></a><a href="CommonForm.ПараметрыПроксиСервера/Help">Параметры доступа в Интернет</a> - настройки параметров прокси-сервера на сервере 1С:Предприятие. +<li><a name="СтандартныеПодсистемы.ПолучениеФайловИзИнтернета"></a><a href="CommonForm.ПараметрыПроксиСервера/Help">Параметры доступа в Интернет</a> - настройки параметров прокси-сервера на сервере 1С:Предприятие. </li> -<li><a href="DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help">Использование профилей безопасности</a> - использование профилей безопасности для контроля за использованием приложением внешних (относительно кластера серверов 1С:Предприятия) ресурсов.</li></ul><a name="СтандартныеПодсистемы.КонтактнаяИнформация"> +<li><a href="DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help">Использование профилей безопасности</a> - использование профилей безопасности для контроля за использованием приложением внешних (относительно кластера серверов 1С:Предприятия) ресурсов.</li></ul><a name="СтандартныеПодсистемы.КонтактнаяИнформация"> <h3>Контактная информация</h3> </a> <ul><a name="СтандартныеПодсистемы.КонтактнаяИнформация"></a> -<li><a name="СтандартныеПодсистемы.КонтактнаяИнформация"></a><a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a> - добавление и настройка видов контактной информации различных объектов приложения, например, партнеров, контрагентов, сотрудников и т.д.</li></ul><h3>Свойства</h3> -<ul><li><strong>Свойства</strong> - включите флажок, для того чтобы использовать дополнительные свойства для справочников и документов.</li> -<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Дополнительные реквизиты</a> - настройка состава дополнительных реквизитов для справочников и документов. +<li><a name="СтандартныеПодсистемы.КонтактнаяИнформация"></a><a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a> - добавление и настройка видов контактной информации различных объектов приложения, например, партнеров, контрагентов, сотрудников и т.д.</li></ul><h3>Свойства</h3> +<ul><li><strong>Свойства</strong> - включите флажок, для того чтобы использовать дополнительные свойства для справочников и документов.</li> +<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Дополнительные реквизиты</a> - настройка состава дополнительных реквизитов для справочников и документов. </li> -<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Дополнительные сведения</a> - настройка состава дополнительных сведений для справочников и документов.</li> -<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Метки</a> - настройка состава меток для справочников и документов.</li></ul><h3>История изменений</h3> +<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Дополнительные сведения</a> - настройка состава дополнительных сведений для справочников и документов.</li> +<li><a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">Метки</a> - настройка состава меток для справочников и документов.</li></ul><h3>История изменений</h3> <p>Приложение позволяет вести историю изменения списков, просматривать любую версию объекта или сравнивать любые версии объекта между собой.</p> -<ul><li><strong>Хранить историю изменений - </strong>Включите флажок для ведения истории изменения объектов приложения. После этого становится доступной команда: +<ul><li><strong>Хранить историю изменений - </strong>Включите флажок для ведения истории изменения объектов приложения. После этого становится доступной команда: </li> -<li><a name="СтандартныеПодсистемы.ВерсионированиеОбъектов"></a><a href="InformationRegister.НастройкиВерсионированияОбъектов/Help">Настроить</a> - Настройка хранения и очистка версий документов и справочников.</li></ul><a name="СтандартныеПодсистемы.ПолнотекстовыйПоиск"> +<li><a name="СтандартныеПодсистемы.ВерсионированиеОбъектов"></a><a href="InformationRegister.НастройкиВерсионированияОбъектов/Help">Настроить</a> - Настройка хранения и очистка версий документов и справочников.</li></ul><a name="СтандартныеПодсистемы.ПолнотекстовыйПоиск"> <h3>Поиск данных</h3> </a> <ul><a name="СтандартныеПодсистемы.ПолнотекстовыйПоиск"></a> -<li><a name="СтандартныеПодсистемы.ПолнотекстовыйПоиск"></a><a href="DataProcessor.ПолнотекстовыйПоискВДанных.Form.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help">Полнотекстовый поиск данных</a> - Включите флажок, после этого становится доступной команда: +<li><a name="СтандартныеПодсистемы.ПолнотекстовыйПоиск"></a><a href="DataProcessor.ПолнотекстовыйПоискВДанных.Form.УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help">Полнотекстовый поиск данных</a> - Включите флажок, после этого становится доступной команда: </li> <li><strong>Настроить </strong>- Настройка полнотекстового поиска и поддержка индекса полнотекстового поиска в актуальном состоянии.</li></ul><a name="СтандартныеПодсистемы.ЭлектроннаяПодпись"></a> <h3>Электронная подпись и шифрование</h3> -<ul><li><strong>Электронная подпись - </strong>включите флажок, для того чтобы разрешить использовать электронные подписи и проверять отсутствие изменений файла с момента формирования электронной подписи. +<ul><li><strong>Электронная подпись - </strong>включите флажок, для того чтобы разрешить использовать электронные подписи и проверять отсутствие изменений файла с момента формирования электронной подписи. </li> <li><strong>Шифрование</strong> - включите флажок, для того чтобы разрешить шифрование файлов. </li> -<li><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Сертификаты и приложения электронной подписи и шифрования</a> - переход к настройке параметров подключения средств криптографии: электронной подписи и шифрования. </li> +<li><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Сертификаты и приложения электронной подписи и шифрования</a> - переход к настройке параметров подключения средств криптографии: электронной подписи и шифрования. </li> <li><b>Разрешенные неаккредитованные УЦ</b> - переходит в список ОГРН удостоверяющих центров, потерявших аккредитацию, но подписание сертификатами которых разрешено, при проверке подписи она будет считаться верной. Список вносится вручную, с новой строки или через запятую.</li> -<li><b>Тип подписи для документов</b> - с помощью переключателя выберите, какой тип электронной подписи в зависимости от срока действия будет использоваться в приложении:</li> +<li><b>Тип подписи для документов</b> - с помощью переключателя выберите, какой тип электронной подписи в зависимости от срока действия будет использоваться в приложении:</li> <ul><li><b>Базовая подпись (CAdES-BES)</b> - не содержит метку времени и становится недействительной после окончания срока действия сертификата подписанта (обычно в течение 1 года) и после отзыва сертификата;</li> -<li><b>Подпись с меткой доверенного времени (CAdES-T)</b> - действует после окончания срока действия сертификата подписанта, пока действует сертификат подписи метки времени (обычно до 15 лет). Если сертификат подписанта отозван позднее метки времени подписи, подпись останется достоверной. Формат <b>CAdES-T</b> рекомендуется к использованию при подписании документов, которые должны сохранять юридическую значимость в течение нескольких лет. </li> -<li><b>Архивная подпись (CAdES-A)</b> - содержит полный набор доказательств подлинности, в том числе цепочку сертификатов и может автоматически продлеваться с помощью добавления новых архивных меток времени (каждые условные 15 лет). Используется для архивного хранения электронных подписей. Такая подпись может иметь большой размер файла в зависимости от свойств сертификатов, так как может включать в себя списки отзыва размером в десятки мегабайт, увеличивающих размер файла подписи в 1000 раз, поэтому не рекомендуется использовать при подписании оперативных документов.</li></ul></ul><ul><li><b>Адреса серверов меток времени</b> - предлагаются приложением по умолчанию, предоставляет поставщик услуг криптографии.</li> +<li><b>Подпись с меткой доверенного времени (CAdES-T)</b> - действует после окончания срока действия сертификата подписанта, пока действует сертификат подписи метки времени (обычно до 15 лет). Если сертификат подписанта отозван позднее метки времени подписи, подпись останется достоверной. Формат <b>CAdES-T</b> рекомендуется к использованию при подписании документов, которые должны сохранять юридическую значимость в течение нескольких лет. </li> +<li><b>Архивная подпись (CAdES-A)</b> - содержит полный набор доказательств подлинности, в том числе цепочку сертификатов и может автоматически продлеваться с помощью добавления новых архивных меток времени (каждые условные 15 лет). Используется для архивного хранения электронных подписей. Такая подпись может иметь большой размер файла в зависимости от свойств сертификатов, так как может включать в себя списки отзыва размером в десятки мегабайт, увеличивающих размер файла подписи в 1000 раз, поэтому не рекомендуется использовать при подписании оперативных документов.</li></ul></ul><ul><li><b>Адреса серверов меток времени</b> - предлагаются приложением по умолчанию, предоставляет поставщик услуг криптографии.</li> <li><b>Усовершенствовать подписи</b> - выберите действие с подписями, добавленными ранее:</li> <ul><li><b>Не усовершенствовать</b> - не будет предпринято никаких действий;</li> -<li><b>Автоматически (с помощью регламентного задания)</b> - в списке регламентных заданий можно будет посмотреть и проверить действия приложения;</li> -<li><b>В интерфейсе администратора</b> - усовершенствовать вручную с помощью различных команд и <a href="Report.ПродлениеСрокаДействияЭлектронныхПодписей/Help">отчета</a> <b>Продление срока действия электронных подписей</b>.</li></ul><li><b>Начиная с даты создания подписи</b> - можно усовершенствовать подписи, созданные начиная с указанной даты. Ее необходимо написать в специальном поле.</li> -<li><b>Автоматически продлевать архивные подписи </b>- будут добавляться новые метки времени в архивные подписи <b>(CAdES-A)</b> за месяц до окончания действия сертификата последней метки времени.</li> +<li><b>Автоматически (с помощью регламентного задания)</b> - в списке регламентных заданий можно будет посмотреть и проверить действия приложения;</li> +<li><b>В интерфейсе администратора</b> - усовершенствовать вручную с помощью различных команд и <a href="Report.ПродлениеСрокаДействияЭлектронныхПодписей/Help">отчета</a> <b>Продление срока действия электронных подписей</b>.</li></ul><li><b>Начиная с даты создания подписи</b> - можно усовершенствовать подписи, созданные начиная с указанной даты. Ее необходимо написать в специальном поле.</li> +<li><b>Автоматически продлевать архивные подписи </b>- будут добавляться новые метки времени в архивные подписи <b>(CAdES-A)</b> за месяц до окончания действия сертификата последней метки времени.</li> <a name="СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS"></a> -<li><strong>Проверять подписи и сертификаты на сервере</strong> - В этом случае проверка электронной подписи и сертификата будет происходить на сервере или веб-сервере, что позволяет не устанавливать приложение на каждом компьютере, где требуются только такие операции.</li> -<li><b>Подписывать и шифровать на сервере</b> - позволяет не устанавливать приложение криптографии на компьютер пользователя для подписания, шифрования и расшифровки. В этом случае необходимо установить приложение криптографии и сертификат с закрытым ключом на компьютере, где работает сервер 1С:Предприятия или веб-сервер. Для серверов с Linux необходимо заполнить пути к приложениям криптографии. Сделать это можно в карточке приложения в списке <b>Сертификаты и приложения электронной подписи и шифрования</b>.</li> +<li><strong>Проверять подписи и сертификаты на сервере</strong> - В этом случае проверка электронной подписи и сертификата будет происходить на сервере или веб-сервере, что позволяет не устанавливать приложение на каждом компьютере, где требуются только такие операции.</li> +<li><b>Подписывать и шифровать на сервере</b> - позволяет не устанавливать приложение криптографии на компьютер пользователя для подписания, шифрования и расшифровки. В этом случае необходимо установить приложение криптографии и сертификат с закрытым ключом на компьютере, где работает сервер 1С:Предприятия или веб-сервер. Для серверов с Linux необходимо заполнить пути к приложениям криптографии. Сделать это можно в карточке приложения в списке <b>Сертификаты и приложения электронной подписи и шифрования</b>.</li> <li><b>Сервис подписи DSS</b> - включите флажок, для того чтобы разрешить использовать электронную подпись сервиса DSS и для операций криптографии сервиса DSS. После этого в списке <b>Настройки электронной подписи и шифрования</b> можно добавить учетные записи DSS, а также становятся доступными команды:</li> <li><a href="DataProcessor.УправлениеПодключениемDSS.Form.СписокЭкземпляровСервераDSS/Help">Серверы DSS</a> - переход к настройке серверов DSS.</li> <li><a href="DataProcessor.УправлениеПодключениемDSS.Form.СписокУчетныхЗаписей/Help">Учетные записи DSS</a> - настройка учетных записей DSS, используемых для криптоопераций.</li></ul><h3>Удаление помеченных объектов</h3> <div> <ul><li><b>Автоматически удалять помеченные</b> - включите флажок, после этого становится доступной ссылка:</li> -<li><b>Настроить расписание</b> - перейдите по ссылке, для того чтобы настроить <a href="v8help://mngbase/jobschedule.lf">расписание</a> автоматического удаления помеченных объектов с помощью регламентного задания;</li> +<li><b>Настроить расписание</b> - перейдите по ссылке, для того чтобы настроить <a href="v8help://mngbase/jobschedule.lf">расписание</a> автоматического удаления помеченных объектов с помощью регламентного задания;</li> <a name="СтандартныеПодсистемы.УдалениеПомеченныхОбъектов"> </a> -<li><a name="СтандартныеПодсистемы.УдалениеПомеченныхОбъектов"></a><a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">Посмотреть помеченные на удаление</a> - переход к окончательному удалению тех объектов в приложении, которым была присвоена пометка на удаление. Можно также настроить расписание автоматического удаления помеченных объектов.</li></ul><h3>Производительность</h3></div> +<li><a name="СтандартныеПодсистемы.УдалениеПомеченныхОбъектов"></a><a href="DataProcessor.УдалениеПомеченныхОбъектов/Help">Посмотреть помеченные на удаление</a> - переход к окончательному удалению тех объектов в приложении, которым была присвоена пометка на удаление. Можно также настроить расписание автоматического удаления помеченных объектов.</li></ul><h3>Производительность</h3></div> <div> -<ul><li>В клиент-серверном варианте работы приложения можно ускорить некоторые длительные операции, настроив их выполнение в несколько потоков: например, загрузку адресного классификатора. Для этого можно установить максимальное количество одновременно работающих потоков. </li> +<ul><li>В клиент-серверном варианте работы приложения можно ускорить некоторые длительные операции, настроив их выполнение в несколько потоков: например, загрузку адресного классификатора. Для этого можно установить максимальное количество одновременно работающих потоков. </li> <ul><li>Рекомендуемое значение:</li> <ul><li>для штатной работы до 50-75% от количества ядер, доступных кластеру серверов;</li> -<li>для форсированного выполнения в период минимальной активности пользователей - равно количеству ядер, доступных кластеру серверов.</li></ul></ul><li>В клиент-серверном варианте работы приложения необходимо ввести сетевой путь к <b>Каталогу временных файлов</b>. Это обеспечит доступ со всех серверов кластера к этому каталогу, например, для многопоточной загрузки адресного классификатора.</li></ul></div> +<li>для форсированного выполнения в период минимальной активности пользователей - равно количеству ядер, доступных кластеру серверов.</li></ul></ul><li>В клиент-серверном варианте работы приложения необходимо ввести сетевой путь к <b>Каталогу временных файлов</b>. Это обеспечит доступ со всех серверов кластера к этому каталогу, например, для многопоточной загрузки адресного классификатора.</li></ul></div> <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/ОбщиеНастройки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl index 18f515690..f0db82d9b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ОбщиеНастройки/Module.bsl @@ -38,13 +38,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - Если ОбщегоНазначения.РазделениеВключено() Тогда - Элементы.СоздаватьЭлектронныеПодписиНаСервере.Видимость = Ложь; - КонецЕсли; - + Элементы.СоздаватьЭлектронныеПодписиНаСервере.Видимость = Не ОбщегоНазначения.РазделениеВключено(); + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); - ДоступнаУсовершенствованнаяПодпись = МодульЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись(); - Элементы.ГруппаУсовершенствованнаяПодпись.Видимость = ДоступнаУсовершенствованнаяПодпись; Если ОбщегоНазначения.ИнформационнаяБазаФайловая() И Не ОбщегоНазначения.КлиентПодключенЧерезВебСервер() Тогда @@ -66,6 +62,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда ЭтоАдминистратор = Пользователи.ЭтоПолноправныйПользователь(, Истина); Элементы.ИспользоватьСервисОблачнойПодписи.Видимость = ЭтоАдминистратор; + Элементы.ИспользоватьСервисОблачнойПодписи.Доступность = ЭтоАдминистратор И МодульЭлектроннаяПодпись.РазрешенДоступКИнтернетСервисам(); Элементы.ИспользоватьСервисОблачнойПодписи.РасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( "Разрешает использовать для подписания сервисы подписи DSS. Использование сервиса для формирования квалифицированной электронной подписи требует <a href = ""НастройкиDSS"">дополнительных настроек</a>.") Иначе @@ -96,12 +93,14 @@ КонецЕсли; Если (ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") ) - И Пользователи.ЭтоПолноправныйПользователь(,Истина) Тогда + И Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда МодульУдалениеПомеченныхОбъектов = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектов"); РежимРегламентногоЗадания = МодульУдалениеПомеченныхОбъектов.РежимУдалятьПоРасписанию(); УдалениеПомеченныхИспользование = РежимРегламентногоЗадания.Использование; Элементы.НастроитьРасписание.Доступность = УдалениеПомеченныхИспользование; + Элементы.ГруппаРегламентноеУдалениеПомеченных.Видимость = Не ОбщегоНазначения.РазделениеВключено(); + Иначе Элементы.ГруппаУдалениеПомеченных.Видимость = Ложь; КонецЕсли; @@ -146,7 +145,6 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент"); МодульВерсионированиеОбъектовКлиент.ОбработкаОповещенияИзмененияФлажкаХранитьИсторию( @@ -160,6 +158,10 @@ ИмяСобытия, ИспользоватьПолнотекстовыйПоиск); КонецЕсли; + + Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "РазрешитьДоступКИнтернетСервисам" Тогда + УстановитьДоступность("РазрешитьДоступКИнтернетСервисам"); + КонецЕсли; КонецПроцедуры @@ -431,6 +433,7 @@ КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -604,8 +607,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -682,8 +684,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -696,8 +699,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) @@ -780,20 +784,6 @@ "Видимость", Не ДоступностьНастройкиПроксиНаСервере); КонецЕсли; - Если (РеквизитПутьКДанным = "НаборКонстант.ИспользоватьЭлектронныеПодписи" - ИЛИ РеквизитПутьКДанным = "НаборКонстант.ИспользоватьШифрование" - ИЛИ РеквизитПутьКДанным = "НаборКонстант.ИспользоватьСервисDSS" - ИЛИ РеквизитПутьКДанным = "") - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда - - ДоступностьОблачнойПодписи = (НаборКонстант.ИспользоватьЭлектронныеПодписи ИЛИ НаборКонстант.ИспользоватьШифрование) - И (НаборКонстант.ИспользоватьСервисDSS); - - Элементы.ОбработкаУправлениеПодключениемDSSСерверыОблачнойПодписи.Доступность = ДоступностьОблачнойПодписи; - Элементы.ОбработкаУправлениеПодключениемDSSУчетныеЗаписиОблачнойПодписи.Доступность = ДоступностьОблачнойПодписи; - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -824,6 +814,7 @@ Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Ложь; КонецЕсли; КонецЕсли; + УстановитьДоступность(ИмяКонстанты); Иначе Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Ложь; КонецЕсли; @@ -902,3 +893,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html index 870e845f6..f47f42c66 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Help/ru.html @@ -7,42 +7,42 @@ TD { </style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>В данной панели осуществляется настройка электронной почты, заметок, напоминаний и бизнес-процессов. </p> <h3>Почта</h3> -<p>В приложении предусмотрена возможность документирования взаимодействий с внешними контактами, а также между пользователями приложения.</p> +<p>В приложении предусмотрена возможность документирования взаимодействий с внешними контактами, а также между пользователями приложения.</p> <ul><a name="СтандартныеПодсистемы.Взаимодействия"></a> -<li><strong>Почтовый клиент</strong> - включите флажок, для того чтобы использовать возможности встроенного в приложение почтового клиента для <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">взаимодействий</a> с помощью электронных писем (e-mail). Использование всех типов взаимодействий без почтового клиента невозможно. После включения становятся доступными команды для настройки взаимодействий: -<ul><li><strong>Исходящие письма в формате HTML</strong> - включите флажок, для того чтобы редактировать исходящие письма в формате HTML. +<li><strong>Почтовый клиент</strong> - включите флажок, для того чтобы использовать возможности встроенного в приложение почтового клиента для <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">взаимодействий</a> с помощью электронных писем (e-mail). Использование всех типов взаимодействий без почтового клиента невозможно. После включения становятся доступными команды для настройки взаимодействий: +<ul><li><strong>Исходящие письма в формате HTML</strong> - включите флажок, для того чтобы редактировать исходящие письма в формате HTML. </li> -<li><strong>Звонки, SMS, встречи и запланированные взаимодействия</strong> - включите флажок, для того чтобы регистрировать в приложении звонки, встречи, сообщения SMS и запланированные взаимодействия. +<li><strong>Звонки, SMS, встречи и запланированные взаимодействия</strong> - включите флажок, для того чтобы регистрировать в приложении звонки, встречи, сообщения SMS и запланированные взаимодействия. </li> -<li><strong>Признаки "Рассмотрено"</strong> и <strong>"На контроле"</strong> - включите флажок, для того чтобы можно было ставить отметки о рассмотрении <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">входящих писем</a>, <a href="Document.Встреча.Form.ФормаДокумента/Help">встреч</a>, <a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">телефонных звонков</a> и <a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">запланированных взаимодействий</a>, а также для постановки на контроль <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящего письма</a> и <a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">сообщения SMS</a>. Этот флажок полезно использовать для организации совместной работы в приложении. +<li><strong>Признаки "Рассмотрено"</strong> и <strong>"На контроле"</strong> - включите флажок, для того чтобы можно было ставить отметки о рассмотрении <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">входящих писем</a>, <a href="Document.Встреча.Form.ФормаДокумента/Help">встреч</a>, <a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">телефонных звонков</a> и <a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">запланированных взаимодействий</a>, а также для постановки на контроль <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящего письма</a> и <a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">сообщения SMS</a>. Этот флажок полезно использовать для организации совместной работы в приложении. </li> <li><b>Запретить отображение небезопасного содержимого в письмах</b> - включите флажок, для того чтобы при наличии небезопасных элементов в письмах не предлагать их отображение. <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Входящие письма</a> могут содержать элементы, позволяющие отправителю скрытно отслеживать действия с письмом, в частности, время просмотра и некоторые параметры устройства, на котором письмо было прочитано. К небезопасным элементам относятся загружаемые из Интернета картинки или встроенные скрипты. В целях безопасности такие элементы автоматически отключаются при просмотре письма.</li></ul><a name="СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"></a> </li> -<li><a name="СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"></a><a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">Настройка почты для рассылок уведомлений</a> - переход к настройке электронной почты для рассылки различных уведомлений из приложения. +<li><a name="СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"></a><a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">Настройка почты для рассылок уведомлений</a> - переход к настройке электронной почты для рассылки различных уведомлений из приложения. </li> -<li><a href="Catalog.УчетныеЗаписиЭлектроннойПочты/Help">Настройки почты</a> - администрирование всех учетных записей электронной почты. </li></ul><h3>Отправка SMS<a name="СтандартныеПодсистемы.ОтправкаSMS"></a></h3> -<ul><li><a href="CommonForm.НастройкаОтправкиSMS/Help">Настройка отправки SMS</a> - переход к настройке параметров отправки SMS-сообщений из приложения.</li></ul><h3>Заметки, напоминания, анкетирование, шаблоны сообщений</h3> -<ul><li><strong>Заметки</strong> - включите этот флажок, для того чтобы можно было использовать <a name="СтандартныеПодсистемы.ЗаметкиПользователя"></a><a href="Catalog.Заметки/Help">заметки</a> - произвольную текстовую информацию, для которой не получается подобрать какого-либо более подходящего справочника или документа, и которая больше никому не должна быть доступна. Заметки могут быть произвольными или по предмету, ссылаясь, например, на элемент справочника, документ, или другой объект приложения. +<li><a href="Catalog.УчетныеЗаписиЭлектроннойПочты/Help">Настройки почты</a> - администрирование всех учетных записей электронной почты. </li></ul><h3>Отправка SMS<a name="СтандартныеПодсистемы.ОтправкаSMS"></a></h3> +<ul><li><a href="CommonForm.НастройкаОтправкиSMS/Help">Настройка отправки SMS</a> - переход к настройке параметров отправки SMS-сообщений из приложения.</li></ul><h3>Заметки, напоминания, анкетирование, шаблоны сообщений</h3> +<ul><li><strong>Заметки</strong> - включите этот флажок, для того чтобы можно было использовать <a name="СтандартныеПодсистемы.ЗаметкиПользователя"></a><a href="Catalog.Заметки/Help">заметки</a> - произвольную текстовую информацию, для которой не получается подобрать какого-либо более подходящего справочника или документа, и которая больше никому не должна быть доступна. Заметки могут быть произвольными или по предмету, ссылаясь, например, на элемент справочника, документ, или другой объект приложения. </li> -<li><strong>Напоминания</strong> - включите этот флажок, для того чтобы можно было вводить <a name="СтандартныеПодсистемы.НапоминанияПользователя"></a><a href="InformationRegister.НапоминанияПользователя/Help">напоминания</a>, которые срабатывают в назначенное время. Укажите время и предмет, по поводу которого в приложении в указанное время будет выведен список напоминаний. Напоминания могут быть произвольными или по предмету, ссылаясь, например, на элемент справочника, документ, или другой объект приложения. +<li><strong>Напоминания</strong> - включите этот флажок, для того чтобы можно было вводить <a name="СтандартныеПодсистемы.НапоминанияПользователя"></a><a href="InformationRegister.НапоминанияПользователя/Help">напоминания</a>, которые срабатывают в назначенное время. Укажите время и предмет, по поводу которого в приложении в указанное время будет выведен список напоминаний. Напоминания могут быть произвольными или по предмету, ссылаясь, например, на элемент справочника, документ, или другой объект приложения. </li> -<li><strong>Анкетирование</strong> - включите этот флажок, для того чтобы стал доступным соответствующий раздел приложения, в котором можно готовить опросы, составлять <a name="СтандартныеПодсистемы.Анкетирование"></a><a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">анкеты</a>, проводить опросы среди респондентов, а также и анализировать результаты опросов. +<li><strong>Анкетирование</strong> - включите этот флажок, для того чтобы стал доступным соответствующий раздел приложения, в котором можно готовить опросы, составлять <a name="СтандартныеПодсистемы.Анкетирование"></a><a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">анкеты</a>, проводить опросы среди респондентов, а также и анализировать результаты опросов. </li> <li><strong>Шаблоны сообщений</strong> - включите флажок, для того чтобы стала доступной команда: <a name="СтандартныеПодсистемы.ШаблоныСообщений"></a> </li> -<li><a href="Catalog.ШаблоныСообщений/Help">Шаблоны сообщений</a> - перейдите по ссылке для перехода к работе со списком шаблонов сообщений. В приложении предусмотрена возможность разработки шаблонов сообщений для почтовых сообщений и сообщений SMS, их хранение и управление ими в списке шаблонов. Возможна отправка писем и сообщений SMS, сформированных на основании списков или документов и по заранее подготовленным шаблонам сообщений.</li></ul><h3>Бизнес-процессы и задачи</h3> -<p>Приложение предоставляет возможности для решения задач автоматизации управления предприятием или компанией. Процесс управления предприятием можно представить в приложении как совокупность бизнес-процессов, состоящих из задач, каждая из которых адресована определенному исполнителю.</p> -<ul><li><strong>Бизнес-процессы и задачи</strong> - включите флажок, для того чтобы стал доступным раздел приложения <strong>Бизнес-процессы и задачи</strong>, который предполагает использование запускаемых бизнес-процессов и позволяет работу с задачами. Также становится доступным ряд других команд, с помощью которых можно запустить бизнес-процессы и использовать задачи: +<li><a href="Catalog.ШаблоныСообщений/Help">Шаблоны сообщений</a> - перейдите по ссылке для перехода к работе со списком шаблонов сообщений. В приложении предусмотрена возможность разработки шаблонов сообщений для почтовых сообщений и сообщений SMS, их хранение и управление ими в списке шаблонов. Возможна отправка писем и сообщений SMS, сформированных на основании списков или документов и по заранее подготовленным шаблонам сообщений.</li></ul><h3>Бизнес-процессы и задачи</h3> +<p>Приложение предоставляет возможности для решения задач автоматизации управления предприятием или компанией. Процесс управления предприятием можно представить в приложении как совокупность бизнес-процессов, состоящих из задач, каждая из которых адресована определенному исполнителю.</p> +<ul><li><strong>Бизнес-процессы и задачи</strong> - включите флажок, для того чтобы стал доступным раздел приложения <strong>Бизнес-процессы и задачи</strong>, который предполагает использование запускаемых бизнес-процессов и позволяет работу с задачами. Также становится доступным ряд других команд, с помощью которых можно запустить бизнес-процессы и использовать задачи: <ul><a name="СтандартныеПодсистемы.БизнесПроцессыИЗадачи"></a> -<li><a name="СтандартныеПодсистемы.БизнесПроцессыИЗадачи"></a><a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> - настройка ролей для адресации задач группам исполнителей. +<li><a name="СтандартныеПодсистемы.БизнесПроцессыИЗадачи"></a><a href="InformationRegister.ИсполнителиЗадач/Help">Роли и исполнители задач</a> - настройка ролей для адресации задач группам исполнителей. </li> -<li><strong>Подчиненные бизнес-процессы и задачи -</strong> включите флажок для учета бизнес-процессов, которые можно создавать в рамках задач других бизнес-процессов. +<li><strong>Подчиненные бизнес-процессы и задачи -</strong> включите флажок для учета бизнес-процессов, которые можно создавать в рамках задач других бизнес-процессов. </li> -<li><strong>Изменять запущенные бизнес-процессы</strong> - включите флажок, для того чтобы можно было вносить изменения в задачи запущенных бизнес-процессов. +<li><strong>Изменять запущенные бизнес-процессы</strong> - включите флажок, для того чтобы можно было вносить изменения в задачи запущенных бизнес-процессов. </li> <li><strong>Дата начала задач</strong> - включите флажок, для того чтобы разрешить исполнителям заполнять поле <strong>Дата начала</strong> и сортировать по нему список своих задач. </li> -<li><strong>Дата и время в сроках задач</strong> - включите флажок, для того чтобы можно было вводить сроки задач с точностью до минут. +<li><strong>Дата и время в сроках задач</strong> - включите флажок, для того чтобы можно было вводить сроки задач с точностью до минут. </li> <li><strong>Уведомлять о просроченных задачах по почте</strong> - включите флажок, для того чтобы извещать исполнителей о просроченных задачах по расписанию, после этого становится доступной команда <ul><li><strong>Настроить расписание</strong> - выполните команду для настройки <a href="v8help://mngbase/jobschedule.lf">расписания</a> рассылки уведомлений.</li></ul></li> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl index 28136ee05..d98c8c438 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/Органайзер/Module.bsl @@ -183,8 +183,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -288,8 +287,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -411,3 +411,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form index 193a08982..dbe3847b1 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Form.form @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> <items xsi:type="form:FormGroup"> <name>ГруппаЗаголовок</name> <id>1580</id> @@ -140,7 +140,7 @@ <id>1606</id> <title> <key>ru</key> - <value>Настройка макетов печатных форм документов.</value> + <value>Настройка макетов печатных форм справочников и документов.</value> Label true @@ -159,6 +159,38 @@ ShowBottom Auto + + ОткрытьМакетыВыгрузки + 1742 + true + true + + true + + + ОткрытьМакетыВыгрузкиРасширеннаяПодсказка + 1743 + + <key>ru</key> + <value>Настройка макетов выгрузки справочников и документов.</value> + + Label + true + true + + Left + + + Hyperlink + CommonCommand.МакетыФайловВыгрузки + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + СправочникЯзыкиПечатныхФормОткрытьСписок 1707 @@ -262,85 +294,155 @@ ГруппаАвтоматическийПеревод 1709 - - ИспользоватьСервисПереводаТекста - 1719 - - <key>ru</key> - <value>Перевод текста</value> - - true - true - - true - - - НаборКонстант.ИспользоватьСервисПереводаТекста - - None - - OnChange - ИспользоватьСервисПереводаТекстаПриИзменении - - - ИспользоватьСервисПереводаТекстаРасширеннаяПодсказка - 1721 - Label - true - true - - Left - - - - ИспользоватьСервисПереводаТекстаКонтекстноеМеню - 1720 - true - - CheckBoxField - Enter - true - Left - true - - - - НастройкаСервисаПереводаТекста - 1722 - - <key>ru</key> - <value>Перевод текста с помощью онлайн-переводчика</value> - - true - true - - true - - - НастройкаСервисаПереводаТекстаРасширеннаяПодсказка - 1724 - Label - true - true - - Left - - - - НастройкаСервисаПереводаТекстаКонтекстноеМеню - 1723 - true - - true - Label - true - true - + + ГруппаИспользоватьСервисПереводаТекста + 1753 + + ИспользоватьСервисПереводаТекста1 + 1755 + + <key>ru</key> + <value>Использовать сервис перевода текста</value> + + false + + true + + + ИспользоватьСервисПереводаТекста + + None + + ИспользоватьСервисПереводаТекста1РасширеннаяПодсказка + 1757 + Label + true + true + + Left + + + + ИспользоватьСервисПереводаТекста1КонтекстноеМеню + 1756 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьСервисПереводаТекста + 1719 + + <key>ru</key> + <value>Перевод текста</value> + + true + true + + true + + + НаборКонстант.ИспользоватьСервисПереводаТекста + + None - URLProcessing - НастройкаСервисаПереводаТекстаОбработкаНавигационнойСсылки + OnChange + ИспользоватьСервисПереводаТекстаПриИзменении - Left + + ИспользоватьСервисПереводаТекстаРасширеннаяПодсказка + 1721 + Label + true + true + + Left + + + + ИспользоватьСервисПереводаТекстаКонтекстноеМеню + 1720 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкаСервисаПереводаТекста + 1722 + + <key>ru</key> + <value>Перевод текста с помощью онлайн-переводчика</value> + + true + true + + true + + + НастройкаСервисаПереводаТекстаРасширеннаяПодсказка + 1724 + Label + true + true + + Left + + + + НастройкаСервисаПереводаТекстаКонтекстноеМеню + 1723 + true + + true + Label + true + true + + + URLProcessing + НастройкаСервисаПереводаТекстаОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Использовать сервис перевода текста</value> + + + ГруппаИспользоватьСервисПереводаТекстаРасширеннаяПодсказка + 1754 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto true @@ -368,8 +470,112 @@ UsualGroup + + Vertical + true + true + Auto + Auto + + + + ГруппаКомментарийРазрешенДоступКИнтернетСервисам + 1745 + + ДекорацияРазрешенДоступКИнтернетСервисам + 1747 + + <key>ru</key> + <value>Декорация разрешен доступ к интернет сервисам</value> + + true + true + + true + + + ДекорацияРазрешенДоступКИнтернетСервисамРасширеннаяПодсказка + 1749 + Label + true + true + + Left + + + + ДекорацияРазрешенДоступКИнтернетСервисамКонтекстноеМеню + 1748 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешенДоступКИнтернетСервисам + 1750 + + <key>ru</key> + <value>Для разблокировки настройки необходимо включить доступ к Интернет-сервисам "Интернет-поддержка и сервисы" — "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешенДоступКИнтернетСервисамРасширеннаяПодсказка + 1752 + Label + true + true + + Left + + + + КомментарийРазрешенДоступКИнтернетСервисамКонтекстноеМеню + 1751 + true + + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Комментарий разрешен доступ к интернет сервисам</value> + + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамРасширеннаяПодсказка + 1746 + Label + true + true + + Left + + + UsualGroup AlwaysHorizontal + Auto + WeakSeparation true true Auto @@ -785,6 +991,10 @@ КоличествоМесяцевХраненияИсторииРассылкиОтчетов 1732 + + <key>ru</key> + <value>Количество месяцев хранения истории</value> + true true @@ -794,6 +1004,10 @@ НаборКонстант.КоличествоМесяцевХраненияИсторииРассылкиОтчетов None + + ru + Количество месяцев хранения истории рассылки отчетов + OnChange КоличествоМесяцевХраненияИсторииРассылкиОтчетовПриИзменении @@ -1510,6 +1724,10 @@ -1 Left + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере @@ -1569,6 +1787,23 @@ true + + ИспользоватьСервисПереводаТекста + + <key>ru</key> + <value>Использовать сервис перевода текста</value> + + 16 + + Boolean + + + true + + + true + + ОткрытьДополнительныеОтчетыИОбработки diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html index 11ae8b58f..bdf16681b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Help/ru.html @@ -5,29 +5,32 @@ TD { VERTICAL-ALIGN: top } </style><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.16428"></meta></head><body> -<p>В данной панели осуществляется настройка печатных форм, вариантов отчетов, рассылок отчетов, дополнительных отчетов и обработок. Доступны команды:</p> +<p>В данной панели осуществляется настройка печатных форм, макетов файлов выгрузки, вариантов отчетов, рассылок отчетов, дополнительных отчетов и обработок. Доступны команды:</p> <ul><a name="СтандартныеПодсистемы.Печать"> </a> -<li><a name="СтандартныеПодсистемы.Печать"></a><a href="InformationRegister.ПользовательскиеМакетыПечати/Help">Макеты печатных форм</a> - переход к списку макетов для настройки печатных форм, формируемых из приложения. +<li><a name="СтандартныеПодсистемы.Печать"></a><a href="InformationRegister.ПользовательскиеМакетыПечати/Help">Макеты печатных форм</a> - переход к списку макетов для настройки печатных форм, формируемых из приложения. </li> +<li><a href="Макеты печатных форм">Макеты файлов выгрузки</a> - переход к списку макетов для настройки файлов выгрузки, формируемых из приложения.</li> <li> -<a name="СтандартныеПодсистемы.Мультиязычность"></a><a href="Catalog.ЯзыкиПечатныхФорм/Help">Языки печатных форм</a> - Иногда бывает необходимо, чтобы пользователь, работающий на одном языке, мог при этом сформировать печатную форму на другом языке, например, напечатать документы для иностранных контрагентов. Перейдя по ссылке, можно выбрать несколько других языков для печатных форм, которые будут использоваться параллельно с основным при печати. После этого становится доступным:</li> +<a name="СтандартныеПодсистемы.Мультиязычность"></a><a href="Catalog.ЯзыкиПечатныхФорм/Help">Языки печатных форм</a> - Иногда бывает необходимо, чтобы пользователь, работающий на одном языке, мог при этом сформировать печатную форму на другом языке, например, напечатать документы для иностранных контрагентов. Перейдя по ссылке, можно выбрать несколько других языков для печатных форм, которые будут использоваться параллельно с основным при печати. После этого становится доступным:</li> <li><b>Перевод текста с помощью внешнего сервиса</b> - если включен вывод печатных форм на другом языке, с помощью флажка можно включить возможность автоматического перевода текста при редактировании макетов печатных форм и вводе реквизитов на выбранных языках.</li> <li><a href="CommonForm.НастройкаКомандПечати/Help">Подменю "Печать"</a> - переход к настройке команд подменю <strong>Печать</strong>.</li><a name="СтандартныеПодсистемы.ВариантыОтчетов"> </a> -<li><a name="СтандартныеПодсистемы.ВариантыОтчетов"></a><a href="Catalog.ВариантыОтчетов/Help">Отчеты</a> - переход к списку вариантов отчетов для настройки их доступности и размещения в разделах приложения. <a name="СтандартныеПодсистемы.РассылкиОтчетов"> +<li><a name="СтандартныеПодсистемы.ВариантыОтчетов"></a><a href="Catalog.ВариантыОтчетов/Help">Отчеты</a> - переход к списку вариантов отчетов для настройки их доступности и размещения в разделах приложения. <a name="СтандартныеПодсистемы.РассылкиОтчетов"> </a></li> -<li><a href="Catalog.РассылкиОтчетов/Help">Рассылки отчетов</a> - переход к списку рассылок отчетов для автоматического формирования отчетов и доставки сформированных отчетов получателям.</li> <a name="СтандартныеПодсистемы.ВариантыОтчетов"> +<li><a href="Catalog.РассылкиОтчетов/Help">Рассылки отчетов</a> - переход к списку рассылок отчетов для автоматического формирования отчетов и доставки сформированных отчетов получателям.</li> +<li><b>Хранить историю за последние</b> ... - с помощью флажка можно включить возможность просмотра истории рассылки отчетов, например, за последние 3 месяца. </li> <a name="СтандартныеПодсистемы.ВариантыОтчетов"> </a> -<li><a name="СтандартныеПодсистемы.ВариантыОтчетов"></a><a href="Report.УниверсальныйОтчет/Help">Универсальный отчет</a> - предназначен для получения отчета по выбранным данным приложения - по спискам, документам, регистрам и т.д.</li> <a name="СтандартныеПодсистемы.БазоваяФункциональность"> +<li><a name="СтандартныеПодсистемы.ВариантыОтчетов"></a><a href="Report.УниверсальныйОтчет/Help">Универсальный отчет</a> - предназначен для получения отчета по выбранным данным приложения - по спискам, документам, регистрам и т.д.</li> +<li><a href="CommonForm.НастройкаКолонтитулов/Help">Настройка колонтитулов</a> - позволяет устанавливать номера страниц, даты и других полей в колонтитулах отчетов при печати. </li> <a name="СтандартныеПодсистемы.БазоваяФункциональность"> </a> -<li><a name="СтандартныеПодсистемы.БазоваяФункциональность"></a><a href="CommonForm.Расширения/Help">Расширения</a> - Подключение расширений: разделов, отчетов и обработок в дополнение к предусмотренным в приложении. </li><a name="СтандартныеПодсистемы.ВнешниеКомпоненты"> +<li><a name="СтандартныеПодсистемы.БазоваяФункциональность"></a><a href="CommonForm.Расширения/Help">Расширения</a> - Подключение расширений: разделов, отчетов и обработок в дополнение к предусмотренным в приложении. </li><a name="СтандартныеПодсистемы.ВнешниеКомпоненты"> </a> -<li><a name="СтандартныеПодсистемы.ВнешниеКомпоненты"></a><a href="Catalog.ВнешниеКомпоненты/Help">Внешние компоненты</a> - переход к списку внешних компонент. Приложение предоставляет администратору возможность контролировать список внешних компонент, используемых на рабочих местах. В списке администратор может подключить внешние компоненты из файла на компьютере или обновить их.</li> +<li><a name="СтандартныеПодсистемы.ВнешниеКомпоненты"></a><a href="Catalog.ВнешниеКомпоненты/Help">Внешние компоненты</a> - переход к списку внешних компонент. Приложение предоставляет администратору возможность контролировать список внешних компонент, используемых на рабочих местах. В списке администратор может подключить внешние компоненты из файла на компьютере или обновить их.</li> <li><strong>Дополнительные отчеты и обработки</strong> - включает дополнительные отчеты и обработки, после этого становится доступной команда:<a name="СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"> </a></li> -<li><a href="Catalog.ДополнительныеОтчетыИОбработки/Help">Дополнительные отчеты и обработки</a> - переход к подключению внешних печатных форм, отчетов и обработок в дополнение к предусмотренным в приложении.</li> +<li><a href="Catalog.ДополнительныеОтчетыИОбработки/Help">Дополнительные отчеты и обработки</a> - переход к подключению внешних печатных форм, отчетов и обработок в дополнение к предусмотренным в приложении.</li> <li><b>Отслеживание состояний напечатанных документов</b> - включите флажок, для того чтобы фиксировать наличие подписанных оригиналов первичных документов, после этого становится доступной ссылка:</li> <a name="СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов"> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl index e4703209a..3a7b04f84 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПечатныеФормыОтчетыИОбработки/Module.bsl @@ -45,13 +45,8 @@ Иначе Элементы.ГруппаРассылкиОтчетов.Видимость = Ложь; КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда - СервисПереводаТекста = НаборКонстант["СервисПереводаТекста"]; - Элементы.НастройкаСервисаПереводаТекста.Заголовок = ЗаголовокНастройкиСервисаПереводаТекста(СервисПереводаТекста); - Иначе - Элементы.ГруппаАвтоматическийПеревод.Видимость = Ложь; - КонецЕсли; + + ОтобразитьГруппуАвтоматическийПеревод(); // Обновление состояния элементов. УстановитьДоступность(); @@ -68,6 +63,21 @@ ОбновитьИнтерфейсПрограммы(); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_НаборКонстант" Тогда + Если Источник = "РазрешитьДоступКИнтернетСервисам" Тогда + ОтобразитьГруппуАвтоматическийПеревод(); + ИначеЕсли Источник = "ИспользоватьСервисПереводаТекста" Тогда + Если ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("СервисПереводаТекста") Тогда + ПриЗавершенииНастройкиСервисаПеревода(Параметр.СервисПереводаТекста, Неопределено); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -87,9 +97,11 @@ &НаКлиенте Процедура ИспользоватьСервисПереводаТекстаПриИзменении(Элемент) - Подключаемый_ПриИзмененииРеквизита(Элемент); Если НаборКонстант["ИспользоватьСервисПереводаТекста"] И Не ЗначениеЗаполнено(НаборКонстант["СервисПереводаТекста"]) Тогда + НаборКонстант["ИспользоватьСервисПереводаТекста"] = Ложь; ПерейтиКНастройкамПереводчика(); + Иначе + Подключаемый_ПриИзмененииРеквизита(Элемент); КонецЕсли; КонецПроцедуры @@ -151,6 +163,25 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура ОтобразитьГруппуАвтоматическийПеревод() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда + СервисПереводаТекста = НаборКонстант["СервисПереводаТекста"]; + Элементы.НастройкаСервисаПереводаТекста.Заголовок = ЗаголовокНастройкиСервисаПереводаТекста( + СервисПереводаТекста); + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); + Элементы.ИспользоватьСервисПереводаТекста.Видимость = РазрешенДоступКИнтернетСервисам; + Элементы.ИспользоватьСервисПереводаТекста1.Видимость = Не РазрешенДоступКИнтернетСервисам; + Элементы.ГруппаКомментарийРазрешенДоступКИнтернетСервисам.Видимость = Не РазрешенДоступКИнтернетСервисам; + Иначе + Элементы.ГруппаАвтоматическийПеревод.Видимость = Ложь; + Элементы.ИспользоватьСервисПереводаТекста1.Видимость = Ложь; + Элементы.ГруппаКомментарийРазрешенДоступКИнтернетСервисам.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПерейтиКНастройкамПереводчика() @@ -165,18 +196,12 @@ &НаКлиенте Процедура ПриЗавершенииНастройкиСервисаПеревода(Знач ВыбранныйПереводчик, ДополнительныеПараметры) Экспорт - Если ВыбранныйПереводчик = Неопределено Тогда - ВыбранныйПереводчик = ТекущийПереводчик(); + Если ВыбранныйПереводчик <> Неопределено Тогда + НаборКонстант["СервисПереводаТекста"] = ВыбранныйПереводчик; + Элементы.НастройкаСервисаПереводаТекста.Заголовок = ЗаголовокНастройкиСервисаПереводаТекста(ВыбранныйПереводчик); + НаборКонстант["ИспользоватьСервисПереводаТекста"] = ЗначениеЗаполнено(НаборКонстант["СервисПереводаТекста"]); КонецЕсли; - Элементы.НастройкаСервисаПереводаТекста.Заголовок = ЗаголовокНастройкиСервисаПереводаТекста(ВыбранныйПереводчик); - Если Не ЗначениеЗаполнено(ВыбранныйПереводчик) Тогда - НаборКонстант["ИспользоватьСервисПереводаТекста"] = Ложь; - Подключаемый_ПриИзмененииРеквизита(Элементы.ИспользоватьСервисПереводаТекста); - КонецЕсли; - - НаборКонстант["СервисПереводаТекста"] = ВыбранныйПереводчик; - КонецПроцедуры &НаКлиентеНаСервереБезКонтекста @@ -196,18 +221,7 @@ КонецФункции -&НаСервереБезКонтекста -Функция ТекущийПереводчик() - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда - МодульПереводТекстаНаДругиеЯзыки = ОбщегоНазначения.ОбщийМодуль("ПереводТекстаНаДругиеЯзыки"); - Возврат МодульПереводТекстаНаДругиеЯзыки.СервисПереводаТекста(); - КонецЕсли; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -236,8 +250,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -250,8 +265,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) @@ -294,3 +310,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html index 1a865fa84..4fd28a361 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Help/ru.html @@ -6,34 +6,34 @@ TD { VERTICAL-ALIGN: top } </style><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta><p>В данной панели осуществляется настройка синхронизации данных с другими приложениями и организация совместной работы в распределенной информационной базе.</p> -<ul><li><strong>Синхронизация данных</strong> - включите флажок, для того чтобы стали доступными раздел приложения <strong>Синхронизация данных</strong> и команды: +<ul><li><strong>Синхронизация данных</strong> - включите флажок, для того чтобы стали доступными раздел приложения <strong>Синхронизация данных</strong> и команды: <ul><a name="СтандартныеПодсистемы.СинхронизацияДанных"> </a> -<li><a name="СтандартныеПодсистемы.СинхронизацияДанных"></a><a href="CommonForm.НастройкиСинхронизацииДанных/Help">Настройки синхронизации данных</a> - переход к настройке и выполнению синхронизации данных с другими приложениями (например, с 1С:Бухгалтерия предприятия, редакция 3.0), а также организации совместной работы в распределенной информационной базе.</li> <a name="СтандартныеПодсистемы.ДатыЗапретаИзменения"> +<li><a name="СтандартныеПодсистемы.СинхронизацияДанных"></a><a href="CommonForm.НастройкиСинхронизацииДанных/Help">Настройки синхронизации данных</a> - переход к настройке и выполнению синхронизации данных с другими приложениями (например, с 1С:Бухгалтерия предприятия, редакция 3.0), а также организации совместной работы в распределенной информационной базе.</li> <a name="СтандартныеПодсистемы.ДатыЗапретаИзменения"> </a> -<li><a name="СтандартныеПодсистемы.ДатыЗапретаИзменения"></a><a href="InformationRegister.ДатыЗапретаИзменения/Help">Даты запрета загрузки</a> - включите флажок, для того чтобы использовать возможность запрета загрузки данных прошлых периодов из других приложений.</li> См. также: <strong>Даты запрета изменения</strong> в подразделе <a href="DataProcessor.ПанельАдминистрированияБСП.Form.ОбщиеНастройки/Help">Общие настройки</a>. +<li><a name="СтандартныеПодсистемы.ДатыЗапретаИзменения"></a><a href="InformationRegister.ДатыЗапретаИзменения/Help">Даты запрета загрузки</a> - включите флажок, для того чтобы использовать возможность запрета загрузки данных прошлых периодов из других приложений.</li> См. также: <strong>Даты запрета изменения</strong> в подразделе <a href="DataProcessor.ПанельАдминистрированияБСП.Form.ОбщиеНастройки/Help">Общие настройки</a>. <ul><li>После этого становится доступной команда: </li> -<li><strong>Настроить</strong> - переход к установке запрета загрузки данных прошлых периодов из других приложений.</li></ul><li> -<div><a href="InformationRegister.РезультатыОбменаДанными/Help">Предупреждения при синхронизации данных</a> - переход к просмотру предупреждений, возникших при синхронизации данных (непроведенных документов, незаполненных реквизитов, конфликтов и непринятых по дате запрета данных). </div> +<li><strong>Настроить</strong> - переход к установке запрета загрузки данных прошлых периодов из других приложений.</li></ul><li> +<div><a href="InformationRegister.РезультатыОбменаДанными/Help">Предупреждения при синхронизации данных</a> - переход к просмотру предупреждений, возникших при синхронизации данных (непроведенных документов, незаполненных реквизитов, конфликтов и непринятых по дате запрета данных). </div> </li> <li> <div><strong>Загрузка данных Enterprisedata</strong> - переход к загрузке данных в формате <strong>Enterprisedata</strong> без необходимости настройки регулярной синхронизации данных. Информационные базы должны поддерживать синхронизацию данных через универсальный формат <strong>Enterprisedata</strong>. С помощью этой команды возможна только загрузка данных;</div> </li> <li> -<div><strong>Префикс этой информационной базы</strong> - используется для определения приложения, в которой были введены элементы списков и документы. К кодам элементов списков и номерам документов автоматически добавляется префикс информационной базы.</div></li></ul></li> -<ul><li><b>Настройки стандартного интерфейса OData</b> - используется для настройки автоматического REST-сервиса для запроса и обновления данных. REST-сервис предназначен для взаимодействия приложения и сторонних систем, позволяет получать данные, изменять их, создавать новые списки и документы и удалять существующие.</li></ul></ul><h3>Каталог временных файлов кластера серверов 1С:Предприятие</h3> +<div><strong>Префикс этой информационной базы</strong> - используется для определения приложения, в которой были введены элементы списков и документы. К кодам элементов списков и номерам документов автоматически добавляется префикс информационной базы.</div></li></ul></li> +<ul><li><b>Настройки стандартного интерфейса OData</b> - используется для настройки автоматического REST-сервиса для запроса и обновления данных. REST-сервис предназначен для взаимодействия приложения и сторонних систем, позволяет получать данные, изменять их, создавать новые списки и документы и удалять существующие.</li></ul></ul><h3>Каталог временных файлов кластера серверов 1С:Предприятие</h3> <ul><li>Путь к единому сетевому каталогу для общих временных файлов серверов 1С:Предприятие, работающих в одном кластере: -<ul><li><strong>Под управлением ОС Windows</strong> - укажите путь к единому каталогу временных файлов всех серверов кластера, который будет использоваться для серверов, работающих под управлением ОС Windows. +<ul><li><strong>Под управлением ОС Windows</strong> - укажите путь к единому каталогу временных файлов всех серверов кластера, который будет использоваться для серверов, работающих под управлением ОС Windows. </li> <li><strong>Под управлением ОС Linux</strong> - укажите путь к единому каталогу временных файлов всех серверов кластера, который будет использоваться для серверов, работающих под управлением ОС Linux.</li></ul></li> -<li>Каталоги временных файлов можно <strong>не заполнять</strong>, когда в кластере 1С:Предприятия работает только <strong>один сервер</strong> или приложение работает в <strong>файловом режиме</strong>. +<li>Каталоги временных файлов можно <strong>не заполнять</strong>, когда в кластере 1С:Предприятия работает только <strong>один сервер</strong> или приложение работает в <strong>файловом режиме</strong>. </li> <li>Если все сервера кластера работают под управлением операционных систем одного семейства (Windows/Linux), то второе поле заполнять не обязательно. </li> -<li>Каталог должен быть <strong>доступен на чтение и запись</strong> для всех серверов кластера. В том числе - для всех пользователей операционных систем, от имени которых запускаются сервера 1С:Предприятия. +<li>Каталог должен быть <strong>доступен на чтение и запись</strong> для всех серверов кластера. В том числе - для всех пользователей операционных систем, от имени которых запускаются сервера 1С:Предприятия. </li> -<li>UNC путь к каталогу должен быть одинаковым для всех серверов одного семейства - для этого каталог необходимо подключать к серверам под одним именем. +<li>UNC путь к каталогу должен быть одинаковым для всех серверов одного семейства - для этого каталог необходимо подключать к серверам под одним именем. </li> <li>В поле <strong>Каталог временных файлов Linux</strong> можно указать только локальный путь, например, <strong>/home/path</strong>. </li> diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl index 2afc80552..87fc57992 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/СинхронизацияДанных/Module.bsl @@ -97,10 +97,10 @@ &НаКлиенте Процедура ИзменитьПрефиксИБ(Команда) - ПараметрыФормы = Новый Структура("Префикс", НаборКонстант.ПрефиксУзлаРаспределеннойИнформационнойБазы); - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ИзменениеПрефиксаУзлаИБ",ПараметрыФормы,,,,,, - РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиКлиент"); + МодульОбменДаннымиКлиент.ОткрытьФормуИзмененияПрефиксаИБ(НаборКонстант.ПрефиксУзлаРаспределеннойИнформационнойБазы); + КонецЕсли; КонецПроцедуры @@ -126,14 +126,18 @@ &НаКлиенте Процедура УдалениеПредупрежденийСинхронизацииДанных(Команда) - ПараметрыОткрытия = Новый Структура; - ПараметрыОткрытия.Вставить("МассивУзловПланаОбмена", Новый Массив); - ПараметрыОткрытия.Вставить("ОтборПоДатеВозникновения", Новый СтандартныйПериод); - ПараметрыОткрытия.Вставить("ОтборУзловОбменов", Новый Массив); - ПараметрыОткрытия.Вставить("ОтборТипыПредупреждений", Новый Массив); - ПараметрыОткрытия.Вставить("ТолькоСкрытыеЗаписи", Ложь); - - ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.УдалениеУстаревшихПредупреждений", ПараметрыОткрытия, ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиКлиент"); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("МассивУзловПланаОбмена", Новый Массив); + ПараметрыОткрытия.Вставить("ОтборПоДатеВозникновения", Новый СтандартныйПериод); + ПараметрыОткрытия.Вставить("ОтборУзловОбменов", Новый Массив); + ПараметрыОткрытия.Вставить("ОтборТипыПредупреждений", Новый Массив); + ПараметрыОткрытия.Вставить("ТолькоСкрытыеЗаписи", Ложь); + + МодульОбменДаннымиКлиент.ОткрытьФормуУдаленияПредупрежденийСинхронизации(ПараметрыОткрытия); + КонецЕсли; КонецПроцедуры @@ -141,8 +145,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -251,8 +254,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -265,8 +269,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) @@ -378,3 +383,5 @@ #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html index c8ab50a3f..5c7ba6f8b 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html @@ -1,21 +1,21 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>В разделе <strong>Администрирование</strong> предусмотрены средства, при помощи которых можно изменять параметры работы, проводить регламентные операции и контролировать состояние приложения.</p> -<p>Для эффективной работы приложения ее необходимо правильно настроить.</p> -<p>При необходимости, часто используемые настройки можно вынести в командный интерфейс раздела <strong>Администрирование</strong> в настройках панели навигации или панели действий, в зависимости от типа настройки.</p> +<p>В разделе <strong>Администрирование</strong> предусмотрены средства, при помощи которых можно изменять параметры работы, проводить регламентные операции и контролировать состояние приложения.</p> +<p>Для эффективной работы приложения ее необходимо правильно настроить.</p> +<p>При необходимости, часто используемые настройки можно вынести в командный интерфейс раздела <strong>Администрирование</strong> в настройках панели навигации или панели действий, в зависимости от типа настройки.</p> <h3>См. также: </h3> -<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.Обслуживание/Help">Обслуживание</a> - в данном подразделе администратору предоставляются возможности по поддержанию приложения в работоспособном состоянии; +<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.Обслуживание/Help">Обслуживание</a> - в данном подразделе администратору предоставляются возможности по поддержанию приложения в работоспособном состоянии; </li> -<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.ОбщиеНастройки/Help">Общие настройки</a> - в данном подразделе производятся основные настройки приложения; +<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.ОбщиеНастройки/Help">Общие настройки</a> - в данном подразделе производятся основные настройки приложения; </li> <li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.НастройкиПользователейИПрав/Help">Настройки пользователей и прав</a> - в данном подразделе предусмотрены команды, связанные с управлением доступом и настройкой прав пользователей; </li> -<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.ИнтернетПоддержкаИСервисы/Help">Интернет-поддержка и сервисы</a> - в данном подразделе предусмотрены команды, связанные с интернет-поддержкой приложения, загрузкой классификаторов и обновлением версии; +<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.ИнтернетПоддержкаИСервисы/Help">Интернет-поддержка и сервисы</a> - в данном подразделе предусмотрены команды, связанные с интернет-поддержкой приложения, загрузкой классификаторов и обновлением версии; </li> <li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.Органайзер/Help">Органайзер</a> - в данном подразделе предусмотрены команды настройки электронной почты, заметок, напоминаний и бизнес-процессов; </li> -<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.СинхронизацияДанных/Help">Синхронизация данных</a> - в данном подразделе производится настройка синхронизации данных с другими приложениями, а также организация совместной работы в распределенной информационной базе; +<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.СинхронизацияДанных/Help">Синхронизация данных</a> - в данном подразделе производится настройка синхронизации данных с другими приложениями, а также организация совместной работы в распределенной информационной базе; </li> <li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.НастройкиРаботыСФайлами/Help">Настройки работы с файлами</a> - в данном подразделе предоставляется возможность настройки параметров загрузки, хранения и обработки файлов; </li> -<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.ПечатныеФормыОтчетыИОбработки/Help">Печатные формы, отчеты и обработки</a> - в данном подразделе производится настройка печатных форм, вариантов отчетов, дополнительных отчетов и обработок. +<li><a href="DataProcessor.ПанельАдминистрированияБСП.Form.ПечатныеФормыОтчетыИОбработки/Help">Печатные формы, отчеты и обработки</a> - в данном подразделе производится настройка печатных форм, вариантов отчетов, дополнительных отчетов и обработок. <p></p></li></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl index b63e568a4..8b425fd7d 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/ManagerModule.bsl @@ -14,15 +14,10 @@ // Обработчики событий подсистем конфигурации. // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных. -Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт +Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт - Библиотека = "СтандартныеПодсистемы"; - - ОбщегоНазначения.ДобавитьПереименование(Итог, - "2.2.1.12", - "Подсистема.НастройкаИАдминистрирование", - "Подсистема.Администрирование", - Библиотека); + ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.2.1.12", + "Подсистема.НастройкаИАдминистрирование", "Подсистема.Администрирование", "СтандартныеПодсистемы"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html index 920399dbb..1a5f20d64 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Help/ru.html @@ -8,15 +8,15 @@ TD { <p>В данной панели осуществляется настройка синхронизации данных для информационной базы.</p> <table><tbody><tr><td width="30%"> <li><strong>Каталог временных файлов Windows</strong></li></td> -<td>Путь к единому каталогу временных файлов всех серверов кластера, который будет использоваться для серверов, работающих под управлением ОС Windows.</td></tr><tr><td> +<td>Путь к единому каталогу временных файлов всех серверов кластера, который будет использоваться для серверов, работающих под управлением ОС Windows.</td></tr><tr><td> <li><strong>Каталог временных файлов Linux</strong></li></td> <td>Путь к единому каталогу временных файлов всех серверов кластера, который будет использоваться для серверов, работающих под управлением ОС Linux.</td></tr><tr><td colspan="2"> -<p>Каталоги временных файлов можно <strong>не заполнять</strong>, когда в кластере 1С:Предприятия работает только <strong>один сервер</strong> или приложение работает в <strong>файловом режиме</strong>.<br>Если все сервера кластера работают под управлением операционных систем одного семейства (Windows/Linux), то второе поле заполнять не обязательно.</p> -<p>Каталог должен быть <strong>доступен на чтение и запись</strong> для всех серверов кластера. В том числе - для всех пользователей операционных систем, от имени которых запускаются сервера 1С:Предприятия. Так же UNC путь к нему должен быть одинаковым для всех серверов одного семейства - для этого каталог необходимо подключать к серверам под одним именем.</p> +<p>Каталоги временных файлов можно <strong>не заполнять</strong>, когда в кластере 1С:Предприятия работает только <strong>один сервер</strong> или приложение работает в <strong>файловом режиме</strong>.<br>Если все сервера кластера работают под управлением операционных систем одного семейства (Windows/Linux), то второе поле заполнять не обязательно.</p> +<p>Каталог должен быть <strong>доступен на чтение и запись</strong> для всех серверов кластера. В том числе - для всех пользователей операционных систем, от имени которых запускаются сервера 1С:Предприятия. Так же UNC путь к нему должен быть одинаковым для всех серверов одного семейства - для этого каталог необходимо подключать к серверам под одним именем.</p> <p>В поле <strong>Каталог временных файлов Linux</strong> можно указать только локальный путь, например /home/path.</p> <p>Чтобы использовать UNC путь, нужно сделать на него ссылку. Для этого под правами администратора (root) сделайте следующее:</p> <p><strong>mkdir folder<br></strong>--- вместо folder напишите имя каталога. например в каталоге /home делаем mkdir shared - создаст каталог shared с полным путем /home/shared.</p> <p><strong>mount -t cifs //server/share folder -o //domain/user, password=pwd</strong><br>- где //server/share - UNC путь к другому компьютеру , folder - путь каталога на Linux компьютере, например \home\shared, //domain/user - имя домена/пользователя, если нужно, pwd - пароль пользователя (если нужно).</p> <p>Если имя и пароль не нужны, команда выглядит так:<br><strong>mount -t cifs //server/share folder</strong></p> <p>После этого в пути к тому указываем folder, например /home/shared</p> -<p>Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие</p></td></tr></tbody></table><p> </p></body></html> \ No newline at end of file +<p>Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие</p></td></tr></tbody></table><p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl index 95ef195ad..68c07d333 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСПВМоделиСервиса/Forms/СинхронизацияДанныхДляАдминистратораСервиса/Module.bsl @@ -156,8 +156,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, НеобходимоОбновлятьИнтерфейс = Истина) @@ -186,8 +185,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) @@ -200,8 +200,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) @@ -243,3 +244,5 @@ #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl index f427179e4..bb1e59c16 100644 --- a/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайлов/Forms/Форма/Module.bsl @@ -17,7 +17,7 @@ РаботаСФайламиСлужебный.ЗаполнитьСписокТипамиФайлов(Элементы.РасширенияФайлов.СписокВыбора); КоличествоТомовХранения = КоличествоТомовХранения(); - ХранитьФайлыВТомахНаДиске = РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске(); + ХранитьФайлыВТомахНаДиске = РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомах(); Если Не ХранитьФайлыВТомахНаДиске И КоличествоТомовХранения > 0 Тогда diff --git a/SSL/src/DataProcessors/ПереносФайлов/Help/ru.html b/SSL/src/DataProcessors/ПереносФайлов/Help/ru.html index 1d9af5cbe..f108acea1 100644 --- a/SSL/src/DataProcessors/ПереносФайлов/Help/ru.html +++ b/SSL/src/DataProcessors/ПереносФайлов/Help/ru.html @@ -1,16 +1,16 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16476"></meta></head><body> -<p>Предназначена для переноса файлов в том хранения большего размера или для создания тома хранения архивных файлов. Для редких случаев, когда необходимо отказаться от хранения файлов в томах на устройстве, с помощью этой же команды можно перенести файлы из томов на устройстве в информационную базу. </p> +<p>Предназначена для переноса файлов в том хранения большего размера или для создания тома хранения архивных файлов. Для редких случаев, когда необходимо отказаться от хранения файлов в томах на устройстве, с помощью этой же команды можно перенести файлы из томов на устройстве в информационную базу. </p> <p>С помощью переключателя можно указать, куда перенести файлы (недоступно, если файлы хранятся в информационной базе):</p> <ul><li><b>Между томами на сервере</b>;</li> <li><b>Из информационной базы в тома на сервере</b>;</li> -<li><b>Из томов на сервере в информационную базу</b>.</li></ul><h3 style="font-size: 13.4399995803833px;">Настройки</h3> -<ul><li style="orphans: 2; widows: 2; "><b>В указанный том </b>- выберите том из списка, например,<b> Основной том</b><font face="helvetica, arial, freesans, clean, sans-serif"><span style="font-size: 14px;">;</span></font> </li> +<li><b>Из томов на сервере в информационную базу</b>.</li></ul><h3>Настройки</h3> +<ul><li style="orphans: 2; widows: 2; "><b>В указанный том </b>- выберите том из списка, например,<b> Основной том</b><font face="helvetica, arial, freesans, clean, sans-serif"><span style="font-size: 14px;">;</span></font> </li> <li style="orphans: 2; widows: 2; "><b>Из указанного тома</b> - выберите том из списка, например, <b>Резервный том</b>.</li> -<li style="orphans: 2; widows: 2; "><b>Файлы указанного владельца </b>- можно перенести только часть файлов, например, файлы, присоединенные к элементам списка <b>Демо:Организации</b>. Для этого выберите владельца из списка. </li> +<li style="orphans: 2; widows: 2; "><b>Файлы указанного владельца </b>- можно перенести только часть файлов, например, файлы, присоединенные к элементам списка <b>Демо:Организации</b>. Для этого выберите владельца из списка. </li> <li style="orphans: 2; widows: 2; "><b>Созданные</b> - укажите дату, для того чтобы перенести файлы только за указанный период.</li> <li style="orphans: 2; widows: 2; "><b>С указанным расширением</b> - выберите тип файлов для переноса (изображения или электронные документы).</li> -<li style="orphans: 2; widows: 2; "><b>По дополнительным условиям</b>, например, <b>Автор</b> равно <b>Администратор</b> - с помощью этого условия будут перенесены только файлы, автором которых является только администратор. </li></ul><p class="Paragraph0c" style="margin: 15px 0px; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11.199999809265137px;">При смене способа хранения файлов автоматический перенос файлов из приложения в тома и обратно не происходит. </span></p> -<p class="Paragraph0c" style="margin: 15px 0px; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-variant-ligatures: normal; orphans: 2; widows: 2;"><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11.199999809265137px;">Перенос файлов занимает некоторое время, которое зависит от их объема. </span></p> +<li style="orphans: 2; widows: 2; "><b>По дополнительным условиям</b>, например, <b>Автор</b> равно <b>Администратор</b> - с помощью этого условия будут перенесены только файлы, автором которых является только администратор. </li></ul><p class="Paragraph0c" style="margin: 15px 0px; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-variant-ligatures: normal; orphans: 2; widows: 2;">При смене способа хранения файлов автоматический перенос файлов из приложения в тома и обратно не происходит. </p> +<p class="Paragraph0c" style="margin: 15px 0px; font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-variant-ligatures: normal; orphans: 2; widows: 2;">Перенос файлов занимает некоторое время, которое зависит от их объема. </p> <h3>См. также:</h3> <ul><li> <div><a href="true">Общие сведения о файлах</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПрограмм/CommandModule.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПриложений/CommandModule.bsl similarity index 100% rename from SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПрограмм/CommandModule.bsl rename to SSL/src/DataProcessors/ПодключениеОбсуждений/Commands/НастройкиСообщенийИзДругихПриложений/CommandModule.bsl diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Form.form similarity index 75% rename from SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Form.form rename to SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Form.form index e551f6498..bf5c64d01 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Form.form +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Form.form @@ -1,9 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <title> - <key>ru</key> - <value>Настройка сообщений из других приложений</value> - СписокПодключений 1 @@ -232,7 +228,6 @@ AutoUse true true - false Auto Auto ExpandAllLevels @@ -248,7 +243,7 @@ ПодменюСоздать 29 - ФормаСоздатьБотаТелеграмм + ФормаСоздатьБотаTelegram 31 <key>ru</key> @@ -260,7 +255,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ФормаСоздатьБотаТелеграммРасширеннаяПодсказка</name> + <name>ФормаСоздатьБотаTelegramРасширеннаяПодсказка</name> <id>32</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -269,7 +264,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.СоздатьБотаТелеграмм</commandName> + <commandName>Form.Command.СоздатьБотаTelegram</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -313,6 +308,105 @@ </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:Button"> + <name>ФормаСоздатьБотаWhatsApp</name> + <id>43</id> + <title> + <key>ru</key> + <value>Чат WhatsApp</value> + + true + true + + true + + + ФормаСоздатьБотаWhatsAppРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.СоздатьБотаWhatsApp + Normal + Auto + true + true + UserCmds + + CommonPicture.WhatsApp16 + + Auto + + + ФормаСоздатьВебЧат + 45 + + <key>ru</key> + <value>Чат на сайте</value> + + true + true + + true + + + ФормаСоздатьВебЧатРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.Command.СоздатьВебЧат + Normal + Auto + true + true + UserCmds + + CommonPicture.WebChat16 + + Auto + + + ФормаСоздатьБотаWebhook + 52 + + <key>ru</key> + <value>Интеграция Webhook</value> + + true + true + + true + + + ФормаСоздатьБотаWebhookРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.СоздатьБотаWebhook + Normal + PictureAndText + true + true + UserCmds + + CommonPicture.Webhook16 + + Auto + true true @@ -380,6 +474,7 @@ DontBlock true + true true Vertical true @@ -467,7 +562,7 @@ - СоздатьБотаТелеграмм + СоздатьБотаTelegram <key>ru</key> <value>Чат Telegram</value> @@ -478,7 +573,7 @@ </use> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>СоздатьБотаТелеграмм</name> + <name>СоздатьБотаTelegram</name> </handler> </action> <currentRowUse>Auto</currentRowUse> @@ -529,6 +624,60 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>СоздатьБотаWhatsApp</name> + <title> + <key>ru</key> + <value>Чат WhatsApp</value> + + 4 + + true + + + + СоздатьБотаWhatsApp + + + Auto + Auto + + + СоздатьВебЧат + + <key>ru</key> + <value>Чат на сайте</value> + + 5 + + true + + + + СоздатьВебЧат + + + Auto + Auto + + + СоздатьБотаWebhook + + <key>ru</key> + <value>Интеграция Webhook</value> + + 6 + + true + + + + СоздатьБотаWebhook + + + 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..3ba757fdf --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Help/ru.html @@ -0,0 +1,39 @@ + +

          Предназначены для организации обсуждений с помощью внешних приложений.

          +

          С помощью кнопки Создать выберите и настройте нужный чат.

          +

          Чат Telegram

          +
          • Перейдите в Telegram.
          • +
          • Следуя указаниям приложения создайте бот.
          • +
          • Выберите боту Имя и произведите необходимые настройки в Telegram.
          • +
          • После успешного создания бота укажите Наименование бота и Токен.
          • +
          • С помощью кнопки Подобрать выберите из списка пользователей, которые будут получать и отправлять сообщения в Telegram.

          Чат Вконтакте

          +
          • Перейдите в социальную сеть Вконтакте.
          • +
          • Следуя указаниям приложения создайте сообщество (группу).
          • +
          • Выберите сообществу Имя и произведите необходимые настройки во Вконтакте.
          • +
          • После успешного создания чата заполните поля Наименование, Ключ и Ключ Группу.
          • +
          • С помощью кнопки Подобрать выберите из списка пользователей, которые будут получать и отправлять сообщения в приложении.
          • +
          • Нажмите кнопку Активировать.

          Чат WhatsApp

          +
          • Предварительно заключите договор с провайдером WhatsApp Business API - компанией "Девино Телеком".
          • +
          • После заключения договора получите у менеджера "Девино Телеком" Ключ (token) и Имя канала.
          • +
          • После настройки интеграции необходимо передать навигационную ссылку точки подключения менеджеру "Девино Телеком".
          • +
          • Заполните поля Наименование, Ключ, Имя канала.
          • +
          • Точка подключения заполняется автоматически.
          • +
          • С помощью кнопки Подобрать выберите из списка пользователей, которые будут получать и отправлять сообщения от лица аккаунта WhatsApp.

          Чат на сайте

          +
          Чат можно интегрировать с корпоративным сайтом или интернет-магазином, что обеспечит непрерывность коммуникации и автоматизирует общение с посетителями даже в нерабочее время благодаря использованию бота.
          +
          • На вкладке Основное заполните поле Наименование.
          • +
          • Точка подключения заполняется автоматически после успешной активации.
          • +
          • С помощью кнопки Подобрать выберите из списка пользователей, которые будут получать и отправлять сообщения.
          • +
          • Настройте (при необходимости) на соответствующей вкладке Параметры отображения, например, внешний вид, расположение окна чата и т.д.
          • +
          • Нажмите кнопку Активировать.
          • +
          • Обратитесь к техническому специалисту, ответственному за сопровождение сайта, сообщите ему Точку подключения.

          Интеграция Webhook

          +
          Webhook - это механизм, который позволяет различным сервисам и приложениям обмениваться данными в режиме реального времени. Интеграция с Webhook обеспечивает одностороннюю коммуникацию от внешнего приложения в Систему взаимодействия. С помощью интеграции можно создать новые сценарии взаимодействия, например, информировать пользователей о новых заказах через сайт интернет-магазина.
          +
          • Заполните Наименование бота в 1С.
          • +
          • С помощью кнопки Подобрать выберите из списка пользователей, которые будут получать сообщения.
          • +
          • Нажмите кнопку Активировать.
          • +
          • Точка подключения заполняется автоматически после успешной активации.
          • +
          • Обратитесь к техническому специалисту, ответственному за сопровождение сайта, сообщите ему Точку подключения.

          +
          Если все было корректно настроено, должны приходить сообщения из приложений.
          + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Module.bsl new file mode 100644 index 000000000..ef0cfd398 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПриложений/Module.bsl @@ -0,0 +1,230 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТипыВнешнихСистем = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем(); + ДоступныеИнтеграции = ОбсужденияСлужебный.ДоступныеИнтеграции(); + ДоступныеКомандыСоздания = Новый Соответствие; + + ТипВнешнейСистемы = ТипыВнешнихСистем.Telegram; + ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено; + ДоступныеКомандыСоздания["СоздатьБотаTelegram"] = ИнтеграцияДоступна; + Если ИнтеграцияДоступна Тогда + Подключение = СписокПодключений.ПолучитьЭлементы().Добавить(); + Подключение.Наименование = НСтр("ru='Чаты Telegram'"); + Подключение.Активно = -1; + Подключение.Тип = ТипВнешнейСистемы; + КонецЕсли; + + ТипВнешнейСистемы = ТипыВнешнихСистем.ВКонтакте; + ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено; + ДоступныеКомандыСоздания["СоздатьБотаВКонтакте"] = ИнтеграцияДоступна; + Если ИнтеграцияДоступна Тогда + Подключение = СписокПодключений.ПолучитьЭлементы().Добавить(); + Подключение.Наименование = НСтр("ru='Чаты ВКонтакте'"); + Подключение.Активно = -1; + Подключение.Тип = ТипВнешнейСистемы; + КонецЕсли; + + ТипВнешнейСистемы = ТипыВнешнихСистем.WhatsApp; + ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено; + ДоступныеКомандыСоздания["СоздатьБотаWhatsApp"] = ИнтеграцияДоступна; + Если ИнтеграцияДоступна Тогда + Подключение = СписокПодключений.ПолучитьЭлементы().Добавить(); + Подключение.Наименование = НСтр("ru='Чаты WhatsApp'"); + Подключение.Активно = -1; + Подключение.Тип = ТипВнешнейСистемы; + КонецЕсли; + + ТипВнешнейСистемы = ТипыВнешнихСистем.ВебЧат; + ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено; + ДоступныеКомандыСоздания["СоздатьВебЧат"] = ИнтеграцияДоступна; + Если ИнтеграцияДоступна Тогда + Подключение = СписокПодключений.ПолучитьЭлементы().Добавить(); + Подключение.Наименование = НСтр("ru='Чаты на сайте'"); + Подключение.Активно = -1; + Подключение.Тип = ТипВнешнейСистемы; + КонецЕсли; + + ТипВнешнейСистемы = ТипыВнешнихСистем.Webhook; + ИнтеграцияДоступна = ДоступныеИнтеграции.Найти(ТипВнешнейСистемы) <> Неопределено; + ДоступныеКомандыСоздания["СоздатьБотаWebhook"] = ИнтеграцияДоступна; + Если ИнтеграцияДоступна Тогда + Подключение = СписокПодключений.ПолучитьЭлементы().Добавить(); + Подключение.Наименование = НСтр("ru='Интеграция Webhook'"); + Подключение.Активно = -1; + Подключение.Тип = ТипВнешнейСистемы; + КонецЕсли; + + ОбновитьСписокИнтеграций(ДоступныеИнтеграции); + УстановитьВидимостьКомандСоздания(ДоступныеКомандыСоздания); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СоздатьБотаTelegram(Команда) + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Telegram), + Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьБотаВКонтакте(Команда) + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВКонтакте), + Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьБотаWhatsApp(Команда) + + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().WhatsApp), + Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьВебЧат(Команда) + + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат), + Оповещение); + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьБотаWebhook(Команда) + + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, + Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Webhook), + Оповещение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьВидимостьКомандСоздания(ДоступныеКомандыСоздания) + + Для Каждого ЭлементСоздания Из Элементы.ПодменюСоздать.ПодчиненныеЭлементы Цикл + ЭлементСоздания.Видимость = (ДоступныеКомандыСоздания[ЭлементСоздания.ИмяКоманды] = Истина); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеИзмененияИнтеграции(Результат, ДополнительныеПараметры) Экспорт + ОбновитьСписокИнтеграций(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокИнтеграций(Знач ДоступныеИнтеграции = Неопределено) + + Если Не Обсуждения.ОбсужденияДоступны() Тогда + Возврат; + КонецЕсли; + + ТипыИнтеграции = Новый Соответствие; + + Для каждого ТипИнтеграции Из СписокПодключений.ПолучитьЭлементы() Цикл + ТипИнтеграции.ПолучитьЭлементы().Очистить(); + ТипыИнтеграции.Вставить(ТипИнтеграции.Тип, ТипИнтеграции); + КонецЦикла; + + ТаблицаИнтеграций = Новый ТаблицаЗначений; + ТаблицаИнтеграций.Колонки.Добавить("Использование"); + ТаблицаИнтеграций.Колонки.Добавить("Представление"); + ТаблицаИнтеграций.Колонки.Добавить("Идентификатор"); + ТаблицаИнтеграций.Колонки.Добавить("ТипВнешнейСистемы"); + + Интеграции = СистемаВзаимодействия.ПолучитьИнтеграции(); + Если ДоступныеИнтеграции = Неопределено Тогда + ДоступныеИнтеграции = ОбсужденияСлужебный.ДоступныеИнтеграции(); + КонецЕсли; + Для Каждого Интеграция Из Интеграции Цикл + Если ДоступныеИнтеграции.Найти(Интеграция.ТипВнешнейСистемы) <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ТаблицаИнтеграций.Добавить(), Интеграция); + КонецЕсли; + КонецЦикла; + + ТаблицаИнтеграций.Сортировать("Представление Возр"); + + Для Каждого Интеграция Из ТаблицаИнтеграций Цикл + + Категория = ТипыИнтеграции[Интеграция.ТипВнешнейСистемы]; + Если Категория <> Неопределено Тогда + НоваяИнтеграция = Категория.ПолучитьЭлементы().Добавить(); + ИнтеграцияВДанныеФормы(Интеграция, НоваяИнтеграция); + Иначе + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неподдерживаемый тип внешней интеграции %1.'"), Интеграция.ТипВнешнейСистемы)); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Параметры: +// Интеграция - ИнтеграцияСистемыВзаимодействия +// ДанныеФормы - ДанныеФормыЭлементДерева из см. Обработка.ПодключениеОбсуждений.Форма.НастройкиСообщенийИзДругихПриложений.СписокПодключений +// +&НаСервере +Процедура ИнтеграцияВДанныеФормы(Знач Интеграция, Знач ДанныеФормы) + + ДанныеФормы.Активно = ?(Интеграция.Использование, 0, 2); + ДанныеФормы.Наименование = Интеграция.Представление; + ДанныеФормы.Идентификатор = Интеграция.Идентификатор; + ДанныеФормы.Тип = Интеграция.ТипВнешнейСистемы; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПодключенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + Интеграция = СписокПодключений.НайтиПоИдентификатору(ВыбраннаяСтрока); + Если Интеграция.Идентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Тип", Интеграция.Тип); + ПараметрыФормы.Вставить("Идентификатор", Интеграция.Идентификатор); + ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, ПараметрыФормы, Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура Обновить(Команда) + ОбновитьНаСервере(); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьНаСервере() + ОбновитьСписокИнтеграций(); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Module.bsl deleted file mode 100644 index 1018f0a4e..000000000 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/НастройкиСообщенийИзДругихПрограмм/Module.bsl +++ /dev/null @@ -1,128 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ТипыВнешнихСистем = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем(); - - Телеграмм = СписокПодключений.ПолучитьЭлементы().Добавить(); - Телеграмм.Наименование = НСтр("ru='Чаты Telegram'"); - Телеграмм.Активно = -1; - Телеграмм.Тип = ТипыВнешнихСистем.Телеграм; - - ВКонтакте = СписокПодключений.ПолучитьЭлементы().Добавить(); - ВКонтакте.Наименование = НСтр("ru='Чаты ВКонтакте'"); - ВКонтакте.Активно = -1; - ВКонтакте.Тип = ТипыВнешнихСистем.ВКонтакте; - - ОбновитьСписокИнтеграций(); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура СоздатьБотаТелеграмм(Команда) - Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); - ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, - Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Телеграм), - Оповещение); -КонецПроцедуры - -&НаКлиенте -Процедура СоздатьБотаВКонтакте(Команда) - Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); - ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции(ЭтотОбъект, - Новый Структура("Тип", ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВКонтакте), - Оповещение); -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ПослеИзмененияИнтеграции(Результат, ДополнительныеПараметры) Экспорт - ОбновитьСписокИнтеграций(); -КонецПроцедуры - -&НаСервере -Процедура ОбновитьСписокИнтеграций() - - ТипыИнтеграции = Новый Соответствие; - - Для каждого ТипИнтеграции Из СписокПодключений.ПолучитьЭлементы() Цикл - ТипИнтеграции.ПолучитьЭлементы().Очистить(); - ТипыИнтеграции.Вставить(ТипИнтеграции.Тип, ТипИнтеграции); - КонецЦикла; - - Для каждого Интеграция Из СистемаВзаимодействия.ПолучитьИнтеграции() Цикл - - Категория = ТипыИнтеграции[Интеграция.ТипВнешнейСистемы]; - Если Категория <> Неопределено Тогда - НоваяИнтеграция = Категория.ПолучитьЭлементы().Добавить(); - ИнтеграцияВДанныеФормы(Интеграция, НоваяИнтеграция); - Иначе - ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, - НСтр("ru='Не поддерживаемый тип внешней интеграции'")); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Параметры: -// Интеграция - ИнтеграцияСистемыВзаимодействия -// ДанныеФормы - ДанныеФормыЭлементДерева из см. Обработка.ПодключениеОбсуждений.Форма.НастройкиСообщенийИзДругихПрограмм.СписокПодключений -// -&НаСервере -Процедура ИнтеграцияВДанныеФормы(Знач Интеграция, Знач ДанныеФормы) - - ДанныеФормы.Активно = ?(Интеграция.Использование, 0, 2); - ДанныеФормы.Наименование = Интеграция.Представление; - ДанныеФормы.Идентификатор = Интеграция.Идентификатор; - ДанныеФормы.Тип = Интеграция.ТипВнешнейСистемы; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокПодключенийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - Интеграция = СписокПодключений.НайтиПоИдентификатору(ВыбраннаяСтрока); - Если Интеграция.Идентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ПослеИзмененияИнтеграции", ЭтотОбъект); - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Тип", Интеграция.Тип); - ПараметрыФормы.Вставить("Идентификатор", Интеграция.Идентификатор); - ОбсужденияСлужебныйКлиент.ПоказатьИнформациюОбИнтеграции( - ЭтотОбъект, - ПараметрыФормы, - Оповещение); -КонецПроцедуры - -&НаКлиенте -Процедура Обновить(Команда) - ОбновитьНаСервере(); -КонецПроцедуры - -&НаСервере -Процедура ОбновитьНаСервере() - ОбновитьСписокИнтеграций(); -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаTelegram/Form.form similarity index 99% rename from SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Form.form rename to SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаTelegram/Form.form index 7820fa499..cc55f85a1 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Form.form +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаTelegram/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Подключение бота Telegram</value> + <value>Подключение чата Telegram</value> ГруппаОписание @@ -59,7 +59,7 @@ 2. Написать ему в сообщении <b>/newbot</> и выбрать имя, которое будет отображаться в списке контактов. 3. Если имя бота не занято и введено правильно, BotFather пришлет в ответ сообщение с токеном для доступа к созданному боту, который понадобится далее при настройке. -Не забудьте задать описание бота и картинку, как описано <link https://tlgrm.ru/docs/bots#edit-settings>здесь</>. +Не забудьте задать описание бота и картинку. true true diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаTelegram/Module.bsl similarity index 79% rename from SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Module.bsl rename to SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаTelegram/Module.bsl index 9c47df729..a07581adf 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаТелеграм/Module.bsl +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаTelegram/Module.bsl @@ -31,6 +31,9 @@ КонецЕсли; + ОбсужденияЛокализация.ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Элементы.Инструкция.Заголовок, + ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Telegram); + КонецПроцедуры #КонецОбласти @@ -50,11 +53,13 @@ Попытка АктивироватьСервер(); - Закрыть(Истина); Исключение - ПоказатьПредупреждение(, НСтр("ru='Не удалось активировать чат-бот по причине:'") - + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось активировать чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); КонецПопытки; + Закрыть(Истина); КонецПроцедуры &НаСервере @@ -63,7 +68,7 @@ ПараметрыИнтеграции = ОбсужденияСлужебный.ПараметрыИнтеграции(); ПараметрыИнтеграции.Идентификатор = Параметры.Идентификатор; ПараметрыИнтеграции.Ключ = Наименование; - ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Телеграм; + ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Telegram; ПараметрыИнтеграции.Участники = Участники.Выгрузить(,"Пользователь").ВыгрузитьКолонку("Пользователь"); ПараметрыИнтеграции.token = Токен; @@ -96,11 +101,13 @@ Процедура Отключить(Команда) Попытка ОтключитьСервер(); - Закрыть(Истина); Исключение - ПоказатьПредупреждение(, НСтр("ru='Не удалось отключить чат-бота по причине:'") - + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); КонецПопытки; + Закрыть(Истина); КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWebhook/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWebhook/Form.form new file mode 100644 index 000000000..b6afe706c --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWebhook/Form.form @@ -0,0 +1,689 @@ + + + + <key>ru</key> + <value>Подключение интеграции Webhook</value> + + + ГруппаОписание + 68 + + Логотип + 70 + + <key>ru</key> + <value>Логотип</value> + + true + true + + true + + + ЛоготипРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ЛоготипКонтекстноеМеню + 71 + true + + true + true + Center + Center + + + CommonPicture.BotFatherWebhook + + AsFileRef + + + + Инструкция + 42 + + <key>ru</key> + <value>Механизм Webhook используется для получения сообщений из внешней системы. Для настройки интеграции необходимо: +1. Заполнить требуемые поля +2. Нажать <b>Активизировать</>. После успешной активации поле <b>Точка</><b> </><b>подключения</> будет заполнено. +3. Обратиться к техническому специалисту, ответственному за интеграцию механизма, сообщить ему <b>Точку</><b> </><b>подключения</>.</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 + true + true + Auto + Auto + + + + ГруппаПараметры + 97 + + Наименование + 30 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Наименование + + + НаименованиеРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Наименование бота в 1С + + + + + ТочкаПодключения + 101 + + <key>ru</key> + <value>Точка подключения</value> + + true + true + + true + + + НавигационнаяСсылкаТочкиПодключения + + + ТочкаПодключенияРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ТочкаПодключенияКонтекстноеМеню + 102 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + ru + Будет заполнено автоматически + + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ГруппаПараметрыРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + Участники + 50 + + <key>ru</key> + <value>Кто получает сообщения</value> + + true + true + + true + + + Участники + + + УчастникиПользователь + 63 + + <key>ru</key> + <value>Участники обсуждения</value> + + true + true + + true + + + Участники.Пользователь + + + УчастникиПользовательРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + УчастникиПользовательКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + УчастникиКоманднаяПанель + 51 + + ПользователиПодобрать + 66 + + <key>ru</key> + <value>Подобрать</value> + + 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 + + <key>ru</key> + <value>Отключить</value> + + true + + true + + + ОтключитьРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.Command.Отключить + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 28 + + <key>ru</key> + <value>Активировать</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.Активизировать + Auto + true + true + true + UserCmds + Auto + + Right + + + BeforeClose + ПередЗакрытием + + + 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> + + 4 + + ValueTable + + + true + + + true + + ShowError + + Пользователь + + <key>ru</key> + <value>Участники обсуждения</value> + + 5 + + CatalogRef.Пользователи + + + true + + + true + + + + + НавигационнаяСсылкаТочкиПодключения + + <key>ru</key> + <value>Точка подключения</value> + + 6 + + String + + + + true + + + true + + + + ИнтеграцияИспользуется + 7 + + Boolean + + + 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/СозданиеБотаWebhook/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWebhook/Module.bsl new file mode 100644 index 000000000..c768a261c --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWebhook/Module.bsl @@ -0,0 +1,169 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ФормаЗакрывается; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Идентификатор <> Неопределено Тогда + + ОписаниеИнтеграции = СистемаВзаимодействия.ПолучитьИнтеграцию(Параметры.Идентификатор); + Если ОписаниеИнтеграции <> Неопределено Тогда + Наименование = ОписаниеИнтеграции.Представление; + НавигационнаяСсылкаТочкиПодключения = ОписаниеИнтеграции.НавигационнаяСсылкаТочкиПодключения; + + Участники.Очистить(); + Для каждого ПользовательИБ Из Обсуждения.ПользователиИнформационнойБазы(ОписаниеИнтеграции.Участники) Цикл + Участники.Добавить().Пользователь = ПользовательИБ.Значение; + КонецЦикла; + КонецЕсли; + + ИнтеграцияИспользуется = ОписаниеИнтеграции.Использование; + Если ИнтеграцияИспользуется Тогда + Элементы.Закрыть.Заголовок = НСтр("ru='Записать и закрыть'"); + Элементы.Отключить.Видимость = Истина; + КонецЕсли; + + КонецЕсли; + + ОбсужденияЛокализация.ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Элементы.Инструкция.Заголовок, + ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Webhook); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ФормаЗакрывается = Истина И Не ЗавершениеРаботы Тогда + Закрыть(Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники + +&НаКлиенте +Процедура УчастникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + + Для каждого ПодобранныйПользователь Из ВыбранноеЗначение Цикл + Если Участники.НайтиСтроки(Новый Структура("Пользователь", ПодобранныйПользователь)).Количество() = 0 Тогда + Участники.Добавить().Пользователь = ПодобранныйПользователь; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Подобрать(Команда) + + ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники); + +КонецПроцедуры + +&НаКлиенте +Процедура АктивироватьБота(Команда) + + Если ФормаЗакрывается = Истина Тогда + Закрыть(Истина); + Возврат; + КонецЕсли; + + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Попытка + АктивироватьСервер(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось активировать чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + + Если ИнтеграцияИспользуется Тогда + Закрыть(Истина); + Возврат; + КонецЕсли; + + Элементы.Закрыть.Заголовок = НСтр("ru='Закрыть'"); + ФормаЗакрывается = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура Отключить(Команда) + + Попытка + ОтключитьСервер(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + Закрыть(Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура АктивироватьСервер() + + ПараметрыИнтеграции = ОбсужденияСлужебный.ПараметрыИнтеграции(); + ПараметрыИнтеграции.Идентификатор = Параметры.Идентификатор; + ПараметрыИнтеграции.Ключ = Наименование; + ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().Webhook; + ПараметрыИнтеграции.Участники = Участники.Выгрузить(, "Пользователь").ВыгрузитьКолонку("Пользователь"); + + Попытка + ОписаниеИнтеграции = ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции); + // Из-за особенностей реализации Системы взаимодействия требуется повторный вызов. + Интеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(ОписаниеИнтеграции.Идентификатор); + Исключение + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Если Интеграция <> Неопределено Тогда + НавигационнаяСсылкаТочкиПодключения = Интеграция.НавигационнаяСсылкаТочкиПодключения; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтключитьСервер() + ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWhatsApp/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWhatsApp/Form.form new file mode 100644 index 000000000..0e23356c5 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWhatsApp/Form.form @@ -0,0 +1,826 @@ + + + + <key>ru</key> + <value>Подключение чата WhatsApp</value> + + + ГруппаОписание + 68 + + Логотип + 70 + + <key>ru</key> + <value>Логотип</value> + + true + true + + true + + + ЛоготипРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ЛоготипКонтекстноеМеню + 71 + true + + true + true + Center + Center + + + CommonPicture.BotFatherWhatsapp + + AsFileRef + + + + Инструкция + 42 + + <key>ru</key> + <value>Обмен сообщениями с пользователями WhatsApp возможен только для бизнес-аккаунта мессенджера. Для настройки необходимо: +1. Заключить договор с провайдером WhatsApp Business API - компанией "Девино Телеком". +2. Получить у менеджера "Девино Телеком" <b>К</><b>люч</> (token) и <b>Имя канала</>. +3. Нажать <b>Активизировать</>. После успешной активации поле <b>Точка</><b> </><b>подключения</> будет заполнено. +4. Сообщить менеджеру "Девино Телеком" <b>Точку подключения</>.</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 + true + true + Auto + Auto + + + + ГруппаПараметры + 97 + + Наименование + 30 + + <key>ru</key> + <value>Наименование</value> + + 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 + + <key>ru</key> + <value>Ключ (token)</value> + + true + true + + true + + + Токен + + + ТокенРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ТокенКонтекстноеМеню + 34 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Ключ интеграции с WhatsApp + + + + + ИдКанала + 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 + Наименование канала провайдера + + + + + ТочкаПодключения + 101 + + <key>ru</key> + <value>Точка подключения</value> + + true + true + + true + + + НавигационнаяСсылкаТочкиПодключения + + + ТочкаПодключенияРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ТочкаПодключенияКонтекстноеМеню + 102 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + ru + Будет заполнено автоматически + + + + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + ГруппаПараметрыРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + Участники + 50 + + <key>ru</key> + <value>Кто получает и отправляет сообщения от лица аккаунта WhatsApp</value> + + true + true + + true + + + Участники + + + УчастникиПользователь + 63 + + <key>ru</key> + <value>Участники обсуждения</value> + + true + true + + true + + + Участники.Пользователь + + + УчастникиПользовательРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + УчастникиПользовательКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + УчастникиКоманднаяПанель + 51 + + ПользователиПодобрать + 66 + + <key>ru</key> + <value>Подобрать</value> + + 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 + + <key>ru</key> + <value>Отключить</value> + + true + + true + + + ОтключитьРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.Command.Отключить + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 28 + + <key>ru</key> + <value>Активировать</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.Активизировать + Auto + true + true + true + UserCmds + Auto + + Right + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + ShowError + + + Токен + + <key>ru</key> + <value>Ключ (token)</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> + + 6 + + String + + + + true + + + true + + + + ИнтеграцияИспользуется + 7 + + Boolean + + + 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/СозданиеБотаWhatsApp/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWhatsApp/Module.bsl new file mode 100644 index 000000000..7158a6445 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаWhatsApp/Module.bsl @@ -0,0 +1,171 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ФормаЗакрывается; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Идентификатор <> Неопределено Тогда + + ОписаниеИнтеграции = СистемаВзаимодействия.ПолучитьИнтеграцию(Параметры.Идентификатор); + Если ОписаниеИнтеграции <> Неопределено Тогда + Наименование = ОписаниеИнтеграции.Представление; + Токен = ОписаниеИнтеграции.ПараметрыВнешнейСистемы.Получить("token"); + Канал = ОписаниеИнтеграции.ПараметрыВнешнейСистемы.Получить("channel"); + НавигационнаяСсылкаТочкиПодключения = ОписаниеИнтеграции.НавигационнаяСсылкаТочкиПодключения; + + Участники.Очистить(); + Для каждого ПользовательИБ Из Обсуждения.ПользователиИнформационнойБазы(ОписаниеИнтеграции.Участники) Цикл + Участники.Добавить().Пользователь = ПользовательИБ.Значение; + КонецЦикла; + КонецЕсли; + + ИнтеграцияИспользуется = ОписаниеИнтеграции.Использование; + Если ИнтеграцияИспользуется Тогда + Элементы.Закрыть.Заголовок = НСтр("ru='Записать и закрыть'"); + Элементы.Отключить.Видимость = Истина; + КонецЕсли; + + КонецЕсли; + + ОбсужденияЛокализация.ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Элементы.Инструкция.Заголовок, + ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().WhatsApp); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ФормаЗакрывается = Истина И Не ЗавершениеРаботы Тогда + Закрыть(Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники + +&НаКлиенте +Процедура УчастникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + + Для каждого ПодобранныйПользователь Из ВыбранноеЗначение Цикл + Если Участники.НайтиСтроки(Новый Структура("Пользователь", ПодобранныйПользователь)).Количество() = 0 Тогда + Участники.Добавить().Пользователь = ПодобранныйПользователь; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Подобрать(Команда) + ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники); +КонецПроцедуры + +&НаКлиенте +Процедура АктивироватьБота(Команда) + + Если ФормаЗакрывается = Истина Тогда + Закрыть(Истина); + Возврат; + КонецЕсли; + + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Попытка + АктивироватьСервер(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось активировать чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + + Если ИнтеграцияИспользуется Тогда + Закрыть(Истина); + Возврат; + КонецЕсли; + + Элементы.Закрыть.Заголовок = НСтр("ru='Закрыть'"); + ФормаЗакрывается = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура Отключить(Команда) + + Попытка + ОтключитьСервер(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + Закрыть(Истина); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура АктивироватьСервер() + + ПараметрыИнтеграции = ОбсужденияСлужебный.ПараметрыИнтеграции(); + ПараметрыИнтеграции.Идентификатор = Параметры.Идентификатор; + ПараметрыИнтеграции.Ключ = Наименование; + ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().WhatsApp; + ПараметрыИнтеграции.Участники = Участники.Выгрузить(, "Пользователь").ВыгрузитьКолонку("Пользователь"); + ПараметрыИнтеграции.token = Токен; + ПараметрыИнтеграции.channel = Канал; + + Попытка + ОписаниеИнтеграции = ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции); + // Из-за особенностей реализации Системы Взаимодействия требуется повторный вызов. + Интеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(ОписаниеИнтеграции.Идентификатор); + Исключение + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Если Интеграция <> Неопределено Тогда + НавигационнаяСсылкаТочкиПодключения = Интеграция.НавигационнаяСсылкаТочкиПодключения; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтключитьСервер() + ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form index 624298370..c775df0fd 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Подключение бота ВКонтакте</value> + <value>Подключение чата ВКонтакте</value> ГруппаОписание @@ -50,7 +50,7 @@ ru Для получения сообщений из социальной сети ВКонтакте, необходимо создать сообщество. Затем укажите его ключи: 1. Перейти в настройки сообщества ВКонтакте. -2. На вкладке <b>Работа с API</> создать ключ и ввести его в поле <b>Ключ</>. +2. На вкладке <b>Работа с API</> создать ключ, разрешить доступ к управлению сообществом, к сообщениям и документам, ввести его в поле <b>Ключ</>. 3. На вкладке <b>Callback API </>найти строчку похожую на {"type":"Confirmation", "group_id": 346875149} и ввести цифры group_id в поле <b>Ключ группы</>. @@ -536,7 +536,7 @@ 28 <key>ru</key> - <value>Активизировать</value> + <value>Активировать</value> true true diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl index e81d7063d..4296a414c 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВКонтакте/Module.bsl @@ -31,6 +31,9 @@ КонецЕсли; + ОбсужденияЛокализация.ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Элементы.Инструкция.Заголовок, + ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВКонтакте); + КонецПроцедуры &НаСервере @@ -58,11 +61,13 @@ Попытка АктивироватьСервер(); - Закрыть(Истина); Исключение - ПоказатьПредупреждение(, НСтр("ru='Не удалось активировать чат-бот по причине:'") - + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось активировать чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); КонецПопытки; + Закрыть(Истина); КонецПроцедуры &НаСервере @@ -105,11 +110,13 @@ Процедура Отключить(Команда) Попытка ОтключитьСервер(); - Закрыть(Истина); Исключение - ПоказатьПредупреждение(, НСтр("ru='Не удалось отключить чат-бот по причине:'") - + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); КонецПопытки; + Закрыть(Истина); КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВебЧат/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВебЧат/Form.form new file mode 100644 index 000000000..68f540caa --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВебЧат/Form.form @@ -0,0 +1,1347 @@ + + + + <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.BotFatherWebChat + + AsFileRef + + + + ГруппаИнструкция + 145 + + Инструкция + 42 + + <key>ru</key> + <value>Для получения сообщений с сайта необходимо: +1. Настроить (при необходимости) на соответствующей вкладке параметры отображения +2. Нажать <b>Активизировать</> +3. После успешной активации поле <b>Точка</><b> </><b>подключения</> будет заполнено. +4. Обратиться к техническому специалисту, ответственному за сопровождение сайта, сообщить ему <b>Точку</><b> </><b>подключения</>. </value> + + true + true + + true + + + ИнструкцияРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ИнструкцияКонтекстноеМеню + 43 + true + + true + Label + 60 + true + true + Center + Center + + Left + + + + СохранитьФайлВебСтраницы + 143 + + <key>ru</key> + <value>Пример веб-страницы</value> + + true + true + + true + + + СохранитьФайлВебСтраницыРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Hyperlink + Form.Command.СохранитьФайлВебСтраницы + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Инструкция</value> + + + ГруппаИнструкцияРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Описание</value> + + + ГруппаОписаниеРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + ГруппаОсновное + 109 + + ГруппаСтраницы + 118 + + ГруппаСтраницаОсновное + 120 + + Наименование + 30 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Наименование + + + НаименованиеРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ru + Наименование бота в 1С + + + + + ИдТочкиПодключения + 106 + + <key>ru</key> + <value>Точка подключения</value> + + true + true + + true + + + НавигационнаяСсылкаТочкиПодключения + + + ИдТочкиПодключенияРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + + ИдТочкиПодключенияКонтекстноеМеню + 107 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + ru + Будет заполнено автоматически + + + + + Участники + 50 + + <key>ru</key> + <value>Кто получает и отправляет сообщения</value> + + true + true + + true + + + Участники + + + УчастникиПользователь + 63 + + <key>ru</key> + <value>Участники обсуждения</value> + + true + true + + true + + + Участники.Пользователь + + + УчастникиПользовательРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + УчастникиПользовательКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + УчастникиКоманднаяПанель + 51 + + ПользователиПодобрать + 66 + + <key>ru</key> + <value>Подобрать</value> + + 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 + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ГруппаСтраницаОсновноеРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаПараметрыЧата + 122 + + ВнешниеПараметры + 124 + + <key>ru</key> + <value>Параметры отображения</value> + + true + true + + true + + + ПараметрыОтображения + + None + + ВнешниеПараметрыПредставление + 137 + + <key>ru</key> + <value>Представление</value> + + true + true + + true + + + ПараметрыОтображения.Представление + + + ВнешниеПараметрыПредставлениеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + ВнешниеПараметрыПредставлениеКонтекстноеМеню + 138 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ВнешниеПараметрыПредставлениеЗначения + 140 + + <key>ru</key> + <value>Представление значения</value> + + true + true + + true + + + ПараметрыОтображения.ПредставлениеЗначения + + + OnChange + ВнешниеПараметрыПредставлениеЗначенияПриИзменении + + + ВнешниеПараметрыПредставлениеЗначенияРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ВнешниеПараметрыПредставлениеЗначенияКонтекстноеМеню + 141 + true + + InputField + Auto + true + Left + true + + + StartChoice + ВнешниеПараметрыПредставлениеЗначенияНачалоВыбора + + 7 + true + true + true + true + true + true + Normal + + + None + + ВнешниеПараметрыКоманднаяПанель + 126 + Left + true + + + OnActivateRow + ВнешниеПараметрыПриАктивацииСтроки + + + OnChange + ВнешниеПараметрыПриИзменении + + + ВнешниеПараметрыСтрокаПоиска + 128 + + ВнешниеПараметрыСтрокаПоискаРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ВнешниеПараметрыСтрокаПоискаКонтекстноеМеню + 129 + true + + ВнешниеПараметры + + true + + + + ВнешниеПараметрыСостояниеПросмотра + 131 + + ВнешниеПараметрыСостояниеПросмотраРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + ВнешниеПараметрыСостояниеПросмотраКонтекстноеМеню + 132 + true + + ViewStatusAddition + ВнешниеПараметры + + true + + + + ВнешниеПараметрыУправлениеПоиском + 134 + + ВнешниеПараметрыУправлениеПоискомРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + ВнешниеПараметрыУправлениеПоискомКонтекстноеМеню + 135 + true + + SearchControlAddition + ВнешниеПараметры + + true + + + + ВнешниеПараметрыРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + + ВнешниеПараметрыКонтекстноеМеню + 125 + true + + true + 12 + true + true + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + None + None + None + true + + + true + true + + true + + + <key>ru</key> + <value>Параметры отображения</value> + + + СтраницаПараметрыЧатаРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + 33 + + ГруппаСтраницыРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Pages + + Auto + Auto + + + + ГруппаОсновноеПраво + 113 + + ПредварительныйПросмотр + 115 + + <key>ru</key> + <value>Предварительный просмотр</value> + + true + true + + true + + + ПредварительныйПросмотр + + None + + ПредварительныйПросмотрРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + ПредварительныйПросмотрКонтекстноеМеню + 116 + true + + HTMLDocumentField + Enter + true + Left + true + + + DocumentComplete + ПредварительныйПросмотрДокументСформирован + + 19 + true + 1 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Основное право</value> + + 44 + 32 + + ГруппаОсновноеПравоРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Основное</value> + + + ГруппаОсновноеРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Отключить + 99 + + <key>ru</key> + <value>Отключить</value> + + true + + true + + + ОтключитьРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.Command.Отключить + Normal + Auto + true + true + UserCmds + Auto + + + Закрыть + 28 + + <key>ru</key> + <value>Активировать</value> + + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.Активизировать + Auto + true + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + Vertical + true + true + true + auto + true + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + 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> + + 6 + + String + + + + true + + + true + + + + ПредварительныйПросмотр + + <key>ru</key> + <value>Предварительный просмотр</value> + + 3 + + String + + + + true + + + true + + + + ПараметрыОтображения + + <key>ru</key> + <value>Параметры отображения</value> + + 5 + + ValueTable + + + true + + + true + + + Имя + 1 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 3 + + String + + + + true + + + true + + + + ПредставлениеЗначения + + <key>ru</key> + <value>Представление значения</value> + + 4 + + Boolean + String + Color + Number + + 10 + + + + + true + + + true + + + + Значение + 2 + + String + + + + true + + + true + + + + СписокЗначений + 6 + + + true + + + true + + + + Тип + 7 + + String + + + + true + + + true + + + + СтандартноеЗначение + 8 + + String + + + + true + + + true + + + + КнопкаВыбора + 9 + + + true + + + true + + + + + ИнтеграцияИспользуется + 10 + + Boolean + + + 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 + + + СохранитьФайлВебСтраницы + + <key>ru</key> + <value>Пример веб-страницы</value> + + 4 + + ru + Сохранить файл веб страницы + + + true + + + CommonPicture.СохранитьФайлКак + + + + СохранитьФайлВебСтраницы + + + Auto + Auto + + + Идентификатор + + 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..af0b126c1 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВебЧат/Help/ru.html @@ -0,0 +1,64 @@ + +

          Подключение бота для веб-сайта

          +

          Данный тип подключения предназначен для обеспечения возможности общения посетителей веб-сайта с пользователями учетной системы.

          +

          Инструкция по настройке:

          +

          +
          +
          1. Настроить (при необходимости) на соответствующей вкладке параметры отображения
          +
          2. Нажать Активизировать
          +
          3. После успешной активации поле Точка подключения будет заполнено.
          +
          4. Обратиться к техническому специалисту, ответственному за сопровождение сайта, сообщить ему Точку подключения. При необходимости предоставить файл с примером веб-страницы. Файл с примером можно сохранить, нажав на гиперссылку Пример веб-страницы.
          +

          Параметры отображения.

          +

          +
          Видеозвонки - возможность совершать видеозвонки. Допустимые значения:
          +

          +
          Доступны - позволяет совершать видеозвонки в чат и из чата
          +
          Доступны только в чат - позволяет совершать видеозвонки в чат, но запрещает совершать видеозвонки из чата
          +
          Недоступны - запрещает совершать видеозвонки в чат и из чата
          +

          +
          Ключ подписи - ключ подписи, который используется для сопоставления пользователя чата и системы взаимодействия. Необязательный параметр.
          +

          +
          Местоположение чата - положение свернутого окна с чатом относительно окна страницы. Допустимые значения:
          +

          +
          Слева
          +
          Снизу
          +
          Справа
          +

          +
          Выравнивание чата - вертикальное положение свернутого окна с чатом. Допустимые значения:
          +
          +

          +
          +
          Сверху
          +
          +
          По центру
          +
          +
          Снизу
          +

          +
          Ориентация кнопки чата в мобильной версии - положение кнопки чата в мобильной версии. Допустимые значения:
          +

          +
          +
          Справа снизу
          +
          Слева снизу
          +

          +
          Цветовая тема - Цветовая схема окна с чатом. По умолчанию используется такая же тема, что и в веб-браузере. Допустимые значения:
          +

          +
          Авто
          +
          Светлая
          +
          Темная
          +

          +
          Текст заголовка чата - текст, который будет отображаться в заголовке чата. Необязательный параметр.
          +

          +
          Цвет фона заголовка чата - фоновый цвет заголовка чата.
          +

          +
          Цвет текста заголовка чата - цвет текста заголовка чата.
          +

          +
          Показывать аватары - отображение картинок пользователей в чате. Допустимые значения:
          +

          +
          Да
          +
          Нет
          +

          +
          Состояние камеры пользователя приложения по умолчанию - включает или выключает камеру клиентского устройства при начале видеозвонка
          +

          +
          Код языка чата - язык локализации чата (включая служебные сообщения).
          +

          +

          \ 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..5dea4e7c7 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/СозданиеБотаВебЧат/Module.bsl @@ -0,0 +1,765 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ФормаЗакрывается; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ОписаниеИнтеграции = Неопределено; + + Если Параметры.Идентификатор <> Неопределено Тогда + + ОписаниеИнтеграции = СистемаВзаимодействия.ПолучитьИнтеграцию(Параметры.Идентификатор); + Если ОписаниеИнтеграции <> Неопределено Тогда + + Наименование = ОписаниеИнтеграции.Представление; + НавигационнаяСсылкаТочкиПодключения = ОписаниеИнтеграции.НавигационнаяСсылкаТочкиПодключения; + + Участники.Очистить(); + Для каждого ПользовательИБ Из Обсуждения.ПользователиИнформационнойБазы(ОписаниеИнтеграции.Участники) Цикл + Участники.Добавить().Пользователь = ПользовательИБ.Значение; + КонецЦикла; + + ИнтеграцияИспользуется = ОписаниеИнтеграции.Использование; + Если ИнтеграцияИспользуется Тогда + Элементы.Закрыть.Заголовок = НСтр("ru='Записать и закрыть'"); + Элементы.Отключить.Видимость = Истина; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ОбсужденияЛокализация.ПриЗаполненииИнструкцииДляПодключенияИнтеграции(Элементы.Инструкция.Заголовок, + ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат); + + ЗаполнитьПараметрыИнтеграцииВебЧата(ОписаниеИнтеграции); + ОбновитьПредварительныйПросмотр(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + + Для Каждого Параметр Из ПараметрыОтображения Цикл + ОбновитьПараметрыОриентацииПросмотра(Параметр); + ОбновитьПредставлениеПараметраПоЗначению(Параметр); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + Если ФормаЗакрывается = Истина И Не ЗавершениеРаботы Тогда + Закрыть(Истина); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПредварительныйПросмотрДокументСформирован(Элемент) + + ОбновитьПараметрыПредварительногоПросмотра(); + + ОбъектСтраницы = Элементы.ПредварительныйПросмотр.Документ.defaultView; + ОбъектСтраницы.initString("today", НСтр("ru = 'Сегодня'")); + ОбъектСтраницы.initString("administrator", НСтр("ru = 'Администратор'")); + ОбъектСтраницы.initString("text1", НСтр("ru = 'Добрый день. Могу чем-то помочь?'")); + ОбъектСтраницы.initString("text2", НСтр("ru = 'Добрый день. Меня интересует подключение вашего стороннего сервиса на мой сайт.'")); + ОбъектСтраницы.initString("time", НСтр("ru = '14:53'")); + ОбъектСтраницы.initString("textareaTooltip", НСтр("ru = 'Введите сообщение...'")); + ОбъектСтраницы.initString("attachFileTooltip", НСтр("ru = 'Прикрепить файл'")); + + // АПК:1036-выкл Специализированный термин. + ОбъектСтраницы.initString("videoCallTooltip", НСтр("ru = 'Видеозвонок'")); + // АПК:1036-вкл + + ОбъектСтраницы.initString("closeTooltip", НСтр("ru = 'Закрыть'")); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыУчастники + +&НаКлиенте +Процедура ВнешниеПараметрыПриИзменении(Элемент) + + ОбновитьПараметрыПредварительногоПросмотра(); + + Если ФормаЗакрывается = Истина Тогда + Элементы.Закрыть.Заголовок = НСтр("ru='Записать и закрыть'"); + ИнтеграцияИспользуется = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешниеПараметрыПриАктивацииСтроки(Элемент) + + ОбновитьПредставлениеТекущихДанных(); + +КонецПроцедуры + +&НаКлиенте +Процедура УчастникиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + + Для каждого ПодобранныйПользователь Из ВыбранноеЗначение Цикл + Если Участники.НайтиСтроки(Новый Структура("Пользователь", ПодобранныйПользователь)).Количество() = 0 Тогда + Участники.Добавить().Пользователь = ПодобранныйПользователь; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ВнешниеПараметрыПредставлениеЗначенияПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ВнешниеПараметры.ТекущиеДанные; + + Если ТекущиеДанные.Тип = "Цвет" Тогда + ТекущиеДанные.ПредставлениеЗначения = ТекущиеДанные.ПредставлениеЗначения.ПолучитьАбсолютный(); + КонецЕсли; + + ОбновитьЗначениеПараметраПоПредставлению(ТекущиеДанные); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешниеПараметрыПредставлениеЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.ВнешниеПараметры.ТекущиеДанные; + + Если ТекущиеДанные.Имя = "signKey" Тогда + + СтандартнаяОбработка = Ложь; + + ТекущиеДанные.ПредставлениеЗначения = СгенерироватьСлучайныйКлюч(); + ОбновитьЗначениеПараметраПоПредставлению(ТекущиеДанные); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Подобрать(Команда) + ОбсужденияСлужебныйКлиент.НачатьПодборУчастниковОбсуждения(Элементы.Участники); +КонецПроцедуры + +&НаКлиенте +Процедура АктивироватьБота(Команда) + + Если ФормаЗакрывается = Истина Тогда + Закрыть(Истина); + Возврат; + КонецЕсли; + + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + Попытка + АктивироватьСервер(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось активировать чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + + Если ИнтеграцияИспользуется Тогда + Закрыть(Истина); + Возврат; + КонецЕсли; + + Элементы.Закрыть.Заголовок = НСтр("ru='Закрыть'"); + ФормаЗакрывается = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура Отключить(Команда) + Попытка + ОтключитьСервер(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось отключить чат-бот по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + Закрыть(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайлВебСтраницы(Команда) + + ТекстСообщения = НСтр("ru = 'Для сохранения файла необходимо установить расширение для веб-клиента 1С:Предприятие.'"); + + ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьФайлВебСтраницыПродолжение", ЭтотОбъект); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(ОписаниеОповещения, ТекстСообщения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Асинх Процедура СохранитьФайлВебСтраницыПродолжение(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт + + Если Не РасширениеРаботыСФайламиПодключено Тогда + Возврат; + КонецЕсли; + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Сохранение файла'"); + ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Файлы HTML (*.html)|*.html|Все файлы (*.*)|*.*'"); + + ВыбранныеФайлы = Ждать ДиалогВыбораФайла.ВыбратьАсинх(); + Если ВыбранныеФайлы = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(СодержимоеФайлаВебСтраницы()); + + Попытка + РезультатЗаписи = Ждать ТекстовыйДокумент.ЗаписатьАсинх(ВыбранныеФайлы[0]); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, + НСтр("ru='Не удалось сохранить файл по причине:'"), Истина); + ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке); + КонецПопытки; + + Если РезультатЗаписи = Истина Тогда + + Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Файл сохранен в %1'"), + ВыбранныеФайлы[0]); + + ДополнительныеПараметры = Новый Структура("ИмяФайла", ВыбранныеФайлы[0]); + ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьФайлВебСтраницыОткрытьКаталогФайла", + ЭтотОбъект, ДополнительныеПараметры); + + ПоказатьОповещениеПользователя(НСтр("ru='Сохранение файла'"), ОписаниеОповещения, Пояснение, + БиблиотекаКартинок.Информация32); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайлВебСтраницыОткрытьКаталогФайла(ДополнительныеПараметры) Экспорт + + ФайловаяСистемаКлиент.ОткрытьПроводник(ДополнительныеПараметры.ИмяФайла); + +КонецПроцедуры + +&НаКлиенте +Функция СодержимоеФайлаВебСтраницы() + + СодержимоеФайла = " + | + | + | + | + | + | + | + | + |"; + + ПредставлениеТочкиПодключения = НСтр("ru='Подставить точку подключения'"); + + ПодстрокаЗамены = ?(ПустаяСтрока(НавигационнаяСсылкаТочкиПодключения), + ПредставлениеТочкиПодключения, НавигационнаяСсылкаТочкиПодключения); + + Возврат СтрШаблон(СодержимоеФайла, ПодстрокаЗамены); + +КонецФункции + +&НаСервере +Процедура АктивироватьСервер() + + ПараметрыИнтеграции = ОбсужденияСлужебный.ПараметрыИнтеграции(); + ПараметрыИнтеграции.Идентификатор = Параметры.Идентификатор; + ПараметрыИнтеграции.Ключ = Наименование; + ПараметрыИнтеграции.Тип = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат; + ПараметрыИнтеграции.Участники = Участники.Выгрузить(, "Пользователь").ВыгрузитьКолонку("Пользователь"); + + Для Каждого ВнешнийПараметр Из ПараметрыОтображения Цикл + ПараметрыИнтеграции.Вставить(ВнешнийПараметр.Имя, ВнешнийПараметр.Значение); + КонецЦикла; + + Попытка + ОписаниеИнтеграции = ОбсужденияСлужебный.СоздатьИзменитьИнтеграцию(ПараметрыИнтеграции); + // Из-за особенностей реализации Системы взаимодействия требуется повторный вызов. + Интеграция = СистемаВзаимодействия.ПолучитьИнтеграцию(ОписаниеИнтеграции.Идентификатор) + Исключение + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + Если Интеграция <> Неопределено Тогда + НавигационнаяСсылкаТочкиПодключения = Интеграция.НавигационнаяСсылкаТочкиПодключения; + Параметры.Идентификатор = Интеграция.Идентификатор; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОтключитьСервер() + ОбсужденияСлужебный.ОтключитьИнтеграцию(Параметры.Идентификатор); +КонецПроцедуры + +#Область ПараметрыВебЧата + +&НаСервере +Процедура ЗаполнитьПараметрыИнтеграцииВебЧата(ОписаниеИнтеграции = Неопределено) + + Если Не Обсуждения.ОбсужденияДоступны() Тогда + Возврат; + КонецЕсли; + + ТипВнешнейСистемы = ОбсужденияСлужебныйКлиентСервер.ТипыВнешнихСистем().ВебЧат; + + Попытка + ОписаниеВнешнейСистемы = СистемаВзаимодействия.ПолучитьОписаниеВнешнейСистемы(ТипВнешнейСистемы); + Исключение + ЗаписьЖурналаРегистрации(ОбсужденияСлужебный.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка, , , + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + ПараметрыОтображения.Очистить(); + + Для Каждого ПараметрВнешнейСистемы Из ОписаниеВнешнейСистемы.ОписанияПараметров Цикл + ПараметрВебЧата = ПараметрыОтображения.Добавить(); + ПараметрВебЧата.Имя = ПараметрВнешнейСистемы.Имя; + КонецЦикла; + + Если ОписаниеИнтеграции <> Неопределено Тогда + + Для Каждого Параметр Из ОписаниеИнтеграции.ПараметрыВнешнейСистемы Цикл + + Отбор = Новый Структура("Имя", Параметр.Ключ); + НайденныеСтроки = ПараметрыОтображения.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 0 Тогда + ВнешнийПараметр = ПараметрыОтображения.Добавить(); + ВнешнийПараметр.Имя = Параметр.Ключ; + Иначе + ВнешнийПараметр = НайденныеСтроки[0]; + КонецЕсли; + + ВнешнийПараметр.Значение = Параметр.Значение; + + КонецЦикла; + + КонецЕсли; + + Для Каждого ПараметрВебЧата Из ПараметрыОтображения Цикл + ЗаполнитьДанныеПараметра(ПараметрВебЧата); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПараметрыОриентацииПросмотра(ПараметрВебЧата) + + Если ПараметрВебЧата.Имя = "orientation" Или ПараметрВебЧата.Имя = "orientationPadding" Тогда + ОбновитьОтступыОриентации(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтступыОриентации() + + Отбор = Новый Структура("Имя", "orientation"); + НайденныеСтроки = ПараметрыОтображения.НайтиСтроки(Отбор); + + Если Не НайденныеСтроки.Количество() Тогда + Возврат; + КонецЕсли; + + ПараметрОриентации = НайденныеСтроки[0]; + + Отбор = Новый Структура("Имя", "orientationPadding"); + НайденныеСтроки = ПараметрыОтображения.НайтиСтроки(Отбор); + + Если Не НайденныеСтроки.Количество() Тогда + Возврат; + КонецЕсли; + + ПараметрОтступа = НайденныеСтроки[0]; + + Если ПараметрОриентации.Значение = "bottom" Тогда + ПараметрОтступа.СписокЗначений.Очистить(); + ПараметрОтступа.СписокЗначений.Вставить("_0", НСтр("ru = 'Слева'")); + ПараметрОтступа.СписокЗначений.Вставить("_50", НСтр("ru = 'По центру'")); + ПараметрОтступа.СписокЗначений.Вставить("_100", НСтр("ru = 'Справа'")); + ИначеЕсли ПараметрОриентации.Значение = "left" Или ПараметрОриентации.Значение = "right" Тогда + ПараметрОтступа.СписокЗначений.Очистить(); + ПараметрОтступа.СписокЗначений.Вставить("_100", НСтр("ru = 'Сверху'")); + ПараметрОтступа.СписокЗначений.Вставить("_50", НСтр("ru = 'По центру'")); + ПараметрОтступа.СписокЗначений.Вставить("_0", НСтр("ru = 'Снизу'")); + КонецЕсли; + + ОбновитьПредставлениеПараметраПоЗначению(ПараметрОтступа); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПараметрыПредварительногоПросмотра() + + ОкноПросмотраВебСтраницы = Элементы.ПредварительныйПросмотр.Документ.defaultView; + + Для Каждого ПараметрОтображения Из ПараметрыОтображения Цикл + ОкноПросмотраВебСтраницы.updatePreview(ПараметрОтображения.Имя, ПараметрОтображения.Значение); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПредставлениеТекущихДанных() + + ТекущиеДанные = Элементы.ВнешниеПараметры.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗначениеПараметра = Элементы.ВнешниеПараметрыПредставлениеЗначения; + ЗначениеПараметра.ОграничениеТипа = Новый ОписаниеТипов(ТекущиеДанные.Тип); + + Если ТекущиеДанные.КнопкаВыбора <> Неопределено Тогда + ЗначениеПараметра.КнопкаВыбора = Истина; + ЗначениеПараметра.КартинкаКнопкиВыбора = ТекущиеДанные.КнопкаВыбора; + Иначе + ЗначениеПараметра.КнопкаВыбора = Ложь; + КонецЕсли; + + ЗначениеПараметра.СписокВыбора.Очистить(); + + Если ТекущиеДанные.СписокЗначений <> Неопределено Тогда + ЗначениеПараметра.РежимВыбораИзСписка = Истина; + Для Каждого Значение Из ТекущиеДанные.СписокЗначений Цикл + ЗначениеПараметра.СписокВыбора.Добавить(Значение.Значение); + КонецЦикла; + Иначе + ЗначениеПараметра.РежимВыбораИзСписка = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПреобразоватьHexВDec(Число) + + Словарь = "0123456789ABCDEF"; + Результат = 0; + + ЭлементовВЧисле = СтрДлина(Число); + + Для Позиция = 1 По ЭлементовВЧисле Цикл + Результат = Результат + ((СтрНайти(Словарь, Сред(Число, Позиция, 1)) - 1) * Pow(16, ЭлементовВЧисле - Позиция)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПреобразоватьDecВHex(Число) + + Словарь = "0123456789ABCDEF"; + + Часть1 = Int(Число / 16); + Часть2 = Число - (Часть1 * 16); + + Возврат Сред(Словарь, Часть1 + 1, 1) + Сред(Словарь, Часть2 + 1, 1); + +КонецФункции + +&НаСервере +Процедура ЗаполнитьДанныеПараметра(ПараметрВебЧата) + + Если ПараметрВебЧата.Имя = "allowVideoconferences" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Видеозвонки'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.СтандартноеЗначение = "allowed"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + ПараметрВебЧата.СписокЗначений.Вставить("allowed", НСтр("ru = 'Доступны'")); + ПараметрВебЧата.СписокЗначений.Вставить("allowedToWebChatOnly", НСтр("ru = 'Доступны только в чат'")); + ПараметрВебЧата.СписокЗначений.Вставить("disallowed", НСтр("ru = 'Недоступны'")); + + ИначеЕсли ПараметрВебЧата.Имя = "defaultApplicationUserCameraState" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Состояние камеры пользователя приложения по умолчанию'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.СтандартноеЗначение = "on"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + ПараметрВебЧата.СписокЗначений.Вставить("on", НСтр("ru = 'Включена'")); + ПараметрВебЧата.СписокЗначений.Вставить("off", НСтр("ru = 'Выключена'")); + + ИначеЕсли ПараметрВебЧата.Имя = "signKey" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Ключ подписи'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.КнопкаВыбора = БиблиотекаКартинок.Перечитать; + + ИначеЕсли ПараметрВебЧата.Имя = "orientation" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Местоположение чата'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.СтандартноеЗначение = "bottom"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + ПараметрВебЧата.СписокЗначений.Вставить("left", НСтр("ru = 'Слева'")); + ПараметрВебЧата.СписокЗначений.Вставить("bottom", НСтр("ru = 'Снизу'")); + ПараметрВебЧата.СписокЗначений.Вставить("right", НСтр("ru = 'Справа'")); + + ИначеЕсли ПараметрВебЧата.Имя = "orientationPadding" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Выравнивание чата'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.СтандартноеЗначение = "100"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + + ИначеЕсли ПараметрВебЧата.Имя = "mobileButtonOrientation" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Ориентация кнопки чата в мобильной версии'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.СтандартноеЗначение = "rightBottom"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + ПараметрВебЧата.СписокЗначений.Вставить("leftBottom", НСтр("ru = 'Слева снизу'")); + ПараметрВебЧата.СписокЗначений.Вставить("rightBottom", НСтр("ru = 'Справа снизу'")); + + ИначеЕсли ПараметрВебЧата.Имя = "colorTheme" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Цветовая тема'"); + ПараметрВебЧата.Тип = "Строка"; + ПараметрВебЧата.СтандартноеЗначение = "auto"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + ПараметрВебЧата.СписокЗначений.Вставить("auto", НСтр("ru = 'Авто'")); + ПараметрВебЧата.СписокЗначений.Вставить("light", НСтр("ru = 'Светлая'")); + ПараметрВебЧата.СписокЗначений.Вставить("dark", НСтр("ru = 'Темная'")); + + ИначеЕсли ПараметрВебЧата.Имя = "titleText" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Текст заголовка чата'"); + ПараметрВебЧата.Тип = "Строка"; + + ИначеЕсли ПараметрВебЧата.Имя = "titleBackColor" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Цвет фона заголовка чата'"); + ПараметрВебЧата.Тип = "Цвет"; + ПараметрВебЧата.СтандартноеЗначение = "#FBED9E"; + ПараметрВебЧата.КнопкаВыбора = БиблиотекаКартинок.ПолеВводаВыбрать; + + ИначеЕсли ПараметрВебЧата.Имя = "titleTextColor" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Цвет текста заголовка чата'"); + ПараметрВебЧата.Тип = "Цвет"; + ПараметрВебЧата.СтандартноеЗначение = "#333333"; + ПараметрВебЧата.КнопкаВыбора = БиблиотекаКартинок.ПолеВводаВыбрать; + + ИначеЕсли ПараметрВебЧата.Имя = "displayUserPictures" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Показывать аватары'"); + ПараметрВебЧата.Тип = "Булево"; + ПараметрВебЧата.СтандартноеЗначение = "true"; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + ПараметрВебЧата.СписокЗначений.Вставить("true", Истина); + ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь); + + ИначеЕсли ПараметрВебЧата.Имя = "languageCode" Тогда + + ПараметрВебЧата.Представление = НСтр("ru = 'Код языка чата'"); + ПараметрВебЧата.Тип = "Строка"; + + СписокЛокализации = ДоступныеЛокализации(); + Если СписокЛокализации.НайтиПоЗначению(ТекущийКодЛокализации()) <> Неопределено Тогда + ПараметрВебЧата.СтандартноеЗначение = ТекущийКодЛокализации(); + ИначеЕсли СписокЛокализации.НайтиПоЗначению(ТекущийЯзыкСистемы()) <> Неопределено Тогда + ПараметрВебЧата.СтандартноеЗначение = ТекущийЯзыкСистемы(); + Иначе + ПараметрВебЧата.СтандартноеЗначение = "en"; + КонецЕсли; + + ПараметрВебЧата.СписокЗначений = Новый Структура; + Для Каждого ЭлементЛокализации Из СписокЛокализации Цикл + ПараметрВебЧата.СписокЗначений.Вставить(ЭлементЛокализации.Значение, ЭлементЛокализации.Представление); + КонецЦикла; + + Иначе + + ПараметрВебЧата.Представление = ПараметрВебЧата.Имя; + ПараметрВебЧата.Тип = "Строка"; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ДоступныеЛокализации() + + СписокЛокализации = Новый СписокЗначений; + Для каждого КодЛокализации Из ПолучитьДопустимыеКодыЛокализации() Цикл + СписокЛокализации.Добавить(КодЛокализации, ПредставлениеКодаЛокализации(КодЛокализации)); + КонецЦикла; + СписокЛокализации.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + Возврат СписокЛокализации; + +КонецФункции + +&НаСервере +Процедура ОбновитьПредварительныйПросмотр() + + ПредварительныйПросмотр = Обработки.ПодключениеОбсуждений.ПолучитьМакет("МакетОтображенияВебЧата").ПолучитьТекст() + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьПредставлениеПараметраПоЗначению(ПараметрВебЧата) + + Если ПараметрВебЧата.Значение = "" И ПараметрВебЧата.СтандартноеЗначение <> "" Тогда + ПараметрВебЧата.Значение = ПараметрВебЧата.СтандартноеЗначение; + КонецЕсли; + + Представление = Неопределено; + + Если ПараметрВебЧата.Значение <> "" Тогда + + Если ПараметрВебЧата.СписокЗначений <> Неопределено Тогда + + КодПервогоСимвола = КодСимвола(ПараметрВебЧата.Значение, 1); + КлючЗначения = ?(48 <= КодПервогоСимвола И КодПервогоСимвола <= 57, "_" + ПараметрВебЧата.Значение, ПараметрВебЧата.Значение); + + Представление = Неопределено; + ПараметрВебЧата.СписокЗначений.Свойство(КлючЗначения, Представление); + + Если Представление <> Неопределено Тогда + ПараметрВебЧата.ПредставлениеЗначения = Представление; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если Представление = Неопределено Тогда + + Если ПараметрВебЧата.Тип = "Строка" Тогда + ПараметрВебЧата.ПредставлениеЗначения = ПараметрВебЧата.Значение; + ИначеЕсли ПараметрВебЧата.Тип = "Булево" Тогда + ПараметрВебЧата.ПредставлениеЗначения = Булево(ПараметрВебЧата.Значение); + ИначеЕсли ПараметрВебЧата.Тип = "Число" Тогда + ПараметрВебЧата.ПредставлениеЗначения = Число(ПараметрВебЧата.Значение); + ИначеЕсли ПараметрВебЧата.Тип = "Цвет" Тогда + ПараметрВебЧата.ПредставлениеЗначения = ЦветИзТекста(ПараметрВебЧата.Значение); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗначениеПараметраПоПредставлению(ПараметрВебЧата) + + Если ПараметрВебЧата.СписокЗначений <> Неопределено Тогда + + Для Каждого ЭлементСписка Из ПараметрВебЧата.СписокЗначений Цикл + Если ЭлементСписка.Значение = ПараметрВебЧата.ПредставлениеЗначения Тогда + ПараметрВебЧата.Значение = ?(Сред(ЭлементСписка.Ключ, 1, 1) = "_", Сред(ЭлементСписка.Ключ, 2), ЭлементСписка.Ключ); + КонецЕсли; + КонецЦикла; + + Иначе + + Если ПараметрВебЧата.Тип = "Строка" Тогда + ПараметрВебЧата.Значение = ПараметрВебЧата.ПредставлениеЗначения; + ИначеЕсли ПараметрВебЧата.Тип = "Булево" Или ПараметрВебЧата.Тип = "Число" Тогда + ПараметрВебЧата.Значение = Строка(ПараметрВебЧата.ПредставлениеЗначения); + ИначеЕсли ПараметрВебЧата.Тип = "Цвет" Тогда + ЦветРГБ = ПараметрВебЧата.ПредставлениеЗначения.ПолучитьАбсолютный(); + ПараметрВебЧата.Значение = "#" + ПреобразоватьDecВHex(ЦветРГБ.Красный) + + ПреобразоватьDecВHex(ЦветРГБ.Зеленый) + ПреобразоватьDecВHex(ЦветРГБ.Синий); + КонецЕсли; + + КонецЕсли; + + ОбновитьПараметрыОриентацииПросмотра(ПараметрВебЧата); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ЦветИзТекста(Текст) + + Красный = 0; + Зеленый = 0; + Синий = 0; + + Если Сред(Текст, 1, 1) = "#" Тогда + Красный = ПреобразоватьHexВDec(ВРег(Сред(Текст, 2, 2))); + Зеленый = ПреобразоватьHexВDec(ВРег(Сред(Текст, 4, 2))); + Синий = ПреобразоватьHexВDec(ВРег(Сред(Текст, 6, 2))); + КонецЕсли; + + Возврат Новый Цвет(Красный, Зеленый, Синий); + +КонецФункции + +&НаСервереБезКонтекста +Функция СгенерироватьСлучайныйКлюч() + + НовыйКлюч = ""; + ГСЧ = Новый ГенераторСлучайныхЧисел(); + + Для Сч = 1 По 32 Цикл + СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 255); + НовыйКлюч = НовыйКлюч + ПреобразоватьDecВHex(СлучайноеЧисло); + КонецЦикла; + + Возврат НовыйКлюч; + +КонецФункции + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form index e5ca7dca5..9557e77f9 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Form.form @@ -396,6 +396,111 @@ Vertical
          + + ГруппаКомментарийРазрешенДоступКИнтернетСервисам + 127 + + ДекорацияРазрешенДоступКИнтернетСервисам + 129 + + <key>ru</key> + <value>Декорация разрешен доступ к интернет сервисам</value> + + true + true + + true + + + ДекорацияРазрешенДоступКИнтернетСервисамРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + ДекорацияРазрешенДоступКИнтернетСервисамКонтекстноеМеню + 130 + true + + true + true + + + CommonPicture.ИнформацияПоНедоступнымПолям + + AsFileRef + + + + КомментарийРазрешенДоступКИнтернетСервисам + 132 + + <key>ru</key> + <value>Для разблокировки настройки необходимо включить доступ к Интернет-сервисам "Интернет-поддержка и сервисы" — "Разрешить доступ к Интернет-сервисам".</value> + + true + true + + true + + + КомментарийРазрешенДоступКИнтернетСервисамРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + КомментарийРазрешенДоступКИнтернетСервисамКонтекстноеМеню + 133 + true + + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Комментарий разрешен доступ к интернет сервисам</value> + + true + + ГруппаКомментарийРазрешенДоступКИнтернетСервисамРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + ВыборСервераВзаимодействияЛокально 114 @@ -1205,6 +1310,10 @@ -1 Right + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Help/ru.html b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Help/ru.html index b146c022e..80a34e053 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Help/ru.html +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Help/ru.html @@ -1,6 +1,6 @@

          Предназначена для подключения обсуждений.

          -

          Пользователи приложения могут общаться друг с другом посредством текстовых сообщений или видеозвонков, создавать тематические обсуждения и вести переписку по конкретным документам.

          +

          Пользователи приложения могут общаться друг с другом посредством текстовых сообщений или видеозвонков, создавать тематические обсуждения и вести переписку по конкретным документам.

          Для участия в обсуждениях необходимо подключиться к серверу 1С:Диалог.

          Открывается в разделе Администрирование - Интернет-поддержка и сервисы - Обсуждения с помощью кнопки Подключить.

          Подключение обсуждений

          @@ -16,4 +16,4 @@
        • После этого производится подключение обсуждений. Теперь пользователи информационной базы могут общаться между собой.
        • -
        • Нажмите кнопку Готово, для того чтобы продолжить работу в приложении.
        • \ No newline at end of file +
        • Нажмите кнопку Готово, для того чтобы продолжить работу в приложении.
        • \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl index d2c883c8e..91526e873 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Forms/Форма/Module.bsl @@ -16,7 +16,16 @@ Возврат; КонецЕсли; - УстановитьСерверВзаимодействияПоУмолчанию(ЭтотОбъект); + Если ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + УстановитьСерверВзаимодействияПоУмолчанию(ЭтотОбъект); + Элементы.ГруппаКомментарийРазрешенДоступКИнтернетСервисам.Видимость = Ложь; + Иначе + ВыборСервераВзаимодействия = 1; + Элементы.ВыборСервераВзаимодействияДиалог.Доступность = Ложь; + Элементы.ГруппаКомментарийРазрешенДоступКИнтернетСервисам.Видимость = Истина; + ОбновитьЭлементыВыбораСервера(ЭтотОбъект); + Элементы.ГруппаВыборСервераВзаимодействия.Показать(); + КонецЕсли; ИмяИнформационнойБазы = Константы.ЗаголовокСистемы.Получить(); Если Не ЗначениеЗаполнено(ИмяИнформационнойБазы) Тогда @@ -28,6 +37,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "РазрешитьДоступКИнтернетСервисам" Тогда + ПриИзмененииРазрешенияДоступаКИнтернетСервисам(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -104,6 +122,14 @@ &НаКлиенте Процедура ПриПолученииКодаРегистрации() + Если ВыборСервераВзаимодействия = 0 Тогда + ТекстОшибки = РазрешенДоступКИнтернетСервисам(); + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ПоказатьПредупреждение(, ТекстОшибки); + Возврат; + КонецЕсли; + КонецЕсли; + Если ПустаяСтрока(АдресЭлектроннойПочты) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Адрес электронной почты не заполнен'")); Возврат; @@ -118,7 +144,7 @@ ПоказатьПредупреждение(, НСтр("ru='Не указан адрес локального сервера взаимодействия'")); Возврат; КонецЕсли; - + ПараметрыРегистрации = Новый ПараметрыРегистрацииИнформационнойБазыСистемыВзаимодействия; ПараметрыРегистрации.АдресСервера = СерверВзаимодействия; ПараметрыРегистрации.АдресЭлектроннойПочты = АдресЭлектроннойПочты; @@ -350,6 +376,21 @@ Форма.ВыборСервераВзаимодействия <> 0); КонецПроцедуры +&НаСервереБезКонтекста +Функция РазрешенДоступКИнтернетСервисам() + Если Не ОбщегоНазначения.РазрешенДоступКИнтернетСервисам() Тогда + Возврат ОбщегоНазначения.ЗапрещенДоступКИнтернетСервисамТекстСообщения(); + КонецЕсли; + Возврат ""; +КонецФункции + +&НаСервере +Процедура ПриИзмененииРазрешенияДоступаКИнтернетСервисам() + РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам(); + Элементы.ВыборСервераВзаимодействияДиалог.Доступность = РазрешенДоступКИнтернетСервисам; + Элементы.ГруппаКомментарийРазрешенДоступКИнтернетСервисам.Видимость = Не РазрешенДоступКИнтернетСервисам; +КонецПроцедуры + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Templates/МакетОтображенияВебЧата/Template.htmldoc b/SSL/src/DataProcessors/ПодключениеОбсуждений/Templates/МакетОтображенияВебЧата/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Templates/МакетОтображенияВебЧата/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/Templates/МакетОтображенияВебЧата/ru.html b/SSL/src/DataProcessors/ПодключениеОбсуждений/Templates/МакетОтображенияВебЧата/ru.html new file mode 100644 index 000000000..3c1346355 --- /dev/null +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/Templates/МакетОтображенияВебЧата/ru.html @@ -0,0 +1,407 @@ + +
          + +
          + +
          + +
          + +
          + +
          + +
          + + + +
          + +
          +
          + +
          + + + + +
          +
          +
          + +
          + +
          + +
          + +
          + +
          +
          + +
          + +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          +
          +
          +
          + +
          + +
          + +
          +
          +
          + +
          + +
          + +
          + +
          + +
          + +
          +
          +
          +
          +
          + +
          + +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          +
          +
          +
          + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo b/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo index 6f3c2c43f..4f7084bed 100644 --- a/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo +++ b/SSL/src/DataProcessors/ПодключениеОбсуждений/ПодключениеОбсуждений.mdo @@ -26,19 +26,24 @@ MobileDevice - НастройкиСообщенийИзДругихПрограмм + НастройкиСообщенийИзДругихПриложений ru Настройки сообщений из других приложений + + + ru + + PersonalComputer MobileDevice - СозданиеБотаТелеграм + СозданиеБотаTelegram ru - Создание бота телеграм + Создание бота Telegram PersonalComputer MobileDevice @@ -52,6 +57,47 @@ PersonalComputer MobileDevice + + СозданиеБотаWhatsApp + + ru + Создание бота WhatsApp + + // АПК:356 Используется оригинальное наименование ПО + PersonalComputer + MobileDevice + + + СозданиеБотаВебЧат + + ru + Создание бота веб-чата + + + + ru + + + PersonalComputer + MobileDevice + + + СозданиеБотаWebhook + + ru + Создание бота Webhook + + PersonalComputer + MobileDevice + + + МакетОтображенияВебЧата + + ru + Макет отображения веб чата + + HTMLDocument + ОтключениеОбсуждений @@ -62,7 +108,7 @@ Auto - НастройкиСообщенийИзДругихПрограмм + НастройкиСообщенийИзДругихПриложений ru Настройки сообщений из других приложений diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form index b38368f12..1094d09be 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form @@ -350,6 +350,20 @@ DontUse Auto
          + + ОбластьПоискаДублей + + String + + + + + АдресНастроек + + String + + + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl index bb5f0eeed..40793f96b 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl @@ -6,10 +6,6 @@ // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// -// Ожидаются параметры: -// -// ОбластьПоискаДублей - Строка - Полное имя метаданных таблицы ранее выбранной области поиска. -// // Возвращается результатом выбора: // // Неопределено - Отказ от редактирования. @@ -21,8 +17,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Параметры.Свойство("ОбластьПоискаДублей", ОбластьПоУмолчанию); - Параметры.Свойство("АдресНастроек", АдресНастроек); + ОбластьПоУмолчанию = Параметры.ОбластьПоискаДублей; + АдресНастроек = Параметры.АдресНастроек; ИнициализироватьСписокОбластейПоискаДублей(); КонецПроцедуры @@ -61,10 +57,8 @@ Возврат; ИначеЕсли Элемент.Значение = ОбластьПоУмолчанию Тогда - // Не было изменений Закрыть(); Возврат; - КонецЕсли; ОповеститьОВыборе(Элемент.Значение); diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index adbfc1ee9..38cb95926 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -5924,7 +5924,7 @@ 11 ru - Вернутся на предыдущий шаг + Вернуться на предыдущий шаг true diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 57a6b316f..815e2c7a5 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -9,7 +9,7 @@ #Область ОписаниеПеременных &НаКлиенте -Перем ОтчетыДляОтправки; // Массив из ОтчетОбОшибке +Перем ОтчетыДляОтправки; // Массив из ОтчетОбОшибке #КонецОбласти @@ -724,8 +724,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Программный интерфейс мастера +#Область ПереключениеСтраницМастера &НаСервере Процедура ИнициализироватьНастройкиПошаговогоМастера() @@ -843,6 +842,8 @@ КонецПроцедуры +#КонецОбласти + #Область СобытияМастера &НаКлиенте @@ -1088,8 +1089,7 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Служебные. +#Область Служебные &НаСервере Функция НастройкиПоискаУдаленияДублей() @@ -1626,23 +1626,24 @@ &НаСервереБезКонтекста Функция ДоступныеРеквизитыОтбора(ОбъектМетаданных) - МассивРеквизитов = Новый Массив; + Результат = Новый Массив; Для Каждого РеквизитМетаданные Из ОбъектМетаданных.СтандартныеРеквизиты Цикл - Если Не РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) - Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(РеквизитМетаданные) Тогда - МассивРеквизитов.Добавить(РеквизитМетаданные.Имя); + Если Не РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Результат.Добавить(РеквизитМетаданные.Имя); КонецЕсли КонецЦикла; Для Каждого РеквизитМетаданные Из ОбъектМетаданных.Реквизиты Цикл - Если Не РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда - МассивРеквизитов.Добавить(РеквизитМетаданные.Имя); + Если Не РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(РеквизитМетаданные) Тогда + Результат.Добавить(РеквизитМетаданные.Имя); КонецЕсли КонецЦикла; - Возврат СтрСоединить(МассивРеквизитов, ","); + Возврат СтрСоединить(Результат, ","); КонецФункции &НаСервереБезКонтекста -Процедура ДобавитьПравилаРеквизитов(ТаблицаПравил, Знач ИсключаемыеРеквизиты, Знач ВсеВариантыСравнения, Знач КоллекцияРеквизитов, Знач ДоступенНечеткийПоиск) +Процедура ДобавитьПравилаРеквизитов(ТаблицаПравил, Знач ИсключаемыеРеквизиты, Знач ВсеВариантыСравнения, + Знач КоллекцияРеквизитов, Знач ДоступенНечеткийПоиск) Для Каждого МетаданныеРеквизита Из КоллекцияРеквизитов Цикл @@ -1668,8 +1669,7 @@ ЭтоХранилище = ДоступныеТипы.СодержитТип(Тип("ХранилищеЗначения")); Если ЭтоХранилище Тогда - // Нельзя сравнивать - Возврат Неопределено; + Возврат Неопределено; // Нельзя сравнивать КонецЕсли; ЭтоСтрока = ДоступныеТипы.СодержитТип(Тип("Строка")); @@ -1677,15 +1677,14 @@ И ДоступныеТипы.КвалификаторыСтроки.Длина <> 0; Если ЭтоСтрока И Не ЭтоФиксированнаяСтрока Тогда - // Нельзя сравнивать - Возврат Неопределено; + Возврат Неопределено; // Нельзя сравнивать КонецЕсли; Результат = Новый СписокЗначений; - ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[0]); // Совпадает + ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[0]); // Совпадает Если ДоступенНечеткийПоиск И ЭтоСтрока Тогда - ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[1]); // Похоже + ЗаполнитьЗначенияСвойств(Результат.Добавить(), ВсеВариантыСравнения[1]); // Похоже КонецЕсли; Возврат Результат; @@ -1696,17 +1695,16 @@ Картинка = КешКартинок[Вид]; Если Картинка = Неопределено Тогда - Картинка = БиблиотекаКартинок[Вид]; КешКартинок.Вставить(Вид, Картинка); - КонецЕсли; Возврат Картинка; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с длительными операциями +#КонецОбласти + +#Область РаботаСДлительнымиОперациями &НаКлиенте Процедура НайтиИУдалитьДублиКлиент() @@ -1740,8 +1738,7 @@ Элементы.ВыполнениеПоиска.ОтображениеСостояния.Текст = НСтр("ru = 'Поиск дублей...'"); - ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ФоновыйПоискДублей"; - НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Поиск дублей'"); + ИмяПроцедуры = "Обработка.ПоискИУдалениеДублей.МодульОбъекта.ФоновыйПоискДублей"; ПараметрыПроцедуры.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); ПараметрыПроцедуры.Вставить("МаксимальноеЧислоДублей", 1500); МассивПравилПоиска = Новый Массив; @@ -1754,7 +1751,7 @@ ПараметрыПроцедуры.Вставить("СкрыватьНезначимыеДубли", СкрыватьНезначимыеДубли); НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - НастройкиЗапуска.НаименованиеФоновогоЗадания = НаименованиеМетода; + НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск и удаление дублей: Поиск дублей'"); Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, НастройкиЗапуска); @@ -1768,18 +1765,14 @@ Элементы.ВыполнениеУдаления.ОтображениеСостояния.Текст = НСтр("ru = 'Обработка дублей...'"); - ИмяПроцедуры = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя() + ".МодульОбъекта.ФоновоеУдалениеДублей"; - НаименованиеМетода = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); - + ИмяПроцедуры = "Обработка.ПоискИУдалениеДублей.МодульОбъекта.ФоновоеУдалениеДублей"; + НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); - НастройкиЗапуска.НаименованиеФоновогоЗадания = НаименованиеМетода; + НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Поиск и удаление дублей: Удаление дублей'"); КоличествоПорций = ПараметрыУдаления.Количество(); Возврат ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков(ИмяПроцедуры, НастройкиЗапуска, ПараметрыУдаления); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Некорректная операция %1.'"), Строка(ТекущаяСтраница)); КонецЕсли; КонецФункции @@ -1838,23 +1831,10 @@ ЭтоЗамена = СтрНачинаетсяС(ИсходныйТекстПрогресса, НСтр("ru = 'Замена дублей'")); ИмяРеквизитаПрогресса = ?(ЭтоЗамена, "КоличествоОбработанных", "КоличествоУдаленных"); - Отбор = Новый Структура; - Отбор.Вставить("НомерСеанса", ПараметрыПрогресса.НомерСеанса); - СтрокиТаблицы = ПрогрессУдаления.НайтиСтроки(Отбор); - Если СтрокиТаблицы.Количество() = 0 Тогда - СтрокаТаблицы = ПрогрессУдаления.Добавить(); - СтрокаТаблицы.НомерСеанса = ПараметрыПрогресса.НомерСеанса; - ПредыдущееКоличествоОбработанных = 0; - Иначе - СтрокаТаблицы = СтрокиТаблицы[0]; - ПредыдущееКоличествоОбработанных = СтрокаТаблицы[ИмяРеквизитаПрогресса]; - КонецЕсли; - СтрокаТаблицы[ИмяРеквизитаПрогресса] = ПараметрыПрогресса.КоличествоОбработанных; - ДобавляемыйПрогресс = (ПараметрыПрогресса.КоличествоОбработанных - ПредыдущееКоличествоОбработанных); Если ЭтоЗамена Тогда - ОбщееКоличествоОбработанных = ОбщееКоличествоОбработанных + ДобавляемыйПрогресс; + ОбщееКоличествоОбработанных = ОбщееКоличествоОбработанных + ПараметрыПрогресса.КоличествоОбработанных; Иначе - ОбщееКоличествоУдаленных = ОбщееКоличествоУдаленных + ДобавляемыйПрогресс; + ОбщееКоличествоУдаленных = ОбщееКоличествоУдаленных + ПараметрыПрогресса.КоличествоОбработанных; КонецЕсли; ТекстПрогресса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2342,8 +2322,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции мастера +#КонецОбласти + +#Область СлужебныеПроцедурыИФункцииМастера // Описание настроек кнопки мастера. // @@ -2421,4 +2402,6 @@ Возврат НСтр("ru='Элементы, среди которых возможны дубли'"); КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html index afbc37441..9533c63bb 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html @@ -4,26 +4,26 @@

          Ввод условий отбора

          • Нажмите Добавить новый элемент.
          • -
          •  Выберите из списка Поле, по которому производить отбор. +
          • Выберите из списка Поле, по которому производить отбор.
          • -
          • В колонке Вид сравнения  Выберите условие сравнения. В зависимости от выбранного списка могут быть доступны как стандартные виды сравнения (Равно, Не равно, Больше, Меньше и т.д.), так и более сложные: -
            • С помощью вида сравнения В списке можно задать список возможных значений для отбора. Вид сравнения Не в списке является отрицанием предыдущей.
            • С помощью операции Содержит или Не содержит можно использовать отбор по части поля (сочетанию букв). +
            • В колонке Вид сравнения Выберите условие сравнения. В зависимости от выбранного списка могут быть доступны как стандартные виды сравнения (Равно, Не равно, Больше, Меньше и т.д.), так и более сложные: +
              • С помощью вида сравнения В списке можно задать список возможных значений для отбора. Вид сравнения Не в списке является отрицанием предыдущей.
              • С помощью операции Содержит или Не содержит можно использовать отбор по части поля (сочетанию букв).
              • Определить, есть ли в поле значение, можно с помощью операции Заполнено или Не заполнено.
            • -
            • Настройте Значение. Для этого в зависимости от выбранного поля и вида сравнения  Выберите из предложенного списка значений нужное, введите значение или создайте свой список значений (для операций В списке или Не в списке). +
            • Настройте Значение. Для этого в зависимости от выбранного поля и вида сравнения Выберите из предложенного списка значений нужное, введите значение или создайте свой список значений (для операций В списке или Не в списке).
            • Для удаления отбора нажмите Удалить.
            • -
            • Для подтверждения и возврата в приложение нажмите ОК.

            Группировка условий

            -

            Можно использовать несколько условий для более тонкого отбора. Их можно переставлять местами с помощью мыши или кнопок  и .

            +
          • Для подтверждения и возврата в приложение нажмите ОК.

          Группировка условий

          +

          Можно использовать несколько условий для более тонкого отбора. Их можно переставлять местами с помощью мыши или кнопок и .

          • Если в правиле задается несколько условий без группировки, то по умолчанию к таким условиям применяется логическая операция И.
          • -
          • К выделенным условиям можно применить логические операции И, Или, Не. Для этого в приложении применяются Типы групп: Группа И, Группа Или, Группа Не. -
            • Для того чтобы использовать группировку условий, выделите одно или несколько нужных условий, нажмите Сгруппировать условия.По умолчанию условия включаются в Группу И. +
            • К выделенным условиям можно применить логические операции И, Или, Не. Для этого в приложении применяются Типы групп: Группа И, Группа Или, Группа Не. +
              • Для того чтобы использовать группировку условий, выделите одно или несколько нужных условий, нажмите Сгруппировать условия.По умолчанию условия включаются в Группу И.
              • -
              • При необходимости можно изменить операцию группировки. Для этого с помощью двойного щелчка мыши по Группе откройте ячейку выбора Типа группы. Выберите другой Тип группы. Также можно исправить тип группы вручную. +
              • При необходимости можно изменить операцию группировки. Для этого с помощью двойного щелчка мыши по Группе откройте ячейку выбора Типа группы.Выберите другой Тип группы. Также можно исправить тип группы вручную.
              • С помощью левой кнопки мыши перетащите остальные условия в группу или создайте их внутри группы.
              • Для того чтобы отменить группировку, нажмите Еще - Разгруппировать.

            См. также:

            - \ 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 ec1cb9e21..627b2fef6 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form @@ -891,6 +891,10 @@ + + ОписаниеПрикладныхПравил + + diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html index 1ace79026..ca2c39e5e 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Help/ru.html @@ -1,15 +1,15 @@

            -
            Предназначена для изменения правил поиска дублей в выбранном списке. 
            -
            С помощью этих правил приложение определяет, что элементы являются дублями. Можно ужесточить правила, т.е. ввести сравнение еще по нескольким Реквизитам в дополнение к установленным по умолчанию, тогда дублей будет меньше, например, дублями будут признаны только те товары, у которых совпадает не только Наименование, но и Страна происхождения и т.д.
            -
            Открывается из окна Поиск и удаление дублей в поле Сравнивать с помощью ссылки, которая отражает выбранные правила поиска дублей в указанном списке.
            +
            Предназначена для изменения правил поиска дублей в выбранном списке.
            +
            С помощью этих правил приложение определяет, что элементы являются дублями. Можно ужесточить правила, т.е. ввести сравнение еще по нескольким Реквизитам в дополнение к установленным по умолчанию, тогда дублей будет меньше, например, дублями будут признаны только те товары, у которых совпадает не только Наименование, но и Страна происхождения и т.д.
            +
            Открывается из окна Поиск и удаление дублей в поле Сравнивать с помощью ссылки, которая отражает выбранные правила поиска дублей в указанном списке.

            -
            • Для добавления элементов в правила поиска дублей флажками укажите реквизиты - элементы правила, нажмите Выбрать.
            • +
              • Для добавления элементов в правила поиска дублей флажками укажите реквизиты - элементы правила, нажмите Выбрать.
              • Для некоторых списков при поиске и замене дублей существуют ограничения. Необходимо их учитывать, т.к. отмена ограничений может нарушить целостность информационной базы.
              • В нижней части таблицы предусмотрен флажок Скрывать дубли, помеченные на удаление без мест использования. Если он включен, то при поиске дублей не будут выводиться элементы списков, которые помечены на удаление и нигде не используются.
              • -
                • Например, менеджер Анастасия вводит партнера Магазин "Природа", и менеджер Дарья тоже вводит этого же партнера. Они находят ошибку и договариваются использовать только одного партнера, а второго помечают на удаление. При поиске дублей с включенным флажком Скрывать дубли, помеченные на удаление без мест использования приложение не найдет дублей партнера Магазин "Природа". Если флажок снят, то дубли будут найдены.
              • Для подтверждения выбранных правил поиска нажмите кнопку ОК. После выбора ссылка в окне Поиск и удаление дублей поменяет значение.

              +
              • Например, менеджер Анастасия вводит партнера Магазин "Природа", и менеджер Дарья тоже вводит этого же партнера. Они находят ошибку и договариваются использовать только одного партнера, а второго помечают на удаление. При поиске дублей с включенным флажком Скрывать дубли, помеченные на удаление без мест использования приложение не найдет дублей партнера Магазин "Природа". Если флажок снят, то дубли будут найдены.
            • Для подтверждения выбранных правил поиска нажмите кнопку ОК. После выбора ссылка в окне Поиск и удаление дублей поменяет значение.

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl index 3ef8105e6..ee34d2ad3 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -34,7 +34,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Параметры.Свойство("ОписаниеПрикладныхПравил", ОписаниеПрикладныхПравил); + ОписаниеПрикладныхПравил = Параметры.ОписаниеПрикладныхПравил; ОбластьПоискаДублей = Параметры.ОбластьПоискаДублей; Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Правила поиска дублей ""%1""'"), @@ -234,10 +234,7 @@ &НаСервереБезКонтекста Функция МожноОтменятьПрикладныеПравила() - - Результат = ПравоДоступа("АдминистрированиеДанных", Метаданные); - Возврат Результат; - + Возврат ПравоДоступа("АдминистрированиеДанных", Метаданные); КонецФункции &НаСервере diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html index 5c86cce13..af5cfc0f7 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html @@ -1,48 +1,48 @@ -

            Предназначена для поиска и устранения дублирования элементов во всех списках приложения (для администраторов приложения).

            -

            При работе пользователей в приложении часто ошибочно вводятся дубли (например, неправильно производился поиск элемента, в результате его не нашли и ввели заново), которые мешают правильному учету. В документах указывают то один экземпляр элемента, то другой, в результате при проведении документов возникают неправильные проводки, и баланс не сходится. Поэтому от дублирования в приложении необходимо избавляться.

            +

            Предназначена для поиска и устранения дублирования элементов во всех списках приложения (для администраторов приложения).

            +

            При работе пользователей в приложении часто ошибочно вводятся дубли (например, неправильно производился поиск элемента, в результате его не нашли и ввели заново), которые мешают правильному учету. В документах указывают то один экземпляр элемента, то другой, в результате при проведении документов возникают неправильные проводки, и баланс не сходится. Поэтому от дублирования в приложении необходимо избавляться.

            Приложение позволяет найти вхождения всех дублирующихся элементов и производит в документах замену всех ссылок на дубли ссылками на выбранный "правильный" элемент, затем помечает на удаление дублирующиеся элементы в списке.

            -

            Команду Поиск и удаление дублей можно найти в разделе Администрирование - Обслуживание - Корректировка данных.

            +

            Команду Поиск и удаление дублей можно найти в разделе Администрирование - Обслуживание - Корректировка данных.

            Поиск дублей

            -
            • В поле Искать в  Выберите один из списков приложения. +
              • В поле Искать в Выберите один из списков приложения.
              • В поле Отбирать задайте условия отбора элементов списка, для этого перейдите по ссылке Все элементы (значение по умолчанию) и определите Правила отбора. -
                • Выберите Поле, по которому производить отбор и значение для поиска, в поле Вид сравнения выберите операцию для сравнения и задайте Значение для сравнения. Нажмите ОК для возврата к поиску дублей. Ссылка примет значение условия отбора. +
                  • Выберите Поле, по которому производить отбор и значение для поиска, в поле Вид сравнения выберите операцию для сравнения и задайте Значение для сравнения. Нажмите ОК для возврата к поиску дублей. Ссылка примет значение условия отбора.
                  • Для удаления отбора нажмите .
                • -
                • В поле Сравнивать в виде ссылки автоматически проставляются предопределенные правила поиска дублей в выбранном списке. Для добавления элементов в правила нажмите ссылку, флажками укажите элементы правила, нажмите Выбрать. После выбора ссылка поменяет значение. +
                • В поле Сравнивать в виде ссылки автоматически проставляются предопределенные правила поиска дублей в выбранном списке. Для добавления элементов в правила нажмите ссылку, флажками укажите элементы правила, нажмите Выбрать. После выбора ссылка поменяет значение.
                • По окончании составления условия поиска дублей нажмите Найти дубли.
                • -
                • Если найти дубли не удалось, то можно поменять условия и нажать Найти дубли.

                Список дублей

                +
              • Если найти дубли не удалось, то можно поменять условия и нажать Найти дубли.

              Список дублей

              • Список найденных дублей состоит из двух частей: -
                • В левой части - найденные элементы. Показываются в списке в виде дерева. Список состоит из колонок: -
                  • Наименование. Элементы списка группируются по наименованию; +
                    • В левой части - найденные элементы. Показываются в списке в виде дерева. Список состоит из колонок: +
                      • Наименование. Элементы списка группируются по наименованию;
                      • Код;
                      • Мест использования - количество мест использования элемента.
                    • В правой части выдается информация по выделенным элементам: -
                      • по группе элементов (т.е. по каждому наименованию) - отчет о количестве найденных дублей у выделенного элемента. +
                        • по группе элементов (т.е. по каждому наименованию) - отчет о количестве найденных дублей у выделенного элемента.
                        • -
                        • по элементам - отчет об использовании в приложении (Фраза "Не используется" или перечень документов приложения, в котором использован этот элемент).
                    • -
                    • Один из элементов, которые используются в приложении, автоматически выбирается как  Оригинал. +
                    • по элементам - отчет об использовании в приложении (Фраза "Не используется" или перечень документов приложения, в котором использован этот элемент).
                • +
                • Один из элементов, которые используются в приложении, автоматически выбирается как Оригинал.
                • -
                • Для того чтобы поменять элемент, который необходимо оставить в приложении, выделите его, нажмите кнопку  Отметить как оригинал. +
                • Для того чтобы поменять элемент, который необходимо оставить в приложении, выделите его, нажмите кнопку Отметить как оригинал.
                • Дубли в списке отмечаются флажками.
                • Нажмите Открыть для того, чтобы просмотреть выделенный элемент. Также можно воспользоваться двойным щелчком мыши.
                • -
                • С помощью кнопок  Развернуть группу дублей или  Свернуть группу дублей можно управлять видимостью групп элементов в списке. +
                • С помощью кнопок Развернуть группу дублей или Свернуть группу дублей можно управлять видимостью групп элементов в списке.
                • -
                • В информационной строке внизу списка указывается количество элементов и количество найденных дублей. +
                • В информационной строке внизу списка указывается количество элементов и количество найденных дублей.
                • Если список найденных дублей не устраивает, можно изменить условия поиска и нажать Повторить поиск.

                Удаление дублей

                -
                • Если все перечисленные в информационной строке списка условия устраивают, нажмите Удалить дубли. Дубли будут помечены на удаление, все их вхождения в документах заменяются на выбранный Оригинал. +
                  • Если все перечисленные в информационной строке списка условия устраивают, нажмите Удалить дубли. Дубли будут помечены на удаление, все их вхождения в документах заменяются на выбранный Оригинал.
                  • -
                  • Для выхода без удаления нажмите Закрыть. Условия поиска и список дублей не сохраняются. +
                  • Для выхода без удаления нажмите Закрыть. Условия поиска и список дублей не сохраняются.
                  • -
                  • Окончательно удалить дубли можно по команде Удаление помеченных объектов раздела Администрирование - Обслуживание.

                  Просмотр ссылок на элементы списка дублей

                  -
                  • По ссылке Все места использования можно перейти к просмотру отчета Места использования по элементам, входящим в список дублей, которые используются в документах приложения.

                  См. также:

                  +
                • Окончательно удалить дубли можно по команде Удаление помеченных объектов раздела Администрирование - Обслуживание.

                Просмотр ссылок на элементы списка дублей

                +
                • По ссылке Все места использования можно перейти к просмотру отчета Места использования по элементам, входящим в список дублей, которые используются в документах приложения.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index 57b4ad893..1183dfd36 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -8,7 +8,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныйПрограммныйИнтерфейс +#Область СлужебныеПроцедурыИФункции // Определение менеджера объекта для вызова прикладных правил. // @@ -136,6 +136,8 @@ Результат.Вставить("МестаИспользования"); ТаблицаКандидатов = ТаблицаКандидатов(); + ПараметрыПоискаПохожихСтрок = Неопределено; + КоличествоДублей = 0; Пока СледующийЭлементВыборки(СхемаЗапроса.ВыборкаЭталонныхОбъектов) Цикл ЭталонныйЭлемент = СхемаЗапроса.ВыборкаЭталонныхОбъектов.ТекущийЭлемент; @@ -152,13 +154,15 @@ Если СтруктураЗапроса.ИменаПолейДляСравненияНаПодобие.Количество() > 0 Тогда СравнениеСтрокНаПодобие = ПрикладныеПараметрыПоиска.СравнениеСтрокНаПодобие; - Попытка - ПараметрыПоискаПохожихСтрок = ПоискИУдалениеДублей.ПараметрыПоискаПохожихСтрок(); - Исключение - Результат.ОписаниеОшибки = - НСтр("ru = 'Не удалось подключить компоненту для нечеткого поиска дублей. Подробнее см. в журнале регистрации.'"); - Возврат Результат; - КонецПопытки; + Если ПараметрыПоискаПохожихСтрок = Неопределено Тогда + Попытка + ПараметрыПоискаПохожихСтрок = ПоискИУдалениеДублей.ПараметрыПоискаПохожихСтрок(); + Исключение + Результат.ОписаниеОшибки = + НСтр("ru = 'Не удалось подключить компоненту для нечеткого поиска дублей. Подробнее см. в журнале регистрации.'"); + Возврат Результат; + КонецПопытки; + КонецЕсли; ЗаполнитьЗначенияСвойств(ПараметрыПоискаПохожихСтрок, СравнениеСтрокНаПодобие); Для Каждого ИмяПоля Из СтруктураЗапроса.ИменаПолейДляСравненияНаПодобие Цикл @@ -182,10 +186,12 @@ ЭлементДубль = КандидатыДублей[Число(ИндексСтроки)]; Если ЕстьПравилаПоиска Тогда - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураЗапроса); + ДобавитьСтрокуКандидатов(КоллекцияДублей, ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, + СтруктураЗапроса); Если ТаблицаКандидатов.Количество() = КоличествоЭлементовДляСравнения Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(КоллекцияДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, - ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураЗапроса, ДополнительныеПараметры); + ЗарегистрироватьДублиПоПрикладнымПравилам(КоллекцияДублей, ПолноеИмяОбъектаМетаданных, + МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураЗапроса, + ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе @@ -199,10 +205,12 @@ Для Каждого ЭлементДубль Из КандидатыДублей Цикл Если ЕстьПравилаПоиска Тогда - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, СтруктураЗапроса); + ДобавитьСтрокуКандидатов(КоллекцияДублей, ТаблицаКандидатов, ЭталонныйЭлемент, ЭлементДубль, + СтруктураЗапроса); Если ТаблицаКандидатов.Количество() = КоличествоЭлементовДляСравнения Тогда - ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, МенеджерОбластиПоиска, - ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураЗапроса, ДополнительныеПараметры); + ЗарегистрироватьДублиПоПрикладнымПравилам(ТаблицаДублей, ПолноеИмяОбъектаМетаданных, + МенеджерОбластиПоиска, ЭталонныйЭлемент, ТаблицаКандидатов, СтруктураЗапроса, + ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе @@ -219,11 +227,14 @@ ТаблицаКандидатов.Очистить(); КонецЕсли; - // Обрабатываем непроверенные дубли УдалитьНезначимыеДубли(КоллекцияДублей); УдалитьНезначимыеГруппы(КоллекцияДублей); - // Учитываем ограничение. + Если КоличествоДублей <> ТаблицаДублей.Количество() Тогда + КоличествоДублей = ТаблицаДублей.Количество(); + ДлительныеОперации.СообщитьПрогресс(КоличествоДублей, "ЗарегистрироватьДубль"); + КонецЕсли; + Если РазмерВозвращаемойПорции > 0 И (ТаблицаДублей.Количество() > РазмерВозвращаемойПорции) Тогда Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Найдено слишком много дублей. Показаны только первые %1.'"), РазмерВозвращаемойПорции); @@ -233,7 +244,6 @@ КонецЦикла; - // Расчет мест использования Если РассчитыватьМестаИспользования Тогда ДлительныеОперации.СообщитьПрогресс(0, "РассчитыватьМестаИспользования"); @@ -245,7 +255,7 @@ КонецЕсли; КонецЦикла; - МестаИспользования = МестаИспользованияСсылок(СсылкиОбъектов); + МестаИспользования = ОбщегоНазначения.МестаИспользования(СсылкиОбъектов); МестаИспользования = МестаИспользования.Скопировать( МестаИспользования.НайтиСтроки(Новый Структура("ВспомогательныеДанные", Ложь))); МестаИспользования.Индексы.Добавить("Ссылка"); @@ -267,20 +277,27 @@ Функция ЕстьПрикладныеПравилаОбластиПоискаДублей(Знач ИмяОбъекта) Экспорт СведенияОбОбъекте = ПоискИУдалениеДублей.ОбъектыСПоискомДублей()[ИмяОбъекта]; - Возврат СведенияОбОбъекте <> Неопределено И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); + Возврат СведенияОбОбъекте <> Неопределено + И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); КонецФункции -// Обработчик фонового поиска дублей. +// Обработчик фонового поиска дублей, вызывается из процедуры НайтиИУдалитьДубли формы ПоискДублей. // // Параметры: -// Параметры - Структура - данные для анализа. -// АдресРезультата - Строка - адрес во временном хранилище для сохранения результата. +// ПараметрыПоиска - см. ПоискИУдалениеДублей.ПараметрыПоискаДублей +// АдресРезультата - Строка - адрес во временном хранилище для возврата результата. // Процедура ФоновыйПоискДублей(Знач Параметры, Знач АдресРезультата) Экспорт + НачалоПоискаДублей = ТекущаяДатаСеанса(); + ЗаписьЖурналаРегистрации(ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начат поиск дублей для: %1.'"), Параметры.ОбластьПоискаДублей)); + КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных; - КомпоновщикПредварительногоОтбора.Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.СхемаКомпоновки) ); + КомпоновщикПредварительногоОтбора.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.СхемаКомпоновки)); КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(Параметры.НастройкиКомпоновщикаПредварительногоОтбора); Параметры.Вставить("КомпоновщикПредварительногоОтбора", КомпоновщикПредварительногоОтбора); @@ -297,15 +314,16 @@ Результат = ГруппыДублей(Параметры); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); + ЗаписьЖурналаРегистрации(ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Завершен поиск дублей для ""%1"" за %2 мин.'"), + Параметры.ОбластьПоискаДублей, + Формат((ТекущаяДатаСеанса() - НачалоПоискаДублей) / 60, "ЧДЦ=2"))); + КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// АПК:299-выкл Вызывается как многопоточное фоновое задание в процедуре НайтиИУдалитьДубли из формы ПоискДублей. - -// Обработчик фонового удаления дублей. +// Обработчик фонового удаления дублей, вызывается из процедуры НайтиИУдалитьДубли формы ПоискДублей. // // Параметры: // Параметры - Структура - данные для анализа. @@ -315,6 +333,13 @@ // Функция ФоновоеУдалениеДублей(Знач Параметры) Экспорт + НачалоУдаленияДублей = ТекущаяДатаСеанса(); + КоличествоДублей = Параметры.ПарыЗамен.Количество(); + ЗаписьЖурналаРегистрации(ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Начато удаление дублей: %1.'"), КоличествоДублей)); + ПараметрыЗамены = Новый Структура; ПараметрыЗамены.Вставить("ВключатьБизнесЛогику", Ложь); ПараметрыЗамены.Вставить("УчитыватьПрикладныеПравила", Параметры.УчитыватьПрикладныеПравила); @@ -322,12 +347,17 @@ ПараметрыЗамены.Вставить("СпособУдаления", Параметры.СпособУдаления); Результат = ОбщегоНазначения.ЗаменитьСсылки(Параметры.ПарыЗамен, ПараметрыЗамены); + ЗаписьЖурналаРегистрации(ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Завершено удаление дублей %1 за %2 мин.'"), + КоличествоДублей, + Формат((ТекущаяДатаСеанса() - НачалоУдаленияДублей) / 60, "ЧДЦ=2"))); + Возврат Результат; КонецФункции -// АПК:299-вкл - // Преобразуем объект в таблицу для помещения в запрос. Функция ОбъектВТаблицуЗначений(Знач ОбъектДанных, Знач РасшифровкаДополнительныхПолей) Результат = Новый ТаблицаЗначений; @@ -415,11 +445,14 @@ // * ПометкаУдаления - Булево // СтруктураЗапроса - см. ТекстЗапросаПоискаДублей // -// Возвращаемое значение: -// СтрокаТаблицыЗначений -// -Функция ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Знач ДанныеОсновногоЭлемента, Знач ДанныеКандидата, Знач СтруктураЗапроса) +Процедура ДобавитьСтрокуКандидатов(КоллекцияДублей, ТаблицаКандидатов, Знач ДанныеОсновногоЭлемента, + Знач ДанныеКандидата, Знач СтруктураЗапроса) + Если КоллекцияДублей.НезначимыеДубли[ДанныеОсновногоЭлемента.Ссылка] <> Неопределено + Или КоллекцияДублей.НезначимыеДубли[ДанныеКандидата.Ссылка] <> Неопределено Тогда + Возврат; + КонецЕсли; + Строка = ТаблицаКандидатов.Добавить(); Строка.ЭтоДубли = Ложь; Строка.Ссылка1 = ДанныеОсновногоЭлемента.Ссылка; @@ -448,29 +481,26 @@ Строка.Поля2.Вставить(ИмяКолонки, ДанныеКандидата[ИмяПоля]); КонецЦикла; - Возврат Строка; -КонецФункции +КонецПроцедуры Процедура ЗарегистрироватьДубль(КоллекцияДублей, Знач Элемент1, Знач Элемент2, Знач СтруктураЗапроса) ТаблицаДублей = КоллекцияДублей.ТаблицаДублей; НезначимыеДубли = КоллекцияДублей.НезначимыеДубли; - // Определить какой элемент уже добавлен в дубли. + // Определить, какой элемент уже является дублем. СтрокаДублей1 = ТаблицаДублей.Найти(Элемент1.Ссылка, "Ссылка"); СтрокаДублей2 = ТаблицаДублей.Найти(Элемент2.Ссылка, "Ссылка"); - СтрокаНезначимыхДублей1 = НезначимыеДубли.Найти(Элемент1.Ссылка); - СтрокаНезначимыхДублей2 = НезначимыеДубли.Найти(Элемент2.Ссылка); + ЕстьНезначимыйДубль1 = КоллекцияДублей.НезначимыеДубли[Элемент1.Ссылка] <> Неопределено; + ЕстьНезначимыйДубль2 = КоллекцияДублей.НезначимыеДубли[Элемент2.Ссылка] <> Неопределено; - Дубль1Зарегистрирован = (СтрокаДублей1 <> Неопределено) ИЛИ (СтрокаНезначимыхДублей1 <> Неопределено); - Дубль2Зарегистрирован = (СтрокаДублей2 <> Неопределено) ИЛИ (СтрокаНезначимыхДублей2 <> Неопределено); + Дубль1Зарегистрирован = (СтрокаДублей1 <> Неопределено) Или ЕстьНезначимыйДубль1; + Дубль2Зарегистрирован = (СтрокаДублей2 <> Неопределено) Или ЕстьНезначимыйДубль2; - // Если оба элемента добавлены в дубли, то ничего делать не надо. - // Или если хотя бы один из элементов незначимый, то пара не является дублем + // Если оба элемента есть дубли, то ничего делать не надо. + // Или если хотя бы один из элементов незначимый, то пара не является дублем. Если Дубль1Зарегистрирован И Дубль2Зарегистрирован - ИЛИ СтрокаНезначимыхДублей1 <> Неопределено - ИЛИ СтрокаНезначимыхДублей2 <> Неопределено Тогда - + Или ЕстьНезначимыйДубль1 Или ЕстьНезначимыйДубль2 Тогда Возврат; КонецЕсли; @@ -519,14 +549,7 @@ КонецПроцедуры -Функция МестаИспользованияСсылок(Знач НаборСсылок, Знач АдресРезультата = "") - - Возврат ОбщегоНазначения.МестаИспользования(НаборСсылок, АдресРезультата); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Прочие. +#Область Прочие // Параметры: // ОбъектМетаданных - ОбъектМетаданных @@ -701,7 +724,6 @@ ЭлементПорядкаКД.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); // Отборы. - // Если Характеристики.ОбъектМетаданных = Метаданные.Справочники.Пользователи Тогда ЭлементОтбораКД = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный"); @@ -868,9 +890,7 @@ Возврат Истина; КонецФункции -// Удаляет дубли из коллекции, если дубль помечен на удаление -// и не имеет мест использования -// +// Удаляет дубли из коллекции, если дубль помечен на удаление и не имеет мест использования. Процедура УдалитьНезначимыеДубли(КоллекцияДублей) // Не удаляем незначимые дубли, т.к. нет ограничения @@ -884,14 +904,14 @@ // Не будем проверять дубли, т.к. набрали нужное количество для вывода результата Если ТаблицаДублей.Количество() - ДублиКПроверке.Количество() <= КоллекцияДублей.КоличествоЭлементовДляСравнения Тогда - МестаИспользования = МестаИспользованияСсылок(ДублиКПроверке); + МестаИспользования = ОбщегоНазначения.МестаИспользования(ДублиКПроверке); МестаИспользования.Индексы.Добавить("Ссылка, ВспомогательныеДанные"); ОтборДублей = Новый Структура("Ссылка", Неопределено); ОтборМестИспользования = Новый Структура("Ссылка, ВспомогательныеДанные", Неопределено, Ложь); - Для Сч = 0 По ДублиКПроверке.ВГраница() Цикл + Для Индекс = 0 По ДублиКПроверке.ВГраница() Цикл - ОтборДублей.Ссылка = ДублиКПроверке[Сч]; + ОтборДублей.Ссылка = ДублиКПроверке[Индекс]; ПроверяемыеДубли = ТаблицаДублей.НайтиСтроки(ОтборДублей); Для каждого Дубль Из ПроверяемыеДубли Цикл @@ -902,7 +922,8 @@ ОтборМестИспользования.Ссылка = Дубль.Ссылка; МестаИспользованияВнутренний = МестаИспользования.НайтиСтроки(ОтборМестИспользования); Если МестаИспользованияВнутренний.Количество() = 0 И Дубль.ПометкаУдаления Тогда - ЗаполнитьЗначенияСвойств(КоллекцияДублей.НезначимыеДубли.Добавить(), Дубль); + КоллекцияДублей.НезначимыеДубли[Дубль.Ссылка] = Истина; + КоллекцияДублей.НезначимыеДубли[Дубль.Родитель] = Истина; КоллекцияДублей.ОбработанныеГруппы.Вставить(Дубль.Родитель); ТаблицаДублей.Удалить(Дубль); КонецЕсли; @@ -913,7 +934,6 @@ КонецЕсли; ДублиКПроверке.Очистить(); - ДлительныеОперации.СообщитьПрогресс(ТаблицаДублей.Количество(), "ЗарегистрироватьДубль"); КонецПроцедуры @@ -972,18 +992,16 @@ ТаблицаДублей.Индексы.Добавить("Ссылка"); ТаблицаДублей.Индексы.Добавить("Родитель"); - ТаблицаДублей.Индексы.Добавить("Ссылка, Родитель,ЭтоГруппа"); + ТаблицаДублей.Индексы.Добавить("Ссылка,Родитель,ЭтоГруппа"); Возврат ТаблицаДублей; КонецФункции // Возвращаемое значение: // Структура: -// * НезначимыеДубли - ТаблицаЗначений: -// ** Ссылка - ЛюбаяСсылка -// ** Родитель - ЛюбаяСсылка -// ** Ссылка - ЛюбаяСсылка -// ** Родитель - ЛюбаяСсылка +// * НезначимыеДубли - Соответствие из КлючИЗначение: +// ** Ключ - ЛюбаяСсылка +// ** Значение - Булево // * ОбработанныеГруппы - Соответствие // * СкрыватьНезначимыеДубли - Булево // * ДублиКПроверке - Массив @@ -1008,13 +1026,8 @@ КонецЕсли; КоллекцияДублей.Вставить("ОбработанныеГруппы", Новый Соответствие); - - НезначимыеДубли = Новый ТаблицаЗначений; - НезначимыеДубли.Колонки.Добавить("Ссылка"); - НезначимыеДубли.Колонки.Добавить("Родитель"); - НезначимыеДубли.Индексы.Добавить("Ссылка"); - - КоллекцияДублей.Вставить("НезначимыеДубли", НезначимыеДубли); + КоллекцияДублей.Вставить("НезначимыеДубли", Новый Соответствие); + Возврат КоллекцияДублей; КонецФункции @@ -1041,10 +1054,13 @@ КолонкиКандидатов.Добавить("ЭтоДубли", Новый ОписаниеТипов("Булево")); ТаблицаКандидатов.Индексы.Добавить("ЭтоДубли"); Возврат ТаблицаКандидатов; + КонецФункции #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Help/ru.html index 5ad24c67a..a1782f532 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Help/ru.html +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ВыборОбластиПоиска/Help/ru.html @@ -1,6 +1,6 @@ -

                Предназначено для настройки области полнотекстового поиска.

                -

                Можно ограничить область полнотекстового поиска с помощью переключателя, тем самым увеличив точность результатов поиска.

                +

                Предназначено для настройки области полнотекстового поиска.

                +

                Можно ограничить область полнотекстового поиска с помощью переключателя, тем самым увеличив точность результатов поиска.

                По умолчанию поиск производится Везде.

                Ограничение области поиска

                • С помощью переключателя укажите В разделах. diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index 3e96a2cb0..7eeaf53f6 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html @@ -6,26 +6,26 @@ TD { }

                  Предназначена для включения и отключения полнотекстового поиска, обновления индекса полнотекстового поиска, а также настройки извлечения текстов из файлов для использования при поиске.

                  -

                  Открывается по ссылке Настроить раздела Администрирование - Общие настройки - Поиск данных.

                  +

                  Открывается по ссылке Настроить раздела Администрирование - Общие настройки - Поиск данных.

                  -

                  Приложение позволяет производить полнотекстовый поиск в любых справочниках, документах и других объектах, отыскивая заданную строку во всех полях объектов. При наличии присоединенных файлов, содержащих текстовую информацию, поиск осуществляется также и по ним. Полнотекстовый поиск используется при поиске данных в приложении по содержимому справочников, документов и других объектов приложения.

                  +

                  Приложение позволяет производить полнотекстовый поиск в любых справочниках, документах и других объектах, отыскивая заданную строку во всех полях объектов. При наличии присоединенных файлов, содержащих текстовую информацию, поиск осуществляется также и по ним. Полнотекстовый поиск используется при поиске данных в приложении по содержимому справочников, документов и других объектов приложения.

                  Также полнотекстовый поиск предоставляет такие возможности как: поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ); поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами); нечеткий поиск (буквы в найденных словах могут отличаться).

                  -

                  Для начала работы с полнотекстовым поиском необходимо включить флажок Полнотекстовый поиск данных. В этом случае становятся доступными команды, которые позволяют настроить полнотекстовый поиск данных в приложении, управлять индексом полнотекстового поиска, обновлять и очищать его.По умолчанию флажок включен.

                  -

                  В файловом режиме работы приложения доступны только команды управления полнотекстовым индексом, тексты извлекаются автоматически при загрузке файла в приложение.

                  +

                  Для начала работы с полнотекстовым поиском необходимо включить флажок Полнотекстовый поиск данных. В этом случае становятся доступными команды, которые позволяют настроить полнотекстовый поиск данных в приложении, управлять индексом полнотекстового поиска, обновлять и очищать его.По умолчанию флажок включен.

                  +

                  В файловом режиме работы приложения доступны только команды управления полнотекстовым индексом, тексты извлекаются автоматически при загрузке файла в приложение.

                  Временное отключение полнотекстового поиска

                  • -
                    Флажок Использовать полнотекстовый поиск включен по умолчанию. Полнотекстовый поиск имеет смысл отключать в случае, если необходимо немного повысить быстродействие приложения и пользователям не требуется поиск данных в приложение.

                  Размер индексируемых данных

                  -
                  • С помощью соответствующего флажка можно Ограничить максимальный размер индексируемых данных. По умолчанию ограничение равно 1 Мб. Это может быть востребовано, если ресурсы компьютера, на котором установлена приложение, ограничены.

                  Обновление индекса полнотекстового поиска

                  -
                  • Для того чтобы можно было осуществлять поиск по всем введенным в приложение данным, необходимо регулярно актуализировать индекс полнотекстового поиска. Для регулярного автоматического обновления индекса предназначены регламентные задания Обновление индекса ППД и Слияние индекса ППД (выполняется раз в сутки). +
                    Флажок Использовать полнотекстовый поиск включен по умолчанию. Полнотекстовый поиск имеет смысл отключать в случае, если необходимо немного повысить быстродействие приложения и пользователям не требуется поиск данных в приложение.

                  Размер индексируемых данных

                  +
                  • С помощью соответствующего флажка можно Ограничить максимальный размер индексируемых данных. По умолчанию ограничение равно 1 Мб. Это может быть востребовано, если ресурсы компьютера, на котором установлена приложение, ограничены.

                  Обновление индекса полнотекстового поиска

                  +
                  • Для того чтобы можно было осуществлять поиск по всем введенным в приложение данным, необходимо регулярно актуализировать индекс полнотекстового поиска. Для регулярного автоматического обновления индекса предназначены регламентные задания Обновление индекса ППД и Слияние индекса ППД (выполняется раз в сутки).
                  • -
                  • Если индекс уже был обновлен, то отображается Дата актуальности индекса - дата последнего обновления индекса. +
                  • Если индекс уже был обновлен, то отображается Дата актуальности индекса - дата последнего обновления индекса.
                  • -
                  • Если в приложении есть данные, которые не прошли индексирование, то становится доступна кнопка Обновить индекс и выводится Статус индекса "Требуется обновление".

                  Очистка индекса полнотекстового поиска

                  -
                  • Если работа поиска по каким-то причинам нарушена, то с помощью кнопки Очистить индекс можно удалить все файлы полнотекстового индекса. После удаления индекса необходимо заново его построить, используя кнопку Обновить индекс.

                  Проверка индекса полнотекстового поиска

                  +
                • Если в приложении есть данные, которые не прошли индексирование, то становится доступна кнопка Обновить индекс и выводится Статус индекса "Требуется обновление".

                Очистка индекса полнотекстового поиска

                +
                • Если работа поиска по каким-то причинам нарушена, то с помощью кнопки Очистить индекс можно удалить все файлы полнотекстового индекса. После удаления индекса необходимо заново его построить, используя кнопку Обновить индекс.

                Проверка индекса полнотекстового поиска

                • В любой момент можно проверить состояние индекса полнотекстового поиска с помощью кнопки Проверить индекс.

                В клиент-серверном режиме доступны команды по настройке автоматического извлечения текстов.

                Автоматическое извлечение текстов

                -

                Извлечение текстов из файлов необходимо для полнотекстового поиска в приложении.

                +

                Извлечение текстов из файлов необходимо для полнотекстового поиска в приложении.

                Для настройки необходимо с помощью переключателя выбрать:

                  @@ -36,5 +36,5 @@ TD {
                • Имя ИБ: не указывается.
                • -
                • Значение дополнительного параметра: BackgroundJob.CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППДПоРасписанию.
              • В кластере нет серверов под управлением ОС Windows (все сервера в кластере только под управлением ОС Linux) - в этом случае с помощью команды Запустить извлечение текстов можно начать извлечение текстов в тонком клиенте на рабочей станции под управлением ОС Windows.
                • Если в клиент-серверном варианте один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Извлечение текстов, для того чтобы в автоматическом режиме извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.

              См. также:

              +
            • Значение дополнительного параметра: BackgroundJob.CommonModule.ПолнотекстовыйПоискСервер.ОбновлениеИндексаППДПоРасписанию.
          • В кластере нет серверов под управлением ОС Windows (все сервера в кластере только под управлением ОС Linux) - в этом случае с помощью команды Запустить извлечение текстов можно начать извлечение текстов в тонком клиенте на рабочей станции под управлением ОС Windows.
            • Если в клиент-серверном варианте один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду Извлечение текстов, для того чтобы в автоматическом режиме извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.

          См. также:

        • Работа с формами.
        • \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index 46c06df85..d9433767c 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -147,8 +147,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#Область Клиент &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) @@ -239,8 +238,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера +#КонецОбласти + +#Область ВызовСервера &НаСервере Процедура ОбновитьИндексСервер() @@ -296,8 +296,9 @@ КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) @@ -466,3 +467,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html index 440459dc1..ce0775c9f 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html @@ -1,13 +1,13 @@ -

          Полнотекстовый поиск данных позволяет находить любые сведения не только по полям карточек, но и по содержимому присоединенных файлов.

          -

          Полнотекстовый поиск можно выполнять прямо с Начальной страницы приложения.

          +

          Полнотекстовый поиск данных позволяет находить любые сведения не только по полям карточек, но и по содержимому присоединенных файлов.

          +

          Полнотекстовый поиск можно выполнять прямо с Начальной страницы приложения.

          Полнотекстовый поиск предоставляет такие возможности как:

          • Поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ);
          • -
          • Поддержка замещения (написание русских слов в английской раскладке); +
          • Поддержка замещения (написание русских слов в английской раскладке);
          • -
          • Нечеткий поиск (буквы в найденных словах могут отличаться).

          Для поиска данных в приложении наберите слово или его начало. Нажмите Найти. Поиск может осуществляться по одному или нескольким словам. В строке ввода допускается использование поисковых операторов типа И, ИЛИ, НЕ.

          -

          В поле ввода строки поиска можно вставить навигационную ссылку на данные. В этом случае поиск произведен не будет, а будет сразу открыта нужная карточка. Навигационную ссылку на любой объект информационной базы можно получить при помощи команды  в заголовке каждого окна 1С:Предприятия 8.

          +
        • Нечеткий поиск (буквы в найденных словах могут отличаться).
        • Для поиска данных в приложении наберите слово или его начало. Нажмите Найти. Поиск может осуществляться по одному или нескольким словам. В строке ввода допускается использование поисковых операторов типа И, ИЛИ, НЕ.

          +

          В поле ввода строки поиска можно вставить навигационную ссылку на данные. В этом случае поиск произведен не будет, а будет сразу открыта нужная карточка. Навигационную ссылку на любой объект информационной базы можно получить при помощи команды в заголовке каждого окна 1С:Предприятия 8.

          Обновление индекса

          В файловом варианте информационной базы индекс полнотекстового поиска не обновляется автоматически и поэтому должен периодически обновляться вручную. Если индекс полнотекстового поиска не актуален (т.е. есть такие данные, которые еще не прошли индексирование), то в файловом варианте информационной базы становится доступна кнопка Обновить индекс.

          Примеры

          @@ -18,8 +18,8 @@ Найдет платежные поручения на суммы 120000 и 120000,50«Иванов Акация» Найдет все документы, выписанные Ивановым для контрагента ООО «Акация»«Реализация Акация» Найдет все документы «реализация товаров и услуг» по контрагенту ООО «Акация»«Акация 05.07» -Найдет все документы по контрагенту ООО «Акация», оформленные 5-го июля«Кроссовки» -Найдет все упоминания товаров типа «кроссовки» по порядку:
          • Кроссовки белые (Товар)
          • Кроссовки черные (Товар)
          • Поступление товаров и услуг № 00086822
          • Реализация товаров и услуг № 00016422

           

          +Найдет все документы по контрагенту ООО «Акация», оформленные 5-го июля«Кроссовки» +Найдет все упоминания товаров типа «кроссовки» по порядку:
          • Кроссовки белые (Товар)
          • Кроссовки черные (Товар)
          • Поступление товаров и услуг № 00086822
          • Реализация товаров и услуг № 00016422

          Советы

          • Если нашлось много данных, то уточните поисковый запрос, добавив к нему какое-либо уточнение (дату, сумму, название контрагента). @@ -29,13 +29,13 @@
          • Для точного поиска используйте:
          • Кавычки - для поиска точной фразы, например: «"мини пылесос"».
          • -
          • ИЛИ - для поиска одного из двух слов, например «Акация ИЛИ Стройпромвсе» - найдет все упоминания контрагентов ООО "Акация" и ЗАО "Стройпромвсе". +
          • ИЛИ - для поиска одного из двух слов, например «Акация ИЛИ Стройпромвсе» - найдет все упоминания контрагентов ООО "Акация" и ЗАО "Стройпромвсе".
          • -
          • Скобки - для группировки выражений, например поиск «Иванов (Акация ИЛИ Стройпромвсе)» найдет все документы, выписанные Ивановым по контрагентам ООО "Акация" и ЗАО "Стройпромвсе".
          +
        • Скобки - для группировки выражений, например поиск «Иванов (Акация ИЛИ Стройпромвсе)» найдет все документы, выписанные Ивановым по контрагентам ООО "Акация" и ЗАО "Стройпромвсе".
          • Для поиска с учетом синонимов используйте "!", например, поиск "!номер" найдет все документы в которых встречается слово "номер" или "число".
          • -
          • Для "нечеткого" поиска используйте "#", например поиск "Стройпромвсе#2" найдет все документы, содержащие такие слова, которые отличаются от слова "Стройпромвсе" на одну или две буквы. +
          • Для "нечеткого" поиска используйте "#", например поиск "Стройпромвсе#2" найдет все документы, содержащие такие слова, которые отличаются от слова "Стройпромвсе" на одну или две буквы.
          • -
          • Для поиска по началу слова используйте "*", например, поиск "Строй*" найдет все документы, которые содержат слова, начинающиеся на "Строй" - "Стройка", "Стройпромвсе"и т.д.
          +
        • Для поиска по началу слова используйте "*", например, поиск "Строй*" найдет все документы, которые содержат слова, начинающиеся на "Строй" - "Стройка", "Стройпромвсе"и т.д.
        • См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Form.form index de7162e21..014395fa9 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Form.form @@ -52,7 +52,7 @@ ru Выгрузка данных может занять длительное время в случаях: - медленного канала связи; - - большого объема данных в этой программе. + - большого объема данных в этом приложении. Если операция будет отменена, можно выполнить ее позднее из формы списка настроенных синхронизаций данных. @@ -1272,7 +1272,7 @@ ru Выгрузка успешно завершена. -Теперь можно перейти в программу "%1" и выполнить сопоставление и загрузку полученных данных. +Теперь можно перейти в приложение "%1" и выполнить сопоставление и загрузку полученных данных. true true @@ -2825,7 +2825,7 @@ - ВидТранспорта + удалить_ВидТранспорта 10 EnumRef.ВидыТранспортаСообщенийОбмена @@ -3073,6 +3073,42 @@ true + + ИдентификаторТранспорта + 22 + + String + + + + true + + + true + + + + НастройкиТранспорта + 29 + + + true + + + true + + + + ДанныеАутентификации + 30 + + + true + + + true + + КомандаГотово diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl index a6cf52689..faca9bee4 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Module.bsl @@ -94,19 +94,12 @@ &НаКлиенте Процедура НастройкиПодключения(Команда) - Отбор = Новый Структура("Корреспондент", УзелОбмена); - ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелОбмена); - ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастройкиПодключенияЗавершение", ЭтотОбъект); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору( - Отбор, - ЗначенияЗаполнения, - "НастройкиТранспортаОбменаДанными", - ЭтотОбъект, - , - , - ОповещениеОЗакрытии); + ПараметрыФормы = Новый Структура("Корреспондент", УзелОбмена); + + ОткрытьФорму("Справочник.НастройкиТранспортаСообщенийОбмена.Форма.ПанельНастроекТранспорта", + ПараметрыФормы,,,,, ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -121,10 +114,6 @@ ПродолжитьОжидание = Истина; - Если ПодключениеЧерезВнешнееСоединение Тогда - ОбменДаннымиКлиент.ПроверитьИЗарегистрироватьCOMСоединитель(УзелОбмена); - КонецЕсли; - ПриНачалеПроверкиПодключенияНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда @@ -174,19 +163,16 @@ &НаСервере Процедура ПриНачалеПроверкиПодключенияНаСервере(ПродолжитьОжидание) - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И (ЗапроситьПароль Или ЗначениеЗаполнено(КонечнаяТочка)) Тогда - НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена, WSПароль); - Иначе - НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелОбмена, ВидТранспорта); - КонецЕсли; - НастройкиПодключения.Вставить("ВидТранспортаСообщенийОбмена", ВидТранспорта); - + НастройкиПодключения = Новый Структура; + НастройкиПодключения.Вставить("Корреспондент", УзелОбмена); + НастройкиПодключения.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + НастройкиПодключения.Вставить("НастройкиТранспорта", НастройкиТранспорта); НастройкиПодключения.Вставить("ИмяПланаОбмена", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена)); НастройкиПодключения.Вставить("ИмяПланаОбменаКорреспондента", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(УзелОбмена)); НастройкиПодключения.Вставить("ВариантНастройкиОбмена", ""); + НастройкиПодключения.Вставить("ДанныеАутентификации", ДанныеАутентификации); МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); @@ -435,12 +421,9 @@ МодульПомощникИнтерактивногоОбмена = ОбменДаннымиСервер.МодульПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса(); Иначе НастройкиВыгрузки.Вставить("УзелОбмена", УзелОбмена); - НастройкиВыгрузки.Вставить("ВидТранспорта", ВидТранспорта); - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И ЗапроситьПароль Тогда - НастройкиВыгрузки.Вставить("WSПароль", WSПароль); - КонецЕсли; + НастройкиВыгрузки.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + НастройкиВыгрузки.Вставить("НастройкиТранспорта", НастройкиТранспорта); + НастройкиВыгрузки.Вставить("ДанныеАутентификации", ДанныеАутентификации); МодульПомощникИнтерактивногоОбмена = ОбменДаннымиСервер.МодульПомощникИнтерактивногоОбменаДанными(); КонецЕсли; @@ -541,6 +524,8 @@ Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + ДанныеАутентификации = ТранспортСообщенийОбмена.ПарольСинхронизацииДанных(УзелОбмена); + ИнициализироватьПараметрыТранспорта(); УстановитьНаименованиеПриложенияВНадписяхФормы(); @@ -550,39 +535,21 @@ &НаСервере Процедура ИнициализироватьПараметрыТранспорта() - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелОбмена); - НастройкиТранспорта.Свойство("ВидТранспортаСообщенийОбменаПоУмолчанию", ВидТранспорта); - НастройкиТранспорта.Свойство("WSКонечнаяТочкаКорреспондента", КонечнаяТочка); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелОбмена); + ИспользоватьПрогресс = ТранспортСообщенийОбмена.ПараметрТранспорта(ИдентификаторТранспорта, "ИспользоватьПрогресс"); - Если Не ЗначениеЗаполнено(ВидТранспорта) Тогда - ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим; - КонецЕсли; - - ПодключениеЧерезВнешнееСоединение = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - ИспользоватьПрогресс = Не ЭтоОбменСПриложениемВСервисе - И Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим; - ЗапроситьПароль = Ложь; ПроверкаПодключенияВыполнена = Ложь; ВыгрузкаДанныхВыполнена = Ложь; + ДоступнаНастройкаТранспорта = Ложь; - ДоступнаНастройкаТранспорта = Не (ЭтоОбменСПриложениемВСервисе - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); + ПассивныйРежим = ТранспортСообщенийОбмена.ПараметрТранспорта(УзелОбмена, "ПассивныйРежим"); - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена); + Если ПассивныйРежим Тогда - ЗапроситьПароль = Не (НастройкиТранспорта.WSЗапомнитьПароль - Или ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелОбмена)); - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда - ПроверкаПодключенияВыполнена = Истина; ВыгрузкаДанныхВыполнена = Истина; - + КонецЕсли; ЗаполнитьТаблицуПереходов(); @@ -641,7 +608,8 @@ НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаЗапросПароля_ПриПереходеДалее"; КонецЕсли; - Если Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + ПассивныйРежим = ТранспортСообщенийОбмена.ПараметрТранспорта(ИдентификаторТранспорта, "ПассивныйРежим"); + Если НЕ ПассивныйРежим Тогда НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПроверкаПодключения", "СтраницаНавигацияОжидание"); НовыйПереход.ДлительнаяОперация = Истина; НовыйПереход.ИмяОбработчикаДлительнойОперации = "Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация"; @@ -652,7 +620,7 @@ НовыйПереход.ДлительнаяОперация = Истина; НовыйПереход.ИмяОбработчикаДлительнойОперации = "Подключаемый_СтраницаРегистрацияИзменений_ДлительнаяОперация"; - Если Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + Если НЕ ПассивныйРежим Тогда Если ИспользоватьПрогресс Тогда НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаВыгрузкаДанныхПрогресс", "СтраницаНавигацияОжидание"); Иначе diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index a78251d71..c7c333f81 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -139,553 +139,6 @@ <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> - <items xsi:type="form:FormGroup"> - <name>СтраницаНачала</name> - <id>250</id> - <items xsi:type="form:FormGroup"> - <name>ЗаголовокСтраницы</name> - <id>725</id> - <items xsi:type="form:FormGroup"> - <name>ГруппаВыборВидаТранспортаИзДоступных</name> - <id>515</id> - <items xsi:type="form:Decoration"> - <name>Декорация24</name> - <id>606</id> - <title> - <key>ru</key> - <value>Использовать вариант подключения:</value> - - true - true - - true - - - Декорация24ExtendedTooltip - 733 - Label - true - true - - Left - - - - Декорация24КонтекстноеМеню - 607 - true - - Label - 24 - true - - Right - - - - ГруппаВариантПодключения - 608 - - ВидТранспортаСообщенияОбменаСтрокой - 609 - - <key>ru</key> - <value>Вид транспорта сообщения обмена строкой</value> - - true - - true - - - ВидТранспортаСообщенияОбменаСтрокойExtendedTooltip - 735 - Label - true - true - - Left - - - - ВидТранспортаСообщенияОбменаСтрокойКонтекстноеМеню - 610 - true - - Label - true - - Left - - - - ВидТранспортаСообщенийОбмена - 516 - true - true - - true - - - Объект.ВидТранспортаСообщенийОбмена - - None - - OnChange - ВидТранспортаСообщенийОбменаПриИзменении - - - ВидТранспортаСообщенийОбменаExtendedTooltip - 736 - Label - true - true - - Left - - - - ВидТранспортаСообщенийОбменаКонтекстноеМеню - 517 - true - - InputField - Enter - true - Left - true - - - Clearing - ВидТранспортаСообщенийОбменаОчистка - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Вариант подключения</value> - - - ru - Используемый вариант подключения - - false - - ГруппаВариантПодключенияРасширеннаяПодсказка - 734 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - НастроитьПараметрыТранспортаСообщенийОбмена - 518 - - <key>ru</key> - <value>Настроить...</value> - - true - true - - true - - false - - НастроитьПараметрыТранспортаСообщенийОбменаExtendedTooltip - 737 - Label - true - true - - Left - - - UsualButton - Form.Command.НастроитьПараметрыТранспортаСообщенийОбмена - Normal - PictureAndText - 12 - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Выбор вида транспорта из доступных</value> - - true - - ГруппаВыборВидаТранспортаИзДоступныхExtendedTooltip - 732 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - ГруппаПараметрыТранспорта - 537 - - НадписьWSПароль - 538 - - <key>ru</key> - <value>Пароль:</value> - - true - true - - true - - - НадписьWSПарольРасширеннаяПодсказка - 740 - Label - true - true - - Left - - - - НадписьWSПарольКонтекстноеМеню - 539 - true - - Label - 24 - true - true - - Right - - - - ГруппаПараметрыТранспортаВертикальная - 519 - - WSПароль - 520 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - WSПароль - - None - - WSПарольExtendedTooltip - 742 - Label - true - true - - Left - - - - WSПарольКонтекстноеМеню - 521 - true - - InputField - true - Enter - true - Left - true - - 20 - true - 1 - true - false - false - true - true - true - true - true - true - Normal - - - - WSЗапомнитьПароль - 523 - - <key>ru</key> - <value>Запомнить</value> - - true - true - - true - - - WSЗапомнитьПароль - - Right - 1 - - WSЗапомнитьПарольExtendedTooltip - 746 - Label - true - true - - Left - - - - WSЗапомнитьПарольКонтекстноеМеню - 524 - true - - CheckBoxField - Enter - true - Left - true - - - - КаталогОбменаИнформацией - 906 - - <key>ru</key> - <value>Каталог обмена информацией</value> - - true - true - - true - - - КаталогОбменаИнформациейРасширеннаяПодсказка - 908 - Label - true - true - - Left - - - - КаталогОбменаИнформациейКонтекстноеМеню - 907 - true - - Label - true - - - Click - КаталогОбменаИнформациейНажатие - - true - Left - - - true - true - - true - - - <key>ru</key> - <value>Параметры транспорта вертикальная</value> - - - ГруппаПараметрыТранспортаВертикальнаяРасширеннаяПодсказка - 741 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры транспорта</value> - - - ru - Параметры транспорта общая группа - - true - - ГруппаПараметрыТранспортаРасширеннаяПодсказка - 739 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Выбор варианта подключения</value> - - - ЗаголовокСтраницыРасширеннаяПодсказка - 731 - Label - true - true - - Left - - - UsualGroup - - Vertical - WeakSeparation - true - true - auto - Auto - Auto - - - - Декорация8 - 317 - - <key>ru</key> - <value>Нажмите кнопку "Далее" для выполнения анализа данных.</value> - - true - true - - true - - - Декорация8ExtendedTooltip - 748 - Label - true - true - - Left - - - - Декорация8КонтекстноеМеню - 318 - true - - Label - true - true - false - - Left - Bottom - - - true - true - - true - - - <key>ru</key> - <value>Страница начала</value> - - - СтраницаНачалаExtendedTooltip - 729 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - СтраницаПолучениеСообщенияОбмена 996 @@ -1036,10 +489,10 @@ 718 <key>ru</key> - <value>Учет ведется в обеих программах, поэтому следует выполнить сопоставление данных. + <value>Учет ведется в обоих приложениях, поэтому следует выполнить сопоставление данных. Это позволит избежать появления дублирующихся элементов справочников, которые независимо друг от друга -были введены в обеих программах, например, с одинаковыми наименованиями. -С помощью сопоставления можно указать, какие данные являются одинаковыми в двух программах.</value> +были введены в обоих приложениях, например, с одинаковыми наименованиями. +С помощью сопоставления можно указать, какие данные являются одинаковыми в двух приложениях.</value> true true @@ -1752,7 +1205,7 @@ 420 <key>ru</key> - <value>В этой программе</value> + <value>В этом приложении</value> true true @@ -6025,7 +5478,7 @@ <key>ru</key> <value>При загрузке сообщения для сопоставления возникла ошибка. -Рекомендуется повторно выгрузить данные из приложения "%1" и запустить синхронизацию в этой программе. +Рекомендуется повторно выгрузить данные из приложения "%1" и запустить синхронизацию в этом приложении. Также, можно удалить сообщение для сопоставления. В этом случае синхронизация будет работать в обычном режиме.</value> true @@ -7520,7 +6973,7 @@ КоличествоОбъектовВПриемнике <key>ru</key> - <value>В этой программе, шт</value> + <value>В этом приложении, шт</value> 5 @@ -7897,11 +7350,7 @@ - WSПароль - - <key>ru</key> - <value>Пароль</value> - + Удалить_WSПароль 19 String @@ -7957,11 +7406,7 @@ - WSЗапомнитьПароль - - <key>ru</key> - <value>Запомнить пароль</value> - + удалить_WSЗапомнитьПароль 24 Boolean @@ -8611,6 +8056,17 @@ true + + ДанныеАутентификации + 28 + + + true + + + true + + ОбновитьИнформациюСопоставленияПолностью @@ -8690,50 +8146,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>ОткрытьКаталогОбменаИнформацией</name> - <title> - <key>ru</key> - <value>Открыть каталог</value> - - 4 - - ru - Открыть каталог обмена информацией - - - true - - - - ОткрытьКаталогОбменаИнформацией - - - DontUse - Auto - - - НастроитьПараметрыТранспортаСообщенийОбмена - - <key>ru</key> - <value>Изменить</value> - - 6 - - ru - Изменить настройки обмена данными - - - true - - - - НастроитьПараметрыТранспортаСообщенийОбмена - - - DontUse - Auto - ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 1cdc2d892..e772d443d 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -23,6 +23,7 @@ // РасширенныйРежимДополненияВыгрузки - Булево - флаг включения механизма настройки дополнения // выгрузки по сценарию узла. // + #Область ОписаниеПеременных &НаКлиенте @@ -37,6 +38,9 @@ ЭтоЗапускИзДругогоПриложения = Ложь; + Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ОбменМеждуПриложениямиВСервисе); + Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + Если Параметры.Свойство("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы) Тогда Объект.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Объект.УзелИнформационнойБазы); @@ -60,13 +64,24 @@ КонецЕсли; + ИнициализироватьНастройкиТранспортаСообщенийОбмена(); + + Если Не ЗначениеЗаполнено(Объект.ИдентификаторТранспорта) Тогда + + Текст = НСтр("ru = 'Не заданы настройки подключения. Синхронизация не может быть продолжена.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + ВызватьИсключение Текст; + + КонецЕсли; + // Интерактивное выполнение обмена данными поддерживается только для универсальных обменов. Если Не ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(Объект.УзелИнформационнойБазы) Тогда ВызватьИсключение НСтр("ru = 'Для выбранного узла выполнение обмена данными с настройкой не предусмотрено.'"); КонецЕсли; // Проверяем настройку обмена на соответствие фильтру. - ВсеУзлы = ОбменДаннымиСобытия.ВсеУзлыПланаОбмена(Объект.ИмяПланаОбмена); + ВсеУзлы = ОбменДаннымиПовтИсп.УзлыПланаОбмена(Объект.ИмяПланаОбмена); Если ВсеУзлы.Найти(Объект.УзелИнформационнойБазы) = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Для выбранного узла сопоставление данных не предусмотрено.'"); КонецЕсли; @@ -92,7 +107,7 @@ МодельСервиса = ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - Параметры.Свойство("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); + Параметры.Свойство("ИдентификаторТранспорта", Объект.ИдентификаторТранспорта); Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); Параметры.Свойство("РежимДополненияВыгрузки", РежимДополненияВыгрузки); @@ -116,17 +131,25 @@ ИнициализироватьРеквизитыДополненияВыгрузки(); КонецЕсли; - ИнициализироватьНастройкиТранспортаСообщенийОбмена(); - - Если ОбменЧерезВнутреннююПубликацию Тогда - МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация"); - ПоУзлуЗапланированОбмен = МодульОбменДаннымиВнутренняяПубликация.ПоУзлуЗапланированОбмен( - Объект.УзелИнформационнойБазы, - СценарийВыполненияЧерезВнутреннююПубликацию, - ИдентификаторОбменаЧерезВнутреннююПубликацию); + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию( + Объект.УзелИнформационнойБазы, + Объект.ИдентификаторТранспорта); + + Если Объект.ИдентификаторТранспорта = "SM" И НастройкиТранспорта.ВнутренняяПубликация Тогда + ОбменЧерезВнутреннююПубликацию = Истина; + ОбластьДанныхКорреспондента = НастройкиТранспорта.ОбластьДанныхКорреспондента; + Иначе + ОбменЧерезВнутреннююПубликацию = Ложь; КонецЕсли; - Элементы.ГруппаПредупреждениеПриОбменеЧерезВнутреннююПубликацию.Видимость = ОбменЧерезВнутреннююПубликацию; + ДанныеАутентификации = ТранспортСообщенийОбмена.ПарольСинхронизацииДанных(Объект.УзелИнформационнойБазы); + + ИспользоватьПрогрессБар = ТранспортСообщенийОбмена.ПараметрТранспорта(Объект.ИдентификаторТранспорта, "ИспользоватьПрогресс"); + + Элементы.ГруппаПредупреждениеПриОбменеЧерезВнутреннююПубликацию.Видимость = + ОбменЧерезВнутреннююПубликацию И Не ПолученоСообщениеДляСопоставленияДанных; + + ЗаполнитьТаблицуПереходов(); КонецПроцедуры @@ -164,7 +187,7 @@ Если (ЗакончитьСопоставлениеДанных И Не ПропуститьПолучениеДанных) Или (РезультатЗагрузкиДанных = "Предупреждение_СообщениеОбменаБылоРанееПринято") Или УдалитьСообщениеДляСопоставления Тогда - УдалитьСообщениеДляСопоставленияДанных(Объект.УзелИнформационнойБазы, Объект.ВидТранспортаСообщенийОбмена); + УдалитьСообщениеДляСопоставленияДанных(Объект.УзелИнформационнойБазы, Объект.ИдентификаторТранспорта); КонецЕсли; КонецЕсли; @@ -229,32 +252,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаНачала - -&НаКлиенте -Процедура ВидТранспортаСообщенийОбменаПриИзменении(Элемент) - - ПриИзмененииВидаТранспортаСообщенийОбмена(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидТранспортаСообщенийОбменаОчистка(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура КаталогОбменаИнформациейНажатие(Элемент) - - ОткрытьКаталогОбменаИнформациейУзла(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаИнформацииСтатистики +#Область СтраницаСтраницаИнформацииСтатистики &НаКлиенте Процедура ЗакончитьСопоставлениеДанныхПриИзменении(Элемент) @@ -270,8 +268,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаВопросОСоставеВыгрузки +#КонецОбласти + +#Область СтраницаСтраницаВопросОСоставеВыгрузки &НаКлиенте Процедура ДополнениеВыгрузкиВариантВыгрузкиПриИзменении(Элемент) @@ -297,6 +296,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоИнформацииСтатистики &НаКлиенте @@ -376,31 +377,7 @@ КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаНачала - -&НаКлиенте -Процедура ОткрытьКаталогОбменаИнформацией(Команда) - - ОткрытьКаталогОбменаИнформациейУзла(); - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьПараметрыТранспортаСообщенийОбмена(Команда) - - Отбор = Новый Структура("Корреспондент", Объект.УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Корреспондент", Объект.УзелИнформационнойБазы); - - Оповещение = Новый ОписаниеОповещения("НастроитьПараметрыТранспортаСообщенийОбменаЗавершение", ЭтотОбъект); - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект, , , Оповещение); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаИнформацииСтатистики +#Область СтраницаСтраницаИнформацииСтатистики &НаКлиенте Процедура ОбновитьИнформациюСопоставленияПолностью(Команда) @@ -513,8 +490,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаОкончанияСопоставления +#КонецОбласти + +#Область СтраницаСтраницаОкончанияСопоставления &НаКлиенте Процедура ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных(Команда) @@ -530,8 +508,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница СтраницаВопросОСоставеВыгрузки +#КонецОбласти + +#Область СтраницаСтраницаВопросОСоставеВыгрузки &НаКлиенте Процедура ДополнениеВыгрузкиОбщийОтборДокументов(Команда) @@ -587,6 +566,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -932,13 +913,6 @@ КонецПроцедуры -&НаКлиенте -Процедура НастроитьПараметрыТранспортаСообщенийОбменаЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт - - ИнициализироватьНастройкиТранспортаСообщенийОбмена(); - -КонецПроцедуры - &НаКлиенте Процедура ДополнениеВыгрузкиИсторияОтборовЗавершение(Ответ, ПредставлениеНастройки) Экспорт @@ -1024,21 +998,6 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Загрузка данных завершена.'")); КонецПроцедуры -&НаКлиенте -Процедура ОткрытьКаталогОбменаИнформациейУзла() - - // Вызов сервера без контекста. - ИмяКаталога = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); - - Если ПустаяСтрока(ИмяКаталога) Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не задан каталог синхронизации данных.'")); - Возврат; - КонецЕсли; - - ФайловаяСистемаКлиент.ОткрытьПроводник(ИмяКаталога); - -КонецПроцедуры - &НаКлиенте Процедура ПерейтиВЖурналРегистрации(Знач РезультатВопроса, Знач ДополнительныеПараметры) Экспорт @@ -1189,81 +1148,12 @@ &НаСервере Процедура ИнициализироватьНастройкиТранспортаСообщенийОбмена() - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(Объект.УзелИнформационнойБазы); - ВидТранспортаПоУмолчанию = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонечнаяТочкаКорреспондента = НастройкиТранспорта.WSКонечнаяТочкаКорреспондента; - - НастроенныеВидыТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастроенныеВидыТранспорта(Объект.УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(Объект.УзелИнформационнойБазы); ПропускатьСтраницуТранспорта = Истина; - Если НастроенныеВидыТранспорта.Количество() > 1 - И Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда - ПропускатьСтраницуТранспорта = ДополнениеВыгрузкиРасширенныйРежим; - КонецЕсли; - - Если Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена) Тогда - Объект.ВидТранспортаСообщенийОбмена = ВидТранспортаПоУмолчанию; - КонецЕсли; - - ЗапускОбменаИзКорреспондента = Не ЗначениеЗаполнено(Объект.ВидТранспортаСообщенийОбмена); - - ОбменМеждуПриложениямиВСервисе = МодельСервиса - И (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - - ОбменЧерезВнутреннююПубликацию = МодельСервиса - И Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И ЗначениеЗаполнено(КонечнаяТочкаКорреспондента); - - ПриИзмененииВидаТранспортаСообщенийОбмена(Истина, НастроенныеВидыТранспорта); - -КонецПроцедуры - -&НаСервере -Процедура ПриИзмененииВидаТранспортаСообщенийОбмена(Инициализация = Ложь, НастроенныеВидыТранспорта = Неопределено) - - ОбменЧерезВнешнееСоединение = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM); - ОбменЧерезВебСервис = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS); - - Если ОбменЧерезВебСервис Тогда - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(Объект.УзелИнформационнойБазы); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураНастроек, "WSЗапомнитьПароль"); - Если WSЗапомнитьПароль Тогда - WSПароль = Строка(ЭтотОбъект.УникальныйИдентификатор); - КонецЕсли; - КонецЕсли; - - ИспользоватьПрогрессБар = Не ОбменЧерезВебСервис И Не ОбменМеждуПриложениямиВСервисе И Не ОбменЧерезВнутреннююПубликацию; - - Если Инициализация Тогда - ПропускатьСтраницуТранспорта = ПропускатьСтраницуТранспорта И (Не ОбменЧерезВебСервис Или WSЗапомнитьПароль); - ЗаполнитьТаблицуПереходов(); - - Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - - ОбменДаннымиСервер.ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(Объект.УзелИнформационнойБазы, - Элементы.ВидТранспортаСообщенийОбмена, НастроенныеВидыТранспорта); - - СписокВыбораТранспорта = Элементы.ВидТранспортаСообщенийОбмена.СписокВыбора; - - Если СписокВыбораТранспорта.Количество() = 0 Тогда - СписокВыбораТранспорта.Добавить(Неопределено, НСтр("ru = 'подключение не настроено'")); - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст - Иначе - Элементы.ВидТранспортаСообщенияОбменаСтрокой.ЦветТекста = Новый Цвет; - КонецЕсли; - - Элементы.ВидТранспортаСообщенияОбменаСтрокой.Заголовок = СписокВыбораТранспорта[0].Представление; - Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость = (СписокВыбораТранспорта.Количество() = 1); - Элементы.ВидТранспортаСообщенийОбмена.Видимость = Не Элементы.ВидТранспортаСообщенияОбменаСтрокой.Видимость; - - Элементы.WSПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; - Элементы.НадписьWSПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; - Элементы.WSЗапомнитьПароль.Видимость = ОбменЧерезВебСервис И Не WSЗапомнитьПароль; - - УстановитьВидимостьКнопкиОткрытияКаталогаОбмена(); + Если Не ЗначениеЗаполнено(Объект.ИдентификаторТранспорта) Тогда + Объект.ИдентификаторТранспорта = ИдентификаторТранспорта; КонецЕсли; КонецПроцедуры @@ -1302,20 +1192,6 @@ КонецФункции -&НаСервере -Процедура УстановитьВидимостьКнопкиОткрытияКаталогаОбмена() - - ВидимостьКнопки = (Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или Объект.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - - Элементы.КаталогОбменаИнформацией.Видимость = ВидимостьКнопки; - - Если ВидимостьКнопки Тогда - Элементы.КаталогОбменаИнформацией.Заголовок = ПолучитьИмяКаталогаНаСервере(Объект.ВидТранспортаСообщенийОбмена, Объект.УзелИнформационнойБазы); - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура ПроверкаНеобходимостиПереходаНаНовыйОбмен() @@ -1633,7 +1509,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура УдалитьСообщениеДляСопоставленияДанных(УзелОбмена, ВидТранспортаСообщенийОбмена = Неопределено) +Процедура УдалитьСообщениеДляСопоставленияДанных(Знач УзелОбмена, Знач ИдентификаторТранспорта = Неопределено) УстановитьПривилегированныйРежим(Истина); @@ -1642,10 +1518,10 @@ Если ЗначениеЗаполнено(ОбщиеНастройки.СообщениеДляСопоставленияДанных) Тогда - WSПассивныйРежимФайловаяИБ = ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим - И ОбщегоНазначения.ИнформационнаяБазаФайловая(); - - ИмяФайлаСообщенияВХранилище = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ОбщиеНастройки.СообщениеДляСопоставленияДанных, WSПассивныйРежимФайловаяИБ); + ПассивныйРежимФайловаяИБ = ОбщегоНазначения.ИнформационнаяБазаФайловая() + И ТранспортСообщенийОбмена.ПараметрТранспорта(ИдентификаторТранспорта, "ПассивныйРежим"); + + ИмяФайлаСообщенияВХранилище = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ОбщиеНастройки.СообщениеДляСопоставленияДанных, ПассивныйРежимФайловаяИБ); Файл = Новый Файл(ИмяФайлаСообщенияВХранилище); Если Файл.Существует() И Файл.ЭтоФайл() Тогда @@ -1683,33 +1559,9 @@ ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры -&НаСервереБезКонтекста -Функция ПолучитьИмяКаталогаНаСервере(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) - - Возврат РегистрыСведений.НастройкиТранспортаОбменаДанными.ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы); - -КонецФункции - -&НаСервереБезКонтекста -Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, УзелОбмена, ПолучитьПарольИзСеансовыхДанных, СтрокаСообщенияОбОшибке = "") - - ПараметрыАутентификации = Неопределено; - Если ПолучитьПарольИзСеансовыхДанных Тогда - ПараметрыАутентификации = ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелОбмена); - КонецЕсли; - - Возврат ОбменДаннымиСлужебный.СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторОперации, - УзелОбмена, - ПараметрыАутентификации, - СтрокаСообщенияОбОшибке); - -КонецФункции - #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ожидания +#Область ОбработчикиОжидания &НаКлиенте Процедура ОбработчикОжиданияДлительнойОперации() @@ -1717,20 +1569,7 @@ ДлительнаяОперацияЗавершена = Ложь; ДлительнаяОперацияЗавершенаСОшибкой = Ложь; - Если ОбменЧерезВебСервис Тогда - ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); - СостояниеОперации = СостояниеДлительнойОперации(ИдентификаторОперации, Объект.УзелИнформационнойБазы, ПолучитьПарольИзСеансовыхДанных, СообщениеОбОшибке); - - Если СостояниеОперации = Неопределено - И СчетчикПовторовПриОшибкеПодключения < 5 Тогда - СчетчикПовторовПриОшибкеПодключения = СчетчикПовторовПриОшибкеПодключения + 1; - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 30, Истина); - Возврат; - КонецЕсли; - Иначе - // Обмен по COM соединению. - СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторЗадания); - КонецЕсли; + СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеЗадания(ИдентификаторЗадания); Если СостояниеОперации = "Active" Или СостояниеОперации = "Активно" Тогда ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 30, Истина); @@ -1751,8 +1590,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции мастера. +#КонецОбласти + +#Область ПроцедурыИФункцииМастера &НаКлиенте Функция ПолучитьКлючиВыделенныхСтрок(ВыделенныеСтроки) @@ -1847,8 +1687,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ОБРАБОТКИ ФОНОВЫХ ЗАДАНИЙ +#КонецОбласти + +#Область РазделОбработкиФоновыхЗаданий &НаКлиенте Функция ПараметрыФоновогоЗадания() @@ -1940,12 +1781,7 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = ПараметрыЗадания.НаименованиеЗадания; - - Если ПолучитьПарольИзСеансовыхДанных Тогда - ПарольСеансовыхДанных = Новый Структура("WSПароль", ОбменДаннымиСервер.ПарольСинхронизацииДанных(Объект.УзелИнформационнойБазы)); - ЗаполнитьЗначенияСвойств(ПараметрыЗадания.ПараметрыМетода, ПарольСеансовыхДанных); - КонецЕсли; - + Результат = ДлительныеОперации.ВыполнитьВФоне( ПараметрыЗадания.ВыполняемыйМетод, ПараметрыЗадания.ПараметрыМетода, @@ -1993,144 +1829,14 @@ #КонецОбласти +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ ОБРАБОТЧИКОВ СОБЫТИЙ ПЕРЕХОДОВ #Область ОбработчикиСобытийПереходов -&НаКлиенте -Функция Подключаемый_СтраницаНачала_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - ПропуститьСтраницу = ЭтоПереходДалее И ПропускатьСтраницуТранспорта; - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаНачала_ПриПереходеДалее(Отказ) - - Если ПропускатьСтраницуТранспорта Тогда - Возврат Неопределено; - КонецЕсли; - - // Выполняем проверки заполнения реквизитов формы. - Если Объект.УзелИнформационнойБазы.Пустая() Тогда - - НСтрока = НСтр("ru = 'Укажите узел информационной базы'"); - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока, , "Объект.УзелИнформационнойБазы", , Отказ); - - ИначеЕсли Объект.ВидТранспортаСообщенийОбмена.Пустая() - И Не ПолученоСообщениеДляСопоставленияДанных Тогда - - НСтрока = НСтр("ru = 'Укажите вариант подключения'"); - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока, , "Объект.ВидТранспортаСообщенийОбмена", , Отказ); - - ИначеЕсли ОбменЧерезВебСервис И ПустаяСтрока(WSПароль) Тогда - - НСтрока = НСтр("ru = 'Не указан пароль.'"); - ОбщегоНазначенияКлиент.СообщитьПользователю(НСтрока, , "WSПароль", , Отказ); - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ОбменЧерезВнешнееСоединение Тогда - ОбменДаннымиКлиент.ПроверитьИЗарегистрироватьCOMСоединитель(Объект.УзелИнформационнойБазы); - Возврат Неопределено; - КонецЕсли; - - Если ОбменЧерезВебСервис Тогда - ПроверитьПодключениеИСохранитьНастройки(Отказ); - - Если Отказ Тогда - ПоказатьПредупреждение(, НСтр("ru = 'Не удалось выполнить операцию.'")); - КонецЕсли; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаСервере -Процедура ПроверитьПодключениеИСохранитьНастройки(Отказ) - - ПараметрыАутентификации = Неопределено; - Если Не ПропускатьСтраницуТранспорта Тогда - ПараметрыАутентификации = Новый Структура; - ПараметрыАутентификации.Вставить("ИспользоватьТекущегоПользователя", Ложь); - ПараметрыАутентификации.Вставить("Пароль", WSПароль); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( - Объект.УзелИнформационнойБазы, ПараметрыАутентификации); - - СообщениеОбОшибке = ""; - СообщениеОбОшибкеПользователю = ""; - НастройкаЗавершена = Истина; - ПолученыДанныеДляСопоставления = Ложь; - - ЕстьПодключение = ОбменДаннымиВебСервис.ЕстьПодключениеККорреспонденту(Объект.УзелИнформационнойБазы, - ПараметрыПодключения, СообщениеОбОшибкеПользователю, НастройкаЗавершена, ПолученыДанныеДляСопоставления); - - Если Не ЕстьПодключение Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось подключиться к приложению в Интернете, по причине ""%1"". - |Убедитесь, что: - |- введен правильный пароль; - |- указан корректный адрес для подключения; - |- приложение доступно по указанному в настройках адресу; - |- настройка синхронизации не была удалена в приложении в Интернете. - |Повторите попытку синхронизации.'"), - СообщениеОбОшибкеПользователю); - Отказ = Истина; - ИначеЕсли Не НастройкаЗавершена Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и завершите в ней настройку синхронизации. Выполнение обмена данными отменено.'"), - НаименованиеКорреспондента); - Отказ = Истина; - ИначеЕсли ПолученыДанныеДляСопоставления Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и выполните загрузку сообщения для сопоставления данных. Выполнение обмена данными отменено.'"), - НаименованиеКорреспондента); - Отказ = Истина; - КонецЕсли; - - Если ЕстьПодключение И Не ПропускатьСтраницуТранспорта И WSЗапомнитьПароль Тогда - Попытка - // Обновляем запись в РС. - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); - СтруктураЗаписи.Вставить("WSПароль", WSПароль); - - РегистрыСведений.НастройкиТранспортаОбменаДанными.ОбновитьЗапись(СтруктураЗаписи); - - WSПароль = Строка(ЭтотОбъект.УникальныйИдентификатор); - Исключение - СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); - - ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); - Возврат; - КонецПопытки; - КонецЕсли; - - Если Отказ Тогда - ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Страницы проверки запущенной синхронизации. +#Область СтраницыПроверкиЗапущеннойСинхронизации &НаКлиенте Функция Подключаемый_СтраницаПроверкаЗадачОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2171,9 +1877,8 @@ &НаКлиенте Функция Подключаемый_СтраницаПроверкаЗадачОбмена_ПриПереходеДалее(Отказ) - Если ПоУзлуЗапланированОбмен Тогда - ОтменитьОчередьИПродолжитьНаСервере(); - КонецЕсли; + ОтменитьОчередьИПродолжитьНаСервере(); + ВыполнитьПереходДалее(); Возврат Неопределено; @@ -2183,14 +1888,17 @@ Процедура ОтменитьОчередьИПродолжитьНаСервере() МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация"); - МодульОбменДаннымиВнутренняяПубликация.ОтменитьОчередьЗадач(Объект.УзелИнформационнойБазы, + МодульОбменДаннымиВнутренняяПубликация.ОтменитьОчередьЗадач( + Объект.УзелИнформационнойБазы, СценарийВыполненияЧерезВнутреннююПубликацию, - ИдентификаторОбменаЧерезВнутреннююПубликацию); + ИдентификаторОбменаЧерезВнутреннююПубликацию, + ОбластьДанныхКорреспондента); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы обработки получения данных (транспорт сообщения обмена). +#КонецОбласти + +#Область СтраницыОбработкиПолученияДанныхТранспортСообщенияОбмена &НаКлиенте Функция Подключаемый_СтраницаОжиданияАнализаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2207,7 +1915,7 @@ ПропуститьПолучениеДанных = Ложь; ПерейтиДалее = Ложь; - ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); + ПолучитьПарольИзСеансовыхДанных = Ложь; ПараметрыМетода = Новый Структура; ПараметрыМетода.Вставить("Отказ", Ложь); @@ -2218,9 +1926,9 @@ ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); ПараметрыМетода.Вставить("ИмяВременногоКаталогаСообщенийОбмена", Объект.ИмяВременногоКаталогаСообщенийОбмена); - ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыМетода.Вставить("WSПароль", Неопределено); + ПараметрыМетода.Вставить("ИдентификаторТранспорта", Объект.ИдентификаторТранспорта); + ПараметрыМетода.Вставить("ДанныеАутентификации", ДанныеАутентификации); ПараметрыМетода.Вставить("ПолученоСообщениеДляСопоставленияДанных", ПолученоСообщениеДляСопоставленияДанных); ПараметрыМетода.Вставить("ИдентификаторВременногоКаталогаДляОбмена", ""); @@ -2256,63 +1964,6 @@ КонецПроцедуры -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияАнализаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ПропуститьПолучениеДанных Тогда - Возврат Неопределено; - КонецЕсли; - - Если ДлительнаяОперацияЗавершена - И Не ДлительнаяОперацияЗавершенаСОшибкой Тогда - - // Необходимо получить во временный каталог файл, подготовленный на корреспонденте. - Если Не ЗначениеЗаполнено(Объект.ИмяФайлаСообщенияОбмена) Тогда - - ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); - - ПерейтиДалее = Ложь; - - ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("Отказ", Ложь); - ПараметрыМетода.Вставить("ИдентификаторФайла", ИдентификаторФайла); - ПараметрыМетода.Вставить("ИдентификаторФайлаПакетаДанных", ИдентификаторФайлаПакетаДанных); - ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - ПараметрыМетода.Вставить("ИмяВременногоКаталогаСообщенийОбмена", Объект.ИмяВременногоКаталогаСообщенийОбмена); - ПараметрыМетода.Вставить("WSПароль", Неопределено); - - ПараметрыЗадания = ПараметрыФоновогоЗадания(); - ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ПомощникИнтерактивногоОбменаДанными.ПолучитьСообщениеОбменаОтКорреспондентаВоВременныйКаталог"; - ПараметрыЗадания.ПараметрыМетода = ПараметрыМетода; - ПараметрыЗадания.НаименованиеЗадания = НСтр("ru = 'Получение файла с данными сообщения обмена во временный каталог'"); - ПараметрыЗадания.ОбработчикЗавершения = "ЗавершениеПолученияФайлаСДаннымиОтКорреспондентаВоВременныйКаталог"; - - ФоновоеЗаданиеЗапуститьНаКлиенте(ПараметрыЗадания, Отказ, ПолучитьПарольИзСеансовыхДанных); - - КонецЕсли; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Процедура ЗавершениеПолученияФайлаСДаннымиОтКорреспондентаВоВременныйКаталог() - - ОбработатьСтатусВыполненияФоновогоЗадания("ЗагрузкаДанных"); - - Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда - ПропуститьПолучениеДанных = Истина; - Иначе - ЗавершениеПолученияДанныхВоВременныйКаталогНаСервере(); - КонецЕсли; - - ПодключитьОбработчикОжидания("ВыполнитьПереходДалее", 0.1, Истина); - -КонецПроцедуры - &НаСервере Процедура ЗавершениеПолученияДанныхВоВременныйКаталогНаСервере() @@ -2339,8 +1990,6 @@ Иначе - ЗаполнитьЗначенияСвойств(ЭтотОбъект, РезультатВыполненияМетода, , "WSПароль"); - Объект.ИмяФайлаСообщенияОбмена = РезультатВыполненияМетода.ИмяФайлаСообщенияОбмена; Объект.ИмяВременногоКаталогаСообщенийОбмена = РезультатВыполненияМетода.ИмяВременногоКаталогаСообщенийОбмена; @@ -2365,8 +2014,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы анализа данных (автоматическое сопоставление данных). +#КонецОбласти + +#Область СтраницыАнализаДанныхАвтоматическоеСопоставлениеДанных &НаКлиенте Функция Подключаемый_СтраницаАнализДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2500,8 +2150,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы обработки сопоставления данных (интерактивное сопоставление данных). +#КонецОбласти + +#Область СтраницыОбработкиСопоставленияДанныхИнтерактивноеСопоставлениеДанных &НаКлиенте Функция Подключаемый_СтраницаИнформацииСтатистики_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2574,8 +2225,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы обработки загрузки данных +#КонецОбласти + +#Область СтраницыОбработкиЗагрузкиДанных &НаКлиенте Функция Подключаемый_ЗагрузкаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2643,7 +2295,7 @@ Если (ЗакончитьСопоставлениеДанных И Не ПропуститьПолучениеДанных) Или (ТекущийРезультатЗагрузкиДанных = "Предупреждение_СообщениеОбменаБылоРанееПринято") Тогда - УдалитьСообщениеДляСопоставленияДанных(Объект.УзелИнформационнойБазы, Объект.ВидТранспортаСообщенийОбмена); + УдалитьСообщениеДляСопоставленияДанных(Объект.УзелИнформационнойБазы, Объект.ИдентификаторТранспорта); КонецЕсли; КонецЕсли; @@ -2652,8 +2304,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы дополнительной выгрузки (регистрация к выгрузке дополнительных данных). +#КонецОбласти + +#Область СтраницыДополнительнойВыгрузкиРегистрацияКВыгрузкеДополнительныхДанных &НаКлиенте Функция Подключаемый_СтраницаВопросОСоставеВыгрузки_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2796,8 +2449,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы обработки выгрузки данных +#КонецОбласти + +#Область СтраницыОбработкиВыгрузкиДанных &НаКлиенте Функция Подключаемый_ВыгрузкаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) @@ -2818,26 +2472,6 @@ КонецФункции -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - - Если ДлительнаяОперацияЗавершена Тогда - Если ДлительнаяОперацияЗавершенаСОшибкой Тогда - ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( - Объект.УзелИнформационнойБазы, - "ВыгрузкаДанных", - ДатаНачалаОперации, - СообщениеОбОшибке); - Иначе - ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( - Объект.УзелИнформационнойБазы, ДатаНачалаОперации); - КонецЕсли; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - &НаКлиенте Процедура ПриНачалеВыгрузкиДанных(Отказ) @@ -2866,17 +2500,17 @@ ПараметрыОбработчикаОжиданияВыгрузкиДанных.ТекущийИнтервал, Истина); Иначе - ПолучитьПарольИзСеансовыхДанных = (Не ПропускатьСтраницуТранспорта И Не WSЗапомнитьПароль); + ПолучитьПарольИзСеансовыхДанных = Ложь; ПараметрыМетода = Новый Структура; - ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); - ПараметрыМетода.Вставить("ВидТранспортаСообщенийОбмена", Объект.ВидТранспортаСообщенийОбмена); - ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - ПараметрыМетода.Вставить("ДлительнаяОперация", ДлительнаяОперация); - ПараметрыМетода.Вставить("ИдентификаторОперации", ИдентификаторОперации); - ПараметрыМетода.Вставить("ИдентификаторФайла", ИдентификаторФайла); - ПараметрыМетода.Вставить("WSПароль", Неопределено); - ПараметрыМетода.Вставить("Отказ", Ложь); + ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + ПараметрыМетода.Вставить("ИдентификаторТранспорта", Объект.ИдентификаторТранспорта); + ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); + ПараметрыМетода.Вставить("ДлительнаяОперация", ДлительнаяОперация); + ПараметрыМетода.Вставить("ИдентификаторОперации", ИдентификаторОперации); + ПараметрыМетода.Вставить("ИдентификаторФайла", ИдентификаторФайла); + ПараметрыМетода.Вставить("ДанныеАутентификации", ДанныеАутентификации); + ПараметрыМетода.Вставить("Отказ", Ложь); ПараметрыЗадания = ПараметрыФоновогоЗадания(); ПараметрыЗадания.ВыполняемыйМетод = "Обработки.ПомощникИнтерактивногоОбменаДанными.ВыполнитьВыгрузкуДанных"; @@ -3101,8 +2735,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страницы итоговой информации +#КонецОбласти + +#Область СтраницыИтоговойИнформации &НаКлиенте Функция Подключаемый_СтраницаОкончанияСопоставления_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) @@ -3119,8 +2754,11 @@ #КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ +#КонецОбласти + +#КонецОбласти + +#Область ИнициализацияПереходов &НаСервере Процедура ЗаполнитьТаблицуПереходов() @@ -3135,9 +2773,7 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока("СтраницаНачала", "СтраницаНавигацииНачало", "Подключаемый_СтраницаНачала_ПриОткрытии", "Подключаемый_СтраницаНачала_ПриПереходеДалее"); - - Если ОбменМеждуПриложениямиВСервисе Или ОбменЧерезВнутреннююПубликацию Тогда + Если ОбменМеждуПриложениямиВСервисе Тогда Если ПолученоСообщениеДляСопоставленияДанных Тогда // Получение данных (транспорт сообщения обмена). @@ -3162,12 +2798,6 @@ ИначеЕсли ОтправитьДанные Тогда - Если ОбменЧерезВнутреннююПубликацию Тогда - ТаблицаПереходовНоваяСтрока("СтраницаПроверкаЗадачОбмена", "СтраницаНавигацииПродолжение", - "Подключаемый_СтраницаПроверкаЗадачОбмена_ПриОткрытии", - "Подключаемый_СтраницаПроверкаЗадачОбмена_ПриПереходеДалее"); - КонецЕсли; - Если РежимДополненияВыгрузки Тогда РезультатВыгрузкиДанных = ""; ТаблицаПереходовНоваяСтрока("СтраницаВопросОСоставеВыгрузки", "СтраницаНавигацииПродолжение", "Подключаемый_СтраницаВопросОСоставеВыгрузки_ПриОткрытии"); @@ -3227,6 +2857,13 @@ КонецЕсли; Если ОтправитьДанные Тогда + + Если ОбменЧерезВнутреннююПубликацию Тогда + ТаблицаПереходовНоваяСтрока("СтраницаПроверкаЗадачОбмена", "СтраницаНавигацииПродолжение", + "Подключаемый_СтраницаПроверкаЗадачОбмена_ПриОткрытии", + "Подключаемый_СтраницаПроверкаЗадачОбмена_ПриПереходеДалее"); + КонецЕсли; + Если РежимДополненияВыгрузки Тогда // Настройка выгрузки данных. РезультатВыгрузкиДанных = ""; diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index bf5f1dfca..d8dbec48f 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html @@ -1,18 +1,18 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Помощник интерактивной синхронизации данных предназначен для выполнения синхронизации данных с возможностью предварительного просмотра и сопоставления загружаемых данных. Помощник позволяет выполнять сопоставление объектов двух информационных баз, между которыми настроена синхронизация данных. После выполнения сопоставления выполняется загрузка данных и последующая выгрузка данных.</p> -<p>Режим интерактивной синхронизации данных следует использовать в случае, когда до начала синхронизации один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим синхронизации данных следует выбирать при первой синхронизации данных между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную.</p> -<p>Открыть помощник можно, нажав кнопку <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img> <strong>Запустить синхронизацию</strong> в списке <a href="CommonForm.НастройкиСинхронизацииДанных/Help">Синхронизация данных</a>.</p> +<p>Помощник интерактивной синхронизации данных предназначен для выполнения синхронизации данных с возможностью предварительного просмотра и сопоставления загружаемых данных. Помощник позволяет выполнять сопоставление объектов двух информационных баз, между которыми настроена синхронизация данных. После выполнения сопоставления выполняется загрузка данных и последующая выгрузка данных.</p> +<p>Режим интерактивной синхронизации данных следует использовать в случае, когда до начала синхронизации один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим синхронизации данных следует выбирать при первой синхронизации данных между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную.</p> +<p>Открыть помощник можно, нажав кнопку <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img><strong>Запустить синхронизацию</strong> в списке <a href="CommonForm.НастройкиСинхронизацииДанных/Help">Синхронизация данных</a>.</p> <h3>Параметры подключения</h3> -<ul><li>На первой странице помощника следует выбрать <a href="InformationRegister.УдалитьНастройкиТранспортаОбмена/Help">вид транспорта сообщений обмена</a> (можно изменить уже имеющийся вариант подключения, он указан на этой странице), для этого нажмите <img src="StdPicture.Change"></img> <strong>Настроить,</strong> при необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена. +<ul><li>На первой странице помощника следует выбрать <a href="InformationRegister.УдалитьНастройкиТранспортаОбмена/Help">вид транспорта сообщений обмена</a> (можно изменить уже имеющийся вариант подключения, он указан на этой странице), для этого нажмите <img src="StdPicture.Change"></img><strong>Настроить,</strong> при необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена. </li> <li>Для перехода к следующей странице нажмите кнопку <strong>Далее</strong>. </li></ul><h3 align="left">Сопоставление данных</h3> -<ul><li>На второй странице помощника отображается статистика сопоставления объектов. Перед открытием страницы приложение выполняет попытку сопоставить данные автоматически. +<ul><li>На второй странице помощника отображается статистика сопоставления объектов. Перед открытием страницы приложение выполняет попытку сопоставить данные автоматически. </li> <li>Автоматическое сопоставление выполняется по заданным по умолчанию полям сопоставления, при этом соблюдаются самые строгие правила сопоставления. Рекомендуется выполнить проверку результатов автоматического сопоставления данных. В списке выводится: <ul><li> <div><strong>Данные, Всего принято, шт</strong>.</div> </li> -<li><img src="CommonPicture.УдалитьИнформация" width="16" height="16"></img> - имеются вопросы по сопоставлению объектов; +<li><img src="CommonPicture.УдалитьИнформация" width="16" height="16"></img> - имеются вопросы по сопоставлению объектов; </li> <li> <div align="left"><strong>В этом приложении, шт</strong>.</div> @@ -23,52 +23,52 @@ </li> <li> <div align="left"><strong>Сопоставление, %</strong></div></li></ul></li> -<li>С помощью кнопки <strong>Сопоставить</strong> открывается окно для предварительного просмотра загружаемых данных и выполнения <a href="DataProcessor.СопоставлениеОбъектовИнформационныхБаз/Help">сопоставления объектов вручную</a>. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующей синхронизации данных сопоставляются автоматически. При использовании интерактивного режима загрузки рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически. +<li>С помощью кнопки <strong>Сопоставить</strong> открывается окно для предварительного просмотра загружаемых данных и выполнения <a href="DataProcessor.СопоставлениеОбъектовИнформационныхБаз/Help">сопоставления объектов вручную</a>. Сопоставленные вручную объекты двух ИБ запоминаются и при выполнении следующей синхронизации данных сопоставляются автоматически. При использовании интерактивного режима загрузки рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически. </li> <li> -<div align="left">Список не является динамическим, поэтому для того чтобы увидеть новые данные, полученные и сопоставленные после открытия списка, нажмите <img src="StdPicture.Refresh"></img> <strong>Обновить</strong>.</div> +<div align="left">Список не является динамическим, поэтому для того чтобы увидеть новые данные, полученные и сопоставленные после открытия списка, нажмите <img src="StdPicture.Refresh"></img><strong>Обновить</strong>.</div> </li> <li> -<div align="left">По команде <strong>Еще -</strong> <strong>Получить данные</strong> выполняется загрузка данных для выделенных строк таблицы. Загрузку данных надо использовать в редких случаях, когда требуется сопоставить взаимосвязанные таблицы данных.</div> +<div align="left">По команде <strong>Еще -</strong> <strong>Получить данные</strong> выполняется загрузка данных для выделенных строк таблицы. Загрузку данных надо использовать в редких случаях, когда требуется сопоставить взаимосвязанные таблицы данных.</div> </li> <li> <div align="left">Перечисленные команды доступны для вызова из контекстного меню таблицы статистики сопоставления. При вызове из контекстного меню эти команды актуальны для множества выделенных строк таблицы.</div> </li> <li> -<div align="left">После того как прошло сопоставление, приложение запоминает правила и эта страница уже не выводится. </div> +<div align="left">После того как прошло сопоставление, приложение запоминает правила и эта страница уже не выводится. </div> </li> <li> -<div align="left">Нажмите кнопку <strong>Далее</strong> для перехода к синхронизации данных.</div></li></ul><h3>Данные для отправки</h3> -<ul><li>На третьей странице помощника следует указать данные для отправки в другое приложение. Если данные не указывать, то по умолчанию будут отправлены данные, измененные с момента последней сессии синхронизации. +<div align="left">Нажмите кнопку <strong>Далее</strong> для перехода к синхронизации данных.</div></li></ul><h3>Данные для отправки</h3> +<ul><li>На третьей странице помощника следует указать данные для отправки в другое приложение. Если данные не указывать, то по умолчанию будут отправлены данные, измененные с момента последней сессии синхронизации. </li> <li>По умолчанию переключатель установлен в положение положении <strong>Не добавлять</strong> - в этом случае будут отправлены данные согласно общим настройкам. </li> <li> -<div align="left">Для дополнительной выгрузки документов нажмите переключатель <strong>Добавить документы</strong>. </div> +<div align="left">Для дополнительной выгрузки документов нажмите переключатель <strong>Добавить документы</strong>. </div> <ul><li> -<div align="left">В поле <strong>За период:</strong> <img src="StdPicture.InputFieldSelect"></img> <strong>Выберите</strong> период, за который их необходимо отправить.</div> +<div align="left">В поле <strong>За период:</strong> <img src="StdPicture.InputFieldSelect"></img><strong>Выберите</strong> период, за который их необходимо отправить.</div> </li> <li> -<div align="left"> В поле <strong>С отбором:</strong> по умолчанию установлено, что можно отправить <strong>Все документы</strong> (ссылка). Нажмите на ссылку, для того чтобы установить <a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.РедактированиеПериодаИОтбора/Help">условия отбора</a>: введите поле для отбора, установите <strong>Вид сравнения</strong>, выберите <strong>Значение</strong> для сравнения. Условий может быть несколько, в этом случае они группируются с помощью логических операций <strong>И</strong>, <strong>Или</strong>, <strong>Не</strong>.</div></li></ul></li> +<div align="left"> В поле <strong>С отбором:</strong> по умолчанию установлено, что можно отправить <strong>Все документы</strong> (ссылка). Нажмите на ссылку, для того чтобы установить <a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.РедактированиеПериодаИОтбора/Help">условия отбора</a>: введите поле для отбора, установите <strong>Вид сравнения</strong>, выберите <strong>Значение</strong> для сравнения. Условий может быть несколько, в этом случае они группируются с помощью логических операций <strong>И</strong>, <strong>Или</strong>, <strong>Не</strong>.</div></li></ul></li> <li> <div align="left">Для того чтобы отправить дополнительные данные, включите переключатель <strong>Добавить данные</strong>. </div> <ul><li> -<div align="left">Их следует отобрать, для этого перейдите по ссылке, которая по умолчанию принимает значение <strong>Дополнительные данные не выбраны</strong>. Подберите <a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки/Help">Отправляемые данные</a> из предлагаемых приложением списков, нажмите <strong>ОК</strong>. После этого ссылка принимает значение перечисления выбранных данных.</div></li></ul></li> +<div align="left">Их следует отобрать, для этого перейдите по ссылке, которая по умолчанию принимает значение <strong>Дополнительные данные не выбраны</strong>. Подберите <a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки/Help">Отправляемые данные</a> из предлагаемых приложением списков, нажмите <strong>ОК</strong>. После этого ссылка принимает значение перечисления выбранных данных.</div></li></ul></li> <li> -<div align="left"><a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.СоставВыгрузки/Help">Статистику по отправляемым данным</a> можно просмотреть, нажав на ссылку <strong>Отчет о составе отправляемых данных</strong>.</div> +<div align="left"><a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.СоставВыгрузки/Help">Статистику по отправляемым данным</a> можно просмотреть, нажав на ссылку <strong>Отчет о составе отправляемых данных</strong>.</div> </li> <li> <div align="left">Нажмите <strong>Настройки</strong>, для того чтобы воспользоваться ранее <a href="DataProcessor.ИнтерактивноеИзменениеВыгрузки.Form.РедактированиеСоставаНастроек/Help">сохраненными настройками</a> или сохранить вновь введенные.</div> </li> <li> <div align="left">Нажмите <strong>Далее</strong>, для того чтобы начать синхронизацию данных с выбранными параметрами.</div></li></ul><h3>Синхронизация данных завершена</h3> -<ul><li>На заключительной странице помощника приложение выводит сообщения о состоянии синхронизации: -<ul><li><img src="CommonPicture.СостояниеОбменаДаннымиОшибка"></img><strong>Не удалось получить данные</strong> или <strong>Данные успешно получены</strong> и т.д. +<ul><li>На заключительной странице помощника приложение выводит сообщения о состоянии синхронизации: +<ul><li><img src="CommonPicture.СостояниеОбменаДаннымиОшибка"></img><strong>Не удалось получить данные</strong> или <strong>Данные успешно получены</strong> и т.д. </li> -<li><strong><img src="CommonPicture.СостояниеОбменаДаннымиОшибка" width="16" height="16"></img>Не удалось отправить данные</strong> или <strong>Данные успешно отправлены</strong> и т.д. +<li><strong><img src="CommonPicture.СостояниеОбменаДаннымиОшибка" width="16" height="16"></img>Не удалось отправить данные</strong> или <strong>Данные успешно отправлены</strong> и т.д. </li> -<li>По ссылке <strong>Подробно</strong> можно перейти в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> и просмотреть, как проходил процесс синхронизации, узнать об ошибках.</li></ul></li> -<li>При необходимости можно настроить <a href="Catalog.СценарииОбменовДанными.Form.ФормаЭлемента/Help">расписание для синхронизации данных</a> в автоматическом режиме (в том случае, если текущая синхронизация данных еще не включена ни в одно из существующих <a href="Catalog.СценарииОбменовДанными/Help">расписаний выполнения синхронизации</a>). Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img><strong>Настроить</strong>. +<li>По ссылке <strong>Подробно</strong> можно перейти в <a href="DataProcessor.ЖурналРегистрации/Help">журнал регистрации</a> и просмотреть, как проходил процесс синхронизации, узнать об ошибках.</li></ul></li> +<li>При необходимости можно настроить <a href="Catalog.СценарииОбменовДанными.Form.ФормаЭлемента/Help">расписание для синхронизации данных</a> в автоматическом режиме (в том случае, если текущая синхронизация данных еще не включена ни в одно из существующих <a href="Catalog.СценарииОбменовДанными/Help">расписаний выполнения синхронизации</a>). Нажмите <img src="StdPicture.ScheduledJob" width="16" height="16"></img><strong>Настроить</strong>. </li> <li>Для завершения работы с помощником нажмите <strong>Готово</strong>.</li></ul><h3>См. также:</h3> <ul><li><a href="CommonForm.НастройкиСинхронизацииДанных/Help">Синхронизация данных</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl index 62221790d..5bcaf48f7 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl @@ -46,12 +46,12 @@ ИмяВременногоФайла = ""; Если ЗначениеЗаполнено(ОбщиеНастройки.СообщениеДляСопоставленияДанных) Тогда - WSПассивныйРежимФайловаяИБ = ОбщегоНазначения.ИнформационнаяБазаФайловая() - И Параметры.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим; - - ИмяВременногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ОбщиеНастройки.СообщениеДляСопоставленияДанных, WSПассивныйРежимФайловаяИБ); + ПассивныйРежимФайловаяИБ = ОбщегоНазначения.ИнформационнаяБазаФайловая() + И ТранспортСообщенийОбмена.ПараметрТранспорта(Параметры.ИдентификаторТранспорта, "ПассивныйРежим"); - Файл = Новый Файл(ИмяВременногоФайла); + ИмяВременногоФайла = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ОбщиеНастройки.СообщениеДляСопоставленияДанных, ПассивныйРежимФайловаяИБ); + + Файл = Новый Файл(ИмяВременногоФайла); Если Файл.Существует() И Файл.ЭтоФайл() Тогда // Помещаем информацию о сообщении для сопоставления обратно в хранилище, // на случай аварийного завершения процесса анализа данных, для возможности повторной работы с сообщением. @@ -88,24 +88,29 @@ Параметры.Вставить("СообщениеОбОшибке", СообщениеОбОшибке); КонецЕсли; + + Иначе - ИначеЕсли Параметры.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда + ПараметрыИнициализации = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + ПараметрыИнициализации.Корреспондент = Параметры.УзелИнформационнойбазы; + ЗаполнитьЗначенияСвойств(ПараметрыИнициализации, Параметры); - СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондента(Отказ, Параметры.УзелИнформационнойБазы, Ложь); + Транспорт = ТранспортСообщенийОбмена.Инициализация(ПараметрыИнициализации); - ИначеЕсли Параметры.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + Если Транспорт.ПолучитьДанные() Тогда + СтруктураДанных.ИмяФайлаСообщенияОбмена = Транспорт.СообщениеОбмена; + СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена = Транспорт.ВременныйКаталог; + + Файл = Новый Файл(Транспорт.СообщениеОбмена); + Если Файл.Существует() Тогда + СтруктураДанных.ИдентификаторФайлаПакетаДанных = Файл.ПолучитьВремяИзменения(); + КонецЕсли; + + Иначе + + Отказ = Истина; - СтруктураДанных = ОбменДаннымиВебСервис.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - Параметры.УзелИнформационнойБазы, - Параметры.ИдентификаторФайла, - Параметры.ДлительнаяОперация, - Параметры.ИдентификаторОперации, - Параметры.WSПароль); - - Иначе // FILE, FTP, EMAIL - - СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталог(Отказ, Параметры.УзелИнформационнойБазы, Параметры.ВидТранспортаСообщенийОбмена, Ложь); + КонецЕсли; КонецЕсли; @@ -118,30 +123,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Получает сообщение обмена из информационной базы корреспондента через веб-сервис во временный каталог пользователя ОС. -// -Процедура ПолучитьСообщениеОбменаОтКорреспондентаВоВременныйКаталог(Параметры, АдресВременногоХранилища) Экспорт - - Отказ = Ложь; - - УстановитьПривилегированныйРежим(Истина); - - СтруктураДанных = ОбменДаннымиВебСервис.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - Параметры.УзелИнформационнойБазы, - Параметры.ИдентификаторФайла, - Параметры.WSПароль); - - Параметры.Отказ = Отказ; - Параметры.ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; - Параметры.ИдентификаторФайлаПакетаДанных = СтруктураДанных.ИдентификаторФайлаПакетаДанных; - Параметры.ИмяФайлаСообщенияОбмена = СтруктураДанных.ИмяФайлаСообщенияОбмена; - - ПоместитьВоВременноеХранилище(Параметры, АдресВременногоХранилища); - -КонецПроцедуры - // Для внутреннего использования. // Процедура ВыполнитьЗагрузкуДанных(Параметры, АдресВременногоХранилища) Экспорт @@ -168,18 +149,19 @@ ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; ПараметрыОбмена.ВыполнятьВыгрузку = Истина; ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = Параметры.ВидТранспортаСообщенийОбмена; + ПараметрыОбмена.ИдентификаторТранспорта = Параметры.ИдентификаторТранспорта; ПараметрыОбмена.ДлительнаяОперация = Параметры.ДлительнаяОперация; ПараметрыОбмена.ИдентификаторОперации = Параметры.ИдентификаторОперации; ПараметрыОбмена.ИдентификаторФайла = Параметры.ИдентификаторФайла; - ПараметрыОбмена.ПараметрыАутентификации = Параметры.WSПароль; + ПараметрыОбмена.ДанныеАутентификации = Параметры.ДанныеАутентификации; ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Параметры.УзелИнформационнойБазы, ПараметрыОбмена, Отказ); Параметры.ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; Параметры.ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; Параметры.ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - Параметры.WSПароль = ПараметрыОбмена.ПараметрыАутентификации; + Параметры.ДанныеАутентификации = ПараметрыОбмена.ДанныеАутентификации; + Параметры.Отказ = Отказ; ПоместитьВоВременноеХранилище(Параметры, АдресВременногоХранилища); @@ -187,6 +169,12 @@ КонецПроцедуры // Для внутреннего использования. +// +// Параметры: +// ИнформацияСтатистики - ТаблицаЗначений +// +// Возвращаемое значение: +// Булево - все данные сопоставлены // Функция ВсеДанныеСопоставлены(ИнформацияСтатистики) Экспорт @@ -195,6 +183,12 @@ КонецФункции // Для внутреннего использования. +// +// Параметры: +// ИнформацияСтатистики - ТаблицаЗначений +// +// Возвращаемое значение: +// Булево - есть не сопоставленная НСИ // Функция ЕстьНеСопоставленнаяНСИ(ИнформацияСтатистики) Экспорт Возврат (ИнформацияСтатистики.НайтиСтроки(Новый Структура("ИндексКартинки, ЭтоНСИ", 1, Истина)).Количество() > 0); @@ -208,7 +202,7 @@ НСтр("ru = 'Регистрация данных для выгрузки (%1)'"), НастройкиРегистрации.УзелОбмена); - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Регистрация данных для начальной выгрузки для ""%1"" уже выполняется.'"), НастройкиРегистрации.УзелОбмена); @@ -223,7 +217,6 @@ НастройкиРегистрации.УзелОбмена); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникИнтерактивногоОбменаДанными.ЗарегистрироватьДанныеДляВыгрузки", @@ -259,11 +252,11 @@ НастройкиВыгрузки.УзелОбмена); АктивныеФоновыеЗадания = Неопределено; - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания, АктивныеФоновыеЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания, АктивныеФоновыеЗадания) Тогда ЗавершитьФоновыеЗадания(КлючФоновогоЗадания, АктивныеФоновыеЗадания); КонецЕсли; - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выгрузка данных для сопоставления для ""%1"" уже выполняется.'"), НастройкиВыгрузки.УзелОбмена); @@ -278,7 +271,6 @@ НастройкиВыгрузки.УзелОбмена); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникИнтерактивногоОбменаДанными.ВыгрузитьДанныеДляСопоставления", @@ -362,11 +354,13 @@ ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = НастройкиВыгрузки.ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = НастройкиВыгрузки.ИдентификаторТранспорта; + ПараметрыОбмена.НастройкиТранспорта = НастройкиВыгрузки.НастройкиТранспорта; + ПараметрыОбмена.СообщениеДляСопоставленияДанных = Истина; - Если НастройкиВыгрузки.Свойство("WSПароль") Тогда - ПараметрыОбмена.Вставить("ПараметрыАутентификации", НастройкиВыгрузки.WSПароль); + Если НастройкиВыгрузки.Свойство("ДанныеАутентификации") Тогда + ПараметрыОбмена.Вставить("ДанныеАутентификации", НастройкиВыгрузки.ДанныеАутентификации); КонецЕсли; Отказ = Ложь; @@ -491,18 +485,6 @@ КонецПроцедуры -Функция ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания, АктивныеФоновыеЗадания = Неопределено) - - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - - АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - - Возврат (АктивныеФоновыеЗадания.Количество() > 0); - -КонецФункции - Процедура ЗавершитьФоновыеЗадания(КлючФоновогоЗадания, АктивныеФоновыеЗадания) Паузы = Новый Массив; @@ -516,12 +498,12 @@ ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗадание.УникальныйИдентификатор); - Пока ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) И Итерация < Паузы.Количество() Цикл + Пока ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) И Итерация < Паузы.Количество() Цикл Пауза = Паузы[Итерация]; ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Пауза); - Итерация = Итерация + 1; + Итерация = Итерация + 1; КонецЦикла; - + КонецЦикла; КонецПроцедуры @@ -653,7 +635,7 @@ ПомощникИнтерактивногоОбменаДанными.ИмяФайлаСообщенияОбмена = ИмяФайлаСообщенияОбмена; ПомощникИнтерактивногоОбменаДанными.ИмяВременногоКаталогаСообщенийОбмена = ИмяВременногоКаталогаСообщенийОбмена; ПомощникИнтерактивногоОбменаДанными.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Корреспондент); - ПомощникИнтерактивногоОбменаДанными.ВидТранспортаСообщенийОбмена = Неопределено; + ПомощникИнтерактивногоОбменаДанными.ИдентификаторТранспорта = ""; ПомощникИнтерактивногоОбменаДанными.ИнформацияСтатистики.Загрузить(ИнформацияСтатистики); @@ -743,4 +725,5 @@ #КонецОбласти -#КонецЕсли \ No newline at end of file +#КонецЕсли + diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index 5dadbabf6..f7a22ac17 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -10,8 +10,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Получает статистику сопоставления объектов для строк таблицы ИнформацияСтатистики. // @@ -295,8 +294,10 @@ КонецЕсли; Возврат Истина; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции-свойства + +#КонецОбласти + +#Область ФункцииСвойства // Данные табличной части ИнформацияСтатистики. // @@ -311,6 +312,8 @@ #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ПомощникИнтерактивногоОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ПомощникИнтерактивногоОбменаДанными.mdo index 2acfa4446..d30824cef 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ПомощникИнтерактивногоОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ПомощникИнтерактивногоОбменаДанными.mdo @@ -16,22 +16,6 @@ <lang>ru</lang> </pages> </help> - <attributes uuid="6c5d0ac3-6086-434c-812b-1c1158ecc574"> - <name>ВидТранспортаСообщенийОбмена</name> - <synonym> - <key>ru</key> - <value>Укажите способ обмена данными</value> - </synonym> - <type> - <types>EnumRef.ВидыТранспортаСообщенийОбмена</types> - </type> - <toolTip> - <key>ru</key> - <value>Способ обмена данными</value> - </toolTip> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> <attributes uuid="783536d7-c0db-44c9-96e8-58b57804d7c8"> <name>ИмяВременногоКаталогаСообщенийОбмена</name> <synonym> @@ -99,6 +83,21 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="6900c947-150c-4842-b37d-99f9b704f0a5"> + <name>ИдентификаторТранспорта</name> + <synonym> + <key>ru</key> + <value>Идентификатор транспорта</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <tabularSections uuid="d1952319-0e42-4684-a386-fbe7c24526c2"> <producedTypes> <objectType typeId="e564f1b7-d61a-4bf5-8385-f5e7a5d0b7cc" valueTypeId="51e5cdcf-3c11-4db1-be2e-35438161cfb0"/> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl index c4fc9d2b6..0c05ba3d9 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса/ManagerModule.bsl @@ -39,7 +39,6 @@ НастройкиВыгрузки.Корреспондент); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса.ВыгрузитьДанныеДляСопоставления", @@ -318,7 +317,6 @@ НастройкиВыгрузки.Корреспондент); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса.ВыгрузитьЗагрузитьДанныеПоТребованию", @@ -382,7 +380,7 @@ #Область СессииОбменаСообщениями -Процедура ПриОжиданииСессииОбменаСообщениямиСистемы(ПараметрыОбработчика, ПродолжитьОжидание) +Процедура ПриОжиданииСессииОбменаСообщениямиСистемы(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт СтатусСессии = ""; Попытка @@ -664,7 +662,7 @@ КонецПроцедуры -Процедура ПриНачалеПомещенияДанныхДляСопоставления(НастройкиВыгрузки, ПараметрыОбработчика, ПродолжитьОжидание) +Процедура ПриНачалеПомещенияДанныхДляСопоставления(НастройкиВыгрузки, ПараметрыОбработчика, ПродолжитьОжидание) Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда Возврат; diff --git a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl index f329c5ad0..ae24769ea 100644 --- a/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете/ManagerModule.bsl @@ -68,98 +68,6 @@ КонецФункции -// Для внутреннего использования -// -Процедура НастроитьОбменШаг1_3_0_1_1(Параметры, АдресВременногоХранилища) Экспорт - - Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда - Возврат; - КонецЕсли; - - ИмяПланаОбменаСообщениями = "ОбменСообщениями"; - МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса"); - МенеджерПланаОбменСообщениями = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("ПланОбмена." - + ИмяПланаОбменаСообщениями); - - НастройкиПодключения = Неопределено; // см. ОписаниеНастроекПодключения - Параметры.Свойство("НастройкиПодключения", НастройкиПодключения); - - ПараметрыОбработчикаСессии = ПараметрыОбработчикаДлительнойОперации(); - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - // Создаем настройку обмена в этой базе. - ОбменДаннымиВМоделиСервиса.СоздатьНастройкуОбмена_3_0_1_1(НастройкиПодключения); - - // Отправляем сообщение корреспонденту. - Сообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение( - СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеНастроитьОбменШаг1()); - - Сообщение.Body.CorrespondentZone = НастройкиПодключения.ОбластьДанныхКорреспондента; - - Сообщение.Body.ExchangePlan = НастройкиПодключения.ИмяПланаОбмена; - Сообщение.Body.CorrespondentCode = НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника; - Сообщение.Body.CorrespondentName = НастройкиПодключения.Наименование; - - Сообщение.Body.Code = НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника; - Сообщение.Body.EndPoint = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МенеджерПланаОбменСообщениями.ЭтотУзел(), "Код"); - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - ВерсииФормата = ОбщегоНазначения.ВыгрузитьКолонку( - ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(НастройкиПодключения.ИмяПланаОбмена, "ВерсииФорматаОбмена"), "Ключ", Истина); - - ОбъектыФормата = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( - НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", НастройкиПодключения.Корреспондент); - - НастройкиXDTOКорреспондента = Новый Структура; - НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеВерсии", ВерсииФормата); - НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеОбъекты", - Новый ХранилищеЗначения(ОбъектыФормата, Новый СжатиеДанных(9))); - - Сообщение.Body.XDTOSettings = СериализаторXDTO.ЗаписатьXDTO(НастройкиXDTOКорреспондента); - КонецЕсли; - - ДополнительныеСвойства = Новый Структура; - ДополнительныеСвойства.Вставить("Интерфейс", "3.0.1.1"); - ДополнительныеСвойства.Вставить("Префикс", НастройкиПодключения.ПрефиксКорреспондента); - ДополнительныеСвойства.Вставить("ПрефиксКорреспондента", НастройкиПодключения.Префикс); - ДополнительныеСвойства.Вставить("ИдентификаторНастройки", НастройкиПодключения.ИдентификаторНастройки); - - Сообщение.AdditionalInfo = СериализаторXDTO.ЗаписатьXDTO(ДополнительныеСвойства); - - ПараметрыОбработчикаСессии.ИдентификаторОперации = ОбменДаннымиВМоделиСервиса.ОтправитьСообщение(Сообщение); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - Информация = ИнформацияОбОшибке(); - - ПараметрыОбработчикаСессии.Отказ = Истина; - ПараметрыОбработчикаСессии.СообщениеОбОшибке = ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация); - - ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), - УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - КонецПопытки; - - Если Не ПараметрыОбработчикаСессии.Отказ Тогда - МодульСообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения(); - - ПараметрыОбработчикаСессии.ДлительнаяОперация = Истина; - ПараметрыОбработчикаСессии.ДополнительныеПараметры.Вставить( - "Корреспондент", НастройкиПодключения.Корреспондент); - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Корреспондент", НастройкиПодключения.Корреспондент); - Результат.Вставить("ПараметрыОбработчикаСессии", ПараметрыОбработчикаСессии); - - ПоместитьВоВременноеХранилище(Результат, АдресВременногоХранилища); - -КонецПроцедуры - #Область СписокПриложений // Параметры: @@ -422,6 +330,152 @@ #КонецОбласти +#Область СохранениеНастроекПодключения + +// Параметры: +// НастройкиПодключения - Структура - описание настроек выполнения операции. +// ПараметрыОбработчика - Структура - вспомогательные параметры: +// * ДополнительныеПараметры - Структура - произвольные дополнительные параметры. +// ПродолжитьОжидание - Булево - Истина, если запущена длительная операция. +// +Процедура ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + КлючФоновогоЗадания = ОбменДаннымиСервер.КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, + НСтр("ru = 'Настройка подключения к корреспонденту'")); + + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка подключения к корреспонденту для ""%1"" уже выполняется.'"), НастройкиПодключения.ИмяПланаОбмена); + КонецЕсли; + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("НастройкиПодключения", НастройкиПодключения); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройка подключения к корреспонденту: %1.'"), НастройкиПодключения.ИмяПланаОбмена); + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; + + ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( + "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.НастроитьОбменШаг1_3_0_1_1", + ПараметрыПроцедуры, + ПараметрыВыполнения); + + ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); + + Если Не ПродолжитьОжидание + И Не ПараметрыОбработчика.Отказ Тогда + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ФоновоеЗаданиеВыполнено"); + ПродолжитьОжидание = Истина; + КонецЕсли; + + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("НастройкиПодключения", НастройкиПодключения); + +КонецПроцедуры + +// Параметры: +// ПараметрыОбработчика - Структура - вспомогательные параметры: +// * ДополнительныеПараметры - Структура - произвольные дополнительные параметры. +// ПродолжитьОжидание - Булево - Истина, если длительная операция еще не завершена. +// +Процедура ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт + + Если ПараметрыОбработчика.ДополнительныеПараметры.Свойство("ОжиданиеСессииОбменаСообщениямиСистемы1") Тогда + + ПриОжиданииСессииОбменаСообщениямиСистемы( + ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии, ПродолжитьОжидание); + + Если Не ПродолжитьОжидание + И Не ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии.Отказ Тогда + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ОжиданиеСессииОбменаСообщениямиСистемы2"); + ПараметрыОбработчика.ДополнительныеПараметры.Удалить("ОжиданиеСессииОбменаСообщениямиСистемы1"); + + ПриНачалеСохраненияНастройкиОбменаВМенеджереСервиса(ПараметрыОбработчика.ДополнительныеПараметры.НастройкиПодключения, + ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии, ПродолжитьОжидание); + КонецЕсли; + + ИначеЕсли ПараметрыОбработчика.ДополнительныеПараметры.Свойство("ОжиданиеСессииОбменаСообщениямиСистемы2") Тогда + + ПриОжиданииСессииОбменаСообщениямиСистемы( + ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии, ПродолжитьОжидание); + + Иначе + + ЗаданиеВыполнено = Ложь; + + Если ПараметрыОбработчика.ДополнительныеПараметры.Свойство("ФоновоеЗаданиеВыполнено") Тогда + ЗаданиеВыполнено = Истина; + Иначе + ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); + + ЗаданиеВыполнено = Не ПродолжитьОжидание И Не ПараметрыОбработчика.Отказ; + КонецЕсли; + + Если ЗаданиеВыполнено Тогда + + Результат = ПолучитьИзВременногоХранилища(ПараметрыОбработчика.АдресРезультата); + + ПараметрыОбработчикаСессии = Результат.ПараметрыОбработчикаСессии; + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("Корреспондент", Результат.Корреспондент); + + Если ПараметрыОбработчикаСессии.Отказ Тогда + ПродолжитьОжидание = Ложь; + ПараметрыОбработчика.Отказ = Истина; + ПараметрыОбработчика.СообщениеОбОшибке = ПараметрыОбработчикаСессии.СообщениеОбОшибке; + Иначе + ПродолжитьОжидание = Истина; + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ОжиданиеСессииОбменаСообщениямиСистемы1"); + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ПараметрыОбработчикаСессии", ПараметрыОбработчикаСессии); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// ПараметрыОбработчика - Структура - вспомогательные параметры: +// * ДополнительныеПараметры - Структура - произвольные дополнительные параметры. +// СтатусЗавершения - Структура - описание результата выполнения операции. +// +Процедура ПриЗавершенииСохраненияНастроекПодключения(ПараметрыОбработчика, СтатусЗавершения) Экспорт + + ИнициализироватьСтатусЗавершенияДлительнойОперации(СтатусЗавершения); + + Если ПараметрыОбработчика.Отказ Тогда + ЗаполнитьЗначенияСвойств(СтатусЗавершения, ПараметрыОбработчика, "Отказ, СообщениеОбОшибке"); + Иначе + ПараметрыОбработчикаСессии = ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии; + + Результат = Новый Структура; + Результат.Вставить("НастройкиПодключенияСохранены", Истина); + Результат.Вставить("УзелОбмена", Неопределено); + Результат.Вставить("СообщениеОбОшибке", ""); + + Если ПараметрыОбработчикаСессии.Отказ Тогда + // Удаление узла обмена в этой базе. + Если ЗначениеЗаполнено(ПараметрыОбработчика.ДополнительныеПараметры.Корреспондент) Тогда + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(ПараметрыОбработчика.ДополнительныеПараметры.Корреспондент); + КонецЕсли; + + Результат.НастройкиПодключенияСохранены = Ложь; + Результат.СообщениеОбОшибке = ПараметрыОбработчикаСессии.СообщениеОбОшибке; + Иначе + Результат.Вставить("УзелОбмена", ПараметрыОбработчика.ДополнительныеПараметры.Корреспондент); + КонецЕсли; + + СтатусЗавершения.Результат = Результат; + + КонецЕсли; + + ПараметрыОбработчика = Неопределено; + +КонецПроцедуры + +#КонецОбласти + #Область ПолучениеОбщихДанныхУзловКорреспондента // Параметры: @@ -544,153 +598,6 @@ #КонецОбласти -#Область СохранениеНастроекПодключения - -// Параметры: -// НастройкиПодключения - Структура - описание настроек выполнения операции. -// ПараметрыОбработчика - Структура - вспомогательные параметры: -// * ДополнительныеПараметры - Структура - произвольные дополнительные параметры. -// ПродолжитьОжидание - Булево - Истина, если запущена длительная операция. -// -Процедура ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт - - КлючФоновогоЗадания = КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, - НСтр("ru = 'Настройка подключения к корреспонденту'")); - - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройка подключения к корреспонденту для ""%1"" уже выполняется.'"), НастройкиПодключения.ИмяПланаОбмена); - КонецЕсли; - - ПараметрыПроцедуры = Новый Структура; - ПараметрыПроцедуры.Вставить("НастройкиПодключения", НастройкиПодключения); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройка подключения к корреспонденту: %1.'"), НастройкиПодключения.ИмяПланаОбмена); - ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; - ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; - - ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( - "Обработки.ПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете.НастроитьОбменШаг1_3_0_1_1", - ПараметрыПроцедуры, - ПараметрыВыполнения); - - ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); - - Если Не ПродолжитьОжидание - И Не ПараметрыОбработчика.Отказ Тогда - ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ФоновоеЗаданиеВыполнено"); - ПродолжитьОжидание = Истина; - КонецЕсли; - - ПараметрыОбработчика.ДополнительныеПараметры.Вставить("НастройкиПодключения", НастройкиПодключения); - -КонецПроцедуры - -// Параметры: -// ПараметрыОбработчика - Структура - вспомогательные параметры: -// * ДополнительныеПараметры - Структура - произвольные дополнительные параметры. -// ПродолжитьОжидание - Булево - Истина, если длительная операция еще не завершена. -// -Процедура ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт - - Если ПараметрыОбработчика.ДополнительныеПараметры.Свойство("ОжиданиеСессииОбменаСообщениямиСистемы1") Тогда - - ПриОжиданииСессииОбменаСообщениямиСистемы( - ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии, ПродолжитьОжидание); - - Если Не ПродолжитьОжидание - И Не ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии.Отказ Тогда - ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ОжиданиеСессииОбменаСообщениямиСистемы2"); - ПараметрыОбработчика.ДополнительныеПараметры.Удалить("ОжиданиеСессииОбменаСообщениямиСистемы1"); - - ПриНачалеСохраненияНастройкиОбменаВМенеджереСервиса(ПараметрыОбработчика.ДополнительныеПараметры.НастройкиПодключения, - ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии, ПродолжитьОжидание); - КонецЕсли; - - ИначеЕсли ПараметрыОбработчика.ДополнительныеПараметры.Свойство("ОжиданиеСессииОбменаСообщениямиСистемы2") Тогда - - ПриОжиданииСессииОбменаСообщениямиСистемы( - ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии, ПродолжитьОжидание); - - Иначе - - ЗаданиеВыполнено = Ложь; - - Если ПараметрыОбработчика.ДополнительныеПараметры.Свойство("ФоновоеЗаданиеВыполнено") Тогда - ЗаданиеВыполнено = Истина; - Иначе - ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); - - ЗаданиеВыполнено = Не ПродолжитьОжидание И Не ПараметрыОбработчика.Отказ; - КонецЕсли; - - Если ЗаданиеВыполнено Тогда - - Результат = ПолучитьИзВременногоХранилища(ПараметрыОбработчика.АдресРезультата); - - ПараметрыОбработчикаСессии = Результат.ПараметрыОбработчикаСессии; - ПараметрыОбработчика.ДополнительныеПараметры.Вставить("Корреспондент", Результат.Корреспондент); - - Если ПараметрыОбработчикаСессии.Отказ Тогда - ПродолжитьОжидание = Ложь; - ПараметрыОбработчика.Отказ = Истина; - ПараметрыОбработчика.СообщениеОбОшибке = ПараметрыОбработчикаСессии.СообщениеОбОшибке; - Иначе - ПродолжитьОжидание = Истина; - ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ОжиданиеСессииОбменаСообщениямиСистемы1"); - ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ПараметрыОбработчикаСессии", ПараметрыОбработчикаСессии); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Параметры: -// ПараметрыОбработчика - Структура - вспомогательные параметры: -// * ДополнительныеПараметры - Структура - произвольные дополнительные параметры. -// СтатусЗавершения - Структура - описание результата выполнения операции. -// -Процедура ПриЗавершенииСохраненияНастроекПодключения(ПараметрыОбработчика, СтатусЗавершения) Экспорт - - ИнициализироватьСтатусЗавершенияДлительнойОперации(СтатусЗавершения); - - Если ПараметрыОбработчика.Отказ Тогда - ЗаполнитьЗначенияСвойств(СтатусЗавершения, ПараметрыОбработчика, "Отказ, СообщениеОбОшибке"); - Иначе - ПараметрыОбработчикаСессии = ПараметрыОбработчика.ДополнительныеПараметры.ПараметрыОбработчикаСессии; - - Результат = Новый Структура; - Результат.Вставить("НастройкиПодключенияСохранены", Истина); - Результат.Вставить("УзелОбмена", Неопределено); - Результат.Вставить("СообщениеОбОшибке", ""); - - Если ПараметрыОбработчикаСессии.Отказ Тогда - // Удаление узла обмена в этой базе. - Если ЗначениеЗаполнено(ПараметрыОбработчика.ДополнительныеПараметры.Корреспондент) Тогда - ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(ПараметрыОбработчика.ДополнительныеПараметры.Корреспондент); - КонецЕсли; - - Результат.НастройкиПодключенияСохранены = Ложь; - Результат.СообщениеОбОшибке = ПараметрыОбработчикаСессии.СообщениеОбОшибке; - Иначе - Результат.Вставить("УзелОбмена", ПараметрыОбработчика.ДополнительныеПараметры.Корреспондент); - КонецЕсли; - - СтатусЗавершения.Результат = Результат; - - КонецЕсли; - - ПараметрыОбработчика = Неопределено; - -КонецПроцедуры - -#КонецОбласти - #Область УдалениеНастройкиСинхронизацииДанных // Для внутреннего использования. @@ -873,7 +780,6 @@ #КонецОбласти - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1017,25 +923,6 @@ КонецФункции -Функция КлючФоновогоЗадания(ИмяПланаОбмена, Действие) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'ПланОбмена:%1 Действие:%2'"), ИмяПланаОбмена, Действие); - -КонецФункции - -Функция ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) - - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - - АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - - Возврат (АктивныеФоновыеЗадания.Количество() > 0); - -КонецФункции - Процедура ИнициализироватьСтатусЗавершенияДлительнойОперации(СтатусЗавершения) СтатусЗавершения = Новый Структура; @@ -1359,14 +1246,15 @@ // Области с настроенной синхронизацией через внутр публикацию Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | Настройки.WSОбластьДанныхКорреспондента КАК WSОбластьДанныхКорреспондента - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаДанными КАК Настройки - |ГДЕ - | Настройки.WSОбластьДанныхКорреспондента > 0"; + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаНастроек.Значение КАК Значение + |ИЗ + | Справочник.НастройкиТранспортаСообщенийОбмена.Настройки КАК ТаблицаНастроек + |ГДЕ + | ТаблицаНастроек.Настройка = ""ОбластьДанныхКорреспондента"""; - ОбластьДанныхВнутренняяПубликация = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("WSОбластьДанныхКорреспондента"); + ОбластьДанныхВнутренняяПубликация = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Значение"); Для Каждого НастройкаИзМенеджераСервиса Из НастройкиСинхронизацииИзМенеджераСервиса Цикл diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form index 9b67bfa9e..9e7699d9a 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form @@ -121,7 +121,7 @@ <id>337</id> <title> <key>ru</key> - <value>Для создания автономного рабочего места необходимо удалить расширения, которые изменяют структуру программы. + <value>Для создания автономного рабочего места необходимо удалить расширения, которые изменяют структуру приложения. Будьте внимательны, вместе с расширениями безвозвратно будут удаленны добавленные ими данные, поэтому перед удалением рекомендуется сделать резервную копию.</value> true @@ -378,7 +378,7 @@ true - КартинкаСозданиеЛокальногоРабочегоМестаРасширеннаяПодсказка + КартинкаСозданиеЛокальногоРабочегоМестаExtendedTooltip 229 Label true @@ -412,7 +412,7 @@ true - Декорация5РасширеннаяПодсказка + Декорация5ExtendedTooltip 231 Label true @@ -450,7 +450,7 @@ true - ПоясняющаяНадписьОВерсииПлатформыРасширеннаяПодсказка + ПоясняющаяНадписьОВерсииПлатформыExtendedTooltip 232 Label true @@ -485,7 +485,7 @@ Группа - Группа3РасширеннаяПодсказка + Группа3ExtendedTooltip 230 Label true @@ -514,7 +514,7 @@ true - Декорация8РасширеннаяПодсказка + Декорация8ExtendedTooltip 234 Label true @@ -549,7 +549,7 @@ true - КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятиеРасширеннаяПодсказка + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятиеExtendedTooltip 235 Label true @@ -576,7 +576,7 @@ Группа - Группа5РасширеннаяПодсказка + Группа5ExtendedTooltip 233 Label true @@ -606,7 +606,7 @@ true - НадписьДалее1РасширеннаяПодсказка + НадписьДалее1ExtendedTooltip 236 Label true @@ -669,7 +669,7 @@ Начало - НачалоРасширеннаяПодсказка + НачалоExtendedTooltip 227 Label true @@ -709,7 +709,7 @@ Top Button - НаименованиеАвтономногоРабочегоМестаРасширеннаяПодсказка + НаименованиеАвтономногоРабочегоМестаExtendedTooltip 239 <key>ru</key> @@ -759,7 +759,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НастроитьОграниченияПередачиДанныхРасширеннаяПодсказка</name> + <name>НастроитьОграниченияПередачиДанныхExtendedTooltip</name> <id>242</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -790,7 +790,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка</name> + <name>ОписаниеОграниченийПередачиДанныхExtendedTooltip</name> <id>243</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -820,7 +820,7 @@ <value>Группа</value> - Группа2РасширеннаяПодсказка + Группа2ExtendedTooltip 241 Label true @@ -874,7 +874,7 @@ ПользователиСинхронизации.РазрешитьСинхронизациюДанных - ПользователиРазрешитьСинхронизациюДанныхРасширеннаяПодсказка + ПользователиРазрешитьСинхронизациюДанныхExtendedTooltip 246 Label true @@ -911,7 +911,7 @@ ПользователиСинхронизации.Пользователь - ПользователиПользовательРасширеннаяПодсказка + ПользователиПользовательExtendedTooltip 247 Label true @@ -1019,7 +1019,7 @@ - ПользователиСинхронизацииРасширеннаяПодсказка + ПользователиСинхронизацииExtendedTooltip 245 Label true @@ -1059,7 +1059,7 @@ <key>ru</key> <value>Указанные пользователи могут выполнять синхронизацию данных -с любыми автономными рабочими местами и другими программами.</value> +с любыми автономными рабочими местами и другими приложениями.</value> true true @@ -1067,7 +1067,7 @@ true - Декорация6РасширеннаяПодсказка + Декорация6ExtendedTooltip 248 Label true @@ -1100,7 +1100,7 @@ Настройка прав пользователей - НастройкаПравПользователейРасширеннаяПодсказка + НастройкаПравПользователейExtendedTooltip 244 Label true @@ -1131,7 +1131,7 @@ true - НадписьДалее2РасширеннаяПодсказка + НадписьДалее2ExtendedTooltip 249 Label true @@ -1194,7 +1194,7 @@ Настройка выгрузки - НастройкаВыгрузкиРасширеннаяПодсказка + НастройкаВыгрузкиExtendedTooltip 237 Label true @@ -1228,7 +1228,7 @@ true - Декорация14РасширеннаяПодсказка + Декорация14ExtendedTooltip 254 Label true @@ -1263,7 +1263,7 @@ Картинки - ГруппаКартинкиРасширеннаяПодсказка + ГруппаКартинкиExtendedTooltip 253 Label true @@ -1299,7 +1299,7 @@ true - Декорация15РасширеннаяПодсказка + Декорация15ExtendedTooltip 256 Label true @@ -1337,7 +1337,7 @@ Сообщения - ГруппаСообщенияРасширеннаяПодсказка + ГруппаСообщенияExtendedTooltip 255 Label true @@ -1365,7 +1365,7 @@ Подготовка данных для загрузки - ГруппировкаСообщенияРасширеннаяПодсказка + ГруппировкаСообщенияExtendedTooltip 252 Label true @@ -1398,7 +1398,7 @@ Страница 14 - ОжиданиеСозданияНачальногоОбразаРасширеннаяПодсказка + ОжиданиеСозданияНачальногоОбразаExtendedTooltip 250 Label true @@ -1433,7 +1433,7 @@ true - Декорация3РасширеннаяПодсказка + Декорация3ExtendedTooltip 260 Label true @@ -1467,7 +1467,7 @@ true - ЗагрузитьНачальныйОбразНаКомпьютерПользователяРасширеннаяПодсказка + ЗагрузитьНачальныйОбразНаКомпьютерПользователяExtendedTooltip 261 <key>ru</key> @@ -1506,7 +1506,7 @@ <value>Создание автономного рабочего места успешно завершено</value> - Группа4РасширеннаяПодсказка + Группа4ExtendedTooltip 259 Label true @@ -1538,7 +1538,7 @@ true - Декорация1РасширеннаяПодсказка + Декорация1ExtendedTooltip 262 Label true @@ -1578,7 +1578,7 @@ true - ИнструкцияПоНастройкеАвтономногоРабочегоМестаСохранитьИнструкциюКакРасширеннаяПодсказка + ИнструкцияПоНастройкеАвтономногоРабочегоМестаСохранитьИнструкциюКакExtendedTooltip 266 Label true @@ -1608,7 +1608,7 @@ true - ИнструкцияПоНастройкеАвтономногоРабочегоМестаПечатьИнструкцииРасширеннаяПодсказка + ИнструкцияПоНастройкеАвтономногоРабочегоМестаПечатьИнструкцииExtendedTooltip 265 Label true @@ -1635,7 +1635,7 @@ Группа - Группа6РасширеннаяПодсказка + Группа6ExtendedTooltip 264 Label true @@ -1667,7 +1667,7 @@ None - ИнструкцияПоНастройкеАвтономногоРабочегоМестаРасширеннаяПодсказка + ИнструкцияПоНастройкеАвтономногоРабочегоМестаExtendedTooltip 267 Label true @@ -1709,7 +1709,7 @@ Группа - Группа9РасширеннаяПодсказка + Группа9ExtendedTooltip 263 Label true @@ -1738,7 +1738,7 @@ Окончание - ОкончаниеРасширеннаяПодсказка + ОкончаниеExtendedTooltip 257 Label true @@ -2025,7 +2025,7 @@ true true - ПанельОсновнаяРасширеннаяПодсказка + ПанельОсновнаяExtendedTooltip 226 Label true @@ -2063,7 +2063,7 @@ true - КомандаНазадРасширеннаяПодсказка + КомандаНазадExtendedTooltip 272 Label true @@ -2121,7 +2121,7 @@ true - КомандаДалееРасширеннаяПодсказка + КомандаДалееExtendedTooltip 273 Label true @@ -2151,7 +2151,7 @@ true - КомандаОтменаРасширеннаяПодсказка + КомандаОтменаExtendedTooltip 274 Label true @@ -2177,7 +2177,7 @@ true - СправкаРасширеннаяПодсказка + СправкаExtendedTooltip 275 Label true @@ -2230,7 +2230,7 @@ Страница навигации начало - СтраницаНавигацииНачалоРасширеннаяПодсказка + СтраницаНавигацииНачалоExtendedTooltip 270 Label true @@ -2264,7 +2264,7 @@ true - КомандаНазад1РасширеннаяПодсказка + КомандаНазад1ExtendedTooltip 278 Label true @@ -2322,7 +2322,7 @@ true - КомандаДалее1РасширеннаяПодсказка + КомандаДалее1ExtendedTooltip 279 Label true @@ -2355,7 +2355,7 @@ true - КомандаОтмена1РасширеннаяПодсказка + КомандаОтмена1ExtendedTooltip 280 Label true @@ -2381,7 +2381,7 @@ true - Справка1РасширеннаяПодсказка + Справка1ExtendedTooltip 281 Label true @@ -2434,7 +2434,7 @@ Страница навигации продолжение - СтраницаНавигацииПродолжениеРасширеннаяПодсказка + СтраницаНавигацииПродолжениеExtendedTooltip 276 Label true @@ -2468,7 +2468,7 @@ true - КомандаНазад2РасширеннаяПодсказка + КомандаНазад2ExtendedTooltip 284 Label true @@ -2525,7 +2525,7 @@ true - КомандаГотовоРасширеннаяПодсказка + КомандаГотовоExtendedTooltip 285 Label true @@ -2555,7 +2555,7 @@ true - КомандаОтмена2РасширеннаяПодсказка + КомандаОтмена2ExtendedTooltip 286 Label true @@ -2581,7 +2581,7 @@ true - Справка2РасширеннаяПодсказка + Справка2ExtendedTooltip 287 Label true @@ -2634,7 +2634,7 @@ Страница навигации окончание - СтраницаНавигацииОкончаниеРасширеннаяПодсказка + СтраницаНавигацииОкончаниеExtendedTooltip 282 Label true @@ -2668,7 +2668,7 @@ true - КомандаНазад3РасширеннаяПодсказка + КомандаНазад3ExtendedTooltip 290 Label true @@ -2725,7 +2725,7 @@ true - КомандаДалее3РасширеннаяПодсказка + КомандаДалее3ExtendedTooltip 291 Label true @@ -2755,7 +2755,7 @@ true - КомандаОтмена3РасширеннаяПодсказка + КомандаОтмена3ExtendedTooltip 292 Label true @@ -2781,7 +2781,7 @@ true - Справка3РасширеннаяПодсказка + Справка3ExtendedTooltip 293 Label true @@ -2835,7 +2835,7 @@ true - СтраницаНавигацииОжиданиеРасширеннаяПодсказка + СтраницаНавигацииОжиданиеExtendedTooltip 288 Label true @@ -2861,7 +2861,7 @@ true - ПанельНавигацииРасширеннаяПодсказка + ПанельНавигацииExtendedTooltip 269 Label true @@ -2885,7 +2885,7 @@ Рамка панели навигации - РамкаПанелиНавигацииРасширеннаяПодсказка + РамкаПанелиНавигацииExtendedTooltip 268 Label true diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl index 314a818d3..d43a80b79 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl @@ -372,8 +372,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Поставляемая часть +#Область ПоставляемаяЧасть &НаКлиенте Процедура ИзменитьПорядковыйНомерПерехода(Итератор) @@ -681,8 +680,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Служебные процедуры и функции +#КонецОбласти + +#Область ПереопределяемаяЧастьСлужебныеПроцедурыИФункции &НаСервере Процедура СоздатьНачальныйОбразАвтономногоРабочегоМестаНаСервере(Отказ) @@ -702,7 +702,6 @@ ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Создание начального образа автономного рабочего места'"); ПараметрыВыполнения.ДополнительныйРезультат = Истина; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "АвтономнаяРаботаСлужебный.СоздатьНачальныйОбразАвтономногоРабочегоМеста", @@ -866,8 +865,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Обработчики событий переходов +#КонецОбласти + +#Область ПереопределяемаяЧастьОбработчикиСобытийПереходов &НаКлиенте Функция Подключаемый_НастройкаВыгрузки_ПриПереходеДалее(Отказ) @@ -961,8 +961,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Переопределяемая часть - Инициализация переходов помощника +#КонецОбласти + +#Область ПереопределяемаяЧастьИнициализацияПереходовПомощника &НаСервере Процедура СценарийСозданияАвтономногоРабочегоМеста() @@ -997,3 +998,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАРМ/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАРМ/ru.html index 3a0a39b48..eff86e8df 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАРМ/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАРМ/ru.html @@ -17,23 +17,23 @@ BODY {

          Настройка автономного рабочего места на компьютере


          -

          Внимание: для автономной работы без подключения к сети Интернет необходимо предварительно приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Подробнее см. ниже дополнительную информацию.

          -
          1. Создайте новую папку, в которой на Вашем компьютере будет размещаться информационная база автономного рабочего места. Например, в папке "Мои документы". -
          2. Откройте загруженный файл Автономная работа.zip и скопируйте (извлеките) все файлы из него в эту папку. -
          3. Запустите 1С:Предприятие и в открывшемся окне "Запуск 1С:Предприятия" нажмите на кнопку "Добавить..." -
          4. Укажите вариант "Добавление в список существующей информационной базы" и нажмите "Далее". -
          5. На следующей странице помощника укажите вариант "На данном компьютере или на компьютере в локальной сети" и введите название информационной базы. Рекомендуется указывать такое же имя, как и название автономного рабочего места. -
          6. На следующей странице укажите подпапку InfoBase в папке, созданной на шаге 1, и затем на финальной странице помощника нажмите "Готово". -
          7. Запустите программу, воспользовавшись кнопкой "1С:Предприятие" (в правом верхнем углу окна "Запуск 1С:Предприятия").
            В окне доступа к информационной базе в поле "Пользователь" выберите из списка пользователя, от имени которого было создано автономное рабочее место. Поле "Пароль" оставьте пустым.

           

          -

          В дальнейшем, для входа в программу необходимо запускать 1С:Предприятие, и в открывшемся окне "Запуск 1С:Предприятия" выбирать в списке эту информационную базу. При работе с программой, для изменения параметров синхронизации данных с приложением в Интернете можно воспользоваться командой "Автономная работа" раздела "Администрирование".

          +

          Внимание: для автономной работы без подключения к сети Интернет необходимо предварительно приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Подробнее см. ниже дополнительную информацию.

          +
          1. Создайте новую папку, в которой на Вашем компьютере будет размещаться информационная база автономного рабочего места. Например, в папке "Мои документы". +
          2. Откройте загруженный файл Автономная работа.zip и скопируйте (извлеките) все файлы из него в эту папку. +
          3. Запустите 1С:Предприятие и в открывшемся окне "Запуск 1С:Предприятия" нажмите на кнопку "Добавить..." +
          4. Укажите вариант "Добавление в список существующей информационной базы" и нажмите "Далее". +
          5. На следующей странице помощника укажите вариант "На данном компьютере или на компьютере в локальной сети" и введите название информационной базы. Рекомендуется указывать такое же имя, как и название автономного рабочего места. +
          6. На следующей странице укажите подпапку InfoBase в папке, созданной на шаге 1, и затем на финальной странице помощника нажмите "Готово". +
          7. Запустите программу, воспользовавшись кнопкой "1С:Предприятие" (в правом верхнем углу окна "Запуск 1С:Предприятия").
            В окне доступа к информационной базе в поле "Пользователь" выберите из списка пользователя, от имени которого было создано автономное рабочее место. Поле "Пароль" оставьте пустым.

          +

          В дальнейшем, для входа в программу необходимо запускать 1С:Предприятие, и в открывшемся окне "Запуск 1С:Предприятия" выбирать в списке эту информационную базу. При работе с программой, для изменения параметров синхронизации данных с приложением в Интернете можно воспользоваться командой "Автономная работа" раздела "Администрирование".

          Дополнительная информация

          -

           

          +

          1. Как установить или обновить версию платформы 1С:Предприятие?

          -

          Для автономной работы без подключения к сети Интернет необходимо предварительно приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Программы системы 1С:Предприятие распространяются через сеть партнерских организаций во всех регионах России, странах СНГ и Балтии.

          -

          Если программа уже установлена на Вашем компьютере, убедитесь, что используется версия платформы 1С:Предприятие не ниже [ВерсияПлатформы] (см. первую строчку в окне, вызываемом из меню "Справка - О программе"). Если используется устаревшая версия, необходимо зайти на сайт поддержки пользователей системы 1С:Предприятие, загрузить и установить последнюю версию платформы 1С:Предприятие.

          +

          Для автономной работы без подключения к сети Интернет необходимо предварительно приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Программы системы 1С:Предприятие распространяются через сеть партнерских организаций во всех регионах России, странах СНГ и Балтии.

          +

          Если программа уже установлена на Вашем компьютере, убедитесь, что используется версия платформы 1С:Предприятие не ниже [ВерсияПлатформы] (см. первую строчку в окне, вызываемом из меню "Справка - О программе"). Если используется устаревшая версия, необходимо зайти на сайт поддержки пользователей системы 1С:Предприятие, загрузить и установить последнюю версию платформы 1С:Предприятие.

          См. также

          2. Как настроить автономное рабочее место для работы других пользователей?

          -

          Сразу после первого запуска, автономное рабочее место готово для работы. Ваша учетная запись имеет административные права, как и в приложении в Интернете.

          -

          В случае если с этим автономным рабочим местом должны работать другие пользователи, то нужно разрешить им вход в программу в списке "Пользователи" раздела "Администрирование". При этом им будут назначены такие же права доступа, как и в приложении в Интернете. Подробнее о ведении списка пользователей и настройке прав доступа см. документацию к программе.

          +
        • Получить последнюю версию платформы 1С:Предприятие
        • 2. Как настроить автономное рабочее место для работы других пользователей?

          +

          Сразу после первого запуска, автономное рабочее место готово для работы. Ваша учетная запись имеет административные права, как и в приложении в Интернете.

          +

          В случае если с этим автономным рабочим местом должны работать другие пользователи, то нужно разрешить им вход в программу в списке "Пользователи" раздела "Администрирование". При этом им будут назначены такие же права доступа, как и в приложении в Интернете. Подробнее о ведении списка пользователей и настройке прав доступа см. документацию к программе.

          Кроме того, если пользователи должны самостоятельно, без вашего участия, выполнять синхронизацию данных с приложением в Интернете, то необходимо изменить настройки подключения к Интернету, заданные по умолчанию. Для этого можно воспользоваться кнопкой "Настроить подключение..." в окне "Автономная работа" раздела "Администрирование". В форме настройки задать пользователя, от имени которого необходимо выполнять синхронизацию данных. Для этого пользователя в приложении в Интернете следует указать профиль "Синхронизация данных с другими программами".

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html index b9ffde6d5..926951426 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html @@ -14,8 +14,8 @@ BODY { FONT-SIZE: 8pt; FONT-FAMILY: Verdana } -

          Для автономной работы без подключения к сети Интернет необходимо приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Программы системы 1С:Предприятие распространяются через сеть партнерских организаций во всех регионах России, странах СНГ и Балтии.

          -

          Если программа уже установлена на Вашем компьютере, убедитесь, что используется версия платформы 1С:Предприятие не ниже [ВерсияПлатформы] (см. первую строчку в окне, вызываемом из меню "Справка - О программе"). Если используется устаревшая версия, необходимо зайти на сайт поддержки пользователей системы 1С:Предприятие, загрузить и установить последнюю версию платформы 1С:Предприятие.

          +

          Для автономной работы без подключения к сети Интернет необходимо приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Программы системы 1С:Предприятие распространяются через сеть партнерских организаций во всех регионах России, странах СНГ и Балтии.

          +

          Если программа уже установлена на Вашем компьютере, убедитесь, что используется версия платформы 1С:Предприятие не ниже [ВерсияПлатформы] (см. первую строчку в окне, вызываемом из меню "Справка - О программе"). Если используется устаревшая версия, необходимо зайти на сайт поддержки пользователей системы 1С:Предприятие, загрузить и установить последнюю версию платформы 1С:Предприятие.

          См. также

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыборТипаТранспорта/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыборТипаТранспорта/Form.form new file mode 100644 index 000000000..95224f5d1 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыборТипаТранспорта/Form.form @@ -0,0 +1,1523 @@ + + + + ВариантРаботы + 69 + + <key>ru</key> + <value>Вариант работы</value> + + true + true + + true + + + ВариантРаботы + + None + + OnChange + ВариантРаботыПриИзменении + + + ВариантРаботыРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ВариантРаботыКонтекстноеМеню + 70 + true + + RadioButtonField + Enter + true + Left + true + + Tumbler + true + + + ru + Новая настройка + + + 0 + + + + + ru + Продолжение настройки + + + 1 + + + Vertical + + + + ПанельОсновная + 10 + + СтраницаТипыТранспортаНоваяНастройка + 12 + + ТипыТранспортаНоваяНастройка + 93 + true + true + + true + + + <key>ru</key> + <value>Типы транспорта новая настройка</value> + + + ТипыТранспортаНоваяНастройкаРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ТаблицаНоваяНастройка + 105 + + <key>ru</key> + <value>Таблица новая настройка</value> + + true + true + + true + + + ТаблицаНоваяНастройка + + None + + ТаблицаНоваяНастройкаКартинка + 118 + + <key>ru</key> + <value>Картинка</value> + + true + true + + true + + + ТаблицаНоваяНастройка.Картинка + + + ТаблицаНоваяНастройкаКартинкаРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаКартинкаКонтекстноеМеню + 119 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ТаблицаНоваяНастройкаПсевдоним + 121 + + <key>ru</key> + <value>Транспорт</value> + + true + true + + true + + + ТаблицаНоваяНастройка.Псевдоним + + + ТаблицаНоваяНастройкаПсевдонимРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаПсевдонимКонтекстноеМеню + 122 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ТаблицаНоваяНастройкаКартинкаСправка + 147 + + <key>ru</key> + <value>Картинка справка</value> + + true + true + + true + + + ТаблицаНоваяНастройка.КартинкаСправка + + + ТаблицаНоваяНастройкаКартинкаСправкаРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаКартинкаСправкаКонтекстноеМеню + 148 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ТаблицаНоваяНастройкаКоманднаяПанель + 107 + Left + + + Selection + ТаблицаНоваяНастройкаВыбор + + + ТаблицаНоваяНастройкаСтрокаПоиска + 109 + + ТаблицаНоваяНастройкаСтрокаПоискаРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаСтрокаПоискаКонтекстноеМеню + 110 + true + + ТаблицаНоваяНастройка + + true + + + + ТаблицаНоваяНастройкаСостояниеПросмотра + 112 + + ТаблицаНоваяНастройкаСостояниеПросмотраРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаСостояниеПросмотраКонтекстноеМеню + 113 + true + + ViewStatusAddition + ТаблицаНоваяНастройка + + true + + + + ТаблицаНоваяНастройкаУправлениеПоиском + 115 + + ТаблицаНоваяНастройкаУправлениеПоискомРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаУправлениеПоискомКонтекстноеМеню + 116 + true + + SearchControlAddition + ТаблицаНоваяНастройка + + true + + + + ТаблицаНоваяНастройкаРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + + ТаблицаНоваяНастройкаКонтекстноеМеню + 106 + true + + true + true + true + true + true + true +
          true
          + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
          + true + true + + true + + + <key>ru</key> + <value>Страница типы транспорта новая настройка</value> + + + СтраницаТипыТранспортаНоваяНастройкаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
          + + СтраницаТипыТранспортаПродолжениеНастройки + 67 + + ГруппаИнформацияПриПродолженииНастройки + 97 + + Декорация4 + 99 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 100 + true + + 5 + 2 + + + StdPicture.Information + + true + 200 + AsFileRef + + + + Декорация7 + 102 + + <key>ru</key> + <value>Для продолжения настройки выберите тип транспорта и загрузите файл настроек, полученный в базе корреспонденте.</value> + + true + true + + true + + + Декорация7РасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 103 + true + + Label + true + 2 + true + Left + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Информация при продолжении настройки</value> + + true + + ГруппаИнформацияПриПродолженииНастройкиРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + + 204 + 255 + 204 + + Auto + Auto + + + + ТипыТранспортаПродолжениеНастройки + 95 + true + true + + true + + + <key>ru</key> + <value>Типы транспорта продолжение настройки</value> + + + ТипыТранспортаПродолжениеНастройкиРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ТаблицаПродолжениеНастройки + 126 + + <key>ru</key> + <value>Таблица продолжение настройки</value> + + true + true + + true + + + ТаблицаПродолжениеНастройки + + None + + ТаблицаПродолжениеНастройкиКартинка + 139 + + <key>ru</key> + <value>Картинка</value> + + true + true + + true + + + ТаблицаПродолжениеНастройки.Картинка + + + ТаблицаПродолжениеНастройкиКартинкаРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиКартинкаКонтекстноеМеню + 140 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ТаблицаПродолжениеНастройкиПсевдоним + 142 + + <key>ru</key> + <value>Транспорт</value> + + true + true + + true + + + ТаблицаПродолжениеНастройки.Псевдоним + + + ТаблицаПродолжениеНастройкиПсевдонимРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиПсевдонимКонтекстноеМеню + 143 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ТаблицаПродолжениеНастройкиКартинкаСправка + 150 + + <key>ru</key> + <value>Картинка справка</value> + + true + true + + true + + + ТаблицаПродолжениеНастройки.КартинкаСправка + + + ТаблицаПродолжениеНастройкиКартинкаСправкаРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиКартинкаСправкаКонтекстноеМеню + 151 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ТаблицаПродолжениеНастройкиКоманднаяПанель + 128 + Left + + + Selection + ТаблицаПродолжениеНастройкиВыбор + + + ТаблицаПродолжениеНастройкиСтрокаПоиска + 130 + + ТаблицаПродолжениеНастройкиСтрокаПоискаРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиСтрокаПоискаКонтекстноеМеню + 131 + true + + ТаблицаПродолжениеНастройки + + true + + + + ТаблицаПродолжениеНастройкиСостояниеПросмотра + 133 + + ТаблицаПродолжениеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиСостояниеПросмотраКонтекстноеМеню + 134 + true + + ViewStatusAddition + ТаблицаПродолжениеНастройки + + true + + + + ТаблицаПродолжениеНастройкиУправлениеПоиском + 136 + + ТаблицаПродолжениеНастройкиУправлениеПоискомРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиУправлениеПоискомКонтекстноеМеню + 137 + true + + SearchControlAddition + ТаблицаПродолжениеНастройки + + true + + + + ТаблицаПродолжениеНастройкиРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ТаблицаПродолжениеНастройкиКонтекстноеМеню + 127 + true + + true + true + true + true + true + true +
          true
          + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
          + true + true + + true + + + <key>ru</key> + <value>Страница типы транспорта продолжение настройки</value> + + + СтраницаТипыТранспортаПродолжениеНастройкиРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
          + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ПанельОсновнаяРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Pages + + Auto + +
          + + ПанельКоманд + 72 + + ПанельКомандСтраницаНоваяНастройка + 74 + + КоманднаяПанельНоваяНастройка + 78 + + Готово + 84 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ГотовоРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Form.Command.Готово + Normal + Auto + true + true + UserCmds + Auto + + + Отмена + 82 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ОтменаРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель новая настройка</value> + + + КоманднаяПанельНоваяНастройкаРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Панель команд страница новая настройка</value> + + + ПанельКомандСтраницаНоваяНастройкаРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПанельКомандСтраницаПродолжениеНастройки + 76 + + КоманднаяПанельПродолжениеНастройки + 80 + + ЗагрузитьНастройкиПодключения + 86 + + <key>ru</key> + <value>Загрузить настройки подключения</value> + + true + true + + true + + + ЗагрузитьНастройкиПодключенияРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.Command.ЗагрузитьНастройкиПодключения + Normal + Auto + true + true + UserCmds + Auto + + + Отмена1 + 88 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + Отмена1РасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель продолжение настройки</value> + + + КоманднаяПанельПродолжениеНастройкиРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Панель команд страница продолжение настройки</value> + + + ПанельКомандСтраницаПродолжениеНастройкиРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель команд</value> + + + ПанельКомандРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + DontBlock + true + true + Vertical + true + true + true + auto + true + + ИмяПланаОбмена + 1 + + String + + + + true + + + true + + + + ИдентификаторТранспорта + 4 + + String + + + + true + + + true + + + + ИдентификаторНастройки + 5 + + String + + + + true + + + true + + + + ВариантРаботы + + <key>ru</key> + <value>Вариант работы</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + ТаблицаНоваяНастройка + + <key>ru</key> + <value>Таблица новая настройка</value> + + 2 + + ValueTable + + + true + + + true + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 1 + + Picture + + + true + + + true + + + + Псевдоним + + <key>ru</key> + <value>Псевдоним</value> + + 2 + + String + + + + true + + + true + + + + ИдентификаторТранспорта + 3 + + String + + + + true + + + true + + + + ПолноеИмяОбработкиТранспорта + 4 + + String + + + + true + + + true + + + + КартинкаСправка + + <key>ru</key> + <value>Картинка справка</value> + + 5 + + Picture + + + true + + + true + + + + Выбран + 6 + + Boolean + + + true + + + true + + + + + ТаблицаПродолжениеНастройки + + <key>ru</key> + <value>Таблица новая настройка</value> + + 8 + + ValueTable + + + true + + + true + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 1 + + Picture + + + true + + + true + + + + Псевдоним + + <key>ru</key> + <value>Псевдоним</value> + + 2 + + String + + + + true + + + true + + + + ИдентификаторТранспорта + 3 + + String + + + + true + + + true + + + + ПолноеИмяОбработкиТранспорта + 4 + + String + + + + true + + + true + + + + КартинкаСправка + + <key>ru</key> + <value>Картинка справка</value> + + 5 + + Picture + + + true + + + true + + + + Выбран + 6 + + Boolean + + + true + + + true + + + + + ВариантРаботыМастера + 6 + + String + + + + true + + + true + + + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + ЗагрузитьНастройкиПодключения + + <key>ru</key> + <value>Загрузить настройки подключения</value> + + 4 + + ru + Загрузить настройки подключения + + + true + + + + ЗагрузитьНастройкиПодключения + + + Auto + Auto + + + + + +
          diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыборТипаТранспорта/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыборТипаТранспорта/Module.bsl new file mode 100644 index 000000000..49df4f366 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ВыборТипаТранспорта/Module.bsl @@ -0,0 +1,333 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + ИнициализацияРеквизитовФормы(); + + ИнициализацияЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВариантРаботыПриИзменении(""); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВариантРаботыПриИзменении(Элемент) + + Если ВариантРаботы = 0 Тогда + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаТипыТранспортаНоваяНастройка; + Элементы.ПанельКоманд.ТекущаяСтраница = Элементы.ПанельКомандСтраницаНоваяНастройка; + + Иначе + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаТипыТранспортаПродолжениеНастройки; + Элементы.ПанельКоманд.ТекущаяСтраница = Элементы.ПанельКомандСтраницаПродолжениеНастройки; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаНоваяНастройкаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если СтрНайти(Поле.Имя, "Справка") Тогда + ТекущиеДанные = Элементы.ТаблицаНоваяНастройка.ТекущиеДанные; + ОткрытьСправку(ТекущиеДанные.ПолноеИмяОбработкиТранспорта); + Иначе + Готово(""); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаПродолжениеНастройкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ТекущиеДанные = Элементы.ТаблицаПродолжениеНастройки.ТекущиеДанные; + + Если СтрНайти(Поле.Имя, "Справка") Тогда + ОткрытьСправку(ТекущиеДанные.ПолноеИмяОбработкиТранспорта); + Иначе + ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта; + ЗагрузитьНастройкиПодключения(""); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Результат = Новый Структура; + + ТекущиеДанные = Элементы.ТаблицаНоваяНастройка.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + + Текст = НСтр("ru = 'Для продолжения настройки выберите один из типов транспорта'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + + ОбщегоНазначенияКлиент.СообщитьПользователю(Текст); + + Возврат; + + КонецЕсли; + + ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта; + + Результат.Вставить("ИдентификаторТранспорта", ИдентификаторТранспорта); + Результат.Вставить("ВариантРаботыМастера", ВариантРаботыМастера); + + Закрыть(Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройкиПодключения(Команда) + + ТекущиеДанные = Элементы.ТаблицаПродолжениеНастройки.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + + Текст = НСтр("ru = 'Для продолжения настройки выберите один из типов транспорта'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + + ОбщегоНазначенияКлиент.СообщитьПользователю(Текст); + + Возврат; + + КонецЕсли; + + ИдентификаторТранспорта = ТекущиеДанные.ИдентификаторТранспорта; + + Оповещение = Новый ОписаниеОповещения("ЗавершениеВыбораФайлаНастроек", ЭтотОбъект); + + ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); + ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файл настроек'") + "|*.json;*.xml"; + ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл настроек'"); + + ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + // ТаблицаНоваяНастройка + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТаблицаНоваяНастройкаПсевдоним"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаНоваяНастройка.Выбран"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина)); + + // ТаблицаПродолжениеНастройки + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТаблицаПродолжениеНастройкиПсевдоним"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаПродолжениеНастройки.Выбран"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина)); + +КонецПроцедуры + +&НаСервере +Процедура ИнициализацияРеквизитовФормы() + + Если Не Параметры.Свойство("ИмяПланаОбмена") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + Параметры.Свойство("ИмяПланаОбмена", ИмяПланаОбмена); + Параметры.Свойство("ИдентификаторТранспорта", ИдентификаторТранспорта); + Параметры.Свойство("ИдентификаторНастройки", ИдентификаторНастройки); + Параметры.Свойство("ВариантРаботыМастера", ВариантРаботыМастера); + + Корреспондент = ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка(); + + Таблица = ТранспортСообщенийОбмена.ТаблицаПараметровТранспорта(Корреспондент, ИдентификаторНастройки); + + Для Каждого Строка Из Таблица Цикл + + Если НЕ Строка.ПассивныйРежим Тогда + + НоваяСтрока = ТаблицаНоваяНастройка.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + НоваяСтрока.КартинкаСправка = БиблиотекаКартинок.СправкаФормы; + + Если Строка.ИдентификаторТранспорта = ИдентификаторТранспорта Тогда + НоваяСтрока.Выбран = Истина; + КонецЕсли; + + КонецЕсли; + + Если Не Строка.ПрямоеПодключение Тогда + + НоваяСтрока = ТаблицаПродолжениеНастройки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); + НоваяСтрока.КартинкаСправка = БиблиотекаКартинок.СправкаФормы; + + Если Строка.ИдентификаторТранспорта = ИдентификаторТранспорта Тогда + НоваяСтрока.Выбран = Истина; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И ПланыОбмена.ГлавныйУзел() = Неопределено Тогда + ВариантРаботы = 1; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализацияЭлементовФормы() + + НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); + Элементы.ВариантРаботы.Видимость = Не НастройкаРИБ; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеВыбораФайлаНастроек(Результат, ДополнительныеНастройки) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СообщениеОбОшибке = ""; + + Попытка + + НастройкиПодключения = ПрочитатьИПроверитьНастройкиПодключения(Результат.Имя, Результат.Хранение, СообщениеОбОшибке); + + Исключение + + КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Шаблон = НСтр("ru = 'Ошибка при чтении файла настроек. Возможно, указан файл неправильного формата. + |%1'"); + + СообщениеОбОшибке = СтрШаблон(Шаблон, КраткоеПредставлениеОшибки); + + КонецПопытки; + + Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); + Возврат; + КонецЕсли; + + Закрыть(НастройкиПодключения); + +КонецПроцедуры + +&НаСервере +Функция ПрочитатьИПроверитьНастройкиПодключения(ИмяФайлаНастроек, Адрес, СообщениеОбОшибке) + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес); + ДвоичныеДанные.Записать(ИмяВременногоФайла); + + Чтение = Новый ЧтениеТекста; + Чтение.Открыть(ИмяВременногоФайла); + Текст = Чтение.Прочитать(); + Чтение.Закрыть(); + + УдалитьФайлы(ИмяВременногоФайла); + + Файл = Новый Файл(ИмяФайлаНастроек); + + Если НРег(Файл.Расширение) = ".xml" Тогда + НастройкиПодключения = ПрочитатьИПроверитьНастройкиПодключенияИзXML(Текст, СообщениеОбОшибке); + ИначеЕсли НРег(Файл.Расширение) = ".json" Тогда + НастройкиПодключения = ПрочитатьИПроверитьНастройкиПодключенияИзJSON(Текст, СообщениеОбОшибке); + Иначе + ТекстОшибки = НСтр("ru = 'Неверное расширение файла настроек.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Возврат НастройкиПодключения; + +КонецФункции + +&НаСервере +Функция ПрочитатьИПроверитьНастройкиПодключенияИзXML(Знач ТекстXML, СообщениеОбОшибке) + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.СтруктураНастроекПодключения(); + НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбмена; + НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + НастройкиПодключенияИзXML = ТранспортСообщенийОбмена.НастройкиПодключенияИзXML(ТекстXML, ИдентификаторТранспорта); + ТранспортСообщенийОбмена.ПроверитьИЗаполнитьНастройкиПодключенияXML(НастройкиПодключения, НастройкиПодключенияИзXML,, СообщениеОбОшибке); + + Возврат НастройкиПодключения; + +КонецФункции + +&НаСервере +Функция ПрочитатьИПроверитьНастройкиПодключенияИзJSON(Знач ТекстJSON, СообщениеОбОшибке) + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.СтруктураНастроекПодключения(); + НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбмена; + НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + НастройкиПодключенияИзJSON = ТранспортСообщенийОбмена.НастройкиПодключенияИзJSON(ТекстJSON); + + ТранспортСообщенийОбмена.ПроверитьИЗаполнитьНастройкиПодключенияXML(НастройкиПодключения, НастройкиПодключенияИзJSON,, СообщениеОбОшибке); + + Возврат НастройкиПодключения; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form index db049c47c..a6daec2c9 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Form.form @@ -44,7 +44,7 @@ 10 <key>ru</key> - <value>Выполняется получение параметров из программы "%1". + <value>Выполняется получение параметров из приложения "%1". Пожалуйста, подождите...</value> true @@ -141,9 +141,9 @@ 16 <key>ru</key> - <value>Перед продолжением настройки синхронизации данных (настройки правил отправки и получения данных) требуется получить параметры из программы "%1". + <value>Перед продолжением настройки синхронизации данных (настройки правил отправки и получения данных) требуется получить параметры из приложения "%1". -Перейдите в "%1", завершите в ней настройку и выполните первоначальную выгрузку данных, после чего завершите настройку в этой программе.</value> +Перейдите в "%1", завершите в ней настройку и выполните первоначальную выгрузку данных, после чего завершите настройку в этом приложении.</value> true true diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl index d240009d0..7e58e6aa5 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ЗагрузкаНастроекXDTO/Module.bsl @@ -128,7 +128,7 @@ НастройкиЗагрузки = Новый Структура; НастройкиЗагрузки.Вставить("УзелОбмена", УзелОбмена); - + МодульПомощникНастройки.ПриНачалеЗагрузкиНастроекXDTO(НастройкиЗагрузки, ПараметрыОбработчика, ПродолжитьОжидание); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ИзменениеПрефиксаУзлаИБ/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ИзменениеПрефиксаУзлаИБ/Form.form index 8b4db8aca..e0fa94b69 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ИзменениеПрефиксаУзлаИБ/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ИзменениеПрефиксаУзлаИБ/Form.form @@ -1374,21 +1374,6 @@ true auto true - - Объект - 1 - - String - - - - true - - - true - -
          true
          -
          ПорядковыйНомерПерехода 2 diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаОбщихПараметров/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаОбщихПараметров/Form.form new file mode 100644 index 000000000..00d1cafd7 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаОбщихПараметров/Form.form @@ -0,0 +1,2568 @@ + + + + <key>ru</key> + <value>Настройка общих параметров</value> + + + ПанельОсновная + 1 + + СтраницаПолучениеПараметровКорреспондетна + 35 + + ДекорацияПроверкаПодключенияOnlineОжиданиеКартинка + 43 + + <key>ru</key> + <value>Декорация проверка подключения online ожидание картинка</value> + + true + true + + true + + + ДекорацияПроверкаПодключенияOnlineОжиданиеКартинкаРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ДекорацияПроверкаПодключенияOnlineОжиданиеКартинкаКонтекстноеМеню + 44 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДекорацияПроверкаПодключенияOnlineОжиданиеНадпись + 46 + + <key>ru</key> + <value>Выполняется подключение к приложению-корреспонденту. +Пожалуйста, подождите...</value> + + true + true + + true + + + ДекорацияПроверкаПодключенияOnlineОжиданиеНадписьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ДекорацияПроверкаПодключенияOnlineОжиданиеНадписьКонтекстноеМеню + 47 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница получение параметров корреспондетна</value> + + + СтраницаПолучениеПараметровКорреспондетнаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаОбщиеНастройкиСинхронизации + 7 + + ГруппаНастройкиПрограммыПредставление + 11 + + Наименование + 13 + + <key>ru</key> + <value>Наименование этой информационной базы</value> + + true + true + + true + + + Объект.НаименованиеЭтойБазы + + Top + + НаименованиеРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Префикс + 16 + true + true + + true + + + Объект.ПрефиксИнформационнойБазыИсточника + + Top + + ПрефиксРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПрефиксКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Представление этого приложения</value> + + + ГруппаНастройкиПрограммыПредставлениеРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Button + true + true + Auto + Auto + + + + ГруппаНастройкиПрограммыКорреспондентаПредставление + 19 + + НаименованиеКорреспондента + 21 + + <key>ru</key> + <value>Наименование корреспондента</value> + + true + true + + true + + + Объект.НаименованиеВторойБазы + + Top + + НаименованиеКорреспондентаРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + НаименованиеКорреспондентаКонтекстноеМеню + 22 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ПрефиксКорреспондента + 24 + + <key>ru</key> + <value>Префикс</value> + + true + true + + true + + + Объект.ПрефиксИнформационнойБазыПриемника + + Top + + ПрефиксКорреспондентаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПрефиксКорреспондентаКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + 5 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Представление приложения-корреспондента</value> + + + ГруппаНастройкиПрограммыКорреспондентаПредставлениеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Button + true + true + Auto + Auto + + + + ДекорацияОтступ + 182 + true + true + + true + + + ДекорацияОтступРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + ДекорацияОтступКонтекстноеМеню + 183 + true + + Label + true + true + + Left + + + + ГруппаСохранениеНастроекПодключенияДляКорреспондента + 27 + + ИмяКаталогаСохраненияНастроек + 114 + + <key>ru</key> + <value>Имя каталога сохранения настроек</value> + + true + true + + true + + + ИмяКаталогаСохраненияНастроек + + Top + ShowBottom + + ИмяКаталогаСохраненияНастроекРасширеннаяПодсказка + 116 + Label + true + Left + + Left + + + + ИмяКаталогаСохраненияНастроекКонтекстноеМеню + 115 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяКаталогаСохраненияНастроекНачалоВыбора + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Прочее</value> + + + ГруппаСохранениеНастроекПодключенияДляКорреспондентаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Vertical + Button + true + true + Auto + Auto + + + + ГруппаДублированиеНастроекСинхронизации + 140 + + Группа1 + 142 + + Декорация20 + 144 + true + true + + true + + + Декорация20РасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + Декорация20КонтекстноеМеню + 145 + true + + true + true + + + CommonPicture.Предупреждение32 + + AsFileRef + + + + Группа2 + 147 + + Декорация3 + 149 + + <key>ru</key> + <value>Уже существует настроенная синхронизация между информационными базами.</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 150 + true + + Label + 60 + true + true + + Left + + + + ИсправитьДублированиеНастроекСинхронизации + 152 + + <key>ru</key> + <value>Исправить. Будут выполнены следующие действия:</value> + + true + true + + true + + + ИсправитьДублированиеНастроекСинхронизации + + Right + + OnChange + ИсправитьДублированиеНастроекСинхронизацииПриИзменении + + + ИсправитьДублированиеНастроекСинхронизацииРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + ИсправитьДублированиеНастроекСинхронизацииКонтекстноеМеню + 153 + true + + CheckBoxField + Enter + true + Left + true + + + + Группа3 + 155 + + ГруппаЭтотУзелЕстьВКорреспонденте + 166 + + КартинкаЭтотУзелЕстьВКорреспонденте + 170 + + <key>ru</key> + <value>Картинка этот узел есть в корреспонденте</value> + + true + true + + true + + + КартинкаЭтотУзелЕстьВКорреспондентеРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + КартинкаЭтотУзелЕстьВКорреспондентеКонтекстноеМеню + 171 + true + + true + true + + + StdPicture.Change + + AsFileRef + + + + НадписьЭтотУзелЕстьВКорреспонденте + 173 + + <key>ru</key> + <value>Изменить код для текущего узла этой информационной базы</value> + + true + true + + true + + + НадписьЭтотУзелЕстьВКорреспондентеРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + НадписьЭтотУзелЕстьВКорреспондентеКонтекстноеМеню + 174 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Этот узел есть в корреспонденте</value> + + + ГруппаЭтотУзелЕстьВКорреспондентеРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаУзелКорреспондентаЕстьВЭтойБазе + 168 + + КартинкаУзелКорреспондентаЕстьВЭтойБазе + 176 + + <key>ru</key> + <value>Картинка узел корреспондента есть в этой базе</value> + + true + true + + true + + + КартинкаУзелКорреспондентаЕстьВЭтойБазеРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + КартинкаУзелКорреспондентаЕстьВЭтойБазеКонтекстноеМеню + 177 + true + + true + true + + + StdPicture.Delete + + AsFileRef + + + + НадписьУзелКорреспондентаЕстьВЭтойБазе + 179 + + <key>ru</key> + <value>Удаление узла "%1"</value> + + true + true + + true + + + НадписьУзелКорреспондентаЕстьВЭтойБазеРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + НадписьУзелКорреспондентаЕстьВЭтойБазеКонтекстноеМеню + 180 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Узел корреспондента есть в этой базе</value> + + + ГруппаУзелКорреспондентаЕстьВЭтойБазеРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа3РасширеннаяПодсказка + 156 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + + Декорация18 + 163 + + <key>ru</key> + <value><fontsize 10><b><color #ff0000>Внимание! +</></></>Данная операция необратима и предназначена только для устранения ошибки синхронизации, связанной с дублированием настроек обмена в информационных базах, которые были получены путем копирования. +Не рекомендуется применять для работающих синхронизаций.</value> + + true + true + + true + + + Декорация18РасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + Декорация18КонтекстноеМеню + 164 + true + + true + Label + 70 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа2РасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа1РасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + WeakSeparation + true + true + Auto + Auto + + + true + + true + + + <key>ru</key> + <value>Дублирование настроек синхронизации</value> + + + ГруппаДублированиеНастроекСинхронизацииРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + auto + Auto + Auto + + + + ГруппаВосстановлениеНастроекОбмена + 185 + + Группа7 + 187 + + Декорация21 + 189 + true + true + + true + + + Декорация21РасширеннаяПодсказка + 191 + Label + true + true + + Left + + + + Декорация21КонтекстноеМеню + 190 + true + + true + true + + + CommonPicture.Предупреждение32 + + AsFileRef + + + + Декорация12 + 192 + + <key>ru</key> + <value><b><colorstyle -16>Внимание!</></> + +Продолжение настройки приведет к изменению кода узла обмена для этой информационной базы. Если в базе уже существуют настроенные обмены, то это может привести к их неработоспособности.</value> + + true + true + + true + + + Декорация12РасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + Декорация12КонтекстноеМеню + 193 + true + + true + Label + 70 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа7РасширеннаяПодсказка + 188 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + true + + true + + + <key>ru</key> + <value>Восстановление настроек</value> + + + ГруппаВосстановлениеНастроекОбменаРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница общие настройки синхронизации</value> + + + СтраницаОбщиеНастройкиСинхронизацииРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаСохранениеНастроекПодключения + 76 + + Декорация8 + 80 + true + true + + true + + + Декорация8РасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + Декорация8КонтекстноеМеню + 81 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация9 + 83 + + <key>ru</key> + <value>Выполняется сохранение настроек подключения. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация9РасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + Декорация9КонтекстноеМеню + 84 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница сохранение настроек подключения</value> + + + СтраницаСохранениеНастроекПодключенияРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаОкончание + 86 + + ГруппаЗавершениеНастройкиПодключения + 90 + + Декорация6 + 92 + true + true + + true + + + Декорация6РасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 93 + true + + true + true + + + CommonPicture.Успешно32 + + + + + Декорация7 + 95 + + <key>ru</key> + <value>Настройки подключения в этом приложении успешно сохранены.</value> + + true + true + + true + + + Декорация7РасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 96 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Завершение настройки подключения</value> + + + ГруппаЗавершениеНастройкиПодключенияРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница окончание</value> + + + СтраницаОкончаниеРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОшибка + 125 + + ГруппаОшибка + 129 + + Декорация10 + 131 + true + true + + true + + + Декорация10РасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + Декорация10КонтекстноеМеню + 132 + true + + true + true + + + CommonPicture.Предупреждение32 + + + + + Декорация11 + 134 + + <key>ru</key> + <value>Ошибка при настройке общих параметров</value> + + true + true + + true + + + Декорация11РасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + Декорация11КонтекстноеМеню + 135 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ошибка</value> + + + ГруппаОшибкаРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + true + true + Auto + Auto + + + + СообщениеОбОшибке + 137 + + <key>ru</key> + <value>Сообщение об ошибке</value> + + true + true + + true + + + СообщениеОбОшибке + + None + + СообщениеОбОшибкеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + СообщениеОбОшибкеКонтекстноеМеню + 138 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + ОбработкаЖурналРегистрацииОткрыть + 200 + true + true + + true + + + ОбработкаЖурналРегистрацииОткрытьExtendedTooltip + 201 + Label + true + true + + Left + + + Hyperlink + DataProcessor.ЖурналРегистрации.StandardCommand.Open + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Страница ошибка</value> + + + СтраницаОшибкаРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ПанельОсновнаяРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + ПанельНавигации + 3 + + СтраницаНавигацииНачало + 59 + + КоманднаяПанельНачало + 63 + + Отмена + 110 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ОтменаРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель начало</value> + + + КоманднаяПанельНачалоРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации начало</value> + + + СтраницаНавигацииНачалоРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНавигацииДалее + 98 + + КоманднаяПанельДалее + 104 + + Далее + 106 + + <key>ru</key> + <value>Далее></value> + + true + true + + true + + + ДалееРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Form.Command.Далее + Normal + Auto + true + true + UserCmds + Auto + + + Отмена1 + 112 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + Отмена1РасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель далее</value> + + + КоманднаяПанельДалееРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации далее</value> + + + СтраницаНавигацииДалееРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНавигацииГотово + 61 + + КоманднаяПанельГотово + 65 + + Готово + 108 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ГотовоРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Form.Command.Готово + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель готово</value> + + + КоманднаяПанельГотовоРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации готово</value> + + + СтраницаНавигацииГотовоРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаНавигацииОжидание + 117 + + КоманднаяПанельОжидание + 119 + + Далее1 + 121 + + <key>ru</key> + <value>Далее></value> + + true + false + + true + + + Далее1РасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Command.Далее + Normal + Auto + true + true + UserCmds + Auto + + + Отмена2 + 123 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + Отмена2РасширеннаяПодсказка + 124 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель ожидание</value> + + + КоманднаяПанельОжиданиеРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации ожидание</value> + + + СтраницаНавигацииОжиданиеРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + + ПанельНавигацииРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + DontBlock + true + Vertical + true + true + true + auto + true + + ТаблицаПереходов + 6 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + 9 + + String + + + + true + + + true + + + + + ПорядковыйНомерПерехода + 7 + + Number + + 3 + true + + + + true + + + true + + + + КраткаяИнформацияПоОбмену + 16 + + String + + + + true + + + true + + + + ПодробнаяИнформацияПоОбмену + 17 + + String + + + + true + + + true + + + + ИмяКаталогаСохраненияНастроек + + <key>ru</key> + <value>Имя каталога сохранения настроек</value> + + 21 + + String + + + + true + + + true + + ShowError + + + АдресНастроекПодключенияXML + 22 + + String + + + + true + + + true + + + + ЗакрытьФормуБезусловно + 23 + + Boolean + + + true + + + true + + + + АдресНастроекПодключенияJSON + 24 + + String + + + + true + + + true + + + + Объект + 25 + + DataProcessorObject.ПомощникСозданияОбменаДанными + + + true + + + true + +
          true
          +
          + + СохранитьПараметрыПодключенияВФайл + 1 + + Boolean + + + true + + + true + + + + ДоступноИзменениеНаименования + 2 + + Boolean + + + true + + + true + + + + ДоступноИзменениеПрефикса + 3 + + Boolean + + + true + + + true + + + + ДоступноИзменениеНаименованияКорреспондента + 4 + + Boolean + + + true + + + true + + + + ДоступноИзменениеПрефиксаКорреспондента + 8 + + Boolean + + + true + + + true + + + + СообщениеОбОшибке + + <key>ru</key> + <value>Сообщение об ошибке</value> + + 9 + + String + + + + true + + + true + + + + НастройкаXDTO + 10 + + Boolean + + + true + + + true + + + + ИсправитьДублированиеНастроекСинхронизации + + <key>ru</key> + <value>Исправить дублирование настроек синхронизации</value> + + 11 + + Boolean + + + true + + + true + + + + ЭтотУзелЕстьВКорреспонденте + 12 + + Boolean + + + true + + + true + + + + УзелКорреспондентаЕстьВЭтойБазе + 13 + + Boolean + + + true + + + true + + + + УзелДляУдаления + 14 + + ExchangePlanRef + + + true + + + true + + + + ПодключениеУстановлено + 15 + + Boolean + + + true + + + true + + + + ПодключениеРазрешено + 18 + + Boolean + + + true + + + true + + + + НастройкиПодключенияСохранены + 19 + + Boolean + + + true + + + true + + + + ИмяФайлаНастроекДляПриемника + 20 + + String + + + + true + + + true + + + + ЕстьДанныеДляСопоставления + 5 + + Boolean + + + true + + + true + + + + МодельСервиса + 26 + + Boolean + + + true + + + true + + + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + Далее + + <key>ru</key> + <value>Далее></value> + + 3 + + ru + Далее + + + true + + + + Далее + + + Auto + Auto + + + + + + +
          diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаОбщихПараметров/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаОбщихПараметров/Module.bsl new file mode 100644 index 000000000..538ef821e --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаОбщихПараметров/Module.bsl @@ -0,0 +1,934 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ПроверитьВозможностьИспользованияФормы(Отказ); + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ИнициализироватьРеквизитыФормы(); + + УстановитьНачальноеОтображениеЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // Устанавливаем текущую таблицу переходов. + ЗаполнитьТаблицуПереходов(); + + // Позиционируемся на первом шаге помощника. + УстановитьПорядковыйНомерПерехода(1); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяКаталогаСохраненияНастроекНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ЗаголовокДиалога = НСтр("ru = 'Выберите каталог для сохранения настроек подключения'"); + Оповещение = Новый ОписаниеОповещения("ИмяКаталогаСохраненияНастроекНачалоВыбораЗавершение", ЭтотОбъект); + + ФайловаяСистемаКлиент.ВыбратьКаталог(Оповещение, ЗаголовокДиалога, ИмяКаталогаСохраненияНастроек); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяКаталогаСохраненияНастроекНачалоВыбораЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Не ЗначениеЗаполнено(Результат) Тогда + Возврат; + КонецЕсли; + + ИмяКаталогаСохраненияНастроек = Результат; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + + ТекстПредупреждения = НСтр("ru = 'Прервать настройку общих параметров подключения для синхронизации данных?'"); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( + ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); + +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + Если Не СохранитьПараметрыПодключенияВФайл Тогда + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ИмяКаталогаСохраненияНастроек"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИсправитьДублированиеНастроекСинхронизацииПриИзменении(Элемент) + + Если ИсправитьДублированиеНастроекСинхронизации + И (ЭтотУзелЕстьВКорреспонденте Или УзелКорреспондентаЕстьВЭтойБазе) Тогда + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеУдаленияРазрешений", ЭтотОбъект, Объект.УзелИнформационнойБазы); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = ОбменДаннымиВызовСервера.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Объект.УзелИнформационнойБазы); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, Неопределено, ОповещениеОЗакрытии); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеУдаленияРазрешений(Результат, УзелИнформационнойБазы) Экспорт + + Если НЕ Результат = КодВозвратаДиалога.ОК Тогда + ИсправитьДублированиеНастроекСинхронизации = Ложь; + КонецЕсли; + + Элементы.Далее.Доступность = ИсправитьДублированиеНастроекСинхронизации + И (ЭтотУзелЕстьВКорреспонденте Или УзелКорреспондентаЕстьВЭтойБазе); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + ЗакрытьФормуБезусловно = Истина; + + Результат = Новый Структура; + Результат.Вставить("УзелОбмена", Объект.УзелИнформационнойБазы); + Результат.Вставить("ЕстьДанныеДляСопоставления", ЕстьДанныеДляСопоставления); + + Закрыть(Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура Далее(Команда) + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ИнициализацияФормыПриСоздании + +&НаСервере +Процедура ПроверитьВозможностьИспользованияФормы(Отказ = Ложь) + + // Обязательная должны быть переданы параметры помощника создания обмена данными. + Если Не Параметры.Свойство("НастройкиПодключения") Тогда + + ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + ЗаполнитьЗначенияСвойств(Объект, Параметры.НастройкиПодключения); + + ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + + МодельСервиса = ОбщегоНазначения.РазделениеВключено() + И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); + + НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(Объект.ИмяПланаОбмена); + НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(Объект.ИмяПланаОбмена); + + ДоступноИзменениеНаименования = Ложь; + ДоступноИзменениеПрефикса = Ложь; + + ДоступноИзменениеНаименованияКорреспондента = Истина; + ДоступноИзменениеПрефиксаКорреспондента = Истина; + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + + ДоступноИзменениеНаименования = Ложь; + ДоступноИзменениеПрефикса = Ложь; + + ДоступноИзменениеНаименованияКорреспондента = Ложь; + ДоступноИзменениеПрефиксаКорреспондента = Ложь; + + КонецЕсли; + + Если ЗначениеЗаполнено(Объект.ИдентификаторТранспорта) Тогда + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.НастройкиПодключенияПоОбработке(Объект); + ИмяКаталогаСохраненияНастроек = ТранспортСообщенийОбмена.ИмяКаталогаСохраненияНастроек(НастройкиПодключения); + + ПараметрыТранспорта = ТранспортСообщенийОбмена.ПараметрыТранспорта(Объект.ИдентификаторТранспорта); + + СохранитьПараметрыПодключенияВФайл = + ПараметрыТранспорта.СохранитьПараметрыПодключенияВФайл + И Не Объект.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И Не НастройкаРИБ; + + ИмяФайлаНастроекДляПриемника = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена( + Объект.ИмяПланаОбмена, "ИмяФайлаНастроекДляПриемника", Объект.ИдентификаторНастройки); + + КонецЕсли; + + Если Не ЗначениеЗаполнено(ИмяФайлаНастроекДляПриемника) Тогда + ИмяФайлаНастроекДляПриемника = "ConnectionSettings"; + КонецЕсли; + + ШаблонЗаголовка = + НСтр("ru = 'В данный каталог будут сохранены файлы настроек ""%1.*"". + |Воспользуйтесь одним из них для продолжения настройки в базе корреспонденте.'"); + + Элементы.ИмяКаталогаСохраненияНастроек.Подсказка = СтрШаблон(ШаблонЗаголовка, ИмяФайлаНастроекДляПриемника); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНачальноеОтображениеЭлементовФормы() + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ГруппаСохранениеНастроекПодключенияДляКорреспондента", "Видимость", СохранитьПараметрыПодключенияВФайл); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "Наименование", "ТолькоПросмотр", Не ДоступноИзменениеНаименования); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "Префикс", "ТолькоПросмотр", Не ДоступноИзменениеПрефикса); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "НаименованиеКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеНаименованияКорреспондента); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, + "ПрефиксКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеПрефиксаКорреспондента); + +КонецПроцедуры + +#КонецОбласти + +#Область ПоставляемаяЧастьПомощника + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 0 Тогда + + ПорядковыйНомерПерехода = 0; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода. + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц. + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяСтраницыДекорации) Тогда + + Элементы.ПанельДекорации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыДекорации]; + + КонецЕсли; + + // Устанавливаем текущую кнопку по умолчанию. + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + + // Обработчики событий переходов. + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеДалее. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + ПорядковыйНомерПерехода = ПорядковыйНомерПерехода - 1; + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() > 0 Тогда + + СтрокаПерехода = СтрокиПерехода[0]; + + // Обработчик ПриПереходеНазад. + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + ПорядковыйНомерПерехода = ПорядковыйНомерПерехода + 1; + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + ПорядковыйНомерПерехода = ПорядковыйНомерПерехода - 1; + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // Обработчик ОбработкаДлительнойОперации. + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + Результат = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + ПорядковыйНомерПерехода = ПорядковыйНомерПерехода - 1; + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти + +#Область ОбработчикиСобытийПереходов + +// Получение параметров корреспондента + +&НаКлиенте +Функция Подключаемый_ПолучениеПараметровКорреспондетна_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) Экспорт + + ФоновоеЗадание = ПолучениеПараметровКорреспондентаНачало(); + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + + Обработчик = Новый ОписаниеОповещения("ПолучениеПараметровКорреспондентаЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Функция ПолучениеПараметровКорреспондентаНачало() + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.СтруктураНастроекПодключения(); + ЗаполнитьЗначенияСвойств(НастройкиПодключения, Объект); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение параметров корреспондента'", ОбщегоНазначения.КодОсновногоЯзыка()); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + + Возврат ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "Обработки.ПомощникСозданияОбменаДанными.ПолучениеПараметровКорреспондента", + НастройкиПодключения); + +КонецФункции + +&НаКлиенте +Процедура ПолучениеПараметровКорреспондентаЗавершение(ФоновоеЗадание, ДополнительныеПараметры) Экспорт + + Если ФоновоеЗадание.Статус = "Ошибка" Тогда + СообщениеОбОшибке = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + КонецЕсли; + + ПолучениеПараметровКорреспондентаЗавершениеНаСервере(ФоновоеЗадание.АдресРезультата); + + УстановитьНачальноеОтображениеЭлементовФормы(); + + Если ПодключениеУстановлено И ПодключениеРазрешено + И (ЭтотУзелЕстьВКорреспонденте ИЛИ УзелКорреспондентаЕстьВЭтойБазе) Тогда + + НастроитьГруппуДублированиеНастроекСинхронизации(); + ИзменитьПорядковыйНомерПерехода(+1); + + ИначеЕсли ПодключениеУстановлено И ПодключениеРазрешено Тогда + + НастроитьГруппаВосстановленияНастроек(); + ИзменитьПорядковыйНомерПерехода(+1); + + Иначе + + ИзменитьПорядковыйНомерПерехода(+4); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПолучениеПараметровКорреспондентаЗавершениеНаСервере(Знач АдресРезультата) + + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СписокСвойств = "ПодключениеУстановлено, + |ПодключениеРазрешено, + |СообщениеОбОшибке, + |ЭтотУзелЕстьВКорреспонденте, + |УзелКорреспондентаЕстьВЭтойБазе, + |УзелДляУдаления"; + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Результат, СписокСвойств); + + Если ПодключениеУстановлено И ЗначениеЗаполнено(Результат.ПараметрыКорреспондента) Тогда + ЗаполнитьПараметрыКорреспондента(Результат.ПараметрыКорреспондента); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьГруппуДублированиеНастроекСинхронизации() + + Если УзелКорреспондентаЕстьВЭтойБазе Или ЭтотУзелЕстьВКорреспонденте Тогда + + Элементы.ГруппаДублированиеНастроекСинхронизации.Видимость = Истина; + Элементы.ГруппаЭтотУзелЕстьВКорреспонденте.Видимость = ЭтотУзелЕстьВКорреспонденте; + Элементы.ГруппаУзелКорреспондентаЕстьВЭтойБазе.Видимость = УзелКорреспондентаЕстьВЭтойБазе; + Элементы.НадписьУзелКорреспондентаЕстьВЭтойБазе.Заголовок = + СтрШаблон(Элементы.НадписьУзелКорреспондентаЕстьВЭтойБазе.Заголовок, УзелДляУдаления); + + Элементы.Далее.Доступность = Ложь; + + Иначе + + Элементы.ГруппаДублированиеНастроекСинхронизации.Видимость = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьГруппаВосстановленияНастроек() + + Элементы.ГруппаВосстановлениеНастроекОбмена.Видимость = + Объект.ВосстановлениеНастроекОбмена = "ВосстановлениеСПредупреждением"; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПараметрыКорреспондента(ПараметрыКорреспондента, КорреспондентВМоделиСервиса = Ложь) + + Если ЗначениеЗаполнено(ПараметрыКорреспондента.ПрефиксИнформационнойБазы) Тогда + Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыКорреспондента.ПрефиксИнформационнойБазы; + ДоступноИзменениеПрефиксаКорреспондента = Ложь; + Иначе + Объект.ПрефиксИнформационнойБазыПриемника = ПараметрыКорреспондента.ПрефиксИнформационнойБазыПоУмолчанию; + ДоступноИзменениеПрефиксаКорреспондента = Истина; + КонецЕсли; + + Если Не КорреспондентВМоделиСервиса Тогда + Если ЗначениеЗаполнено(ПараметрыКорреспондента.НаименованиеИнформационнойБазы) Тогда + Объект.НаименованиеВторойБазы = ПараметрыКорреспондента.НаименованиеИнформационнойБазы; + Иначе + Объект.НаименованиеВторойБазы = ПараметрыКорреспондента.НаименованиеИнформационнойБазыПоУмолчанию; + КонецЕсли; + КонецЕсли; + + Объект.ИдентификаторИнформационнойБазыПриемника = ПараметрыКорреспондента.КодЭтогоУзла; + Объект.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; + + Если НастройкаXDTO Тогда + + Объект.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = ПараметрыКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена; + + Объект.ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата( + Объект.ИмяПланаОбмена, ПараметрыКорреспондента.ВерсииФорматаОбмена); + + Объект.ПоддерживаемыеОбъектыФорматаКорреспондента = Новый ХранилищеЗначения( + ПараметрыКорреспондента.ПоддерживаемыеОбъектыФормата, Новый СжатиеДанных(9)); + + ИначеЕсли СтрДлина(Объект.ИдентификаторИнформационнойБазыПриемника) = 9 Тогда + Объект.ИспользоватьПрефиксыДляНастройкиОбмена = Ложь; + Объект.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Ложь; + Если ПустаяСтрока(Объект.ИдентификаторИнформационнойБазыИсточника) Тогда + Объект.ИдентификаторИнформационнойБазыИсточника = Объект.ПрефиксИнформационнойБазыИсточника; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Страница общих параметров + +&НаКлиенте +Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее(Отказ) Экспорт + + Если НЕ ПроверитьЗаполнение() Тогда + + Отказ = Истина; + + КонецЕсли; + +КонецФункции + +// Сохранение настроек подключения + +&НаКлиенте +Функция Подключаемый_СохранениеНастроекПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) Экспорт + + ФоновоеЗадание = СохранениеНастроекПодключенияНачало(); + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + + Обработчик = Новый ОписаниеОповещения("СохранениеНастроекПодключенияЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); + + Возврат Неопределено; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОшибка_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) Экспорт + + Если СообщениеОбОшибке = "" Тогда + + СообщениеОбОшибке = НСтр( + "ru = 'Ошибка при настройке общих параметров. + |Подробности см. в журнале регистрации.'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Функция СохранениеНастроекПодключенияНачало() + + ПараметрыПроцедуры = ТранспортСообщенийОбменаКлиентСервер.НастройкиПодключенияПоОбработке(Объект); + + ПараметрыПроцедуры.ИсправитьДублированиеНастроекСинхронизации = ИсправитьДублированиеНастроекСинхронизации; + ПараметрыПроцедуры.УзелКорреспондентаЕстьВЭтойБазе = УзелКорреспондентаЕстьВЭтойБазе; + ПараметрыПроцедуры.ЭтотУзелЕстьВКорреспонденте = ЭтотУзелЕстьВКорреспонденте; + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение параметров корреспондента'", ОбщегоНазначения.КодОсновногоЯзыка()); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + + КлючФоновогоЗадания = ОбменДаннымиСервер.КлючФоновогоЗадания(Объект.ИмяПланаОбмена, + НСтр("ru = 'Сохранение настроек подключения'")); + + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение настроек подключения для ""%1"" уже выполняется.'"), Объект.ИмяПланаОбмена); + КонецЕсли; + + ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; + + Возврат ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "Обработки.ПомощникСозданияОбменаДанными.СохранитьНастройкиПодключения", + ПараметрыПроцедуры); + +КонецФункции + +&НаКлиенте +Процедура СохранениеНастроекПодключенияЗавершение(ФоновоеЗадание, ДополнительныеПараметры) Экспорт + + Если ФоновоеЗадание = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ФоновоеЗадание.Статус = "Ошибка" Тогда + + СообщениеОбОшибке = ФоновоеЗадание.ПодробноеПредставлениеОшибки; + ИзменитьПорядковыйНомерПерехода(+2); + + КонецЕсли; + + СохранениеНастроекПодключенияЗавершениеНаСервере(ФоновоеЗадание.АдресРезультата); + + Если НастройкиПодключенияСохранены Тогда + + СохранитьФайлыНастроекПодключения(); + + Иначе + + ИзменитьПорядковыйНомерПерехода(+2); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СохранениеНастроекПодключенияЗавершениеНаСервере(Знач АдресРезультата) + + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + + СписокСвойств = "НастройкиПодключенияСохранены,СообщениеОбОшибке"; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Результат, СписокСвойств); + + Если Результат.НастройкиПодключенияСохранены Тогда + + Объект.УзелИнформационнойБазы = Результат.УзелОбмена; + + АдресНастроекПодключенияXML = ""; + + Если ЗначениеЗаполнено(Результат.СтрокаНастроекПодключенияXML) Тогда + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ИмяВременногоФайла, "UTF-8"); + Запись.Записать(Результат.СтрокаНастроекПодключенияXML); + Запись.Закрыть(); + + АдресНастроекПодключенияXML = ПоместитьВоВременноеХранилище( + Новый ДвоичныеДанные(ИмяВременногоФайла), УникальныйИдентификатор); + + УдалитьФайлы(ИмяВременногоФайла); + + КонецЕсли; + + АдресНастроекПодключенияJSON = ""; + + Если ЗначениеЗаполнено(Результат.СтрокаНастроекПодключенияJSON) Тогда + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ИмяВременногоФайла, "UTF-8"); + Запись.Записать(Результат.СтрокаНастроекПодключенияJSON); + Запись.Закрыть(); + + АдресНастроекПодключенияJSON = ПоместитьВоВременноеХранилище( + Новый ДвоичныеДанные(ИмяВременногоФайла), УникальныйИдентификатор); + + УдалитьФайлы(ИмяВременногоФайла); + + КонецЕсли; + + Если Не МодельСервиса Тогда + ЕстьДанныеДляСопоставления = Результат.ЕстьДанныеДляСопоставления; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайлыНастроекПодключения() + + Если Не ЗначениеЗаполнено(ИмяКаталогаСохраненияНастроек) Тогда + + ИзменитьПорядковыйНомерПерехода(+1); + Возврат; + + КонецЕсли; + + ПолучаемыеФайлы = Новый Массив; + + Если ЗначениеЗаполнено(АдресНастроекПодключенияXML) Тогда + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ИмяКаталогаСохраненияНастроек, + ИмяФайлаНастроекДляПриемника + ".xml"); + + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресНастроекПодключенияXML)); + + КонецЕсли; + + Если ЗначениеЗаполнено(АдресНастроекПодключенияJSON) Тогда + + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ИмяКаталогаСохраненияНастроек, + ИмяФайлаНастроекДляПриемника + ".json"); + + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, АдресНастроекПодключенияJSON)); + + КонецЕсли; + + Если ПолучаемыеФайлы.Количество() > 0 Тогда + + Оповещение = Новый ОписаниеОповещения("СохранитьФайлыНастроекПодключенияЗавершение", ЭтотОбъект); + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); + ПараметрыСохранения.Интерактивно = Ложь; + + ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, ПолучаемыеФайлы, ПараметрыСохранения); + + Иначе + + ИзменитьПорядковыйНомерПерехода(+1); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьФайлыНастроекПодключенияЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +#КонецОбласти + +&НаКлиенте +Процедура ЗаполнитьТаблицуПереходов() + + ТаблицаПереходов.Очистить(); + + Переход = ТаблицаПереходов.Добавить(); + Переход.ПорядковыйНомерПерехода = 1; + Переход.ИмяОсновнойСтраницы = "СтраницаПолучениеПараметровКорреспондетна"; + Переход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; + Переход.ИмяОбработчикаПриОткрытии = "Подключаемый_ПолучениеПараметровКорреспондетна_ПриОткрытии"; + + Переход = ТаблицаПереходов.Добавить(); + Переход.ПорядковыйНомерПерехода = 2; + Переход.ИмяОсновнойСтраницы = "СтраницаОбщиеНастройкиСинхронизации"; + Переход.ИмяСтраницыНавигации = "СтраницаНавигацииДалее"; + Переход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее"; + + Переход = ТаблицаПереходов.Добавить(); + Переход.ПорядковыйНомерПерехода = 3; + Переход.ИмяОсновнойСтраницы = "СтраницаСохранениеНастроекПодключения"; + Переход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; + Переход.ИмяОбработчикаПриОткрытии = "Подключаемый_СохранениеНастроекПодключения_ПриОткрытии"; + + Переход = ТаблицаПереходов.Добавить(); + Переход.ПорядковыйНомерПерехода = 4; + Переход.ИмяОсновнойСтраницы = "СтраницаОкончание"; + Переход.ИмяСтраницыНавигации = "СтраницаНавигацииГотово"; + + Переход = ТаблицаПереходов.Добавить(); + Переход.ПорядковыйНомерПерехода = 5; + Переход.ИмяОсновнойСтраницы = "СтраницаОшибка"; + Переход.ИмяСтраницыНавигации = "СтраницаНавигацииОжидание"; + Переход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаОшибка_ПриОткрытии"; + +КонецПроцедуры + +#КонецОбласти + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form deleted file mode 100644 index c75673707..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Form.form +++ /dev/null @@ -1,8744 +0,0 @@ - - - - ПанельОсновная - 28 - - СтраницаСпособНастройкиПодключения - 732 - - ГруппаСпособНастройкиПодключения - 738 - - ПанельСпособыНастройкиПодключения - 734 - - СтраницаМоиПриложения - 728 - - ГруппаМоиПриложения - 647 - - ГруппаКоманднаяПанельСписокПриложений - 611 - - ГруппаКоманднаяПанельСписокПриложенийСлева - 613 - - ПриложенияВСервисеОбновитьСписокДоступныхПриложений - 133 - - <key>ru</key> - <value>Обновить</value> - - true - true - - true - - - ПриложенияВСервисеОбновитьСписокДоступныхПриложенийРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - Form.Command.ОбновитьСписокДоступныхПриложений - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель список приложений слева</value> - - false - - ГруппаКоманднаяПанельСписокПриложенийСлеваРасширеннаяПодсказка - 614 - Label - true - true - - Left - - - CommandBar - - Left - - - - ПанельПриложенияВСервисе - 85 - - СтраницаПриложенияВСервисеОжидание - 87 - - ДекорацияПриложенияОжиданиеКартинка - 91 - - <key>ru</key> - <value>Декорация приложения ожидание картинка</value> - - true - true - - true - - - ДекорацияПриложенияОжиданиеКартинкаРасширеннаяПодсказка - 93 - Label - true - true - - Left - - - - ДекорацияПриложенияОжиданиеКартинкаКонтекстноеМеню - 92 - true - - true - true - - - CommonPicture.ДлительнаяОперация16 - - - - - ДекорацияПриложенияОжиданиеНадпись - 96 - - <key>ru</key> - <value>Выполняется получение списка доступных программ...</value> - - true - true - - true - - - ДекорацияПриложенияОжиданиеНадписьРасширеннаяПодсказка - 98 - Label - true - true - - Left - - - - ДекорацияПриложенияОжиданиеНадписьКонтекстноеМеню - 97 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница приложения в сервисе ожидание</value> - - - СтраницаПриложенияВСервисеОжиданиеРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - Page - - AlwaysHorizontal - auto - false - - - - СтраницаПриложенияВСервисеОшибка - 125 - - ДекорацияПриложенияОшибкаКартинка - 127 - - <key>ru</key> - <value>Декорация приложения ошибка картинка</value> - - true - true - - true - - - ДекорацияПриложенияОшибкаКартинкаРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - - ДекорацияПриложенияОшибкаКартинкаКонтекстноеМеню - 128 - true - - true - true - - - CommonPicture.Предупреждение - - - - - ДекорацияПриложенияОшибкаНадпись - 130 - - <key>ru</key> - <value>Не удалось получить список доступных программ.</value> - - true - true - - true - - - ДекорацияПриложенияОшибкаНадписьРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - - ДекорацияПриложенияОшибкаНадписьКонтекстноеМеню - 131 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Страница приложения в сервисе ошибка</value> - - - СтраницаПриложенияВСервисеОшибкаРасширеннаяПодсказка - 126 - Label - true - true - - Left - - - Page - - AlwaysHorizontal - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель приложения в сервисе</value> - - - ПанельПриложенияВСервисеРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Командная панель список приложений</value> - - - ГруппаКоманднаяПанельСписокПриложенийРасширеннаяПодсказка - 612 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Center - true - true - Auto - Auto - - - - ПриложенияВСервисе - 66 - - <key>ru</key> - <value>Приложения в сервисе</value> - - true - true - - true - - - ПриложенияВСервисе - - None - Add - Change - Copy - CopyToClipboard - Delete - EndEdit - MoveDown - MoveUp - ShowRowRearrangement - - ПриложенияВСервисеНаименованиеПриложения - 79 - - <key>ru</key> - <value>Наименование</value> - - true - true - - true - - - ПриложенияВСервисе.НаименованиеПриложения - - - ПриложенияВСервисеНаименованиеПриложенияРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - - ПриложенияВСервисеНаименованиеПриложенияКонтекстноеМеню - 80 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПриложенияВСервисеПрефикс - 82 - - <key>ru</key> - <value>Префикс</value> - - true - - true - - - ПриложенияВСервисе.Префикс - - - ПриложенияВСервисеПрефиксРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - - ПриложенияВСервисеПрефиксКонтекстноеМеню - 83 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПриложенияВСервисеОбластьДанных - 584 - - <key>ru</key> - <value>Область данных</value> - - true - true - - true - - - ПриложенияВСервисе.ОбластьДанных - - - ПриложенияВСервисеОбластьДанныхРасширеннаяПодсказка - 586 - Label - true - true - - Left - - - - ПриложенияВСервисеОбластьДанныхКонтекстноеМеню - 585 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - None - - ПриложенияВСервисеКоманднаяПанель - 68 - Left - true - - - OnActivateRow - ПриложенияВСервисеПриАктивизацииСтроки - - - ПриложенияВСервисеСтрокаПоиска - 70 - - ПриложенияВСервисеСтрокаПоискаРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - - ПриложенияВСервисеСтрокаПоискаКонтекстноеМеню - 71 - true - - ПриложенияВСервисе - - true - - - - ПриложенияВСервисеСостояниеПросмотра - 73 - - ПриложенияВСервисеСостояниеПросмотраРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - - ПриложенияВСервисеСостояниеПросмотраКонтекстноеМеню - 74 - true - - ViewStatusAddition - ПриложенияВСервисе - - true - - - - ПриложенияВСервисеУправлениеПоиском - 76 - - ПриложенияВСервисеУправлениеПоискомРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - - ПриложенияВСервисеУправлениеПоискомКонтекстноеМеню - 77 - true - - SearchControlAddition - ПриложенияВСервисе - - true - - - - ПриложенияВСервисеРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - - ПриложенияВСервисеКонтекстноеМеню - 67 - true - - true - true - true - true - true - true -
          true
          - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - - ПриложенияВСервисе.КартинкаРежимИспользования - - - CommonPicture.РежимИспользованияПриложенияВСервисеЛокально - - true - -
          - - ГруппаСпособыНастройкиПодключения - 841 - - СпособНастройкиПодключенияИнтернет - 740 - - <key>ru</key> - <value>Способ настройки подключения в сервисе</value> - - true - true - - true - - - СпособНастройкиПодключенияВСервисе - - None - Button - - OnChange - СпособНастройкиПодключенияПриИзменении - - - СпособНастройкиПодключенияИнтернетРасширеннаяПодсказка - 742 - - <key>ru</key> - <value>Обмен происходит через внутренние ресурсы сервиса. Есть возможность настроить расписание синхронизаций. -Самый быстрый из предложенных вариантов.</value> - - Label - 70 - true - - Left - - - - СпособНастройкиПодключенияИнтернетКонтекстноеМеню - 741 - true - - RadioButtonField - Enter - true - Left - true - - RadioButtons - - - ru - Подключение через интернет (авто) - - - ИнтернетАвто - - - Vertical - - - - СпособНастройкиПодключенияМС - 843 - - <key>ru</key> - <value>Способ настройки подключения в сервисе</value> - - true - true - - true - - - СпособНастройкиПодключенияВСервисе - - None - Button - - OnChange - СпособНастройкиПодключенияПриИзменении - - - СпособНастройкиПодключенияМСРасширеннаяПодсказка - 845 - - <key>ru</key> - <value>Обмен запускает управляющая программа (менеджер сервиса), расписание настраивается администратором сервиса и недоступно для редактирования.</value> - - Label - 70 - true - - Left - - - - СпособНастройкиПодключенияМСКонтекстноеМеню - 844 - true - - RadioButtonField - Enter - true - Left - true - - RadioButtons - - - ru - Подключение через управляющую программу (менеджер сервиса) - - - МенеджерСервиса - - - Vertical - - - - СпособНастройкиПодключенияВручную - 846 - - <key>ru</key> - <value>Способ настройки подключения в сервисе</value> - - true - true - - true - - - СпособНастройкиПодключенияВСервисе - - None - Button - - OnChange - СпособНастройкиПодключенияПриИзменении - - - СпособНастройкиПодключенияВручнуюРасширеннаяПодсказка - 848 - - <key>ru</key> - <value>Необходимо указать данные для авторизации в другой программе. Нет возможности настроить график синхронизации. Обмен происходит только в ручном режиме. Подходит для настройки обмена с программой, которая расположена вне сервиса.</value> - - Label - 75 - true - - Left - - - - СпособНастройкиПодключенияВручнуюКонтекстноеМеню - 847 - true - - RadioButtonField - Enter - true - Left - true - - RadioButtons - - - ru - Подключение через интернет (вручную) - - - ИнтернетВручную - - - Vertical - - - true - - true - - - <key>ru</key> - <value>Способы подключения</value> - - - ГруппаСпособыНастройкиПодключенияРасширеннаяПодсказка - 842 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - auto - Auto - Auto - - - - ГруппаБольшеНастроек - 834 - - Декорация10 - 725 - true - true - - true - - - Декорация10РасширеннаяПодсказка - 727 - Label - true - true - - Left - - - - Декорация10КонтекстноеМеню - 726 - true - - 1 - true - true - - - - НастроитьВручную - 854 - - <key>ru</key> - <value>Настроить вручную...</value> - - true - true - - true - - - НастроитьВручнуюРасширеннаяПодсказка - 855 - Label - true - true - - Left - - - Hyperlink - Form.Command.НастроитьВручную - Normal - Auto - true - true - UserCmds - Auto - - - БольшеНастроек - 836 - - <key>ru</key> - <value>Больше настроек...</value> - - true - true - - true - - - БольшеНастроекРасширеннаяПодсказка - 837 - Label - true - true - - Left - - - Hyperlink - Form.Command.БольшеНастроек - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Больше настроек</value> - - - ГруппаБольшеНастроекРасширеннаяПодсказка - 835 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - WeakSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Мои приложения</value> - - - ГруппаМоиПриложенияРасширеннаяПодсказка - 648 - Label - true - true - - Left - - - UsualGroup - - Vertical - Button - WeakSeparation - true - true - Auto - Auto - -
          - true - true - - true - - - <key>ru</key> - <value>Страница мои приложения</value> - - - СтраницаМоиПриложенияРасширеннаяПодсказка - 729 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
          - - СтраницаВидыПодключения - 32 - - ГруппаВидыПодключения - 1 - - ВидПодключенияВнешнееСоединение - 106 - - <key>ru</key> - <value>Вид подключения</value> - - true - true - - true - - - ВидПодключения - - None - ShowBottom - - OnChange - ВидПодключенияВнешнееСоединениеПриИзменении - - - ВидПодключенияВнешнееСоединениеРасширеннаяПодсказка - 108 - - <key>ru</key> - <value>Данный вариант подключения рекомендуется в том случае, если другая программа находится на том же компьютере, -что и эта программа, или обе программы расположены в одной локальной сети (в одном офисе).</value> - - Label - true - true - - Left - - - - ВидПодключенияВнешнееСоединениеКонтекстноеМеню - 107 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Подключение к другой программе на этом компьютере или по локальной сети - - - ВнешнееСоединение - - - Vertical - - - - ВидПодключенияИнтернет - 103 - - <key>ru</key> - <value>Вид подключения</value> - - true - true - - true - - - ВидПодключения - - None - ShowBottom - - OnChange - ВидПодключенияИнтернетПриИзменении - - - ВидПодключенияИнтернетРасширеннаяПодсказка - 105 - - <key>ru</key> - <value>Этот вариант подключения рекомендуется выбрать, если программа находится в другой сети (офисе) -и при этом доступна для подключения через Интернет.</value> - - Label - true - - Left - - - - ВидПодключенияИнтернетКонтекстноеМеню - 104 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Подключение к другой программе через Интернет - - - Интернет - - - Vertical - - - - ВидПодключенияПассивныйРежим - 112 - - <key>ru</key> - <value>Вид подключения</value> - - true - true - - true - - - ВидПодключения - - None - ShowBottom - - OnChange - ВидПодключенияПассивныйРежимПриИзменении - - - ВидПодключенияПассивныйРежимРасширеннаяПодсказка - 114 - - <key>ru</key> - <value>При таком варианте подключения эта программа отправляет и принимает данные через Интернет -только по запросу от программы-корреспондента.</value> - - Label - true - - Left - - - - ВидПодключенияПассивныйРежимКонтекстноеМеню - 113 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Подключение выполняется из другой программы через Интернет (пассивный режим) - - - ПассивныйРежим - - - Vertical - - - - ГруппаФайлНастройкиПассивныйРежим - 723 - - Декорация2 - 752 - true - true - - true - - - Декорация2РасширеннаяПодсказка - 754 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 753 - true - - 1 - true - 1 - true - - - - Группа1 - 750 - - ИмяФайлаНастроекXDTOКорреспондента - 709 - - <key>ru</key> - <value>Файл с настройками EnterpriseData</value> - - true - true - - true - - - ИмяФайлаНастроекXDTOКорреспондента - - - ИмяФайлаНастроекXDTOКорреспондентаРасширеннаяПодсказка - 711 - Label - true - true - - Left - - - - ИмяФайлаНастроекXDTOКорреспондентаКонтекстноеМеню - 710 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ИмяФайлаНастроекXDTOКорреспондентаНачалоВыбора - - true - true - true - true - true - true - true - Normal - - - - ОписаниеМастерИзФайла1 - 683 - - <key>ru</key> - <value>Для продолжения настройки требуется конфигурационный файл с настройками синхронизации данных -через EnterpriseData из программы-корреспондента.</value> - - true - true - - true - - - ОписаниеМастерИзФайла1РасширеннаяПодсказка - 685 - Label - true - true - - Left - - - - ОписаниеМастерИзФайла1КонтекстноеМеню - 684 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Группа</value> - - - Группа1РасширеннаяПодсказка - 751 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Файл настройки пассивный режим</value> - - - ГруппаФайлНастройкиПассивныйРежимРасширеннаяПодсказка - 724 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - - ВидПодключенияОбычныеКаналыСвязи - 109 - - <key>ru</key> - <value>Вид подключения</value> - - true - true - - true - - - ВидПодключения - - None - ShowBottom - - OnChange - ВидПодключенияОбычныеКаналыСвязиПриИзменении - - - ВидПодключенияОбычныеКаналыСвязиРасширеннаяПодсказка - 111 - - <key>ru</key> - <value>В случае если к другой программе нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), -рекомендуется использовать другие каналы связи: сетевой каталог, FTP-ресурс или электронную почту. При этом программы, -между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. -Такой вариант подходит не только для синхронизации данных с программами, расположенными в других сетях (офисах), -но и для программ в одной сети.</value> - - Label - true - - Left - - - - ВидПодключенияОбычныеКаналыСвязиКонтекстноеМеню - 110 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Синхронизация данных через файл, без подключения к другой программе - - - ОбычныеКаналыСвязи - - - Vertical - - - - ГруппаФайлНастройкиОбычныеКаналыСвязи - 743 - - Декорация1 - 747 - true - true - - true - - - Декорация1РасширеннаяПодсказка - 749 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 748 - true - - 1 - true - 1 - true - - - - Группа2 - 745 - - Группа3 - 669 - - ЗагрузитьПараметрыПодключенияИзФайла - 666 - - <key>ru</key> - <value>Загрузить параметры подключения из файла</value> - - true - true - - true - - - ЗагрузитьПараметрыПодключенияИзФайла - - Right - - OnChange - ЗагрузитьНастройкиПодключенияИзФайлаПриИзменении - - - ЗагрузитьПараметрыПодключенияИзФайлаРасширеннаяПодсказка - 668 - Label - true - true - - Left - - - - ЗагрузитьПараметрыПодключенияИзФайлаКонтекстноеМеню - 667 - true - - CheckBoxField - Enter - true - Left - true - - - - ИмяФайлаНастроекПодключенияДляЗагрузки - 617 - - <key>ru</key> - <value>Имя файла настроек подключения для загрузки</value> - - true - true - - true - - - ИмяФайлаНастроекПодключенияДляЗагрузки - - None - Button - - ИмяФайлаНастроекПодключенияДляЗагрузкиРасширеннаяПодсказка - 619 - - <key>ru</key> - <value>Если файл параметров подключения утерян, то для формирования нового файла необходимо: - - перейти в первую программу - - перейти в форму синхронизации данных - - выбрать требуемую синхронизацию данных и открыть ее параметры - - в командной панели формы следует выбрать пункт меню: "Все действия" –> "Получить настройки синхронизации данных для другой программы..."</value> - - Label - true - true - - Left - - - - ИмяФайлаНастроекПодключенияДляЗагрузкиКонтекстноеМеню - 618 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ИмяФайлаНастроекПодключенияДляЗагрузкиНачалоВыбора - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Файл настройки обычные каналы связи</value> - - - Группа3РасширеннаяПодсказка - 670 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - - ОписаниеМастерИзФайла - 663 - - <key>ru</key> - <value>Можно загрузить параметры подключения из файла, созданного в программе-корреспонденте -при настройке синхронизации данных.</value> - - true - true - - true - - - ОписаниеМастерИзФайлаРасширеннаяПодсказка - 665 - Label - true - true - - Left - - - - ОписаниеМастерИзФайлаКонтекстноеМеню - 664 - true - - Label - true - - Style.ПоясняющийТекст - - - Left - Top - - - true - true - - true - - - <key>ru</key> - <value>Группа</value> - - - Группа2РасширеннаяПодсказка - 746 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Файл настройки обычные каналы связи</value> - - - ГруппаФайлНастройкиОбычныеКаналыСвязиРасширеннаяПодсказка - 744 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Виды подключения</value> - - - ГруппаВидыПодключенияРасширеннаяПодсказка - 2 - Label - true - true - - Left - - - UsualGroup - - Vertical - Button - WeakSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница виды подключения</value> - - - СтраницаВидыПодключенияРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель способы настройки подключения</value> - - - ПанельСпособыНастройкиПодключенияРасширеннаяПодсказка - 735 - Label - true - true - - Left - - - Pages - - Auto - -
          - true - true - - true - - - <key>ru</key> - <value>Настройка подключения</value> - - - ГруппаСпособНастройкиПодключенияРасширеннаяПодсказка - 739 - Label - true - true - - Left - - - UsualGroup - - Vertical - WeakSeparation - true - true - auto - Auto - Auto - -
          - true - true - - true - - - <key>ru</key> - <value>Страница способ настройки подключения</value> - - - СтраницаСпособНастройкиПодключенияРасширеннаяПодсказка - 733 - Label - true - true - - Left - - - Page - - Vertical - auto - false - -
          - - СтраницаПараметрыПодключенияИнтернет - 145 - - ГруппаПараметрыПодключенияИнтернет - 410 - - Декорация14 - 449 - true - true - - true - - - Декорация14РасширеннаяПодсказка - 451 - Label - true - true - - Left - - - - Декорация14КонтекстноеМеню - 450 - true - - Label - true - true - - Left - - - - ГруппаПараметрыИнтернет - 447 - - ИнтернетВебАдрес - 184 - - <key>ru</key> - <value>Адрес программы</value> - - true - true - - true - - - ИнтернетВебАдрес - - ShowBottom - - ИнтернетВебАдресРасширеннаяПодсказка - 186 - - <key>ru</key> - <value>Ссылка для входа в программу (как в веб-браузере). -Например, https://site.domain/database/123 -</value> - - Label - true - - Left - - - - ИнтернетВебАдресКонтекстноеМеню - 185 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ИнтернетИмяПользователя - 187 - - <key>ru</key> - <value>Пользователь</value> - - true - true - - true - - - ИнтернетИмяПользователя - - - ИнтернетИмяПользователяРасширеннаяПодсказка - 189 - Label - true - true - - Left - - - - ИнтернетИмяПользователяКонтекстноеМеню - 188 - true - - InputField - Enter - true - Left - true - - 20 - true - false - true - true - true - true - Normal - - - - ГруппаИнтернетПароль - 196 - - ИнтернетПароль - 190 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ИнтернетПароль - - - ИнтернетПарольРасширеннаяПодсказка - 192 - Label - true - true - - Left - - - - ИнтернетПарольКонтекстноеМеню - 191 - true - - InputField - Enter - true - Left - true - - 20 - true - false - true - true - true - true - true - Normal - - - - ИнтернетЗапомнитьПароль - 193 - - <key>ru</key> - <value>Запомнить пароль</value> - - true - true - - true - - - ИнтернетЗапомнитьПароль - - Right - - ИнтернетЗапомнитьПарольРасширеннаяПодсказка - 195 - Label - true - true - - Left - - - - ИнтернетЗапомнитьПарольКонтекстноеМеню - 194 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Интернет пароль</value> - - - ГруппаИнтернетПарольРасширеннаяПодсказка - 197 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - - ПараметрыДоступаВИнтернет1 - 353 - - <key>ru</key> - <value>Параметры доступа в интернет</value> - - true - true - - true - - - ПараметрыДоступаВИнтернет1РасширеннаяПодсказка - 354 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Параметры интернет</value> - - - ГруппаПараметрыИнтернетРасширеннаяПодсказка - 448 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры подключения через Интернет</value> - - - ГруппаПараметрыПодключенияИнтернетРасширеннаяПодсказка - 411 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница параметры подключения интернет</value> - - - СтраницаПараметрыПодключенияИнтернетРасширеннаяПодсказка - 146 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПараметрыПодключенияВнешнееСоединение - 143 - - ГруппаПараметрыПодключенияВнешнееСоединение - 147 - - Декорация15 - 454 - true - true - - true - - - Декорация15РасширеннаяПодсказка - 456 - Label - true - true - - Left - - - - Декорация15КонтекстноеМеню - 455 - true - - Label - true - true - - Left - - - - ГруппаПараметрыВнешнееСоединение - 452 - - ГруппаПараметрыРасположенияВнешнееСоединение - 149 - - Декорация16 - 459 - true - true - - true - - - Декорация16РасширеннаяПодсказка - 461 - Label - true - true - - Left - - - - Декорация16КонтекстноеМеню - 460 - true - - Label - true - true - - Left - - - - ГруппаПараметрыРасположение - 457 - - ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловый - 157 - - <key>ru</key> - <value>Вариант работы информационной базы</value> - - true - true - - true - - - ВнешнееСоединениеВариантРаботыИнформационнойБазы - - None - - OnChange - ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйПриИзменении - - - ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - - ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйКонтекстноеМеню - 158 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - На данном компьютере или на компьютере в локальной сети - - - Файловый - - - Vertical - - - - ВнешнееСоединениеКаталогИнформационнойБазы - 163 - - <key>ru</key> - <value>Каталог</value> - - true - true - - true - - - ВнешнееСоединениеКаталогИнформационнойБазы - - - ВнешнееСоединениеКаталогИнформационнойБазыРасширеннаяПодсказка - 165 - Label - true - true - - Left - - - - ВнешнееСоединениеКаталогИнформационнойБазыКонтекстноеМеню - 164 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ВнешнееСоединениеКаталогИнформационнойБазыНачалоВыбора - - true - true - true - true - true - true - true - true - Normal - - - - ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверный - 160 - - <key>ru</key> - <value>Вариант работы информационной базы</value> - - true - true - - true - - - ВнешнееСоединениеВариантРаботыИнформационнойБазы - - None - - OnChange - ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйПриИзменении - - - ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйРасширеннаяПодсказка - 162 - Label - true - true - - Left - - - - ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйКонтекстноеМеню - 161 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - На сервере 1С:Предприятия - - - КлиентСерверный - - - Vertical - - - - ВнешнееСоединениеКластерСерверов - 166 - - <key>ru</key> - <value>Сервер</value> - - true - true - - true - - - ВнешнееСоединениеКластерСерверов - - - ВнешнееСоединениеКластерСерверовРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - - ВнешнееСоединениеКластерСерверовКонтекстноеМеню - 167 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ВнешнееСоединениеИмяИнформационнойБазы - 169 - - <key>ru</key> - <value>Имя базы</value> - - true - true - - true - - - ВнешнееСоединениеИмяИнформационнойБазы - - - ВнешнееСоединениеИмяИнформационнойБазыРасширеннаяПодсказка - 171 - Label - true - true - - Left - - - - ВнешнееСоединениеИмяИнформационнойБазыКонтекстноеМеню - 170 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Параметры расположение</value> - - - ГруппаПараметрыРасположениеРасширеннаяПодсказка - 458 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Расположение программы</value> - - - ГруппаПараметрыРасположенияВнешнееСоединениеРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Button - true - true - auto - Auto - Auto - - - - ГруппаПараметрыАутентификацииВнешнееСоединение - 151 - - Декорация17 - 464 - true - true - - true - - - Декорация17РасширеннаяПодсказка - 466 - Label - true - true - - Left - - - - Декорация17КонтекстноеМеню - 465 - true - - Label - true - true - - Left - - - - ГруппаПараметрыАутентификация - 462 - - ВнешнееСоединениеВидАутентификацииОперационнаяСистема - 175 - - <key>ru</key> - <value>Вид аутентификации</value> - - true - true - - true - - - ВнешнееСоединениеВидАутентификации - - None - - OnChange - ВнешнееСоединениеВидАутентификацииОперационнаяСистемаПриИзменении - - - ВнешнееСоединениеВидАутентификацииОперационнаяСистемаРасширеннаяПодсказка - 177 - Label - true - true - - Left - - - - ВнешнееСоединениеВидАутентификацииОперационнаяСистемаКонтекстноеМеню - 176 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Использовать учетную запись операционной системы - - - 0 - - - Vertical - - - - ВнешнееСоединениеВидАутентификации1СПредприятие - 172 - - <key>ru</key> - <value>Вид аутентификации</value> - - true - true - - true - - - ВнешнееСоединениеВидАутентификации - - None - - OnChange - ВнешнееСоединениеВидАутентификации1СПредприятиеПриИзменении - - - ВнешнееСоединениеВидАутентификации1СПредприятиеРасширеннаяПодсказка - 174 - Label - true - true - - Left - - - - ВнешнееСоединениеВидАутентификации1СПредприятиеКонтекстноеМеню - 173 - true - - RadioButtonField - Enter - true - Left - true - - - - ru - Использовать указанные имя пользователя и пароль - - - 1 - - - Vertical - - - - ВнешнееСоединениеИмяПользователя - 178 - - <key>ru</key> - <value>Пользователь</value> - - true - true - - true - - - ВнешнееСоединениеИмяПользователя - - - ВнешнееСоединениеИмяПользователяРасширеннаяПодсказка - 180 - Label - true - true - - Left - - - - ВнешнееСоединениеИмяПользователяКонтекстноеМеню - 179 - true - - InputField - Enter - true - Left - true - - 20 - true - false - true - true - true - true - Normal - - - - ВнешнееСоединениеПароль - 181 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ВнешнееСоединениеПароль - - - ВнешнееСоединениеПарольРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - - ВнешнееСоединениеПарольКонтекстноеМеню - 182 - true - - InputField - Enter - true - Left - true - - 20 - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Параметры аутентификация</value> - - - ГруппаПараметрыАутентификацияРасширеннаяПодсказка - 463 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры входа в программу</value> - - - ГруппаПараметрыАутентификацииВнешнееСоединениеРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - auto - DontUse - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры внешнее соединение</value> - - - ГруппаПараметрыВнешнееСоединениеРасширеннаяПодсказка - 453 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры прямого подключения</value> - - - ГруппаПараметрыПодключенияВнешнееСоединениеРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница параметры подключения внешнее соединение</value> - - - СтраницаПараметрыПодключенияВнешнееСоединениеРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПараметрыПодключенияОбычныеКаналыСвязи - 198 - - ГруппаСинхронизацияЧерезКаталог - 237 - - ОбычныеКаналыСвязиFILEИспользование - 268 - - <key>ru</key> - <value>Использовать локальный или сетевой каталог для синхронизации данных</value> - - true - true - - true - - - ОбычныеКаналыСвязиFILEИспользование - - Right - - OnChange - ОбычныеКаналыСвязиFILEИспользованиеПриИзменении - - - ОбычныеКаналыСвязиFILEИспользованиеРасширеннаяПодсказка - 270 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFILEИспользованиеКонтекстноеМеню - 269 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаОбычныеКаналыСвязиFILEИспользование - 686 - - ОбычныеКаналыСвязиFILEКаталог - 211 - - <key>ru</key> - <value>Каталог</value> - - true - true - - true - - - ОбычныеКаналыСвязиFILEКаталог - - - ОбычныеКаналыСвязиFILEКаталогРасширеннаяПодсказка - 213 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFILEКаталогКонтекстноеМеню - 212 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ОбычныеКаналыСвязиFILEКаталогНачалоВыбора - - true - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Обычные каналы связи FILE использование</value> - - - ГруппаОбычныеКаналыСвязиFILEИспользованиеРасширеннаяПодсказка - 687 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация данных через локальный или сетевой каталог</value> - - - ГруппаСинхронизацияЧерезКаталогРасширеннаяПодсказка - 238 - Label - true - true - - Left - - - UsualGroup - - Vertical - Collapsible - Button - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаСинхронизацияЧерезFTP - 239 - - ОбычныеКаналыСвязиFTPИспользование - 271 - - <key>ru</key> - <value>Использовать каталог на FTP-сервере для синхронизации данных</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPИспользование - - Right - - OnChange - ОбычныеКаналыСвязиFTPИспользованиеПриИзменении - - - ОбычныеКаналыСвязиFTPИспользованиеРасширеннаяПодсказка - 273 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPИспользованиеКонтекстноеМеню - 272 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаОбычныеКаналыСвязиFTPИспользование - 688 - - ГруппаСинхронизацияЧерезFTPКаталог - 252 - - ОбычныеКаналыСвязиFTPКаталог - 246 - - <key>ru</key> - <value>Адрес каталога</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPПуть - - - ОбычныеКаналыСвязиFTPКаталогРасширеннаяПодсказка - 248 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPКаталогКонтекстноеМеню - 247 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ОбычныеКаналыСвязиFTPПорт - 254 - - <key>ru</key> - <value>Порт</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPПорт - - - ОбычныеКаналыСвязиFTPПортРасширеннаяПодсказка - 256 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPПортКонтекстноеМеню - 255 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация через FTP каталог</value> - - - ГруппаСинхронизацияЧерезFTPКаталогРасширеннаяПодсказка - 253 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - - СинхронизацияЧерезFTPАутентификация - 285 - - ОбычныеКаналыСвязиFTPПользователь - 257 - - <key>ru</key> - <value>Пользователь</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPПользователь - - - ОбычныеКаналыСвязиFTPПользовательРасширеннаяПодсказка - 259 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPПользовательКонтекстноеМеню - 258 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - Normal - - - - ОбычныеКаналыСвязиFTPПароль - 260 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPПароль - - - ОбычныеКаналыСвязиFTPПарольРасширеннаяПодсказка - 262 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPПарольКонтекстноеМеню - 261 - true - - InputField - Enter - true - Left - true - - 20 - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация через FTP аутентификация</value> - - - СинхронизацияЧерезFTPАутентификацияРасширеннаяПодсказка - 286 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - - ГруппаОграничениеРазмераФайлаFTP - 342 - - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла - 344 - - <key>ru</key> - <value>Ограничение размера файла</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла - - Right - - OnChange - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаПриИзменении - - - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаРасширеннаяПодсказка - 346 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаКонтекстноеМеню - 345 - true - - CheckBoxField - Enter - true - Left - true - - - - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла - 347 - - <key>ru</key> - <value>Максимальный допустимый размер файла</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла - - None - - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайлаРасширеннаяПодсказка - 349 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайлаКонтекстноеМеню - 348 - true - - InputField - true - Enter - true - Left - true - - 9 - true - true - true - true - true - true - true - Normal - - - - Декорация5 - 350 - - <key>ru</key> - <value>КБ</value> - - true - true - - true - - - Декорация5РасширеннаяПодсказка - 352 - Label - true - true - - Left - - - - Декорация5КонтекстноеМеню - 351 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Ограничение размера файла FTP</value> - - - ГруппаОграничениеРазмераФайлаFTPРасширеннаяПодсказка - 343 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - - ОбычныеКаналыСвязиFTPПассивныйРежим - 334 - - <key>ru</key> - <value>Пассивный режим</value> - - true - true - - true - - - ОбычныеКаналыСвязиFTPПассивныйРежим - - Right - - ОбычныеКаналыСвязиFTPПассивныйРежимРасширеннаяПодсказка - 336 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиFTPПассивныйРежимКонтекстноеМеню - 335 - true - - CheckBoxField - Enter - true - Left - true - - - - ПараметрыДоступаВИнтернет - 337 - - <key>ru</key> - <value>Параметры доступа в интернет</value> - - true - true - - true - - - ПараметрыДоступаВИнтернетРасширеннаяПодсказка - 338 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Обычные каналы связи FTP использование</value> - - - ГруппаОбычныеКаналыСвязиFTPИспользованиеРасширеннаяПодсказка - 689 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация данных через каталог на FTP-сервере</value> - - - ГруппаСинхронизацияЧерезFTPРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - UsualGroup - - Vertical - Collapsible - true - Button - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаСинхронизацияЧерезEMAIL - 241 - - ОбычныеКаналыСвязиEMAILИспользование - 279 - - <key>ru</key> - <value>Использовать электронную почту для синхронизации данных</value> - - true - true - - true - - - ОбычныеКаналыСвязиEMAILИспользование - - Right - - OnChange - ОбычныеКаналыСвязиEMAILИспользованиеПриИзменении - - - ОбычныеКаналыСвязиEMAILИспользованиеРасширеннаяПодсказка - 281 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиEMAILИспользованиеКонтекстноеМеню - 280 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаОбычныеКаналыСвязиEMAILИспользование - 693 - - ОбычныеКаналыСвязиEMAILУчетнаяЗапись - 282 - - <key>ru</key> - <value>Учетная запись</value> - - true - true - - true - - - ОбычныеКаналыСвязиEMAILУчетнаяЗапись - - - ОбычныеКаналыСвязиEMAILУчетнаяЗаписьРасширеннаяПодсказка - 284 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиEMAILУчетнаяЗаписьКонтекстноеМеню - 283 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - ГруппаОграничениеРазмераВложенияEMAIL - 304 - - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения - 306 - - <key>ru</key> - <value>Ограничение размера вложения</value> - - true - true - - true - - - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения - - Right - - OnChange - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияПриИзменении - - - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияРасширеннаяПодсказка - 308 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияКонтекстноеМеню - 307 - true - - CheckBoxField - Enter - true - Left - true - - - - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения - 309 - - <key>ru</key> - <value>Максимальный допустимый размер вложения</value> - - true - true - - true - - - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения - - None - - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложенияРасширеннаяПодсказка - 311 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложенияКонтекстноеМеню - 310 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - Декорация4 - 339 - - <key>ru</key> - <value>КБ</value> - - true - true - - true - - - Декорация4РасширеннаяПодсказка - 341 - Label - true - true - - Left - - - - Декорация4КонтекстноеМеню - 340 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Ограничение размера вложения EMAIL</value> - - - ГруппаОграничениеРазмераВложенияEMAILРасширеннаяПодсказка - 305 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Обычные каналы связи EMAIL использование</value> - - - ГруппаОбычныеКаналыСвязиEMAILИспользованиеРасширеннаяПодсказка - 694 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Синхронизация данных через электронную почту</value> - - - ГруппаСинхронизацияЧерезEMAILРасширеннаяПодсказка - 242 - Label - true - true - - Left - - - UsualGroup - - Vertical - Collapsible - true - Button - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаДополнительныеПараметрыПередачиДанных - 629 - - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов - 243 - - <key>ru</key> - <value>Транслитерировать имена файлов обмена</value> - - true - true - - true - - - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов - - Right - Button - - ОбычныеКаналыСвязиТранслитерироватьИменаФайловРасширеннаяПодсказка - 245 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - ОбычныеКаналыСвязиТранслитерироватьИменаФайловКонтекстноеМеню - 244 - true - - CheckBoxField - Enter - true - Left - true - - - - ОбычныеКаналыСвязиАрхивироватьФайлы - 214 - - <key>ru</key> - <value>Архивировать файлы обмена</value> - - true - true - - true - - - ОбычныеКаналыСвязиАрхивироватьФайлы - - Right - - OnChange - ОбычныеКаналыСвязиАрхивироватьФайлыПриИзменении - - - ОбычныеКаналыСвязиАрхивироватьФайлыРасширеннаяПодсказка - 216 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиАрхивироватьФайлыКонтекстноеМеню - 215 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаОбычныеКаналыСвязиПарольАрхива - 266 - - Декорация13 - 690 - true - true - - true - - - Декорация13РасширеннаяПодсказка - 692 - Label - true - true - - Left - - - - Декорация13КонтекстноеМеню - 691 - true - - Label - true - true - - Left - - - - ОбычныеКаналыСвязиИспользоватьПарольАрхива - 263 - - <key>ru</key> - <value>Пароль архива</value> - - true - true - - true - - - ОбычныеКаналыСвязиИспользоватьПарольДляАрхива - - Right - - OnChange - ОбычныеКаналыСвязиИспользоватьПарольАрхиваПриИзменении - - - ОбычныеКаналыСвязиИспользоватьПарольАрхиваРасширеннаяПодсказка - 265 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиИспользоватьПарольАрхиваКонтекстноеМеню - 264 - true - - CheckBoxField - Enter - true - Left - true - - - - ОбычныеКаналыСвязиПарольАрхива - 217 - - <key>ru</key> - <value>Пароль архива</value> - - true - true - - true - - - ОбычныеКаналыСвязиПарольАрхива - - None - - ОбычныеКаналыСвязиПарольАрхиваРасширеннаяПодсказка - 219 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиПарольАрхиваКонтекстноеМеню - 218 - true - - InputField - true - Enter - true - Left - true - - 20 - true - false - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Обычные каналы связи пароль архива</value> - - - ГруппаОбычныеКаналыСвязиПарольАрхиваРасширеннаяПодсказка - 267 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Дополнительные настройки</value> - - - ГруппаДополнительныеПараметрыПередачиДанныхРасширеннаяПодсказка - 630 - Label - true - true - - Left - - - UsualGroup - - Vertical - Collapsible - Button - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница параметры подключения обычные каналы связи</value> - - - СтраницаПараметрыПодключенияОбычныеКаналыСвязиРасширеннаяПодсказка - 199 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПроверкаПодключения - 355 - - ПанельПроверкаПодключения - 587 - - СтраницаПроверкаПодключенияOnline - 589 - - ГруппаПроверкаПодключенияOnline - 359 - - ДекорацияПроверкаПодключенияOnlineОжиданиеКартинка - 373 - - <key>ru</key> - <value>Декорация проверка подключения online ожидание картинка</value> - - true - true - - true - - - ДекорацияПроверкаПодключенияOnlineОжиданиеКартинкаРасширеннаяПодсказка - 375 - Label - true - true - - Left - - - - ДекорацияПроверкаПодключенияOnlineОжиданиеКартинкаКонтекстноеМеню - 374 - true - - true - true - - - CommonPicture.ДлительнаяОперация48 - - - - - ДекорацияПроверкаПодключенияOnlineОжиданиеНадпись - 376 - - <key>ru</key> - <value>Выполняется подключение к программе-корреспонденту. -Пожалуйста, подождите...</value> - - true - true - - true - - - ДекорацияПроверкаПодключенияOnlineОжиданиеНадписьРасширеннаяПодсказка - 378 - Label - true - true - - Left - - - - ДекорацияПроверкаПодключенияOnlineОжиданиеНадписьКонтекстноеМеню - 377 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Проверка параметров подключения</value> - - - ГруппаПроверкаПодключенияOnlineРасширеннаяПодсказка - 360 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница проверка подключения online</value> - - - СтраницаПроверкаПодключенияOnlineРасширеннаяПодсказка - 590 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаПроверкаПодключенияOffline - 591 - - ГруппаПроверкаПодключенияOffline - 593 - - ДекорацияПроверкаПодключенияOfflineОжиданиеКартинка - 623 - - <key>ru</key> - <value>Декорация проверка подключения offline ожидание картинка</value> - - true - true - - true - - - ДекорацияПроверкаПодключенияOfflineОжиданиеКартинкаРасширеннаяПодсказка - 625 - Label - true - true - - Left - - - - ДекорацияПроверкаПодключенияOfflineОжиданиеКартинкаКонтекстноеМеню - 624 - true - - true - true - - - CommonPicture.ДлительнаяОперация48 - - - - - ДекорацияПроверкаПодключенияOfflineОжиданиеНадпись - 626 - - <key>ru</key> - <value>Выполняется проверка параметров передачи данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - ДекорацияПроверкаПодключенияOfflineОжиданиеНадписьРасширеннаяПодсказка - 628 - Label - true - true - - Left - - - - ДекорацияПроверкаПодключенияOfflineОжиданиеНадписьКонтекстноеМеню - 627 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Проверка параметров передачи данных</value> - - - ГруппаПроверкаПодключенияOfflineРасширеннаяПодсказка - 594 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница проверка подключения offline</value> - - - СтраницаПроверкаПодключенияOfflineРасширеннаяПодсказка - 592 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель проверка подключения</value> - - - ПанельПроверкаПодключенияРасширеннаяПодсказка - 588 - Label - true - true - - Left - - - Pages - - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница проверка подключения</value> - - - СтраницаПроверкаПодключенияРасширеннаяПодсказка - 356 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаОбщиеНастройкиСинхронизации - 474 - - ГруппаОбщиеНастройкиСинхронизации - 476 - - ГруппаНастройкиПрограммыПредставление - 514 - - Наименование - 482 - - <key>ru</key> - <value>Наименование</value> - - true - true - - true - - - Наименование - - Top - - НаименованиеРасширеннаяПодсказка - 484 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 483 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Префикс - 485 - - <key>ru</key> - <value>Префикс</value> - - true - true - - true - - - Префикс - - Top - - ПрефиксРасширеннаяПодсказка - 487 - Label - true - true - - Left - - - - ПрефиксКонтекстноеМеню - 486 - true - - InputField - true - Enter - true - Left - true - - 5 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Представление этой программы</value> - - - ГруппаНастройкиПрограммыПредставлениеРасширеннаяПодсказка - 515 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Button - true - true - auto - Auto - Auto - - - - ГруппаНастройкиПрограммыКорреспондентаПредставление - 516 - - НаименованиеКорреспондента - 488 - - <key>ru</key> - <value>Наименование</value> - - true - true - - true - - - НаименованиеКорреспондента - - Top - - НаименованиеКорреспондентаРасширеннаяПодсказка - 490 - Label - true - true - - Left - - - - НаименованиеКорреспондентаКонтекстноеМеню - 489 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПрефиксКорреспондента - 491 - - <key>ru</key> - <value>Префикс</value> - - true - true - - true - - - ПрефиксКорреспондента - - Top - - ПрефиксКорреспондентаРасширеннаяПодсказка - 493 - Label - true - true - - Left - - - - ПрефиксКорреспондентаКонтекстноеМеню - 492 - true - - InputField - true - Enter - true - Left - true - - 5 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Представление программы-корреспондента</value> - - - ГруппаНастройкиПрограммыКорреспондентаПредставлениеРасширеннаяПодсказка - 517 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Button - true - true - auto - Auto - Auto - - - - ГруппаФайлНастроекПодключенияДляКорреспондента - 631 - - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию - 636 - - <key>ru</key> - <value>Вид подключения по умолчанию</value> - - true - true - - true - - - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию - - Top - - ОбычныеКаналыСвязиВидТранспортаПоУмолчаниюРасширеннаяПодсказка - 638 - Label - true - true - - Left - - - - ОбычныеКаналыСвязиВидТранспортаПоУмолчаниюКонтекстноеМеню - 637 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - true - Normal - - - - ИмяФайлаНастроекПодключенияДляВыгрузки - 633 - - <key>ru</key> - <value>Имя файла настроек подключения</value> - - true - true - - true - - - ИмяФайлаНастроекПодключенияДляВыгрузки - - Top - - ИмяФайлаНастроекПодключенияДляВыгрузкиРасширеннаяПодсказка - 635 - Label - true - true - - Left - - - - ИмяФайлаНастроекПодключенияДляВыгрузкиКонтекстноеМеню - 634 - true - - InputField - true - Enter - true - Left - true - - - StartChoice - ИмяФайлаНастроекПодключенияДляВыгрузкиНачалоВыбора - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Прочее</value> - - - ГруппаФайлНастроекПодключенияДляКорреспондентаРасширеннаяПодсказка - 632 - Label - true - true - - Left - - - UsualGroup - - Vertical - Button - true - true - auto - Auto - Auto - - - - ГруппаДублированиеНастроекСинхронизации - 806 - - Группа4 - 819 - - Декорация20 - 808 - true - true - - true - - - Декорация20РасширеннаяПодсказка - 810 - Label - true - true - - Left - - - - Декорация20КонтекстноеМеню - 809 - true - - true - true - - - CommonPicture.Предупреждение32 - - AsFileRef - - - - Группа5 - 821 - - Декорация3 - 780 - - <key>ru</key> - <value>Уже существует настроенная синхронизация между информационными базами.</value> - - true - true - - true - - - Декорация3РасширеннаяПодсказка - 782 - Label - true - true - - Left - - - - Декорация3КонтекстноеМеню - 781 - true - - Label - 60 - true - true - - Left - - - - ИсправитьДублированиеНастроекСинхронизации - 823 - - <key>ru</key> - <value>Исправить</value> - - true - true - - true - - - ИсправитьДублированиеНастроекСинхронизации - - Right - - OnChange - ИсправитьДублированиеНастроекСинхронизацииПриИзменении - - - ИсправитьДублированиеНастроекСинхронизацииРасширеннаяПодсказка - 825 - Label - true - true - - Left - - - - ИсправитьДублированиеНастроекСинхронизацииКонтекстноеМеню - 824 - true - - CheckBoxField - Enter - true - Left - true - - - - Группа6 - 826 - - Декорация11 - 828 - true - true - - true - - - Декорация11РасширеннаяПодсказка - 830 - Label - true - true - - Left - - - - Декорация11КонтекстноеМеню - 829 - true - - 1 - true - 1 - true - - AsFileRef - - - - ДекорацияПояснениеКИсправить - 831 - - <key>ru</key> - <value>Пояснение</value> - - true - true - - true - - - ДекорацияПояснениеКИсправитьРасширеннаяПодсказка - 833 - Label - true - true - - Left - - - - ДекорацияПояснениеКИсправитьКонтекстноеМеню - 832 - true - - Label - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа</value> - - - Группа6РасширеннаяПодсказка - 827 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - Декорация18 - 798 - - <key>ru</key> - <value><color #FF0000>Внимание! -</> -Данная операция необратима и предназначена только для устранения ошибки синхронизации, связанной с дублированием настроек обмена в информационных базах, которые были получены путем копирования. - -Не рекомендуется применять для работающих синхронизаций.</value> - - true - true - - true - - - Декорация18РасширеннаяПодсказка - 800 - Label - true - true - - Left - - - - Декорация18КонтекстноеМеню - 799 - true - - true - Label - 70 - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа</value> - - - Группа5РасширеннаяПодсказка - 822 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа</value> - - - Группа4РасширеннаяПодсказка - 820 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - WeakSeparation - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Дублирование настроек синхронизации</value> - - - ГруппаДублированиеНастроекСинхронизацииРасширеннаяПодсказка - 807 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - NormalSeparation - true - true - auto - Auto - Auto - - - - ГруппаВосстановлениеНастроекОбмена - 856 - - Группа7 - 858 - - Декорация21 - 860 - true - true - - true - - - Декорация21РасширеннаяПодсказка - 862 - Label - true - true - - Left - - - - Декорация21КонтекстноеМеню - 861 - true - - true - true - - - CommonPicture.Предупреждение32 - - AsFileRef - - - - Декорация12 - 863 - - <key>ru</key> - <value><colorstyle -16>Внимание!</> -Продолжение настройки приведет к изменению кода узла обмена для этой информационной базы. Если в базе уже существуют настроенные обмены, то это может привезти к их неработоспособности.</value> - - true - true - - true - - - Декорация12РасширеннаяПодсказка - 865 - Label - true - true - - Left - - - - Декорация12КонтекстноеМеню - 864 - true - - true - Label - 70 - true - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа</value> - - - Группа7РасширеннаяПодсказка - 859 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Восстановление настроек</value> - - - ГруппаВосстановлениеНастроекОбменаРасширеннаяПодсказка - 857 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Параметры синхронизации данных</value> - - - ГруппаОбщиеНастройкиСинхронизацииРасширеннаяПодсказка - 477 - Label - true - true - - Left - - - UsualGroup - - Vertical - Button - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница общие настройки синхронизации</value> - - - СтраницаОбщиеНастройкиСинхронизацииРасширеннаяПодсказка - 475 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаСохранениеНастроекПодключения - 400 - - ГруппаСохранениеНастроекПодключения - 402 - - Декорация8 - 404 - true - true - - true - - - Декорация8РасширеннаяПодсказка - 406 - Label - true - true - - Left - - - - Декорация8КонтекстноеМеню - 405 - true - - true - true - - - CommonPicture.ДлительнаяОперация48 - - - - - Декорация9 - 407 - - <key>ru</key> - <value>Выполняется сохранение настроек подключения. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация9РасширеннаяПодсказка - 409 - Label - true - true - - Left - - - - Декорация9КонтекстноеМеню - 408 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Сохранение настроек</value> - - - ГруппаСохранениеНастроекПодключенияРасширеннаяПодсказка - 403 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница сохранение настроек подключения</value> - - - СтраницаСохранениеНастроекПодключенияРасширеннаяПодсказка - 401 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаОкончание - 357 - - ГруппаЗавершениеНастройкиПодключения - 361 - - Группа27 - 577 - - Декорация6 - 397 - true - true - - true - - - Декорация6РасширеннаяПодсказка - 399 - Label - true - true - - Left - - - - Декорация6КонтекстноеМеню - 398 - true - - true - true - - - CommonPicture.Успешно32 - - - - - Декорация7 - 366 - - <key>ru</key> - <value>Настройки подключения в этой программе успешно сохранены.</value> - - true - true - - true - - - Декорация7РасширеннаяПодсказка - 368 - Label - true - true - - Left - - - - Декорация7КонтекстноеМеню - 367 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Параметры синхронизации данных в этой программе</value> - - - Группа27РасширеннаяПодсказка - 578 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Center - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Настройка подключения завершена</value> - - - ГруппаЗавершениеНастройкиПодключенияРасширеннаяПодсказка - 362 - Label - true - true - - Left - - - UsualGroup - - Vertical - WeakSeparation - true - true - auto - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Страница окончание</value> - - - СтраницаОкончаниеРасширеннаяПодсказка - 358 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель основная</value> - - - ПанельОсновнаяРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - Pages - - Auto - -
          - - ПанельНавигации - 30 - - СтраницаНавигацияНачало - 34 - - КоманднаяПанельНавигацияНачалоСлева - 40 - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация начало слева</value> - - - КоманднаяПанельНавигацияНачалоСлеваРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельНавигацияНачалоСправа - 42 - - КомандаНавигацияНачалоДалее - 44 - - <key>ru</key> - <value>Далее ></value> - - true - true - - true - - - КомандаНавигацияНачалоДалееРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Auto - true - true - true - UserCmds - Auto - - - КомандаНавигацияНачалоОтмена - 46 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - - КомандаНавигацияНачалоОтменаРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация начало справа</value> - - - КоманднаяПанельНавигацияНачалоСправаРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигация начало</value> - - - СтраницаНавигацияНачалоРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - Page - - AlwaysHorizontal - auto - false - - - - СтраницаНавигацияПродолжение - 36 - - КоманднаяПанельНавигацияПродолжениеСлева - 48 - - КомандаНавигацияПродолжениеНазад - 52 - - <key>ru</key> - <value>< Назад</value> - - true - true - - true - - - КомандаНавигацияПродолжениеНазадРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация продолжение слева</value> - - - КоманднаяПанельНавигацияПродолжениеСлеваРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельНавигацияПродолжениеСправа - 50 - - КомандаНавигацияПродолжениеДалее - 54 - - <key>ru</key> - <value>Далее ></value> - - true - true - - true - - - КомандаНавигацияПродолжениеДалееРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - Form.Command.КомандаДалее - Normal - Auto - true - true - UserCmds - Auto - - - КомандаНавигацияПродолжениеОтмена - 56 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - - КомандаНавигацияПродолжениеОтменаРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация продолжение справа</value> - - - КоманднаяПанельНавигацияПродолжениеСправаРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигация продолжение</value> - - - СтраницаНавигацияПродолжениеРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - Page - - AlwaysHorizontal - auto - false - - - - СтраницаНавигацияОкончание - 38 - - КоманднаяПанельНавигацияОкончаниеСлева - 58 - - КомандаНавигацияОкончаниеНазад - 62 - - <key>ru</key> - <value>< Назад</value> - - true - true - - true - - - КомандаНавигацияОкончаниеНазадРасширеннаяПодсказка - 63 - Label - true - true - - Left - - - Form.Command.КомандаНазад - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация окончание слева</value> - - - КоманднаяПанельНавигацияОкончаниеСлеваРасширеннаяПодсказка - 59 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельНавигацияОкончаниеСправа - 60 - - КомандаНавигацияОкончаниеГотово - 64 - - <key>ru</key> - <value>Готово</value> - - true - true - - true - - - КомандаНавигацияОкончаниеГотовоРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - Form.Command.КомандаГотово - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация окончание справа</value> - - - КоманднаяПанельНавигацияОкончаниеСправаРасширеннаяПодсказка - 61 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигация окончание</value> - - - СтраницаНавигацияОкончаниеРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - Page - - AlwaysHorizontal - auto - false - - - - СтраницаНавигацияСпособыНастройкиПодключения - 866 - - КоманднаяПанельНавигацияПродолжениеСлева1 - 868 - - КомандаНазадСпособНастройкиПодключения - 880 - - <key>ru</key> - <value>< Назад</value> - - true - true - - true - - - КомандаНазадСпособНастройкиПодключенияРасширеннаяПодсказка - 881 - Label - true - true - - Left - - - Form.Command.КомандаНазадСпособНастройкиПодключения - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация продолжение слева</value> - - - КоманднаяПанельНавигацияПродолжениеСлева1РасширеннаяПодсказка - 869 - Label - true - true - - Left - - - CommandBar - - Left - - - - КоманднаяПанельНавигацияПродолжениеСправа1 - 872 - - КомандаДалееСпособНастройкиПодключения - 878 - - <key>ru</key> - <value>Далее ></value> - - true - true - - true - - - КомандаДалееСпособНастройкиПодключенияРасширеннаяПодсказка - 879 - Label - true - true - - Left - - - Form.Command.КомандаДалееСпособНастройкиПодключения - Normal - Auto - true - true - UserCmds - Auto - - - КомандаНавигацияПродолжениеОтмена1 - 876 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - - КомандаНавигацияПродолжениеОтмена1РасширеннаяПодсказка - 877 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель навигация продолжение справа</value> - - - КоманднаяПанельНавигацияПродолжениеСправа1РасширеннаяПодсказка - 873 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Страница навигация продолжение</value> - - - СтраницаНавигацияСпособыНастройкиПодключенияРасширеннаяПодсказка - 867 - Label - true - true - - Left - - - Page - - AlwaysHorizontal - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Панель навигации</value> - - Bottom - - ПанельНавигацииРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - Pages - - Auto - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - OnOpen - ПриОткрытии - - - BeforeClose - ПередЗакрытием - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - Vertical - true - true - true - auto - true - - ПриложенияВСервисе - - <key>ru</key> - <value>Приложения в сервисе</value> - - 2 - - ValueTable - - - true - - - true - - - НаименованиеПриложения - - <key>ru</key> - <value>Наименование</value> - - 1 - - String - - - - true - - - true - - - - Префикс - - <key>ru</key> - <value>Префикс</value> - - 2 - - String - - 2 - - - - true - - - true - - - - РольКорреспондента - 3 - - String - - - - true - - - true - - - - ИмяПланаОбмена - 4 - - String - - - - true - - - true - - - - ФорматОбмена - 5 - - String - - - - true - - - true - - - - ВерсияКорреспондента - 6 - - String - - - - true - - - true - - - - ОбластьДанных - - <key>ru</key> - <value>Область данных</value> - - 7 - - Number - - 10 - true - - - - true - - - true - - - - КонечнаяТочкаКорреспондента - 8 - - DefinedType.КонечнаяТочкаОбменаСообщениями - - - true - - - true - - - - КартинкаРежимИспользования - 9 - - Number - - 10 - - - - true - - - true - - - - НастройкаСинхронизацииНедоступна - 10 - - Boolean - - - true - - - true - - - - ИдентификаторНастройки - 11 - - String - - - - true - - - true - - - - ПрефиксКорреспондента - 12 - - String - - - - true - - - true - - - - СообщениеОбОшибке - 14 - - String - - - - true - - - true - - - - ДоступенExchangeAdministrationManage_3_0_1_1 - 15 - - Boolean - - - true - - - true - - - - КонечнаяТочка - 13 - - DefinedType.КонечнаяТочкаОбменаСообщениями - - - true - - - true - - - - - ТаблицаПереходов - 3 - - ValueTable - - - true - - - true - - - ПорядковыйНомерПерехода - 1 - - Number - - 3 - true - - - - true - - - true - - - - ИмяОсновнойСтраницы - 2 - - String - - - - true - - - true - - - - ИмяСтраницыДекорации - 3 - - String - - - - true - - - true - - - - ИмяСтраницыНавигации - 4 - - String - - - - true - - - true - - - - ИмяОбработчикаПриОткрытии - 5 - - String - - - - true - - - true - - - - ИмяОбработчикаПриПереходеДалее - 6 - - String - - - - true - - - true - - - - ИмяОбработчикаПриПереходеНазад - 7 - - String - - - - true - - - true - - - - ДлительнаяОперация - 8 - - Boolean - - - true - - - true - - - - ИмяОбработчикаДлительнойОперации - 9 - - String - - - - true - - - true - - - - - ВидПодключения - - <key>ru</key> - <value>Вид подключения</value> - - 4 - - String - - - - true - - - true - - - - МодельСервиса - 5 - - Boolean - - - true - - - true - - - - ИмяФайлаНастроекПодключенияДляЗагрузки - - <key>ru</key> - <value>Имя файла настроек подключения для загрузки</value> - - 6 - - String - - - - true - - - true - - - - ПорядковыйНомерПерехода - 7 - - Number - - 10 - - - - true - - - true - - - - ВнешнееСоединениеВариантРаботыИнформационнойБазы - - <key>ru</key> - <value>Вариант работы информационной базы</value> - - 8 - - String - - - - true - - - true - - - - ВнешнееСоединениеКаталогИнформационнойБазы - - <key>ru</key> - <value>Каталог</value> - - 9 - - String - - - - true - - - true - - - - ВнешнееСоединениеКластерСерверов - - <key>ru</key> - <value>Сервер</value> - - 10 - - String - - - - true - - - true - - - - ВнешнееСоединениеИмяИнформационнойБазы - - <key>ru</key> - <value>Имя базы</value> - - 11 - - String - - - - true - - - true - - - - ВнешнееСоединениеВидАутентификации - - <key>ru</key> - <value>Вид аутентификации</value> - - 12 - - Number - - - - true - - - true - - - - ВнешнееСоединениеИмяПользователя - - <key>ru</key> - <value>Пользователь</value> - - 13 - - String - - - - true - - - true - - - - ВнешнееСоединениеПароль - - <key>ru</key> - <value>Пароль</value> - - 14 - - String - - - - true - - - true - - - - ИнтернетВебАдрес - - <key>ru</key> - <value>Адрес программы</value> - - 15 - - String - - - - true - - - true - - - - ИнтернетИмяПользователя - - <key>ru</key> - <value>Пользователь</value> - - 16 - - String - - 165 - - - - true - - - true - - - - ИнтернетПароль - - <key>ru</key> - <value>Пароль</value> - - 17 - - String - - - - true - - - true - - - - ИнтернетЗапомнитьПароль - - <key>ru</key> - <value>Запомнить пароль</value> - - 18 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFILEКаталог - - <key>ru</key> - <value>Каталог</value> - - 22 - - String - - - - true - - - true - - - - ОбычныеКаналыСвязиАрхивироватьФайлы - - <key>ru</key> - <value>Архивировать файлы обмена</value> - - 23 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов - - <key>ru</key> - <value>Транслитерировать имена файлов обмена</value> - - 24 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиПарольАрхива - - <key>ru</key> - <value>Пароль архива</value> - - 25 - - String - - - - true - - - true - - - - ОбычныеКаналыСвязиПарольАрхиваИзменен - 26 - - Boolean - - - true - - - true - - - - ИспользоватьПарольДляАрхива - 27 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFTPПуть - - <key>ru</key> - <value>Адрес каталога</value> - - 28 - - String - - - - true - - - true - - - - ОбычныеКаналыСвязиFTPПорт - - <key>ru</key> - <value>Порт</value> - - 30 - - Number - - 5 - true - - - - true - - - true - - - - ОбычныеКаналыСвязиFTPПользователь - - <key>ru</key> - <value>Пользователь</value> - - 31 - - String - - 50 - - - - true - - - true - - - - ОбычныеКаналыСвязиFTPПароль - - <key>ru</key> - <value>Пароль</value> - - 32 - - String - - - - true - - - true - - - - ОбычныеКаналыСвязиИспользоватьПарольДляАрхива - - <key>ru</key> - <value>Пароль архива</value> - - 33 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFILEИспользование - - <key>ru</key> - <value>Использовать локальный или сетевой каталог для синхронизации данных</value> - - 34 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFTPИспользование - - <key>ru</key> - <value>Использовать каталог на FTP-сервере для синхронизации данных</value> - - 35 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFTPПарольИзменен - 36 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиEMAILИспользование - - <key>ru</key> - <value>Использовать электронную почту для синхронизации данных</value> - - 37 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиEMAILУчетнаяЗапись - - <key>ru</key> - <value>Учетная запись</value> - - 38 - - DefinedType.ОбменДаннымиУчетныеЗаписиЭлектроннойПочты - - - true - - - true - - - - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения - - <key>ru</key> - <value>Максимальный допустимый размер вложения</value> - - 42 - - Number - - 10 - true - - - - true - - - true - - - - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения - - <key>ru</key> - <value>Ограничение размера вложения</value> - - 43 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFTPПассивныйРежим - - <key>ru</key> - <value>Пассивный режим</value> - - 47 - - Boolean - - - true - - - true - - - - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла - - <key>ru</key> - <value>Максимальный допустимый размер файла</value> - - 48 - - Number - - 10 - true - - - - true - - - true - - - - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла - - <key>ru</key> - <value>Ограничение размера файла</value> - - 49 - - Boolean - - - true - - - true - - - - КраткаяИнформацияПоОбмену - 50 - - String - - - - true - - - true - - - - ИмяПланаОбмена - 51 - - String - - - - true - - - true - - - - ИдентификаторНастройки - 52 - - String - - - - true - - - true - - - - НаименованиеКонфигурацииКорреспондента - 53 - - String - - - - true - - - true - - - - ИмяКонфигурацииКорреспондента - 54 - - String - - - - true - - - true - - - - ПодробнаяИнформацияПоОбмену - 56 - - String - - - - true - - - true - - - - НастройкаРИБ - 57 - - Boolean - - - true - - - true - - - - Наименование - - <key>ru</key> - <value>Наименование</value> - - 58 - - String - - - - true - - - true - - - - Префикс - - <key>ru</key> - <value>Префикс</value> - - 59 - - String - - 2 - - - - true - - - true - - - - НаименованиеКорреспондента - - <key>ru</key> - <value>Наименование</value> - - 60 - - String - - - - true - - - true - - - - ПрефиксКорреспондента - - <key>ru</key> - <value>Префикс</value> - - 61 - - String - - 2 - - - - true - - - true - - - - ВерсияКонфигурацииКорреспондента - 67 - - String - - - - true - - - true - - - - ИспользоватьПрефиксыДляНастройкиОбмена - 68 - - Boolean - - - true - - - true - - - - ДоступнаНастройкаПараметровДоступаВИнтернет - 77 - - Boolean - - - true - - - true - - - - НастройкаXDTO - 78 - - Boolean - - - true - - - true - - - - ПараметрыОбработчикаОжиданияПолученияСпискаПриложений - 81 - - - true - - - true - - - - ПараметрыОбработчикаПроверкиПодключения - 82 - - - true - - - true - - - - ПараметрыОбработчикаОжиданияПроверкиПодключения - 83 - - - true - - - true - - - - ИмяФайлаНастроекПодключенияДляВыгрузки - - <key>ru</key> - <value>Имя файла настроек подключения</value> - - 85 - - String - - - - true - - - true - - - - ИмяФормыПомощникаНастройкиСинхронизацииДанных - 86 - - String - - - - true - - - true - - - - ОчередьПроверкиПодключенияОбычныеКаналыСвязи - 87 - - - true - - - true - - - - ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения - 88 - - - true - - - true - - - - ПараметрыОбработчикаСохраненияНастроекПодключения - 89 - - - true - - - true - - - - ПродолжениеНастройкиВПодчиненномУзлеРИБ - 90 - - Boolean - - - true - - - true - - - - УзелОбмена - 91 - - ExchangePlanRef - - - true - - - true - - - - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию - - <key>ru</key> - <value>Вид подключения по умолчанию</value> - - 92 - - String - - - - true - - - true - - - - ЗакрытьФормуБезусловно - 93 - - Boolean - - - true - - - true - - - - ДоступноИзменениеНаименования - 94 - - Boolean - - - true - - - true - - - - ДоступноИзменениеПрефикса - 95 - - Boolean - - - true - - - true - - - - ДоступноИзменениеНаименованияКорреспондента - 96 - - Boolean - - - true - - - true - - - - ДоступноИзменениеПрефиксаКорреспондента - 97 - - Boolean - - - true - - - true - - - - ПараметрыОбработчикаПолученияСпискаПриложений - 98 - - - true - - - true - - - - ИмяФайлаНастроекДляПриемника - 100 - - String - - - - true - - - true - - - - СохранитьПараметрыПодключенияВФайл - 101 - - Boolean - - - true - - - true - - - - ИдентификаторИнформационнойБазыПриемника - 102 - - String - - 36 - - - - true - - - true - - - - ИдентификаторИнформационнойБазыИсточника - 103 - - String - - 36 - - - - true - - - true - - - - КонечнаяТочкаКорреспондента - 104 - - DefinedType.КонечнаяТочкаОбменаСообщениями - - - true - - - true - - - - ОбластьДанныхКорреспондента - 105 - - Number - - 10 - - - - true - - - true - - - - ПрефиксОбласти - 106 - - String - - 2 - - - - true - - - true - - - - ПрефиксОбластиКорреспондента - 107 - - String - - 2 - - - - true - - - true - - - - ЗагрузитьПараметрыПодключенияИзФайла - - <key>ru</key> - <value>Загрузить параметры подключения из файла</value> - - 109 - - Boolean - - - true - - - true - - - - ИмяФайлаПараметрыСинхронизацииПассивныйРежим - 110 - - String - - - - true - - - true - - - - ДоступныеВидыТранспорта - 111 - - - true - - - true - - - - ВерсияФорматаОбмена - 112 - - String - - - - true - - - true - - - - ПоддерживаемыеОбъектыФорматаКорреспондента - 113 - - - true - - - true - - - - СпособНастройкиПодключенияВСервисе - - <key>ru</key> - <value>Способ настройки подключения в сервисе</value> - - 114 - - String - - - - true - - - true - - - - ИмяФайлаНастроекXDTOКорреспондента - - <key>ru</key> - <value>Имя файла настроек XDTOКорреспондента</value> - - 1 - - String - - - - true - - - true - - - - ИмяПланаОбменаКорреспондента - 115 - - String - - - - true - - - true - - - - ФорматОбмена - 116 - - String - - - - true - - - true - - - - ЕстьДанныеДляСопоставления - 117 - - Boolean - - - true - - - true - - - - ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента - 118 - - Boolean - - - true - - - true - - - - ЭтоОбменСПриложениемВСервисе - 119 - - Boolean - - - true - - - true - - - - ИсправитьДублированиеНастроекСинхронизации - - <key>ru</key> - <value>Исправить дублирование настроек синхронизации</value> - - 39 - - Boolean - - - true - - - true - - - - УзелКорреспондентаЕстьВЭтойБазе - 19 - - Boolean - - - true - - - true - - - - ЭтотУзелЕстьВКорреспонденте - 40 - - Boolean - - - true - - - true - - - - УзелДляУдаления - 41 - - ExchangePlanRef - - - true - - - true - - - - ДоступенExchangeAdministrationManage_3_0_1_1 - 20 - - Boolean - - - true - - - true - - - - БольшеНастроекВидимость - 21 - - Boolean - - - true - - - true - - - - КонечнаяТочка - 29 - - DefinedType.КонечнаяТочкаОбменаСообщениями - - - true - - - true - - - - ВосстановлениеНастроекОбмена - 44 - - String - - - - true - - - true - - - - НомерОтправленного - 45 - - Number - - 10 - - - - true - - - true - - - - НомерПринятого - 46 - - Number - - 10 - - - - true - - - true - - - - КомандаНазад - - <key>ru</key> - <value>< Назад</value> - - 1 - - ru - Команда назад - - - true - - - - КомандаНазад - - - Auto - Auto - - - КомандаДалее - - <key>ru</key> - <value>Далее ></value> - - 2 - - ru - Команда далее - - - true - - - - КомандаДалее - - - Auto - Auto - - - КомандаГотово - - <key>ru</key> - <value>Готово</value> - - 3 - - ru - Команда готово - - - true - - - - КомандаГотово - - - Auto - Auto - - - КомандаОтмена - - <key>ru</key> - <value>Отмена</value> - - 4 - - ru - Команда отмена - - - true - - - - КомандаОтмена - - - Auto - Auto - - - КомандаСправка - - <key>ru</key> - <value>Справка</value> - - 5 - - ru - Справка - - - true - - - StdPicture.FormHelp - - - - КомандаСправка - - - TextPicture - Auto - Auto - - - ОбновитьСписокДоступныхПриложений - - <key>ru</key> - <value>Обновить</value> - - 6 - - ru - Обновить список доступных приложений - - - true - - - StdPicture.Refresh - - - - ОбновитьСписокДоступныхПриложений - - - TextPicture - Auto - Auto - - - ПараметрыДоступаВИнтернет - - <key>ru</key> - <value>Параметры доступа в интернет</value> - - 8 - - ru - Параметры доступа в интернет - - - true - - - - ПараметрыДоступаВИнтернет - - - Auto - Auto - - - ПодробноеОписаниеСинхронизацииДанных - - <key>ru</key> - <value>Подробное описание</value> - - 7 - - ru - Подробное описание синхронизации данных - - - true - - - StdPicture.Information - - - - ПодробноеОписаниеСинхронизацииДанных - - - Auto - Auto - - - СохранитьФайлНастроекПодключения - - <key>ru</key> - <value>Сохранить</value> - - 10 - - ru - Сохранить файл настроек подключения - - - true - - - StdPicture.Write - - TextPicture - Auto - Auto - - - БольшеНастроек - - <key>ru</key> - <value>Больше настроек...</value> - - 9 - - ru - Больше настроек - - - true - - - - БольшеНастроек - - - Auto - Auto - - - НастроитьВручную - - <key>ru</key> - <value>Настроить вручную...</value> - - 11 - - ru - Настроить вручную - - - true - - - - НастроитьВручную - - - Auto - Auto - - - КомандаДалееСпособНастройкиПодключения - - <key>ru</key> - <value>Далее ></value> - - 12 - - ru - Команда далее способ настройки подключения - - - true - - - - КомандаДалееСпособНастройкиПодключения - - - Auto - Auto - - - КомандаНазадСпособНастройкиПодключения - - <key>ru</key> - <value>< Назад</value> - - 13 - - ru - Команда назад способ настройки подключения - - - true - - - - КомандаНазадСпособНастройкиПодключения - - - Auto - Auto - - - - - -
          diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl deleted file mode 100644 index 2637f0638..000000000 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаПодключения/Module.bsl +++ /dev/null @@ -1,3043 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - УстановитьУсловноеОформление(); - - ПроверитьВозможностьИспользованияФормы(Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ИнициализироватьРеквизитыФормы(); - - ИнициализироватьСвойстваФормы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьПорядковыйНомерПерехода(1); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) - - ТекстПредупреждения = НСтр("ru = 'Прервать настройку параметров подключения для синхронизации данных?'"); - ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( - ЭтотОбъект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, "ЗакрытьФормуБезусловно"); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура СпособНастройкиПодключенияПриИзменении(Элемент) - - ПриИзмененииСпособНастройкиПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьНастройкиПодключенияИзФайлаПриИзменении(Элемент) - - ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла(); - -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаНастроекПодключенияДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл с настройками подключения'")); - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек подключения (*.xml)'") + "|*.xml"); - - ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекПодключенияДляЗагрузки", СтандартнаяОбработка, НастройкиДиалога); - -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаНастроекXDTOКорреспондентаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл с настройками корреспондента'")); - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек корреспондента (*.xml)'") + "|*.xml"); - - ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекXDTOКорреспондента", СтандартнаяОбработка, НастройкиДиалога); - -КонецПроцедуры - -&НаКлиенте -Процедура ИмяФайлаНастроекПодключенияДляВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - НастройкиДиалога = Новый Структура; - НастройкиДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Сохранение); - НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Укажите файл для сохранения настроек подключения'")); - НастройкиДиалога.Вставить("Фильтр", НСтр("ru = 'Файл настроек подключения (*.xml)'") + "|*.xml"); - - ОбменДаннымиКлиент.ОбработчикВыбораФайла(ЭтотОбъект, "ИмяФайлаНастроекПодключенияДляВыгрузки", СтандартнаяОбработка, НастройкиДиалога); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидПодключенияВнешнееСоединениеПриИзменении(Элемент) - - ПриИзмененииВидПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидПодключенияИнтернетПриИзменении(Элемент) - - ПриИзмененииВидПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидПодключенияОбычныеКаналыСвязиПриИзменении(Элемент) - - ПриИзмененииВидПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВидПодключенияПассивныйРежимПриИзменении(Элемент) - - ПриИзмененииВидПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиFILEКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(ЭтотОбъект, "ОбычныеКаналыСвязиFILEКаталог", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ВнешнееСоединениеКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(ЭтотОбъект, "ВнешнееСоединениеКаталогИнформационнойБазы", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиFILEИспользованиеПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиFILEИспользование(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиFTPИспользованиеПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиFTPИспользование(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиEMAILИспользованиеПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиEMAILИспользование(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВнешнееСоединениеВариантРаботыИнформационнойБазыФайловыйПриИзменении(Элемент) - - ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВнешнееСоединениеВариантРаботыИнформационнойБазыКлиентСерверныйПриИзменении(Элемент) - - ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВнешнееСоединениеВидАутентификации1СПредприятиеПриИзменении(Элемент) - - ПриИзмененииВнешнееСоединениеВидАутентификации(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВнешнееСоединениеВидАутентификацииОперационнаяСистемаПриИзменении(Элемент) - - ПриИзмененииВнешнееСоединениеВидАутентификации(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиАрхивироватьФайлыПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиИспользоватьПарольАрхиваПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайлаПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложенияПриИзменении(Элемент) - - ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ИсправитьДублированиеНастроекСинхронизацииПриИзменении(Элемент) - - Если ИсправитьДублированиеНастроекСинхронизации И УзелКорреспондентаЕстьВЭтойБазе Тогда - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеУдаленияРазрешений", ЭтотОбъект, УзелОбмена); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = ОбменДаннымиВызовСервера.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(УзелОбмена); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, Неопределено, ОповещениеОЗакрытии); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеУдаленияРазрешений(Результат, УзелИнформационнойБазы) Экспорт - - Если НЕ Результат = КодВозвратаДиалога.ОК Тогда - ИсправитьДублированиеНастроекСинхронизации = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура БольшеНастроек(Команда) - - БольшеНастроекВидимость = Ложь; - - Элементы.БольшеНастроек.Видимость = Ложь; - Элементы.ГруппаСпособыНастройкиПодключения.Видимость = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьВручную(Команда) - - СпособНастройкиПодключенияВСервисе = "ИнтернетВручную"; - - Если НастройкаXDTO Тогда - - Элементы.ВидПодключенияВнешнееСоединение.Видимость = ДоступныеВидыТранспорта.Свойство("COM"); - Элементы.ВидПодключенияИнтернет.Видимость = ДоступныеВидыТранспорта.Свойство("WS"); - Элементы.ВидПодключенияОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE") - Или ДоступныеВидыТранспорта.Свойство("FTP") - Или ДоступныеВидыТранспорта.Свойство("EMAIL"); - - Элементы.ВидПодключенияПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); - - Элементы.ГруппаФайлНастройкиПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); - Элементы.ГруппаФайлНастройкиОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE") - Или ДоступныеВидыТранспорта.Свойство("FTP") - Или ДоступныеВидыТранспорта.Свойство("EMAIL"); - - Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаВидыПодключения; - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияСпособыНастройкиПодключения; - ПриИзмененииВидПодключения(); - - Иначе - - ПриИзмененииСпособНастройкиПодключения(); - ИзменитьПорядковыйНомерПерехода(+1); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриложенияВСервисеПриАктивизацииСтроки(Элемент) - - Если Элементы.ПанельОсновная.ТекущаяСтраница <> Элементы.СтраницаСпособНастройкиПодключения Тогда - Возврат; - КонецЕсли; - - ВыбратьНаилучшийСпособНастройкиПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыбратьНаилучшийСпособНастройкиПодключения() - - ТекущаяСтрока = Элементы.ПриложенияВСервисе.ТекущиеДанные; - - Если ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - - Если ДоступенExchangeAdministrationManage_3_0_1_1 - И ТекущаяСтрока.ДоступенExchangeAdministrationManage_3_0_1_1 Тогда - - СпособНастройкиПодключенияВСервисе = "ИнтернетАвто"; - Элементы.СпособНастройкиПодключенияИнтернет.Видимость = Истина; - - Иначе - - СпособНастройкиПодключенияВСервисе = "МенеджерСервиса"; - Элементы.СпособНастройкиПодключенияИнтернет.Видимость = Ложь; - - КонецЕсли; - - ПриИзмененииСпособНастройкиПодключения(); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура КомандаДалее(Команда) - - ИзменитьПорядковыйНомерПерехода(+1); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаНазад(Команда) - - Если ВидПодключения = "ПассивныйРежим" Тогда - ИзменитьПорядковыйНомерПерехода(-5); - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияСпособыНастройкиПодключения; - Иначе - ИзменитьПорядковыйНомерПерехода(-1) - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаГотово(Команда) - - ЗакрытьФормуБезусловно = Истина; - - Результат = Новый Структура; - Результат.Вставить("УзелОбмена", УзелОбмена); - Результат.Вставить("ЕстьДанныеДляСопоставления", ЕстьДанныеДляСопоставления); - - Если МодельСервиса Тогда - Результат.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); - Результат.Вставить("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); - КонецЕсли; - - Результат.Вставить("ПассивныйРежим", ВидПодключения = "ПассивныйРежим"); - - Закрыть(Результат); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаОтмена(Команда) - - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаСправка(Команда) - - ОткрытьСправкуФормы(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьСписокДоступныхПриложений(Команда) - - НачатьПолучениеСпискаПриложенийДляПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПараметрыДоступаВИнтернет(Команда) - - ОбменДаннымиКлиент.ОткрытьФормуПараметровПроксиСервера(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПодробноеОписаниеСинхронизацииДанных(Команда) - - ОбменДаннымиКлиент.ОткрытьПодробноеОписаниеСинхронизации(ПодробнаяИнформацияПоОбмену); - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаНазадСпособНастройкиПодключения(Команда) - - Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаМоиПриложения; - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияНачало; - -КонецПроцедуры - -&НаКлиенте -Процедура КомандаДалееСпособНастройкиПодключения(Команда) - - Если ВидПодключения = "Интернет" Тогда - - СпособНастройкиПодключенияВСервисе = "ИнтернетВручную"; - ПриИзмененииСпособНастройкиПодключения(); - - ИзменитьПорядковыйНомерПерехода(+1); - - Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаМоиПриложения; - - ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда - - Если ПустаяСтрока(ИмяФайлаНастроекXDTOКорреспондента) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите файл с настройками программы-корреспондента.'"), - , "ИмяФайлаНастроекXDTOКорреспондента"); - Иначе - ИзменитьПорядковыйНомерПерехода(+3); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -#Область ПолучениеСпискаПриложенийДляПодключения - -&НаКлиенте -Процедура НачатьПолучениеСпискаПриложенийДляПодключения() - - Элементы.ПанельПриложенияВСервисе.Видимость = Истина; - Элементы.ПриложенияВСервисе.Доступность = Ложь; - Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Ложь; - - Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОжидание; - ПодключитьОбработчикОжидания("ПриНачалеПолученияСпискаПриложенийДляПодключения", 0.1, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриНачалеПолученияСпискаПриложенийДляПодключения() - - ПараметрыОбработчикаПолученияСпискаПриложений = Неопределено; - ПродолжитьОжидание = Ложь; - - ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( - ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); - - ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", - ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииПолученияСпискаПриложенийДляПодключения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключения() - - ПродолжитьОжидание = Ложь; - ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); - - ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", - ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); - Иначе - ПараметрыОбработчикаОжиданияПолученияСпискаПриложений = Неопределено; - ПриЗавершенииПолученияСпискаПриложенийДляПодключения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключения() - - Отказ = Ложь; - ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ); - - Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Истина; - Элементы.ПриложенияВСервисе.Доступность = Истина; - - Если Отказ Тогда - Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОшибка; - Иначе - Элементы.ПанельПриложенияВСервисе.Видимость = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - Если МодульПомощникНастройки = Неопределено Тогда - ПродолжитьОжидание = Ложь; - Возврат; - КонецЕсли; - - ПараметрыПомощника = Новый Структура; - ПараметрыПомощника.Вставить("Режим", "НеНастроенныеОбмены"); - ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - - Если ЗначениеЗаполнено(ФорматОбмена) Тогда - ПараметрыПомощника.Вставить("ФорматОбмена", ФорматОбмена); - Иначе - ПараметрыПомощника.Вставить("ФорматОбмена", ИмяПланаОбмена); - КонецЕсли; - ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - - МодульПомощникНастройки.ПриНачалеПолученияСпискаПриложений(ПараметрыПомощника, - ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - Если МодульПомощникНастройки = Неопределено Тогда - ПродолжитьОжидание = Ложь; - Возврат; - КонецЕсли; - - МодульПомощникНастройки.ПриОжиданииПолученияСпискаПриложений( - ПараметрыОбработчика, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервере -Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ = Ложь) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - Если МодульПомощникНастройки = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - СтатусЗавершения = Неопределено; - МодульПомощникНастройки.ПриЗавершенииПолученияСпискаПриложений( - ПараметрыОбработчикаПолученияСпискаПриложений, СтатусЗавершения); - - Если СтатусЗавершения.Отказ Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - ТаблицаПриложений = СтатусЗавершения.Результат; // ТаблицаЗначений - - ТаблицаПриложений.Колонки.Добавить("КартинкаРежимИспользования", Новый ОписаниеТипов("Число")); - ТаблицаПриложений.ЗаполнитьЗначения(1, "КартинкаРежимИспользования"); // приложение в Интернете - ПриложенияВСервисе.Загрузить(ТаблицаПриложений); - -КонецПроцедуры - -#КонецОбласти - -#Область ПроверкаПараметровПодключения - -&НаКлиенте -Процедура ПриНачалеПроверкиПодключенияOnline() - - ПродолжитьОжидание = Истина; - - Если ВидПодключения = "Интернет" Тогда - ПриНачалеПроверкиПодключенияНаСервере("WS", ПродолжитьОжидание); - ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда - ПриНачалеПроверкиПодключенияНаСервере("COM", ПродолжитьОжидание); - КонецЕсли; - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( - ПараметрыОбработчикаОжиданияПроверкиПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline", - ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииПроверкиПодключенияOnline(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОжиданииПроверкиПодключенияOnline() - - ПродолжитьОжидание = Ложь; - ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOnline", - ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); - Иначе - ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено; - ПриЗавершенииПроверкиПодключенияOnline(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииПроверкиПодключенияOnline() - - СообщениеОбОшибке = ""; - ПроверкаПодключенияВыполнена = Ложь; - ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке); - - Если ПроверкаПодключенияВыполнена Тогда - ИзменитьПорядковыйНомерПерехода(+1); - Иначе - ИзменитьПорядковыйНомерПерехода(-1); - - Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); - Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'")); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриНачалеПроверкиПодключенияOffline() - - Если ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено Тогда - - ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Новый Структура; - - Если ОбычныеКаналыСвязиFILEИспользование Тогда - ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("FILE"); - КонецЕсли; - - Если ОбычныеКаналыСвязиFTPИспользование Тогда - ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("FTP"); - КонецЕсли; - - Если ОбычныеКаналыСвязиEMAILИспользование Тогда - ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Вставить("EMAIL"); - КонецЕсли; - - КонецЕсли; - - ПроверяемыйВидТранспорта = Неопределено; - Для Каждого ЭлементПроверки Из ОчередьПроверкиПодключенияОбычныеКаналыСвязи Цикл - ПроверяемыйВидТранспорта = ЭлементПроверки.Ключ; - Прервать; - КонецЦикла; - - ПродолжитьОжидание = Истина; - ПриНачалеПроверкиПодключенияНаСервере(ПроверяемыйВидТранспорта, ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( - ПараметрыОбработчикаОжиданияПроверкиПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline", - ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииПроверкиПодключенияOffline(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОжиданииПроверкиПодключенияOffline() - - ПродолжитьОжидание = Ложь; - ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияOffline", - ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); - Иначе - ПараметрыОбработчикаОжиданияПроверкиПодключения = Неопределено; - ПриЗавершенииПроверкиПодключенияOffline(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииПроверкиПодключенияOffline() - - СообщениеОбОшибке = ""; - ПроверкаПодключенияВыполнена = Ложь; - ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке); - - Если ПроверкаПодключенияВыполнена Тогда - - ПроверяемыйВидТранспорта = Неопределено; - Для Каждого ЭлементПроверки Из ОчередьПроверкиПодключенияОбычныеКаналыСвязи Цикл - ПроверяемыйВидТранспорта = ЭлементПроверки.Ключ; - Прервать; - КонецЦикла; - ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Удалить(ПроверяемыйВидТранспорта); - - Если ОчередьПроверкиПодключенияОбычныеКаналыСвязи.Количество() > 0 Тогда - ПриНачалеПроверкиПодключенияOffline(); - Иначе - ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено; - ИзменитьПорядковыйНомерПерехода(+1); - КонецЕсли; - - Иначе - - ПроверяемыйВидТранспорта = Неопределено; - ОчередьПроверкиПодключенияОбычныеКаналыСвязи = Неопределено; - ИзменитьПорядковыйНомерПерехода(-1); - - Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); - Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения %1.'"), ПроверяемыйВидТранспорта)); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриНачалеПроверкиПодключенияВМоделиСервиса() - - ПродолжитьОжидание = Истина; - ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( - ПараметрыОбработчикаОжиданияПроверкиПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса", - ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииПроверкиПодключенияВМоделиСервиса(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОжиданииПроверкиПодключенияВМоделиСервиса() - - ПродолжитьОжидание = Ложь; - ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПроверкиПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииПроверкиПодключенияВМоделиСервиса", - ПараметрыОбработчикаОжиданияПроверкиПодключения.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииПроверкиПодключенияВМоделиСервиса(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииПроверкиПодключенияВМоделиСервиса() - - СообщениеОбОшибке = ""; - ПроверкаПодключенияВыполнена = Ложь; - ПриЗавершенииПроверкиПодключенияВМоделиСервисаНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке); - - Если ПроверкаПодключенияВыполнена Тогда - ИзменитьПорядковыйНомерПерехода(+1); - Иначе - ИзменитьПорядковыйНомерПерехода(-1); - - Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); - Иначе - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Не удалось подключиться к программе. Проверьте настройки подключения.'")); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриНачалеПроверкиПодключенияНаСервере(ВидТранспорта, ПродолжитьОжидание) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - СтруктураНастроек = Новый Структура; - ЗаполнитьСтруктуруПараметровПодключенияПомощника(СтруктураНастроек, Истина); - СтруктураНастроек.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспорта]; - - МодульПомощникНастройки.ПриНачалеПроверкиПодключения( - СтруктураНастроек, ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ПриОжиданииПроверкиПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - ПродолжитьОжидание = Ложь; - МодульПомощникНастройки.ПриОжиданииПроверкиПодключения(ПараметрыОбработчика, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервере -Процедура ПриЗавершенииПроверкиПодключенияНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке = "") - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - СтатусЗавершения = Неопределено; - МодульПомощникНастройки.ПриЗавершенииПроверкиПодключения(ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения); - - Если СтатусЗавершения.Отказ Тогда - ПроверкаПодключенияВыполнена = Ложь; - СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; - Возврат; - Иначе - ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПодключениеУстановлено - И СтатусЗавершения.Результат.ПодключениеРазрешено; - - Если Не ПроверкаПодключенияВыполнена - И Не ПустаяСтрока(СтатусЗавершения.Результат.СообщениеОбОшибке) Тогда - СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; - КонецЕсли; - - Если ПроверкаПодключенияВыполнена - И СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены Тогда - ЗаполнитьПараметрыКорреспондента(СтатусЗавершения.Результат.ПараметрыКорреспондента); - КонецЕсли; - - ЭтотУзелЕстьВКорреспонденте = СтатусЗавершения.Результат.ЭтотУзелЕстьВКорреспонденте; - УзелКорреспондентаЕстьВЭтойБазе = СтатусЗавершения.Результат.УзелКорреспондентаЕстьВЭтойБазе; - УзелДляУдаления = СтатусЗавершения.Результат.УзелДляУдаления; - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриНачалеПроверкиПодключенияВМоделиСервисаНаСервере(ПродолжитьОжидание) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - Если МодульПомощникНастройки = Неопределено Тогда - ПродолжитьОжидание = Ложь; - Возврат; - КонецЕсли; - - НастройкиПодключения = Новый Структура; - НастройкиПодключения.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - НастройкиПодключения.Вставить("НаименованиеКорреспондента", НаименованиеКорреспондента); - НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); - - ПараметрыОбработчикаПроверкиПодключения = Неопределено; - МодульПомощникНастройки.ПриНачалеПолученияОбщихДанныхУзловКорреспондента(НастройкиПодключения, - ПараметрыОбработчикаПроверкиПодключения, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ПриОжиданииПроверкиПодключенияВМоделиСервисаНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - Если МодульПомощникНастройки = Неопределено Тогда - ПродолжитьОжидание = Ложь; - Возврат; - КонецЕсли; - - ПродолжитьОжидание = Ложь; - МодульПомощникНастройки.ПриОжиданииПолученияОбщихДанныхУзловКорреспондента(ПараметрыОбработчика, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервере -Процедура ПриЗавершенииПроверкиПодключенияВМоделиСервисаНаСервере(ПроверкаПодключенияВыполнена, СообщениеОбОшибке = "") - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - Если МодульПомощникНастройки = Неопределено Тогда - ПроверкаПодключенияВыполнена = Ложь; - Возврат; - КонецЕсли; - - СтатусЗавершения = Неопределено; - МодульПомощникНастройки.ПриЗавершенииПолученияОбщихДанныхУзловКорреспондента( - ПараметрыОбработчикаПроверкиПодключения, СтатусЗавершения); - ПараметрыОбработчикаПроверкиПодключения = Неопределено; - - Если СтатусЗавершения.Отказ Тогда - ПроверкаПодключенияВыполнена = Ложь; - СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; - Возврат; - Иначе - ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены; - - Если Не ПроверкаПодключенияВыполнена Тогда - СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; - Возврат; - КонецЕсли; - - Если ПроверкаПодключенияВыполнена Тогда - ЗаполнитьПараметрыКорреспондента(СтатусЗавершения.Результат.ПараметрыКорреспондента, Истина); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область СохранениеНастроекПодключения - -&НаКлиенте -Процедура ПриНачалеСохраненияНастроекПодключения() - - ПродолжитьОжидание = Истина; - ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( - ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения", - ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииСохраненияНастроекПодключения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОжиданииСохраненияНастроекПодключения() - - ПродолжитьОжидание = Ложь; - ПриОжиданииСохраненияНастроекПодключенияНаСервере(ЭтоОбменСПриложениемВСервисе, - ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание); - - Если ПродолжитьОжидание Тогда - ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения); - - ПодключитьОбработчикОжидания("ПриОжиданииСохраненияНастроекПодключения", - ПараметрыОбработчикаОжиданияСохраненияНастроекПодключения.ТекущийИнтервал, Истина); - Иначе - ПриЗавершенииСохраненияНастроекПодключения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииСохраненияНастроекПодключения() - - НастройкиПодключенияСохранены = Ложь; - АдресВХранилищеНастройкиПодключения = ""; - СообщениеОбОшибке = ""; - - ПриЗавершенииСохраненияНастроекПодключенияНаСервере(НастройкиПодключенияСохранены, - АдресВХранилищеНастройкиПодключения, СообщениеОбОшибке); - - Результат = Новый Структура; - Результат.Вставить("Отказ", Не НастройкиПодключенияСохранены); - Результат.Вставить("СообщениеОбОшибке", СообщениеОбОшибке); - - ОповещениеЗавершения = Новый ОписаниеОповещения("СохранениеНастроекПодключенияЗавершение", ЭтотОбъект); - - Если НастройкиПодключенияСохранены Тогда - Если СохранитьПараметрыПодключенияВФайл - И ЗначениеЗаполнено(АдресВХранилищеНастройкиПодключения) Тогда - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ОповещениеЗавершения", ОповещениеЗавершения); - - ОповещениеПолученияФайла = Новый ОписаниеОповещения("ПолучениеФайлаНастроекПодключенияЗавершение", - ЭтотОбъект, ДополнительныеПараметры); - - ПолучаемыеФайлы = Новый Массив; - ПолучаемыеФайлы.Добавить( - Новый ОписаниеПередаваемогоФайла(ИмяФайлаНастроекПодключенияДляВыгрузки, АдресВХранилищеНастройкиПодключения)); - - ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов(); - ПараметрыСохранения.Интерактивно = Ложь; - - ФайловаяСистемаКлиент.СохранитьФайлы(ОповещениеПолученияФайла, ПолучаемыеФайлы, ПараметрыСохранения); - - Иначе - - ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Результат); - - КонецЕсли; - Иначе - - ВыполнитьОбработкуОповещения(ОповещениеЗавершения, Результат); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПолучениеФайлаНастроекПодключенияЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("СообщениеОбОшибке", ""); - - Если ПолученныеФайлы = Неопределено Тогда - Результат.Отказ = Истина; - Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось сохранить настройки подключения в файл.'"); - КонецЕсли; - - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеЗавершения, Результат); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранениеНастроекПодключенияЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Не Результат.Отказ Тогда - - ИзменитьПорядковыйНомерПерехода(+1); - - Оповестить("Запись_УзелПланаОбмена"); - - Иначе - - ИзменитьПорядковыйНомерПерехода(-1); - - ТекстСообщения = Результат.СообщениеОбОшибке; - Если ПустаяСтрока(ТекстСообщения) Тогда - ТекстСообщения = НСтр("ru = 'Не удалось сохранить настройки подключения.'"); - КонецЕсли; - - ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриНачалеСохраненияНастроекПодключенияНаСервере(ПродолжитьОжидание) - - Если ЭтоОбменСПриложениемВСервисе Тогда - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - - НастройкиПодключения = МодульПомощникНастройки.ОписаниеНастроекПодключения(НастройкаXDTO); - - НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбменаКорреспондента; - НастройкиПодключения.ИмяПланаОбменаКорреспондента = ИмяПланаОбмена; - - НастройкиПодключения.ИдентификаторНастройки = ИдентификаторНастройки; - - НастройкиПодключения.ФорматОбмена = ФорматОбмена; - - НастройкиПодключения.Наименование = Наименование; - НастройкиПодключения.НаименованиеКорреспондента = НаименованиеКорреспондента; - - НастройкиПодключения.Префикс = Префикс; - НастройкиПодключения.ПрефиксКорреспондента = ПрефиксКорреспондента; - - НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника = ИдентификаторИнформационнойБазыИсточника; - НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника = ИдентификаторИнформационнойБазыПриемника; - - НастройкиПодключения.КонечнаяТочкаКорреспондента = КонечнаяТочкаКорреспондента; - - НастройкиПодключения.ОбластьДанныхКорреспондента = ОбластьДанныхКорреспондента; - - Если НастройкаXDTO Тогда - НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии.Добавить(ВерсияФорматаОбмена); - НастройкиПодключения.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты = ПоддерживаемыеОбъектыФорматаКорреспондента; - КонецЕсли; - - Иначе - - // Настройки подключения в формате структуры реквизитов помощника создания обмена данными. - НастройкиПодключения = Новый Структура; - ЗаполнитьСтруктуруПараметровПодключенияПомощника(НастройкиПодключения); - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - КонецЕсли; - - Если МодульПомощникНастройки = Неопределено Тогда - ПродолжитьОжидание = Ложь; - Возврат; - КонецЕсли; - - ПараметрыОбработчикаСохраненияНастроекПодключения = Неопределено; - МодульПомощникНастройки.ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения, - ПараметрыОбработчикаСохраненияНастроекПодключения, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервереБезКонтекста -Процедура ПриОжиданииСохраненияНастроекПодключенияНаСервере(ЭтоОбменСПриложениемВСервисе, ПараметрыОбработчика, ПродолжитьОжидание) - - Если ЭтоОбменСПриложениемВСервисе Тогда - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - Иначе - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - КонецЕсли; - - Если МодульПомощникНастройки = Неопределено Тогда - ПродолжитьОжидание = Ложь; - Возврат; - КонецЕсли; - - ПродолжитьОжидание = Ложь; - МодульПомощникНастройки.ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание); - -КонецПроцедуры - -&НаСервере -Процедура ПриЗавершенииСохраненияНастроекПодключенияНаСервере(НастройкиПодключенияСохранены, - АдресВХранилищеНастройкиПодключения, СообщениеОбОшибке) - - СтатусЗавершения = Неопределено; - - Если ЭтоОбменСПриложениемВСервисе Тогда - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); - Иначе - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - КонецЕсли; - - Если МодульПомощникНастройки = Неопределено Тогда - НастройкиПодключенияСохранены = Ложь; - Возврат; - КонецЕсли; - - МодульПомощникНастройки.ПриЗавершенииСохраненияНастроекПодключения( - ПараметрыОбработчикаСохраненияНастроекПодключения, СтатусЗавершения); - ПараметрыОбработчикаСохраненияНастроекПодключения = Неопределено; - - Если СтатусЗавершения.Отказ Тогда - НастройкиПодключенияСохранены = Ложь; - СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке; - Возврат; - Иначе - НастройкиПодключенияСохранены = СтатусЗавершения.Результат.НастройкиПодключенияСохранены; - - Если Не НастройкиПодключенияСохранены Тогда - СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; - Возврат; - КонецЕсли; - - УзелОбмена = СтатусЗавершения.Результат.УзелОбмена; - - Если СохранитьПараметрыПодключенияВФайл Тогда - ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); - - Запись = Новый ЗаписьТекста; - Запись.Открыть(ВременныйФайл, "UTF-8"); - Запись.Записать(СтатусЗавершения.Результат.СтрокаНастроекПодключенияXML); - Запись.Закрыть(); - - АдресВХранилищеНастройкиПодключения = ПоместитьВоВременноеХранилище( - Новый ДвоичныеДанные(ВременныйФайл), УникальныйИдентификатор); - - УдалитьФайлы(ВременныйФайл); - КонецЕсли; - - Если Не МодельСервиса Тогда - ЕстьДанныеДляСопоставления = СтатусЗавершения.Результат.ЕстьДанныеДляСопоставления; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -&НаСервере -Процедура УстановитьУсловноеОформление() - - УсловноеОформление.Элементы.Очистить(); - - // Тусклый цвет шрифта недоступной для настройки синхронизации. - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПриложенияВСервисе.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПриложенияВСервисе.НастройкаСинхронизацииНедоступна"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьСтруктуруПараметровПодключенияПомощника(СтруктураНастроекПомощника, БезКорреспондента = Ложь) - - // Преобразование структуры реквизитов формы в структуру реквизитов помощника. - СтруктураНастроекПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - СтруктураНастроекПомощника.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента); - СтруктураНастроекПомощника.Вставить("ВариантНастройкиОбмена", ИдентификаторНастройки); - СтруктураНастроекПомощника.Вставить("ФорматОбмена", ФорматОбмена); - - Если ЗначениеЗаполнено(УзелОбмена) - И Не БезКорреспондента Тогда - СтруктураНастроекПомощника.Вставить("Корреспондент", УзелОбмена); - КонецЕсли; - - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ - Или ЗагрузитьПараметрыПодключенияИзФайла Тогда - СтруктураНастроекПомощника.Вставить("ВариантРаботыМастера", "ПродолжитьНастройкуОбменаДанными"); - Иначе - СтруктураНастроекПомощника.Вставить("ВариантРаботыМастера", "НастроитьНовыйОбменДанными"); - КонецЕсли; - - СтруктураНастроекПомощника.Вставить("СсылкаНового", Неопределено); - - СтруктураНастроекПомощника.Вставить("КодПредопределенногоУзла", ИдентификаторИнформационнойБазыИсточника); - - СтруктураНастроекПомощника.Вставить("КодНовогоУзлаВторойБазы", ИдентификаторИнформационнойБазыПриемника); - СтруктураНастроекПомощника.Вставить("КодУзлаКорреспондента", ИдентификаторИнформационнойБазыПриемника); - - СтруктураНастроекПомощника.Вставить("НаименованиеЭтойБазы", Наименование); - СтруктураНастроекПомощника.Вставить("НаименованиеВторойБазы", НаименованиеКорреспондента); - - СтруктураНастроекПомощника.Вставить("ПрефиксИнформационнойБазыИсточника", Префикс); - СтруктураНастроекПомощника.Вставить("ПрефиксИнформационнойБазыПриемника", ПрефиксКорреспондента); - - СтруктураНастроекПомощника.Вставить("УзелИнформационнойБазы", УзелОбмена); - - СтруктураНастроекПомощника.Вставить("ИспользоватьПрефиксыДляНастройкиОбмена", ИспользоватьПрефиксыДляНастройкиОбмена); - СтруктураНастроекПомощника.Вставить("ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента", ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента); - - СтруктураНастроекПомощника.Вставить("ИдентификаторИнформационнойБазыИсточника", ИдентификаторИнформационнойБазыИсточника); - СтруктураНастроекПомощника.Вставить("ИдентификаторИнформационнойБазыПриемника", ИдентификаторИнформационнойБазыПриемника); - - СтруктураНастроекПомощника.Вставить("ВерсияФорматаФайлаНастроекОбменаДанными", - ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными().ВерсияФорматаНастроекОбменаДанными()); - - СтруктураНастроекПомощника.Вставить("ВерсияФорматаОбмена", ВерсияФорматаОбмена); - СтруктураНастроекПомощника.Вставить("ПоддерживаемыеОбъектыФормата", ПоддерживаемыеОбъектыФорматаКорреспондента); - - // Настройки транспорта. - СтруктураНастроекПомощника.Вставить("COMАутентификацияОперационнойСистемы", - ВнешнееСоединениеВидАутентификации = 0); // Операционная система - СтруктураНастроекПомощника.Вставить("COMВариантРаботыИнформационнойБазы", - ?(ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый", 0, 1)); - СтруктураНастроекПомощника.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия", - ВнешнееСоединениеИмяИнформационнойБазы); - СтруктураНастроекПомощника.Вставить("COMИмяПользователя", - ВнешнееСоединениеИмяПользователя); - СтруктураНастроекПомощника.Вставить("COMИмяСервера1СПредприятия", - ВнешнееСоединениеКластерСерверов); - СтруктураНастроекПомощника.Вставить("COMКаталогИнформационнойБазы", - ВнешнееСоединениеКаталогИнформационнойБазы); - СтруктураНастроекПомощника.Вставить("COMПарольПользователя", - ВнешнееСоединениеПароль); - - СтруктураНастроекПомощника.Вставить("EMAILМаксимальныйДопустимыйРазмерСообщения", - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения); - СтруктураНастроекПомощника.Вставить("EMAILСжиматьФайлИсходящегоСообщения", - ОбычныеКаналыСвязиАрхивироватьФайлы); - СтруктураНастроекПомощника.Вставить("EMAILУчетнаяЗапись", - ОбычныеКаналыСвязиEMAILУчетнаяЗапись); - СтруктураНастроекПомощника.Вставить("EMAILТранслитерироватьИменаФайловСообщенийОбмена", - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов); - - СтруктураНастроекПомощника.Вставить("FILEКаталогОбменаИнформацией", - ОбычныеКаналыСвязиFILEКаталог); - СтруктураНастроекПомощника.Вставить("FILEСжиматьФайлИсходящегоСообщения", - ОбычныеКаналыСвязиАрхивироватьФайлы); - СтруктураНастроекПомощника.Вставить("FILEТранслитерироватьИменаФайловСообщенийОбмена", - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов); - - СтруктураНастроекПомощника.Вставить("FTPСжиматьФайлИсходящегоСообщения", - ОбычныеКаналыСвязиАрхивироватьФайлы); - СтруктураНастроекПомощника.Вставить("FTPСоединениеМаксимальныйДопустимыйРазмерСообщения", - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла); - СтруктураНастроекПомощника.Вставить("FTPСоединениеПароль", - ОбычныеКаналыСвязиFTPПароль); - СтруктураНастроекПомощника.Вставить("FTPСоединениеПассивноеСоединение", - ОбычныеКаналыСвязиFTPПассивныйРежим); - СтруктураНастроекПомощника.Вставить("FTPСоединениеПользователь", - ОбычныеКаналыСвязиFTPПользователь); - СтруктураНастроекПомощника.Вставить("FTPСоединениеПорт", - ОбычныеКаналыСвязиFTPПорт); - СтруктураНастроекПомощника.Вставить("FTPСоединениеПуть", - ОбычныеКаналыСвязиFTPПуть); - СтруктураНастроекПомощника.Вставить("FTPТранслитерироватьИменаФайловСообщенийОбмена", - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов); - - СтруктураНастроекПомощника.Вставить("WSURLВебСервиса", ИнтернетВебАдрес); - СтруктураНастроекПомощника.Вставить("WSЗапомнитьПароль", ИнтернетЗапомнитьПароль); - СтруктураНастроекПомощника.Вставить("WSИмяПользователя", ИнтернетИмяПользователя); - СтруктураНастроекПомощника.Вставить("WSПароль", ИнтернетПароль); - - Если ВидПодключения = "Интернет" Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - ИначеЕсли ВидПодключения = "ВнешнееСоединение" Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.COM); - ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда - Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда - Если ОбычныеКаналыСвязиFILEИспользование Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - ИначеЕсли ОбычныеКаналыСвязиFTPИспользование Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - ИначеЕсли ОбычныеКаналыСвязиEMAILИспользование Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - КонецЕсли; - ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE" Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP" Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - ИначеЕсли ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL" Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - КонецЕсли; - ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда - СтруктураНастроекПомощника.Вставить("ВидТранспортаСообщенийОбмена", Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим); - КонецЕсли; - - СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаCOM", ВидПодключения = "ВнешнееСоединение"); - - СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаEMAIL", ОбычныеКаналыСвязиEMAILИспользование); - СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаFILE", ОбычныеКаналыСвязиFILEИспользование); - СтруктураНастроекПомощника.Вставить("ИспользоватьПараметрыТранспортаFTP", ОбычныеКаналыСвязиFTPИспользование); - - СтруктураНастроекПомощника.Вставить("ПарольАрхиваСообщенияОбмена", ОбычныеКаналыСвязиПарольАрхива); - - СтруктураНастроекПомощника.Вставить("ИсправитьДублированиеНастроекСинхронизации", ИсправитьДублированиеНастроекСинхронизации); - СтруктураНастроекПомощника.Вставить("УзелКорреспондентаЕстьВЭтойБазе", УзелКорреспондентаЕстьВЭтойБазе); - СтруктураНастроекПомощника.Вставить("ЭтотУзелЕстьВКорреспонденте", ЭтотУзелЕстьВКорреспонденте); - - Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" Тогда - - СтруктураНастроекПомощника.Вставить("WSКонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); - СтруктураНастроекПомощника.Вставить("WSОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); - СтруктураНастроекПомощника.Вставить("WSКонечнаяТочка", КонечнаяТочка); - СтруктураНастроекПомощника.Вставить("WSОбластьДанных", ПараметрыСеанса["ОбластьДанныхЗначение"]); - - Иначе - - СтруктураНастроекПомощника.Вставить("WSКонечнаяТочкаКорреспондента", Неопределено); - СтруктураНастроекПомощника.Вставить("WSОбластьДанныхКорреспондента", 0); - СтруктураНастроекПомощника.Вставить("WSКонечнаяТочка", Неопределено); - СтруктураНастроекПомощника.Вставить("WSОбластьДанных", 0); - - КонецЕсли; - - СтруктураНастроекПомощника.Вставить("ВосстановлениеНастроекОбмена", ВосстановлениеНастроекОбмена); - СтруктураНастроекПомощника.Вставить("НомерОтправленного", НомерОтправленного); - СтруктураНастроекПомощника.Вставить("НомерПринятого", НомерПринятого); - -КонецПроцедуры - -&НаСервере -Процедура ПрочитатьСтруктуруПараметровПодключенияПомощника(СтруктураНастроекПомощника) - - // Преобразование структуры реквизитов помощника в структуру реквизитов формы. - ИдентификаторИнформационнойБазыИсточника = СтруктураНастроекПомощника.КодПредопределенногоУзла; - ИдентификаторИнформационнойБазыПриемника = СтруктураНастроекПомощника.КодНовогоУзлаВторойБазы; - - ИмяПланаОбменаКорреспондента = СтруктураНастроекПомощника.ИмяПланаОбменаКорреспондента; - - ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = - Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) - Или СтрДлина(ИдентификаторИнформационнойБазыПриемника) <> 36 - Или СтрДлина(ИдентификаторИнформационнойБазыИсточника) <> 36; - - Если ДоступноИзменениеНаименования Тогда - Наименование = СтруктураНастроекПомощника.НаименованиеЭтойБазы; - КонецЕсли; - - Если ДоступноИзменениеНаименованияКорреспондента Тогда - НаименованиеКорреспондента = СтруктураНастроекПомощника.НаименованиеВторойБазы; - КонецЕсли; - - Если ДоступноИзменениеПрефикса Тогда - Префикс = СтруктураНастроекПомощника.ПрефиксИнформационнойБазыИсточника; - Если ПустаяСтрока(Префикс) - И (ИспользоватьПрефиксыДляНастройкиОбмена Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда - Префикс = СтруктураНастроекПомощника.КодПредопределенногоУзла; - КонецЕсли; - КонецЕсли; - - Если ДоступноИзменениеПрефиксаКорреспондента Тогда - ПрефиксКорреспондента = СтруктураНастроекПомощника.ПрефиксИнформационнойБазыПриемника; - Если ПустаяСтрока(ПрефиксКорреспондента) - И (ИспользоватьПрефиксыДляНастройкиОбмена Или ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда - ПрефиксКорреспондента = СтруктураНастроекПомощника.КодНовогоУзлаВторойБазы; - КонецЕсли; - КонецЕсли; - - // Настройки транспорта. - ВнешнееСоединениеВидАутентификации = - ?(СтруктураНастроекПомощника.COMАутентификацияОперационнойСистемы, 0, 1); // 0 - Операционная система, 1 - 1с Предприятие - ВнешнееСоединениеВариантРаботыИнформационнойБазы = - ?(СтруктураНастроекПомощника.COMВариантРаботыИнформационнойБазы = 0, "Файловый", "КлиентСерверный"); - ВнешнееСоединениеИмяИнформационнойБазы = - СтруктураНастроекПомощника.COMИмяИнформационнойБазыНаСервере1СПредприятия; - ВнешнееСоединениеИмяПользователя = - СтруктураНастроекПомощника.COMИмяПользователя; - ВнешнееСоединениеКластерСерверов = - СтруктураНастроекПомощника.COMИмяСервера1СПредприятия; - ВнешнееСоединениеКаталогИнформационнойБазы = - СтруктураНастроекПомощника.COMКаталогИнформационнойБазы; - ВнешнееСоединениеПароль = - СтруктураНастроекПомощника.COMПарольПользователя; - - ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения = - СтруктураНастроекПомощника.EMAILМаксимальныйДопустимыйРазмерСообщения; - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения = - ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения); - ОбычныеКаналыСвязиEMAILУчетнаяЗапись = - СтруктураНастроекПомощника.EMAILУчетнаяЗапись; - - ОбычныеКаналыСвязиFILEКаталог = - СтруктураНастроекПомощника.FILEКаталогОбменаИнформацией; - - ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла = - СтруктураНастроекПомощника.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения; - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла = - ЗначениеЗаполнено(ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла); - ОбычныеКаналыСвязиFTPПароль = - СтруктураНастроекПомощника.FTPСоединениеПароль; - ОбычныеКаналыСвязиFTPПассивныйРежим = - СтруктураНастроекПомощника.FTPСоединениеПассивноеСоединение; - ОбычныеКаналыСвязиFTPПользователь = - СтруктураНастроекПомощника.FTPСоединениеПользователь; - ОбычныеКаналыСвязиFTPПорт = - СтруктураНастроекПомощника.FTPСоединениеПорт; - ОбычныеКаналыСвязиFTPПуть = - СтруктураНастроекПомощника.FTPСоединениеПуть; - - ИнтернетВебАдрес = СтруктураНастроекПомощника.WSURLВебСервиса; - ИнтернетЗапомнитьПароль = СтруктураНастроекПомощника.WSЗапомнитьПароль; - ИнтернетИмяПользователя = СтруктураНастроекПомощника.WSИмяПользователя; - ИнтернетПароль = СтруктураНастроекПомощника.WSПароль; - - Если СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - ВидПодключения = "Интернет"; - ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - ВидПодключения = "ВнешнееСоединение"; - ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP - Или СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - ВидПодключения = "ОбычныеКаналыСвязи"; - ИначеЕсли СтруктураНастроекПомощника.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда - ВидПодключения = "ПассивныйРежим"; - КонецЕсли; - - ОбычныеКаналыСвязиEMAILИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаEMAIL; - ОбычныеКаналыСвязиFILEИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаFILE; - ОбычныеКаналыСвязиFTPИспользование = СтруктураНастроекПомощника.ИспользоватьПараметрыТранспортаFTP; - - Если ОбычныеКаналыСвязиFILEИспользование Тогда - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE"; - ИначеЕсли ОбычныеКаналыСвязиFTPИспользование Тогда - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP"; - ИначеЕсли ОбычныеКаналыСвязиEMAILИспользование Тогда - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL"; - КонецЕсли; - - ОбычныеКаналыСвязиТранслитерироватьИменаФайлов = - СтруктураНастроекПомощника.FILEТранслитерироватьИменаФайловСообщенийОбмена - Или СтруктураНастроекПомощника.FTPТранслитерироватьИменаФайловСообщенийОбмена - Или СтруктураНастроекПомощника.EMAILТранслитерироватьИменаФайловСообщенийОбмена; - - ОбычныеКаналыСвязиАрхивироватьФайлы = - СтруктураНастроекПомощника.FILEСжиматьФайлИсходящегоСообщения - Или СтруктураНастроекПомощника.FTPСжиматьФайлИсходящегоСообщения - Или СтруктураНастроекПомощника.EMAILСжиматьФайлИсходящегоСообщения; - - ОбычныеКаналыСвязиПарольАрхива = СтруктураНастроекПомощника.ПарольАрхиваСообщенияОбмена; - - ОбычныеКаналыСвязиИспользоватьПарольДляАрхива = ЗначениеЗаполнено(ОбычныеКаналыСвязиПарольАрхива); - - Если СтрДлина(ИдентификаторИнформационнойБазыИсточника) = 36 - И СтрДлина(ИдентификаторИнформационнойБазыПриемника) = 36 Тогда - - Если ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код <> ИдентификаторИнформационнойБазыИсточника - И ОбменДаннымиСервер.УзлыПланаОбмена(ИмяПланаОбмена).Количество() > 0 Тогда - ВосстановлениеНастроекОбмена = "ВосстановлениеСПредупреждением"; - Иначе - ВосстановлениеНастроекОбмена = "Восстановление"; - КонецЕсли; - - КонецЕсли; - - НомерОтправленного = СтруктураНастроекПомощника.НомерОтправленного; - НомерПринятого = СтруктураНастроекПомощника.НомерПринятого - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьПараметрыКорреспондента(ПараметрыКорреспондента, КорреспондентВМоделиСервиса = Ложь) - - Если ЗначениеЗаполнено(ПараметрыКорреспондента.ПрефиксИнформационнойБазы) Тогда - ПрефиксКорреспондента = ПараметрыКорреспондента.ПрефиксИнформационнойБазы; - ДоступноИзменениеПрефиксаКорреспондента = Ложь; - Иначе - ПрефиксКорреспондента = ПараметрыКорреспондента.ПрефиксИнформационнойБазыПоУмолчанию; - ДоступноИзменениеПрефиксаКорреспондента = Истина; - КонецЕсли; - - Если Не КорреспондентВМоделиСервиса Тогда - Если ЗначениеЗаполнено(ПараметрыКорреспондента.НаименованиеИнформационнойБазы) Тогда - НаименованиеКорреспондента = ПараметрыКорреспондента.НаименованиеИнформационнойБазы; - Иначе - НаименованиеКорреспондента = ПараметрыКорреспондента.НаименованиеИнформационнойБазыПоУмолчанию; - КонецЕсли; - КонецЕсли; - - ИдентификаторИнформационнойБазыПриемника = ПараметрыКорреспондента.КодЭтогоУзла; - - ВерсияКонфигурацииКорреспондента = ПараметрыКорреспондента.ВерсияКонфигурации; - - ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; - - Если НастройкаXDTO Тогда - ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = ПараметрыКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена; - - ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата( - ИмяПланаОбмена, ПараметрыКорреспондента.ВерсииФорматаОбмена); - - ПоддерживаемыеОбъектыФорматаКорреспондента = Новый ХранилищеЗначения( - ПараметрыКорреспондента.ПоддерживаемыеОбъектыФормата, Новый СжатиеДанных(9)); - ИначеЕсли ВидПодключения = "Интернет" - И СтрДлина(ИдентификаторИнформационнойБазыПриемника) = 9 Тогда - ИспользоватьПрефиксыДляНастройкиОбмена = Ложь; - ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Ложь; - - Если ПустаяСтрока(ИдентификаторИнформационнойБазыИсточника) Тогда - ИдентификаторИнформационнойБазыИсточника = Префикс; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьНастройкиПодключенияИзXMLНаСервере(АдресВХранилище, Отказ, СообщениеОбОшибке = "") - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); - - ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); // ДвоичныеДанные - ДанныеФайла.Записать(ВременныйФайл); - - Попытка - НастройкиПодключения = МодульПомощникНастройки.Создать(); - НастройкиПодключения.ИмяПланаОбмена = ИмяПланаОбмена; - НастройкиПодключения.ВариантНастройкиОбмена = ИдентификаторНастройки; - НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - - МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзXML( - НастройкиПодключения, ВременныйФайл, Истина); - Исключение - Отказ = Истина; - СообщениеОбОшибке = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - СообщениеОбОшибкеЖР = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибкеЖР); - КонецПопытки; - - УдалитьФайлы(ВременныйФайл); - УдалитьИзВременногоХранилища(АдресВХранилище); - - Если Не Отказ Тогда - ПрочитатьСтруктуруПараметровПодключенияПомощника(НастройкиПодключения); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьНастройкиXDTOКорреспондентаИзXMLНаСервере(АдресВХранилище, Отказ, СообщениеОбОшибке = "") - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - ВременныйФайл = ПолучитьИмяВременногоФайла("xml"); - - ДанныеФайла = ПолучитьИзВременногоХранилища(АдресВХранилище); // ДвоичныеДанные - ДанныеФайла.Записать(ВременныйФайл); - - Попытка - НастройкиXDTOКорреспондента = МодульПомощникНастройки.НастройкиXDTOКорреспондентаИзXML( - ВременныйФайл, Истина, ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка()); - Исключение - Отказ = Истина; - СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); - КонецПопытки; - - УдалитьФайлы(ВременныйФайл); - УдалитьИзВременногоХранилища(АдресВХранилище); - - Если Не Отказ Тогда - ВерсияФорматаОбмена = ОбменДаннымиXDTOСервер.МаксимальнаяОбщаяВерсияФормата(ИмяПланаОбмена, - НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии); - - ПоддерживаемыеОбъектыФорматаКорреспондента = Новый ХранилищеЗначения(НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты, - Новый СжатиеДанных(9)); - - ИдентификаторИнформационнойБазыПриемника = НастройкиXDTOКорреспондента.ИдентификаторОтправителя; - - ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = (СтрДлина(ИдентификаторИнформационнойБазыПриемника) <> 36); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьДоступныеВидыТранспорта() - - ДоступныеВидыТранспорта = Новый Структура; - - ИспользуемыеТранспортыСообщенийОбмена = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена( - ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка(), ИдентификаторНастройки); - - Для Каждого ТекущийВидТранспорта Из ИспользуемыеТранспортыСообщенийОбмена Цикл - // В модели сервиса обмен через Интернет и Интернет-пассивное соединение - // поддерживается только для планов обмена XDTO. - Если МодельСервиса Тогда - Если ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WS - И ТекущийВидТранспорта <> Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда - Продолжить; - КонецЕсли; - - Если Не НастройкаXDTO Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - - ДоступныеВидыТранспорта.Вставить(ОбщегоНазначения.ИмяЗначенияПеречисления(ТекущийВидТранспорта)); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииПомещенияФайлаНастроекПодключенияДляЗагрузки(ПомещенныйФайл, ДополнительныеПараметры) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("СообщениеОбОшибке", ""); - - Если ПомещенныйФайл = Неопределено Тогда - Результат.Отказ = Истина; - Иначе - ЗаполнитьНастройкиПодключенияИзXMLНаСервере(ПомещенныйФайл.Хранение, Результат.Отказ, Результат.СообщениеОбОшибке); - КонецЕсли; - - Если Результат.Отказ Тогда - Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда - Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить файл с настройками подключения.'"); - КонецЕсли; - Иначе - ДоступноИзменениеНаименования = Ложь; - ДоступноИзменениеПрефикса = Ложь; - - ДоступноИзменениеНаименованияКорреспондента = Ложь; - ДоступноИзменениеПрефиксаКорреспондента = Ложь; - КонецЕсли; - - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗавершенииПомещенияФайлаНастроекXDTOКорреспондента(ПомещенныйФайл, ДополнительныеПараметры) Экспорт - - Если ПомещенныйФайл = Неопределено Тогда - Возврат; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("СообщениеОбОшибке", ""); - - ЗаполнитьНастройкиXDTOКорреспондентаИзXMLНаСервере(ПомещенныйФайл.Хранение, Результат.Отказ, Результат.СообщениеОбОшибке); - - Если Результат.Отказ Тогда - Если ПустаяСтрока(Результат.СообщениеОбОшибке) Тогда - Результат.СообщениеОбОшибке = НСтр("ru = 'Не удалось загрузить файл с настройками корреспондента.'"); - КонецЕсли; - КонецЕсли; - - ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение, Результат); - -КонецПроцедуры - -&НаКлиенте -Процедура ПродолжениеНастройкиПараметрыПодключенияОбычныеКаналыСвязи(Результат, ДополнительныеПараметры) Экспорт - - Если Результат.Отказ Тогда - ИзменитьПорядковыйНомерПерехода(-1); - ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); - Возврат; - КонецЕсли; - - Элементы.ПараметрыДоступаВИнтернет.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет; - - Элементы.ГруппаСинхронизацияЧерезКаталог.Видимость = ДоступныеВидыТранспорта.Свойство("FILE"); - Элементы.ГруппаСинхронизацияЧерезFTP.Видимость = ДоступныеВидыТранспорта.Свойство("FTP"); - Элементы.ГруппаСинхронизацияЧерезEMAIL.Видимость = ДоступныеВидыТранспорта.Свойство("EMAIL"); - - Если ОбычныеКаналыСвязиFILEИспользование Тогда - Элементы.ГруппаСинхронизацияЧерезКаталог.Показать(); - Иначе - Элементы.ГруппаСинхронизацияЧерезКаталог.Скрыть(); - КонецЕсли; - - Если ОбычныеКаналыСвязиFTPИспользование Тогда - Элементы.ГруппаСинхронизацияЧерезFTP.Показать(); - Иначе - Элементы.ГруппаСинхронизацияЧерезFTP.Скрыть(); - КонецЕсли; - - Если ОбычныеКаналыСвязиEMAILИспользование Тогда - Элементы.ГруппаСинхронизацияЧерезEMAIL.Показать(); - Иначе - Элементы.ГруппаСинхронизацияЧерезEMAIL.Скрыть(); - КонецЕсли; - - Если ДополнительныеПараметры.ЭтоПереходДалее Тогда - - ПриИзмененииОбычныеКаналыСвязиFILEИспользование(); - ПриИзмененииОбычныеКаналыСвязиFTPИспользование(); - ПриИзмененииОбычныеКаналыСвязиEMAILИспользование(); - - ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы(); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПродолжениеНастройкиОбщиеНастройкиСинхронизации(Результат, ДополнительныеПараметры) Экспорт - - Если Результат.Отказ Тогда - Если ВидПодключения = "ПассивныйРежим" Тогда - ИзменитьПорядковыйНомерПерехода(-3); - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы.СтраницаНавигацияСпособыНастройкиПодключения; - Иначе - ИзменитьПорядковыйНомерПерехода(-1) - КонецЕсли; - ОбщегоНазначенияКлиент.СообщитьПользователю(Результат.СообщениеОбОшибке); - Возврат; - КонецЕсли; - - Если ДополнительныеПараметры.ЭтоПереходДалее Тогда - Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Очистить(); - - Если ОбычныеКаналыСвязиFILEИспользование Тогда - Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("FILE"); - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FILE"; - КонецЕсли; - - Если ОбычныеКаналыСвязиFTPИспользование Тогда - Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("FTP"); - Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "FTP"; - КонецЕсли; - КонецЕсли; - - Если ОбычныеКаналыСвязиEMAILИспользование Тогда - Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Добавить("EMAIL"); - Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиВидТранспортаПоУмолчанию) Тогда - ОбычныеКаналыСвязиВидТранспортаПоУмолчанию = "EMAIL"; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ОбычныеКаналыСвязиВидТранспортаПоУмолчанию", - "Видимость", - Элементы.ОбычныеКаналыСвязиВидТранспортаПоУмолчанию.СписокВыбора.Количество() > 1); - - СохранитьПараметрыПодключенияВФайл = (ВидПодключения = "ПассивныйРежим") - Или ((ВидПодключения = "ОбычныеКаналыСвязи") - И Не НастройкаРИБ И Не ЗагрузитьПараметрыПодключенияИзФайла); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ИмяФайлаНастроекПодключенияДляВыгрузки", "Видимость", СохранитьПараметрыПодключенияВФайл); - - Если СохранитьПараметрыПодключенияВФайл - И (ВидПодключения = "ОбычныеКаналыСвязи") Тогда - Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() - И ОбычныеКаналыСвязиFILEИспользование Тогда - ИмяФайлаНастроекПодключенияДляВыгрузки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( - ОбычныеКаналыСвязиFILEКаталог, ИмяФайлаНастроекДляПриемника + ".xml"); - КонецЕсли; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаНастройкиПрограммыПредставление", "Видимость", Не (ВидПодключения = "ПассивныйРежим")); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "Наименование", "ТолькоПросмотр", Не ДоступноИзменениеНаименования); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "Префикс", "ТолькоПросмотр", Не ДоступноИзменениеПрефикса); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "НаименованиеКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеНаименованияКорреспондента); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ПрефиксКорреспондента", "ТолькоПросмотр", Не ДоступноИзменениеПрефиксаКорреспондента); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗарегистрироватьCOMСоединительЗавершение(Зарегистрировано, ДополнительныеПараметры) Экспорт - - ПриНачалеПроверкиПодключенияOnline(); - -КонецПроцедуры - -#Область ИнициализацияФормыПриСоздании - -&НаСервере -Процедура ПроверитьВозможностьИспользованияФормы(Отказ = Ложь) - - // Обязательная должны быть переданы параметры помощника создания обмена данными. - Если Не Параметры.Свойство("ИмяПланаОбмена") - Или Не Параметры.Свойство("ИдентификаторНастройки") Тогда - ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного использования.'"); - ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); - Возврат; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ИнициализироватьСвойстваФормы() - - Если НастройкаРИБ Тогда - Заголовок = НСтр("ru = 'Настройка распределенной информационной базы'"); - Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройка подключения к ""%1""'"), - НаименованиеКонфигурацииКорреспондента); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ИнициализироватьРеквизитыФормы() - - ИмяПланаОбмена = Параметры.ИмяПланаОбмена; - ИдентификаторНастройки = Параметры.ИдентификаторНастройки; - - ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); - - ВерсияКонфигурацииКорреспондента = ""; - - МодельСервиса = ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); - - ДоступнаНастройкаПараметровДоступаВИнтернет = Не МодельСервиса - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета"); - - НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); - НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена); - - ЗаполнитьДоступныеВидыТранспорта(); - - Если ДоступныеВидыТранспорта.Свойство("COM") Тогда - ВидПодключения = "ВнешнееСоединение"; - - ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый"; - ВнешнееСоединениеВидАутентификации = 1; // 1с Предприятие - ИначеЕсли ДоступныеВидыТранспорта.Свойство("WS") Тогда - ВидПодключения = "Интернет"; - ИначеЕсли ДоступныеВидыТранспорта.Свойство("FILE") - Или ДоступныеВидыТранспорта.Свойство("FTP") - Или ДоступныеВидыТранспорта.Свойство("EMAIL") Тогда - ВидПодключения = "ОбычныеКаналыСвязи"; - ИначеЕсли ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим") Тогда - ВидПодключения = "ПассивныйРежим"; - КонецЕсли; - - Если ДоступныеВидыТранспорта.Свойство("FILE") Тогда - ОбычныеКаналыСвязиFILEИспользование = Истина; - ИначеЕсли ДоступныеВидыТранспорта.Свойство("FTP") Тогда - ОбычныеКаналыСвязиFTPИспользование = Истина; - ИначеЕсли ДоступныеВидыТранспорта.Свойство("EMAIL") Тогда - ОбычныеКаналыСвязиEMAILИспользование = Истина; - КонецЕсли; - - Если ДоступныеВидыТранспорта.Свойство("FTP") Тогда - ОбычныеКаналыСвязиFTPПорт = 21; - ОбычныеКаналыСвязиFTPПассивныйРежим = Истина; - КонецЕсли; - - // Проверка, поддерживает ли менеджер сервиса настройку через внутреннюю публикацию. Только для обмена через - // универсальный формат. - Если НастройкаXDTO - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - - МодульОбменДаннымиВнутренняяПубликация = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВнутренняяПубликация"); - ДоступенExchangeAdministrationManage_3_0_1_1 = - МодульОбменДаннымиВнутренняяПубликация.ВСервисеДоступенExchangeAdministrationManage_3_0_1_1(); - - Иначе - - ДоступенExchangeAdministrationManage_3_0_1_1 = Ложь; - - КонецЕсли; - - Если ДоступенExchangeAdministrationManage_3_0_1_1 - И МодельСервиса - И (ДоступныеВидыТранспорта.Свойство("WS") Или ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим")) Тогда - - СпособНастройкиПодключенияВСервисе = "ИнтернетАвто"; - - ИначеЕсли МодельСервиса Тогда - - СпособНастройкиПодключенияВСервисе = "МенеджерСервиса"; - ЭтоОбменСПриложениемВСервисе = Истина; - - Иначе - - СпособНастройкиПодключенияВСервисе = ""; - - КонецЕсли; - - БольшеНастроекВидимость = ВидимостьКнопкиБольшеНастроек(); - - ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, - "ИмяКонфигурацииКорреспондента, - |ФорматОбмена, - |ИмяФайлаНастроекДляПриемника, - |НаименованиеКонфигурацииКорреспондента, - |КраткаяИнформацияПоОбмену, - |ПодробнаяИнформацияПоОбмену, - |ИмяФормыПомощникаНастройкиСинхронизацииДанных, - |ИмяПланаОбменаКорреспондента", - ИдентификаторНастройки); - - ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияНастроекДляВарианта); - - Если Не ЗначениеЗаполнено(ИмяПланаОбменаКорреспондента) Тогда - ИмяПланаОбменаКорреспондента = ИмяПланаОбмена; - КонецЕсли; - - ИмяПланаОбменаКорреспондента = ИмяПланаОбмена; - - ДоступноИзменениеНаименования = Ложь; - ДоступноИзменениеПрефикса = Ложь; - - ДоступноИзменениеНаименованияКорреспондента = Истина; - ДоступноИзменениеПрефиксаКорреспондента = Истина; - - Если МодельСервиса Тогда - МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - Наименование = МодульОбменДаннымиВМоделиСервиса.СформироватьНаименованиеПредопределенногоУзла(); - Иначе - // Представление этой информационной базы. - Наименование = ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); - Если ПустаяСтрока(Наименование) Тогда - ДоступноИзменениеНаименования = Истина; - Наименование = ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы(); - КонецЕсли; - ДоступноИзменениеНаименования = Истина; - - НаименованиеКорреспондента = НаименованиеКонфигурацииКорреспондента; - КонецЕсли; - - Префикс = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Если ПустаяСтрока(Префикс) Тогда - ДоступноИзменениеПрефикса = Истина; - ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Префикс); - КонецЕсли; - - Если НастройкаРИБ Тогда - ВидПодключения = "ОбычныеКаналыСвязи"; - КонецЕсли; - - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел(); - - // Заполнение параметров из настроек подключения в константе. - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - - ПомощникСозданияОбмена = МодульПомощникНастройки.Создать(); - ПомощникСозданияОбмена.ИмяПланаОбмена = ИмяПланаОбмена; - ПомощникСозданияОбмена.ВариантНастройкиОбмена = ИдентификаторНастройки; - ПомощникСозданияОбмена.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - - МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзКонстанты(ПомощникСозданияОбмена); - ПрочитатьСтруктуруПараметровПодключенияПомощника(ПомощникСозданияОбмена); - - ДоступноИзменениеНаименования = Ложь; - ДоступноИзменениеПрефикса = Ложь; - - ДоступноИзменениеНаименованияКорреспондента = Ложь; - ДоступноИзменениеПрефиксаКорреспондента = Ложь; - КонецЕсли; - - ИдентификаторИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); - - Если НастройкаXDTO Тогда - ИспользоватьПрефиксыДляНастройкиОбмена = Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными( - ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка()); - - Если ПустаяСтрока(ИдентификаторИнформационнойБазыИсточника) Тогда - ИдентификаторИнформационнойБазыИсточника = ?(ИспользоватьПрефиксыДляНастройкиОбмена, - Префикс, Строка(Новый УникальныйИдентификатор)); - КонецЕсли; - Иначе - ИспользоватьПрефиксыДляНастройкиОбмена = Истина; - КонецЕсли; - - // До получения настроек из корреспондента устанавливаем режим по-умолчанию. - ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Истина; - - ЗаполнитьТаблицуПереходов(); - -КонецПроцедуры - -&НаСервере -Функция ВидимостьКнопкиБольшеНастроек() - - Возврат Ложь; - -КонецФункции - -#КонецОбласти - -#Область СценарииРаботыПомощника - -&НаСервере -Функция ДобавитьСтрокуТаблицыПереходов(ИмяОсновнойСтраницы, ИмяСтраницыНавигации, ИмяСтраницыДекорации = "") - - СтрокаПереходов = ТаблицаПереходов.Добавить(); - СтрокаПереходов.ПорядковыйНомерПерехода = ТаблицаПереходов.Количество(); - СтрокаПереходов.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; - СтрокаПереходов.ИмяСтраницыНавигации = ИмяСтраницыНавигации; - СтрокаПереходов.ИмяСтраницыДекорации = ИмяСтраницыДекорации; - - Возврат СтрокаПереходов; - -КонецФункции - -&НаСервере -Процедура ЗаполнитьТаблицуПереходов() - - ТаблицаПереходов.Очистить(); - - Если НастройкаРИБ Тогда - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияОбычныеКаналыСвязи", "СтраницаНавигацияНачало"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее"; - Иначе - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаСпособНастройкиПодключения", "СтраницаНавигацияНачало"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаСпособНастройкиПодключения_ПриОткрытии"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаСпособНастройкиПодключения_ПриПереходеДалее"; - - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияИнтернет", "СтраницаНавигацияПродолжение"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриОткрытии"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее"; - - Если Не МодельСервиса Тогда - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияВнешнееСоединение", "СтраницаНавигацияПродолжение"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриОткрытии"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее"; - - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПараметрыПодключенияОбычныеКаналыСвязи", "СтраницаНавигацияПродолжение"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее"; - КонецЕсли; - КонецЕсли; - - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаПроверкаПодключения", "СтраницаНавигацияПродолжение"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаПроверкаПодключения_ПриОткрытии"; - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация"; - - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОбщиеНастройкиСинхронизации", "СтраницаНавигацияПродолжение"); - НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриОткрытии"; - НовыйПереход.ИмяОбработчикаПриПереходеДалее = "Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее"; - - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаСохранениеНастроекПодключения", "СтраницаНавигацияПродолжение"); - НовыйПереход.ДлительнаяОперация = Истина; - НовыйПереход.ИмяОбработчикаДлительнойОперации = "Подключаемый_СтраницаСохранениеНастроекПодключения_ДлительнаяОперация"; - - НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОкончание", "СтраницаНавигацияОкончание"); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиИзмененийРеквизитовФормы - -&НаКлиенте -Процедура ПриИзмененииСпособНастройкиПодключения() - - Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" Тогда - - ЭтоОбменСПриложениемВСервисе = Ложь; - ВидПодключения = "Интернет"; - - ИначеЕсли СпособНастройкиПодключенияВСервисе = "МенеджерСервиса" Тогда - - ЭтоОбменСПриложениемВСервисе = Истина; - ВидПодключения = ""; - - ИначеЕсли СпособНастройкиПодключенияВСервисе = "ИнтернетВручную" Тогда - - ЭтоОбменСПриложениемВСервисе = Ложь; - ВидПодключения = "Интернет"; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриПереходеНаСтраницуВидыПодключения() - - Элементы.ВидПодключенияВнешнееСоединение.Видимость = ДоступныеВидыТранспорта.Свойство("COM"); - Элементы.ВидПодключенияИнтернет.Видимость = ДоступныеВидыТранспорта.Свойство("WS"); - Элементы.ВидПодключенияОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE") - Или ДоступныеВидыТранспорта.Свойство("FTP") - Или ДоступныеВидыТранспорта.Свойство("EMAIL"); - - Элементы.ВидПодключенияПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); - - Элементы.ГруппаФайлНастройкиПассивныйРежим.Видимость = ДоступныеВидыТранспорта.Свойство("WSПассивныйРежим"); - Элементы.ГруппаФайлНастройкиОбычныеКаналыСвязи.Видимость = ДоступныеВидыТранспорта.Свойство("FILE") - Или ДоступныеВидыТранспорта.Свойство("FTP") - Или ДоступныеВидыТранспорта.Свойство("EMAIL"); - - Элементы.ПанельСпособыНастройкиПодключения.ТекущаяСтраница = Элементы.СтраницаВидыПодключения; - ПриИзмененииВидПодключения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ИмяФайлаНастроекПодключенияДляЗагрузки", "Доступность", ЗагрузитьПараметрыПодключенияИзФайла); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииВидПодключения() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаФайлНастройкиОбычныеКаналыСвязи", "Доступность", ВидПодключения = "ОбычныеКаналыСвязи"); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаФайлНастройкиПассивныйРежим", "Доступность", ВидПодключения = "ПассивныйРежим"); - - Если ВидПодключения = "ОбычныеКаналыСвязи" Тогда - ПриИзмененииЗагрузитьНастройкиПодключенияИзФайла(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиFILEИспользование() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаОбычныеКаналыСвязиFILEИспользование", "Доступность", ОбычныеКаналыСвязиFILEИспользование); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиFTPИспользование() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаОбычныеКаналыСвязиFTPИспользование", "Доступность", ОбычныеКаналыСвязиFTPИспользование); - - ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиEMAILИспользование() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаОбычныеКаналыСвязиEMAILИспользование", "Доступность", ОбычныеКаналыСвязиEMAILИспользование); - - ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ВнешнееСоединениеКаталогИнформационнойБазы", - "Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый"); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ВнешнееСоединениеКластерСерверов", - "Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный"); - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ВнешнееСоединениеИмяИнформационнойБазы", - "Доступность", ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный"); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииВнешнееСоединениеВидАутентификации() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ВнешнееСоединениеИмяПользователя", - "Доступность", ВнешнееСоединениеВидАутентификации = 1); // 1с Предприятие - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ВнешнееСоединениеПароль", - "Доступность", ВнешнееСоединениеВидАутентификации = 1); // 1с Предприятие - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиАрхивироватьФайлы() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ГруппаОбычныеКаналыСвязиПарольАрхива", "Доступность", ОбычныеКаналыСвязиАрхивироватьФайлы); - - ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиИспользоватьПарольАрхива() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ОбычныеКаналыСвязиПарольАрхива", "Доступность", ОбычныеКаналыСвязиИспользоватьПарольДляАрхива); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла", - "Доступность", - ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриИзмененииОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения() - - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, - "ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения", - "Доступность", - ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения); - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийПереходов - -&НаКлиенте -Функция Подключаемый_СтраницаСпособНастройкиПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Элементы.БольшеНастроек.Видимость = БольшеНастроекВидимость; - - Если ЭтоПереходДалее Тогда - - Если МодельСервиса Тогда - НачатьПолучениеСпискаПриложенийДляПодключения(); - ПриИзмененииСпособНастройкиПодключения() - Иначе - ПриПереходеНаСтраницуВидыПодключения(); - КонецЕсли; - - Иначе - - Если МодельСервиса Тогда - ВыбратьНаилучшийСпособНастройкиПодключения(); - КонецЕсли; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаСпособНастройкиПодключения_ПриПереходеДалее(Отказ) - - Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" - Или СпособНастройкиПодключенияВСервисе = "МенеджерСервиса" Тогда - - ТекущиеДанные = Элементы.ПриложенияВСервисе.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите приложение из списка для продолжения настройки подключения.'"), - , "ПриложенияВСервисе", , Отказ); - Возврат Неопределено; - - ИначеЕсли ТекущиеДанные.НастройкаСинхронизацииНедоступна Тогда - - ПоказатьПредупреждение(, ТекущиеДанные.СообщениеОбОшибке); - Отказ = Истина; - Возврат Неопределено; - - Иначе - - ПрефиксОбласти = ТекущиеДанные.Префикс; - - НаименованиеКорреспондента = ТекущиеДанные.НаименованиеПриложения; - ПрефиксОбластиКорреспондента = ТекущиеДанные.ПрефиксКорреспондента; - - КонечнаяТочка = ТекущиеДанные.КонечнаяТочка; - КонечнаяТочкаКорреспондента = ТекущиеДанные.КонечнаяТочкаКорреспондента; - ОбластьДанныхКорреспондента = ТекущиеДанные.ОбластьДанных; - - Если СпособНастройкиПодключенияВСервисе = "ИнтернетАвто" Тогда - - ВидПодключения = "Интернет"; - - Иначе - - ВидПодключения = ""; - - ИнтернетВебАдрес = ""; - ИнтернетИмяПользователя = ""; - ИнтернетПароль = ""; - ИнтернетЗапомнитьПароль = Ложь; - - КонецЕсли; - - КонецЕсли; - - ИначеЕсли СпособНастройкиПодключенияВСервисе = "ИнтернетВручную" Тогда - - Если ВидПодключения = "ОбычныеКаналыСвязи" - И ЗагрузитьПараметрыПодключенияИзФайла Тогда - Если ПустаяСтрока(ИмяФайлаНастроекПодключенияДляЗагрузки) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите файл с настройками подключения.'"), - , "ИмяФайлаНастроекПодключенияДляЗагрузки", , Отказ); - Возврат Неопределено; - КонецЕсли; - ИначеЕсли ВидПодключения = "ПассивныйРежим" Тогда - Если ПустаяСтрока(ИмяФайлаНастроекXDTOКорреспондента) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите файл с настройками программы-корреспондента.'"), - , "ИмяФайлаНастроекXDTOКорреспондента", , Отказ); - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - - ОбластьДанныхКорреспондента = 0; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если (Не МодельСервиса И ВидПодключения <> "Интернет") - Или (МодельСервиса И СпособНастройкиПодключенияВСервисе <> "ИнтернетВручную") Тогда - ПропуститьСтраницу = Истина; - Возврат Неопределено; - КонецЕсли; - - Элементы.ПараметрыДоступаВИнтернет1.Видимость = ДоступнаНастройкаПараметровДоступаВИнтернет; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПараметрыПодключенияИнтернет_ПриПереходеДалее(Отказ) - - Если ВидПодключения <> "Интернет" Тогда - Возврат Неопределено; - КонецЕсли; - - Если ПустаяСтрока(ИнтернетВебАдрес) И СпособНастройкиПодключенияВСервисе <> "ИнтернетАвто" Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите адрес программы в Интернет.'"), - , "ИнтернетВебАдрес", , Отказ); - Возврат Неопределено; - КонецЕсли; - - ИнтернетВебАдрес = СокрЛП(ИнтернетВебАдрес); - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если МодельСервиса Тогда - ПропуститьСтраницу = Истина; - КонецЕсли; - - Если ВидПодключения <> "ВнешнееСоединение" Тогда - ПропуститьСтраницу = Истина; - КонецЕсли; - - ПриИзмененииВнешнееСоединениеВариантРаботыИнформационнойБазы(); - ПриИзмененииВнешнееСоединениеВидАутентификации(); - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПараметрыПодключенияВнешнееСоединение_ПриПереходеДалее(Отказ) - - Если ВидПодключения <> "ВнешнееСоединение" Тогда - Возврат Неопределено; - КонецЕсли; - - Если ВнешнееСоединениеВариантРаботыИнформационнойБазы = "Файловый" Тогда - - Если ПустаяСтрока(ВнешнееСоединениеКаталогИнформационнойБазы) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите каталог расположения информационной базы.'"), - , "ВнешнееСоединениеКаталогИнформационнойБазы", , Отказ); - Возврат Неопределено; - КонецЕсли; - - ИначеЕсли ВнешнееСоединениеВариантРаботыИнформационнойБазы = "КлиентСерверный" Тогда - - Если ПустаяСтрока(ВнешнееСоединениеКластерСерверов) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите имя кластера серверов 1С:Предприятия.'"), - , "ВнешнееСоединениеКластерСерверов", , Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ПустаяСтрока(ВнешнееСоединениеИмяИнформационнойБазы) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите имя информационной базы в кластере серверов 1С:Предприятия.'"), - , "ВнешнееСоединениеИмяИнформационнойБазы", , Отказ); - Возврат Неопределено; - КонецЕсли; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда - ПропуститьСтраницу = Истина; - Возврат Неопределено; - КонецЕсли; - - ДополнительныеПараметрыНастройки = Новый Структура; - ДополнительныеПараметрыНастройки.Вставить("ЭтоПереходДалее", ЭтоПереходДалее); - ОповещениеПродолжениеНастройки = Новый ОписаниеОповещения("ПродолжениеНастройкиПараметрыПодключенияОбычныеКаналыСвязи", - ЭтотОбъект, ДополнительныеПараметрыНастройки); - - Если ЭтоПереходДалее - И ЗагрузитьПараметрыПодключенияИзФайла Тогда - // Загрузка настроек из файла. - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Оповещение", ОповещениеПродолжениеНастройки); - - ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииПомещенияФайлаНастроекПодключенияДляЗагрузки", ЭтотОбъект, ДополнительныеПараметры); - - ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; - ПараметрыЗагрузки.Интерактивно = Ложь; - - ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершении, ПараметрыЗагрузки, ИмяФайлаНастроекПодключенияДляЗагрузки); - Иначе - Результат = Новый Структура; - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("СообщениеОбОшибке", ""); - - ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПараметрыПодключенияОбычныеКаналыСвязи_ПриПереходеДалее(Отказ) - - Если ВидПодключения <> "ОбычныеКаналыСвязи" Тогда - Возврат Неопределено; - КонецЕсли; - - Если Не ОбычныеКаналыСвязиFILEИспользование - И Не ОбычныеКаналыСвязиFTPИспользование - И Не ОбычныеКаналыСвязиEMAILИспользование Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите хотя бы один способ передачи файлов с данными.'"), - , "ОбычныеКаналыСвязиFILEИспользование", , Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ОбычныеКаналыСвязиАрхивироватьФайлы - И ОбычныеКаналыСвязиИспользоватьПарольДляАрхива - И ПустаяСтрока(ОбычныеКаналыСвязиПарольАрхива) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите пароль для архивации файлов.'"), - , "ОбычныеКаналыСвязиПарольАрхива", , Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ОбычныеКаналыСвязиFILEИспользование Тогда - - Если ПустаяСтрока(ОбычныеКаналыСвязиFILEКаталог) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите каталог для передачи файлов с данными.'"), - , "ОбычныеКаналыСвязиFILEКаталог", , Отказ); - Возврат Неопределено; - КонецЕсли; - - КонецЕсли; - - Если ОбычныеКаналыСвязиFTPИспользование Тогда - - Если ПустаяСтрока(ОбычныеКаналыСвязиFTPПуть) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите адрес каталога для передачи файлов с данными.'"), - , "ОбычныеКаналыСвязиFTPПуть", , Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ОбычныеКаналыСвязиFTPИспользоватьОграничениеРазмераФайла - И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите максимальный допустимый размер файлов с данными.'"), - , "ОбычныеКаналыСвязиFTPМаксимальныйДопустимыйРазмерФайла", , Отказ); - Возврат Неопределено; - КонецЕсли; - - КонецЕсли; - - Если ОбычныеКаналыСвязиEMAILИспользование Тогда - - Если Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILУчетнаяЗапись) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Выберите учетную запись электронной почты для отправки сообщений с данными.'"), - , "ОбычныеКаналыСвязиEMAILУчетнаяЗапись", , Отказ); - Возврат Неопределено; - КонецЕсли; - - Если ОбычныеКаналыСвязиEMAILИспользоватьОграничениеРазмераВложения - И Не ЗначениеЗаполнено(ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите максимальный допустимый размер почтового вложения.'"), - , "ОбычныеКаналыСвязиEMAILМаксимальныйДопустимыйРазмерВложения", , Отказ); - Возврат Неопределено; - КонецЕсли; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПроверкаПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - Если ВидПодключения = "ПассивныйРежим" Тогда - - ПропуститьСтраницу = Истина; - - ИначеЕсли ВидПодключения = "ВнешнееСоединение" - Или ВидПодключения = "Интернет" - Или МодельСервиса Тогда - - Элементы.ПанельПроверкаПодключения.ТекущаяСтраница = Элементы.СтраницаПроверкаПодключенияOnline; - - ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда - - Элементы.ПанельПроверкаПодключения.ТекущаяСтраница = Элементы.СтраницаПроверкаПодключенияOffline; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее) - - ПерейтиДалее = Ложь; - - Если ВидПодключения = "ПассивныйРежим" Тогда - - ПерейтиДалее = Истина; - - ИначеЕсли ВидПодключения = "ВнешнееСоединение" - Или ВидПодключения = "Интернет" Тогда - - Если ВидПодключения = "ВнешнееСоединение" - И ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - Оповещение = Новый ОписаниеОповещения("ЗарегистрироватьCOMСоединительЗавершение", ЭтотОбъект); - - СтруктураПодключения = Новый Структура; - СтруктураПодключения.Вставить("COMВариантРаботыИнформационнойБазы",ВнешнееСоединениеВариантРаботыИнформационнойБазы); - СтруктураПодключения.Вставить("COMКаталогИнформационнойБазы", ВнешнееСоединениеКаталогИнформационнойБазы); - СтруктураПодключения.Вставить("COMИмяСервера1СПредприятия", ВнешнееСоединениеКластерСерверов); - СтруктураПодключения.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия",ВнешнееСоединениеИмяИнформационнойБазы); - СтруктураПодключения.Вставить("COMАутентификацияОперационнойСистемы", ВнешнееСоединениеВидАутентификации); - СтруктураПодключения.Вставить("COMИмяПользователя", ВнешнееСоединениеИмяПользователя); - СтруктураПодключения.Вставить("COMПарольПользователя", ВнешнееСоединениеПароль); - - ОбменДаннымиКлиент.ПроверитьИЗарегистрироватьCOMСоединитель(СтруктураПодключения, Оповещение); - - Иначе - ПриНачалеПроверкиПодключенияOnline(); - КонецЕсли; - - ИначеЕсли МодельСервиса Тогда - - ПриНачалеПроверкиПодключенияВМоделиСервиса(); - - ИначеЕсли ВидПодключения = "ОбычныеКаналыСвязи" Тогда - - ПриНачалеПроверкиПодключенияOffline(); - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - - ДополнительныеПараметрыНастройки = Новый Структура; - ДополнительныеПараметрыНастройки.Вставить("ЭтоПереходДалее", ЭтоПереходДалее); - ОповещениеПродолжениеНастройки = Новый ОписаниеОповещения("ПродолжениеНастройкиОбщиеНастройкиСинхронизации", - ЭтотОбъект, ДополнительныеПараметрыНастройки); - - Если ЭтоПереходДалее - И ВидПодключения = "ПассивныйРежим" Тогда - // Загрузка настроек корреспондента из файла. - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Оповещение", ОповещениеПродолжениеНастройки); - - ОповещениеОЗавершении = Новый ОписаниеОповещения("ПриЗавершенииПомещенияФайлаНастроекXDTOКорреспондента", ЭтотОбъект, ДополнительныеПараметры); - - ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); - ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; - ПараметрыЗагрузки.Интерактивно = Ложь; - - ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершении, ПараметрыЗагрузки, ИмяФайлаНастроекXDTOКорреспондента); - Иначе - - Результат = Новый Структура; - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("СообщениеОбОшибке", ""); - - ВыполнитьОбработкуОповещения(ОповещениеПродолжениеНастройки, Результат); - - КонецЕсли; - - Если УзелКорреспондентаЕстьВЭтойБазе Или ЭтотУзелЕстьВКорреспонденте Тогда - - Элементы.ГруппаДублированиеНастроекСинхронизации.Видимость = Истина; - - Подсказки = Новый Массив; - - Если ЭтотУзелЕстьВКорреспонденте Тогда - ТекстПодсказки = НСтр("ru = '- Новый код для текущего узла информационной базы'"); - Подсказки.Добавить(ТекстПодсказки); - КонецЕсли; - - Если УзелКорреспондентаЕстьВЭтойБазе Тогда - ТекстПодсказки = НСтр("ru = '- Удаление узла ""%1""'"); - ТекстПодсказки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПодсказки, УзелДляУдаления); - Подсказки.Добавить(ТекстПодсказки); - КонецЕсли; - - Элементы.ДекорацияПояснениеКИсправить.Заголовок = СтрСоединить(Подсказки, Символы.ПС); - - Иначе - - Элементы.ГруппаДублированиеНастроекСинхронизации.Видимость = Ложь; - - КонецЕсли; - - Элементы.ГруппаВосстановлениеНастроекОбмена.Видимость = - ВосстановлениеНастроекОбмена = "ВосстановлениеСПредупреждением"; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОбщиеНастройкиСинхронизации_ПриПереходеДалее(Отказ) - - Если Не ВидПодключения = "ПассивныйРежим" Тогда - - Если ДоступноИзменениеНаименования - И ПустаяСтрока(Наименование) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите наименование этой программы.'"), - , "Наименование", , Отказ); - КонецЕсли; - - Если ДоступноИзменениеПрефикса - И ПустаяСтрока(Префикс) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите префикс этой программы.'"), - , "Префикс", , Отказ); - КонецЕсли; - - КонецЕсли; - - Если ДоступноИзменениеНаименованияКорреспондента - И ПустаяСтрока(НаименованиеКорреспондента) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите наименование программы-корреспондента.'"), - , "НаименованиеКорреспондента", , Отказ); - КонецЕсли; - - Если Не ВидПодключения = "ПассивныйРежим" Тогда - - Если ДоступноИзменениеПрефиксаКорреспондента - И ПустаяСтрока(ПрефиксКорреспондента) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите префикс программы-корреспондента.'"), - , "ПрефиксКорреспондента", , Отказ); - КонецЕсли; - - КонецЕсли; - - Если СохранитьПараметрыПодключенияВФайл - И ПустаяСтрока(ИмяФайлаНастроекПодключенияДляВыгрузки) Тогда - ОбщегоНазначенияКлиент.СообщитьПользователю( - НСтр("ru = 'Укажите путь к файлу для сохранения настроек подключения.'"), - , "ИмяФайлаНастроекПодключенияДляВыгрузки", , Отказ); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаСохранениеНастроекПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее) - - ПерейтиДалее = Ложь; - ПриНачалеСохраненияНастроекПодключения(); - - Возврат Неопределено; - -КонецФункции - -#КонецОбласти - -#Область ДополнительныеОбработчикиПереходов - -&НаКлиенте -Процедура ИзменитьПорядковыйНомерПерехода(Итератор) - - ОчиститьСообщения(); - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) - - ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); - - ПорядковыйНомерПерехода = Значение; - - Если ПорядковыйНомерПерехода < 1 Тогда - - ПорядковыйНомерПерехода = 1; - - КонецЕсли; - - ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); - -КонецПроцедуры - -&НаКлиенте -Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) - - // Выполняем обработчики событий перехода. - ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); - - // Устанавливаем отображение страниц. - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; - Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; - - Элементы.ПанельНавигации.ТекущаяСтраница.Доступность = Не (ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация); - - // Устанавливаем текущую кнопку по умолчанию. - КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); - - Если КнопкаДалее <> Неопределено Тогда - - КнопкаДалее.КнопкаПоУмолчанию = Истина; - - Иначе - - КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); - - Если КнопкаГотово <> Неопределено Тогда - - КнопкаГотово.КнопкаПоУмолчанию = Истина; - - КонецЕсли; - - КонецЕсли; - - Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда - - ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 0.1, Истина); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) - - // Обработчики событий переходов. - Если ЭтоПереходДалее Тогда - - СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); - - Если СтрокиПерехода.Количество() > 0 Тогда - СтрокаПерехода = СтрокиПерехода[0]; - - // Обработчик ПриПереходеДалее. - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) - И Не СтрокаПерехода.ДлительнаяОперация Тогда - - ИмяПроцедуры = "[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); - - Отказ = Ложь; - - Результат = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - Иначе - - СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); - - Если СтрокиПерехода.Количество() > 0 Тогда - СтрокаПерехода = СтрокиПерехода[0]; - - // Обработчик ПриПереходеНазад. - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) - И Не СтрокаПерехода.ДлительнаяОперация Тогда - - ИмяПроцедуры = "[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); - - Отказ = Ложь; - - Результат = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - Возврат; - КонецЕсли; - - // обработчик ПриОткрытии - Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда - - ИмяПроцедуры = "[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); - - Отказ = Ложь; - ПропуститьСтраницу = Ложь; - - Результат = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - ИначеЕсли ПропуститьСтраницу Тогда - - Если ЭтоПереходДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - Иначе - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьОбработчикДлительнойОперации() - - СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); - - Если СтрокиПереходаТекущие.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); - КонецЕсли; - - СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; - - // Обработчик ОбработкаДлительнойОперации. - Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда - - ИмяПроцедуры = "[ИмяОбработчика](Отказ, ПерейтиДалее)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); - - Отказ = Ложь; - ПерейтиДалее = Истина; - - Результат = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); - - Возврат; - - ИначеЕсли ПерейтиДалее Тогда - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - - Иначе - - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); - - Возврат; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) - - Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл - - Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда - - ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); - - Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда - - Возврат ЭлементФормыПоИмениКоманды; - - КонецЕсли; - - ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") - И СтрНайти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда - - Возврат Элемент; - - Иначе - - Продолжить; - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; - -КонецФункции - -#КонецОбласти - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form index e61a2731f..75816425d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Form.form @@ -194,6 +194,283 @@ ГруппаНастройка 121 + + ГруппаВыборТипаТранспорта + 167 + + ПанельВыборТипаТранспорта + 169 + + СтраницаВыборТипаТранспортаУспешно + 171 + + Декорация12 + 173 + true + true + + true + + + Декорация12РасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + Декорация12КонтекстноеМеню + 174 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница типа транспорта успешно</value> + + + СтраницаВыборТипаТранспортаУспешноРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВыборТипаТранспортаТекущий + 176 + + Декорация13 + 178 + true + true + + true + + + Декорация13РасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + Декорация13КонтекстноеМеню + 179 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница выбор типа транспорта текущий</value> + + + СтраницаВыборТипаТранспортаТекущийРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВыборТипаТранспортаПустой + 181 + + Декорация22 + 183 + true + true + + true + + + Декорация22РасширеннаяПодсказка + 185 + Label + true + true + + Left + + + + Декорация22КонтекстноеМеню + 184 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница выбор типа транспорта пустой</value> + + + СтраницаВыборТипаТранспортаПустойРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель выбор типа транспорта</value> + + + ПанельВыборТипаТранспортаРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Pages + + Auto + + + + ВыборТипаТранспорта + 186 + + <key>ru</key> + <value>Выбор типа подключения</value> + + true + true + + true + + + ВыборТипаТранспортаРасширеннаяПодсказка + 187 + + <key>ru</key> + <value>Для начала синхронизации данных необходимо указать, каким способом приложения будут подключаться друг к другу.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.ВыборТипаТранспорта + Normal + Auto + true + UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Выбратьтип подключения</value> + + + ГруппаВыборТипаТранспортаРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + Auto + Auto + + ГруппаНастройкаПодключения 16 @@ -423,7 +700,7 @@ 31 <key>ru</key> - <value>Для начала синхронизации данных необходимо указать, каким способом программы будут подключаться друг к другу.</value> + <value>Необходимо настроить параметры подключения к приложению-корреспонденту.</value> Label true @@ -700,7 +977,7 @@ 149 <key>ru</key> - <value>Система "%1" должна подтвердить запрос на настройку подключения из этой программы.</value> + <value>Система "%1" должна подтвердить запрос на настройку подключения из этого приложения.</value> Label true @@ -749,6 +1026,283 @@ Auto + + ГруппаОбщиеПараметры + 188 + + ПанельОбщиеПараметры + 190 + + СтраницаОбщиеПараметрыУспешно + 192 + + Декорация14 + 194 + true + true + + true + + + Декорация14РасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 195 + true + + 2 + true + 1 + true + + + CommonPicture.Успешно + + + + true + true + + true + + + <key>ru</key> + <value>Страница общие параметры успешно</value> + + + СтраницаОбщиеПараметрыУспешноРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОбщиеПараметрыТекущий + 197 + + Декорация23 + 199 + true + true + + true + + + Декорация23РасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + Декорация23КонтекстноеМеню + 200 + true + + 2 + true + 1 + true + + + StdPicture.BusinessProcessStart + + + + true + true + + true + + + <key>ru</key> + <value>Страница общие параметры текущий</value> + + + СтраницаОбщиеПараметрыТекущийРасширеннаяПодсказка + 198 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОбщиеПараметрыПустой + 202 + + Декорация24 + 204 + true + true + + true + + + Декорация24РасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + Декорация24КонтекстноеМеню + 205 + true + + 2 + true + 2 + true + + + true + true + + true + + + <key>ru</key> + <value>Страница общие параметры пустой</value> + + + СтраницаОбщиеПараметрыПустойРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель общие параметры</value> + + + ПанельОбщиеПараметрыРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + Pages + + Auto + + + + НастроитьОбщиеПараметры + 207 + + <key>ru</key> + <value>Настроить общие параметры синхронизации</value> + + true + true + + true + + + НастроитьОбщиеПараметрыРасширеннаяПодсказка + 208 + + <key>ru</key> + <value>Необходимо задать общие настройки синхронизации. Выполняется проверка узла и синхронизация параметров с корреспондентом.</value> + + Label + true + + Left + + + Hyperlink + Form.Command.НастроитьОбщиеПараметры + Normal + Auto + true + UserCmds + + Style.КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт + + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Общие параметры</value> + + + ГруппаОбщиеПараметрыРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + Auto + Auto + + ГруппаНастройкаПравил 32 @@ -978,7 +1532,7 @@ 52 <key>ru</key> - <value>Перед началом использования синхронизации данных требуется указать ограничения отправки данных, а также правила получения данных из другой программы (значения по умолчанию).</value> + <value>Перед началом использования синхронизации данных требуется указать ограничения отправки данных, а также правила получения данных из другого приложения (значения по умолчанию).</value> Label true @@ -1256,7 +1810,7 @@ <key>ru</key> <value>Создание начального образа может занять длительное время. -После создания необходимо развернуть информационную базу из созданного образа и выполнить первоначальный запуск программы для завершения настройки. Возможно создать начальный образ позднее. Для этого необходимо открыть параметры настроенной синхронизации и выполнить команду «Создание начального образа подчиненного узла распределенной информационной базы».</value> +После создания необходимо развернуть информационную базу из созданного образа и выполнить первоначальный запуск приложения для завершения настройки. Возможно создать начальный образ позднее. Для этого необходимо открыть параметры настроенной синхронизации и выполнить команду "Создание начального образа подчиненного узла распределенной информационной базы".</value> Label true @@ -1533,7 +2087,7 @@ 130 <key>ru</key> - <value>Если учет ведется в обеих программах, перед запуском синхронизации следует выполнить сопоставление данных. Это позволит избежать появления дублирующихся элементов справочников, которые независимо друг от друга были введены в обеих программах, например, с одинаковыми наименованиями. С помощью сопоставления можно указать, какие данные являются одинаковыми в двух программах. После чего можно будет выполнить загрузку с учетом настроенных сопоставлений.</value> + <value>Если учет ведется в обоих приложениях, перед запуском синхронизации следует выполнить сопоставление данных. Это позволит избежать появления дублирующихся элементов справочников, которые независимо друг от друга были введены в обоих приложениях, например, с одинаковыми наименованиями. С помощью сопоставления можно указать, какие данные являются одинаковыми в двух приложениях. После чего можно будет выполнить загрузку с учетом настроенных сопоставлений.</value> Label true @@ -1811,8 +2365,9 @@ 94 <key>ru</key> - <value>Будет произведена выгрузка данных из этой программы. Сразу после завершения настройки синхронизации возможно будет выполнить загрузку данных в другой программе и указать, какие данные являются одинаковыми для двух синхронизирующихся программ. -Выгрузку данных можно выполнить позднее из списка настроенных синхронизаций данных.</value> + <value>Будет произведена выгрузка данных из этого приложения. Сразу после завершения настройки синхронизации, можно будет выполнить загрузку данных в другом приложении и указать, какие данные являются одинаковыми для двух синхронизируемых приложений. +Выгрузку данных можно выполнить позднее из списка настроенных синхронизаций данных. +</value> Label true @@ -1938,7 +2493,7 @@
          - ИмяПланаОбмена + УдалитьИмяПланаОбмена 2 String @@ -1952,7 +2507,7 @@ - ИдентификаторНастройки + УдалитьИдентификаторНастройки 3 String @@ -2156,7 +2711,7 @@ - УзелОбмена + УдалитьУзелОбмена 13 ExchangePlanRef @@ -2356,19 +2911,6 @@ true - - ОбменДаннымиСВнешнейСистемой - 30 - - Boolean - - - true - - - true - - ПараметрыПодключенияВнешнейСистемы 31 @@ -2405,10 +2947,10 @@ - ВидТранспорта - 6 + Объект + 19 - EnumRef.ВидыТранспортаСообщенийОбмена + DataProcessorObject.ПомощникСозданияОбменаДанными true @@ -2416,6 +2958,7 @@ true +
          true
          ПодробноеОписаниеСинхронизацииДанных @@ -2574,8 +3117,53 @@ Auto Auto + + ВыборТипаТранспорта + + <key>ru</key> + <value>Выбор типа транспорта</value> + + 6 + + ru + Выбор типа транспорта + + + true + + + + ВыборТипаТранспорта + + + Auto + Auto + + + НастроитьОбщиеПараметры + + <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 ea9348d49..c85343b4b 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НастройкаСинхронизации/Module.bsl @@ -10,7 +10,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + // Проверка, что форма открыта с нужными параметрами Если Не Параметры.Свойство("ИмяПланаОбмена") Тогда @@ -46,17 +46,17 @@ СсылкаСуществует = Ложь; НастройкаЗавершена = Ложь; - Если ЗначениеЗаполнено(УзелОбмена) Тогда - НастройкаЗавершена = НастройкаСинхронизацииЗавершена(УзелОбмена, СсылкаСуществует); + Если ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) Тогда + НастройкаЗавершена = НастройкаСинхронизацииЗавершена(Объект.УзелИнформационнойБазы, СсылкаСуществует); Если Не СсылкаСуществует Тогда // Закрытие формы при удалении настройки синхронизации. Возврат; КонецЕсли; КонецЕсли; - Если Не ЗначениеЗаполнено(УзелОбмена) + Если Не ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) Или Не НастройкаЗавершена - Или (НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не НачальныйОбразСоздан(УзелОбмена))Тогда + Или (НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не НачальныйОбразСоздан(Объект.УзелИнформационнойБазы))Тогда ТекстПредупреждения = НСтр("ru = 'Настройка синхронизации данных еще не завершена. |Завершить работу с помощником? Настройку можно будет продолжить позже.'"); ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияПроизвольнойФормы( @@ -78,6 +78,19 @@ #Область ОбработчикиКомандФормы +&НаКлиенте +Процедура ВыборТипаТранспорта(Команда) + + ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ИдентификаторТранспорта, ИдентификаторНастройки, ВариантРаботыМастера"); + ЗаполнитьЗначенияСвойств(ПараметрыФормы, Объект); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ВыборТипаТранспортаЗавершение", ЭтотОбъект); + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ВыборТипаТранспорта", + ПараметрыФормы, ЭтаФорма,,,, ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + &НаКлиенте Процедура ПодробноеОписаниеСинхронизацииДанных(Команда) @@ -87,72 +100,91 @@ &НаКлиенте Процедура НастроитьПараметрыПодключения(Команда) + + ПолноеИмяФормыНастройки = ТранспортСообщенийОбменаВызовСервера.ПолноеИмяФормыПервойНастройки(Объект.ИдентификаторТранспорта); - Если ЭтоОбменСПриложениемВСервисе - И (Не НастройкаНовойСинхронизации - Или Не ТекущийЭтапНастройки = "НастройкаПодключения") Тогда - СтрокаПредупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Настройка подключения к ""%1"" уже выполнена. - |Редактирование параметров подключения не предусмотрено.'"), УзелОбмена); - ПоказатьПредупреждение(, СтрокаПредупреждение); + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.НастройкиПодключенияПоОбработке(Объект); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиПодключения", НастройкиПодключения); + ПараметрыФормы.Вставить("ИдентификаторНастройки", НастройкиПодключения.ИдентификаторНастройки); + ПараметрыФормы.Вставить("НастройкиТранспорта", НастройкиПодключения.НастройкиТранспорта); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ИдентификаторТранспорта", Объект.ИдентификаторТранспорта); + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПараметрыПодключенияЗавершение", ЭтотОбъект, ДополнительныеПараметры); + + ОткрытьФорму(ПолноеИмяФормыНастройки, ПараметрыФормы,,,,, + ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьОбщиеПараметры(Команда) + + Если ЗначениеЗаполнено(Объект.ДанныеАутентификации) Тогда + НастроитьОбщиеПараметрыПродолжение(); Возврат; КонецЕсли; - ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПараметрыПодключенияЗавершение", ЭтотОбъект); + ПараметрыАутентификации = ТранспортСообщенийОбменаКлиент.ПараметрыАутентификации(); + ПараметрыАутентификации.Корреспондент = Объект.УзелИнформационнойБазы; + ПараметрыАутентификации.ИмяПланаОбмена = Объект.ИмяПланаОбмена; + ПараметрыАутентификации.ИдентификаторТранспорта = Объект.ИдентификаторТранспорта; + ПараметрыАутентификации.НастройкиТранспорта = Объект.НастройкиТранспорта; - Если ОбменДаннымиСВнешнейСистемой Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда - Контекст = Новый Структура; - Контекст.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - Контекст.Вставить("ПараметрыПодключения", ПараметрыПодключенияВнешнейСистемы); - Контекст.Вставить("Корреспондент", УзелОбмена); - - Если НастройкаНовойСинхронизации - И ТекущийЭтапНастройки = "НастройкаПодключения" Тогда - Контекст.Вставить("Режим", "НовоеПодключение"); - Иначе - Контекст.Вставить("Режим", "РедактированиеПараметровПодключения"); - КонецЕсли; - - Отказ = Ложь; - ИмяФормыПомощника = ""; - ПараметрыПомощника = Новый Структура; - - МодульОбменДаннымиСВнешнимиСистемамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемамиКлиент"); - МодульОбменДаннымиСВнешнимиСистемамиКлиент.ПередНастройкойПараметровПодключения( - Контекст, Отказ, ИмяФормыПомощника, ПараметрыПомощника); - - Если Не Отказ Тогда - ОткрытьФорму(ИмяФормыПомощника, - ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - КонецЕсли; - КонецЕсли; - Возврат; - ИначеЕсли ТекущийЭтапНастройки = "НастройкаПодключения" Тогда - ПараметрыПомощника = Новый Структура; - ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ПараметрыПомощника.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); - КонецЕсли; - - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаПодключения", - ПараметрыПомощника, ЭтотОбъект, , , , ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - Иначе - Отбор = Новый Структура("Корреспондент", УзелОбмена); - ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелОбмена); - - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ЭтотОбъект); + ТребуетсяАутентификация = Ложь; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьОбщиеПараметрыЗавершениеАутентификации", ЭтотОбъект); + ТранспортСообщенийОбменаКлиент.НачалоАутентификации(ПараметрыАутентификации, ТребуетсяАутентификация, ОповещениеОЗакрытии); + + Если НЕ ТребуетсяАутентификация Тогда + НастроитьОбщиеПараметрыПродолжение(); КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПолучитьПодтверждениеПодключения(Команда) +Процедура НастроитьОбщиеПараметрыЗавершениеАутентификации(ДанныеАутентификации, ДополнительныеПараметры) Экспорт - Если Не ОбменДаннымиСВнешнейСистемой - Или ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + Если НЕ ЗначениеЗаполнено(ДанныеАутентификации) Тогда + Возврат; + КонецЕсли; + + Объект.ДанныеАутентификации = ДанныеАутентификации; + + НастроитьОбщиеПараметрыПродолжение(); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьОбщиеПараметрыПродолжение() + + ПараметрыФормы = Новый Структура; + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.СтруктураНастроекПодключения(); + ЗаполнитьЗначенияСвойств(НастройкиПодключения, Объект); + + НастройкиПодключения.ИмяПланаОбмена = Объект.ИмяПланаОбмена; + НастройкиПодключения.ИдентификаторНастройки = Объект.ИдентификаторНастройки; + + ПараметрыФормы.Вставить("НастройкиПодключения", НастройкиПодключения); + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ПараметрыФормы.Вставить("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); + КонецЕсли; + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастройкаОбщихПараметровЗавершение", ЭтотОбъект); + + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.НастройкаОбщихПараметров", + ПараметрыФормы, ЭтаФорма,,,, ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьПодтверждениеПодключения(Команда) + + Если ПолученыНастройкиXDTOКорреспондента(Объект.УзелИнформационнойБазы) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Подключение подтверждено.'")); Возврат; КонецЕсли; @@ -160,7 +192,7 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда Контекст = Новый Структура; Контекст.Вставить("Режим", "ПодтверждениеПодключения"); - Контекст.Вставить("Корреспондент", УзелОбмена); + Контекст.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); Контекст.Вставить("ИдентификаторНастройки", "ИдентификаторНастройки"); Контекст.Вставить("ПараметрыПодключения", ПараметрыПодключенияВнешнейСистемы); @@ -208,7 +240,7 @@ &НаКлиенте Процедура СоздатьНачальныйОбразРИБ(Команда) - ПараметрыПомощника = Новый Структура("Ключ, Узел", УзелОбмена, УзелОбмена); + ПараметрыПомощника = Новый Структура("Ключ, Узел", Объект.УзелИнформационнойБазы, Объект.УзелИнформационнойБазы); ОповещениеОЗакрытии = Новый ОписаниеОповещения("СоздатьНачальныйОбразРИБЗавершение", ЭтотОбъект); ОткрытьФорму(ИмяФормыСозданияНачальногоОбраза, @@ -233,7 +265,7 @@ ВспомогательныеПараметры.Вставить("ПараметрыПомощника", ПараметрыПомощника); ВспомогательныеПараметры.Вставить("ОповещениеОЗакрытии", ОповещениеПродолжения); - ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(УзелОбмена, + ОбменДаннымиКлиент.ОткрытьПомощникСопоставленияОбъектовОбработкаКоманды(Объект.УзелИнформационнойБазы, ЭтотОбъект, ВспомогательныеПараметры); КонецПроцедуры @@ -245,14 +277,50 @@ ПередВыполнениемНачальнойВыгрузки(Отказ); Если Отказ Тогда - Возврат; - КонецЕсли; + Если ЗначениеЗаполнено(Объект.ДанныеАутентификации) Тогда + ВыполнитьНачальнуюВыгрузкуДанныхПродолжение(); + Возврат; + КонецЕсли; + + ПараметрыАутентификации = ТранспортСообщенийОбменаКлиент.ПараметрыАутентификации(); + ПараметрыАутентификации.Корреспондент = Объект.УзелИнформационнойБазы; + ПараметрыАутентификации.ИмяПланаОбмена = Объект.ИмяПланаОбмена; + ПараметрыАутентификации.ИдентификаторТранспорта = Объект.ИдентификаторТранспорта; + ПараметрыАутентификации.НастройкиТранспорта = Объект.НастройкиТранспорта; + + ТребуетсяАутентификация = Ложь; + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ВыполнитьНачальнуюВыгрузкуДанныхЗавершениеАутентификации", ЭтотОбъект); + ТранспортСообщенийОбменаКлиент.НачалоАутентификации(ПараметрыАутентификации, ТребуетсяАутентификация, ОповещениеОЗакрытии); + + Если НЕ ТребуетсяАутентификация Тогда + ВыполнитьНачальнуюВыгрузкуДанныхПродолжение(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьНачальнуюВыгрузкуДанныхЗавершениеАутентификации(ДанныеАутентификации, ДополнительныеПараметры) Экспорт + + Если НЕ ЗначениеЗаполнено(ДанныеАутентификации) Тогда + Возврат; + КонецЕсли; + + Объект.ДанныеАутентификации = ДанныеАутентификации; + + ВыполнитьНачальнуюВыгрузкуДанныхПродолжение(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьНачальнуюВыгрузкуДанныхПродолжение() + ПараметрыПомощника = Новый Структура; - ПараметрыПомощника.Вставить("УзелОбмена", УзелОбмена); + ПараметрыПомощника.Вставить("УзелОбмена", Объект.УзелИнформационнойБазы); ПараметрыПомощника.Вставить("НачальнаяВыгрузка"); + ПараметрыПомощника.Вставить("ДанныеАутентификации", Объект.ДанныеАутентификации); Если МодельСервиса Тогда ПараметрыПомощника.Вставить("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); @@ -272,114 +340,8 @@ &НаКлиенте Процедура ПередВыполнениемНачальнойВыгрузки(Отказ) - МассивЗначений = Новый Массив(3); - МассивЗначений[0] = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.COM"); - МассивЗначений[1] = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WS"); - // WSПассивныйРежим - проверять не нужно, так как при пассивном соединении управляющий корреспондент самостоятельно - // получить сведения при соединении. - - ВидТранспортаПоддерживаетПрямоеПодключение = (МассивЗначений.Найти(ВидТранспорта) <> Неопределено); - Если НЕ ВидТранспортаПоддерживаетПрямоеПодключение - ИЛИ ПоддерживаетсяСопоставлениеДанных Тогда - - Возврат; - - КонецЕсли; - - РезультатПроверки = НастройкаКорреспондентаЗавершена(УзелОбмена, ВидТранспорта); - Если НЕ РезультатПроверки.НастройкаЗавершена Тогда - - Отказ = Истина; - ПоказатьПредупреждение(Неопределено, РезультатПроверки.СообщениеОбОшибке); - - КонецЕсли; - КонецПроцедуры -&НаСервереБезКонтекста -Функция НастройкаКорреспондентаЗавершена(УзелОбмена, ВидТранспорта) - - ДанныеПроверки = Новый Структура; - ДанныеПроверки.Вставить("СообщениеОбОшибке", ""); - ДанныеПроверки.Вставить("СообщениеОбОшибкеПользователю", ""); - ДанныеПроверки.Вставить("НастройкаЗавершена", Ложь); - ДанныеПроверки.Вставить("ПолученыДанныеДляСопоставления", Ложь); - - УстановитьПривилегированныйРежим(Истина); - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ПараметрыПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена, Неопределено); - - ЕстьПодключение = ОбменДаннымиВебСервис.ЕстьПодключениеККорреспонденту(УзелОбмена, - ПараметрыПодключения, ДанныеПроверки.СообщениеОбОшибкеПользователю, ДанныеПроверки.НастройкаЗавершена, ДанныеПроверки.ПолученыДанныеДляСопоставления); - - НаименованиеКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОбмена, "Наименование"); - - Если НЕ ЕстьПодключение Тогда - - ШаблонСообщения = НСтр("ru = 'Не удалось подключиться к приложению %1, по причине ""%2"". - |Убедитесь, что: - |- введен правильный пароль; - |- указан корректный адрес для подключения; - |- приложение доступно по указанному в настройках адресу; - |- настройка синхронизации не была удалена в приложении в Интернете. - |Повторите попытку синхронизации.'", ОбщегоНазначения.КодОсновногоЯзыка()); - ДанныеПроверки.СообщениеОбОшибке = СтрШаблон(ШаблонСообщения, НаименованиеКорреспондента, - ДанныеПроверки.СообщениеОбОшибкеПользователю); - - ИначеЕсли НЕ ДанныеПроверки.НастройкаЗавершена Тогда - - ШаблонСообщения = НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и завершите в ней настройку синхронизации. - |Выполнение обмена данными отменено.'", ОбщегоНазначения.КодОсновногоЯзыка()); - ДанныеПроверки.СообщениеОбОшибке = СтрШаблон(ШаблонСообщения,НаименованиеКорреспондента); - - КонецЕсли; - - Иначе - - ВнешнееСоединение = ОбменДаннымиПовтИсп.ПолучитьВнешнееСоединениеДляУзлаИнформационнойБазы(УзелОбмена, ДанныеПроверки.СообщениеОбОшибке); - Если ВнешнееСоединение = Неопределено Тогда - - Возврат ДанныеПроверки; - - КонецЕсли; - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); - - ЭтотУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена); - КодУзла = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(ЭтотУзелПланаОбмена); - - ВнешнееСоединениеУзелПланаОбмена = ВнешнееСоединение.ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла); - Если ВнешнееСоединениеУзелПланаОбмена = Неопределено Тогда - - ШаблонСообщения = НСтр("ru = 'Ошибка. В программе ""%1"" не найдена настройка синхронизации для этой программы. - |Выполнение обмена данными отменено.'", ОбщегоНазначения.КодОсновногоЯзыка()); - ДанныеПроверки.СообщениеОбОшибке = СтрШаблон(ШаблонСообщения, НаименованиеКорреспондента); - - КонецЕсли; - - ДанныеПроверки.НастройкаЗавершена = ВнешнееСоединение.ОбменДаннымиСервер.НастройкаСинхронизацииЗавершена(ВнешнееСоединениеУзелПланаОбмена); - Если НЕ ДанныеПроверки.НастройкаЗавершена Тогда - - ШаблонСообщения = НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и завершите в ней настройку синхронизации. - |Выполнение обмена данными отменено.'", ОбщегоНазначения.КодОсновногоЯзыка()); - ДанныеПроверки.СообщениеОбОшибке = СтрШаблон(ШаблонСообщения, НаименованиеКорреспондента); - - КонецЕсли; - - КонецЕсли; - - Возврат ДанныеПроверки; - -КонецФункции - -&НаСервереБезКонтекста -Функция ПрочитатьВидТранспортаДляУзла(УзелОбмена) - - Возврат РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); - -КонецФункции - &НаСервереБезКонтекста Функция СостояниеНастройкиСинхронизации(УзелОбмена) @@ -412,57 +374,89 @@ &НаКлиенте Процедура НастроитьПараметрыПодключенияЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт - Если РезультатЗакрытия <> Неопределено - И ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда + Если РезультатЗакрытия = Неопределено Тогда + Возврат; + КонецЕсли; + + Объект.НастройкиТранспорта = РезультатЗакрытия; + + Если ТекущийЭтапНастройки = "НастройкаПодключения" Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыборТипаТранспортаЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия = Неопределено Тогда + Возврат; + КонецЕсли; - Если РезультатЗакрытия.Свойство("УзелОбмена") Тогда - УзелОбмена = РезультатЗакрытия.УзелОбмена; - КлючУникальности = ИмяПланаОбмена + "_" + ИдентификаторНастройки + "_" + УзелОбмена.УникальныйИдентификатор(); - - Если ОбменДаннымиСВнешнейСистемой Тогда - ОбновитьПараметрыПодключенияВнешнейСистемы(УзелОбмена, ПараметрыПодключенияВнешнейСистемы); - КонецЕсли; - - Если ЗначениеЗаполнено(УзелОбмена) Тогда - - ВидТранспорта = ПрочитатьВидТранспортаДляУзла(УзелОбмена); - - КонецЕсли; - + Для Каждого КлючИЗначение Из РезультатЗакрытия Цикл + Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда + Объект[КлючИЗначение.Ключ] = КлючИЗначение.Значение; КонецЕсли; + КонецЦикла; + + ЕстьНастройкиТранспорта = ЗначениеЗаполнено(Объект.НастройкиТранспорта); + + Если ТекущийЭтапНастройки = "ВыборТипаТранспорта" Тогда - Если МодельСервиса Тогда - РезультатЗакрытия.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); - РезультатЗакрытия.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); - КонецЕсли; + ПерейтиКСледующемуЭтапуНастройки(); - Если РезультатЗакрытия.Свойство("ЕстьДанныеДляСопоставления") - И РезультатЗакрытия.ЕстьДанныеДляСопоставления Тогда - ПолученыДанныеДляСопоставления = Истина; - КонецЕсли; - - ЗаполнитьТаблицуЭтаповНастройки(); - ОбновитьОтображениеТекущегоСостоянияНастройки(); - - Если ТекущийЭтапНастройки = "НастройкаПодключения" Тогда + Если Объект.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" + И ЕстьНастройкиТранспорта + И НЕ НастройкаУзлаВКорреспондентеНаСервере() Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; КонецЕсли; КонецПроцедуры -&НаСервереБезКонтекста -Процедура ОбновитьПараметрыПодключенияВнешнейСистемы(УзелОбмена, ПараметрыПодключенияВнешнейСистемы) +&НаСервере +Функция НастройкаУзлаВКорреспондентеНаСервере() - ПараметрыПодключенияВнешнейСистемы = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаВнешнейСистемы(УзелОбмена); + Возврат ТранспортСообщенийОбмена.ПараметрТранспорта( + Объект.ИдентификаторТранспорта, "НастройкаУзлаВКорреспонденте"); + +КонецФункции + +&НаКлиенте +Процедура НастройкаОбщихПараметровЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия = Неопределено Тогда + Возврат; + КонецЕсли; + + Объект.УзелИнформационнойБазы = РезультатЗакрытия.УзелОбмена; + + Если ЗначениеЗаполнено(Объект.ДанныеАутентификации) Тогда + ТранспортСообщенийОбменаВызовСервера.УстановитьПарольСинхронизацииДанных( + Объект.УзелИнформационнойБазы, Объект.ДанныеАутентификации); + КонецЕсли; + + Если РезультатЗакрытия.Свойство("ЕстьДанныеДляСопоставления") + И РезультатЗакрытия.ЕстьДанныеДляСопоставления Тогда + ПолученыДанныеДляСопоставления = Истина; + КонецЕсли; + + ЗаполнитьТаблицуЭтаповНастройки(); + ОбновитьОтображениеТекущегоСостоянияНастройки(); + + Если ТекущийЭтапНастройки = "ОбщиеПараметры" Тогда + ПерейтиКСледующемуЭтапуНастройки(); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПолучитьПодтверждениеПодключенияЗавершение(Результат, ДополнительныеПараметры) Экспорт - Если ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + Если ПолученыНастройкиXDTOКорреспондента(Объект.УзелИнформационнойБазы) Тогда ПерейтиКСледующемуЭтапуНастройки(); КонецЕсли; @@ -471,12 +465,12 @@ &НаКлиенте Процедура ВыполнитьЗагрузкуНастроекXDTOПриНеобходимости(ПрерватьНастройку, ОповещениеПродолжения) - СостояниеНастройки = СостояниеНастройкиСинхронизации(УзелОбмена); + СостояниеНастройки = СостояниеНастройкиСинхронизации(Объект.УзелИнформационнойБазы); Если Не СостояниеНастройки.НастройкаСинхронизацииЗавершена - И Не СостояниеНастройки.ПолученыНастройкиXDTOКорреспондента Тогда + И Не СостояниеНастройки.ПолученыНастройкиXDTOКорреспондента Тогда ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("УзелОбмена", УзелОбмена); + ПараметрыЗагрузки.Вставить("УзелОбмена", Объект.УзелИнформационнойБазы); ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.ЗагрузкаНастроекXDTO", ПараметрыЗагрузки, ЭтотОбъект, , , , ОповещениеПродолжения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -508,9 +502,9 @@ ОповещениеОЗакрытии = Новый ОписаниеОповещения("НастроитьПравилаОтправкиИПолученияДанныхЗавершение", ЭтотОбъект); ПараметрыПроверки = Новый Структура; - ПараметрыПроверки.Вставить("Корреспондент", УзелОбмена); - ПараметрыПроверки.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - ПараметрыПроверки.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + ПараметрыПроверки.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); + ПараметрыПроверки.Вставить("ИмяПланаОбмена", Объект.ИмяПланаОбмена); + ПараметрыПроверки.Вставить("ИдентификаторНастройки", Объект.ИдентификаторНастройки); НастройкаВыполнена = Ложь; ПередНастройкойСинхронизацииДанных(ПараметрыПроверки, НастройкаВыполнена, ИмяФормыПомощникаНастройкиСинхронизацииДанных); @@ -524,13 +518,13 @@ ПараметрыПомощника = Новый Структура; Если ПустаяСтрока(ИмяФормыПомощникаНастройкиСинхронизацииДанных) Тогда - ПараметрыПомощника.Вставить("Ключ", УзелОбмена); + ПараметрыПомощника.Вставить("Ключ", Объект.УзелИнформационнойБазы); ПараметрыПомощника.Вставить("ИмяФормыПомощника", "ПланОбмена.[ИмяПланаОбмена].ФормаОбъекта"); ПараметрыПомощника.ИмяФормыПомощника = СтрЗаменить(ПараметрыПомощника.ИмяФормыПомощника, - "[ИмяПланаОбмена]", ИмяПланаОбмена); + "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); Иначе - ПараметрыПомощника.Вставить("УзелОбмена", УзелОбмена); + ПараметрыПомощника.Вставить("УзелОбмена", Объект.УзелИнформационнойБазы); ПараметрыПомощника.Вставить("ИмяФормыПомощника", ИмяФормыПомощникаНастройкиСинхронизацииДанных); КонецЕсли; @@ -543,7 +537,7 @@ Процедура НастроитьПравилаОтправкиИПолученияДанныхЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт Если ТекущийЭтапНастройки = "НастройкаПравил" - И НастройкаСинхронизацииЗавершена(УзелОбмена) Тогда + И НастройкаСинхронизацииЗавершена(Объект.УзелИнформационнойБазы) Тогда Оповестить("Запись_УзелПланаОбмена"); Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда ОбновитьИнтерфейс(); @@ -557,7 +551,7 @@ Процедура ВыполнитьСопоставлениеИЗагрузкуДанныхПродолжение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт Если ТекущийЭтапНастройки = "СопоставлениеИЗагрузка" - И ВыполненаЗагрузкаДанныхДляСопоставления(УзелОбмена) Тогда + И ВыполненаЗагрузкаДанныхДляСопоставления(Объект.УзелИнформационнойБазы) Тогда ПерейтиКСледующемуЭтапуНастройки(); КонецЕсли; @@ -567,7 +561,7 @@ Процедура СоздатьНачальныйОбразРИБЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт Если ТекущийЭтапНастройки = "НачальныйОбразРИБ" - И НачальныйОбразСоздан(УзелОбмена) Тогда + И НачальныйОбразСоздан(Объект.УзелИнформационнойБазы) Тогда ПерейтиКСледующемуЭтапуНастройки(); КонецЕсли; @@ -579,7 +573,7 @@ Процедура ВыполнитьНачальнуюВыгрузкуДанныхЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт Если ТекущийЭтапНастройки = "НачальнаяВыгрузкаДанных" - И РезультатЗакрытия = УзелОбмена Тогда + И РезультатЗакрытия = Объект.УзелИнформационнойБазы Тогда ПерейтиКСледующемуЭтапуНастройки(); КонецЕсли; @@ -589,7 +583,7 @@ Процедура ОбновитьОтображениеТекущегоСостоянияНастройки() // Видимость элементов настройки. - Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл + Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ЭтапНастройки.Группа, "Видимость", ЭтапНастройки.Используется); КонецЦикла; @@ -598,7 +592,7 @@ Для Каждого ЭтапНастройки Из ЭтапыНастройки Цикл Элементы[ЭтапНастройки.Группа].Доступность = Истина; Элементы[ЭтапНастройки.Кнопка].Шрифт = ОбщегоНазначенияКлиент.ШрифтСтиля("КомандаПомощникаНастройкиСинхронизацииОбычнаяШрифт"); - + // Зеленый флажок только для основных этапов настройки. Если ЭтапНастройки.Основное Тогда Элементы[ЭтапНастройки.Панель].ТекущаяСтраница = Элементы[ЭтапНастройки.СтраницаУспешно]; @@ -634,7 +628,17 @@ КонецЦикла; КонецЕсли; - + + ЭтапыПослеПодключения = "НастройкаПравил,НачальныйОбразРИБ,СопоставлениеИЗагрузка,НачальнаяВыгрузкаДанных,ПодтверждениеПодключения"; + Если СтрНайти(ЭтапыПослеПодключения, ТекущийЭтапНастройки) > 0 Тогда + + Элементы.ВыборТипаТранспорта.Доступность = Ложь; + Элементы.НастроитьПараметрыПодключения.Доступность = Ложь; + Элементы.ПолучитьПодтверждениеПодключения.Доступность = Ложь; + Элементы.НастроитьОбщиеПараметры.Доступность = Ложь; + + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -658,13 +662,13 @@ Если ТекущийЭтапНастройки = "НастройкаПравил" Тогда ПараметрыПроверки = Новый Структура; - ПараметрыПроверки.Вставить("Корреспондент", УзелОбмена); - ПараметрыПроверки.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); - ПараметрыПроверки.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + ПараметрыПроверки.Вставить("Корреспондент", Объект.УзелИнформационнойБазы); + ПараметрыПроверки.Вставить("ИмяПланаОбмена", Объект.ИмяПланаОбмена); + ПараметрыПроверки.Вставить("ИдентификаторНастройки", Объект.ИдентификаторНастройки); - НастройкаВыполнена = НастройкаСинхронизацииЗавершена(УзелОбмена); + НастройкаВыполнена = НастройкаСинхронизацииЗавершена(Объект.УзелИнформационнойБазы); Если Не НастройкаВыполнена Тогда - Если Не НастройкаXDTO Или ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда + Если Не НастройкаXDTO Или ПолученыНастройкиXDTOКорреспондента(Объект.УзелИнформационнойБазы) Тогда ПередНастройкойСинхронизацииДанных(ПараметрыПроверки, НастройкаВыполнена, ИмяФормыПомощникаНастройкиСинхронизацииДанных); КонецЕсли; КонецЕсли; @@ -745,7 +749,6 @@ Процедура ИнициализироватьРеквизитыФормы() Параметры.Свойство("ОписаниеВариантаНастройки", ОписаниеВариантаНастройки); - Параметры.Свойство("ОбменДаннымиСВнешнейСистемой", ОбменДаннымиСВнешнейСистемой); НастройкаНовойСинхронизации = Параметры.Свойство("НастройкаНовойСинхронизации"); ПродолжениеНастройкиВПодчиненномУзлеРИБ = Параметры.Свойство("ПродолжениеНастройкиВПодчиненномУзлеРИБ"); @@ -754,67 +757,122 @@ И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(); Если НастройкаНовойСинхронизации Тогда - ИмяПланаОбмена = Параметры.ИмяПланаОбмена; - ИдентификаторНастройки = Параметры.ИдентификаторНастройки; + Объект.ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + Объект.ИдентификаторНастройки = Параметры.ИдентификаторНастройки; - Если ОбменДаннымиСВнешнейСистемой Тогда - Параметры.Свойство("ПараметрыПодключенияВнешнейСистемы", ПараметрыПодключенияВнешнейСистемы); - Иначе - Если Не ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - ИмяПланаОбменаРИБ = ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя; - - ПродолжениеНастройкиВПодчиненномУзлеРИБ = (ИмяПланаОбмена = ИмяПланаОбменаРИБ) - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); - КонецЕсли; - КонецЕсли; - - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда - ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ(); - УзелОбмена = ОбменДаннымиСервер.ГлавныйУзел(); + Если Не ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда + ИмяПланаОбменаРИБ = ОбменДаннымиСервер.ГлавныйУзел().Метаданные().Имя; + + ПродолжениеНастройкиВПодчиненномУзлеРИБ = (Объект.ИмяПланаОбмена = ИмяПланаОбменаРИБ) + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); КонецЕсли; КонецЕсли; - Иначе - УзелОбмена = Параметры.УзелОбмена; - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена); - ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(УзелОбмена); + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + + ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ(); + Объект.УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); + Объект.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + + Иначе + + Объект.ВариантРаботыМастера = "НоваяСинхронизация"; + + КонецЕсли; + + Иначе + Объект.УзелИнформационнойБазы = Параметры.УзелОбмена; + + Объект.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Объект.УзелИнформационнойБазы); + Объект.ИдентификаторНастройки = ОбменДаннымиСервер.СохраненныйВариантНастройкиУзлаПланаОбмена(Объект.УзелИнформационнойБазы); Если МодельСервиса Тогда Параметры.Свойство("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе); КонецЕсли; - Если ОбменДаннымиСВнешнейСистемой Тогда - ОбновитьПараметрыПодключенияВнешнейСистемы(УзелОбмена, ПараметрыПодключенияВнешнейСистемы); - КонецЕсли; + Объект.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; КонецЕсли; - - Если ПродолжениеНастройкиВПодчиненномУзлеРИБ - Или (Не ОбменДаннымиСВнешнейСистемой - И ОписаниеВариантаНастройки = Неопределено) Тогда + + Если ПродолжениеНастройкиВПодчиненномУзлеРИБ Или ОписаниеВариантаНастройки = Неопределено Тогда + МодульПомощник = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); ОписаниеВариантаНастройки = МодульПомощник.СтруктураОписанияВариантаНастройки(); - ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(Объект.ИмяПланаОбмена, "НаименованиеКонфигурацииКорреспондента, |ЗаголовокКомандыДляСозданияНовогоОбменаДанными, |ЗаголовокПомощникаСозданияОбмена, |КраткаяИнформацияПоОбмену, |ПодробнаяИнформацияПоОбмену", - ИдентификаторНастройки); + Объект.ИдентификаторНастройки); ЗаполнитьЗначенияСвойств(ОписаниеВариантаНастройки, ЗначенияНастроекДляВарианта); ОписаниеВариантаНастройки.НаименованиеКорреспондента = ЗначенияНастроекДляВарианта.НаименованиеКонфигурацииКорреспондента; + + ТекстJSON = Константы.НастройкиПодчиненногоУзлаРИБ.Получить(); + + Если ЗначениеЗаполнено(ТекстJSON) Тогда + + НастройкиПодключения = ТранспортСообщенийОбмена.НастройкиПодключенияИзJSON(ТекстJSON); + + Если ЗначениеЗаполнено(НастройкиПодключения.ИдентификаторТранспорта) + И НастройкиПодключения.Свойство("НастройкиТранспорта") Тогда + + // Помещение в безопасное хранилище + РеквизитыДляБезопасногоХранилища = ТранспортСообщенийОбмена.ПараметрТранспорта( + НастройкиПодключения.ИдентификаторТранспорта, "РеквизитыДляБезопасногоХранилища"); + + НастройкиТранспорта = НастройкиПодключения.НастройкиТранспорта; + + УстановитьПривилегированныйРежим(Истина); + + Для Каждого Реквизит Из РеквизитыДляБезопасногоХранилища Цикл + + Значение = НастройкиТранспорта[Реквизит]; + + Если ЗначениеЗаполнено(Значение) Тогда + + ЗначениеИдентификатор = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ЗначениеИдентификатор, Значение); + НастройкиТранспорта[Реквизит] = ЗначениеИдентификатор; + + КонецЕсли; + + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + + КонецЕсли; + + Иначе + + НастройкиПодключения = Новый Структура; + НастройкиПодключения.Вставить("НаименованиеВторойБазы", ПланыОбмена.ГлавныйУзел().Наименование); + НастройкиПодключения.Вставить("ПрефиксИнформационнойБазыПриемника", ПланыОбмена.ГлавныйУзел().Код); + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, НастройкиПодключения); + КонецЕсли; - ВидТранспорта = Неопределено; - Если ЗначениеЗаполнено(УзелОбмена) Тогда - НастройкаЗавершена = НастройкаСинхронизацииЗавершена(УзелОбмена); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); - ЕстьНастройкиТранспорта = ЗначениеЗаполнено(ВидТранспорта); + Если ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) + И Не ЗначениеЗаполнено(Объект.ИдентификаторТранспорта) + И Не ЗначениеЗаполнено(Объект.НастройкиТранспорта) Тогда + + НастройкаЗавершена = НастройкаСинхронизацииЗавершена(Объект.УзелИнформационнойБазы); + + Объект.НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию( + Объект.УзелИнформационнойБазы, Объект.ИдентификаторТранспорта); + КонецЕсли; + ЕстьНастройкиТранспорта = ЗначениеЗаполнено(Объект.НастройкиТранспорта) + Или ЗначениеЗаполнено(Объект.ИдентификаторТранспорта) + И ТранспортСообщенийОбмена.ПараметрТранспорта(Объект.ИдентификаторТранспорта, "ПассивныйРежим"); + РезервноеКопирование = Не МодельСервиса И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ"); @@ -826,38 +884,47 @@ МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования(); КонецЕсли; - НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена); - НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена); - НастройкаУниверсальногоОбмена = ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(ИмяПланаОбмена); // без правил конвертации + НастройкаРИБ = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(Объект.ИмяПланаОбмена); + НастройкаXDTO = ОбменДаннымиСервер.ЭтоПланОбменаXDTO(Объект.ИмяПланаОбмена); + НастройкаУниверсальногоОбмена = ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(Объект.ИмяПланаОбмена); // без правил конвертации ДоступнаИнтерактивнаяОтправка = Не НастройкаРИБ И Не НастройкаУниверсальногоОбмена; - Если Не ОбменДаннымиСВнешнейСистемой Тогда - - Если НастройкаНовойСинхронизации - Или НастройкаРИБ - Или НастройкаУниверсальногоОбмена Тогда - ПолученыДанныеДляСопоставления = Ложь; - ИначеЕсли ЭтоОбменСПриложениемВСервисе Тогда - ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); + Если НастройкаНовойСинхронизации + Или НастройкаРИБ + Или НастройкаУниверсальногоОбмена Тогда + + ПолученыДанныеДляСопоставления = Ложь; + + ИначеЕсли ЭтоОбменСПриложениемВСервисе Тогда + + ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(Объект.УзелИнформационнойБазы); + + Иначе + + ПрямоеПодключение = ТранспортСообщенийОбмена.ПараметрТранспорта(Объект.ИдентификаторТранспорта, "ПрямоеПодключение"); + + Если ПрямоеПодключение И ЕстьНастройкиТранспорта Тогда + ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(Объект.УзелИнформационнойБазы); Иначе - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим - Или Не ЕстьНастройкиТранспорта Тогда - ПолученыДанныеДляСопоставления = ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена); - Иначе - ПолученыДанныеДляСопоставления = Истина; - КонецЕсли; + ПолученыДанныеДляСопоставления = Истина; КонецЕсли; КонецЕсли; - - ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + + ЗначенияНастроекДляВарианта = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ОБъект.ИмяПланаОбмена, "ИмяФормыСозданияНачальногоОбраза, |ИмяФормыПомощникаНастройкиСинхронизацииДанных, - |ПоддерживаетсяСопоставлениеДанных", - ИдентификаторНастройки); + |ПоддерживаетсяСопоставлениеДанных, + |ИмяКонфигурацииКорреспондента, + |ИмяПланаОбменаКорреспондента, + |ФорматОбмена, + |ИмяФайлаНастроекДляПриемника, + |НаименованиеКонфигурацииКорреспондента, + |КраткаяИнформацияПоОбмену, + |ПодробнаяИнформацияПоОбмену", + Объект.ИдентификаторНастройки); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗначенияНастроекДляВарианта); Если ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) @@ -865,31 +932,90 @@ ИмяФормыСозданияНачальногоОбраза = "ОбщаяФорма.[ФормаСозданияНачальногоОбраза]"; ИмяФормыСозданияНачальногоОбраза = СтрЗаменить(ИмяФормыСозданияНачальногоОбраза, "[ФормаСозданияНачальногоОбраза]", "СозданиеНачальногоОбразаСФайлами"); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, ЗначенияНастроекДляВарианта); + + Если Не ЗначениеЗаполнено(Объект.ИмяПланаОбменаКорреспондента) Тогда + Объект.ИмяПланаОбменаКорреспондента = Объект.ИмяПланаОбмена; + КонецЕсли; + + Если МодельСервиса Тогда + + МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); + Объект.НаименованиеЭтойБазы = МодульОбменДаннымиВМоделиСервиса.СформироватьНаименованиеПредопределенногоУзла(); + + Иначе + + // Представление этой информационной базы. + Объект.НаименованиеЭтойБазы = ОбменДаннымиСервер.НаименованиеПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); + Если ПустаяСтрока(Объект.НаименованиеЭтойБазы) Тогда + Объект.НаименованиеЭтойБазы = ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы(); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Объект.НаименованиеВторойБазы) Тогда + Объект.НаименованиеВторойБазы = ЗначенияНастроекДляВарианта.НаименованиеКонфигурацииКорреспондента; + КонецЕсли; + + КонецЕсли; + + Объект.ИдентификаторИнформационнойБазыИсточника = + ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(Объект.ИмяПланаОбмена); + + Если НастройкаXDTO Тогда + + Объект.ИспользоватьПрефиксыДляНастройкиОбмена = + Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными( + ПланыОбмена[Объект.ИмяПланаОбмена].ПустаяСсылка()); + + Если ПустаяСтрока(Объект.ИдентификаторИнформационнойБазыИсточника) Тогда + Объект.ИдентификаторИнформационнойБазыИсточника = + ?(Объект.ИспользоватьПрефиксыДляНастройкиОбмена, + Объект.ПрефиксИнформационнойБазыИсточника, + Строка(Новый УникальныйИдентификатор)); + КонецЕсли; + + Иначе + Объект.ИспользоватьПрефиксыДляНастройкиОбмена = Истина; + КонецЕсли; + + Объект.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = Истина; + + Если Не ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыИсточника) Тогда + + ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + + Если ЗначениеЗаполнено(ПрефиксИнформационнойБазы) Тогда + Объект.ПрефиксИнформационнойБазыИсточника = ПрефиксИнформационнойБазы; + Иначе + ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(Объект.ПрефиксИнформационнойБазыИсточника); + КонецЕсли; + КонецЕсли; ТекущийЭтапНастройки = ""; - Если НастройкаНовойСинхронизации Тогда - ТекущийЭтапНастройки = "НастройкаПодключения"; - ИначеЕсли ОбменДаннымиСВнешнейСистемой - И Не ПолученыНастройкиXDTOКорреспондента(УзелОбмена) Тогда - ТекущийЭтапНастройки = "ПодтверждениеПодключения"; - ИначеЕсли Не НастройкаСинхронизацииЗавершена(УзелОбмена) Тогда + Если (НастройкаНовойСинхронизации И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ) + Или (ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не ЕстьНастройкиТранспорта) Тогда + ТекущийЭтапНастройки = "ВыборТипаТранспорта"; + ИначеЕсли НастройкаНовойСинхронизации И ПродолжениеНастройкиВПодчиненномУзлеРИБ Тогда + ТекущийЭтапНастройки = "ОбщиеПараметры"; + ИначеЕсли Не НастройкаСинхронизацииЗавершена(Объект.УзелИнформационнойБазы) Тогда ТекущийЭтапНастройки = "НастройкаПравил"; ИначеЕсли НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ - И Не НачальныйОбразСоздан(УзелОбмена) Тогда + И Не НачальныйОбразСоздан(Объект.УзелИнформационнойБазы) Тогда Если Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза) Тогда ТекущийЭтапНастройки = "НачальныйОбразРИБ"; КонецЕсли; - ИначеЕсли ЗначениеЗаполнено(УзелОбмена) Тогда - НомераСообщений = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УзелОбмена, "НомерПринятого, НомерОтправленного"); + ИначеЕсли ЗначениеЗаполнено(Объект.УзелИнформационнойБазы) Тогда + НомераСообщений = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.УзелИнформационнойБазы, "НомерПринятого, НомерОтправленного"); Если НомераСообщений.НомерПринятого = 0 И НомераСообщений.НомерОтправленного = 0 - И ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(УзелОбмена) Тогда + И ОбменДаннымиСервер.ПолученоСообщениеСДаннымиДляСопоставления(Объект.УзелИнформационнойБазы) Тогда ТекущийЭтапНастройки = "СопоставлениеИЗагрузка"; КонецЕсли; КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -911,7 +1037,20 @@ Процедура ЗаполнитьТаблицуЭтаповНастройки() ЭтапыНастройки.Очистить(); - + + // Выбор типа транспорта + ЭтапИспользуется = НастройкаНовойСинхронизации + Или (ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не ЕстьНастройкиТранспорта); + + ЭлементыФормы = Новый Структура; + ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаВыборТипаТранспорта.Имя); + ЭлементыФормы.Вставить("Панель" , Элементы.ПанельВыборТипаТранспорта.Имя); + ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаВыборТипаТранспортаУспешно.Имя); + ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаВыборТипаТранспортаТекущий.Имя); + ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаВыборТипаТранспортаПустой.Имя); + + ДобавитьЭтапНастройки("ВыборТипаТранспорта", "ВыборТипаТранспорта", ЭлементыФормы, ЭтапИспользуется); + // Настройка подключения ЭтапИспользуется = ЕстьНастройкиТранспорта Или НастройкаНовойСинхронизации; @@ -923,72 +1062,80 @@ ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаНастройкаПодключенияПустой.Имя); ДобавитьЭтапНастройки("НастройкаПодключения", "НастроитьПараметрыПодключения", ЭлементыФормы, ЭтапИспользуется); - - // Подтверждение подключения - ЭтапИспользуется = ОбменДаннымиСВнешнейСистемой; + + // Общие параметры синхронизации + ЭтапИспользуется = ЕстьНастройкиТранспорта Или НастройкаНовойСинхронизации; ЭлементыФормы = Новый Структура; - ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаПодтверждениеПодключения.Имя); - ЭлементыФормы.Вставить("Панель" , Элементы.ПанельПодтверждениеПодключения.Имя); + ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаОбщиеПараметры.Имя); + ЭлементыФормы.Вставить("Панель" , Элементы.ПанельОбщиеПараметры.Имя); + ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаОбщиеПараметрыУспешно.Имя); + ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаОбщиеПараметрыТекущий.Имя); + ЭлементыФормы.Вставить("СтраницаПустой", Элементы.СтраницаОбщиеПараметрыПустой.Имя); + + ДобавитьЭтапНастройки("ОбщиеПараметры", "НастроитьОбщиеПараметры", ЭлементыФормы, ЭтапИспользуется); + + // Подтверждение подключения + ЭтапИспользуется = Ложь; + + ЭлементыФормы = Новый Структура; + ЭлементыФормы.Вставить("Группа", Элементы.ГруппаПодтверждениеПодключения.Имя); + ЭлементыФормы.Вставить("Панель", Элементы.ПанельПодтверждениеПодключения.Имя); ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаПодтверждениеПодключенияУспешно.Имя); ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаПодтверждениеПодключенияТекущий.Имя); - ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаПодтверждениеПодключенияПустой.Имя); + ЭлементыФормы.Вставить("СтраницаПустой", Элементы.СтраницаПодтверждениеПодключенияПустой.Имя); ДобавитьЭтапНастройки("ПодтверждениеПодключения", "ПолучитьПодтверждениеПодключения", ЭлементыФормы, ЭтапИспользуется); // Настройка правил ЭлементыФормы = Новый Структура; - ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаНастройкаПравил.Имя); - ЭлементыФормы.Вставить("Панель" , Элементы.ПанельНастройкаПравил.Имя); + ЭлементыФормы.Вставить("Группа", Элементы.ГруппаНастройкаПравил.Имя); + ЭлементыФормы.Вставить("Панель", Элементы.ПанельНастройкаПравил.Имя); ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаНастройкаПравилУспешно.Имя); ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаНастройкаПравилТекущий.Имя); - ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаНастройкаПравилПустой.Имя); + ЭлементыФормы.Вставить("СтраницаПустой", Элементы.СтраницаНастройкаПравилПустой.Имя); ДобавитьЭтапНастройки("НастройкаПравил", "НастроитьПравилаОтправкиИПолучения", ЭлементыФормы, Истина); - // Начальный образ РИБ - ЭтапИспользуется = Не ОбменДаннымиСВнешнейСистемой - И НастройкаРИБ + // Начальный образ РИБ + ЭтапИспользуется = НастройкаРИБ И Не ПродолжениеНастройкиВПодчиненномУзлеРИБ И Не ПустаяСтрока(ИмяФормыСозданияНачальногоОбраза); ЭлементыФормы = Новый Структура; - ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаНачальныйОбразРИБ.Имя); - ЭлементыФормы.Вставить("Панель" , Элементы.ПанельНачальныйОбразРИБ.Имя); + ЭлементыФормы.Вставить("Группа", Элементы.ГруппаНачальныйОбразРИБ.Имя); + ЭлементыФормы.Вставить("Панель", Элементы.ПанельНачальныйОбразРИБ.Имя); ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаНачальныйОбразРИБУспешно.Имя); ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаНачальныйОбразРИБТекущий.Имя); - ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаНачальныйОбразРИБПустой.Имя); + ЭлементыФормы.Вставить("СтраницаПустой", Элементы.СтраницаНачальныйОбразРИБПустой.Имя); ДобавитьЭтапНастройки("НачальныйОбразРИБ", "СоздатьНачальныйОбразРИБ", ЭлементыФормы, ЭтапИспользуется); - // Сопоставление и загрузка - ЭтапИспользуется = Не ОбменДаннымиСВнешнейСистемой - И Не НастройкаРИБ + // Сопоставление и загрузка + ЭтапИспользуется = Не НастройкаРИБ И Не НастройкаУниверсальногоОбмена - И ПолученыДанныеДляСопоставления + И ПолученыДанныеДляСопоставления И ПоддерживаетсяСопоставлениеДанных <> Ложь; ЭлементыФормы = Новый Структура; - ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаСопоставлениеИЗагрузка.Имя); - ЭлементыФормы.Вставить("Панель" , Элементы.ПанельСопоставлениеИЗагрузка.Имя); + ЭлементыФормы.Вставить("Группа", Элементы.ГруппаСопоставлениеИЗагрузка.Имя); + ЭлементыФормы.Вставить("Панель", Элементы.ПанельСопоставлениеИЗагрузка.Имя); ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаСопоставлениеИЗагрузкаУспешно.Имя); ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаСопоставлениеИЗагрузкаТекущий.Имя); - ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаСопоставлениеИЗагрузкаПустой.Имя); + ЭлементыФормы.Вставить("СтраницаПустой", Элементы.СтраницаСопоставлениеИЗагрузкаПустой.Имя); ДобавитьЭтапНастройки("СопоставлениеИЗагрузка", "ВыполнитьСопоставлениеИЗагрузкуДанных", ЭлементыФормы, ЭтапИспользуется); // Начальная выгрузка данных - ЭтапИспользуется = Не ОбменДаннымиСВнешнейСистемой - И ДоступнаИнтерактивнаяОтправка - И (ЕстьНастройкиТранспорта - Или НастройкаНовойСинхронизации); - + ЭтапИспользуется = ДоступнаИнтерактивнаяОтправка + И (ЕстьНастройкиТранспорта Или НастройкаНовойСинхронизации); + ЭлементыФормы = Новый Структура; - ЭлементыФормы.Вставить("Группа" , Элементы.ГруппаНачальнаяВыгрузкаДанных.Имя); - ЭлементыФормы.Вставить("Панель" , Элементы.ПанельНачальнаяВыгрузкаДанных.Имя); + ЭлементыФормы.Вставить("Группа", Элементы.ГруппаНачальнаяВыгрузкаДанных.Имя); + ЭлементыФормы.Вставить("Панель", Элементы.ПанельНачальнаяВыгрузкаДанных.Имя); ЭлементыФормы.Вставить("СтраницаУспешно", Элементы.СтраницаНачальнаяВыгрузкаДанныхУспешно.Имя); ЭлементыФормы.Вставить("СтраницаТекущий", Элементы.СтраницаНачальнаяВыгрузкаДанныхТекущий.Имя); - ЭлементыФормы.Вставить("СтраницаПустой" , Элементы.СтраницаНачальнаяВыгрузкаДанныхПустой.Имя); + ЭлементыФормы.Вставить("СтраницаПустой", Элементы.СтраницаНачальнаяВыгрузкаДанныхПустой.Имя); ДобавитьЭтапНастройки("НачальнаяВыгрузкаДанных", "ВыполнитьНачальнуюВыгрузкуДанных", ЭлементыФормы, ЭтапИспользуется); @@ -1012,6 +1159,8 @@ КонецПроцедуры + + #КонецОбласти #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form index e5e421962..d06ccb351 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Form.form @@ -142,7 +142,7 @@ <key>ru</key> - <value>Обмен данными с другими программами</value> + <value>Обмен данными с другими приложениями</value> ГруппаОбменДругиеПрограммыРасширеннаяПодсказка @@ -532,7 +532,7 @@ <key>ru</key> - <value>Группа3</value> + <value>Группа</value> Группа5РасширеннаяПодсказка @@ -793,6 +793,81 @@ false
          + + СтраницаНетНастроек + 77 + + ДекорацияПустая + 79 + true + true + + true + + + ru + В приложении отсутствуют настройки синхронизации. + + ShowBottom + + ДекорацияПустаяРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + ДекорацияПустаяКонтекстноеМеню + 80 + true + + true + true + + 140 + + + true + + + + StdPicture.DialogExclamation + + + 140 + + AsFileRef + + + true + true + + true + + + <key>ru</key> + <value>Страница нет настроек</value> + + + СтраницаНетНастроекРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl index 845394be0..70b40be72 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Module.bsl @@ -204,7 +204,24 @@ ОчиститьКомандыСозданияНовогоОбмена(); ДобавитьКомандыСозданияНовогоОбмена(Настройки); - Элементы.ПанельВариантыНастроек.ТекущаяСтраница = Элементы.СтраницаВариантыНастроек; + Если (Настройки.Свойство("СтандартныеНастройки") + И ТипЗнч(Настройки.СтандартныеНастройки) = Тип("ТаблицаЗначений") + И Настройки.СтандартныеНастройки.Количество() > 0) + ИЛИ (Настройки.Свойство("НастройкиВнешниеСистемы") + И ТипЗнч(Настройки.НастройкиВнешниеСистемы) = Тип("Структура") + И Настройки.НастройкиВнешниеСистемы.Свойство("ВариантыНастроек") + И ТипЗнч(Настройки.НастройкиВнешниеСистемы.ВариантыНастроек) = Тип("ТаблицаЗначений") + И Настройки.НастройкиВнешниеСистемы.ВариантыНастроек.Количество() > 0) + Тогда + + Элементы.ПанельВариантыНастроек.ТекущаяСтраница = Элементы.СтраницаВариантыНастроек; + + Иначе + + Элементы.ПанельВариантыНастроек.ТекущаяСтраница = Элементы.СтраницаНетНастроек; + + КонецЕсли; + Элементы.ФормаОбновитьСписокНастроек.Доступность = Истина; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПереходНаИнтернетСоединение/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПереходНаИнтернетСоединение/Form.form index bd3f5e2ff..6ec63dbd6 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПереходНаИнтернетСоединение/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПереходНаИнтернетСоединение/Form.form @@ -509,7 +509,7 @@ <key>ru</key> - <value>Настройка подключения</value> + <value>Получение настроек</value> ГруппаПолучениеНастроекРасширеннаяПодсказка @@ -1057,7 +1057,7 @@ <key>ru</key> - <value>Настройка корр. узла</value> + <value>Настройка корр узла</value> ГруппаНастройкаКоррУзлаРасширеннаяПодсказка @@ -2223,21 +2223,6 @@ true auto true - - Объект - 1 - - String - - - - true - - - true - -
          true
          -
          ПорядковыйНомерПерехода 2 diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form similarity index 97% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form rename to SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form index 1dd0879cb..5233fcb88 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form @@ -11,9 +11,9 @@ 44 <key>ru</key> - <value>Не удалось установить обновление программы, полученное из + <value>Не удалось установить обновление приложения, полученное из Главного узла -Техническую информацию см. в <link ЖурналРегистрации>Журнале регистрации</>.</value> +Техническую информацию см. в <link ЖурналРегистрации>Журнале</><link ЖурналРегистрации> </><link ЖурналРегистрации>регистрации</>.</value> true true @@ -51,8 +51,8 @@ 32 <key>ru</key> - <value>Нажмите <b>Синхронизировать и продолжить,</> чтобы получить -обновление программы еще раз (рекомендуется). + <value>Нажмите <b>Синхронизировать</><b> </><b>и</><b> </><b>продолжить,</> чтобы получить +обновление приложения еще раз (рекомендуется). </value> true @@ -340,7 +340,7 @@ 41 <key>ru</key> - <value>Нажмите <b>Продолжить</>, чтобы повторить попытку обновления программы. + <value>Нажмите <b>Продолжить</>, чтобы повторить попытку обновления приложения. </value> true @@ -951,6 +951,20 @@ true + + ИмяПользователя + 14 + + String + + + + true + + + true + + СинхронизироватьИПродолжить diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl similarity index 66% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl rename to SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index 085dc3615..1d2808ca6 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -13,6 +13,7 @@ УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел(); ЭтоАвтономноеРабочееМесто = ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто(); + ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; Если УзелИнформационнойБазы = Неопределено Тогда @@ -25,19 +26,19 @@ МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота"); АдресДляВосстановленияПароляУчетнойЗаписи = МодульАвтономнаяРабота.АдресДляВосстановленияПароляУчетнойЗаписи(); ДлительнаяОперацияРазрешена = Истина; - - Если ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы) Тогда - Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(УзелИнформационнойБазы); - КонецЕсли; + + Если ТранспортСообщенийОбмена.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы) Тогда + ДанныеАутентификации = ТранспортСообщенийОбмена.ПарольСинхронизацииДанных(УзелИнформационнойБазы); + Пароль = ДанныеАутентификации.Пароль; + КонецЕсли; КонецЕсли; - НаименованиеКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "Наименование"); НадписьИмяУзла = НСтр("ru = 'Не удалось установить обновление программы, полученное из |""%1"". |Техническую информацию см. в <a href = ""%2"">Журнале регистрации</a>.'"); Элементы.ИнформационнаяНадписьИмяУзла.Заголовок = - СтроковыеФункции.ФорматированнаяСтрока(НадписьИмяУзла, НаименованиеКорреспондента, "ЖурналРегистрации"); + СтроковыеФункции.ФорматированнаяСтрока(НадписьИмяУзла, Строка(УзелИнформационнойБазы), "ЖурналРегистрации"); УстановитьОтображениеЭлементовФормы(); @@ -113,42 +114,31 @@ &НаКлиенте Процедура ПараметрыПодключения(Команда) + + ПараметрыФормы = Новый Структура("Корреспондент", УзелИнформационнойБазы); - Отбор = Новый Структура("Корреспондент", УзелИнформационнойБазы); - ЗначенияЗаполнения = Новый Структура("Корреспондент", УзелИнформационнойБазы); - - ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, - ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", Неопределено); + ОткрытьФорму("Справочник.НастройкиТранспортаСообщенийОбмена.Форма.ПанельНастроекТранспорта", + ПараметрыФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Процедура ЗабылиПароль(Команда) - ОбменДаннымиКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); + ТранспортСообщенийОбменаКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Сценарий без обновления информационной базы. +#Область СценарийБезОбновленияИнформационнойБазы &НаКлиенте Процедура СинхронизироватьИПродолжитьБезОбновленияИБ() ЗагрузитьСообщениеОбменаДаннымиБезОбновления(); - - Если ДлительнаяОперация Тогда - СчетчикПовторовПриОшибкеПодключения = 0; - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + СинхронизироватьИПродолжитьБезОбновленияИБЗавершение(); - Иначе - - СинхронизироватьИПродолжитьБезОбновленияИБЗавершение(); - - КонецЕсли; - КонецПроцедуры &НаСервере @@ -222,38 +212,26 @@ ВыполнитьВыгрузку = Истина; - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелИнформационнойБазы); - - ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда - - ВыполнитьВыгрузку = Ложь; - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакОтправкиДанных(УзелИнформационнойБазы); - - КонецЕсли; + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); Если ВыполнитьВыгрузку Тогда - ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); + ДанныеАутентификации = Новый Структура; + Если ЭтоАвтономноеРабочееМесто Тогда + ДанныеАутентификации.Вставить("ИмяПользователя", ИмяПользователя); + ДанныеАутентификации.Вставить("Пароль", Пароль); + КонецЕсли; // Только выгрузка. Отказ = Ложь; ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + ПараметрыОбмена.ДанныеАутентификации = ДанныеАутентификации; + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; - ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; - - КонецЕсли; - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); КонецЕсли; @@ -303,15 +281,19 @@ // Обновление правил регистрации объектов выполняем до загрузки данных. ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); ДатаНачалаОперации = ТекущаяДатаСеанса(); - ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); + ДанныеАутентификации = Новый Структура; + Если ЭтоАвтономноеРабочееМесто Тогда + ДанныеАутентификации.Вставить("ИмяПользователя", ИмяПользователя); + ДанныеАутентификации.Вставить("Пароль", Пароль); + КонецЕсли; // Только загрузка. ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; @@ -319,13 +301,8 @@ ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; - ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; - - КонецЕсли; + ПараметрыОбмена.ДанныеАутентификации = ДанныеАутентификации; + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, ЕстьОшибки); @@ -333,7 +310,7 @@ ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; + ДанныеАутентификации = ПараметрыОбмена.ДанныеАутентификации; КонецЕсли; @@ -341,23 +318,15 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сценарий с обновлением информационной базы. +#КонецОбласти + +#Область СценарийСОбновлениемИнформационнойБазы &НаКлиенте Процедура СинхронизироватьИПродолжитьСОбновлениемИБ() ЗагрузитьСообщениеОбменаДаннымиСОбновлением(); - - Если ДлительнаяОперация Тогда - СчетчикПовторовПриОшибкеПодключения = 0; - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); - - Иначе - - СинхронизироватьИПродолжитьСОбновлениемИБЗавершение(); - - КонецЕсли; + СинхронизироватьИПродолжитьСОбновлениемИБЗавершение(); КонецПроцедуры @@ -438,7 +407,12 @@ Если УзелИнформационнойБазы <> Неопределено Тогда - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); + + Если ИдентификаторТранспорта = Неопределено Тогда + Справочники.НастройкиТранспортаСообщенийОбмена.ОбработатьДанныеДляПереходаНаНовуюВерсию(); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелИнформационнойБазы); + КонецЕсли; ИмяПараметра = "СтандартныеПодсистемы.ОбменДанными.ПравилаРегистрации." + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); @@ -455,11 +429,15 @@ ДатаНачалаОперации = ТекущаяДатаСеанса(); - ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); + ДанныеАутентификации = Новый Структура; + Если ЭтоАвтономноеРабочееМесто Тогда + ДанныеАутентификации.Вставить("ИмяПользователя", ИмяПользователя); + ДанныеАутентификации.Вставить("Пароль", Пароль); + КонецЕсли; // Загрузка только параметров работы программы. ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ИдентификаторТранспорта = ИдентификаторТранспорта; ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; ПараметрыОбмена.ТолькоПараметры = Истина; @@ -468,21 +446,15 @@ ПараметрыОбмена.ДлительнаяОперация = ДлительнаяОперация; ПараметрыОбмена.ИдентификаторОперации = ИдентификаторОперации; ПараметрыОбмена.ИдентификаторФайла = ИдентификаторФайла; - ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; - - КонецЕсли; - + ПараметрыОбмена.ДанныеАутентификации = ДанныеАутентификации; + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, ЕстьОшибки); ДлительнаяОперацияРазрешена = ПараметрыОбмена.ДлительнаяОперацияРазрешена; ДлительнаяОперация = ПараметрыОбмена.ДлительнаяОперация; ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; - ПараметрыАутентификации = ПараметрыОбмена.ПараметрыАутентификации; КонецЕсли; @@ -490,8 +462,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сценарий без синхронизации +#КонецОбласти + +#Область СценарийБезСинхронизации &НаСервере Процедура НеСинхронизироватьИПродолжитьНаСервере() @@ -510,8 +483,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Служебные процедуры и функции. +#КонецОбласти &НаСервере Процедура ПроверитьНеобходимостьОбновления() @@ -553,50 +525,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработчикОжиданияДлительнойОперации() - - ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); - - СостояниеОперации = СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторОперации, - УзелИнформационнойБазы, - ПараметрыАутентификации, - ТекстПредупреждения); - - Если СостояниеОперации = Неопределено - И СчетчикПовторовПриОшибкеПодключения < 5 Тогда - СчетчикПовторовПриОшибкеПодключения = СчетчикПовторовПриОшибкеПодключения + 1; - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 30, Истина); - Возврат; - КонецЕсли; - - Если СостояниеОперации = "Active" Тогда - ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 30, Истина); - Иначе - Если СостояниеОперации <> "Completed" Тогда - ЕстьОшибки = Истина; - КонецЕсли; - ДлительнаяОперация = Ложь; - - ОбработатьОкончаниеДлительнойОперации(); - - Если СтатусОбновления = "ОбновлениеНеТребуется" Тогда - - СинхронизироватьИПродолжитьБезОбновленияИБЗавершение(); - - ИначеЕсли СтатусОбновления = "ОбновлениеИнформационнойБазы" Тогда - - СинхронизироватьИПродолжитьСОбновлениемИБЗавершение(); - - КонецЕсли; - - СинхронизироватьИПродолжитьЗавершение(); - - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура ПроверитьИспользованиеСинхронизацииДанных() @@ -647,110 +575,4 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработатьОкончаниеДлительнойОперации() - - Если Не ЕстьОшибки Тогда - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - УзелИнформационнойБазы, - ИдентификаторФайла, - ДатаНачалаОперации); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - Знач УзелИнформационнойБазы, - Знач ИдентификаторФайла, - Знач ДатаНачалаОперации) - - ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); - - ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); - - ПараметрыАутентификации = ?(ЭтоАвтономноеРабочееМесто, Новый Структура("ИспользоватьТекущегоПользователя, Пароль", Истина, Пароль), Неопределено); - - УстановитьПривилегированныйРежим(Истина); - - Попытка - ФайлСообщенияОбмена = ОбменДаннымиВебСервис.ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), - УзелИнформационнойБазы,, ПараметрыАутентификации); - Исключение - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - ДатаНачалаОперации, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЕстьОшибки = Истина; - Возврат; - КонецПопытки; - - НовоеСообщение = Новый ДвоичныеДанные(ФайлСообщенияОбмена); - ОбменДаннымиСервер.УстановитьСообщениеОбменаДаннымиИзГлавногоУзла(НовоеСообщение, УзелИнформационнойБазы); - - Попытка - УдалитьФайлы(ФайлСообщенияОбмена); - Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Попытка - - ТолькоПараметры = (СтатусОбновления = "ОбновлениеИнформационнойБазы"); - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); - - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; - ПараметрыОбмена.ВыполнятьЗагрузку = Истина; - ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; - ПараметрыОбмена.ТолькоПараметры = ТолькоПараметры; - ПараметрыОбмена.ПараметрыАутентификации = ПараметрыАутентификации; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; - - КонецЕсли; - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, ЕстьОшибки); - - Исключение - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЕстьОшибки = Истина; - - КонецПопытки; - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторДлительнойОперации, - УзелИнформационнойБазы, - ПараметрыАутентификации, - СообщениеОбОшибке) - - СостояниеОперации = Неопределено; - Попытка - СостояниеОперации = ОбменДаннымиСлужебный.СостояниеДлительнойОперацииДляУзлаИнформационнойБазы( - ИдентификаторДлительнойОперации, - УзелИнформационнойБазы, - ПараметрыАутентификации, - СообщениеОбОшибке); - Исключение - Информация = ИнформацияОбОшибке(); - СообщениеОбОшибке = ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - КонецПопытки; - - Возврат СостояниеОперации; - -КонецФункции - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form index b2d36db32..6ee6afae9 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Form.form @@ -180,7 +180,7 @@ <id>52</id> <title> <key>ru</key> - <value>В этой программе будут удалены + <value>В этом приложении будут удалены - настройки подключения; - информация о сопоставлении объектов; - информация о зарегистрированных к отправке объектах.</value> @@ -220,7 +220,7 @@ <id>57</id> <title> <key>ru</key> - <value>Удалить настройку также в программе "Наименование корреспондента".</value> + <value>Удалить настройку также в приложении "Наименование корреспондента".</value> true true @@ -1202,7 +1202,7 @@ - ПодключениеOnline + Удалить_ПодключениеOnline 9 Boolean @@ -1307,7 +1307,7 @@ - ЭтоОбменСВнешнейСистемой + Удалить_ЭтоОбменСВнешнейСистемой 18 Boolean @@ -1320,7 +1320,7 @@ - ПодключениеЧерезВнешнееСоединение + Удалить_ПодключениеЧерезВнешнееСоединение 19 Boolean @@ -1332,6 +1332,44 @@ true + + ИдентификаторТранспорта + 7 + + String + + + + true + + + true + + + + ПрямоеПодключение + 8 + + Boolean + + + true + + + true + + + + ДанныеАутентификации + 11 + + + true + + + true + + КомандаДалее diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl index 396b4f8d0..a7c3c6e78 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УдалениеНастройкиСинхронизации/Module.bsl @@ -87,10 +87,6 @@ ПродолжитьОжидание = Истина; - Если ПодключениеЧерезВнешнееСоединение Тогда - ОбменДаннымиКлиент.ПроверитьИЗарегистрироватьCOMСоединитель(УзелОбмена); - КонецЕсли; - ПриНачалеУдаленияНастройкиСинхронизацииНаСервере(ПродолжитьОжидание); Если ПродолжитьОжидание Тогда @@ -175,6 +171,7 @@ НастройкиУдаления.Вставить("УзелОбмена", УзелОбмена); НастройкиУдаления.Вставить("УдалитьНастройкуВКорреспонденте", УдалитьНастройкуВКорреспонденте); + НастройкиУдаления.Вставить("ДанныеАутентификации", ДанныеАутентификации); МодульПомощникУдаленияНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); @@ -269,21 +266,24 @@ НаименованиеКорреспондента = Строка(УзелОбмена); КонецЕсли; - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелОбмена); - ПодключениеOnline = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM - Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS); - ЭтоОбменСВнешнейСистемой = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); + ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(УзелОбмена); + + ПрямоеПодключение = Ложь; + ПассивныйРежим = Ложь; - ПодключениеЧерезВнешнееСоединение = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - УдалитьНастройкуВКорреспонденте = ПодключениеOnline Или ЭтоОбменСВнешнейСистемой; + Если ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + ПараметрыТранспорта = ТранспортСообщенийОбмена.ПараметрыТранспорта(ИдентификаторТранспорта); + ПрямоеПодключение = ПараметрыТранспорта.ПрямоеПодключение; + ПассивныйРежим = ПараметрыТранспорта.ПассивныйРежим; + КонецЕсли; ПолучитьПараметрыКорреспондента = МодельСервиса - И Не Параметры.Свойство("ЭтоОбменСПриложениемВСервисе") - И Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим - И Не ЭтоОбменСВнешнейСистемой; - + И Не ЭтоОбменСПриложениемВСервисе + И Не ПрямоеПодключение + И Не ПассивныйРежим; + + ДанныеАутентификации = ТранспортСообщенийОбмена.ПарольСинхронизацииДанных(УзелОбмена); + ЗаполнитьТаблицуПереходов(); КонецПроцедуры @@ -344,17 +344,10 @@ &НаКлиенте Функция Подключаемый_СтраницаНачало_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) - Элементы.ГруппаНачалоДополнительно.Видимость = ПодключениеOnline Или ЭтоОбменСВнешнейСистемой; - - Если ЭтоОбменСВнешнейСистемой Тогда - Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить настройку обмена с системой ""%1"" на Портале 1С:ИТС.'"), - НаименованиеКорреспондента); - Иначе - Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Удалить настройку также в программе ""%1"".'"), - НаименованиеКорреспондента); - КонецЕсли; + Элементы.ГруппаНачалоДополнительно.Видимость = ПрямоеПодключение; + + ШаблонЗаголовка = НСтр("ru = 'Удалить настройку также в программе ""%1"".'"); + Элементы.УдалитьНастройкуВКорреспонденте.Заголовок = СтрШаблон(ШаблонЗаголовка, НаименованиеКорреспондента); Возврат Неопределено; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index d19f47ec4..a01591289 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html @@ -1,21 +1,21 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Предназначен для настройки <a href="CommonForm.НастройкиСинхронизацииДанных/Help">синхронизации данных</a>. Возможна настройка синхронизации данных между двумя приложениями по правилам обмена, без использования правил обмена или организация совместной работы в распределенной информационной базе (РИБ).</p> +<p>Предназначен для настройки <a href="CommonForm.НастройкиСинхронизацииДанных/Help">синхронизации данных</a>. Возможна настройка синхронизации данных между двумя приложениями по правилам обмена, без использования правил обмена или организация совместной работы в распределенной информационной базе (РИБ).</p> <h3>Выбор типа синхронизации данных</h3> <p>Выберите нужный раздел списка:</p> -<ul><li>Обмен данных с другими приложениями; +<ul><li>Обмен данных с другими приложениями; <ul><li>Без использования правил обмена; </li> <li>Полная синхронизация; </li> <li>Получение данных; </li> -<li>Полная синхронизация данных через EnterpriseData. При настройке обмена с использованием обычных каналов связи (файл, ftp, e-mail) в приложении-источнике не получится настроить правила отправки и получения данных, пока не будут выполнены настройки в приложении-приемнике. +<li>Полная синхронизация данных через EnterpriseData. При настройке обмена с использованием обычных каналов связи (файл, ftp, e-mail) в приложении-источнике не получится настроить правила отправки и получения данных, пока не будут выполнены настройки в приложении-приемнике. </li> <li>Полная синхронизация с поддержкой обратной совместимости; </li> <li>Синхронизация данных через универсальный формат;</li></ul></li> <li>Распределенные информационные базы.</li></ul><h3>Этапы настройки параметров синхронизации данных между двумя приложениями</h3> -<ul><li>Настройка синхронизации данных выполняется в два этапа. Первый шаг настройки синхронизации данных выполняется в текущем приложении, затем необходимо перейти в другое приложение и закончить в ней настройку синхронизации данных. Для передачи информации между этапами настройки синхронизации данных используется временный файл с настройками. Настройки правил отправки и получения данных выполняются в каждой из обменивающихся приложений вне зависимости от выбранного варианта подключения. +<ul><li>Настройка синхронизации данных выполняется в два этапа. Первый шаг настройки синхронизации данных выполняется в текущем приложении, затем необходимо перейти в другое приложение и закончить в ней настройку синхронизации данных. Для передачи информации между этапами настройки синхронизации данных используется временный файл с настройками. Настройки правил отправки и получения данных выполняются в каждой из обменивающихся приложений вне зависимости от выбранного варианта подключения. </li> <li>Во время настройки определяются следующие параметры: <ul><li>Параметры подключения. Производится также проверка работоспособности введенных параметров; @@ -24,42 +24,42 @@ </li> <li>Выполнение начальной выгрузки данных; </li> -<li>В приложении-приемнике, кроме перечисленных этапов, осуществляется также сопоставление и загрузка данных.</li></ul></li></ul><h3>Особенности синхронизации через универсальный формат EnterpriseData</h3> -<ul><li>Настройку правил отправки и получения данных можно провести только после получения параметров приложения-приемника. +<li>В приложении-приемнике, кроме перечисленных этапов, осуществляется также сопоставление и загрузка данных.</li></ul></li></ul><h3>Особенности синхронизации через универсальный формат EnterpriseData</h3> +<ul><li>Настройку правил отправки и получения данных можно провести только после получения параметров приложения-приемника. </li> -<li>Для этого после настройки вариантов подключения в приложении-источнике необходимо перейти в приложение-приемник, завершить в ней настройку и выполнить первоначальную выгрузку данных, после этого завершить настройку в приложении-источнике. Приложение выводит об этом сообщение.</li></ul><h3>Подробное описание</h3> -<ul><li>По ссылке <strong>Подробное описание</strong> можно просмотреть информацию о приложениях, принимающих участие в этой синхронизации. </li></ul><h3>Резервное копирование</h3> +<li>Для этого после настройки вариантов подключения в приложении-источнике необходимо перейти в приложение-приемник, завершить в ней настройку и выполнить первоначальную выгрузку данных, после этого завершить настройку в приложении-источнике. Приложение выводит об этом сообщение.</li></ul><h3>Подробное описание</h3> +<ul><li>По ссылке <strong>Подробное описание</strong> можно просмотреть информацию о приложениях, принимающих участие в этой синхронизации. </li></ul><h3>Резервное копирование</h3> <ul><li>Перед настройкой синхронизации рекомендуется выполнить <a href="DataProcessor.НастройкаРезервногоКопированияИБ/Help">резервное копирование</a>. </li> -<li>В файловом варианте информационной базы пройдите по ссылке, для того чтобы создать <strong>резервную копию данных</strong> (рекомендуется). +<li>В файловом варианте информационной базы пройдите по ссылке, для того чтобы создать <strong>резервную копию данных</strong> (рекомендуется). </li> -<li>В серверном варианте и других необходимо провести резервное копирование сторонними средствами. +<li>В серверном варианте и других необходимо провести резервное копирование сторонними средствами. </li> <li>Нажмите <strong>Далее</strong> для продолжения настройки синхронизации данных. </li></ul><h3>Выбор варианта подключения к другому приложению</h3> -<p>Проверка варианта подключения во время настройки производится приложением автоматически.</p> -<p>Для вариантов подключения, связанных с Интернетом, при необходимости с помощью соответствующей ссылки настройте <a href="CommonForm.ПараметрыПроксиСервера/Help">параметры прокси-сервера</a>, перейдя по ссылке <strong>Параметры доступа в Интернет</strong>.</p> -<p>При указании пользователя и пароля необходимо помнить, что этот пользователь должен иметь соответствующий доступ (например, к серверу 1С:Предприятия), для того чтобы синхронизация данных состоялась.</p> +<p>Проверка варианта подключения во время настройки производится приложением автоматически.</p> +<p>Для вариантов подключения, связанных с Интернетом, при необходимости с помощью соответствующей ссылки настройте <a href="CommonForm.ПараметрыПроксиСервера/Help">параметры прокси-сервера</a>, перейдя по ссылке <strong>Параметры доступа в Интернет</strong>.</p> +<p>При указании пользователя и пароля необходимо помнить, что этот пользователь должен иметь соответствующий доступ (например, к серверу 1С:Предприятия), для того чтобы синхронизация данных состоялась.</p> <p>С помощью переключателя можно выбрать:</p> -<ul><li><strong>Прямое подключение на этом компьютере или в локальной сети</strong> используется для синхронизации данных между двумя приложениями, причем оба приложения должны быть доступны для подключения. +<ul><li><strong>Прямое подключение на этом компьютере или в локальной сети</strong> используется для синхронизации данных между двумя приложениями, причем оба приложения должны быть доступны для подключения. <ul><li> -<p>Укажите параметры подключения к другом приложении: </p> +<p>Укажите параметры подключения к другом приложении: </p> <ul><li>Выберите <strong>Расположение приложения</strong>-приемника: <ul><li><strong>На данном компьютере или на компьютере в локальной сети</strong>; -<ul><li><img src="StdPicture.InputFieldSelect"></img> Выберите <strong>Каталог</strong> информационной базы. Укажите путь к папке на компьютере.</li></ul></li> +<ul><li><img src="StdPicture.InputFieldSelect"></img> Выберите <strong>Каталог</strong> информационной базы. Укажите путь к папке на компьютере.</li></ul></li> <li><strong>На сервере 1С:Предприятия</strong>; <ul><li>Введите <strong>Сервер</strong>; </li> <li>Введите <strong>Имя </strong>информационной <strong>базы</strong>.</li></ul></li></ul></li> -<li>с помощью переключателя <strong>Параметры входа в приложение</strong> выберите: +<li>с помощью переключателя <strong>Параметры входа в приложение</strong> выберите: <ul><li><strong>Использовать учетную запись операционной системы</strong>; </li> <li><strong>Использовать указанные имя пользователя и пароль</strong>: -<ul><li>Введите имя <strong>Пользователя</strong>, от лица которого будет производиться синхронизация данных и его <strong>Пароль</strong>. </li></ul></li></ul></li></ul></li> +<ul><li>Введите имя <strong>Пользователя</strong>, от лица которого будет производиться синхронизация данных и его <strong>Пароль</strong>. </li></ul></li></ul></li></ul></li> <li>Нажмите кнопку <strong>Далее</strong>. </li></ul></li> <li><strong>Подключение к приложению через интернет (веб-сервис)</strong>: -<ul><li>Такой вариант подключения используется для синхронизации данных между двумя приложениями. Он может быть использован в том случае, если приложение-приемник находится в другом офисе, при этом она доступна для синхронизации через интернет. +<ul><li>Такой вариант подключения используется для синхронизации данных между двумя приложениями. Он может быть использован в том случае, если приложение-приемник находится в другом офисе, при этом она доступна для синхронизации через интернет. </li> -<li>Введите <strong>Адрес приложения</strong> в интернете; +<li>Введите <strong>Адрес приложения</strong> в интернете; </li> <li>Введите <strong>Имя пользователя</strong> и его <strong>Пароль</strong>; </li> @@ -70,69 +70,69 @@ <ul><li>Может использоваться: </li> <li>для синхронизации данных с приложением в другом офисе, которая может работать в автономном режиме, причем два приложения, участвующие в синхронизации данных, могут работать в разное время; -<ul><li>Для продолжения настройки синхронизации в приложении-приемнике включите флажок <strong>Загрузить параметры подключения из файла</strong>, укажите путь к файлу с настройками. </li></ul></li> +<ul><li>Для продолжения настройки синхронизации в приложении-приемнике включите флажок <strong>Загрузить параметры подключения из файла</strong>, укажите путь к файлу с настройками. </li></ul></li> <li>Для синхронизации данных в распределенной информационной базе.</li></ul></li> -<li><strong>Подключение для синхронизации данных выполняется из другого приложения</strong>. При этом варианте подключения это приложение отправляет и принимает данные через Интернет только по запросу от приложения-корреспондента.</li></ul><p>Нажмите кнопку <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</p> -<h3>Синхронизация данных через локальный или сетевой каталог</h3> +<li><strong>Подключение для синхронизации данных выполняется из другого приложения</strong>. При этом варианте подключения это приложение отправляет и принимает данные через Интернет только по запросу от приложения-корреспондента.</li></ul><p>Нажмите кнопку <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</p> +<h3>Синхронизация данных через локальный или сетевой каталог</h3> <ul dir="ltr"><li> -<div>Включите флажок <strong>Использовать локальный или сетевой каталог для синхронизации данных</strong>. </div> +<div>Включите флажок <strong>Использовать локальный или сетевой каталог для синхронизации данных</strong>. </div> </li> -<li>В поле <strong>Каталог</strong> <img width="12" height="12" src="StdPicture.InputFieldSelect"></img> выберите путь к папке на устройстве. +<li>В поле <strong>Каталог</strong> <img width="12" height="12" src="StdPicture.InputFieldSelect"></img> выберите путь к папке на устройстве. </li> <li>Для того чтобы сократить размер пересылаемого сообщения, включите флажок <strong>Сжимать отправляемые данные в архив</strong>, при необходимости введите <strong>Пароль архива</strong>. </li> -<li>Для того чтобы убедиться в правильности введенных настроек, нажмите <strong>Проверить возможность записи в каталог</strong>. +<li>Для того чтобы убедиться в правильности введенных настроек, нажмите <strong>Проверить возможность записи в каталог</strong>. </li> <li> -<div>Нажмите кнопку <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</div></li></ul><h3>Синхронизация данных через каталог на FTP-сервере</h3> -<ul><li>Включите флажок <strong>Использовать каталог на FTP-сервере для синхронизации данных</strong>. +<div>Нажмите кнопку <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</div></li></ul><h3>Синхронизация данных через каталог на FTP-сервере</h3> +<ul><li>Включите флажок <strong>Использовать каталог на FTP-сервере для синхронизации данных</strong>. </li> -<li>Укажите <strong>Адрес каталога</strong>, <strong>Порт</strong> проставляется автоматически. +<li>Укажите <strong>Адрес каталога</strong>, <strong>Порт</strong> проставляется автоматически. </li> <li>Заполните поля <strong>Пользователь (Логин)</strong> и <strong>Пароль</strong>. </li> -<li>Включите флажок <strong>Ограничение размера файла</strong>, если объем данных на FTP-сервере ограничен, и проставьте его максимальный размер. +<li>Включите флажок <strong>Ограничение размера файла</strong>, если объем данных на FTP-сервере ограничен, и проставьте его максимальный размер. </li> <li>При необходимости включите флажок <strong>Пассивный режим</strong>. </li> <li>При необходимости перейдите по ссылке <strong>Параметры доступа в интернет</strong> и укажите параметры прокси-сервера. </li> -<li>Нажмите <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</li></ul><h3>Синхронизация данных через электронную почту</h3> +<li>Нажмите <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</li></ul><h3>Синхронизация данных через электронную почту</h3> <ul><li>Включите флажок <strong>Использовать электронную почту для синхронизации данных</strong>. </li> -<li>В поле <strong>Учетная запись </strong><img width="12" height="12" src="StdPicture.InputFieldSelect"></img> выберите элемент из списка учетных записей. +<li>В поле <strong>Учетная запись </strong><img width="12" height="12" src="StdPicture.InputFieldSelect"></img> выберите элемент из списка учетных записей. </li> -<li>Включите флажок <strong>Ограничение размера вложения</strong>, для того чтобы ограничить размер отсылаемых сообщений. Напишите максимальный размер вложения. +<li>Включите флажок <strong>Ограничение размера вложения</strong>, для того чтобы ограничить размер отсылаемых сообщений. Напишите максимальный размер вложения. </li> <li>Нажмите <strong>Далее</strong> для перехода к дальнейшей настройке синхронизации данных.</li></ul><h3>Дополнительные настройки при синхронизации через файл</h3> <li>Включите флажок <strong>Транслитерировать имена файлов сообщений обмена</strong>, в этом случае имена файлов будут автоматически написаны на латинице. </li> <li>Для того чтобы сократить размер пересылаемого сообщения, включите флажок <strong>Архивировать файлы обмена</strong>, при необходимости введите <strong>Пароль архива</strong>. <h3>Особенности синхронизации данных через универсальный формат или формат EnterpriseData через файл</h3> -<ul><li>При настройке синхронизации через формат EnterpriseData или через универсальный формат состав и другие характеристики получаемых данных настраиваются с помощью правил отправки в приложении-корреспонденте. +<ul><li>При настройке синхронизации через формат EnterpriseData или через универсальный формат состав и другие характеристики получаемых данных настраиваются с помощью правил отправки в приложении-корреспонденте. </li> <li>Настройка варианта подключения отличается: </li> -<li>Настройте вариант подключения через файл в приложении-источнике; +<li>Настройте вариант подключения через файл в приложении-источнике; </li> -<li>Продолжите настройку синхронизации данных в приложении-приемнике. Настройте вариант подключения через файл. +<li>Продолжите настройку синхронизации данных в приложении-приемнике. Настройте вариант подключения через файл. </li> -<li>Для этого перейдите в приложение-приемник, в качестве варианта подключения выберите <strong>Синхронизация данных через файл</strong>, без подключения к другому приложению, укажите файл с настройками <strong>Синхронизация данных через универсальный формат.xml</strong>, полученными из приложения-источника. +<li>Для этого перейдите в приложение-приемник, в качестве варианта подключения выберите <strong>Синхронизация данных через файл</strong>, без подключения к другому приложению, укажите файл с настройками <strong>Синхронизация данных через универсальный формат.xml</strong>, полученными из приложения-источника. </li> -<li>Только после проведения настройки вариантов подключения в обоих приложениях можно будет перейти к дальнейшей настройке синхронизации данных.</li></ul><h3>Настройка правил отправки и получения данных</h3> +<li>Только после проведения настройки вариантов подключения в обоих приложениях можно будет перейти к дальнейшей настройке синхронизации данных.</li></ul><h3>Настройка правил отправки и получения данных</h3> <p>Правила синхронизации данных используются, если необходимо синхронизировать не все данные, а только часть.</p> <ul><li>С помощью переключателя <strong>Документы</strong> можно определить, как они будут синхронизироваться: -<ul><li><strong>Отправлять и получать автоматически</strong> - документы будут синхронизироваться в обоих приложениях; +<ul><li><strong>Отправлять и получать автоматически</strong> - документы будут синхронизироваться в обоих приложениях; </li> -<li><strong>Отправлять автоматически</strong> - документы будут автоматически отправляться во второе приложение, в первом приложении автоматического получения документов из второго приложения не будет; +<li><strong>Отправлять автоматически</strong> - документы будут автоматически отправляться во второе приложение, в первом приложении автоматического получения документов из второго приложения не будет; </li> -<li><strong>Получать автоматически</strong> - документы будут доставляться из втором приложении, документы отправляться не будут; +<li><strong>Получать автоматически</strong> - документы будут доставляться из втором приложении, документы отправляться не будут; </li> <li><strong>Отправлять и получать вручную</strong> - документы автоматически синхронизироваться не будут. Отправку и получение документов будет необходимо выполнять вручную.</li></ul></li> -<li>С помощью переключателя <strong>Нормативно-справочная информация</strong> выберите режим выгрузки списков приложения: +<li>С помощью переключателя <strong>Нормативно-справочная информация</strong> выберите режим выгрузки списков приложения: <ul><li><strong>Отправлять и получать автоматически</strong> - данные будут синхронизироваться в полном объеме, нормативно-справочная информация будет автоматически синхронизироваться в этой и во втором приложении; </li> -<li><strong>Отправлять и получать только используемую в документах</strong> - данные будут синхронизироваться в полном объеме, нормативно-справочная информация будет автоматически синхронизироваться в этой и во втором приложении; +<li><strong>Отправлять и получать только используемую в документах</strong> - данные будут синхронизироваться в полном объеме, нормативно-справочная информация будет автоматически синхронизироваться в этой и во втором приложении; </li> <li><strong>Отправлять и получать вручную</strong> - нормативно-справочная информация не будет автоматически синхронизироваться, ее отправку и получение необходимо будет выполнять вручную.</li></ul></li> <li>Укажите <strong>Дату начала отправки документов</strong>, по умолчанию значение равно дате начала текущего года. @@ -143,7 +143,7 @@ <li>Для включения фильтра <strong>По подразделениям</strong> на соответствующей вкладке установите переключатель в положение <strong>По выбранным</strong> (подразделениям), включите соответствующие флажки. </li> <li>Также можно выгружать информацию <strong>По выбранным</strong> (складам). Для этого на соответствующей вкладке с помощью переключателя выберите нужное значение, с помощью флажков выберите нужные склады.</li></ul></li> -<li><strong>Правила получения данных - значения по умолчанию</strong> необходимы для правильного отражения документов. Используются для автоматического заполнения данных в документах, которые не могут быть получены из обмена. Например, в документах, полученных из другого приложения, не были предусмотрены некоторые реквизиты. В этом случае при проведении синхронизации данных эти реквизиты будут заполнены приложением автоматически. Их можно указать сразу же, при настройке синхронизации (по ссылке <strong>Изменить значения автоматического заполнения</strong>).</li></ul><h3>Параметры синхронизации данных</h3> +<li><strong>Правила получения данных - значения по умолчанию</strong> необходимы для правильного отражения документов. Используются для автоматического заполнения данных в документах, которые не могут быть получены из обмена. Например, в документах, полученных из другого приложения, не были предусмотрены некоторые реквизиты. В этом случае при проведении синхронизации данных эти реквизиты будут заполнены приложением автоматически. Их можно указать сразу же, при настройке синхронизации (по ссылке <strong>Изменить значения автоматического заполнения</strong>).</li></ul><h3>Параметры синхронизации данных</h3> <ul><li>Выводится <strong>Представление этого приложения</strong>: <ul><li><strong>Наименование</strong>; </li> @@ -152,18 +152,18 @@ <ul><li><strong>Наименование</strong>; </li> <li><strong>Префикс</strong>.</li></ul></li> -<li>Нажмите <strong>Далее</strong> для проверки параметров и завершения настройки синхронизации данных для этого приложения (в случае прямого подключения к другому приложению будет предложено настроить и проверить параметры и для другого приложения).</li></ul><h3>Переход к интерактивной синхронизации данных</h3> +<li>Нажмите <strong>Далее</strong> для проверки параметров и завершения настройки синхронизации данных для этого приложения (в случае прямого подключения к другому приложению будет предложено настроить и проверить параметры и для другого приложения).</li></ul><h3>Переход к интерактивной синхронизации данных</h3> <ul><li> -<div>При синхронизации данных между двумя приложениями вероятность существования дублирования данных очень высока, для сопоставления данных рекомендуется использовать <a href="DataProcessor.ПомощникИнтерактивногоОбменаДанными/Help">Помощник интерактивной синхронизации данных</a>. </div></li></ul><h3>Особенности настройки синхронизации данных в клиент-серверном варианте</h3> +<div>При синхронизации данных между двумя приложениями вероятность существования дублирования данных очень высока, для сопоставления данных рекомендуется использовать <a href="DataProcessor.ПомощникИнтерактивногоОбменаДанными/Help">Помощник интерактивной синхронизации данных</a>. </div></li></ul><h3>Особенности настройки синхронизации данных в клиент-серверном варианте</h3> <ul><li>При настройке синхронизации данных в клиент-серверном варианте работы информационной базы необходимо иметь в виду, что данные синхронизируются на компьютере, на котором установлен сервер 1С:Предприятия. Для сервера 1С:Предприятия под управлением операционной системы Microsoft Windows это путь вида:<br><strong>\\servername\resource</strong><br>а для сервера под управлением Linux: <br><strong>//servername/resource</strong>. </li> <li>Необходимо убедиться в том, что каталог синхронизации доступен для чтения и записи пользователю операционной системы, от имени которого запущен сервер 1С:Предприятия. Если это не так, то необходимо дать этому пользователю необходимые права, или выбрать другого пользователя для запуска сервера 1С:Предприятия с необходимыми правами на каталог, используемый для синхронизации данных. Эти же рекомендации актуальны и для доступа к ресурсам FTP и электронной почты. Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.</li></ul><h3>Особенности создания узла РИБ. </h3> -<p>На первом этапе создается начальный образ РИБ. Все страницы помощника остаются без изменений. На странице <strong>Первый этап настройки успешно завершен</strong> по умолчанию включен флажок <strong>Создать начальный образ подчиненного узла РИБ</strong> (рекомендуется это сделать сразу). Этот шаг можно сделать и позже, из настройки синхронизации в любой момент. </p> +<p>На первом этапе создается начальный образ РИБ. Все страницы помощника остаются без изменений. На странице <strong>Первый этап настройки успешно завершен</strong> по умолчанию включен флажок <strong>Создать начальный образ подчиненного узла РИБ</strong> (рекомендуется это сделать сразу). Этот шаг можно сделать и позже, из настройки синхронизации в любой момент. </p> <ul><li> <div>После нажатия на кнопку <strong>Готово</strong> с включенным флажком предлагается создать начальный образ РИБ. Для этого перейдите по ссылке <strong>Создать начальный образ</strong>. </div> </li> <li> -<div>По умолчанию файл с настройками для создания узла РИБ будет создан в каталоге, который был выбран для обмена, <strong>На данном компьютере или на компьютере в локальной сети</strong>.</div> +<div>По умолчанию файл с настройками для создания узла РИБ будет создан в каталоге, который был выбран для обмена, <strong>На данном компьютере или на компьютере в локальной сети</strong>.</div> </li> <li> <div>Однако можно с помощью переключателя выбрать создание <strong>На сервере 1С: Предприятия</strong>. В этом случае необходимо заполнить <strong>Параметры информационной базы</strong>:</div> @@ -175,10 +175,10 @@ <div>Напишите <strong>Имя информационной базы в кластере</strong>.</div> </li> <li> -<div><img width="12" height="12" src="StdPicture.InputFieldSelect"></img> Выберите параметры в поле <strong>Защищенное соединение</strong>.</div> +<div><img width="12" height="12" src="StdPicture.InputFieldSelect"></img> Выберите параметры в поле <strong>Защищенное соединение</strong>.</div> </li> <li> -<div><img width="12" height="12" src="StdPicture.InputFieldSelect"></img> Выберите <strong>Тип СУБД</strong>.</div> +<div><img width="12" height="12" src="StdPicture.InputFieldSelect"></img> Выберите <strong>Тип СУБД</strong>.</div> </li> <li> <div>Укажите <strong>Сервер базы данных</strong>.</div> @@ -187,7 +187,7 @@ <div>Напишите <strong>Имя базы данных</strong> и</div> </li> <li> -<div>Заполните поле <strong>Пользователь базы данных</strong>, введите <strong>Пароль пользователя</strong>.</div> +<div>Заполните поле <strong>Пользователь базы данных</strong>, введите <strong>Пароль пользователя</strong>.</div> </li> <li> <div>Укажите <strong>Смещение дат</strong>.</div> @@ -207,5 +207,5 @@ <li>Создайте новую базу, выбрав <strong>Добавление в список существующей информационной базы</strong>, укажите путь к файлу с начальным образом. Указанная информационная база будет добавлена в список баз. </li> <li> -<div>После входа в приложение автоматически запустится <strong>Помощник</strong> на странице <strong>Продолжение настройки синхронизации данных с главным узлом</strong>, продолжите настройку синхронизации, нажмите кнопку <strong>Далее</strong>, чтобы продолжить настройку и задать вариант подключения к главному узлу.</div></li></ul><h3>Создание узла РИБ (внешние файлы)</h3> +<div>После входа в приложение автоматически запустится <strong>Помощник</strong> на странице <strong>Продолжение настройки синхронизации данных с главным узлом</strong>, продолжите настройку синхронизации, нажмите кнопку <strong>Далее</strong>, чтобы продолжить настройку и задать вариант подключения к главному узлу.</div></li></ul><h3>Создание узла РИБ (внешние файлы)</h3> <ul><li>Если у вас есть файлы в томах, то при <a href="CommonForm.СозданиеНачальногоОбразаСФайлами/Help">создании начального образа</a> вам также потребуется указать путь к файлу, в который будет записан архив (zip) со всеми файлами в томах. При первом запуске в базе филиала вам нужно будет выполнить команду <strong>Разместить файлы начального образа</strong>, указав в ней путь к файлу архива.</li></ul></li></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl index b2f41892e..3bb425437 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -16,14 +16,15 @@ УстановитьПривилегированныйРежим(Истина); - СтрокаXML = ""; + ТекстJSON = ""; Попытка - СтрокаXML = НастройкиПодключенияВXML(НастройкиПодключения); + ТекстJSON = ТранспортСообщенийОбмена.НастройкиПодключенияВJSON(НастройкиПодключения); Исключение ВызватьИсключение; КонецПопытки; - Константы.НастройкиПодчиненногоУзлаРИБ.Установить(СтрокаXML); + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(ТекстJSON); + ПланыОбмена.ЗарегистрироватьИзменения(НастройкиПодключения.УзелИнформационнойБазы, Метаданные.Константы.НастройкиПодчиненногоУзлаРИБ); @@ -35,13 +36,13 @@ // Процедура ПриНачалеПроверкиПодключения(НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт - КлючФоновогоЗадания = КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, + КлючФоновогоЗадания = ОбменДаннымиСервер.КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Проверка подключения %1'"), НастройкиПодключения.ВидТранспортаСообщенийОбмена)); + НСтр("ru = 'Проверка подключения %1'"), НастройкиПодключения.ИдентификаторТранспорта)); - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Проверка подключения %1 уже выполняется.'"), НастройкиПодключения.ВидТранспортаСообщенийОбмена); + НСтр("ru = 'Проверка подключения %1 уже выполняется.'"), НастройкиПодключения.ИдентификаторТранспорта); КонецЕсли; ПараметрыПроцедуры = Новый Структура; @@ -49,10 +50,9 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Проверка подключения к корреспонденту: %1.'"), НастройкиПодключения.ВидТранспортаСообщенийОбмена); + НСтр("ru = 'Проверка подключения к корреспонденту: %1.'"), НастройкиПодключения.ИдентификаторТранспорта); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникСозданияОбменаДанными.ПроверитьПодключениеККорреспонденту", @@ -77,56 +77,6 @@ #КонецОбласти -#Область СохранениеНастроекПодключения -// Для внутреннего использования. -// -Процедура ПриНачалеСохраненияНастроекПодключения(НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание = Истина) Экспорт - - КлючФоновогоЗадания = КлючФоновогоЗадания(НастройкиПодключения.ИмяПланаОбмена, - НСтр("ru = 'Сохранение настроек подключения'")); - - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохранение настроек подключения для ""%1"" уже выполняется.'"), НастройкиПодключения.ИмяПланаОбмена); - КонецЕсли; - - ПараметрыПроцедуры = Новый Структура; - ПараметрыПроцедуры.Вставить("НастройкиПодключения", НастройкиПодключения); - - ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор); - ПараметрыВыполнения.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохранение настроек подключения: %1.'"), НастройкиПодключения.ИмяПланаОбмена); - ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; - ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; - - ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( - "Обработки.ПомощникСозданияОбменаДанными.СохранитьНастройкиПодключения", - ПараметрыПроцедуры, - ПараметрыВыполнения); - - ПриНачалеДлительнойОперации(ФоновоеЗадание, ПараметрыОбработчика, ПродолжитьОжидание); - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ПриОжиданииСохраненияНастроекПодключения(ПараметрыОбработчика, ПродолжитьОжидание) Экспорт - - ПриОжиданииДлительнойОперации(ПараметрыОбработчика, ПродолжитьОжидание); - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ПриЗавершенииСохраненияНастроекПодключения(ПараметрыОбработчика, СтатусЗавершения) Экспорт - - ПриЗавершенииДлительнойОперации(ПараметрыОбработчика, СтатусЗавершения); - -КонецПроцедуры - -#КонецОбласти - #Область СохранениеНастроекСинхронизации // Для внутреннего использования. @@ -135,10 +85,10 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиСинхронизации.УзелОбмена); - КлючФоновогоЗадания = КлючФоновогоЗадания(ИмяПланаОбмена, + КлючФоновогоЗадания = ОбменДаннымиСервер.КлючФоновогоЗадания(ИмяПланаОбмена, НСтр("ru = 'Сохранение настроек синхронизации данных'")); - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Сохранение настроек синхронизации данных для ""%1"" уже выполняется.'"), ИмяПланаОбмена); КонецЕсли; @@ -151,7 +101,6 @@ НСтр("ru = 'Сохранение настроек синхронизации данных: %1.'"), ИмяПланаОбмена); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникСозданияОбменаДанными.СохранитьНастройкиСинхронизации", @@ -188,10 +137,10 @@ ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиУдаления.УзелОбмена); - КлючФоновогоЗадания = КлючФоновогоЗадания(ИмяПланаОбмена, + КлючФоновогоЗадания = ОбменДаннымиСервер.КлючФоновогоЗадания(ИмяПланаОбмена, НСтр("ru = 'Удаление настройки синхронизации данных'")); - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Удаление настройки синхронизации данных для ""%1"" уже выполняется.'"), ИмяПланаОбмена); КонецЕсли; @@ -204,7 +153,6 @@ НСтр("ru = 'Удаление настройки синхронизации данных: %1.'"), ИмяПланаОбмена); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникСозданияОбменаДанными.УдалитьНастройкуСинхронизации", @@ -243,7 +191,7 @@ НСтр("ru = 'Регистрация данных для начальной выгрузки (%1)'"), НастройкиРегистрации.УзелОбмена); - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Регистрация данных для начальной выгрузки для ""%1"" уже выполняется.'"), НастройкиРегистрации.УзелОбмена); @@ -258,7 +206,6 @@ НастройкиРегистрации.УзелОбмена); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникСозданияОбменаДанными.ЗарегистрироватьДанныеДляНачальнойВыгрузки", @@ -297,7 +244,7 @@ НСтр("ru = 'Загрузка настроек XDTO (%1)'"), НастройкиЗагрузки.УзелОбмена); - Если ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда + Если ОбменДаннымиСервер.ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загрузка настроек XDTO для ""%1"" уже выполняется.'"), НастройкиЗагрузки.УзелОбмена); @@ -312,7 +259,6 @@ НастройкиЗагрузки.УзелОбмена); ПараметрыВыполнения.КлючФоновогоЗадания = КлючФоновогоЗадания; ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "Обработки.ПомощникСозданияОбменаДанными.ЗагрузитьНастройкиXDTOКорреспондента", @@ -345,24 +291,23 @@ Процедура ИзменитьТранспортУзлаНаWS(Узел, КонечнаяТочка, ОбластьДанныхКорреспондента) Экспорт - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", Узел); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("WSКонечнаяТочкаКорреспондента", КонечнаяТочка); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); - СтруктураЗаписи.Вставить("WSОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); - СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); - + НастройкиТранспорта = Новый Структура; + НастройкиТранспорта.Вставить("ВнутренняяПубликация", Истина); + НастройкиТранспорта.Вставить("КонечнаяТочка", ""); + НастройкиТранспорта.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочка); + НастройкиТранспорта.Вставить("НаименованиеКорреспондента", ""); + НастройкиТранспорта.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + Попытка - - РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); - + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта(Узел, "SM", НастройкиТранспорта, Истина); + СтруктураЗаписи = Новый Структура("Корреспондент", Узел); ОбменДаннымиСлужебный.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи,"НастройкиТранспортаОбменаОбластиДанных"); РасписаниеРегламентногоЗадания = Справочники.СценарииОбменовДанными.РасписаниеРегламентногоЗаданияПоУмолчанию(); Справочники.СценарииОбменовДанными.СоздатьСценарий(Узел, РасписаниеРегламентногоЗадания, Истина); - + Исключение СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -378,21 +323,19 @@ Процедура ИзменитьТранспортУзлаКорреспондентаНаWS(Узел, КонечнаяТочка, КонечнаяТочкаКорреспондента, ОбластьДанных) Экспорт - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - Узел, "ИзменениеТранспортаУзлаКорреспондента", Неопределено, Ложь); - УстановитьПривилегированныйРежим(Истина); МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); - СтруктураНастроекАутентификации = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(КонечнаяТочкаКорреспондента); + НастройкиТранспортаWS = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(КонечнаяТочкаКорреспондента); + ИмяПланаОбмена = Узел.Метаданные().Имя; КодКонечнойТочки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка,"Код"); УстановитьПривилегированныйРежим(Ложь); Попытка - ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроекАутентификации); + ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(НастройкиТранспортаWS); Исключение @@ -404,18 +347,21 @@ ВызватьИсключение СообщениеОбОшибкеВКорреспонденте; КонецПопытки; + + СообщениеОбОшибке = ""; - СтрокаСообщенияОбОшибке = ""; - Прокси = Неопределено; - Если ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено Тогда - Прокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_2_1(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - КонецЕсли; - - КодУзлаКорреспондента = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена); + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("АдресВебСервиса", НастройкиТранспортаWS.WSURLВебСервиса); + ПараметрыПодключения.Вставить("ИмяПользователя", НастройкиТранспортаWS.WSИмяПользователя); + ПараметрыПодключения.Вставить("Пароль", НастройкиТранспортаWS.WSПароль); + + Прокси = ОбменДаннымиВебСервис.WSПрокси(ПараметрыПодключения, СообщениеОбОшибке); + + КодУзлаКорреспондента = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); ОбластьДанныхКорреспондента = ПараметрыСеанса["ОбластьДанныхЗначение"]; Параметры = Новый Структура; - Параметры.Вставить("ИмяПланаОбмена", СтруктураНастроекОбмена.ИмяПланаОбмена); + Параметры.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); Параметры.Вставить("КодУзлаКорреспондента", КодУзлаКорреспондента); Параметры.Вставить("КонечнаяТочкаКорреспондента", КодКонечнойТочки); Параметры.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); @@ -467,7 +413,6 @@ ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение доступных вариантов настроек обмена данными с внешними системами.'"); ПараметрыВыполнения.ОжидатьЗавершение = 0; - ПараметрыВыполнения.ЗапуститьВФоне = Истина; ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне( "ОбменДаннымиСВнешнимиСистемами.ПриПолученииВариантовНастроекОбменаДанными", @@ -497,6 +442,14 @@ // Для внутреннего использования. // +// Параметры: +// ПараметрыОбработчика - Структура - параметры длительной операции. +// Результат - Структура: +// * НастройкиВнешниеСистемы - Структура: +// * КодОшибки - Строка +// * СообщениеОбОшибке - Строка +// * ВариантыНастроек - ТаблицаЗначений +// Процедура ПриЗавершенииПолученияВариантовНастроекОбменаДанными(ПараметрыОбработчика, Результат) Экспорт Результат = Новый Структура; @@ -554,6 +507,75 @@ КонецФункции +Процедура ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + + // Создаем/обновляем узлы плана обмена. + СоздатьОбновитьУзлыПланаОбмена(НастройкиПодключения); + + // Загружаем настройки транспорта сообщений. + Если ЗначениеЗаполнено(НастройкиПодключения.ИдентификаторТранспорта) Тогда + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта( + НастройкиПодключения.УзелИнформационнойБазы, + НастройкиПодключения.ИдентификаторТранспорта, + НастройкиПодключения.НастройкиТранспорта, + Истина); + + КонецЕсли; + + // Обновляем значение константы префикса ИБ. + Если ПустаяСтрока(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")) + И Не ПустаяСтрока(НастройкиПодключения.ПрефиксИнформационнойБазыИсточника) Тогда + + ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); + + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) + И НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + + Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); + Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); + + ОбменДаннымиСервер.УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанныхПоУмолчанию(); + + // Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил. + ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ЗаполнитьНастройкиПодключенияИзXML( + НастройкиПодключения, ИмяФайлаСтрокаXML, ЭтоФайл = Ложь, ЭтоПодключениеОнлайн = Ложь, ИдентификаторТранспорта = "") Экспорт + + Если Не ЗначениеЗаполнено(ИдентификаторТранспорта) Тогда + + Если СтрНайти(ИмяФайлаСтрокаXML, "COM") Тогда + ИдентификаторТранспорта = "COM"; + Иначе + ИдентификаторТранспорта = "WS"; + КонецЕсли; + + КонецЕсли; + + НастройкиПодключенияИзXML = ТранспортСообщенийОбмена.НастройкиПодключенияИзXML(ИмяФайлаСтрокаXML, ИдентификаторТранспорта); + ТранспортСообщенийОбмена.ПроверитьИЗаполнитьНастройкиПодключенияXML(НастройкиПодключения, НастройкиПодключенияИзXML); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -662,25 +684,6 @@ КонецПроцедуры -Функция КлючФоновогоЗадания(ИмяПланаОбмена, Действие) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'План обмена: %1, действие: %2'"), ИмяПланаОбмена, Действие); - -КонецФункции - -Функция ЕстьАктивныеФоновыеЗадания(КлючФоновогоЗадания) - - Отбор = Новый Структура; - Отбор.Вставить("Ключ", КлючФоновогоЗадания); - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - - АктивныеФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - - Возврат (АктивныеФоновыеЗадания.Количество() > 0); - -КонецФункции - #КонецОбласти Процедура ПриПолученииДоступныхНастроекСинхронизацииДанных(ТаблицаНастройки) @@ -827,35 +830,11 @@ КонецПроцедуры -Процедура ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, Знач ВерсияКорреспондента, СообщениеОбОшибке = "") - - Если Не ЗначениеЗаполнено(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Попытка - ОбменДаннымиСервер.ПриПодключенииККорреспонденту(ИмяПланаОбмена, ВерсияКорреспондента); - Исключение - СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При выполнении обработчика ПриПодключенииККорреспонденту произошла ошибка:%1%2'"), - Символы.ПС, СообщениеОбОшибке)); - - Отказ = Истина; - КонецПопытки; - -КонецПроцедуры - Процедура ПроверитьПодключениеККорреспонденту(Параметры, АдресРезультата) Экспорт - НастройкиПодключения = Неопределено; - Параметры.Свойство("НастройкиПодключения", НастройкиПодключения); - РезультатПроверки = Новый Структура; РезультатПроверки.Вставить("ПодключениеУстановлено", Ложь); - РезультатПроверки.Вставить("ПодключениеРазрешено", Ложь); + РезультатПроверки.Вставить("ПодключениеРазрешено", Ложь); РезультатПроверки.Вставить("ВерсииИнтерфейса", Неопределено); РезультатПроверки.Вставить("СообщениеОбОшибке", ""); @@ -866,274 +845,28 @@ РезультатПроверки.Вставить("УзелКорреспондентаЕстьВЭтойБазе", Ложь); РезультатПроверки.Вставить("УзелДляУдаления", Неопределено); - РезультатПроверки.Вставить("ИмяПланаОбменаКорреспондента", НастройкиПодключения.ИмяПланаОбменаКорреспондента); + РезультатПроверки.Вставить("ИмяПланаОбменаКорреспондента",""); - Если НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиПодключения); - - ВнешнееСоединение = Результат.Соединение; - Если ВнешнееСоединение = Неопределено Тогда - РезультатПроверки.СообщениеОбОшибке = Результат.КраткоеОписаниеОшибки; - РезультатПроверки.ПодключениеУстановлено = Ложь; - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; - - РезультатПроверки.ПодключениеУстановлено = Истина; - РезультатПроверки.ВерсииИнтерфейса = ОбменДаннымиСервер.ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение); - - Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено - Или РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено - Или РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.2") Тогда - - СообщениеОбОшибке = ""; - - Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда - - ДополнительныеПараметры = Новый Структура; - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); - ДополнительныеПараметры.Вставить("ИдентификаторНастройки", НастройкиПодключения.ВариантНастройкиОбмена); - КонецЕсли; - - ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_3_0_2_2( - НастройкиПодключения.ИмяПланаОбменаКорреспондента, - НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, - СообщениеОбОшибке, - ДополнительныеПараметры); - Иначе - ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6( - НастройкиПодключения.ИмяПланаОбменаКорреспондента, - НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, - СообщениеОбОшибке); - КонецЕсли; - - ПараметрыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыИнформационнойБазы); - Если Не ПараметрыКорреспондента.ПланОбменаСуществует Тогда - РезультатПроверки.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В корреспонденте не найден план обмена ""%1"". - |Убедитесь, что - | - выбран правильный вид приложения для настройки обмена; - | - корректно указано расположение программы, к которой выполняется подключение.'"), - НастройкиПодключения.ИмяПланаОбменаКорреспондента); - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; - - РезультатПроверки.ПараметрыКорреспондентаПолучены = Истина; - РезультатПроверки.ПараметрыКорреспондента = ПараметрыКорреспондента; - - РезультатПроверки.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; - - Иначе - - РезультатПроверки.ПодключениеРазрешено = Ложь; - РезультатПроверки.СообщениеОбОшибке = НСтр("ru = 'Корреспондент не поддерживает версию 3.0.1.1 интерфейса ""ОбменДанными"". - |Для настройки подключения обновите конфигурацию корреспондента, или начните настройку из него.'"); - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - - КонецЕсли; - - Отказ = Ложь; - СообщениеОбОшибке = ""; - - ПриПодключенииККорреспонденту(Отказ, НастройкиПодключения.ИмяПланаОбмена, - РезультатПроверки.ПараметрыКорреспондента.ВерсияКонфигурации, СообщениеОбОшибке); - - Если Отказ Тогда - РезультатПроверки.ПодключениеРазрешено = Ложь; - РезультатПроверки.СообщениеОбОшибке = СообщениеОбОшибке; - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; - - ПроверитьДублированиеСинхронизаций(НастройкиПодключения, ПараметрыКорреспондента, РезультатПроверки, АдресРезультата); - - РезультатПроверки.ПодключениеРазрешено = Истина; - - ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - СтруктураНастроекАутентификации = СтруктураНастроекАутентификации(НастройкиПодключения); - - Попытка - РезультатПроверки.ВерсииИнтерфейса = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроекАутентификации); - Исключение - Информация = ИнформацияОбОшибке(); - РезультатПроверки.СообщениеОбОшибке = ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация); - РезультатПроверки.ПодключениеУстановлено = Ложь; - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецПопытки; - - СтрокаСообщенияОбОшибке = ""; - WSПрокси = Неопределено; - Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_2_2(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - ТекущаяВерсия = "3.0.2.2"; - ИначеЕсли РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено Тогда - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_2_1(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - ТекущаяВерсия = "3.0.2.1" - ИначеЕсли РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено Тогда - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_3_0_1_1(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - ТекущаяВерсия = "3.0.1.1"; - ИначеЕсли РезультатПроверки.ВерсииИнтерфейса.Найти("2.1.1.7") <> Неопределено Тогда - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - ТекущаяВерсия = "2.1.1.7"; - ИначеЕсли РезультатПроверки.ВерсииИнтерфейса.Найти("2.0.1.6") <> Неопределено Тогда - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - ТекущаяВерсия = "2.0.1.6"; - Иначе - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(СтруктураНастроекАутентификации, СтрокаСообщенияОбОшибке); - ТекущаяВерсия = "0.0.0.0"; - КонецЕсли; - - Если WSПрокси = Неопределено Тогда - РезультатПроверки.ПодключениеУстановлено = Ложь; - РезультатПроверки.СообщениеОбОшибке = СтрокаСообщенияОбОшибке; - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; - - РезультатПроверки.ПодключениеУстановлено = Истина; - - Если РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено - Или РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено - Или РезультатПроверки.ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда - - СообщениеОбОшибке = ""; - - ДополнительныеПараметры = Новый Структура; - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); - ДополнительныеПараметры.Вставить("ИдентификаторНастройки", НастройкиПодключения.ВариантНастройкиОбмена); - КонецЕсли; - - ПараметрыИнформационнойБазы = ОбменДаннымиВебСервис.ПолучитьПараметрыИБ(WSПрокси, ТекущаяВерсия, - НастройкиПодключения.ИмяПланаОбменаКорреспондента, - НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника, - СообщениеОбОшибке, - НастройкиПодключения.WSОбластьДанныхКорреспондента, - ДополнительныеПараметры); - - ПараметрыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(ПараметрыИнформационнойБазы); - Если Не ПараметрыКорреспондента.ПланОбменаСуществует Тогда - РезультатПроверки.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В корреспонденте не найден план обмена ""%1"". - |Убедитесь, что - | - выбран правильный вид приложения для настройки обмена; - | - указан правильный адрес приложения в Интернете.'"), - НастройкиПодключения.ИмяПланаОбменаКорреспондента); - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; - - РезультатПроверки.ПараметрыКорреспондентаПолучены = Истина; - РезультатПроверки.ПараметрыКорреспондента = ПараметрыКорреспондента; - - РезультатПроверки.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; - - Иначе - - РезультатПроверки.ПодключениеРазрешено = Ложь; - РезультатПроверки.СообщениеОбОшибке = - НСтр("ru = 'Корреспондент не поддерживает версию интерфейса 3.0.1.1 или 3.0.2.1 ""ОбменДанными"". - |Для настройки подключения обновите конфигурацию корреспондента, или начните настройку из него.'"); - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - - КонецЕсли; - - Отказ = Ложь; - СообщениеОбОшибке = ""; - - ПриПодключенииККорреспонденту(Отказ, НастройкиПодключения.ИмяПланаОбмена, - РезультатПроверки.ПараметрыКорреспондента.ВерсияКонфигурации, СообщениеОбОшибке); - - Если Отказ Тогда - РезультатПроверки.ПодключениеРазрешено = Ложь; - РезультатПроверки.СообщениеОбОшибке = СообщениеОбОшибке; - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; - - ПроверитьДублированиеСинхронизаций(НастройкиПодключения, ПараметрыКорреспондента, РезультатПроверки, АдресРезультата); - - РезультатПроверки.ПодключениеРазрешено = Истина; - - ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP - Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - - Отказ = Ложь; - СообщениеОбОшибке = ""; - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, - НастройкиПодключения, НастройкиПодключения.ВидТранспортаСообщенийОбмена, СообщениеОбОшибке); - - Если Отказ Тогда - РезультатПроверки.ПодключениеУстановлено = Ложь; - РезультатПроверки.СообщениеОбОшибке = СообщениеОбОшибке; - - ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); - Возврат; - КонецЕсли; + Транспорт = ТранспортСообщенийОбмена.Инициализация(Параметры.НастройкиПодключения); + + Если Транспорт.ПодключениеУстановлено() Тогда РезультатПроверки.ПодключениеУстановлено = Истина; РезультатПроверки.ПодключениеРазрешено = Истина; + Иначе + + СообщениеОбОшибке = Транспорт.СообщениеОбОшибке; + КонецЕсли; ПоместитьВоВременноеХранилище(РезультатПроверки, АдресРезультата); КонецПроцедуры -Процедура ПроверитьДублированиеСинхронизаций(НастройкиПодключения, ПараметрыКорреспондента, РезультатПроверки, АдресРезультата) - - Если НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника = "" Тогда - Возврат; - КонецЕсли; - - МенеджерПланаОбмена = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена]; - ЭтотУзел = МенеджерПланаОбмена.ЭтотУзел(); - Если ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ЭтотУзел) - И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ЭтотУзел) Тогда +Функция СохранитьНастройкиПодключения(НастройкиПодключения) Экспорт - УзелСсылка = МенеджерПланаОбмена.НайтиПоКоду(ПараметрыКорреспондента.КодЭтогоУзла); - - Если НЕ УзелСсылка.Пустая() Тогда - РезультатПроверки.УзелКорреспондентаЕстьВЭтойБазе = Истина; - РезультатПроверки.УзелДляУдаления = УзелСсылка; - КонецЕсли; - - РезультатПроверки.ЭтотУзелЕстьВКорреспонденте = ПараметрыКорреспондента.УзелСуществует; - - Если РезультатПроверки.ЭтотУзелЕстьВКорреспонденте - Или РезультатПроверки.УзелКорреспондентаЕстьВЭтойБазе Тогда - РезультатПроверки.СообщениеОбОшибке = НСтр("ru = 'Обнаружено дублирование настроек синхронизации'"); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура СохранитьНастройкиПодключения(Параметры, АдресРезультата) Экспорт - - НастройкиПодключения = Неопределено; - Параметры.Свойство("НастройкиПодключения", НастройкиПодключения); + УстановитьПривилегированныйРежим(Истина); Результат = Новый Структура; Результат.Вставить("НастройкиПодключенияСохранены", Ложь); @@ -1141,10 +874,133 @@ Результат.Вставить("УзелОбмена", Неопределено); Результат.Вставить("СообщениеОбОшибке", ""); Результат.Вставить("СтрокаНастроекПодключенияXML", ""); + Результат.Вставить("СтрокаНастроекПодключенияJSON", ""); Отказ = Ложь; - // Исправление дублирования настроек синхронизации + ИсправитьДублированиеНастроекСинхронизации(НастройкиПодключения, Результат, Отказ); + + Если Отказ Тогда + Возврат Результат; + КонецЕсли; + + // Сохранение узла и настроек подключения в ИБ. + Попытка + ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + Возврат Результат; + КонецПопытки; + + // Сохранение настроек подключения на стороне корреспондента для online-подключения, + // или отправка сообщения с настройками XDTO для offline-подключения. + ИдентификаторТранспорта = НастройкиПодключения.ИдентификаторТранспорта; + ПараметрыТранспорта = ТранспортСообщенийОбмена.ПараметрыТранспорта(ИдентификаторТранспорта); + + Если ПараметрыТранспорта.ПрямоеПодключение Тогда + + Параметры = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + Параметры.Корреспондент = НастройкиПодключения.УзелИнформационнойБазы; + ЗаполнитьЗначенияСвойств(Параметры, НастройкиПодключения); + + Транспорт = ТранспортСообщенийОбмена.Инициализация(Параметры); + + Если Не Транспорт.СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Тогда + Отказ = Истина; + Результат.СообщениеОбОшибке = Транспорт.СообщениеОбОшибке; + КонецЕсли; + + ИначеЕсли НЕ ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) Тогда + + Результат.СтрокаНастроекПодключенияXML = ТранспортСообщенийОбмена.НастройкиПодключенияВXML(НастройкиПодключения); + Результат.СтрокаНастроекПодключенияJSON = ТранспортСообщенийОбмена.НастройкиПодключенияВJSON(НастройкиПодключения); + + КонецЕсли; + + // Выгрузка для офф-лайн обмена через универсальный формат + Если Не ПараметрыТранспорта.ПрямоеПодключение Тогда + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + + Если НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда + // Получение сообщения обмена с настройками XDTO. + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Истина; + ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; + ПараметрыОбмена.ИдентификаторТранспорта = НастройкиПодключения.ИдентификаторТранспорта; + + // Для настройки синхронизации ошибка получения сообщения через обычные каналы связи не критична + // (сообщения обмена в принципе может не быть). + ОтказПолучение = Ложь; + ДополнительныеПараметры = Новый Структура; + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + НастройкиПодключения.УзелИнформационнойБазы, ПараметрыОбмена, ОтказПолучение, ДополнительныеПараметры); + Исключение + // Возникновение исключения - критично с точки зрения сохранения настройки. + // Исключений быть не должно. + Отказ = Истина; + Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + + Если ДополнительныеПараметры.Свойство("ПолученыДанныеДляСопоставления") Тогда + Результат.ЕстьДанныеДляСопоставления = ДополнительныеПараметры.ПолученыДанныеДляСопоставления; + КонецЕсли; + Иначе + // Отправка сообщения обмена с настройками XDTO. + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + ПараметрыОбмена.ИдентификаторТранспорта = НастройкиПодключения.ИдентификаторТранспорта; + + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( + НастройкиПодключения.УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + Исключение + Отказ = Истина; + Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); + КонецПопытки; + КонецЕсли; + + ИначеЕсли Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) + И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(НастройкиПодключения.ИмяПланаОбмена) Тогда + + Параметры = ТранспортСообщенийОбмена.ПараметрыИнициализации(ИдентификаторТранспорта); + Параметры.Корреспондент = НастройкиПодключения.УзелИнформационнойБазы; + ЗаполнитьЗначенияСвойств(Параметры, НастройкиПодключения); + + Транспорт = ТранспортСообщенийОбмена.Инициализация(Параметры); + + Результат.ЕстьДанныеДляСопоставления = Транспорт.ПолучитьДанные(); + + КонецЕсли; + + КонецЕсли; + + Если Не Отказ Тогда + Результат.НастройкиПодключенияСохранены = Истина; + Результат.УзелОбмена = НастройкиПодключения.УзелИнформационнойБазы; + Иначе + ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(НастройкиПодключения.УзелИнформационнойБазы); + + Результат.НастройкиПодключенияСохранены = Ложь; + Результат.УзелОбмена = Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ИсправитьДублированиеНастроекСинхронизации(НастройкиПодключения, Результат, Отказ) + Если НастройкиПодключения.ИсправитьДублированиеНастроекСинхронизации Тогда МенеджерПланаОбмена = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена]; @@ -1170,8 +1026,8 @@ УзелОбменаОбъект.ОбменДанными.Загрузка = Истина; УзелОбменаОбъект.Записать(); - НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника = НовыйКод; - НастройкиПодключения.КодПредопределенногоУзла = НовыйКод; + НастройкиПодключения.КодУзла = НовыйКод; + НастройкиПодключения.КодПредопределенногоУзла = НовыйКод; ЗафиксироватьТранзакцию(); @@ -1187,13 +1043,11 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - КонецПопытки; КонецЕсли; - УзелСсылка = МенеджерПланаОбмена.НайтиПоКоду(НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); + УзелСсылка = МенеджерПланаОбмена.НайтиПоКоду(НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); УзелСуществуетВЭтойБазе = НЕ УзелСсылка.Пустая(); Если УзелСуществуетВЭтойБазе И НастройкиПодключения.УзелКорреспондентаЕстьВЭтойБазе Тогда @@ -1212,297 +1066,14 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - - КонецПопытки; - - КонецЕсли; - - КонецЕсли; - - Если Отказ Тогда - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - Возврат; - КонецЕсли; - - // 1. Сохранение узла и настроек подключения в ИБ. - Попытка - ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения); - Исключение - Отказ = Истина; - Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); - КонецПопытки; - - Если Отказ Тогда - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - Возврат; - КонецЕсли; - - // 2. Сохранение настроек подключения для корреспондента. - Если Не НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) Тогда - ВыгрузитьНастройкиПодключенияДляПодчиненногоУзлаРИБ(НастройкиПодключения); - Иначе - Результат.СтрокаНастроекПодключенияXML = НастройкиПодключенияВXML(НастройкиПодключения); - КонецЕсли; - КонецЕсли; - - // 3. Сохранение настроек подключения на стороне корреспондента для online-подключения, - // или отправка сообщения с настройками XDTO для offline-подключения. - Если НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - Подключение = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиПодключения); - Результат.СообщениеОбОшибке = Подключение.ПодробноеОписаниеОшибки; - ВнешнееСоединение = Подключение.Соединение; - - Если ВнешнееСоединение = Неопределено Тогда - Отказ = Истина; - Иначе - - НастройкиПодключенияКорреспондента = ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.Создать(); - - НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; - - НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; - НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; - НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; - - НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена = - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента; - - НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; - - НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; - НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; - - Попытка - - ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзXML( - НастройкиПодключенияКорреспондента, Результат.СтрокаНастроекПодключенияXML); - - Исключение - Отказ = Истина; - Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); - КонецПопытки; - - Если Не Отказ Тогда - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; - - ТаблицаОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( - НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", НастройкиПодключения.УзелИнформационнойБазы); - - СтрокаХранилище = СериализаторXDTO.XMLСтрока( - Новый ХранилищеЗначения(ТаблицаОбъекты, Новый СжатиеДанных(9))); - - НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = ВнешнееСоединение.СериализаторXDTO.XMLЗначение( - ВнешнееСоединение.NewObject("ОписаниеТипов", "ХранилищеЗначения").Типы().Get(0), СтрокаХранилище); - КонецЕсли; - - Попытка - - ВнешнееСоединение.ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(Истина); - - ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.ВыполнитьДействияПоНастройкеОбменаДанными( - НастройкиПодключенияКорреспондента); - Исключение - Отказ = Истина; - Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); - КонецПопытки; - - КонецЕсли; - - КонецЕсли; - - ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - СтруктураНастроекАутентификации = СтруктураНастроекАутентификации(НастройкиПодключения); - ДополнительныеПараметры = Новый Структура("СтруктураНастроекАутентификации", СтруктураНастроекАутентификации); - - СообщениеОбОшибке = ""; - WSПрокси = ОбменДаннымиВебСервис.WSПроксиДляУзлаИнформационнойБазы(НастройкиПодключения.УзелИнформационнойБазы, - СообщениеОбОшибке, ДополнительныеПараметры); - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; - Иначе - НастройкиПодключенияКорреспондента = Новый Структура; - Для Каждого ЭлементНастройки Из НастройкиПодключения Цикл - НастройкиПодключенияКорреспондента.Вставить(ЭлементНастройки.Ключ); - КонецЦикла; - - НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; - - НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; - НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; - НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; - - НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена = - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента; - - НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; - - НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; - НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; - - ТаблицаОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( - НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", НастройкиПодключения.УзелИнформационнойБазы); - - НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = Новый ХранилищеЗначения(ТаблицаОбъекты, Новый СжатиеДанных(9)); - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиПодключения.WSКонечнаяТочка) Тогда - УстановитьПривилегированныйРежим(Истина); - НастройкиПодключенияКорреспондента.WSКонечнаяТочкаКорреспондента = - ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиПодключения.WSКонечнаяТочка, "Код"); - УстановитьПривилегированныйРежим(Ложь); - НастройкиПодключенияКорреспондента.WSОбластьДанныхКорреспондента = НастройкиПодключения.WSОбластьДанных; - КонецЕсли; - - ПараметрыПодключения = Новый Структура; - ПараметрыПодключения.Вставить("НастройкиПодключения", НастройкиПодключенияКорреспондента); - ПараметрыПодключения.Вставить("СтрокаПараметровXML", Результат.СтрокаНастроекПодключенияXML); - - Попытка - ОбменДаннымиВебСервис.СоздатьУзелОбмена(WSПрокси, ДополнительныеПараметры.ТекущаяВерсия, - ПараметрыПодключения, НастройкиПодключения.WSОбластьДанныхКорреспондента); - Исключение - Отказ = Истина; - Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); КонецПопытки; КонецЕсли; - - ИначеЕсли НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE - Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP - Или НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - - Если НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - // Получение сообщения обмена с настройками XDTO. - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВыполнятьЗагрузку = Истина; - ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = НастройкиПодключения.ВидТранспортаСообщенийОбмена; - // Для настройки синхронизации ошибка получения сообщения через обычные каналы связи не критична - // (сообщения обмена в принципе может не быть). - ОтказПолучение = Ложь; - ДополнительныеПараметры = Новый Структура; - Попытка - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - НастройкиПодключения.УзелИнформационнойБазы, ПараметрыОбмена, ОтказПолучение, ДополнительныеПараметры); - Исключение - // Возникновение исключения - критично с точки зрения сохранения настройки. - // Исключений быть не должно. - Отказ = Истина; - Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); - КонецПопытки; - - Если ДополнительныеПараметры.Свойство("ПолученыДанныеДляСопоставления") Тогда - Результат.ЕстьДанныеДляСопоставления = ДополнительныеПараметры.ПолученыДанныеДляСопоставления; - КонецЕсли; - Иначе - // Отправка сообщения обмена с настройками XDTO. - ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); - ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; - ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = НастройкиПодключения.ВидТранспортаСообщенийОбмена; - - Попытка - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы( - НастройкиПодключения.УзелИнформационнойБазы, ПараметрыОбмена, Отказ); - Исключение - Отказ = Истина; - Результат.СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибке); - КонецПопытки; - КонецЕсли; - - ИначеЕсли Не ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) - И Не ОбменДаннымиПовтИсп.ЭтоУзелСтандартногоОбменаДанными(НастройкиПодключения.ИмяПланаОбмена) Тогда - - СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.НастройкиТранспортаУзлаПланаОбмена( - НастройкиПодключения.УзелИнформационнойБазы, НастройкиПодключения.ВидТранспортаСообщенийОбмена); - - ОбработкаТранспортаСообщенийОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена; - - Если ОбработкаТранспортаСообщенийОбмена.ПодключениеУстановлено() Тогда - - Результат.ЕстьДанныеДляСопоставления = ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение(Истина); - - Если Не Результат.ЕстьДанныеДляСопоставления Тогда - // Возможно, сообщение удастся получить если применить виртуальный код узла (псевдоним). - Транслитерация = Неопределено; - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FILEТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); - ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("EMAILТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); - ИначеЕсли СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("FTPТранслитерироватьИменаФайловСообщенийОбмена", Транслитерация); - КонецЕсли; - Транслитерация = ?(Транслитерация = Неопределено, Ложь, Транслитерация); - - ШаблонИмениФайлаСтарый = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения; - СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ОбменДаннымиСервер.ШаблонИмениФайлаСообщения( - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, - СтруктураНастроекОбмена.УзелИнформационнойБазы, - Ложь, - Транслитерация, - Истина); - - Если ШаблонИмениФайлаСтарый <> СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения Тогда - Результат.ЕстьДанныеДляСопоставления = ОбработкаТранспортаСообщенийОбмена.ПолучитьСообщение(Истина); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - КонецЕсли; - Если Не Отказ Тогда - Результат.НастройкиПодключенияСохранены = Истина; - Результат.УзелОбмена = НастройкиПодключения.УзелИнформационнойБазы; - Иначе - ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(НастройкиПодключения.УзелИнформационнойБазы); - - Результат.НастройкиПодключенияСохранены = Ложь; - Результат.УзелОбмена = Неопределено; - КонецЕсли; - - ПоместитьВоВременноеХранилище(Результат, АдресРезультата); - КонецПроцедуры - + Процедура ЗагрузитьНастройкиXDTOКорреспондента(Параметры, АдресРезультата) Экспорт НастройкиЗагрузки = Неопределено; @@ -1517,9 +1088,8 @@ ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ПараметрыОбмена.ВыполнятьЗагрузку = Истина; ПараметрыОбмена.ВыполнятьВыгрузку = Ложь; - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = - РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(НастройкиЗагрузки.УзелОбмена); - + ПараметрыОбмена.ИдентификаторТранспорта = ТранспортСообщенийОбмена.ТранспортПоУмолчанию(НастройкиЗагрузки.УзелОбмена); + ДополнительныеПараметры = Новый Структура; Отказ = Ложь; @@ -1603,52 +1173,6 @@ КонецПроцедуры -Процедура ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - - // Создаем/обновляем узлы плана обмена. - СоздатьОбновитьУзлыПланаОбмена(НастройкиПодключения); - - // Загружаем настройки транспорта сообщений. - Если ЗначениеЗаполнено(НастройкиПодключения.ВидТранспортаСообщенийОбмена) Тогда - // Для online-обмена при настройке из коробки вид транспорта не будет и не должен быть заполнен. - ОбновитьНастройкиТранспортаОбменаДанными(НастройкиПодключения); - КонецЕсли; - - // Обновляем значение константы префикса ИБ. - Если ПустаяСтрока(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы")) - И Не ПустаяСтрока(НастройкиПодключения.ПрефиксИнформационнойБазыИсточника) Тогда - - ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); - - КонецЕсли; - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(НастройкиПодключения.ИмяПланаОбмена) - И НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда - - Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); - Константы.ИспользоватьСинхронизациюДанных.Установить(Истина); - Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); - - ОбменДаннымиСервер.УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанныхПоУмолчанию(); - - // Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил. - ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными(); - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - Процедура УдалитьНастройкуСинхронизации(Параметры, АдресРезультата) Экспорт НастройкиУдаления = Неопределено; @@ -1695,117 +1219,19 @@ Процедура УдалитьНастройкуСинхронизацииВКорреспонденте(НастройкиУдаления, Результат) - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(НастройкиУдаления.УзелОбмена); - ИмяПланаОбменаКорреспондента = - ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(НастройкиУдаления.УзелОбмена); - - ИдентификаторУзла = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(НастройкиУдаления.УзелОбмена); - - ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию( - НастройкиУдаления.УзелОбмена); - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта( - НастройкиУдаления.УзелОбмена, ВидТранспорта); - РезультатПодключения = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиПодключения); + УстановитьПривилегированныйРежим(Истина); - ВнешнееСоединение = РезультатПодключения.Соединение; - Если ВнешнееСоединение = Неопределено Тогда - Результат.СообщениеОбОшибкеВКорреспонденте = РезультатПодключения.ПодробноеОписаниеОшибки; - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Возврат; - КонецЕсли; + Параметры = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + Параметры.Корреспондент = НастройкиУдаления.УзелОбмена; + Параметры.ДанныеАутентификации = НастройкиУдаления.ДанныеАутентификации; + + Транспорт = ТранспортСообщенийОбмена.Инициализация(Параметры); + + Если Не Транспорт.УдалитьНастройкуСинхронизацииВКорреспонденте() Тогда - УзелКорреспондента = ВнешнееСоединение.ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбменаКорреспондента, - ИдентификаторУзла); - - Если УзелКорреспондента = Неопределено Тогда - Результат.СообщениеОбОшибкеВКорреспонденте = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В программе-корреспонденте не найден узел плана обмена ""%1"" по коду ""%2"".'"), - ИмяПланаОбменаКорреспондента, ИдентификаторУзла); - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Возврат; - КонецЕсли; - - Попытка - ВнешнееСоединение.ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УзелКорреспондента); - Исключение - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Результат.СообщениеОбОшибкеВКорреспонденте = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); - КонецПопытки; - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - НастройкиПодключения = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS( - НастройкиУдаления.УзелОбмена); - - СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( - НастройкиУдаления.УзелОбмена, "УдалениеУзла", Неопределено, Ложь); - - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(); - СтруктураНастроекОбмена.ДействиеПриОбмене = Неопределено; - - ПараметрыПрокси = Новый Структура; - ПараметрыПрокси.Вставить("ПараметрыАутентификации", Неопределено); - ПараметрыПрокси.Вставить("МинимальнаяВерсия", "3.0.1.1"); - - WSПрокси = Неопределено; - Отказ = Ложь; - СостояниеНастройки = Неопределено; - СообщениеОбОшибке = ""; - ОбменДаннымиВебСервис.ИнициализироватьWSПроксиДляУправленияОбменомДанными( - WSПрокси, СтруктураНастроекОбмена, ПараметрыПрокси, Отказ, СостояниеНастройки, СообщениеОбОшибке); - - Если Отказ Тогда - Результат.СообщениеОбОшибкеВКорреспонденте = СообщениеОбОшибке; - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); - Возврат; - КонецЕсли; - - Попытка - ОбменДаннымиВебСервис.УдалитьУзелОбмена(WSПрокси, ПараметрыПрокси.ТекущаяВерсия, СтруктураНастроекОбмена); - Исключение - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Результат.СообщениеОбОшибкеВКорреспонденте = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , Результат.СообщениеОбОшибкеВКорреспонденте); - КонецПопытки; - - ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОбменДаннымиСВнешнимиСистемами") Тогда - - Контекст = Новый Структура; - Контекст.Вставить("Корреспондент", НастройкиУдаления.УзелОбмена); - - МодульОбменДаннымиСВнешнимиСистемами = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСВнешнимиСистемами"); - - Попытка - МодульОбменДаннымиСВнешнимиСистемами.ПриУдаленииНастройкиСинхронизации(Контекст); - Исключение - Информация = ИнформацияОбОшибке(); - - Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Результат.СообщениеОбОшибкеВКорреспонденте = ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация); - - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(), - УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация)); - КонецПопытки; - - КонецЕсли; - - Иначе + Результат.СообщениеОбОшибкеВКорреспонденте = Транспорт.СообщениеОбОшибке; Результат.НастройкаУдаленаВКорреспонденте = Ложь; - Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для вида подключения ""%1"" не поддерживается удаление настройки синхронизации на стороне программы-корреспондента.'"), - ВидТранспорта); + КонецЕсли; КонецПроцедуры @@ -1880,10 +1306,10 @@ НачатьТранзакцию(); Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("ПланОбмена." + НастройкиПодключения.ИмяПланаОбмена); - ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотУзел); - Блокировка.Заблокировать(); + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("ПланОбмена." + НастройкиПодключения.ИмяПланаОбмена); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭтотУзел); + Блокировка.Заблокировать(); СвойстваЭтогоУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭтотУзел, "Код, Наименование"); КодЭтогоУзлаВБазе = СвойстваЭтогоУзла.Код; @@ -1900,7 +1326,7 @@ И Не ОбменДаннымиСервер.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) И (НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) - И ОбменДаннымиСервер.УзлыПланаОбмена(НастройкиПодключения.ИмяПланаОбмена).Количество() = 0 Тогда + И ОбменДаннымиПовтИсп.УзлыПланаОбмена(НастройкиПодключения.ИмяПланаОбмена).Количество() = 0 Тогда ОбновитьКод = Истина; @@ -1929,10 +1355,10 @@ ЭтотУзелОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); ЭтотУзелОбъект.Записать(); КонецЕсли; - + ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); + ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; @@ -2034,10 +1460,11 @@ ОбменДаннымиКонтрольЗацикливания.ОбновитьКонтур(НастройкиПодключения.ИмяПланаОбмена); СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("УзелИнформационнойБазы", НовыйУзел.Ссылка); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", НовыйУзел.Ссылка); СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", НастройкиПодключения.ИмяПланаОбменаКорреспондента); ОбменДаннымиСлужебный.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO"); + КонецЕсли; НастройкиПодключения.УзелИнформационнойБазы = НовыйУзел.Ссылка; @@ -2072,692 +1499,20 @@ КонецПроцедуры -Процедура ОбновитьНастройкиТранспортаОбменаДанными(НастройкиПодключения) - - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", НастройкиПодключения.УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", НастройкиПодключения.ВидТранспортаСообщенийОбмена); - - СтруктураЗаписи.Вставить("COMАутентификацияОперационнойСистемы"); - СтруктураЗаписи.Вставить("COMВариантРаботыИнформационнойБазы"); - СтруктураЗаписи.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия"); - СтруктураЗаписи.Вставить("COMИмяПользователя"); - СтруктураЗаписи.Вставить("COMИмяСервера1СПредприятия"); - СтруктураЗаписи.Вставить("COMКаталогИнформационнойБазы"); - СтруктураЗаписи.Вставить("COMПарольПользователя"); - - СтруктураЗаписи.Вставить("EMAILМаксимальныйДопустимыйРазмерСообщения"); - СтруктураЗаписи.Вставить("EMAILСжиматьФайлИсходящегоСообщения"); - СтруктураЗаписи.Вставить("EMAILУчетнаяЗапись"); - СтруктураЗаписи.Вставить("EMAILТранслитерироватьИменаФайловСообщенийОбмена"); - - СтруктураЗаписи.Вставить("FILEКаталогОбменаИнформацией"); - СтруктураЗаписи.Вставить("FILEСжиматьФайлИсходящегоСообщения"); - СтруктураЗаписи.Вставить("FILEТранслитерироватьИменаФайловСообщенийОбмена"); - - СтруктураЗаписи.Вставить("FTPСжиматьФайлИсходящегоСообщения"); - СтруктураЗаписи.Вставить("FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); - СтруктураЗаписи.Вставить("FTPСоединениеПароль"); - СтруктураЗаписи.Вставить("FTPСоединениеПассивноеСоединение"); - СтруктураЗаписи.Вставить("FTPСоединениеПользователь"); - СтруктураЗаписи.Вставить("FTPСоединениеПорт"); - СтруктураЗаписи.Вставить("FTPСоединениеПуть"); - СтруктураЗаписи.Вставить("FTPТранслитерироватьИменаФайловСообщенийОбмена"); - - СтруктураЗаписи.Вставить("WSURLВебСервиса"); - СтруктураЗаписи.Вставить("WSИмяПользователя"); - СтруктураЗаписи.Вставить("WSПароль"); - СтруктураЗаписи.Вставить("WSЗапомнитьПароль"); - - СтруктураЗаписи.Вставить("WSОбластьДанныхКорреспондента"); - СтруктураЗаписи.Вставить("WSКонечнаяТочкаКорреспондента"); - - СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); - - СтруктураЗаписи.Вставить("ПарольАрхиваСообщенияОбмена"); - - ЗаполнитьЗначенияСвойств(СтруктураЗаписи, НастройкиПодключения); - - РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); - -КонецПроцедуры - -Функция СтруктураНастроекАутентификации(НастройкиПодключения) - - Результат = Новый Структура("WSURLВебСервиса,WSИмяПользователя,WSПароль"); - - Если ЗначениеЗаполнено(НастройкиПодключения.WSКонечнаяТочкаКорреспондента) Тогда - - УстановитьПривилегированныйРежим(Истина); - - МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); - Настройки = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(НастройкиПодключения.WSКонечнаяТочкаКорреспондента); - - УстановитьПривилегированныйРежим(Ложь); - - ЗаполнитьЗначенияСвойств(Результат, Настройки); - - Иначе - - ЗаполнитьЗначенияСвойств(Результат, НастройкиПодключения); - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -#Область НастройкиВФорматеXML - -Процедура ЗаполнитьНастройкиПодключенияИзКонстанты(НастройкиПодключения) Экспорт +Функция ПолучениеПараметровКорреспондента(НастройкиПодключения) Экспорт УстановитьПривилегированныйРежим(Истина); - СтрокаПодключения = Константы.НастройкиПодчиненногоУзлаРИБ.Получить(); - ЗаполнитьНастройкиПодключенияИзXML(НастройкиПодключения, СтрокаПодключения); + ПараметрыИнициализации = ТранспортСообщенийОбмена.ПараметрыИнициализации(); + ЗаполнитьЗначенияСвойств(ПараметрыИнициализации, НастройкиПодключения); -КонецПроцедуры - -Процедура ЗаполнитьНастройкиПодключенияИзXML(НастройкиПодключения, - ИмяФайлаСтрокаXML, ЭтоФайл = Ложь, ЭтоПодключениеОнлайн = Ложь) Экспорт + Транспорт = ТранспортСообщенийОбмена.Инициализация(ПараметрыИнициализации); + ПараметрыКорреспондента = Транспорт.ПараметрыКорреспондента(НастройкиПодключения); - СтруктураНастроек = Неопределено; - Попытка - ПрочитатьНастройкиПодключенияИзXMLВСтруктуру(СтруктураНастроек, ИмяФайлаСтрокаXML, ЭтоФайл); - Исключение - ВызватьИсключение; - КонецПопытки; - - КорректныйФайлНастроек = Ложь; - ИмяПланаОбменаВНастройках = ""; - - Если СтруктураНастроек.Свойство("ИмяПланаОбмена", ИмяПланаОбменаВНастройках) - И СтруктураНастроек.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбмена Тогда - - КорректныйФайлНастроек = Истина; - - ИначеЕсли ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - - // Нет контроля для обмена через EnterpriceData - КорректныйФайлНастроек = Истина; - - КонецЕсли; - - Если Не КорректныйФайлНастроек Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл не содержит настроек подключения для выбранного обмена данными. - |Выбран обмен ""%1"". - |В файле указаны настройки для обмена ""%2"".'"), - НастройкиПодключения.ИмяПланаОбмена, ИмяПланаОбменаВНастройках); - КонецЕсли; - - Если Не ЗначениеЗаполнено(НастройкиПодключения.ИмяПланаОбменаКорреспондента) Тогда - НастройкиПодключения.ИмяПланаОбменаКорреспондента = СтруктураНастроек.ИмяПланаОбмена; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(НастройкиПодключения, СтруктураНастроек, , "ИмяПланаОбмена, ПрефиксИнформационнойБазыИсточника"); - - Если Не ЭтоПодключениеОнлайн - Или Не ЗначениеЗаполнено(НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена) Тогда - ПустаяСсылкаПланаОбмена = ПланыОбмена[НастройкиПодключения.ИмяПланаОбмена].ПустаяСсылка(); - - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена = - Не ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) - Или Не ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПустаяСсылкаПланаОбмена); - КонецЕсли; - - ВидТранспортаСообщенийОбмена = ""; - Если СтруктураНастроек.Свойство("ВидТранспортаСообщенийОбмена", ВидТранспортаСообщенийОбмена) - И ТипЗнч(ВидТранспортаСообщенийОбмена) = Тип("Строка") Тогда - - ИмяВидаТранспорта = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(СтруктураНастроек.ВидТранспортаСообщенийОбмена, "en"); - НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена[ИмяВидаТранспорта]; - - КонецЕсли; - - Если Не ЭтоПодключениеОнлайн Тогда - КодНовогоУзлаВторойБазы = Неопределено; - СтруктураНастроек.Свойство("КодНовогоУзлаВторойБазы", КодНовогоУзлаВторойБазы); - - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = - НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента - Или (НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" - И ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) - И ЗначениеЗаполнено(КодНовогоУзлаВторойБазы) - И СтрДлина(КодНовогоУзлаВторойБазы) <> 36); - КонецЕсли; - - Если Не НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена - И Не НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента Тогда - - СтруктураНастроек.Свойство("КодПредопределенногоУзла", НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника); - СтруктураНастроек.Свойство("КодНовогоУзлаВторойБазы", НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника); - - Иначе - - СтруктураНастроек.Свойство("ПрефиксИнформационнойБазыИсточника", НастройкиПодключения.ПрефиксИнформационнойБазыИсточника); - СтруктураНастроек.Свойство("КодНовогоУзлаВторойБазы", НастройкиПодключения.ПрефиксИнформационнойБазыПриемника); - - КонецЕсли; - - Если НастройкиПодключения.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" - И (НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена - Или НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента) Тогда - - ПрефиксИБ = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - Если Не ПустаяСтрока(ПрефиксИБ) - И ПрефиксИБ <> НастройкиПодключения.ПрефиксИнформационнойБазыИсточника Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Префикс программы, указанный при настройке (""%1""), не соответствует префиксу в этой программе (""%2""). - |Для продолжения начните настройку заново из другой программы, и укажите корректный префикс (""%2"").'"), - НастройкиПодключения.ПрефиксИнформационнойБазыИсточника, ПрефиксИБ); - - КонецЕсли; - - КонецЕсли; - - УчетнаяЗаписьЭлектроннойПочты = Неопределено; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") - И СтруктураНастроек.Свойство("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты) - И УчетнаяЗаписьЭлектроннойПочты <> Неопределено Тогда - - МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); - УчетнаяЗаписьЭтойБазы = МодульРаботаСПочтовымиСообщениямиСлужебный.УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента( - УчетнаяЗаписьЭлектроннойПочты); - НастройкиПодключения.EMAILУчетнаяЗапись = УчетнаяЗаписьЭтойБазы.Ссылка; - - КонецЕсли; - - // Поддержка файла настроек обмена формата версии 1.0. - Если НастройкиПодключения.ВерсияФорматаФайлаНастроекОбменаДанными = "1.0" Тогда - - НастройкиПодключения.НаименованиеЭтойБазы = НСтр("ru = 'Эта информационная база'"); - СтруктураНастроек.Свойство("НаименованиеНастройкиВыполненияОбмена", НастройкиПодключения.НаименованиеВторойБазы); - СтруктураНастроек.Свойство("КодНовогоУзла", НастройкиПодключения.КодНовогоУзлаВторойБазы); - - КонецЕсли; - -КонецПроцедуры - -Функция НастройкиПодключенияВXML(НастройкиПодключения, ИмяФайла = "", ТипКодировки = "UTF-8") Экспорт - - ЗаписьXML = Новый ЗаписьXML; - - Если ПустаяСтрока(ИмяФайла) Тогда - ЗаписьXML.УстановитьСтроку(ТипКодировки); - Иначе - ЗаписьXML.ОткрытьФайл(ИмяФайла, ТипКодировки); - КонецЕсли; - - ЗаписьXML.ЗаписатьОбъявлениеXML(); - - Если НастройкиПодключения.ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда - - УзелКорреспондента = НастройкиПодключения.УзелИнформационнойБазы; - - ПараметрыЗаголовка = ОбменДаннымиXDTOСервер.ПараметрыЗаголовкаСообщенияОбмена(); - - ПараметрыЗаголовка.ФорматОбмена = НастройкиПодключения.ФорматОбмена; - ПараметрыЗаголовка.ЭтоОбменЧерезПланОбмена = Истина; - - ПараметрыЗаголовка.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбмена; - ПараметрыЗаголовка.ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(УзелКорреспондента); - - ПараметрыЗаголовка.ИдентификаторПолучателя = ОбменДаннымиСервер.ИдентификаторУзлаКорреспондентаДляОбмена(УзелКорреспондента); - ПараметрыЗаголовка.ИдентификаторОтправителя = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(УзелКорреспондента); - - ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(НастройкиПодключения.ИмяПланаОбмена, "ВерсииФорматаОбмена"); - Для Каждого ВерсияФормата Из ВерсииФормата Цикл - ПараметрыЗаголовка.ПоддерживаемыеВерсии.Добавить(ВерсияФормата.Ключ); - КонецЦикла; - - ПараметрыЗаголовка.ПоддерживаемыеОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( - НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", УзелКорреспондента); - - ПараметрыЗаголовка.Префикс = ОбменДаннымиСервер.ПрефиксИнформационнойБазы(); - - ПараметрыЗаголовка.УзелКорреспондента = УзелКорреспондента; - - ОбменДаннымиXDTOСервер.ЗаписатьЗаголовокСообщенияОбмена(ЗаписьXML, ПараметрыЗаголовка); - - Иначе - ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыНастройки"); // @Non-NLS - ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", ВерсияФорматаНастроекОбменаДанными()); // @Non-NLS - - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); - - ЗаписатьПараметрыПодключения(ЗаписьXML, НастройкиПодключения); - - Если НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL Тогда - ЗаписатьУчетнуюЗаписьЭлектроннойПочты(ЗаписьXML, НастройкиПодключения); - КонецЕсли; - - Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда - ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, НастройкиПодключения.ИмяПланаОбмена); - КонецЕсли; - - ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыНастройки - КонецЕсли; - - Возврат ЗаписьXML.Закрыть(); + Возврат ПараметрыКорреспондента; КонецФункции -Процедура ЗаписатьПараметрыПодключения(ЗаписьXML, НастройкиПодключения) - - ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); // @Non-NLS - - ИмяПланаОбмена = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(НастройкиПодключения.ИмяПланаОбмена, "ru"); - ДобавитьЗаписьXML(ЗаписьXML, ИмяПланаОбмена, "ИмяПланаОбмена"); // @Non-NLS - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеВторойБазы"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); // @Non-NLS - - ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзлаВторойБазы"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); // @Non-NLS - - // Настройки транспорта сообщений обмена. - Если ЗначениеЗаполнено(НастройкиПодключения.ВидТранспортаСообщенийОбмена) - И НастройкиПодключения.ВидТранспортаСообщенийОбмена <> Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - - Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена, "ВидТранспортаСообщенийОбмена"); // @Non-NLS - Иначе - ДобавитьНастройкуВидаТранспортаДляРусскойВерсии(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена); - КонецЕсли; - - Иначе - ДобавитьЗаписьXML(ЗаписьXML, Неопределено, "ВидТранспортаСообщенийОбмена"); // @Non-NLS - КонецЕсли; - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена"); // @Non-NLS - - Если НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL Тогда - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILМаксимальныйДопустимыйРазмерСообщения, "EMAILМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILСжиматьФайлИсходящегоСообщения, "EMAILСжиматьФайлИсходящегоСообщения"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILУчетнаяЗапись, "EMAILУчетнаяЗапись"); // @Non-NLS - - КонецЕсли; - - Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE Тогда - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEКаталогОбменаИнформацией, "FILEКаталогОбменаИнформацией"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEСжиматьФайлИсходящегоСообщения, "FILEСжиматьФайлИсходящегоСообщения"); // @Non-NLS - - КонецЕсли; - - Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP Тогда - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСжиматьФайлИсходящегоСообщения, "FTPСжиматьФайлИсходящегоСообщения"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПароль, "FTPСоединениеПароль"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПассивноеСоединение, "FTPСоединениеПассивноеСоединение"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПользователь, "FTPСоединениеПользователь"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПорт, "FTPСоединениеПорт"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПуть, "FTPСоединениеПуть"); // @Non-NLS - - КонецЕсли; - - Если НастройкиПодключения.ИспользоватьПараметрыТранспортаCOM Тогда - - ПараметрыПодключенияИБ = ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы( - СтрокаСоединенияИнформационнойБазы()); - - ВариантРаботыИнформационнойБазы = ПараметрыПодключенияИБ.ВариантРаботыИнформационнойБазы; - ИмяИнформационнойБазыНаСервере1СПредприятия = ПараметрыПодключенияИБ.ИмяИнформационнойБазыНаСервере1СПредприятия; - ИмяСервера1СПредприятия = ПараметрыПодключенияИБ.ИмяСервера1СПредприятия; - КаталогИнформационнойБазы = ПараметрыПодключенияИБ.КаталогИнформационнойБазы; - - ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - АутентификацияОС = ПользовательИБ.АутентификацияОС; - ИмяПользователя = ПользовательИБ.Имя; - - ДобавитьЗаписьXML(ЗаписьXML, ВариантРаботыИнформационнойБазы, "COMВариантРаботыИнформационнойБазы"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, ИмяИнформационнойБазыНаСервере1СПредприятия, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, ИмяСервера1СПредприятия, "COMИмяСервера1СПредприятия"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, КаталогИнформационнойБазы, "COMКаталогИнформационнойБазы"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, АутентификацияОС, "COMАутентификацияОперационнойСистемы"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, ИмяПользователя, "COMИмяПользователя"); - - КонецЕсли; - - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL, "ИспользоватьПараметрыТранспортаEMAIL"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE, "ИспользоватьПараметрыТранспортаFILE"); // @Non-NLS - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP, "ИспользоватьПараметрыТранспортаFTP"); // @Non-NLS - - // Поддержка файла настроек обмена формата версии 1.0. - ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена"); // @Non-NLS - - ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзла"); // @Non-NLS - - КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиПодключения.УзелИнформационнойБазы, "Код"); // @Non-NLS - - ДобавитьЗаписьXML(ЗаписьXML, КодУзлаИБ, "КодПредопределенногоУзла"); // @Non-NLS - - НомерОтправленного = НастройкиПодключения.УзелИнформационнойБазы.НомерОтправленного; - Если НомерОтправленного > 0 Тогда - ДобавитьЗаписьXML(ЗаписьXML, НомерОтправленного, "НомерОтправленного"); // @Non-NLS - КонецЕсли; - - НомерПринятого = НастройкиПодключения.УзелИнформационнойБазы.НомерПринятого; - Если НомерПринятого > 0 Тогда - ДобавитьЗаписьXML(ЗаписьXML, НомерПринятого, "НомерПринятого"); // @Non-NLS - КонецЕсли; - - ЗаписьXML.ЗаписатьКонецЭлемента(); // ОсновныеПараметрыОбмена - -КонецПроцедуры - -Процедура ДобавитьНастройкуВидаТранспортаДляРусскойВерсии(ЗаписьXML, ВидТранспортаСообщенийОбмена) - - СоответствиеВидовТранспорта = Новый Соответствие; - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.EMAIL"), "EMAIL"); // @Non-NLS-2 - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.FILE"), "FILE"); // @Non-NLS-2 - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.FTP"), "FTP"); // @Non-NLS-2 - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WS"), "WS"); // @Non-NLS-2 - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.COM"), "COM"); // @Non-NLS-2 - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим"), "WSПассивныйРежим"); // @Non-NLS-2 - СоответствиеВидовТранспорта.Вставить(ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема"), "ВнешняяСистема"); // @Non-NLS-2 - - ВидТранспортаНастройка = СоответствиеВидовТранспорта.Получить(ВидТранспортаСообщенийОбмена); - - Если ВидТранспортаНастройка <> Неопределено Тогда - - ЗаписьXML.ЗаписатьНачалоЭлемента("ВидТранспортаСообщенийОбмена"); // @Non-NLS - ЗаписьXML.ЗаписатьАтрибут("xmlns", ""); - ЗаписьXML.ЗаписатьАтрибут("xsi:type", "EnumRef.ВидыТранспортаСообщенийОбмена"); // @Non-NLS-2 - ЗаписьXML.ЗаписатьТекст(ВидТранспортаНастройка); - ЗаписьXML.ЗаписатьКонецЭлемента(); - - КонецЕсли; - -КонецПроцедуры - -Функция ИмяЗначенияПеречисления(Значение) Экспорт - - ОбъектМД = Значение.Метаданные(); - - МенеджерПеречисления = Перечисления[ОбъектМД.Имя]; - ИндексЗначения = МенеджерПеречисления.Индекс(Значение); - - Возврат ОбъектМД.ЗначенияПеречисления.Получить(ИндексЗначения).Имя; - -КонецФункции - -Процедура ЗаписатьУчетнуюЗаписьЭлектроннойПочты(ЗаписьXML, НастройкиПодключения) - - EMAILУчетнаяЗапись = Неопределено; - Если ЗначениеЗаполнено(НастройкиПодключения.EMAILУчетнаяЗапись) Тогда - EMAILУчетнаяЗапись = НастройкиПодключения.EMAILУчетнаяЗапись.ПолучитьОбъект(); - КонецЕсли; - - ЗаписьXML.ЗаписатьНачалоЭлемента("УчетнаяЗаписьЭлектроннойПочты"); - ЗаписатьXML(ЗаписьXML, EMAILУчетнаяЗапись); - ЗаписьXML.ЗаписатьКонецЭлемента(); // УчетнаяЗаписьЭлектроннойПочты - -КонецПроцедуры - -Процедура ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, ИмяПланаОбмена) - - ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыОбменаXDTO"); // @Non-NLS - - ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена"); - - ЗаписатьXML(ЗаписьXML, ФорматОбмена, "ФорматОбмена", НазначениеТипаXML.Явное); // @Non-NLS - - ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыОбменаXDTO - -КонецПроцедуры - -Процедура ДобавитьЗаписьXML(ЗаписьXML, Значение, ПолноеИмя) - - ЗаписатьXML(ЗаписьXML, Значение, ПолноеИмя, НазначениеТипаXML.Явное); - -КонецПроцедуры - -Процедура ПрочитатьНастройкиПодключенияИзXMLВСтруктуру(СтруктураНастроек, ИмяФайлаСтрокаXML, ЭтоФайл) - - СтруктураНастроек = Новый Структура; - - ЧтениеXML = Новый ЧтениеXML; - Если ЭтоФайл Тогда - ЧтениеXML.ОткрытьФайл(ИмяФайлаСтрокаXML); - Иначе - ЧтениеXML.УстановитьСтроку(ИмяФайлаСтрокаXML); - КонецЕсли; - - Пока ЧтениеXML.Прочитать() Цикл - - Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента - И ЧтениеXML.Имя = "ПараметрыНастройки" Тогда // @Non-NLS - - ВерсияФормата = ЧтениеXML.ПолучитьАтрибут("ВерсияФормата"); // @Non-NLS - СтруктураНастроек.Вставить("ВерсияФорматаФайлаНастроекОбменаДанными", - ?(ВерсияФормата = Неопределено, "1.0", ВерсияФормата)); - - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента - И ЧтениеXML.Имя = "ОсновныеПараметрыОбмена" Тогда // @Non-NLS - - СчитатьДанныеВСтруктуру(СтруктураНастроек, ЧтениеXML); - - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента - И ЧтениеXML.Имя = "УчетнаяЗаписьЭлектроннойПочты" Тогда // @Non-NLS - - Если СтруктураНастроек.Свойство("ИспользоватьПараметрыТранспортаEMAIL") - И СтруктураНастроек.ИспользоватьПараметрыТранспортаEMAIL Тогда - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - - // Зачитываем узел УчетнаяЗаписьЭлектроннойПочты. - ЧтениеXML.Прочитать(); // УчетнаяЗаписьЭлектроннойПочты {НачалоЭлемента} - - СчитатьДанныеЭлектроннойПочты(СтруктураНастроек, ЧтениеXML); - - ЧтениеXML.Прочитать(); // УчетнаяЗаписьЭлектроннойПочты {КонецЭлемента} - - Иначе - - ЧтениеXML.Пропустить(); - - КонецЕсли; - - КонецЕсли; - - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента - И ЧтениеXML.Имя = "ПараметрыОбменаXDTO" Тогда // @Non-NLS - - СчитатьПараметрыОбменаXDTO(СтруктураНастроек, ЧтениеXML); - - КонецЕсли; - - КонецЦикла; - - ЧтениеXML.Закрыть(); - -КонецПроцедуры - -Процедура СчитатьДанныеВСтруктуру(СтруктураНастроек, ЧтениеXML) - - Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда - ВызватьИсключение НСтр("ru = 'Ошибка разбора XML.'"); - КонецЕсли; - - ЧтениеXML.Прочитать(); - - Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл - - ИмяУзла = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(ЧтениеXML.Имя, "en"); - - Если ИмяУзла = "ВидТранспортаСообщенийОбмена" - И Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский Тогда - ПрочитатьНастройкуВидаТранспортаДляАнглийскойВерсии(СтруктураНастроек, ЧтениеXML) - Иначе - СтруктураНастроек.Вставить(ИмяУзла, ПрочитатьXML(ЧтениеXML)); - КонецЕсли; - - КонецЦикла; - - ЧтениеXML.Прочитать(); - -КонецПроцедуры - -Процедура ПрочитатьНастройкуВидаТранспортаДляАнглийскойВерсии(СтруктураНастроек, ЧтениеXML) - - СоответствиеВидовТранспорта = Новый Соответствие; - СоответствиеВидовТранспорта.Вставить("EMAIL", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.EMAIL")); // @Non-NLS-1 - СоответствиеВидовТранспорта.Вставить("FILE", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.FILE")); // @Non-NLS-1 - СоответствиеВидовТранспорта.Вставить("FTP", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.FTP")); // @Non-NLS-1 - СоответствиеВидовТранспорта.Вставить("WS", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WS")); // @Non-NLS-1 - СоответствиеВидовТранспорта.Вставить("COM", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.COM")); // @Non-NLS-1 - СоответствиеВидовТранспорта.Вставить("WSПассивныйРежим", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим")); // @Non-NLS-1 - СоответствиеВидовТранспорта.Вставить("ВнешняяСистема", ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема")); // @Non-NLS-1 - - ЧтениеXML.Прочитать(); - - Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Цикл - - Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда - - ВидТранспортаНастройка = ЧтениеXML.Значение; - - ВидТранспорта = СоответствиеВидовТранспорта.Получить(ВидТранспортаНастройка); - - Если ВидТранспорта <> Неопределено Тогда - СтруктураНастроек.Вставить("ВидТранспортаСообщенийОбмена", ВидТранспорта); - КонецЕсли; - - КонецЕсли; - - ЧтениеXML.Прочитать(); - - КонецЦикла; - -КонецПроцедуры - -Процедура СчитатьДанныеЭлектроннойПочты(СтруктураНастроек, ЧтениеXML) - - СтруктураУчетнойЗаписиЭлектроннойПочты = Новый Структура; - - СтандартныеРеквизиты = Новый Структура; - СтандартныеРеквизиты.Вставить("Description","Наименование"); - СтандартныеРеквизиты.Вставить("PredefinedDataName","ИмяПредопределенныхДанных"); - - Пока Истина Цикл - - Ключ = ""; - Значение = ""; - - Пока ЧтениеXML.Прочитать() Цикл - - Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - - Ключ = ЧтениеXML.Имя; - - Если СтандартныеРеквизиты.Свойство(Ключ) Тогда - Ключ = СтандартныеРеквизиты[Ключ]; - КонецЕсли; - - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда - - Значение = ЧтениеXML.Значение; - - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда - - Прервать; - - КонецЕсли; - - КонецЦикла; - - Если ЧтениеXML.Имя = "CatalogObject.УчетныеЗаписиЭлектроннойПочты" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда - Прервать; - КонецЕсли; - - СтруктураУчетнойЗаписиЭлектроннойПочты.Вставить(Ключ, Значение); - - КонецЦикла; - - ИмяСправочника = "УчетныеЗаписиЭлектроннойПочты"; - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник." + ИмяСправочника); - УчетнаяЗаписьЭлектроннойПочты = Менеджер.СоздатьЭлемент(); - УчетнаяЗаписьЭлектроннойПочты.Наименование = СтруктураУчетнойЗаписиЭлектроннойПочты.Наименование; - Если СтруктураУчетнойЗаписиЭлектроннойПочты.Свойство("ИмяПредопределенныхДанных") Тогда - УчетнаяЗаписьЭлектроннойПочты.ИмяПредопределенныхДанных = СтруктураУчетнойЗаписиЭлектроннойПочты.ИмяПредопределенныхДанных; - КонецЕсли; - - Для Каждого Реквизит Из Метаданные.Справочники[ИмяСправочника].Реквизиты Цикл - - Если Не СтруктураУчетнойЗаписиЭлектроннойПочты.Свойство(Реквизит.Имя) Тогда - Продолжить; - КонецЕсли; - - УчетнаяЗаписьЭлектроннойПочты[Реквизит.Имя] = СтруктураУчетнойЗаписиЭлектроннойПочты[Реквизит.Имя]; - - КонецЦикла; - - СтруктураНастроек.Вставить("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты); - -КонецПроцедуры - -Процедура СчитатьПараметрыОбменаXDTO(СтруктураНастроек, ЧтениеXML) - - ПараметрыОбменаXDTO = Новый Структура; - - ЧтениеXML.Прочитать(); - - Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл - - Ключ = ЧтениеXML.Имя; - ПараметрыОбменаXDTO.Вставить(Ключ, ПрочитатьXML(ЧтениеXML)); - - КонецЦикла; - - СтруктураНастроек.Вставить("ПараметрыОбменаXDTO", ПараметрыОбменаXDTO); - -КонецПроцедуры - -Функция НастройкиXDTOКорреспондентаИзXML(ИмяФайлаСтрокаXML, ЭтоФайл, УзелОбмена) Экспорт - - ЧтениеXML = Новый ЧтениеXML; - Если ЭтоФайл Тогда - ЧтениеXML.ОткрытьФайл(ИмяФайлаСтрокаXML); - Иначе - ЧтениеXML.УстановитьСтроку(ИмяФайлаСтрокаXML); - КонецЕсли; - - ЧтениеXML.Прочитать(); // Message - ЧтениеXML.Прочитать(); // Header - - ЗаголовокСообщенияXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, - ФабрикаXDTO.Тип("http://www.1c.ru/SSL/Exchange/Message", ЧтениеXML.ЛокальноеИмя)); - - СтруктураНастроек = ОбменДаннымиXDTOСервер.СтруктураНастроекXDTO(); - ОбменДаннымиXDTOСервер.ЗаполнитьСтруктуруНастроекXDTOКорреспондента(СтруктураНастроек, ЗаголовокСообщенияXDTO, , УзелОбмена); - - // Проверка UID отправителя на соответствие формату. - УИД = ЗаголовокСообщенияXDTO.Confirmation.From; - Попытка - УИД = Новый УникальныйИдентификатор(УИД); - Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Идентификатор отправителя <%1> в файле с настройками EnterpriseData не соответствует ожидаемому формату GUID.'"), - УИД); - КонецПопытки; - - СтруктураНастроек.Вставить("ИдентификаторОтправителя", ЗаголовокСообщенияXDTO.Confirmation.From); - - ЧтениеXML.Закрыть(); - - Возврат СтруктураНастроек; - -КонецФункции - -#КонецОбласти - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index c8a12ff1c..dd01d67c2 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -16,8 +16,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Выполняет действия при создании нового обмена данными: // - создает или обновляет узлы текущего плана обмена @@ -108,118 +107,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы через внешнее соединение. +#КонецОбласти -// Выполняет действия при создании нового обмена данными через внешнее соединение. -// -Процедура ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными(Отказ, - НастройкаОтборовНаУзлеБазыКорреспондента, - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, - ПрефиксИнформационнойБазыУстановлен, - ПрефиксИнформационнойБазы) Экспорт - - ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); - - НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначениеИзСтрокиВнутр(НастройкаОтборовНаУзлеБазыКорреспондента)); - ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначениеИзСтрокиВнутр(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); - - ПолеСтрокаСообщенияОбОшибке = Неопределено; - ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - - КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); - КодНовогоУзла = КодНовогоУзлаВторойБазы; - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - - // создаем новый узел - СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); - - // Загружаем настройки транспорта сообщений. - ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); - - // Обновляем значение константы префикса ИБ. - Если Не ПрефиксИнформационнойБазыУстановлен Тогда - - ЗначениеДоОбновления = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - - Если ЗначениеДоОбновления <> ПрефиксИнформационнойБазы Тогда - - ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(СокрЛП(ПрефиксИнформационнойБазы)); - - КонецЕсли; - - КонецЕсли; - - Если Отказ Тогда - ВызватьИсключение(НСтр("ru = 'При создании настройки синхронизации данных возникли ошибки.'")); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - КонецПопытки; - -КонецПроцедуры - -// Выполняет действия при создании нового обмена данными через внешнее соединение. -// -Процедура ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными_2_0_1_6(Отказ, - НастройкаОтборовНаУзлеБазыКорреспондента, - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, - ПрефиксИнформационнойБазыУстановлен, - ПрефиксИнформационнойБазы) Экспорт - - НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаОтборовНаУзлеБазыКорреспондента)); - ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ОбщегоНазначения.ЗначениеИзСтрокиXML(ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента)); - - ПолеСтрокаСообщенияОбОшибке = Неопределено; - ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; - - КодЭтогоУзла = ПолучитьКодУзлаЭтойБазы(ПрефиксИнформационнойБазыИсточника); - КодНовогоУзла = КодНовогоУзлаВторойБазы; - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - - ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(); - - // создаем новый узел - СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); - - // Загружаем настройки транспорта сообщений. - ОбновитьНастройкиТранспортаСообщенийОбменаCOM(); - - // Обновляем значение константы префикса ИБ. - Если Не ПрефиксИнформационнойБазыУстановлен Тогда - - ЗначениеДоОбновления = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); - - Если ЗначениеДоОбновления <> ПрефиксИнформационнойБазы Тогда - - ОбменДаннымиСервер.УстановитьПрефиксИнформационнойБазы(СокрЛП(ПрефиксИнформационнойБазы)); - - КонецЕсли; - - КонецЕсли; - - Если Отказ Тогда - ВызватьИсключение(НСтр("ru = 'При создании настройки синхронизации данных возникли ошибки.'")); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - КонецПопытки; - -КонецПроцедуры +#Область ДляРаботыЧерезВнешнееСоединение // Выполняет регистрацию изменений на узле плана обмена. // @@ -267,6 +157,36 @@ КонецПроцедуры +// Выполняет выгрузку параметров помощника во временное хранилище для продолжения настройки обмена во второй базе. +// +// Параметры: +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. +// АдресВременногоХранилища - Строка - при успешной выгрузке xml-файла с настройками +// в эту переменную записывается адрес временного хранилища, +// по которому будут доступны данные файла на сервере и на клиенте. +// +Процедура ВыполнитьВыгрузкуПараметровМастераВоВременноеХранилище(Отказ, АдресВременногоХранилища) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Получаем имя временного файла в локальной ФС на сервере. + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + Попытка + МодульПомощникНастройки.НастройкиПодключенияВXML(ЭтотОбъект, ИмяВременногоФайла); + Исключение + СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); + Возврат; + КонецПопытки; + + АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла)); + + ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); + +КонецПроцедуры + // Выполняет действия при создании нового обмена данными через веб-сервис. // Подробное описание см. в процедуре ВыполнитьДействияПоНастройкеНовогоОбменаДанными. // @@ -312,82 +232,26 @@ ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УдаляемыйУзел); КонецЕсли; - -КонецПроцедуры - -// Выполняет выгрузку параметров помощника во временное хранилище для продолжения настройки обмена во второй базе. -// -// Параметры: -// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. -// АдресВременногоХранилища - Строка - при успешной выгрузке xml-файла с настройками -// в эту переменную записывается адрес временного хранилища, -// по которому будут доступны данные файла на сервере и на клиенте. -// -Процедура ВыполнитьВыгрузкуПараметровМастераВоВременноеХранилище(Отказ, АдресВременногоХранилища) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Получаем имя временного файла в локальной ФС на сервере. - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); - - МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); - Попытка - МодульПомощникНастройки.НастройкиПодключенияВXML(ЭтотОбъект, ИмяВременногоФайла); - Исключение - СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); - ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); - Возврат; - КонецПопытки; - - АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла)); - - ФайловаяСистема.УдалитьВременныйФайл(ИмяВременногоФайла); - КонецПроцедуры // Инициализирует настройки узла обмена. // Процедура Инициализация(Узел) Экспорт + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Узел); + ИмяПланаОбменаКорреспондента = ИмяПланаОбмена; + ЭтотУзел = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел(); + РеквизитыЭтогоУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭтотУзел, "Код, Наименование"); + КодУзла = РеквизитыЭтогоУзла.Код; + НаименованиеЭтойБазы = РеквизитыЭтогоУзла.Наименование; + ПрефиксИнформационнойБазыИсточника = РеквизитыЭтогоУзла.Код; + УзелИнформационнойБазы = Узел; - УзелИнформационнойБазыПараметры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Узел, "Код, Наименование"); - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - - НаименованиеЭтойБазы = Строка(ПланыОбмена[ИмяПланаОбмена].ЭтотУзел()); - НаименованиеВторойБазы = УзелИнформационнойБазыПараметры.Наименование; - - ПрефиксИнформационнойБазыПриемника = УзелИнформационнойБазыПараметры.Код; - - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(Узел); - - ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиТранспорта); - - ВидТранспортаСообщенийОбмена = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - - ИспользоватьПараметрыТранспортаCOM = Ложь; - ИспользоватьПараметрыТранспортаEMAIL = Ложь; - ИспользоватьПараметрыТранспортаFILE = Ложь; - ИспользоватьПараметрыТранспортаFTP = Ложь; - - Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - - ИспользоватьПараметрыТранспортаFILE = Истина; - - ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - ИспользоватьПараметрыТранспортаFTP = Истина; - - ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL Тогда - - ИспользоватьПараметрыТранспортаEMAIL = Истина; - - ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - - ИспользоватьПараметрыТранспортаCOM = Истина; - - КонецЕсли; - + РеквизитыУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Узел, "Код, Наименование"); + КодУзлаКорреспондента = РеквизитыУзла.Код; + НаименованиеВторойБазы = РеквизитыУзла.Наименование; + ПрефиксИнформационнойБазыПриемника = РеквизитыУзла.Код; + ИспользоватьПрефиксыДляНастройкиОбмена = Не (ОбменДаннымиСервер.ЭтоПланОбменаXDTO(ИмяПланаОбмена) И ОбменДаннымиXDTOСервер.ПоддерживаетсяВерсияСИдентификаторомОбменаДанными(ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка())); @@ -410,10 +274,13 @@ ОбменДаннымиПереопределяемый.ПриОпределенииПрефиксаИнформационнойБазыПоУмолчанию(ПрефиксИнформационнойБазыИсточника); КонецЕсли; + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспортаПоУмолчанию(Узел, ИдентификаторТранспорта); + КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функции-свойства +#КонецОбласти + +#Область ФункцииСвойства // Сообщение об ошибке при обмене данными. // @@ -432,8 +299,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные служебные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеСлужебныеПроцедурыИФункции Процедура СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла) @@ -587,60 +455,15 @@ Процедура ОбновитьНастройкиТранспортаСообщенийОбмена() - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", ВидТранспортаСообщенийОбмена); - - СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); - - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILМаксимальныйДопустимыйРазмерСообщения"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILСжиматьФайлИсходящегоСообщения"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILУчетнаяЗапись"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "EMAILТранслитерироватьИменаФайловСообщенийОбмена"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FILEКаталогОбменаИнформацией"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FILEСжиматьФайлИсходящегоСообщения"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FILEТранслитерироватьИменаФайловСообщенийОбмена"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСжиматьФайлИсходящегоСообщения"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПароль"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПассивноеСоединение"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПользователь"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПорт"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPСоединениеПуть"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "FTPТранслитерироватьИменаФайловСообщенийОбмена"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSURLВебСервиса"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSИмяПользователя"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSПароль"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSЗапомнитьПароль"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "ПарольАрхиваСообщенияОбмена"); - - // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); - -КонецПроцедуры - -Процедура ОбновитьНастройкиТранспортаСообщенийОбменаCOM() - - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Корреспондент", УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.COM); - - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMАутентификацияОперационнойСистемы"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMВариантРаботыИнформационнойБазы"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMИмяПользователя"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMИмяСервера1СПредприятия"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMКаталогИнформационнойБазы"); - ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "COMПарольПользователя"); - - // добавляем запись в РС - РегистрыСведений.НастройкиТранспортаОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); - -КонецПроцедуры - -Процедура ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, ИмяРеквизита) - - СтруктураЗаписи.Вставить(ИмяРеквизита, ЭтотОбъект[ИмяРеквизита]); + Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда + + НовыйСправочник = Справочники.НастройкиТранспортаСообщенийОбмена.СоздатьЭлемент(); + НовыйСправочник.Корреспондент = УзелИнформационнойБазы; + НовыйСправочник.НастройкаПоУмолчанию = Истина; + НовыйСправочник.ИдентификаторТранспорта = "ПассивныйРежим"; + НовыйСправочник.Записать(); + + КонецЕсли; КонецПроцедуры @@ -704,7 +527,7 @@ // Читает настройки помощника обмена из строки XML. // -Процедура ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML) Экспорт +Процедура ВыполнитьЗагрузкуПараметровМастера(Отказ, СтрокаXML, ИдентификаторТраспорта = "") Экспорт // Проверка возможности использования плана обмена в модели сервиса. Если ОбщегоНазначения.РазделениеВключено() @@ -720,7 +543,7 @@ МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); Попытка - МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзXML(ЭтотОбъект, СтрокаXML); + МодульПомощникНастройки.ЗаполнитьНастройкиПодключенияИзXML(ЭтотОбъект, СтрокаXML,,, ИдентификаторТраспорта); Исключение СообщитьИнформациюОбОшибке(ИнформацияОбОшибке(), Отказ); КонецПопытки; @@ -745,6 +568,8 @@ #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo index 2dac3af04..75c558794 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -9,6 +9,7 @@ <key>ru</key> <value>Помощник настройки синхронизации данных</value> </synonym> + <defaultForm>DataProcessor.ПомощникСозданияОбменаДанными.Form.НастройкаОбщихПараметров</defaultForm> <includeHelpInContents>true</includeHelpInContents> <help> <pages> @@ -497,6 +498,31 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="3eba3f44-b58b-4541-be75-a72a059ef371"> + <name>ВосстановлениеНастроекОбмена</name> + <synonym> + <key>ru</key> + <value>Восстановление настроек обмена</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="7e73f7e0-6a6c-425b-9ac3-375b12383f3f"> + <name>ДанныеАутентификации</name> + <synonym> + <key>ru</key> + <value>Данные аутентификации</value> + </synonym> + <type/> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="0a7d282e-45bb-4a87-b325-1659519867fb"> <name>ИмяПланаОбменаКорреспондента</name> <synonym> @@ -525,6 +551,36 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="9167a91a-0fe6-45b5-ab9d-e2c9eaa93f67"> + <name>ИдентификаторНастройки</name> + <synonym> + <key>ru</key> + <value>Идентификатор настройки</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>100</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="02597e1e-6c6a-4bd8-a8f8-1b6d62a8f21a"> + <name>ИдентификаторТранспорта</name> + <synonym> + <key>ru</key> + <value>Идентификатор транспорта</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>50</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="5d726fa3-bde0-4d97-a577-415857bbb5c1"> <name>ИмяФайлаНастроекСинхронизацииДанныхДляЗагрузки</name> <synonym> @@ -658,6 +714,7 @@ </type> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> </attributes> <attributes uuid="eb69c41a-392d-43bb-9b67-a0adcb651b1e"> <name>НаименованиеЭтойБазы</name> @@ -673,6 +730,7 @@ </type> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> </attributes> <attributes uuid="93b01c88-48a2-4753-b443-0e9892395a8f"> <name>ПарольАрхиваСообщенияОбмена</name> @@ -701,6 +759,7 @@ </type> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> </attributes> <attributes uuid="e71e0297-3709-4247-933e-18a6350cbf39"> <name>ПрефиксИнформационнойБазыИсточникаУстановлен</name> @@ -714,6 +773,21 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="fbe493f8-cf58-4ca8-b7fb-3923771dd5e9"> + <name>КодУзла</name> + <synonym> + <key>ru</key> + <value>Код узла</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>36</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="0b32e372-c6ad-4dda-acd1-8b5d58537d37"> <name>ПрефиксИнформационнойБазыПриемника</name> <synonym> @@ -728,6 +802,7 @@ </type> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> </attributes> <attributes uuid="602dac6f-abe6-407a-92d3-7f1613e5dda6"> <name>ПрефиксИнформационнойБазыПриемникаУстановлен</name> @@ -765,6 +840,16 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="f2f210f3-a114-4788-9172-9133dc95b832"> + <name>НастройкиТранспорта</name> + <synonym> + <key>ru</key> + <value>Настройки транспорта</value> + </synonym> + <type/> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="526a85c9-3a8d-4044-adb9-fd0689c70601"> <name>ЭтоНастройкаРаспределеннойИнформационнойБазы</name> <synonym> @@ -816,6 +901,16 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="16b68fad-30fb-4c1d-ab96-2d14a2e6ae03"> + <name>ПоддерживаемыеОбъектыФорматаКорреспондента</name> + <synonym> + <key>ru</key> + <value>Поддерживаемые объекты формата корреспондента</value> + </synonym> + <type/> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="d029aa93-fea4-40e4-8cfb-2dc96544829b"> <name>ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента</name> <synonym> @@ -934,6 +1029,16 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="84d76e6b-0418-47d0-9df2-95e0116517be"> + <name>ВерсииФорматаОбмена</name> + <synonym> + <key>ru</key> + <value>Версии формата обмена</value> + </synonym> + <type/> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <forms uuid="c076b7fd-7e17-4811-82e7-047e2bf43bb0"> <name>НоваяСинхронизацияДанных</name> <synonym> @@ -952,15 +1057,6 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="77d8285f-a87b-4a4e-b6ee-85bcd54dee12"> - <name>НастройкаПодключения</name> - <synonym> - <key>ru</key> - <value>Настройка подключения</value> - </synonym> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> <forms uuid="f2ec9416-3830-4607-90f3-f77fc53c9c70"> <name>УдалениеНастройкиСинхронизации</name> <synonym> @@ -1006,4 +1102,31 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="c9b46771-b627-413d-afbb-dd733e0f1a1d"> + <name>ВыборТипаТранспорта</name> + <synonym> + <key>ru</key> + <value>Выбор типа транспорта</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="49192a55-34fe-4db3-8ef9-a0d7af2766c9"> + <name>НастройкаОбщихПараметров</name> + <synonym> + <key>ru</key> + <value>Настройка общих параметров</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="31001011-bdbb-4499-a613-72d0305acd9d"> + <name>ПовторнаяСинхронизацияДанныхПередЗапуском</name> + <synonym> + <key>ru</key> + <value>Повторная синхронизация данных перед запуском</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаКриптопровайдераИнформацияОДистрибутиве/Form.form b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаКриптопровайдераИнформацияОДистрибутиве/Form.form index 4958034c0..1cd3acf75 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаКриптопровайдераИнформацияОДистрибутиве/Form.form +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаКриптопровайдераИнформацияОДистрибутиве/Form.form @@ -269,34 +269,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>Версия</name> - <id>4</id> - <valueType> - <types>String</types> - <stringQualifiers/> - </valueType> - <view> - <common>true</common> - </view> - <edit> - <common>true</common> - </edit> - </attributes> - <attributes> - <name>ИмяПрограммы</name> - <id>5</id> - <valueType> - <types>String</types> - <stringQualifiers/> - </valueType> - <view> - <common>true</common> - </view> - <edit> - <common>true</common> - </edit> - </attributes> <formCommands> <name>Установить</name> <title> @@ -319,6 +291,34 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <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>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 7ce0a068a..b03999047 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаКриптопровайдераИнформацияОДистрибутиве/Module.bsl +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаКриптопровайдераИнформацияОДистрибутиве/Module.bsl @@ -11,21 +11,23 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Параметры.Свойство("КонтрольнаяСумма", КонтрольнаяСумма); - Параметры.Свойство("Дистрибутив", Дистрибутив); - Параметры.Свойство("Версия", Версия); - Параметры.Свойство("ИмяПрограммы", ИмяПрограммы); + КонтрольнаяСумма = Параметры.КонтрольнаяСумма; + Дистрибутив = Параметры.Дистрибутив; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Установка %1'"), ИмяПрограммы); - Элементы.ДекорацияДистрибутивЗагружен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Дистрибутив %1 успешно загружен и готов к установке.'"), ИмяПрограммы); - Элементы.Дистрибутив.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия: %1'"), Версия); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Установка %1'"), Параметры.ИмяПрограммы); + Элементы.ДекорацияДистрибутивЗагружен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Дистрибутив %1 успешно загружен и готов к установке.'"), Параметры.ИмяПрограммы); + Элементы.Дистрибутив.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Версия: %1'"), Параметры.Версия); - Если ИмяПрограммы = ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet() Тогда - Элементы.КонтрольнаяСуммаРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Контрольную сумму можно проверить с помощью приложения ViPNet HashCalc. - |Его можно скачать с сайта <a href = www.infotecs.ru>www.infotecs.ru</a>.'")); + Если Параметры.ИмяПрограммы = ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet() Тогда + Элементы.КонтрольнаяСуммаРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Контрольную сумму можно проверить с помощью приложения ViPNet HashCalc. + |Его можно скачать с сайта <a href = www.infotecs.ru>www.infotecs.ru</a>.'")); Иначе - Элементы.КонтрольнаяСуммаРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Контрольную сумму можно проверить с помощью приложения cpverify.exe. - |Его можно скачать с сайта <a href = www.cryptopro.ru>www.cryptopro.ru</a>.'")); + Элементы.КонтрольнаяСуммаРасширеннаяПодсказка.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Контрольную сумму можно проверить с помощью приложения cpverify.exe. + |Его можно скачать с сайта <a href = www.cryptopro.ru>www.cryptopro.ru</a>.'")); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПриложенийДляРаботыСЭлектроннойПодписью/Form.form b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПриложенийДляРаботыСЭлектроннойПодписью/Form.form new file mode 100644 index 000000000..730f4c7d8 --- /dev/null +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПриложенийДляРаботыСЭлектроннойПодписью/Form.form @@ -0,0 +1,1715 @@ +<?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>1</id> + <title> + <key>ru</key> + <value>Для работы с усиленной квалифицированной электронной подписью (УКЭП) на компьютере должен быть установлен сертифицированный* токен или отдельное приложение - средство криптографической защиты информации. С их помощью вы сможете работать с любым количеством электронных подписей на одном компьютере**. + +Выберите, какой токен вы будете использовать или одно из приложений для установки на этом компьютере:</value> + + true + true + + true + + + ДекорацияЗаголовокРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ДекорацияЗаголовокКонтекстноеМеню + 2 + true + + true + Label + 80 + true + + Left + + + + Приложения + 4 + + Программы + 6 + + ГруппаУстановитьVipNet + 8 + + УстановитьVipNet + 10 + + <key>ru</key> + <value>ViPNet CSP</value> + + true + true + + true + + + УстановитьVipNetРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьVipNet + Normal + Auto + true + true + UserCmds + Auto + + + ДекорацияНедоступноДляУстановкиVipNet + 12 + + <key>ru</key> + <value>Недоступно для установки </value> + + true + + true + + + ДекорацияНедоступноДляУстановкиVipNetРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ДекорацияНедоступноДляУстановкиVipNetКонтекстноеМеню + 13 + true + + true + true + true + + Style.BorderColor + + + + CommonPicture.Предупреждение + + + Style.BorderColor + + AsFileRef + + + + Отступ + 15 + true + true + + true + + + ОтступРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ОтступКонтекстноеМеню + 16 + true + + Label + 1 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Установить vip net</value> + + + ГруппаУстановитьVipNetРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + УстановитьКриптоПро + 18 + + <key>ru</key> + <value>КриптоПро CSP</value> + + true + true + + true + + + УстановитьКриптоПроРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьКриптоПро + Normal + Auto + true + true + UserCmds + Auto + + + Отступ2 + 112 + true + true + + true + + + Отступ2РасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + Отступ2КонтекстноеМеню + 113 + true + + Label + 1 + true + true + + Left + + + + ГруппаУстановитьSignalCOM + 20 + + УстановитьSignalCOM + 22 + + <key>ru</key> + <value>Signal-COM CSP</value> + + true + true + + true + + + УстановитьSignalCOMРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьSignalCOM + Normal + Auto + true + true + UserCmds + + StdPicture.GotoExternalURL + + Auto + + + ДекорацияНедоступноДляУстановкиSignalCOM + 24 + + <key>ru</key> + <value>Недоступно для установки</value> + + true + + true + + + ДекорацияНедоступноДляУстановкиSignalCOMРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ДекорацияНедоступноДляУстановкиSignalCOMКонтекстноеМеню + 25 + true + + true + true + true + + Style.BorderColor + + + + CommonPicture.Предупреждение + + + Style.BorderColor + + AsFileRef + + + + Отступ1 + 27 + true + true + + true + + + Отступ1РасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Отступ1КонтекстноеМеню + 28 + true + + Label + 1 + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Установить SignalCOM</value> + + + ГруппаУстановитьSignalCOMРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + УстановитьДругое + 30 + + <key>ru</key> + <value>Другое</value> + + true + true + + true + + + УстановитьДругоеРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualButton + Form.Command.УстановитьДругоеПриложение + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Программы</value> + + + ПрограммыРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Приложения</value> + + false + + ПриложенияРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + БиблиотекиДляТокенов + 32 + + ТокеныШапка + 115 + + НадписьТокены + 117 + + <key>ru</key> + <value>Токены</value> + + true + true + + true + + + НадписьТокеныРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + НадписьТокеныКонтекстноеМеню + 118 + true + + Label + true + true + + 150 + 70 + + + Left + + + + ФормаОбновитьИнформациюОТокенах + 83 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ФормаОбновитьИнформациюОТокенахРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + UsualButton + Form.Command.ОбновитьИнформациюОТокенах + Normal + Picture + 3 + true + UserCmds + + StdPicture.Reread + + Auto + WhenActive + + true + true + + true + + + <key>ru</key> + <value>Токены шапка</value> + + + ТокеныШапкаРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаСтраницы + 34 + + ВыполняетсяДиагностика + 36 + + ДекорацияКартинка + 38 + + <key>ru</key> + <value>Декорация картинка</value> + + true + true + + true + + + ДекорацияКартинкаРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ДекорацияКартинкаКонтекстноеМеню + 39 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + AsFileRef + + + + ДекорацияНадпись + 41 + + <key>ru</key> + <value>Выполняется диагностика...</value> + + true + true + + true + + + ДекорацияНадписьРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ДекорацияНадписьКонтекстноеМеню + 42 + true + + Label + true + true + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Выполняется диагностика</value> + + + ВыполняетсяДиагностикаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + РезультатДиагностики + 44 + + ДекорацияОшибка + 46 + true + + true + + + ДекорацияОшибкаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ДекорацияОшибкаКонтекстноеМеню + 47 + true + + Label + 50 + true + + Left + + + + Разрядность + 133 + + <key>ru</key> + <value>Разрядность</value> + + true + + true + + + Разрядность + + None + + ru + Для 32-битной операционной системы выберите значение x86 + + Button + + РазрядностьРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + РазрядностьКонтекстноеМеню + 134 + true + + RadioButtonField + Enter + true + Left + true + + + + x86-64 + + + + + x86 + + + Vertical + + + + Компонента + 49 + + ДекорацияКомпонента + 51 + + <key>ru</key> + <value>Требуется установка компоненты.</value> + + true + true + + true + + + ДекорацияКомпонентаРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ДекорацияКомпонентаКонтекстноеМеню + 52 + true + + Label + 50 + true + + Left + + + true + + true + + + <key>ru</key> + <value>Компонента ExtraCryptoAPI</value> + + + КомпонентаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаУстановкаТокенов + 123 + + Рутокен + 54 + + УстановитьДляРутокена + 56 + + <key>ru</key> + <value>Рутокен ЭЦП</value> + + true + true + + true + + + УстановитьДляРутокенаРасширеннаяПодсказка + 57 + + <key>ru</key> + <value>Готов к работе</value> + + Label + true + 2 + true + + Left + + + UsualButton + Form.Command.УстановитьДляРутокена + Normal + PictureAndText + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>Рутокен ЭЦП</value> + + Button + + РутокенРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + Auto + Auto + + + + Джакарта + 81 + + УстановитьДляДжакарта + 60 + + <key>ru</key> + <value>JaCarta</value> + + true + true + + true + + + УстановитьДляДжакартаРасширеннаяПодсказка + 61 + + <key>ru</key> + <value>Готов к работе</value> + + Label + true + 2 + true + + Left + + + UsualButton + Form.Command.УстановитьДляДжакарта + Normal + PictureAndText + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + <key>ru</key> + <value>JaCarta</value> + + Button + + ДжакартаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Установка токенов</value> + + + ГруппаУстановкаТокеновРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ПодключенныеТокены + 85 + + Токены + 87 + + <key>ru</key> + <value>Подключенные токены</value> + + true + true + + true + + + Токены + + None + Add + Change + Copy + Delete + EndEdit + + ТокеныПредставление + 109 + + <key>ru</key> + <value>Представление</value> + + true + true + + true + + + Токены.Представление + + + ТокеныПредставлениеРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ТокеныПредставлениеКонтекстноеМеню + 110 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ТокеныКоманднаяПанель + 89 + Left + + + Selection + ТокеныВыбор + + + ТокеныСтрокаПоиска + 91 + + ТокеныСтрокаПоискаРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ТокеныСтрокаПоискаКонтекстноеМеню + 92 + true + + Токены + + true + + + + ТокеныСостояниеПросмотра + 94 + + ТокеныСостояниеПросмотраРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + ТокеныСостояниеПросмотраКонтекстноеМеню + 95 + true + + ViewStatusAddition + Токены + + true + + + + ТокеныУправлениеПоиском + 97 + + ТокеныУправлениеПоискомРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + ТокеныУправлениеПоискомКонтекстноеМеню + 98 + true + + SearchControlAddition + Токены + + true + + + + ТокеныРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ТокеныКонтекстноеМеню + 88 + true + + true + 80 + true + ByContent + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + true + + + true + true + + true + + + <key>ru</key> + <value>Подключенные токены</value> + + Button + + ПодключенныеТокеныРасширеннаяПодсказка + 86 + + <key>ru</key> + <value>Если токен не отображается в подключенных, убедитесь, что он вставлен в USB-порт компьютера и на нем горит световой индикатор и запустите диагностику еще раз. Попробуйте другой USB-порт или другой компьютер.</value> + + Label + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Результат диагностики</value> + + false + + РезультатДиагностикиРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ГруппаСтраницыРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Токены</value> + + + БиблиотекиДляТокеновРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ДекорацияПрограммы2 + 103 + + <key>ru</key> + <value> + + * Приложение, сертифицированное ФСБ и ФСТЭК, соответствует стандартам безопасности ГОСТ Р 34.11-2012, ГОСТ Р 34.10-2012 и другим стандартам, принятым в России. + +** Для работы на разных компьютерах необходимо для каждого приобрести дополнительную лицензию или настроить электронную подпись на сервере (этим занимается администратор). +</value> + + true + true + + true + + + ДекорацияПрограммы2РасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + ДекорацияПрограммы2КонтекстноеМеню + 104 + true + + Label + 80 + true + + Style.ПоясняющийТекст + + + Left + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + ТребуетсяУстановкаДрайверовДжакарта + 1 + + Boolean + + + true + + + true + + + + Объект + 2 + + DataProcessorObject.ПрограммыЭлектроннойПодписиИШифрования + + + true + + + true + +
          true
          +
          + + АдресРезультата + 3 + + String + + + + true + + + true + + + + Токены + + <key>ru</key> + <value>Подключенные токены</value> + + 4 + + ValueTable + + + true + + + true + + + Токен + 1 + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 2 + + String + + + + true + + + true + + + + + ТребуетсяУстановкаOpenSSL + 5 + + Boolean + + + true + + + true + + + + ТребуетсяУстановкаБиблиотекиИнтеграции + 6 + + Boolean + + + true + + + true + + + + ТребуетсяУстановкаДрайверовРутокен + 7 + + Boolean + + + true + + + true + + + + ТолькоУстановкаТокенов + 8 + + Boolean + + + true + + + true + + + + Разрядность + + <key>ru</key> + <value>Разрядность</value> + + 9 + + String + + + + true + + + true + + + + УстановитьКриптоПро + + <key>ru</key> + <value>КриптоПро CSP</value> + + 1 + + true + + + CommonPicture.ЗначокЩита + + + + УстановитьКриптоПро + + + TextPicture + Auto + Auto + + + УстановитьVipNet + + <key>ru</key> + <value>ViPNet CSP</value> + + 3 + + true + + + CommonPicture.ЗначокЩита + + + + УстановитьVipNet + + + TextPicture + Auto + Auto + + + УстановитьSignalCOM + + <key>ru</key> + <value>Signal-COM CSP</value> + + 4 + + true + + + CommonPicture.ТипГиперссылка + + + + УстановитьSignalCOM + + + TextPicture + Auto + Auto + + + ОбновитьИнформациюОТокенах + + <key>ru</key> + <value>Обновить информацию о токенах</value> + + 2 + + ru + Обновить информацию о токенах + + + true + + + StdPicture.Refresh + + + + ОбновитьИнформациюОТокенах + + + Picture + Auto + Auto + + + УстановитьДляДжакарта + + <key>ru</key> + <value>Установить</value> + + 5 + + true + + + CommonPicture.ЗначокЩита + + + + УстановитьДляДжакарта + + + Auto + Auto + + + УстановитьДляРутокена + + <key>ru</key> + <value>Установить</value> + + 6 + + true + + + CommonPicture.ЗначокЩита + + + + УстановитьДляРутокена + + + Auto + Auto + + + УстановитьДругоеПриложение + + <key>ru</key> + <value>Другое</value> + + 7 + + ru + Установить другое приложение + + + true + + + StdPicture.GotoExternalURL + + + + УстановитьДругоеПриложение + + + TextPicture + Auto + Auto + + + ВидТокена + + String + + + true + + + ТолькоУстановкаТокенов + + Boolean + + + + + + + + diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПриложенийДляРаботыСЭлектроннойПодписью/Module.bsl b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПриложенийДляРаботыСЭлектроннойПодписью/Module.bsl new file mode 100644 index 000000000..dcb479546 --- /dev/null +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПриложенийДляРаботыСЭлектроннойПодписью/Module.bsl @@ -0,0 +1,844 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +&НаКлиенте +Перем ВходящиеКонтексты; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоУстановкаТокенов = Параметры.ТолькоУстановкаТокенов; + Если ТолькоУстановкаТокенов Тогда + Элементы.Приложения.Видимость = Ложь; + ТекстПояснения = Элементы.ДекорацияЗаголовок.Заголовок; + Элементы.ДекорацияЗаголовок.Заголовок = СтрЗаменить(ТекстПояснения, НСтр("ru = 'или одно из приложений для установки '"), ""); + КонецЕсли; + Разрядность = "x86-64"; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПодключитьОбработчикОжидания("ЗапуститьДиагностикуТокенов", 0.1, Истина); + Если Не ТолькоУстановкаТокенов Тогда + ПроверитьВозможностьУстановкиПрограммКриптографии(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ТокеныВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ОписаниеТокена = Элементы.Токены.ТекущиеДанные.Токен; + ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьТокен(ОписаниеТокена, ЭтотОбъект); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура УстановитьVipNet(Команда) + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПовторнаяПроверкаПрограммКриптографии", ЭтотОбъект); + + ВходящийКонтекст = Неопределено; + Если ТипЗнч(ВходящиеКонтексты) = Тип("Соответствие") Тогда + ВходящийКонтекст = ВходящиеКонтексты.Получить(ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); + КонецЕсли; + + ЭлектроннаяПодписьКлиентЛокализация.УстановитьVipNet(ЭтотОбъект, ОповещениеОЗавершении, ВходящийКонтекст); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьКриптоПро(Команда) + + ВходящийКонтекст = Неопределено; + Если ТипЗнч(ВходящиеКонтексты) = Тип("Соответствие") Тогда + ВходящийКонтекст = ВходящиеКонтексты.Получить(ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро()); + КонецЕсли; + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПовторнаяПроверкаПрограммКриптографии", ЭтотОбъект); + ЭлектроннаяПодписьКлиентЛокализация.УстановитьКриптоПро(ЭтотОбъект, ОповещениеОЗавершении, ВходящийКонтекст); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьSignalCOM(Команда) + + ЭлектроннаяПодписьКлиентЛокализация.УстановитьSignalCOM(); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДругоеПриложение(Команда) + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://v8.1c.ru/platforma/kriptografiya/"); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДляРутокена(Команда) + + УстановитьБиблиотеку(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДляДжакарта(Команда) + + УстановитьБиблиотеку(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИнформациюОТокенах(Команда) + ЗапуститьДиагностикуТокенов() +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПроверитьВозможностьУстановкиПрограммКриптографии() + + СистемнаяИнформация = Новый СистемнаяИнформация; + + Если ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда + + ДоступенVipNet = ДоступенВОСWindowsДляУстановкиVipNet(СистемнаяИнформация.ВерсияОС); + Если Не ДоступенVipNet Тогда + Элементы.УстановитьVipNet.Доступность = Ложь; + Элементы.ДекорацияНедоступноДляУстановкиVipNet.Видимость = Истина; + Элементы.ДекорацияНедоступноДляУстановкиVipNet.Подсказка = + НСтр("ru = 'Версия вашей операционной системы Microsoft Windows ниже минимально рекомендуемой для работы с данным приложением.'"); + КонецЕсли; + + ДоступенSignalCOM = ДоступенВОСWindowsДляУстановкиSignalCOM(СистемнаяИнформация.ВерсияОС); + Если Не ДоступенSignalCOM Тогда + Элементы.УстановитьSignalCOM.Доступность = Ложь; + Элементы.ДекорацияНедоступноДляУстановкиSignalCOM.Видимость = Истина; + Элементы.ДекорацияНедоступноДляУстановкиSignalCOM.Подсказка = + НСтр("ru = 'Версия вашей операционной системы Microsoft Windows ниже минимально рекомендуемой для работы с данным приложением.'"); + КонецЕсли; + + ИначеЕсли ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() + Или ОбщегоНазначенияКлиент.ЭтоMacOSКлиент() Тогда + + Элементы.ГруппаУстановитьVipNet.Видимость = Ложь; + Элементы.УстановитьSignalCOM.Видимость = Ложь; + Элементы.УстановитьДругое.Видимость = Ложь; + + Иначе + Элементы.Приложения.Доступность = Ложь; + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Работа с программами криптографии в ОС %1 недоступна.'"), СистемнаяИнформация.ВерсияОС)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ДоступенВОСWindowsДляУстановкиVipNet(ВерсияОС) + + Возврат Не (СтрНайти(ВерсияОС, "Windows 7") <> 0 + Или СтрНайти(ВерсияОС, "Windows Vista") <> 0 + Или СтрНайти(ВерсияОС, "Windows XP") <> 0 + Или СтрНайти(ВерсияОС, "Windows 2000") <> 0); + +КонецФункции + +&НаКлиенте +Функция ДоступенВОСWindowsДляУстановкиSignalCOM(ВерсияОС) + + Возврат Не СтрНайти(ВерсияОС, "Windows 2000") <> 0; + +КонецФункции + +&НаКлиенте +Асинх Процедура ПовторнаяПроверкаПрограммКриптографии(Результат, ДополнительныеПараметры) Экспорт + + Если Не ТипЗнч(Результат) = Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Если Результат.Выполнено = Истина Тогда + + ОбновитьПовторноИспользуемыеЗначения(); + + Ответ = Ждать ВопросАсинх( + НСтр("ru = 'Для работы с только что установленным криптопровайдером перезапустите сеанс. Перезапустить сейчас?'"), + РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет, НСтр("ru = 'После установки криптопровайдера'")); + + Если Ответ = КодВозвратаДиалога.Да Тогда + ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); + ЗавершитьРаботуСистемы(Истина, Истина); + Возврат; + Иначе + Оповестить("Установка_ПриложениеКриптографии", Истина); + КонецЕсли; + + Закрыть(); + Возврат; + + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВходящийКонтекст", Неопределено) <> Неопределено Тогда + Если ВходящиеКонтексты = Неопределено Тогда + ВходящиеКонтексты = Новый Соответствие; + КонецЕсли; + ВходящиеКонтексты.Вставить(Результат.ВходящийКонтекст.ИмяПрограммы, Результат.ВходящийКонтекст); + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + ПоказатьПредупреждение(, УстановитьГиперссылку(Результат.ОписаниеОшибки)); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция УстановитьГиперссылку(Строка) + + МассивСсылок = Новый Массив; + МассивСсылок.Добавить(Новый Структура("Текст, Гиперссылка", "www.infotecs.ru", "https://infotecs.ru/")); + МассивСсылок.Добавить(Новый Структура("Текст, Гиперссылка", "www.cryptopro.ru", "https://cryptopro.ru/")); + + Для Каждого ТекущаяСсылка Из МассивСсылок Цикл + Позиция = СтрНайти(Строка, ТекущаяСсылка.Текст); + Если Позиция = 0 Тогда + Продолжить; + КонецЕсли; + + СтрокаСоСсылкой = Новый ФорматированнаяСтрока(ТекущаяСсылка.Текст, , , , ТекущаяСсылка.Гиперссылка); + + Возврат Новый ФорматированнаяСтрока(Лев(Строка, Позиция - 1), СтрокаСоСсылкой, Сред(Строка, Позиция + СтрДлина( + ТекущаяСсылка.Текст))); + КонецЦикла; + + Возврат Новый ФорматированнаяСтрока(Строка); + +КонецФункции + +&НаКлиенте +Процедура УстановитьБиблиотеку(ДляРутокена) + + Элементы.УстановитьДляРутокена.Доступность = Ложь; + Элементы.УстановитьДляДжакарта.Доступность = Ложь; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Ложь; + + СистемнаяИнформация = Новый СистемнаяИнформация; + + ПараметрыУстановкиБиблиотек = Новый Структура; + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 И Разрядность = "x86-64" Тогда + ПараметрыУстановкиБиблиотек.Вставить("ТипПлатформы", "Windows_x86_64"); + Иначе + ПараметрыУстановкиБиблиотек.Вставить("ТипПлатформы", ОбщегоНазначенияКлиентСервер.ИмяТипаПлатформы()); + КонецЕсли; + + Иначе + ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами в ОС %1 установите библиотеки самостоятельно.'"), СистемнаяИнформация.ТипПлатформы)); + Возврат; + КонецЕсли; + + ПараметрыУстановкиБиблиотек.Вставить("Система", СокрЛП(СистемнаяИнформация.ВерсияОС)); + ПараметрыУстановкиБиблиотек.Вставить("ТребуетсяУстановкаДрайверовРутокен", Ложь); + ПараметрыУстановкиБиблиотек.Вставить("ТребуетсяУстановкаДрайверовДжакарта", Ложь); + ПараметрыУстановкиБиблиотек.Вставить("ТребуетсяУстановкаOpenSSL", Ложь); + ПараметрыУстановкиБиблиотек.Вставить("ТребуетсяУстановкаБиблиотекиИнтеграции", Ложь); + ПараметрыУстановкиБиблиотек.Вставить("Ошибки", Новый Массив); + + Если ДляРутокена Тогда + ПараметрыУстановкиБиблиотек.ТребуетсяУстановкаДрайверовРутокен = ТребуетсяУстановкаДрайверовРутокен; + ПараметрыУстановкиБиблиотек.ТребуетсяУстановкаБиблиотекиИнтеграции = ТребуетсяУстановкаБиблиотекиИнтеграции; + ПараметрыУстановкиБиблиотек.ТребуетсяУстановкаOpenSSL = ТребуетсяУстановкаOpenSSL; + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + ПараметрыУстановкиБиблиотек.Вставить("КаталогСистемныхПриложений", "C:\Windows\System32"); +#Если Не ВебКлиент И Не МобильныйКлиент Тогда + ПараметрыУстановкиБиблиотек.КаталогСистемныхПриложений = СтандартныеПодсистемыКлиент.КаталогСистемныхПриложений(); +#КонецЕсли + Иначе + ПараметрыУстановкиБиблиотек.Вставить("КаталогСистемныхПриложений", "/usr/lib"); + КонецЕсли; + Иначе + ПараметрыУстановкиБиблиотек.ТребуетсяУстановкаДрайверовДжакарта = ТребуетсяУстановкаДрайверовДжакарта; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения( + "УстановитьБиблиотекиПослеПолученияДистрибутивов", ЭтотОбъект, ПараметрыУстановкиБиблиотек); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + + ДлительнаяОперация = ПолучитьДистрибутивыБиблиотек(ПараметрыУстановкиБиблиотек); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); + +КонецПроцедуры + +&НаКлиенте +Асинх Функция ЗапуститьДиагностикуТокенов() + + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ВыполняетсяДиагностика; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Ложь; + Элементы.ДекорацияОшибка.Видимость = Ложь; + Элементы.Компонента.Видимость = Ложь; + + Если ЗначениеЗаполнено(Параметры.ВидТокена) Тогда + Элементы.Джакарта.Видимость = НРег(Параметры.ВидТокена) = НРег(ЭлектроннаяПодписьКлиентЛокализация.Джакарта()); + Элементы.Рутокен.Видимость = НРег(Параметры.ВидТокена) = НРег(ЭлектроннаяПодписьКлиентЛокализация.Рутокен()); + Иначе + Элементы.Джакарта.Видимость = Истина; + Элементы.Рутокен.Видимость = Истина; + КонецЕсли; + + Токены.Очистить(); + + ОписаниеКомпоненты = ЭлектроннаяПодписьСлужебныйКлиентСервер.ОписаниеКомпоненты(); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами требуется установка внешней компоненты %1.'"), + ОписаниеКомпоненты.ИмяОбъекта); + ТекстОшибки = ""; + Попытка + ОбъектКомпоненты = Ждать ЭлектроннаяПодписьСлужебныйКлиент.ОбъектВнешнейКомпонентыExtraCryptoAPI(Истина, ТекстПояснения); + Исключение + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Не ПустаяСтрока(ТекстОшибки) Тогда + Элементы.ДекорацияКомпонента.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + НСтр("ru = 'Компонента не установлена: %1.'"), ТекстОшибки); + Элементы.Компонента.Видимость = Истина; + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.РезультатДиагностики; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Истина; + УстановитьВидимостьПриОшибке(); + Возврат Истина; + КонецЕсли; + + ТребуетсяУстановкаДрайверовРутокен = Ложь; + ТребуетсяУстановкаДрайверовДжакарта = Ложь; + ТребуетсяУстановкаOpenSSL = Ложь; + ТребуетсяУстановкаБиблиотекиИнтеграции = Ложь; + ЕстьТокеныДжакарта = Ложь; + ЕстьТокеныРутокен = Ложь; + + Результат = Ждать ЭлектроннаяПодписьСлужебныйКлиент.УстановленныеКриптопровайдеры(ОбъектКомпоненты); + Если Не Результат.ПроверкаВыполнена Тогда + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.РезультатДиагностики; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Истина; + Элементы.ДекорацияОшибка.Видимость = Истина; + Элементы.ДекорацияОшибка.Заголовок = ТекстОшибки; + УстановитьВидимостьПриОшибке(); + Возврат Истина; + КонецЕсли; + + Для Каждого Токен Из Результат.Токены Цикл + + Если ЗначениеЗаполнено(Токен.Слот) Тогда + НоваяСтрока = Токены.Добавить(); + НоваяСтрока.Токен = Токен; + НоваяСтрока.Представление = Токен.Представление; + Если Токен.Токен = ЭлектроннаяПодписьКлиентЛокализация.Рутокен() Тогда + ЕстьТокеныРутокен = Истина; + Иначе + ЕстьТокеныДжакарта = Истина; + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Токен.Библиотеки) Тогда + Продолжить; + КонецЕсли; + + Для Каждого КлючИЗначение Из Токен.Библиотеки Цикл + Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда + Продолжить; + КонецЕсли; + Если НРег(КлючИЗначение.Ключ) = "openssl_engine_library_path" Тогда + ТребуетсяУстановкаБиблиотекиИнтеграции = Истина; + ИначеЕсли НРег(КлючИЗначение.Ключ) = "pkcs11_library_path" Тогда + Если Токен.Токен = ЭлектроннаяПодписьКлиентЛокализация.Рутокен() Тогда + ТребуетсяУстановкаДрайверовРутокен = Истина; + Иначе + ТребуетсяУстановкаДрайверовДжакарта = Истина; + КонецЕсли; + ИначеЕсли НРег(КлючИЗначение.Ключ) = "openssl_path" Тогда + ТребуетсяУстановкаOpenSSL = Истина; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + СистемнаяИнформация = Новый СистемнаяИнформация; + Элементы.Токены.Видимость = Токены.Количество() > 0; + + РутокенБиблиотекаЗаголовок = ""; + РутокенOpenSSLЗаголовок = ""; + РутокенБиблиотекаИнтеграцииЗаголовок = ""; + ДжакартаБиблиотекаЗаголовок = ""; + + ЗаголовокГотовКРаботе = НСтр("ru = 'Готов к работе.'"); + ЗаголовокТокеныНеПодключены = НСтр("ru = 'Токены не подключены.'"); + + Элементы.УстановитьДляДжакартаРасширеннаяПодсказка.Заголовок = ""; + Если Не ТребуетсяУстановкаДрайверовДжакарта Тогда + Элементы.УстановитьДляДжакартаРасширеннаяПодсказка.Заголовок = + СтроковыеФункцииКлиент.ФорматированнаяСтрока(ЗаголовокГотовКРаботе + ?(ЕстьТокеныДжакарта, "", Символы.ПС + ЗаголовокТокеныНеПодключены)); + Оповестить("Установка_ПриложениеКриптографии", Истина); + КонецЕсли; + + Элементы.УстановитьДляРутокенаРасширеннаяПодсказка.Заголовок = ""; + Если Не ТребуетсяУстановкаДрайверовРутокен И Не ТребуетсяУстановкаOpenSSL И Не ТребуетсяУстановкаБиблиотекиИнтеграции Тогда + Элементы.УстановитьДляРутокенаРасширеннаяПодсказка.Заголовок = + СтроковыеФункцииКлиент.ФорматированнаяСтрока(ЗаголовокГотовКРаботе + ?(ЕстьТокеныРутокен, "", Символы.ПС + ЗаголовокТокеныНеПодключены)); + Оповестить("Установка_ПриложениеКриптографии", Ложь); + КонецЕсли; + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") + И (СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64) Тогда + + Элементы.УстановитьДляРутокена.Доступность = ТребуетсяУстановкаДрайверовРутокен Или ТребуетсяУстановкаOpenSSL Или ТребуетсяУстановкаБиблиотекиИнтеграции; + Элементы.УстановитьДляДжакарта.Доступность = ТребуетсяУстановкаДрайверовДжакарта; + + Если ТребуетсяУстановкаOpenSSL Тогда + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + РутокенOpenSSLЗаголовок = НСтр("ru = 'Для создания подписей требуется установка библиотеки OpenSSL. При нажатии на кнопку Рутокен ЭЦП, библиотека будет установлена с сайта slproweb.com.'"); + Иначе + РутокенOpenSSLЗаголовок = НСтр("ru = 'Для создания подписей требуется установка библиотеки libcrypto из состава OpenSSL.'"); + КонецЕсли; + КонецЕсли; + Если ТребуетсяУстановкаБиблиотекиИнтеграции Тогда + РутокенБиблиотекаИнтеграцииЗаголовок = НСтр("ru = 'Для создания подписей требуется установка библиотеки интеграции с OpenSSL rtengine. При нажатии на кнопку Рутокен ЭЦП, библиотека будет установлена с сайта производителя.'"); + КонецЕсли; + Если ТребуетсяУстановкаДрайверовРутокен Тогда + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + РутокенБиблиотекаЗаголовок = НСтр("ru = 'Для работы с токеном требуется установка Панели управления Рутокен. При нажатии на кнопку Рутокен ЭЦП, библиотека будет установлена с сайта производителя.'"); + Иначе + РутокенБиблиотекаЗаголовок = НСтр("ru = 'Для работы с токеном требуются установленные библиотеки libccid и rtPKCS11ECP
          .'"); + КонецЕсли; + КонецЕсли; + Если ТребуетсяУстановкаДрайверовДжакарта Тогда + ДжакартаБиблиотекаЗаголовок = НСтр("ru = 'Для работы с токеном требуется установка Единого Клиента JaCarta. При нажатии на кнопку JaCarta, библиотека будет установлена с сайта производителя.'"); + КонецЕсли; + + Элементы.Разрядность.Видимость = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + И (Элементы.УстановитьДляРутокена.Доступность Или Элементы.УстановитьДляДжакарта.Доступность); + + Иначе + Элементы.УстановитьДляРутокена.Видимость = Ложь; + Элементы.УстановитьДляДжакарта.Видимость = Ложь; + Если ТребуетсяУстановкаOpenSSL Тогда + РутокенOpenSSLЗаголовок = НСтр("ru = 'Для создания подписей требуется установка библиотеки libcrypto из состава OpenSSL.'"); + КонецЕсли; + Если ТребуетсяУстановкаБиблиотекиИнтеграции Тогда + РутокенБиблиотекаИнтеграцииЗаголовок = НСтр("ru = 'Для создания подписей требуется установка библиотеки интеграции с OpenSSL rtengine с сайта производителя.'"); + КонецЕсли; + Если ТребуетсяУстановкаДрайверовРутокен Тогда + РутокенБиблиотекаЗаголовок = НСтр("ru = 'Для работы с токеном требуется установка библиотек для работы с Рутокен с сайта производителя.'"); + КонецЕсли; + Если ТребуетсяУстановкаДрайверовДжакарта Тогда + ДжакартаБиблиотекаЗаголовок = НСтр("ru = 'Для работы с токеном требуется установка Единого Клиента JaCarta с сайта производителя.'"); + КонецЕсли; + КонецЕсли; + + Элементы.РутокенРасширеннаяПодсказка.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + СокрЛП(РутокенБиблиотекаЗаголовок + Символы.ПС + РутокенOpenSSLЗаголовок + Символы.ПС + РутокенБиблиотекаИнтеграцииЗаголовок)); + Элементы.ДжакартаРасширеннаяПодсказка.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(ДжакартаБиблиотекаЗаголовок); + + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.РезультатДиагностики; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Истина; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Процедура УстановитьВидимостьПриОшибке() + + Элементы.Токены.Видимость = Ложь; + Элементы.Джакарта.Видимость = Ложь; + Элементы.Рутокен.Видимость = Ложь; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьДистрибутивыБиблиотек(Параметры) + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(Новый УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение дистрибутивов библиотек для работы с токенами'"); + + Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, + "ЭлектроннаяПодписьСлужебныйРФ.ПолучитьДистрибутивыБиблиотекТокенов", Параметры); + +КонецФункции + +&НаКлиенте +Процедура УстановитьБиблиотекиПослеПолученияДистрибутивов(РезультатВыполнения, Контекст) Экспорт + + Если РезультатВыполнения = Неопределено Тогда + Элементы.УстановитьДляРутокена.Доступность = Истина; + Элементы.УстановитьДляДжакарта.Доступность = Истина; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Истина; + Возврат; + КонецЕсли; + + Если РезультатВыполнения.Статус = "Ошибка" Тогда + ОбработатьОшибкуУстановкиДистрибутивов(РезультатВыполнения.ИнформацияОбОшибке, Контекст); + Возврат; + КонецЕсли; + + РезультатПолученияДистрибутивов = ПолучитьРезультатДлительнойОперации(РезультатВыполнения, УникальныйИдентификатор); + Если ТипЗнч(РезультатПолученияДистрибутивов) = Тип("ИнформацияОбОшибке") + Или ТипЗнч(РезультатПолученияДистрибутивов) = Тип("Строка") Тогда + ОбработатьОшибкуУстановкиДистрибутивов(РезультатПолученияДистрибутивов, Контекст); + Возврат; + КонецЕсли; + + Если РезультатПолученияДистрибутивов.Дистрибутивы.Количество() = 0 Тогда + Массив = СтрРазделить("ТребуетсяУстановкаДрайверовРутокен,ТребуетсяУстановкаOpenSSL,ТребуетсяУстановкаБиблиотекиИнтеграции,ТребуетсяУстановкаДрайверовДжакарта", ","); + ТекстОшибки = ""; + Для Каждого Свойство Из Массив Цикл + Если Контекст[Свойство] = Ложь Тогда + Продолжить; + КонецЕсли; + Если Контекст[Свойство] = Ложь Тогда + Продолжить; + КонецЕсли; + Контекст.Ошибки.Добавить(РезультатПолученияДистрибутивов[Свойство]); + КонецЦикла; + ЗакончитьУстановкуДистрибутивов(Контекст); + Возврат; + КонецЕсли; + + Контекст.Вставить("РезультатПолученияДистрибутивов", РезультатПолученияДистрибутивов); + ФайловаяСистемаКлиент.СоздатьВременныйКаталог(Новый ОписаниеОповещения("ПослеСозданияВременногоКаталога", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьРезультатДлительнойОперации(РезультатВыполнения, УникальныйИдентификатор) + + // Результат выполнения фонового задания. + Попытка + Результат = ПолучитьИзВременногоХранилища(РезультатВыполнения.АдресРезультата); + Исключение + Возврат ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + УдалитьИзВременногоХранилища(РезультатВыполнения.АдресРезультата); + + Если Результат.Дистрибутивы.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ОписаниеФайлов = Новый Массив; + Для каждого Файл Из Результат.Дистрибутивы Цикл + ОписаниеФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.Имя, + ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, УникальныйИдентификатор))); + КонецЦикла; + + Результат.Дистрибутивы = ОписаниеФайлов; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура ПослеСозданияВременногоКаталога(ИмяВременногоКаталога, Контекст) Экспорт + + Если Не ЗначениеЗаполнено(ИмяВременногоКаталога) Тогда + ОбработатьОшибкуУстановкиДистрибутивов( + НСтр("ru = 'Не удалось создать временный каталог для сохранения дистрибутива'"), Контекст); + Возврат; + КонецЕсли; + + ИмяКаталогаВременныхФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременногоКаталога); + Контекст.Вставить("ВременныйКаталог", ИмяКаталогаВременныхФайлов); + + Оповещение = Новый ОписаниеОповещения("ПослеСохраненияФайловДистрибутива", ЭтотОбъект, Контекст); + + ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); + ПараметрыСохранения.Интерактивно = Ложь; + ПараметрыСохранения.Диалог.Каталог = ИмяКаталогаВременныхФайлов; + ФайловаяСистемаКлиент.СохранитьФайлы(Оповещение, Контекст.РезультатПолученияДистрибутивов.Дистрибутивы, ПараметрыСохранения); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеСохраненияФайловДистрибутива(ПолученныеФайлы, Контекст) Экспорт + + Если ПолученныеФайлы = Неопределено Тогда + ОбработатьОшибкуУстановкиДистрибутивов(НСтр("ru = 'Не удалось сохранить на компьютер файлы дистрибутива'"), + Контекст); + Возврат; + КонецЕсли; + + Контекст.Вставить("ФайлыДистрибутиваПолучены", Истина); + НачатьУстановкуДистрибутивов(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьУстановкуДистрибутивов(Контекст) + + Массив = СтрРазделить("ТребуетсяУстановкаДрайверовРутокен,ТребуетсяУстановкаOpenSSL,ТребуетсяУстановкаБиблиотекиИнтеграции,ТребуетсяУстановкаДрайверовДжакарта", ","); + Контекст.Вставить("Свойства", Массив); + Контекст.Вставить("Индекс", -1); + Если Контекст.ТипПлатформы = "Linux_x86_64" Или Контекст.ТипПлатформы = "Linux_x86" Тогда + Контекст.Свойства.Вставить(0, "ТребуетсяОбновлениеБиблиотек"); + КонецЕсли; + + НачатьУстановкуДистрибутива(Контекст) + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьУстановкуДистрибутива(Контекст) + + Контекст.Индекс = Контекст.Индекс + 1; + Если Контекст.Индекс > Контекст.Свойства.ВГраница() Тогда + ЗакончитьУстановкуДистрибутивов(Контекст); + Возврат; + КонецЕсли; + + Свойство = Контекст.Свойства[Контекст.Индекс]; + + Если Свойство = "ТребуетсяОбновлениеБиблиотек" Тогда + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения", ЭтотОбъект); + ИмяПрограммы = Новый Массив; + ИмяПрограммы.Добавить("apt-get"); + ИмяПрограммы.Добавить("install"); + ИмяПрограммы.Добавить("libccid"); + ИмяПрограммы.Добавить("pcscd"); + ИмяПрограммы.Добавить("libpcsclite1"); + ИмяПрограммы.Добавить("pcsc-tools"); + ИмяПрограммы.Добавить("opensc"); + + ПараметрыЗапуска = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); + ПараметрыЗапуска.ПолучитьПотокВывода = Истина; + ПараметрыЗапуска.ПолучитьПотокОшибок = Истина; + ПараметрыЗапуска.Оповещение = Оповещение; + ПараметрыЗапуска.ТекущийКаталог = Контекст.ВременныйКаталог; + ПараметрыЗапуска.ДождатьсяЗавершения = Истина; + ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Истина; + ФайловаяСистемаКлиент.ЗапуститьПрограмму(ИмяПрограммы, ПараметрыЗапуска); + Возврат; + КонецЕсли; + + Если Контекст[Свойство] = Ложь Тогда + НачатьУстановкуДистрибутива(Контекст); + Возврат; + КонецЕсли; + + ПараметрыДистрибутива = Контекст.РезультатПолученияДистрибутивов[Свойство]; + + Если ТипЗнч(ПараметрыДистрибутива) = Тип("Строка") Тогда + Контекст.Ошибки.Добавить(ПараметрыДистрибутива); + НачатьУстановкуДистрибутива(Контекст); + Возврат; + КонецЕсли; + + УстановитьДистрибутив(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДистрибутив(Контекст) + + Дистрибутив = Контекст.Свойства[Контекст.Индекс]; + ПараметрыДистрибутива = Контекст.РезультатПолученияДистрибутивов[Дистрибутив]; + + Оповещение = Новый ОписаниеОповещения( + "ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения", ЭтотОбъект, Контекст, + "ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения", ЭтотОбъект); + ПараметрыЗапуска = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); + ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Ложь; + + Если Дистрибутив = "ТребуетсяУстановкаБиблиотекиИнтеграции" Тогда + ИмяПрограммы = Новый Массив; + Если Контекст.ТипПлатформы = "Linux_x86_64" Или Контекст.ТипПлатформы = "Linux_x86" Тогда + ИмяПрограммы.Добавить("cp"); + Иначе + ИмяПрограммы.Добавить("copy"); + КонецЕсли; + ИмяПрограммы.Добавить(Контекст.ВременныйКаталог + ПараметрыДистрибутива.Имя); + ИмяПрограммы.Добавить(Контекст.КаталогСистемныхПриложений); + ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Истина; + ИначеЕсли Дистрибутив = "ТребуетсяУстановкаДрайверовДжакарта" И (Контекст.ТипПлатформы = "Linux_x86_64" + Или Контекст.ТипПлатформы = "Linux_x86") Тогда + + ИмяПрограммы = Новый Массив; + ИмяПрограммы.Добавить("bash"); + ИмяПрограммы.Добавить(Контекст.ВременныйКаталог + ПараметрыДистрибутива.Имя); + ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Истина; + ИначеЕсли Дистрибутив = "ТребуетсяУстановкаДрайверовРутокен" И (Контекст.ТипПлатформы = "Linux_x86_64" + Или Контекст.ТипПлатформы = "Linux_x86") Тогда + ИмяПрограммы = Новый Массив; + ИмяПрограммы.Добавить("dpkg"); + ИмяПрограммы.Добавить("-i"); + ИмяПрограммы.Добавить(Контекст.ВременныйКаталог + ПараметрыДистрибутива.Имя); + ПараметрыЗапуска.ВыполнитьСНаивысшимиПравами = Истина; + Иначе + ИмяПрограммы = Контекст.ВременныйКаталог + ПараметрыДистрибутива.Имя; + КонецЕсли; + + ПараметрыЗапуска.ПолучитьПотокВывода = Истина; + ПараметрыЗапуска.ПолучитьПотокОшибок = Истина; + ПараметрыЗапуска.Оповещение = Оповещение; + ПараметрыЗапуска.ТекущийКаталог = Контекст.ВременныйКаталог; + ПараметрыЗапуска.ДождатьсяЗавершения = Истина; + + ФайловаяСистемаКлиент.ЗапуститьПрограмму(ИмяПрограммы, ПараметрыЗапуска); + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ЗапуститьПриложениеНаКлиентеПослеЗапускаПриложения(Результат, Контекст) Экспорт + + Ждать ЗапуститьДиагностикуТокенов(); + + Дистрибутив = Контекст.Свойства[Контекст.Индекс]; + Если Дистрибутив <> "ТребуетсяОбновлениеБиблиотек" + И ЭтотОбъект[Контекст.Свойства[Контекст.Индекс]] = Истина Тогда + + Если Дистрибутив = "ТребуетсяУстановкаБиблиотекиИнтеграции" Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить библиотеку интеграции с OpenSSL (rtengine). + |Загрузите библиотеку с сайта производителя %1 самостоятельно, распакуйте и скопируйте в каталог %2 файл %3.'"), + "https://www.rutoken.ru/support/download/openssl/", + Контекст.КаталогСистемныхПриложений, + Контекст.РезультатПолученияДистрибутивов[Дистрибутив].Имя); + + ИначеЕсли Дистрибутив = "ТребуетсяУстановкаДрайверовДжакарта" Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установите Единый Клиент JaCarta с сайта производителя %1 самостоятельно.'"), + "https://www.aladdin-rd.ru/catalog/jacarta-client/"); + + ИначеЕсли Дистрибутив = "ТребуетсяУстановкаДрайверовРутокен" Тогда + + Если Контекст.ТипПлатформы = "Windows_x86_64" Или Контекст.ТипПлатформы = "Windows_x86" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить драйверы для работы с Рутокеном. + |Установите драйверы самостоятельно с сайта производителя %2.'"), + Контекст.Система, + "https://www.rutoken.ru/support/download/windows/"); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить драйверы для работы с Рутокеном в ОС %1. + |Установите библиотеку %2 самостоятельно с сайта производителя %3.'"), + Контекст.Система, + "rtPKCS11ecp", + "https://www.rutoken.ru/support/download/nix/"); + КонецЕсли; + + ИначеЕсли Дистрибутив = "ТребуетсяУстановкаOpenSSL" Тогда + + Если Контекст.ТипПлатформы = "Windows_x86_64" Или Контекст.ТипПлатформы = "Windows_x86" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами в ОС %1 установите библиотеку %2 самостоятельно, например, с ресурса %3.'"), + Контекст.ТипПлатформы, + "OpenSSL", + "https://slproweb.com"); + Иначе + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для работы с токенами в ОС %1 установите библиотеку %2 из состава OpenSSL 3 в %3 самостоятельно, например, из комплекта разработчика %4. + |Проверьте зависимости (ldd /usr/lib/libcrypto.so.3) и обновите необходимые библиотеки.'"), + Контекст.ТипПлатформы, + "libcrypto.so.3", + Контекст.КаталогСистемныхПриложений, + "https://www.rutoken.ru/developers/sdk/"); + + КонецЕсли; + + КонецЕсли; + + Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + Контекст.Ошибки.Добавить(СтрШаблон("%1%2%3", ТекстОшибки, Символы.ПС, Результат.ОписаниеОшибки)); + ИначеЕсли ЗначениеЗаполнено(Результат.ПотокОшибок) Тогда + Контекст.Ошибки.Добавить(СтрШаблон("%1%2%3", ТекстОшибки, Символы.ПС, Результат.ПотокОшибок)); + КонецЕсли; + КонецЕсли; + + НачатьУстановкуДистрибутива(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьПриложениеНаКлиентеПриОшибкеЗапускаПриложения(Ошибка, Контекст) Экспорт + Контекст.Ошибки.Добавить(ОбработкаОшибок.КраткоеПредставлениеОшибки(Ошибка)); + НачатьУстановкуДистрибутива(Контекст); +КонецПроцедуры + +&НаКлиенте +Процедура ЗакончитьУстановкуДистрибутивов(Контекст) + + Элементы.УстановитьДляРутокена.Доступность = Истина; + Элементы.УстановитьДляДжакарта.Доступность = Истина; + Элементы.ФормаОбновитьИнформациюОТокенах.Доступность = Истина; + ПоказатьОшибкиУстановкиДистрибутивов(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОшибкуУстановкиДистрибутивов(ТекстОшибки, Контекст) + + Если ТипЗнч(ТекстОшибки) = Тип("ИнформацияОбОшибке") Тогда + ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ТекстОшибки); + КонецЕсли; + Контекст.Ошибки.Добавить(ТекстОшибки); + ЗакончитьУстановкуДистрибутивов(Контекст) + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОшибкиУстановкиДистрибутивов(Контекст) + + Если Контекст.Ошибки.Количество() > 0 Тогда + ТекстОшибкиКлиент = ""; + Для Каждого Ошибка Из Контекст.Ошибки Цикл + ТекстОшибкиКлиент = ТекстОшибкиКлиент + ?(ТекстОшибкиКлиент = "", "", Символы.ПС + Символы.ПС) + "• "+ Ошибка; + КонецЦикла; + ПараметрыОшибки = ЭлектроннаяПодписьКлиент.ПараметрыФормыРасширенногоПредставленияОшибки(); + ПараметрыОшибки.ЗаголовокПредупреждения = НСтр("ru = 'Не удалось установить библиотеки'"); + ПараметрыОшибки.ТекстОшибкиКлиент = ТекстОшибкиКлиент; + ПараметрыОшибки.ПоказатьТребуетсяПомощь = Истина; + Оповещение = Новый ОписаниеОповещения("ЗапуститьДиагностикуТокеновПослеОтображенияОшибок", ЭтотОбъект); + ЭлектроннаяПодписьКлиент.ОткрытьФормуРасширенногоПредставленияОшибки(ПараметрыОшибки, ЭтотОбъект, Оповещение); + Иначе + ЗапуститьДиагностикуТокенов(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗапуститьДиагностикуТокеновПослеОтображенияОшибок(Результат, ДополнительныеПараметры) Экспорт + ЗапуститьДиагностикуТокенов(); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПрограммКриптопровайдеров/Form.form b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПрограммКриптопровайдеров/Form.form deleted file mode 100644 index aa0cc3252..000000000 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПрограммКриптопровайдеров/Form.form +++ /dev/null @@ -1,319 +0,0 @@ - - - - ДекорацияЗаголовок - 1 - - <key>ru</key> - <value>Для работы с усиленной квалифицированной электронной подписью на компьютере или на сервере должна быть установлено сертифицированное* приложение (средство криптографической защиты информации). С ее помощью вы сможете работать с любым количеством электронных подписей, но только на том компьютере или ноутбуке, на котором она установлена. Если необходимо работать на разных компьютерах, то следует для каждого приобрести дополнительную лицензию или настроить работу на сервере (этим занимается администратор).</value> - - true - true - - true - - - ДекорацияЗаголовокРасширеннаяПодсказка - 3 - Label - true - true - - Left - - - - ДекорацияЗаголовокКонтекстноеМеню - 2 - true - - true - Label - 80 - true - - Left - - - - ДекорацияПрограммы - 4 - - <key>ru</key> - <value> Выберите одно из приложений для установки на этом компьютере: -</value> - - true - true - - true - - - ДекорацияПрограммыРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - ДекорацияПрограммыКонтекстноеМеню - 5 - true - - true - Label - 80 - true - - Left - - - - Программы - 14 - - УстановитьVipNet - 16 - - <key>ru</key> - <value>ViPNet CSP</value> - - true - true - - true - - - УстановитьVipNetРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - UsualButton - Form.Command.УстановитьVipNet - Normal - Auto - true - true - UserCmds - Auto - - - УстановитьКриптоПро - 10 - - <key>ru</key> - <value>КриптоПро CSP</value> - - true - true - - true - - - УстановитьКриптоПроРасширеннаяПодсказка - 11 - Label - true - true - - Left - - - UsualButton - Form.Command.УстановитьКриптоПро - Normal - Auto - true - true - UserCmds - Auto - - - УстановитьSignalCOM - 18 - - <key>ru</key> - <value>Signal-COM CSP</value> - - true - true - - true - - - УстановитьSignalCOMРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - Hyperlink - Form.Command.УстановитьSignalCOM - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Программы</value> - - - ПрограммыРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - UsualGroup - - Vertical - NormalSeparation - true - true - Auto - Auto - - - - ДекорацияПрограммы2 - 20 - - <key>ru</key> - <value> *Приложение, сертифицированное ФСБ и ФСТЭК, соответствует стандартам безопасности, принятым в России и поддерживает отечественные стандарты безопасности ГОСТ Р 34.11-2012 и ГОСТ Р 34.10-2012.</value> - - true - true - - true - - - ДекорацияПрограммы2РасширеннаяПодсказка - 22 - Label - true - true - - Left - - - - ДекорацияПрограммы2КонтекстноеМеню - 21 - true - - true - Label - 80 - true - - Left - - - - ФормаКоманднаяПанель - -1 - Left - - DontBlock - true - true - true - Vertical - true - true - true - auto - true - - УстановитьКриптоПро - - <key>ru</key> - <value>КриптоПро CSP</value> - - 1 - - true - - - CommonPicture.ЗначокЩита - - - - УстановитьКриптоПро - - - TextPicture - Auto - Auto - - - УстановитьVipNet - - <key>ru</key> - <value>ViPNet CSP</value> - - 3 - - true - - - CommonPicture.ЗначокЩита - - - - УстановитьVipNet - - - TextPicture - Auto - Auto - - - УстановитьSignalCOM - - <key>ru</key> - <value>Signal-COM CSP</value> - - 4 - - true - - - CommonPicture.ТипГиперссылка - - - - УстановитьSignalCOM - - - TextPicture - Auto - Auto - - - - - - diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПрограммКриптопровайдеров/Module.bsl b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПрограммКриптопровайдеров/Module.bsl deleted file mode 100644 index 992c987b4..000000000 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Forms/УстановкаПрограммКриптопровайдеров/Module.bsl +++ /dev/null @@ -1,118 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОписаниеПеременных - -&НаКлиенте -Перем ВходящиеКонтексты; - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура УстановитьVipNet(Команда) - - ОповещениеОЗавершении = Новый ОписаниеОповещения("ПовторнаяПроверкаПрограммКриптографии", ЭтотОбъект); - - ВходящийКонтекст = Неопределено; - Если ТипЗнч(ВходящиеКонтексты) = Тип("Соответствие") Тогда - ВходящийКонтекст = ВходящиеКонтексты.Получить(ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыVipNet()); - КонецЕсли; - - ЭлектроннаяПодписьСлужебныйКлиент.УстановитьVipNet(ЭтотОбъект, ОповещениеОЗавершении, ВходящийКонтекст); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьКриптоПро(Команда) - - ВходящийКонтекст = Неопределено; - Если ТипЗнч(ВходящиеКонтексты) = Тип("Соответствие") Тогда - ВходящийКонтекст = ВходящиеКонтексты.Получить(ЭлектроннаяПодписьКлиентСерверЛокализация.ИмяПрограммыКриптоПро()); - КонецЕсли; - - ОповещениеОЗавершении = Новый ОписаниеОповещения("ПовторнаяПроверкаПрограммКриптографии", ЭтотОбъект); - ЭлектроннаяПодписьСлужебныйКлиент.УстановитьКриптоПро(ЭтотОбъект, ОповещениеОЗавершении, ВходящийКонтекст); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьSignalCOM(Команда) - - ЭлектроннаяПодписьСлужебныйКлиент.УстановитьSignalCOM(); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Асинх Процедура ПовторнаяПроверкаПрограммКриптографии(Результат, ДополнительныеПараметры) Экспорт - - Если Не ТипЗнч(Результат) = Тип("Структура") Тогда - Возврат; - КонецЕсли; - - Если Результат.Выполнено = Истина Тогда - - ОбновитьПовторноИспользуемыеЗначения(); - - Ответ = Ждать ВопросАсинх( - НСтр("ru = 'Для работы с только что установленным криптопровайдером перезапустите сеанс. Перезапустить сейчас?'"), - РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет, НСтр("ru = 'После установки криптопровайдера'")); - - Если Ответ = КодВозвратаДиалога.Да Тогда - ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы", Истина); - ЗавершитьРаботуСистемы(Истина, Истина); - Возврат; - КонецЕсли; - - Закрыть(); - Возврат; - - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВходящийКонтекст", Неопределено) <> Неопределено Тогда - Если ВходящиеКонтексты = Неопределено Тогда - ВходящиеКонтексты = Новый Соответствие; - КонецЕсли; - ВходящиеКонтексты.Вставить(Результат.ВходящийКонтекст.ИмяПрограммы, Результат.ВходящийКонтекст); - КонецЕсли; - - Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда - ПоказатьПредупреждение(, УстановитьГиперссылку(Результат.ОписаниеОшибки)); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Функция УстановитьГиперссылку(Строка) - - МассивСсылок = Новый Массив; - МассивСсылок.Добавить(Новый Структура("Текст, Гиперссылка", "www.infotecs.ru", "https://infotecs.ru/")); - МассивСсылок.Добавить(Новый Структура("Текст, Гиперссылка", "www.cryptopro.ru", "https://cryptopro.ru/")); - - Для Каждого ТекущаяСсылка Из МассивСсылок Цикл - Позиция = СтрНайти(Строка, ТекущаяСсылка.Текст); - Если Позиция = 0 Тогда - Продолжить; - КонецЕсли; - - СтрокаСоСсылкой = Новый ФорматированнаяСтрока(ТекущаяСсылка.Текст, , , , ТекущаяСсылка.Гиперссылка); - - Возврат Новый ФорматированнаяСтрока(Лев(Строка, Позиция - 1), СтрокаСоСсылкой, Сред(Строка, Позиция + СтрДлина( - ТекущаяСсылка.Текст))); - КонецЦикла; - - Возврат Новый ФорматированнаяСтрока(Строка); - -КонецФункции - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index 5534d83a1..90cd7b7ca 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -32,6 +32,8 @@ Настройка.АлгоритмыХеширования.Добавить("GOST R 34.11-94"); Настройка.АлгоритмыХеширования.Добавить("GR 34.11-2012 512"); Настройка.АлгоритмыШифрования.Добавить("GOST 28147-89"); + Настройка.НетВLinux = Истина; + Настройка.НетВMacOS = Истина; // ViPNet CSP (ГОСТ 2012/512). Настройка = Настройки.Добавить(); @@ -50,6 +52,8 @@ Настройка.АлгоритмыХеширования.Добавить("GOST R 34.11-94"); Настройка.АлгоритмыХеширования.Добавить("GR 34.11-2012 256"); Настройка.АлгоритмыШифрования.Добавить("GOST 28147-89"); + Настройка.НетВLinux = Истина; + Настройка.НетВMacOS = Истина; // КриптоПро CSP (ГОСТ 2012/256). Настройка = Настройки.Добавить(); @@ -506,21 +510,6 @@ КонецПроцедуры -Функция АдресаСерверовМетокВремениДляНачальногоЗаполнения() Экспорт - - ЗначениеКонстанты = Константы.АдресаСерверовМетокВремени.Получить(); - - Если Не ЗначениеЗаполнено(ЗначениеКонстанты) - Или ЗначениеКонстанты = "https://1stdss.1c.ru/TSP/tsp.srf" Тогда - - Возврат АдресаСерверовМетокВремениПоУмолчанию(); - - КонецЕсли; - - Возврат ""; - -КонецФункции - Функция АдресаСерверовМетокВремениПоУмолчанию() Экспорт МассивАдресов = Новый Массив; diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Templates/КлассификаторОшибокКриптографии/Template.bin b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Templates/КлассификаторОшибокКриптографии/Template.bin index 4f6a9aafd..a2cbb7547 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Templates/КлассификаторОшибокКриптографии/Template.bin +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/Templates/КлассификаторОшибокКриптографии/Template.bin @@ -1229,6 +1229,15 @@ }, { "Anchor": "", +"Reason": "• Архивная метка времени в подписи не прошла проверку. Неверный хеш атрибутов подписи.", +"Solution": "• Обратитесь к подписанту для получения корректной подписи\n• Проверьте подпись на других ресурсах и примите решение, считать ли подпись достоверной. \n", +"ErrorText": "Ошибка проверки архивной метки времени, код ошибки: 0x80091007", +"RepairMethods": "", +"En": "", +"Sign": true +}, +{ +"Anchor": "", "Reason": "• Алгоритм подписи не соответствует алгоритму сертификата подписанта.\n• Подпись не является достоверной.\n• После подписания изменились данные объекта.", "Solution": "• Обратитесь к подписанту для получения корректной подписи", "ErrorText": "0x80091007", @@ -1481,8 +1490,16 @@ "ErrorText": "Ошибка при получении расширенных свойств сертификата:\nСистемная криптографическая ошибка - 0x", "RepairMethods": "", "En": "" +}, +{ +"Anchor": "", +"Reason": "Не установлено приложение КриптоПро CSP в операционной системе Linux или macOS.", +"Solution": "Установите КриптоПро CSP для операционных систем Linux или macOS.", +"ErrorText": "Невозможно получить расширенные свойства сертификата: Системная криптографическая ошибка - 0x", +"RepairMethods": "", +"En": "" } ], -"LastChangeDate": "2025-02-28T16:27:03", -"Version": "3.0.1.55" +"LastChangeDate": "2025-03-21T13:15:16", +"Version": "3.0.1.57" } \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo index 6d73a64a1..0a0c54f9c 100644 --- a/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo +++ b/SSL/src/DataProcessors/ПрограммыЭлектроннойПодписиИШифрования/ПрограммыЭлектроннойПодписиИШифрования.mdo @@ -10,6 +10,7 @@ Приложения электронной подписи и шифрования true + DataProcessor.ПрограммыЭлектроннойПодписиИШифрования.Form.УстановкаПриложенийДляРаботыСЭлектроннойПодписью ВстроенныйКриптопровайдер @@ -20,7 +21,7 @@ MobileDevice - УстановкаПрограммКриптопровайдеров + УстановкаПриложенийДляРаботыСЭлектроннойПодписью ru Установка приложений для работы с электронной подписью diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Help/ru.html index cbb7aedba..17bd8f1f5 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВерсияПрисоединенногоФайла/Help/ru.html @@ -1,6 +1,6 @@

          Просмотр сведений о версии файла.

          -

          По окончании редактирования файла (по команде Завершить редактирование в списке файлов) приложение рекомендует сохранить версию файла и ввести информацию о данной версии. По умолчанию эта возможность включена (рекомендуется использовать сохранение версий, так как в случае серьезных ошибок, которые привели к порче файла, можно вернуться к более ранней, неиспорченной версии). Впоследствии можно отредактировать комментарий и при необходимости изменить автора версии.

          +

          По окончании редактирования файла (по команде Завершить редактирование в списке файлов) приложение рекомендует сохранить версию файла и ввести информацию о данной версии. По умолчанию эта возможность включена (рекомендуется использовать сохранение версий, так как в случае серьезных ошибок, которые привели к порче файла, можно вернуться к более ранней, неиспорченной версии). Впоследствии можно отредактировать комментарий и при необходимости изменить автора версии.

          Сведения о версии файла

          • Владелец - наименование файла-владельца, автоматически заполняется при добавлении версии, не подлежит редактированию;
            @@ -9,40 +9,40 @@
            Наименование - наименование версии, автоматически заполняется при добавлении версии, не подлежит редактированию;
          • -
            Родительская версия - для того чтобы подчинить одну версию другой, выберите из списка нужную версию. История версий в приложении для наглядности представляется в виде дерева;
            +
            Родительская версия - для того чтобы подчинить одну версию другой, выберите из списка нужную версию. История версий в приложении для наглядности представляется в виде дерева;
          • -
            Размер (байт) - размер данных версии файла в байтах.
            +
            Размер (байт) - размер данных версии файла в байтах.
          • -
            Расширение - расширение (формат) версии файла. Рядом располагается картинка, которая также показывает формат версии файла, определяется приложением автоматически.
            +
            Расширение - расширение (формат) версии файла. Рядом располагается картинка, которая также показывает формат версии файла, определяется приложением автоматически.
          • -
            Комментарий к версии - введите дополнительные сведения о версии файла (также можно ввести при сохранении версии по окончании редактирования файла).
            +
            Комментарий к версии - введите дополнительные сведения о версии файла (также можно ввести при сохранении версии по окончании редактирования файла).
          • -
            Автор - пользователь, который добавил версию файла. При необходимости можно выбрать другого автора из списка пользователей.
            +
            Автор - пользователь, который добавил версию файла. При необходимости можно выбрать другого автора из списка пользователей.
          • -
            Дата создания - дата и время добавления версии файла в базу.
            +
            Дата создания - дата и время добавления версии файла в базу.
          • -
            Номер версии - нумерация версий ведется приложением автоматически при изменениях файла, при этом максимальный номер имеет последняя сохраненная версия.
            +
            Номер версии - нумерация версий ведется приложением автоматически при изменениях файла, при этом максимальный номер имеет последняя сохраненная версия.
          • -
            Дата изменения - дата изменения данных версии файла (местное время).
            +
            Дата изменения - дата изменения данных версии файла (местное время).
          • -
            Кодировка - автоматически выбирается значение По умолчанию.

          Просмотр версии файла

          -
          • Нажмите Просмотреть, для того чтобы открыть выбранную версию файла соответствующим приложением для просмотра или редактирования (также можно открыть версию файла двойным щелчком мыши по нужной строке или с помощью соответствующей команды меню Еще).

          Сохранение версии файла на компьютер

          -
          • Для того чтобы сохранить версию файла на устройство, нажмите Сохранить как. Выберите каталог для сохранения файла.

          См. также:

          +
          Кодировка - автоматически выбирается значение По умолчанию.

          Просмотр версии файла

          +
          • Нажмите Просмотреть, для того чтобы открыть выбранную версию файла соответствующим приложением для просмотра или редактирования (также можно открыть версию файла двойным щелчком мыши по нужной строке или с помощью соответствующей команды меню Еще).

          Сохранение версии файла на компьютер

          +
          • Для того чтобы сохранить версию файла на устройство, нажмите Сохранить как. Выберите каталог для сохранения файла.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Help/ru.html index 59b3dc520..6a415d01b 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВопросПриИмпортеФайлов/Help/ru.html @@ -1,8 +1,8 @@ -

          В приложение можно загрузить одновременно несколько выбранных файлов или несколько папок с файлами с компьютера на компьютере. Для этого необходимо выполнить соответствующие команды в списке файлов.

          -

          Если один или несколько выбранных файлов превышают предельно допустимый размер, то приложение выводит предупреждение со списком файлов, которые невозможно загрузить.

          +

          В приложение можно загрузить одновременно несколько выбранных файлов или несколько папок с файлами с компьютера на компьютере. Для этого необходимо выполнить соответствующие команды в списке файлов.

          +

          Если один или несколько выбранных файлов превышают предельно допустимый размер, то приложение выводит предупреждение со списком файлов, которые невозможно загрузить.

          Нажмите Продолжить импорт, для того чтобы:

          -
          • загрузить остальные файлы, перечисленные в списке для загрузки, которые проходят по размеру; +
            • загрузить остальные файлы, перечисленные в списке для загрузки, которые проходят по размеру;
            • -
            • получить отчет об ошибках с перечнем файлов, по которым импорт не состоялся.

            Нажмите Отмена для возврата в приложение без продолжения попыток. Если планировалось загрузить несколько файлов и другие файлы удовлетворяли условиям, они также не будут загружены в приложение.

            -

            Предельно допустимый размер файлов можно увеличить в настройках приложения. Для этого в разделе Администрирование - Настройки работы с файлами укажите Максимальный размер файла. По умолчанию равен 50 Мб.

            \ No newline at end of file +
          • получить отчет об ошибках с перечнем файлов, по которым импорт не состоялся.

          Нажмите Отмена для возврата в приложение без продолжения попыток. Если планировалось загрузить несколько файлов и другие файлы удовлетворяли условиям, они также не будут загружены в приложение.

          +

          Предельно допустимый размер файлов можно увеличить в настройках приложения. Для этого в разделе Администрирование - Настройки работы с файлами укажите Максимальный размер файла. По умолчанию равен 50 Мб.

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Help/ru.html index cd981953c..5c42c8401 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВсеФайлы/Help/ru.html @@ -1,15 +1,15 @@ -

          Список предназначен для управления файлами приложения.

          +

          Список предназначен для управления файлами приложения.

          В списке выводятся сведения:

          -
          •  - наличие электронной подписи и шифрования; +
            • - наличие электронной подписи и шифрования;
            • Наименование - полное наименование и описание файла. Значок рядом с наименованием указывает тип файла;
            • -
            • Размещение - папка списка файлов или объект приложения, к которому присоединен файл; +
            • Размещение - папка списка файлов или объект приложения, к которому присоединен файл;
            • Автор - пользователь, который добавил файл;
            • -
            • Дата создания - время и дата добавления файла в базу; +
            • Дата создания - время и дата добавления файла в базу;
            • Размер (Кб) - размер файла;
            • @@ -25,16 +25,16 @@
            • Путь к файлу на томе.

            Доступные действия:

            • -
              Просмотреть - Открыть файл внешним приложением для просмотра;
              +
              Просмотреть - Открыть файл внешним приложением для просмотра;
            • -
              Отменить редактирование - снять с файла пометку занятости для редактирования;
              +
              Отменить редактирование - снять с файла пометку занятости для редактирования;
            • -
              Открыть карточку файла можно с помощью соответствующей команды меню Еще; 
              +
              Открыть карточку файла можно с помощью соответствующей команды меню Еще;
            • -
              Сохранить файл в указанный локальный или сетевой каталог можно с помощью команды Еще - Сохранить как.

            См. также:

            +
            Сохранить файл в указанный локальный или сетевой каталог можно с помощью команды Еще - Сохранить как.

          См. также:

          • diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl index 9ebd4203e..2ef8df65b 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборГруппы/Module.bsl @@ -52,10 +52,9 @@ ВладелецФайлов = Параметры.ВладелецФайлов; - ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке динамического списка присоединенных файлов.'"); - ОкончаниеОшибки = НСтр("ru = 'В этом случае настройка динамического списка невозможна.'"); + ЗаголовокОшибки = НСтр("ru = 'Невозможно открыть список присоединенных файлов.'"); ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов( - ВладелецФайлов, "", ЗаголовокОшибки, ОкончаниеОшибки); + ВладелецФайлов, "", ЗаголовокОшибки); ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов); МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Form.form index d38b18848..7065c24b4 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Form.form @@ -352,6 +352,13 @@ DontUse Auto + + ТекущаяКодировка + + String + + + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Help/ru.html index c38455d5c..f078ea01a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Help/ru.html @@ -23,10 +23,10 @@ UL { }

            -

            Кодировка – это числовая схема, где каждому текстовому знаку соответствует определенное числовое значение. Разные языки обычно состоят из разных наборов знаков, поэтому существует много разных стандартов кодировки. То, что отображается на экране в виде текста, на самом деле хранится в текстовом файле как числовое значение. Компьютер преобразует эти числовые значения, используя стандарт кодировки, и показывает пользователю готовый текст.

            -

            Выбор кодировки текстового файла производится по соответствующей команде при загрузке файла (загрузке папки) с устройства в список файлов. Для загрузки файла или папки предназначены соответствующие команды контекстного меню списка по правой кнопке мыши.

            -

            Также можно Изменить кодировку уже существующего файла во встроенном текстовом редакторе приложения по соответствующей команде меню Еще.

            -

            Выбор кодировки текстового файла

            +

            Кодировка – это числовая схема, где каждому текстовому знаку соответствует определенное числовое значение. Разные языки обычно состоят из разных наборов знаков, поэтому существует много разных стандартов кодировки. То, что отображается на экране в виде текста, на самом деле хранится в текстовом файле как числовое значение. Компьютер преобразует эти числовые значения, используя стандарт кодировки, и показывает пользователю готовый текст.

            +

            Выбор кодировки текстового файла производится по соответствующей команде при загрузке файла (загрузке папки) с устройства в список файлов. Для загрузки файла или папки предназначены соответствующие команды контекстного меню списка по правой кнопке мыши.

            +

            Также можно Изменить кодировку уже существующего файла во встроенном текстовом редакторе приложения по соответствующей команде меню Еще.

            +

            Выбор кодировки текстового файла

            • Выберите кодировку из списка;
            • Если нужная кодировка отсутствует, снимите флажок Показывать только основные кодировки; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl index c91a00ce2..4a213c19c 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборКодировки/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Параметры.Свойство("ТекущаяКодировка", ТекущаяКодировка); + ТекущаяКодировка = Параметры.ТекущаяКодировка; ПоказыватьТолькоОсновныеКодировки = Истина; ЗаполнитьСписокКодировок(Не ПоказыватьТолькоОсновныеКодировки); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Help/ru.html index 67fa287af..acea03e4f 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСохраненияШифрованногоФайла/Help/ru.html @@ -1,8 +1,8 @@

              Выбирается способ сохранения шифрованного файла при выполнении команды "Сохранить как".

              -

              Если выбран режим сохранения "Сохранить шифрованный файл", то файл просто сохраняется нерасшифрованным.

              +

              Если выбран режим сохранения "Сохранить шифрованный файл", то файл просто сохраняется нерасшифрованным.

              Если выбран режим "Расшифровать и сохранить", то файл при сохранении расшифровывается. В этом случае требуется ввести пароль для расшифровки.

              См. также:

              - \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Help/ru.html index 132ecd585..37db08a30 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Help/ru.html @@ -1,8 +1,8 @@ -

              Выбор приложения для сравнения версий файлов. В приложении предусмотрена возможность сравнивать версии файлов формата HTML, TXT, RTF, DOC, DOCX, ODT.

              -

              Позволяет задать текстовый редактор, который будет использоваться для сравнения версий файлов между собой. Вызывается при выполнении команды Показать отличия из списка версий файла, если текстовый редактор для сравнения не задан по умолчанию.

              +

              Выбор приложения для сравнения версий файлов. В приложении предусмотрена возможность сравнивать версии файлов формата HTML, TXT, RTF, DOC, DOCX, ODT.

              +

              Позволяет задать текстовый редактор, который будет использоваться для сравнения версий файлов между собой. Вызывается при выполнении команды Показать отличия из списка версий файла, если текстовый редактор для сравнения не задан по умолчанию.

              Выбор способа сравнения версий

              -
              • В поле Сравнивать версии файлов при помощи выберите приложение для сравнения файлов из выпадающего списка: для выбора возможны Microcoft Word или OpenOffice.org Writer. +
                • В поле Сравнивать версии файлов при помощи выберите приложение для сравнения файлов из выпадающего списка: для выбора возможны Microcoft Word или OpenOffice.org Writer.
                • -
                • Выбор запоминается в персональных настройках приложения.

                Установка настройки по умолчанию

                -
                • В персональных настройках приложения (вкладка Работа с файлами) в поле Сравнивать версии при помощи необходимо задать текстовый редактор для сравнения версий. Для выбора возможны Microcoft Word или OpenOffice.org Writer. Эта настройка не устанавливается по умолчанию автоматически.
                \ No newline at end of file +
              • Выбор запоминается в персональных настройках приложения.

              Установка настройки по умолчанию

              +
              • В персональных настройках приложения (вкладка Работа с файлами) в поле Сравнивать версии при помощи необходимо задать текстовый редактор для сравнения версий. Для выбора возможны Microcoft Word или OpenOffice.org Writer. Эта настройка не устанавливается по умолчанию автоматически.
              \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl index 7dddc4b9e..423b607cc 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ВыборСпособаСравненияВерсий/Module.bsl @@ -38,7 +38,7 @@ Элемент.Вставить("Значение", СпособСравненияВерсийФайлов); МассивСтруктур.Добавить(Элемент); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); РезультатВыбора = КодВозвратаДиалога.ОК; ОповеститьОВыборе(РезультатВыбора); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗавершениеРедактирования/Form.form similarity index 100% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Form.form rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗавершениеРедактирования/Form.form diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗавершениеРедактирования/Module.bsl similarity index 100% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЗавершениеРедактирования/Module.bsl rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗавершениеРедактирования/Module.bsl diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Form.form similarity index 96% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Form.form index 61652af17..500d36a85 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Form.form @@ -2,14 +2,14 @@ <key>ru</key> - <value>Загрузка папки</value> + <value>Загрузка папки с компьютера</value> ВыбранныйКаталог 23 <key>ru</key> - <value>Папка с файлами</value> + <value>Каталог с файлами для загрузки</value> true true @@ -19,6 +19,7 @@ Каталог + Top ВыбранныйКаталогРасширеннаяПодсказка 31 @@ -66,7 +67,7 @@ 14 <key>ru</key> - <value>Размещение</value> + <value>Разместить в</value> true true @@ -103,11 +104,11 @@ - УдалятьПослеДобавления + УдалитьПослеДобавления 3 <key>ru</key> - <value>Удалять файлы после добавления</value> + <value>Удалить файлы на компьютере после загрузки</value> true true @@ -115,11 +116,11 @@ true - УдалятьФайлыПослеДобавления + УдалитьФайлыПослеЗагрузки Right - УдалятьПослеДобавленияРасширеннаяПодсказка + УдалитьПослеДобавленияРасширеннаяПодсказка 33 Label true @@ -129,7 +130,7 @@ - УдалятьПослеДобавленияКонтекстноеМеню + УдалитьПослеДобавленияКонтекстноеМеню 10 true @@ -149,7 +150,7 @@ 2 <key>ru</key> - <value>Описание для создаваемых файлов</value> + <value>Описание для добавляемых файлов</value> true true @@ -351,6 +352,7 @@ UsualGroup HorizontalIfPossible + NormalSeparation true true Auto @@ -527,10 +529,10 @@ - УдалятьФайлыПослеДобавления + УдалитьФайлыПослеЗагрузки <key>ru</key> - <value>Удалять файлы после добавления</value> + <value>Удалить файлы после загрузки</value> 4 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Help/ru.html new file mode 100644 index 000000000..f27613252 --- /dev/null +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Help/ru.html @@ -0,0 +1,30 @@ + +

              Предназначена для загрузки папки с компьютера.

              +

              Открывается из списка файлов по команде Загрузить папку контекстного меню по правой кнопке мыши после выбора папки в открывшемся Проводнике Windows. В проводнике укажите путь к папке, нажмите Выбор папки.

              +

              Заполните необходимые для загрузки папки сведения:

              +
              • +
                Поле Каталог на устройстве заполняется автоматически, при необходимости можно выбрать другую папку.
              • +
                В поле Размещение автоматически проставляется выбранная папка в списке файлов, в которую будет загружена папка с устройства на компьютере. При необходимости можно выбрать другую папку;
                +
              • +
              • +
                Для экономии места на устройстве включите флажок Удалять файлы после добавления (по умолчанию выключен);
                +
              • +
              • +
                Напишите Описание для создаваемых файлов;
                +
              • +
              • +
                Включите флажок, для того чтобы Хранить версии (рекомендуется, по умолчанию флажок включен);
                +
              • +
              • +
                Для текстовых файлов можно Выбрать кодировку из списка.
                +
              • +
              • +
                Для подтверждения нажмите Загрузить папку. Если выбранная для загрузки папка пуста, то приложение выводит сообщение "Нет файлов для добавления".
              Также можно использовать перетаскивание мышью для загрузки папки с устройства - просто перетащите папку мышкой из Проводника Windows в нужную папку списка файлов приложения.
              +

              См. также:

              + \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Module.bsl similarity index 93% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Module.bsl index 41c151d2f..2eb4017f0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаПапки/Module.bsl @@ -23,6 +23,11 @@ ХранитьВерсии = РаботаСФайламиСлужебныйВызовСервера.ЭтоСправочникФайлы(ПапкаДляДобавления); Элементы.ХранитьВерсии.Видимость = ХранитьВерсии; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Заголовок = НСтр("ru = 'Загрузка папки с устройства'"); + Элементы.УдалитьПослеДобавления.Заголовок = НСтр("ru = 'Удалить файлы на устройстве после загрузки'"); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -55,13 +60,9 @@ ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'"); Если ДиалогОткрытияФайла.Выбрать() Тогда - Если ВыборКаталогов = Истина Тогда - Каталог = ДиалогОткрытияФайла.Каталог; - КонецЕсли; - КонецЕсли; СтандартнаяОбработка = Ложь; @@ -99,7 +100,7 @@ ПараметрыВыполнения.ВыбранныеФайлы = ВыбранныеФайлы; ПараметрыВыполнения.Комментарий = Описание; ПараметрыВыполнения.ХранитьВерсии = ХранитьВерсии; - ПараметрыВыполнения.УдалятьФайлыПослеДобавления = УдалятьФайлыПослеДобавления; + ПараметрыВыполнения.УдалитьФайлыПослеЗагрузки = УдалитьФайлыПослеЗагрузки; ПараметрыВыполнения.Рекурсивно = Истина; ПараметрыВыполнения.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыВыполнения.Кодировка = КодировкаТекстаФайла; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Form.form similarity index 98% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Form.form index 24b72d387..143715d1a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Загрузка файлов</value> + <value>Загрузка файлов с компьютера</value> ГруппаВыбранныеФайлы @@ -430,7 +430,7 @@ 14 <key>ru</key> - <value>Размещение</value> + <value>Разместить в</value> true true @@ -467,11 +467,11 @@
              - УдалятьПослеДобавления + УдалитьПослеДобавления 3 <key>ru</key> - <value>Удалять файлы после добавления</value> + <value>Удалить файлы на компьютере после загрузки</value> true true @@ -479,11 +479,11 @@ true - УдалятьФайлыПослеДобавления + УдалитьФайлыПослеЗагрузки Right - УдалятьПослеДобавленияРасширеннаяПодсказка + УдалитьПослеДобавленияРасширеннаяПодсказка 47 Label true @@ -493,7 +493,7 @@ - УдалятьПослеДобавленияКонтекстноеМеню + УдалитьПослеДобавленияКонтекстноеМеню 10 true @@ -510,7 +510,7 @@ 2 <key>ru</key> - <value>Описание для создаваемых файлов</value> + <value>Описание для добавляемых файлов</value> true true @@ -683,6 +683,7 @@ UsualGroup HorizontalIfPossible + NormalSeparation true true Auto @@ -913,10 +914,10 @@ - УдалятьФайлыПослеДобавления + УдалитьФайлыПослеЗагрузки <key>ru</key> - <value>Удалять файлы после добавления</value> + <value>Удалить файлы после загрузки</value> 4 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Help/ru.html similarity index 53% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Help/ru.html rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Help/ru.html index a98ef12a5..e2e8ef2ce 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Help/ru.html @@ -1,9 +1,9 @@ -

              Предназначена для загрузки файлов с устройства.

              -

              Открывается из списка файлов по команде Загрузить файлы контекстного меню по правой кнопке мыши или меню Еще после выбора файла (файлов) в открывшемся Проводнике Windows. В проводнике выделите один или несколько файлов, нажмите Открыть.

              -

              Выводится список загружаемых файлов. Можно заменить весь список с помощью кнопки Выбрать (дополнить список невозможно, при выборе новых файлов старые удаляются) - открыть Проводник Windows и выбрать другие файлы.

              -

              Заполните необходимые для загрузки файлов сведения:

              -
              • В поле Папка автоматически проставляется выбранная папка в списке файлов, в которую будет загружены файлы с компьютера. При необходимости можно выбрать другую папку; +

                Предназначена для загрузки файлов с устройства.

                +

                Открывается из списка файлов по команде Загрузить файлы контекстного меню по правой кнопке мыши или меню Еще после выбора файла (файлов) в открывшемся Проводнике Windows. В проводнике выделите один или несколько файлов, нажмите Открыть.

                +

                Выводится список загружаемых файлов. Можно заменить весь список с помощью кнопки Выбрать (дополнить список невозможно, при выборе новых файлов старые удаляются) - открыть Проводник Windows и выбрать другие файлы.

                +

                Заполните необходимые для загрузки файлов сведения:

                +
                • В поле Папка автоматически проставляется выбранная папка в списке файлов, в которую будет загружены файлы с компьютера. При необходимости можно выбрать другую папку;
                • Для экономии места на устройстве включите флажок Удалять файлы после добавления (по умолчанию выключен);
                  @@ -18,11 +18,11 @@
                  Для текстовых файлов можно Выбрать кодировку из списка.
                • -
                  Для подтверждения нажмите Загрузить файлы.
                Также можно использовать перетаскивание мышью для загрузки файлов с компьютера - просто перетащите файлы мышью из Проводника Windows в нужную папку списка файлов приложения.
                +
                Для подтверждения нажмите Загрузить файлы.
              Также можно использовать перетаскивание мышью для загрузки файлов с компьютера - просто перетащите файлы мышью из Проводника Windows в нужную папку списка файлов приложения.

              См. также:

              \ No newline at end of file +
            • Работа с формами.
            \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Module.bsl similarity index 95% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Module.bsl index 2862e1bb8..2d28b805b 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаФайлов/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ЗагрузкаФайлов/Module.bsl @@ -30,6 +30,11 @@ КонецЦикла; КонецЕсли; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Заголовок = НСтр("ru = 'Загрузка файлов с устройства'"); + Элементы.УдалитьПослеДобавления.Заголовок = НСтр("ru = 'Удалить файлы на устройстве после загрузки'"); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -118,7 +123,7 @@ ПараметрыВыполнения.ВыбранныеФайлы = ВыбранныеФайлыСписокЗначений; ПараметрыВыполнения.Комментарий = Комментарий; ПараметрыВыполнения.ХранитьВерсии = ХранитьВерсии; - ПараметрыВыполнения.УдалятьФайлыПослеДобавления = УдалятьФайлыПослеДобавления; + ПараметрыВыполнения.УдалитьФайлыПослеЗагрузки = УдалитьФайлыПослеЗагрузки; ПараметрыВыполнения.Рекурсивно = Ложь; ПараметрыВыполнения.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыВыполнения.ДобавленныеФайлы = ДобавленныеФайлы; @@ -132,7 +137,7 @@ Процедура ВыбратьФайлыВыполнить() Обработчик = Новый ОписаниеОповещения("ВыбратьФайлыВыполнитьПослеУстановкиРасширения", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); + РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Form.form similarity index 99% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Form.form index 58f7a31b1..5e6295a45 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Form.form @@ -12,7 +12,7 @@ 1 <key>ru</key> - <value>Выберите режим открытия файла</value> + <value>Выберите, как открыть файл</value> true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Help/ru.html similarity index 59% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Help/ru.html rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Help/ru.html index 794262f3c..db2d22312 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Help/ru.html @@ -1,31 +1,31 @@

            Предназначена для выбора режима открытия файла.

            -

            Для открытия файла в списке файлов используйте:

            +

            Для открытия файла в списке файлов используйте:

            • клавишу Enter - требуется выбор режима открытия файла, если не было иных настроек;
            • двойной щелчок левой кнопкой мыши - так же, как и в предыдущем случае;
            • -
            • Кнопку  Открыть файл; +
            • Кнопку Открыть файл;
            • -
            • Команду  Редактировать (F4).

            Варианты открытия файла

            -
            • С помощью переключателя выберите режим открытия файла: -
              • Только для просмотра - файл не будет помечен как занятый Вами для редактирования и откроется внешним приложением в режиме "только просмотр". +
              • Команду Редактировать (F4).

              Варианты открытия файла

              +
              • С помощью переключателя выберите режим открытия файла: +
                • Только для просмотра - файл не будет помечен как занятый Вами для редактирования и откроется внешним приложением в режиме "только просмотр".
                • -
                • Для редактирования - файл будет помечен как занятый Вами для редактирования и откроется внешним приложением с возможностью внесения и сохранения изменений.
              • +
              • Для редактирования - файл будет помечен как занятый Вами для редактирования и откроется внешним приложением с возможностью внесения и сохранения изменений.
            • Для подтверждения выбора нажмите Открыть файл.

            Отключение выбора режима открытия

            • Для того чтобы больше не производить выбор режима открытия, после выбора варианта открытия файла включите флажок Больше не спрашивать.
            • -
              Если для текстовых файлов в персональных настройках приложения установлен способ открытия Во встроенном редакторе, то выбор режима открытия файла не требуется, редактор открывается сразу и переключение между режимами открытия производится уже в самом редакторе.
              +
              Если для текстовых файлов в персональных настройках приложения установлен способ открытия Во встроенном редакторе, то выбор режима открытия файла не требуется, редактор открывается сразу и переключение между режимами открытия производится уже в самом редакторе.
            • Если файл был занят для редактирования, то выбора режима открытия файла не требуется, файл открывается в режиме редактирования.
            • -
              Включить выбор режима можно в персональных настройках приложения на закладке Работа с файлами.
              +
              Включить выбор режима можно в персональных настройках приложения на закладке Работа с файлами.
            • -
              В персональных настройках приложения (закладка Работа с файлами) можно  выбрать Действие при выборе файла:
              +
              В персональных настройках приложения (закладка Работа с файлами) можно выбрать Действие при выборе файла:
              • Открывать файл (установка по умолчанию);
                • diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Module.bsl similarity index 92% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Module.bsl index 3d4f2fb27..00dea4b6d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВыбораРежимаОткрытия/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/КакОткрытьФайл/Module.bsl @@ -33,12 +33,12 @@ Если КакОткрыватьСохраненныйВариант <> КакОткрывать Тогда РежимОткрытия = ?(КакОткрывать = 1, "Редактировать", "Открыть"); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиОткрытияФайлов", "ВариантОткрытияФайла", РежимОткрытия,,, Истина); КонецЕсли; Если БольшеНеСпрашивать = Истина Тогда - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить( + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить( "НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", Ложь,,, Истина); ОбновитьПовторноИспользуемыеЗначения(); diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form index 601d274d9..e5117847d 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Form.form @@ -399,6 +399,7 @@ OutputList Refresh SaveDynamicListSettings + SearchHistory ShowMultipleSelection СписокНомерКартинкиПодписанЗашифрован @@ -4271,7 +4272,7 @@ - ЕстьЭлектроннаяПодпись + ДоступнаПечатьСоШтампом 17 Boolean @@ -5216,7 +5217,9 @@ ВладелецФайла - + + AnyRef + true @@ -5251,6 +5254,12 @@ Boolean + + ТекущаяСтрока + + CatalogRef + + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html index 2e1899d57..04908a045 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Help/ru.html @@ -1,18 +1,18 @@ -

                  Предназначен для работы с файлами, присоединенными к объекту приложения.

                  -

                  Открывается по ссылке Файлы из карточки объекта приложения.

                  +

                  Предназначен для работы с файлами, присоединенными к объекту приложения.

                  +

                  Открывается по ссылке Файлы из карточки объекта приложения.

                  В списке выводится:

                  -
                  •  - наличие ЭП или шифрования. +
                    • - наличие ЭП или шифрования.
                    • -
                    • Наименование - полное имя файла. Значок рядом с наименованием указывает тип файла. При наличии в колонке выводится также и описание - подробные сведения о файле. +
                    • Наименование - полное имя файла. Значок рядом с наименованием указывает тип файла. При наличии в колонке выводится также и описание - подробные сведения о файле.
                    • Автор - пользователь, который добавил файл;
                    • -
                    • Дата изменения - дата изменения данных файла (местное время);

                    С помощью команды Еще - Дополнительно - Изменить форму можно добавить сведения:

                    +
                  • Дата изменения - дата изменения данных файла (местное время);

                  С помощью команды Еще - Дополнительно - Изменить форму можно добавить сведения:

                  • -
                    Дата создания - дата и время ввода файла в приложение;
                  • Редактирует - пользователь, который занял файл для редактирования и т.д. 

                  Добавление нового файла

                  +
                  Дата создания - дата и время ввода файла в приложение;
                • Редактирует - пользователь, который занял файл для редактирования и т.д.

                Добавление нового файла

                • -
                  Нажмите Добавить. Выберите способ ввода файла из выпадающего меню:
                  +
                  Нажмите Добавить. Выберите способ ввода файла из выпадающего меню:
              • +
              • После добавления файла автоматически открывается обновленный список файлов.
              • -
                Файл хранится в специальном каталоге. Для каждого объекта приложения формируется отдельная папка.
                +
                Файл хранится в специальном каталоге. Для каждого объекта приложения формируется отдельная папка.
              • -
                В некоторых списках приложения элементы, к которым присоединены файлы, обозначаются значком .

              Загрузка файлов

              +
              В некоторых списках приложения элементы, к которым присоединены файлы, обозначаются значком .

            Загрузка файлов

            • Нажмите Еще - Загрузить файлы, укажите путь к файлам на компьютере.

            Просмотр изображений в списке

            • -
              Включите флажок Еще - Предпросмотр, для того чтобы можно было просматривать файлы изображений прямо в списке в специальном окне.

            Просмотр карточки файла

            -
            • Нажмите Еще - Открыть карточку (нажмите клавишу F2), для того чтобы просмотреть свойства выделенного в списке файла, открыв окно Присоединенный файл, также можно воспользоваться соответствующей командой контекстного меню.

            Редактирование присоединенных файлов

            +
            Включите флажок Еще - Предпросмотр, для того чтобы можно было просматривать файлы изображений прямо в списке в специальном окне.

          Просмотр карточки файла

          +
          • Нажмите Еще - Открыть карточку (нажмите клавишу F2), для того чтобы просмотреть свойства выделенного в списке файла, открыв окно Присоединенный файл, также можно воспользоваться соответствующей командой контекстного меню.

          Редактирование присоединенных файлов

          • -
            В тонком клиенте редактирование файлов табличных документов (формата .mxl) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. здесь.
            +
            В тонком клиенте редактирование файлов табличных документов (формата .mxl) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. здесь.
          • -
            Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.
            +
            Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.
          • Команда Просмотреть открывает файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования.
            @@ -51,40 +51,40 @@
          • -
            Команда Редактировать открывает файл в режиме редактирования, а также производит захват файла в приложении. Захваченный файл будет недоступен для редактирования другим пользователям приложения и помечается в списке зеленым цветом.
            +
            Команда Редактировать открывает файл в режиме редактирования, а также производит захват файла в приложении. Захваченный файл будет недоступен для редактирования другим пользователям приложения и помечается в списке зеленым цветом.
          • -
            После окончания редактирования сохраните файл, закройте внешнее приложение. Нажмите  Сохранить и освободить файл в информационной базе, это действие освобождает файл, сохраняет его в приложении и снимает пометку занятости для редактирования.
            +
            После окончания редактирования сохраните файл, закройте внешнее приложение. Нажмите Сохранить и освободить файл в информационной базе, это действие освобождает файл, сохраняет его в приложении и снимает пометку занятости для редактирования.
          • -
            Команда Еще - Дополнительно - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в приложении, и снимает пометку занятости для редактирования. Команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

          Печать файла

          +
          Команда Еще - Дополнительно - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в приложении, и снимает пометку занятости для редактирования. Команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

          Печать файла

          Нажмите кнопку Печать, из выпадающего меню выберите нужное действие, например, Сразу на принтер. Возможны и другие действия.

          Отправка файла по электронной почте

          • Нажмите кнопку Отправить. Приложение формирует почтовое сообщение, заполните необходимые поля. Присоединенный файл автоматически будет приложением данного письма.

          Сохранение файла

          • -
            С помощью команды Еще - Дополнительно - Сохранить как можно сохранить файл в указанный каталог на компьютере.
            +
            С помощью команды Еще - Дополнительно - Сохранить как можно сохранить файл в указанный каталог на компьютере.
          • -
            Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.
            +
            Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.
          • -
            Соответствующей командой меню Еще - Дополнительно или контекстного меню по правой кнопке мыши можно Открыть каталог файла в Проводнике Windows.

          Обновление файла

          -
          • С помощью команды Еще - Дополнительно - Обновить из файла на компьютере можно обновить файл из оригинального файла на компьютере (из которого изначально был создан файл в приложении). +
            Соответствующей командой меню Еще - Дополнительно или контекстного меню по правой кнопке мыши можно Открыть каталог файла в Проводнике Windows.

          Обновление файла

          +
          • С помощью команды Еще - Дополнительно - Обновить из файла на компьютере можно обновить файл из оригинального файла на компьютере (из которого изначально был создан файл в приложении).
          • -
          • Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.

          Сравнение файлов

          +
        • Также можно воспользоваться соответствующей командой контекстного меню по правой кнопке мыши.
        • Сравнение файлов

          • Выберите в списке файлы для сравнения.
          • -
            Выполните команду Еще - Сравнить файлы. При первом сравнении файлов приложение предлагает выбрать, с помощью какого офисного приложения выполнить сравнение. После этого открываются файлы для сравнения в выбранном офисном приложении. Приложение для сравнения должна быть установлена на компьютере.

          Электронная подпись и шифрование

          -

          В выпадающем меню по кнопке  Электронная подпись и шифрование доступны команды для работы с электронной подписью файлов:

          -
          • Подписать - создает ЭП для файла. Перед созданием ЭП приложение предлагает выбрать сертификат ЭП из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком . +
            Выполните команду Еще - Сравнить файлы. При первом сравнении файлов приложение предлагает выбрать, с помощью какого офисного приложения выполнить сравнение. После этого открываются файлы для сравнения в выбранном офисном приложении. Приложение для сравнения должна быть установлена на компьютере.

          Электронная подпись и шифрование

          +

          В выпадающем меню по кнопке Электронная подпись и шифрование доступны команды для работы с электронной подписью файлов:

          +
          • Подписать - создает ЭП для файла. Перед созданием ЭП приложение предлагает выбрать сертификат ЭП из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком .
          • -
          • Сохранить вместе с электронной подписью - сохраняет подпись в файл на компьютере. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу. +
          • Сохранить вместе с электронной подписью - сохраняет подпись в файл на компьютере. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
          • -
          • Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл. +
          • Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
          • Зашифровать - по команде происходит шифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Зашифрованный файл в списках отображается со значком .
          • @@ -95,7 +95,7 @@
          • Предварительно, табличный документ должен быть подписан одной или несколькими электронными подписями в соответствии с тем, как это предусмотрено в документе.

          Служебные присоединенные файлы (только для администратора)

          • -
            В процессе работы с объектами приложение также может присоединять к ним служебные файлы, например, файлы, которые создаются автоматически при отправке сведений в банк и т.д. Они могут быть интересны разработчику, но пользователь их видеть и редактировать не должен.
            +
            В процессе работы с объектами приложение также может присоединять к ним служебные файлы, например, файлы, которые создаются автоматически при отправке сведений в банк и т.д. Они могут быть интересны разработчику, но пользователь их видеть и редактировать не должен.
          • Включите флажок меню Еще, для того чтобы Показывать служебные файлы. Флажок доступен только пользователям с ролью Полные права.
            diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl index 43044335f..249357a12 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныеФайлы/Module.bsl @@ -12,8 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ВладелецФайла = Параметры.ВладелецФайла; - - ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); + ТекущаяСсылка = Параметры.ТекущаяСтрока; СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка); Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла И Не Параметры.СкрыватьВладельца; Если СписокОткрытИзКарточкиФайла И ВладелецФайла = Неопределено Тогда @@ -48,7 +47,7 @@ Если Не ПустаяСтрока(Параметры.ЗаголовокФормы) Тогда Заголовок = Параметры.ЗаголовокФормы; - ИначеЕсли СписокОткрытИзКарточкиФайла Тогда + ИначеЕсли Не СписокОткрытИзКарточкиФайла Тогда Заголовок = Заголовок + ": " + ОбщегоНазначения.ПредметСтрокой(ВладелецФайла); КонецЕсли; @@ -128,8 +127,14 @@ ОбновитьПояснениеОблачногоСервиса(); Элементы.НастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов); - ЕстьЭлектроннаяПодпись = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись"); - Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись; + ДоступнаПечатьСоШтампом = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись"); + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + ДоступнаПечатьСоШтампом = МодульЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи() + И МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипСправочникаСФайлами); + КонецЕсли; + Элементы.ПечатьСоШтампом.Видимость = ДоступнаПечатьСоШтампом; Элементы.СравнитьФайлы.Видимость = Не ОбщегоНазначения.ЭтоLinuxКлиент() И Не ОбщегоНазначения.ЭтоВебКлиент(); Элементы.Отправить.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"); @@ -425,8 +430,7 @@ #Область ОбработчикиКомандФормы -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд файлов +#Область ОбработчикиКомандФайлов &НаКлиенте Процедура Добавить(Команда) @@ -706,7 +710,7 @@ ГруппаФайлов = ГруппаФайла(ТекущиеДанные.Ссылка); КонецЕсли; ПараметрыФормы.Вставить("ГруппаФайлов", ГруппаФайлов); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаИмпортаФайлов", ПараметрыФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаФайлов", ПараметрыФормы); КонецПроцедуры &НаКлиенте @@ -741,7 +745,7 @@ КонецЕсли; ПараметрыФормы.Вставить("ГруппаФайлов", ГруппаФайлов); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаИмпортаПапки", ПараметрыФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаПапки", ПараметрыФормы); КонецПроцедуры @@ -758,7 +762,7 @@ ПараметрыФормы.Вставить("ПапкаЭкспорта", ТекущиеДанные.Ссылка); ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов); ПараметрыФормы.Вставить("ИмяСправочникаХранилищаВерсийФайлов", ИмяСправочникаХранилищаВерсийФайлов); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаЭкспортаПапки", ПараметрыФормы); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеПапки", ПараметрыФормы); КонецПроцедуры @@ -799,8 +803,9 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд для поддержки ЭП и шифрования. +#КонецОбласти + +#Область ОбработчикиКомандДляПоддержкиЭПИШифрования &НаКлиенте Процедура Подписать(Команда) @@ -1005,8 +1010,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд для поддержки совместной работы с файлами. +#КонецОбласти + +#Область ОбработчикиКомандДляПоддержкиСовместнойРаботыСФайлами &НаКлиенте Процедура Редактировать(Команда) @@ -1050,7 +1056,7 @@ ПараметрыФормы.Вставить("ЕстьВерсииФайлов", ЕстьВерсииФайлов); ПараметрыФормы.Вставить("Редактирует", ДанныеСтроки.РедактируетПользователь); - ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект); + ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект); ИначеЕсли МассивФайлов.Количество() = 1 Тогда Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект); ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеСтроки.Ссылка, УникальныйИдентификатор); @@ -1125,6 +1131,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПослеУдаленияДанных(Результат, ДополнительныеПараметры) Экспорт @@ -1432,7 +1440,7 @@ КонецЕсли; Если ТекущиеДанные <> Неопределено Тогда - Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись + Элементы.ПечатьСоШтампом.Видимость = ДоступнаПечатьСоШтампом И (ТекущиеДанные.Расширение = "mxl") ИЛИ (ТекущиеДанные.Расширение = "docx") И ТекущиеДанные.ПодписанЭП; КонецЕсли; @@ -1898,15 +1906,13 @@ УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; ВидимостьПояснения = Истина; - АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( - СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); - Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Работа с файлами ведется в облачном сервисе %2.'"), - Строка(АдресПапкиВОблачномСервисе), Строка(СведенияОСинхронизации.УчетнаяЗаписьНаименование)); + СведенияОСинхронизации.АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; - Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, + ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Синхронизировано: %2'"), @@ -2036,36 +2042,29 @@ &НаКлиенте Функция ТекущиеДанные() - Если Не СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список) Тогда - Возврат Неопределено; - ИначеЕсли Элементы.Список.ТекущиеДанные.ВладелецФайла = ВладелецФайла Тогда - Возврат Элементы.Список.ТекущиеДанные; - Иначе + Если Не СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список) + Или Элементы.Список.ТекущиеДанные.ВладелецФайла <> ВладелецФайла Тогда Возврат Неопределено; КонецЕсли; + Возврат Элементы.Список.ТекущиеДанные; КонецФункции &НаСервереБезКонтекста Функция ГруппаФайла(Файл) - Если Файл.Метаданные().Иерархический Тогда - Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Файл, "Родитель"); - Иначе - Возврат Неопределено; - КонецЕсли; + Возврат ?(Файл.Метаданные().Иерархический, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Файл, "Родитель"), + Неопределено); КонецФункции &НаКлиенте Функция ВыделенныеСтроки() ВыделенныеСтроки = Новый Массив; - Для Каждого ВыделеннаяСтрока Из Элементы.Список.ВыделенныеСтроки Цикл Если ТипЗнч(ВыделеннаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); КонецЕсли; КонецЦикла; - - Возврат ВыделенныеСтроки + Возврат ВыделенныеСтроки; КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form index 18b9d21f0..e6c74d754 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Form.form @@ -3654,44 +3654,6 @@ true - - Инструкция - 186 - - <key>ru</key> - <value>Решение типовых проблем при работе с приложениями электронной подписи</value> - - true - true - - true - - - ИнструкцияРасширеннаяПодсказка - 188 - Label - true - true - - Left - - - - ИнструкцияКонтекстноеМеню - 187 - true - - Label - true - - - Click - ИнструкцияНажатие - - true - Left - - true true diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Help/ru.html index 8f3fe4746..cbe6be364 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Help/ru.html @@ -1,10 +1,10 @@

            Предназначена для просмотра сведений о присоединенном файле.

            -

            Открывается из списка присоединенных файлов с помощью команды Еще - Открыть карточку (клавиши F2).

            +

            Открывается из списка присоединенных файлов с помощью команды Еще - Открыть карточку (клавиши F2).

            Сведения о файле

            -
            • Наименование - полное имя файла. Автоматически заполняется приложением во время присоединения файла и создания карточки файла, можно изменить; +
              • Наименование - полное имя файла. Автоматически заполняется приложением во время присоединения файла и создания карточки файла, можно изменить;
              • -
              • Описание - напишите подробные сведения о файле; +
              • Описание - напишите подробные сведения о файле;
              • Автор - пользователь, который добавил файл в базу;
              • @@ -12,7 +12,7 @@
              • Отредактировал - последний пользователь, который отредактировал файл;
              • -
              • Изменен - дата изменения данных файла (местное время); +
              • Изменен - дата изменения данных файла (местное время);
              • Размещение - наименование и дата документа, к которому присоединен файл. Можно просмотреть документ;
                @@ -22,74 +22,74 @@
                Размер - размер данных файла;
              • -
                Расширение - расширение (формат) файла.

              Редактирование присоединенного файла

              +
              Расширение - расширение (формат) файла.

            Редактирование присоединенного файла

            • -
              В тонком клиенте редактирование файлов табличных документов (формата .mxl) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. здесь.
              +
              В тонком клиенте редактирование файлов табличных документов (формата .mxl) осуществляется во встроенной форме редактора табличных документов. В веб-клиенте необходимо загрузить приложение для редактирования этих файлов. Подробнее об особенностях редактирования табличных документов в веб-клиенте см. здесь.
            • -
              Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.
              +
              Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.
            • -
            • С помощью кнопки Просмотреть можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования. +
            • С помощью кнопки Просмотреть можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования.
            • -
              Команда Еще - Редактировать открывает файл в режиме редактирования, а также производит захват файла в приложении. Захваченный файл будет недоступен для редактирования другим пользователям приложения и помечается в списке зеленым цветом.
              +
              Команда Еще - Редактировать открывает файл в режиме редактирования, а также производит захват файла в приложении. Захваченный файл будет недоступен для редактирования другим пользователям приложения и помечается в списке зеленым цветом.
            • -
              Команда Еще - Закончить редактирование освобождает файл, сохраняет его в приложении и снимает пометку занятости для редактирования. После окончания редактирования сохраните файл, закройте внешнее приложение.
              +
              Команда Еще - Закончить редактирование освобождает файл, сохраняет его в приложении и снимает пометку занятости для редактирования. После окончания редактирования сохраните файл, закройте внешнее приложение.
            • -
              Команда Еще - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в приложении, и снимает пометку занятости для редактирования. Эта команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

            Сохранение файла

            +
            Команда Еще - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в приложении, и снимает пометку занятости для редактирования. Эта команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

          Сохранение файла

          • -
            С помощью команды Еще - Сохранить как можно сохранить файл в указанный каталог устройстве.
            +
            С помощью команды Еще - Сохранить как можно сохранить файл в указанный каталог устройстве.
          • -
            Соответствующей командой меню Еще можно Открыть каталог файла в Проводнике Windows;

          Обновление файла

          -
          • С помощью команды Еще - Обновить из файла на устройстве можно обновить файл из оригинального файла на устройстве (из которого изначально был создан файл в приложении).

          Электронная подпись и шифрование

          -

          При использовании электронной подписи становится доступным выпадающее меню Еще - Электронная подпись и шифрование, которое содержит команды для работы с электронной подписью файлов:

          +
          Соответствующей командой меню Еще можно Открыть каталог файла в Проводнике Windows;

          Обновление файла

          +
          • С помощью команды Еще - Обновить из файла на устройстве можно обновить файл из оригинального файла на устройстве (из которого изначально был создан файл в приложении).

          Электронная подпись и шифрование

          +

          При использовании электронной подписи становится доступным выпадающее меню Еще - Электронная подпись и шифрование, которое содержит команды для работы с электронной подписью файлов:

          • -
            Подписать - создает электронную подпись для файла. Перед созданием электронной подписи приложение предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком .
            +
            Подписать - создает электронную подпись для файла. Перед созданием электронной подписи приложение предлагает выбрать сертификат электронной подписи из имеющихся на компьютере. Выбор сертификата можно сделать и во время персональных настроек приложения. Подписанный файл становится недоступным для редактирования и отображается в списках со значком .
          • -
            Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
            +
            Добавить электронную подпись из файла - добавляет подпись к файлу. Команду можно использовать, например, если подпись (файл подписи) была получена позже, чем подписанный файл.
          • -
            Сохранить вместе с электронной подписью - сохраняет подпись в файл на устройстве. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
            +
            Сохранить вместе с электронной подписью - сохраняет подпись в файл на устройстве. Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.
          • Зашифровать - по команде происходит шифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Зашифрованный файл в списках отображается со значком .
          • -

            Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

          При использовании электронной подписи и шифрования становятся доступными вкладки:

          +

          Расшифровать - по команде происходит расшифровка файла. Для расшифровки нужно ввести пароль к закрытому ключу.

          При использовании электронной подписи и шифрования становятся доступными вкладки:

          Электронные подписи

          На вкладке размещаются сведения об электронной подписи файла:

          • Автор подписи - пользователь, который подписал файл;
          • Дата подписи - дата подписания файла;
          • -
          • Тип подписи - существует несколько типов подписей в зависимости от срока действия;
          • +
          • Тип подписи - существует несколько типов подписей в зависимости от срока действия;
          • Комментарий - напишите дополнительные сведения о подписи;
          • -
          • Статус, Дата проверки - истинность подписи и дата ее проверки.

          С помощью кнопок панели навигации можно:

          +
        • Статус, Дата проверки - истинность подписи и дата ее проверки.
        • С помощью кнопок панели навигации можно:

          • Подписать файл;
          • -
          • Открыть - открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись; +
          • Открыть - открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись;
          • -
          • Проверить, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке Статус у такой электронной подписи будет указано Не верна. +
          • Проверить, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке Статус у такой электронной подписи будет указано Не верна.
          • Проверить все - проверить все подписи;
          • -
          • Сохранить электронную подпись в файл на устройство; +
          • Сохранить электронную подпись в файл на устройство;
          • Удалить у файла электронную подпись.
          • -
          • Продлить действие - Если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает способы усовершенствования подписи. Для этого выберите нужный тип подписи из списка.

          Разрешено расшифровывать

          +
        • Продлить действие - Если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает способы усовершенствования подписи. Для этого выберите нужный тип подписи из списка.
        • Разрешено расшифровывать

          • На вкладке размещаются сведения о шифровании файла:
          • -
            В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей кнопки можно Открыть сертификат электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.

          См. также:

          +
          В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей кнопки можно Открыть сертификат электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.

          См. также:

          \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl index afe89a76e..a33de1aef 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ПрисоединенныйФайл/Module.bsl @@ -114,7 +114,7 @@ ОбновитьОбъект(); КонецЕсли; - // Локализация + // СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда Если ВРег(ИмяСобытия) = ВРег("ИзмененРезультатПроверкиМЧД") И Источник = ТекущаяСсылкаНаФайл() Тогда @@ -133,7 +133,7 @@ КонецЕсли; КонецЕсли; - // Конец Локализация + // Конец СтандартныеПодсистемы.МашиночитаемыеДоверенности Если ИмяСобытия = "Запись_Подпись" Тогда ПриПолученииПодписей(Неопределено, Неопределено); @@ -174,16 +174,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ИнструкцияНажатие(Элемент) - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда - МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент"); - МодульЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСертификатыШифрования @@ -200,8 +190,7 @@ #Область ОбработчикиКомандФормы -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд файлов +#Область ОбработчикиКомандФайлов &НаКлиенте Процедура ПоказатьВСписке(Команда) @@ -384,8 +373,9 @@ // Конец СтандартныеПодсистемы.Свойства -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд ЭП и шифрования. +#КонецОбласти + +#Область ОбработчикиКомандЭПИШифрования &НаКлиенте Процедура Подписать(Команда) @@ -717,8 +707,9 @@ КонецПроцедуры -/////////////////////////////////////////////////////////////////////////////////// -// Обработчики команд для поддержки совместной работы с файлами. +#КонецОбласти + +#Область ОбработчикиКомандДляПоддержкиСовместнойРаботыСФайлами &НаКлиенте Процедура Занять(Команда) @@ -876,6 +867,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -1477,8 +1470,8 @@ СертификатыИсточника = МодульЭлектроннаяПодпись.СертификатыШифрования(ЗначениеКопирования); МодульЭлектроннаяПодпись.ЗаписатьСертификатыШифрования(ЗаписываемыйОбъект, СертификатыИсточника); - УстановленныеПодписи = МодульЭлектроннаяПодпись.УстановленныеПодписи(ЗначениеКопирования); - МодульЭлектроннаяПодпись.ДобавитьПодпись(ЗаписываемыйОбъект, УстановленныеПодписи); + ПодписиОбъекта = МодульЭлектроннаяПодпись.ПодписиОбъекта(ЗначениеКопирования); + МодульЭлектроннаяПодпись.ДобавитьПодпись(ЗаписываемыйОбъект, ПодписиОбъекта); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -1640,15 +1633,13 @@ УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись; ВидимостьПояснения = Истина; - АдресПапкиВОблачномСервисе = РаботаСФайламиСлужебныйКлиентСервер.АдресВОблачномСервисе( - СведенияОСинхронизации.Сервис, СведенияОСинхронизации.Href); - Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Файл доступен только для просмотра, работа с ним ведется в облачном сервисе %2.'"), - АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); + СведенияОСинхронизации.АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование); Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован; - Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован, ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); + Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки = ?(СведенияОСинхронизации.Синхронизирован, + ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка); Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока( НСтр("ru = 'Синхронизирован: %2'"), @@ -1726,4 +1717,4 @@ РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор); КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Help/ru.html index b37ada1b7..79e3096dd 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактированиеТекстовогоФайла/Help/ru.html @@ -24,8 +24,8 @@ UL {

          Во встроенном редакторе текстовых файлов можно просмотреть и отредактировать файл, изменить кодировку, открыть дерево процессов и задач, в которых задействован файл, сравнить с исходным вариантом в процессе редактирования, при необходимости открыть при помощи стандартного приложения.

          -

          Открывается из списка Файлы по команде Открыть или Редактировать файл, в случае если в персональных настройках приложения имеется соответствующая настройка.

          -

          По умолчанию во встроенном редакторе открываются текстовые файлы с расширением TXT, INI, XML. Вы можете дополнить список расширений файлов в персональных настройках приложения. На вкладке Работа с файлами в таблице Настройки открытия файлов можно указать Расширения файлов для работы во встроенном текстовом редакторе (перечисляются через пробел). Также можно указать Способ открытия - Стандартным приложением или Во встроенном редакторе (установка по умолчанию).

          +

          Открывается из списка Файлы по команде Открыть или Редактировать файл, в случае если в персональных настройках приложения имеется соответствующая настройка.

          +

          По умолчанию во встроенном редакторе открываются текстовые файлы с расширением TXT, INI, XML. Вы можете дополнить список расширений файлов в персональных настройках приложения. На вкладке Работа с файлами в таблице Настройки открытия файлов можно указать Расширения файлов для работы во встроенном текстовом редакторе (перечисляются через пробел). Также можно указать Способ открытия - Стандартным приложением или Во встроенном редакторе (установка по умолчанию).

          @@ -37,18 +37,18 @@ UL {
        • -
          Принцип работы встроенного редактора текстовых файлов такой же, как и у внешнего приложения. Файл копируется на локальный компьютер и помечается как занятый в информационной базе. До тех пор пока вы не нажмете Еще - Закончить редактирование, созданная версия файла не будет доступна другим пользователям. 
          +
          Принцип работы встроенного редактора текстовых файлов такой же, как и у внешнего приложения. Файл копируется на локальный компьютер и помечается как занятый в информационной базе. До тех пор пока вы не нажмете Еще - Закончить редактирование, созданная версия файла не будет доступна другим пользователям.
        • -
        • После окончания редактирования файла нажмите Еще - Закончить редактирование, для того чтобы снять с него пометку занятости для редактирования. В зависимости от настроек команда также сохраняет версию файла или обновляет файл в хранилище. По умолчанию создается новая версия файла. Для изменения настройки при создании версии снимите соответствующий флажок.
        • Просмотр карточки файла

          -

          Сравнение версий

          -
          • Нажмите Еще - Показать отличия, для того чтобы произвести сравнение версий файлов. Если приложение для сравнения версий не была выбрана заранее в персональных настройках приложения (вкладка Работа с файлами), предлагается ее выбрать. Доступны Microsoft Word или OpenOffice.org Writer.

          Сохранение файла

          -
          • Нажмите Еще - Сохранить как, для того чтобы сохранить файл в указанный каталог на компьютере. 

          Открытие файла в стандартном приложении

          -
          • Нажмите Еще - Открыть стандартным приложением, для того чтобы перейти во внешнее приложение (Блокнот Windows) для редактирования файла. +
          • После окончания редактирования файла нажмите Еще - Закончить редактирование, для того чтобы снять с него пометку занятости для редактирования. В зависимости от настроек команда также сохраняет версию файла или обновляет файл в хранилище. По умолчанию создается новая версия файла. Для изменения настройки при создании версии снимите соответствующий флажок.

          Просмотр карточки файла

          +

          Сравнение версий

          +
          • Нажмите Еще - Показать отличия, для того чтобы произвести сравнение версий файлов. Если приложение для сравнения версий не была выбрана заранее в персональных настройках приложения (вкладка Работа с файлами), предлагается ее выбрать. Доступны Microsoft Word или OpenOffice.org Writer.

          Сохранение файла

          +
          • Нажмите Еще - Сохранить как, для того чтобы сохранить файл в указанный каталог на компьютере.

          Открытие файла в стандартном приложении

          +
          • Нажмите Еще - Открыть стандартным приложением, для того чтобы перейти во внешнее приложение (Блокнот Windows) для редактирования файла.
          • -
          • Если необходимо, чтобы текстовые файлы c определенными расширениями по умолчанию открывались во внешнем приложении, внесите изменения в персональные настройки приложения. Для этого: -
            • В персональных настройках приложения перейдите на вкладку Работа с файлами. +
            • Если необходимо, чтобы текстовые файлы c определенными расширениями по умолчанию открывались во внешнем приложении, внесите изменения в персональные настройки приложения. Для этого: +
              • В персональных настройках приложения перейдите на вкладку Работа с файлами.
              • -
              • Измените Настройки открытия файлов. В колонке Способ открытия выберите Стандартным приложением.

            Изменение кодировки текстового файла

            +
          • Измените Настройки открытия файлов. В колонке Способ открытия выберите Стандартным приложением.

          Изменение кодировки текстового файла

          • Текстовые файлы могут быть сохранены в разных кодировках. Основными кодировками для работы с текстовыми файлами на русском языке являются:
            • IBM866 (Кириллица DOS),
              @@ -58,6 +58,6 @@ UL {
            • Windows-1251 (Кириллица Windows.
          • -
          • Если после открытия текстового файла вместо текста виден набор бессмысленных знаков, выполните команду Еще - Изменить кодировку, выберите другую кодировку из списка.

          См. также:

          +
        • Если после открытия текстового файла вместо текста виден набор бессмысленных знаков, выполните команду Еще - Изменить кодировку, выберите другую кодировку из списка.
        • См. также:

          \ 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 7a25904a1..40421db7c 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Form.form @@ -1183,6 +1183,7 @@ ru Показывать занятые файлы при завершении работы + true true true @@ -1276,6 +1277,7 @@ UserCmds Auto + true true true @@ -1683,6 +1685,12 @@ DontUse Auto
          + + ЗавершениеРаботыПрограммы + + Boolean + + diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html index 87132af90..84fb76d44 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Help/ru.html @@ -1,19 +1,19 @@ -

          В этом списке отображаются только файлы, занятые Вами для редактирования. Редактировать файлы можно в списке файлов или в списке присоединенных файлов объектов приложения.

          +

          В этом списке отображаются только файлы, занятые Вами для редактирования. Редактировать файлы можно в списке файлов или в списке присоединенных файлов объектов приложения.

          Открывается по команде Редактируемые файлы.

          В списке выводятся сведения:

          • Файл - наименование файла;
          • -
          • Размещение - папка, в которой находится файл или объект, к которому присоединен файл; +
          • Размещение - папка, в которой находится файл или объект, к которому присоединен файл;
          • Размер (КБ).

          Доступные действия:

          -
          • Просмотреть - открыть файл для просмотра; +
            • Просмотреть - открыть файл для просмотра;
            • Закончить редактирование - сохраняет версию файла и освобождает файл для других пользователей;
            • Открыть карточку - открыть для просмотра сведения о файле.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl index 520f05937..d0f83f5b0 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РедактируемыеФайлы/Module.bsl @@ -14,7 +14,6 @@ НастроитьДинамическийСписок(); Пользователь = Пользователи.АвторизованныйПользователь(); - Список.Параметры.УстановитьЗначениеПараметра("Редактирует", Пользователь); ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебный.ПоказыватьКолонкуРазмер(); @@ -22,18 +21,12 @@ Элементы.СписокТекущаяВерсияРазмер.Видимость = Ложь; КонецЕсли; - ЗавершениеРаботыПрограммы = Неопределено; - Если Параметры.Свойство("ЗавершениеРаботыПрограммы", ЗавершениеРаботыПрограммы) Тогда - Ответ = ЗавершениеРаботыПрограммы; - Если Ответ = Истина Тогда - Элементы.ПоказыватьЗанятыеФайлыПриЗавершенииРаботы.Видимость = Ответ; - Элементы.ГруппаКоманднойПанели.Видимость = Ответ; - КонецЕсли; - КонецЕсли; + ЗавершениеРаботыПрограммы = Параметры.ЗавершениеРаботыПрограммы; + Элементы.ПоказыватьЗанятыеФайлыПриЗавершенииРаботы.Видимость = ЗавершениеРаботыПрограммы; + Элементы.ГруппаКоманднойПанели.Видимость = ЗавершениеРаботыПрограммы; ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "НастройкиПрограммы", - "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", Истина); + "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", Истина); КонецПроцедуры @@ -240,7 +233,7 @@ "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", ПоказыватьЗанятыеФайлыПриЗавершенииРаботы)); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); Закрыть(); КонецПроцедуры @@ -327,7 +320,7 @@ | |ОБЪЕДИНИТЬ ВСЕ |"; - ФрагментЗапроса = СтрЗаменить(ФрагментЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); // @query-part-1 @query-part-2 + ФрагментЗапроса = СтрЗаменить(ФрагментЗапроса, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ"); // @query-part-1, @query-part-2 КонецЕсли; ТекстЗапроса = ТекстЗапроса + ФрагментЗапроса; diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html index 32d1672fa..9ba4e0c20 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html @@ -1,7 +1,7 @@

            Предназначена для выбора варианта сохранения файла.

            Приложение указывает путь к файлу в рабочем каталоге на компьютере.

            -

            С помощью переключателя выберите вариант сохранения файла:

            -
            • На основе копии файла в рабочем каталоге на компьютере (рекомендуется). +

              С помощью переключателя выберите вариант сохранения файла:

              +
              • На основе копии файла в рабочем каталоге на компьютере (рекомендуется).
              • -
              • На основе файла в приложении.

              Нажмите Сохранить файл.

              \ 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 similarity index 98% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Form.form rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеВерсииФайла/Form.form index 2d7ad962d..c60f1f8bb 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеВерсииФайла/Form.form @@ -1,9 +1,5 @@ - - <key>ru</key> - <value>Сохранение версии файла</value> - ПолноеНаименование 10 @@ -83,7 +79,6 @@ true Left - true 5 true true @@ -102,7 +97,7 @@ 4 <key>ru</key> - <value>Создать новую версию (рекомендуется)</value> + <value>Сохранить предыдущую версию в истории изменений файла (рекомендуется)</value> true true @@ -292,6 +287,7 @@ LockOwner true + true true Vertical 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..6cd0b1ab4 --- /dev/null +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеВерсииФайла/Help/ru.html @@ -0,0 +1,19 @@ + +

            Предназначена для сохранения версии файла.

            +

            Выводится после завершения редактирования файла при выполнении команд Сохранить изменения или Закончить редактирование и создании версии файла в списках: Файлы, Присоединенные файлы, Редактируемые файлы, список занятых файлов при завершении работы.

            +

            Сохранение версии

            +
            • +
              Приложение выводит имя сохраняемого файла под заголовком окна.
              +
            • +
            • +
              В поле Комментарий к версии можно написать краткий комментарий, характеризующий внесенные Вами изменения в файл.
              +
            • +
            • +
              Если флажок Сохранить предыдущую версию в истории изменения файла не установлен, то новая версия запишется поверх предыдущей. Рекомендуется его установить, т.к. в случае порчи файла при редактировании можно вернуться к предыдущей корректной версии. Изменить настройку можно с помощью флажка Хранить версии в карточке файла или при загрузке файлов (папок).
              +
            • +
            • +
              Для подтверждения нажмите Сохранить.

            Просмотреть список версий файла можно по соответствующей команде на панели навигации карточки файла.

            +

            См. также:

            + \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеВерсииФайла/Module.bsl similarity index 100% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Module.bsl rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеВерсииФайла/Module.bsl diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Form.form similarity index 69% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Form.form index 19fbd4738..50dcdad67 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Form.form +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Form.form @@ -2,27 +2,126 @@ <key>ru</key> - <value>Сохранение папки</value> + <value>Сохранение папки на компьютер</value> - - ПапкаДляЭкспорта - 2 - - <key>ru</key> - <value>Укажите папку, в которую будет производиться сохранение</value> - + + ГруппаЭлементы + 44 + + КаталогДляСохранения + 2 + + <key>ru</key> + <value>Укажите каталог, в который необходимо сохранить файлы из папки</value> + + true + true + + true + + + КаталогДляСохранения + + Top + + КаталогДляСохраненияРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + КаталогДляСохраненияКонтекстноеМеню + 3 + true + + InputField + Enter + true + Left + true + Left + + + StartChoice + ПапкаДляЭкспортаНачалоВыбора + + + Opening + ПапкаДляЭкспортаОткрытие + + 40 + 50 + true + true + true + true + true + true + + Style.BorderColor + + Normal + + + + ТранслитерироватьИменаПапокИФайлов + 41 + + <key>ru</key> + <value>Транслитерировать имена папок и файлов</value> + + true + true + + true + + + ТранслитерироватьИменаПапокИФайлов + + Right + + ru + Сохраненные файлы и папки будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл "Документ.txt" будет сохранен с именем "Dokument.txt". + + Button + + ТранслитерироватьИменаПапокИФайловРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ТранслитерироватьИменаПапокИФайловКонтекстноеМеню + 42 + true + + CheckBoxField + Enter + true + Left + true + + true true true - - ПапкаДляЭкспорта - - Top + + <key>ru</key> + <value>Элементы</value> + - ПапкаДляЭкспортаРасширеннаяПодсказка - 36 + ГруппаЭлементыРасширеннаяПодсказка + 45 Label true true @@ -30,82 +129,17 @@ Left
            - - ПапкаДляЭкспортаКонтекстноеМеню - 3 - true - - InputField - Enter - true - Left - true - Left - - - StartChoice - ПапкаДляЭкспортаНачалоВыбора - - - Opening - ПапкаДляЭкспортаОткрытие - - 50 - true - true - true - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto
            - - ТранслитерироватьИменаПапокИФайлов - 41 - - <key>ru</key> - <value>Транслитерировать имена папок и файлов</value> - - true - true - - true - - - ТранслитерироватьИменаПапокИФайлов - - Right - - ru - Сохраненные файлы и папки будут иметь имена, содержащие только латинские буквы и цифры, для возможности переноса между различными операционными системами. Например, файл "Документ.txt" будет сохранен с именем "Dokument.txt". - - Button - - ТранслитерироватьИменаПапокИФайловРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - - ТранслитерироватьИменаПапокИФайловКонтекстноеМеню - 42 - true - - CheckBoxField - Enter - true - Left - true - - КоманднаяПанель 30 @@ -372,10 +406,10 @@ - ПапкаДляЭкспорта + КаталогДляСохранения <key>ru</key> - <value>Папка для экспорта</value> + <value>Укажите каталог, в который необходимо сохранить файлы из папки</value> 4 diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Help/ru.html similarity index 53% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Help/ru.html rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Help/ru.html index d2e463cab..d2a753ddc 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Help/ru.html @@ -1,9 +1,9 @@ -

            Позволяет скопировать выбранную папку с файлами из приложения на компьютер. При этом копируются только активные версии файлов.

            -

            Вызывается из списка файлов по команде контекстного меню папки по правой кнопке мыши Сохранить папку.

            -

            Сохранение папки

            +

            Позволяет скопировать выбранную папку с файлами из приложения на компьютер. При этом копируются только активные версии файлов.

            +

            Вызывается из списка файлов по команде контекстного меню папки по правой кнопке мыши Сохранить папку.

            +

            Сохранение папки

            • -
               Выберите на компьютере каталог,в который будет копироваться папка.
              +
              Выберите на компьютере каталог,в который будет копироваться папка.
            • Нажмите Сохранить папку.

            См. также:

            diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Module.bsl similarity index 96% rename from SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl rename to SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Module.bsl index 15676fee5..f76ad9fef 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаЭкспортаПапки/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СохранениеПапки/Module.bsl @@ -27,6 +27,10 @@ ИмяСправочникаХранилищаФайлов = Параметры.ИмяСправочникаХранилищаФайлов; ИмяСправочникаХранилищаВерсийФайлов = Параметры.ИмяСправочникаХранилищаВерсийФайлов; + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда + Заголовок = НСтр("ru = 'Сохранение папки на устройство'"); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -34,7 +38,7 @@ // Установка в качестве папки выгрузки "Мои Документы" // папку, используемую для выгрузки последний раз. - ПапкаДляЭкспорта = РаботаСФайламиСлужебныйКлиент.КаталогВыгрузки(); + КаталогДляСохранения = РаботаСФайламиСлужебныйКлиент.КаталогВыгрузки(); КонецПроцедуры @@ -61,7 +65,7 @@ ВыборФайла.МножественныйВыбор = Ложь; ВыборФайла.Каталог = Элемент.ТекстРедактирования; Если ВыборФайла.Выбрать() Тогда - ПапкаДляЭкспорта = ВыборФайла.Каталог + ПолучитьРазделительПути(); + КаталогДляСохранения = ВыборФайла.Каталог + ПолучитьРазделительПути(); КонецЕсли; КонецПроцедуры @@ -73,27 +77,27 @@ &НаКлиенте Процедура СохранитьПапку() - Если ПустаяСтрока(ПапкаДляЭкспорта) Или ПапкаДляЭкспорта = ПолучитьРазделительПути() Тогда + Если ПустаяСтрока(КаталогДляСохранения) Или КаталогДляСохранения = ПолучитьРазделительПути() Тогда ПоказатьПредупреждение(, НСтр("ru = 'Укажите папку.'")); Возврат; КонецЕсли; - Если НЕ СтрЗаканчиваетсяНа(ПапкаДляЭкспорта, ПолучитьРазделительПути()) Тогда - ПапкаДляЭкспорта = ПапкаДляЭкспорта + ПолучитьРазделительПути(); + Если НЕ СтрЗаканчиваетсяНа(КаталогДляСохранения, ПолучитьРазделительПути()) Тогда + КаталогДляСохранения = КаталогДляСохранения + ПолучитьРазделительПути(); КонецЕсли; // Проверим - каталог выгрузки существует? если нет - создадим. - КаталогВыгрузки = Новый Файл(ПапкаДляЭкспорта); + КаталогВыгрузки = Новый Файл(КаталогДляСохранения); Если Не КаталогВыгрузки.Существует() Тогда ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Папка ""%1"" не найдена. |Выберите другую папку.'"), - ПапкаДляЭкспорта)); + КаталогДляСохранения)); Возврат; КонецЕсли; - ПапкаДляЭкспортаПолная = ПапкаДляЭкспорта + Строка(ЧтоСохраняем) + ПолучитьРазделительПути(); + ПапкаДляЭкспортаПолная = КаталогДляСохранения + Строка(ЧтоСохраняем) + ПолучитьРазделительПути(); Если ТранслитерироватьИменаПапокИФайлов Тогда ПапкаДляЭкспортаПолная = СтроковыеФункцииКлиент.СтрокаЛатиницей(ПапкаДляЭкспортаПолная); КонецЕсли; @@ -110,10 +114,10 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось создать подпапку ""%1"" в папке ""%2"" по причине: + НСтр("ru = 'Не удалось создать подкаталог ""%1"" в каталоге ""%2"" по причине: |%3'"), Строка(ЧтоСохраняем), - ПапкаДляЭкспорта, + КаталогДляСохранения, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); КонецПопытки; Если ТекстОшибки <> "" Тогда @@ -133,14 +137,14 @@ &НаКлиенте Процедура СохранитьПапкуЗавершение(Результат, ПараметрыВыполнения) Экспорт Если Результат.Успех = Истина Тогда - СохраняемыйПуть = ПапкаДляЭкспорта; - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", СохраняемыйПуть); + СохраняемыйПуть = КаталогДляСохранения; + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", СохраняемыйПуть); ПоказатьОповещениеПользователя(НСтр("ru = 'Экспорт папки'"),, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Успешно завершен экспорт папки ""%1"" |в каталог на компьютере ""%2"".'"), - Строка(ЧтоСохраняем), Строка(ПапкаДляЭкспорта) ) ); + Строка(ЧтоСохраняем), Строка(КаталогДляСохранения) ) ); Закрыть(); КонецЕсли; @@ -572,12 +576,12 @@ Иначе Если Не ПараметрыВыполнения.ОбщиеПараметры.ДляВсехФайлов Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В папке ""%1"" + НСтр("ru = 'В каталоге ""%1"" |существует файл ""%2"" |размер существующего файла = %3 байт, дата изменения %4. |размер сохраняемого файла = %5 байт, дата изменения %6. | - |Заменить существующий файл файлом из хранилища файлов?'"), + |Заменить существующий файл файлом из приложения?'"), ПараметрыВыполнения.БазовыйКаталогСохраненияФайла, ПараметрыВыполнения.ИмяФайлаСРасширением, ПараметрыВыполнения.ФайлНаДиске.Размер(), diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Help/ru.html index c402a28a6..dfabb98f1 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Help/ru.html @@ -1,17 +1,17 @@

            В этом списке при завершении работы отображаются файлы, занятые Вами для редактирования.

            -

            Для того чтобы отменить открытие списка занятых файлов при завершении работы, выключите флажок Показывать занятые файлы при завершении работы. Также это можно сделать в персональных настройках приложения на закладке Работа с файлами.

            +

            Для того чтобы отменить открытие списка занятых файлов при завершении работы, выключите флажок Показывать занятые файлы при завершении работы. Также это можно сделать в персональных настройках приложения на закладке Работа с файлами.

            В списке выводятся сведения:

            • формат файла в виде значка;
            • наименование файла;
            • описание - подробные сведения о файле (из карточки файла).

            Доступные действия:

            -
            • Просмотреть - открывает файл внешним приложением для редактирования. Также можно открыть файл двойным щелчком мыши или с помощью клавиши Enter. +
              • Просмотреть - открывает файл внешним приложением для редактирования. Также можно открыть файл двойным щелчком мыши или с помощью клавиши Enter.
              • Закончить редактирование - сохраняет версию файла и освобождает файл для других пользователей.
              • Открыть карточку - открыть для просмотра сведения о файле.

              См. также:

              - \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl index 3767d73ce..0374a47ac 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/СписокЗанятыхСВопросом/Module.bsl @@ -186,7 +186,7 @@ "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", ПоказыватьЗанятыеФайлыПриЗавершенииРаботы)); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур); + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур); Закрыть(КодВозвратаДиалога.Да); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html deleted file mode 100644 index 44784cbd2..000000000 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаВозвратаФайла/Help/ru.html +++ /dev/null @@ -1,19 +0,0 @@ - -

              Предназначена для сохранения версии файла.

              -

              Выводится после завершения редактирования файла при выполнении команд Сохранить изменения или Закончить редактирование и создании версии файла в списках: Файлы, Присоединенные файлы, Редактируемые файлы, список занятых файлов при завершении работы.

              -

              Сохранение версии

              -
              • -
                Приложение выводит имя сохраняемого файла под заголовком окна.
                -
              • -
              • -
                В поле Комментарий к версии можно написать краткий комментарий, характеризующий внесенные Вами изменения в файл. 
                -
              • -
              • -
                Если флажок Создать новую версию не установлен, то новая версия запишется поверх предыдущей. Рекомендуется создавать версии, т.к. в случае порчи файла при редактировании можно вернуться к предыдущей корректной версии. По умолчанию флажок включен. Изменить настройку можно с помощью флажка Хранить версии в карточке файла или при загрузке файлов (папок).
                -
              • -
              • -
                Для подтверждения нажмите Сохранить.

              Просмотреть список версий файла можно по соответствующей команде на панели навигации карточки файла.

              -

              См. также:

              - \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Help/ru.html deleted file mode 100644 index 21a9fe6f7..000000000 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаИмпортаПапки/Help/ru.html +++ /dev/null @@ -1,30 +0,0 @@ - -

              Предназначена для загрузки папки с компьютера.

              -

              Открывается из списка файлов по команде Загрузить папку контекстного меню по правой кнопке мыши после выбора папки в открывшемся Проводнике Windows. В проводнике укажите путь к папке, нажмите Выбор папки.

              -

              Заполните необходимые для загрузки папки сведения:

              -
              • -
                Поле Каталог на устройстве заполняется автоматически, при необходимости можно  выбрать другую папку.
              • -
                В поле Размещение автоматически проставляется выбранная папка в списке файлов, в которую будет загружена папка с устройства на компьютере. При необходимости можно  выбрать другую папку;
                -
              • -
              • -
                Для экономии места на устройстве включите флажок Удалять файлы после добавления (по умолчанию выключен);
                -
              • -
              • -
                Напишите Описание для создаваемых файлов;
                -
              • -
              • -
                Включите флажок, для того чтобы Хранить версии (рекомендуется, по умолчанию флажок включен);
                -
              • -
              • -
                Для текстовых файлов можно Выбрать кодировку из списка.
                -
              • -
              • -
                Для подтверждения нажмите Загрузить папку. Если выбранная для загрузки папка пуста, то приложение выводит сообщение "Нет файлов для добавления".
              Также можно использовать перетаскивание мышью для загрузки папки с устройства - просто перетащите папку мышкой из Проводника Windows в нужную папку списка файлов приложения.
              -

              См. также:

              - \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Help/ru.html b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Help/ru.html index e508de53d..0b983a24a 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Help/ru.html +++ b/SSL/src/DataProcessors/РаботаСФайлами/Forms/ФормаОтчета/Help/ru.html @@ -1,6 +1,6 @@ -

              Отчет выводится после проведения операций с файлами, например, загрузки файлов или папок в список файлов (список присоединенных файлов) в случае возникновения ошибок.

              -

              В отчете выводится список файлов, который включает:

              -
              • Полный путь к файлам, которые не удалось загрузить. +

                Отчет выводится после проведения операций с файлами, например, загрузки файлов или папок в список файлов (список присоединенных файлов) в случае возникновения ошибок.

                +

                В отчете выводится список файлов, который включает:

                +
                • Полный путь к файлам, которые не удалось загрузить.
                • Суть ошибки, например, "Размер файла <"Наименование">(2 Мб) превышает максимально допустимый размер файла (1Мб)".

                См. также:

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo index adb18d0e1..98bf72dc5 100644 --- a/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/DataProcessors/РаботаСФайлами/РаботаСФайлами.mdo @@ -200,10 +200,10 @@ MobileDevice - ФормаВыбораРежимаОткрытия + КакОткрытьФайл ru - Форма выбора режима открытия + Как открыть файл true @@ -215,12 +215,11 @@ MobileDevice - ФормаВозвратаФайла + СохранениеВерсииФайла ru - Форма возврата файла + Сохранение версии файла - Комментарий к версии true @@ -240,10 +239,10 @@ MobileDevice - ФормаИмпортаФайлов + ЗагрузкаФайлов ru - Форма импорта файлов + Загрузка файлов @@ -254,19 +253,19 @@ MobileDevice - ФормаЗавершениеРедактирования + ЗавершениеРедактирования ru - Форма завершение редактирования + Завершение редактирования PersonalComputer MobileDevice - ФормаИмпортаПапки + ЗагрузкаПапки ru - Форма импорта папки + Загрузка папки true @@ -278,10 +277,10 @@ MobileDevice - ФормаЭкспортаПапки + СохранениеПапки ru - Форма экспорта папки + Сохранение папки diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 4d059dc1d..ae531d0b6 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -2595,6 +2595,38 @@ Normal + + СкопироватьАдресВБуферОбмена + 593 + + <key>ru</key> + <value>Скопировать адрес в буфер обмена</value> + + true + true + + true + + + СкопироватьАдресВБуферОбменаРасширеннаяПодсказка + 594 + Label + true + true + + Left + + + UsualButton + Form.Command.СкопироватьАдресВБуферОбмена + Normal + Auto + true + true + UserCmds + Auto + WhenActive + true true @@ -2616,7 +2648,7 @@ UsualGroup - Vertical + AlwaysHorizontal WeakSeparation true Auto @@ -3063,8 +3095,8 @@ - НужнаПомощь - 551 + ГруппаТребуетсяПомощь + 561 ДекорацияНужнаПомощь 553 @@ -3072,9 +3104,7 @@ ru Адресные сведения предоставляются <link https://fias.nalog.ru/>Государственным адресным реестром</> (ГАР). Ее оператор - ФНС России. -В случае если не удалось подобрать адрес или введенный адрес не проходит проверку, следует проверить его наличие на сайте ФНС России и обратиться в <link https://www.nalog.ru/rn77/service/service_feedback/?service=22>службу поддержки online-сервисов</> ФНС России. - -В иных случаях обратитесь в службу поддержки фирмы "1С", предоставив <link e1cib/data/РегистрСведений.АдресныеОбъекты.Форма.СведенияОбАдресномКлассификаторе>технические сведения о возникшем затруднении</>. +В случае если не удалось подобрать адрес или введенный адрес не проходит проверку, следует проверить его наличие на сайте ФНС России и обратиться в <link https://www.nalog.ru/rn77/service/service_feedback/?service=22>службу поддержки online-сервисов</> ФНС России. true true @@ -3099,10 +3129,109 @@ true Label true + + Left + + + + ГруппаОбращенияВТехническуюПоддержку + 585 + + ОписаниеОбращенияВПоддержку + 587 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 589 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 588 + true + + Label + true + + + URLProcessing + ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 586 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СведенияОбАдресе + 590 + + <key>ru</key> + <value>Дополнительно возможно просмотреть <link СведенияОбАдресе>сведения об адресе</>. </value> + + true + true + + true + + + СведенияОбАдресеРасширеннаяПодсказка + 592 + Label + true + true + + Left + + + + СведенияОбАдресеКонтекстноеМеню + 591 + true + + true + Label + true URLProcessing - ДекорацияНужнаПомощьОбработкаНавигационнойСсылки + СведенияОбАдресеОбработкаНавигационнойСсылки Left @@ -3114,13 +3243,12 @@ <key>ru</key> - <value>Нужна помощь?</value> + <value>Требуется помощь?</value> - Right Center - НужнаПомощьРасширеннаяПодсказка - 552 + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 562 Label true true @@ -3130,8 +3258,9 @@ UsualGroup - AlwaysHorizontal + Vertical PopUp + WeakSeparation true true auto @@ -4685,6 +4814,32 @@ Auto Auto + + СкопироватьАдресВБуферОбмена + + <key>ru</key> + <value>Скопировать адрес в буфер обмена</value> + + 30 + + ru + Скопировать адрес в буфер обмена + + + true + + + CommonPicture.СкопироватьВБуферОбмена + + + + СкопироватьАдресВБуферОбмена + + + Picture + Auto + Auto + ВидКонтактнойИнформации diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index be5359b6b..10435346c 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -3,7 +3,7 @@ }

                Предназначена для ввода адреса по шаблону. При заполнении возможно использование адресного классификатора.

                -

                Открывается по кнопке  Выбрать из поля Адрес в элементах списков.

                +

                Открывается по кнопке Выбрать из поля Адрес в элементах списков.

                Автоподбор российского адреса

                • Предусмотрен автоподбор всего адреса при вводе (только при использовании веб-сервиса. Наберите в поле Город, населенный пункт поисковое слово или его часть.
                • @@ -11,44 +11,44 @@
                  • по муниципальному делению - стандартный цвет текста;
                  • по административно-территориальному делению - серый цвет.

                Ввод адреса

                -
                • В поле Страна выберите страну адреса. Редактирование адресов за пределами Евразийского экономического союза (ЕАЭС) производится в общем поле, без учета частей адреса. Страна "Россия" выбрана приложением по умолчанию, при этом поле может быть недоступным в зависимости от настроек. Для того чтобы изменить страну, нажмите  Выбрать. Выбор осуществляется из списка Классификатор стран мира (ОКСМ). +
                  • В поле Страна выберите страну адреса. Редактирование адресов за пределами Евразийского экономического союза (ЕАЭС) производится в общем поле, без учета частей адреса. Страна "Россия" выбрана приложением по умолчанию, при этом поле может быть недоступным в зависимости от настроек. Для того чтобы изменить страну, нажмите Выбрать. Выбор осуществляется из списка Классификатор стран мира (ОКСМ).
                  • -
                  • Поле Индекс предназначено для ввода почтового индекса, соответствующего данному адресу. Если адрес найден в адресном классификаторе, то индекс может быть проставлен автоматически. Также по индексу, если адресный классификатор по соответствующему региону загружен, можно заполнить адрес. +
                  • Поле Индекс предназначено для ввода почтового индекса, соответствующего данному адресу. Если адрес найден в адресном классификаторе, то индекс может быть проставлен автоматически. Также по индексу, если адресный классификатор по соответствующему региону загружен, можно заполнить адрес.
                  • -
                  • Поле Город, населенный пункт предназначено для ввода региона, города и т.п. При необходимости можно ввести части адреса детально, нажав  Выбрать. В открывшемся шаблоне введите данные населенного пункта. +
                  • Поле Город, населенный пункт предназначено для ввода региона, города и т.п. При необходимости можно ввести части адреса детально, нажав Выбрать. В открывшемся шаблоне введите данные населенного пункта.
                  • -
                  • Поле Улица предназначено для выбора (нажмите кнопку  Выбрать, в списке улиц найдите нужную) или ввода улицы адреса. +
                  • Поле Улица предназначено для выбора (нажмите кнопку Выбрать, в списке улиц найдите нужную) или ввода улицы адреса.
                  • -
                  • Поля Дом, Корпус, Квартира позволяют ввести соответствующие части адреса. Можно изменить эти варианты, выбрав дополнительные значения из выпадающего списка. +
                  • Поля Дом, Корпус, Квартира позволяют ввести соответствующие части адреса. Можно изменить эти варианты, выбрав дополнительные значения из выпадающего списка.
                  • -
                  • Также можно  Добавить дополнительные поля для ввода других предопределенных частей адреса, таких как Строение, Литера, Сооружение, Участок, Офис, Бокс, Помещение, Комната, А/я. +
                  • Также можно Добавить дополнительные поля для ввода других предопределенных частей адреса, таких как Строение, Литера, Сооружение, Участок, Офис, Бокс, Помещение, Комната, А/я.
                  • -
                  • Для ввода номера дома нажмите кнопку , в окне Выбор дома выводится список всех возможных домов и строений для введенного адреса. Дополнительные части адреса, например, корпус, также выбираются из списка. +
                  • Для ввода номера дома нажмите кнопку , в окне Выбор дома выводится список всех возможных домов и строений для введенного адреса. Дополнительные части адреса, например, корпус, также выбираются из списка.
                  • -
                  • Поле Представление адреса при заполнении адреса по шаблону недоступно, заполняется приложением автоматически по мере заполнения полей адреса.

                  Примеры заполнения адреса

                  +
                • Поле Представление адреса при заполнении адреса по шаблону недоступно, заполняется приложением автоматически по мере заполнения полей адреса.

                Примеры заполнения адреса

                • Для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345" необходимо: -
                  • В поле Город, населенный пункт выбрать "Санкт-Петербург г". +
                    • В поле Город, населенный пункт выбрать "Санкт-Петербург г".
                    • -
                    • В поле Улица выбрать "Пискаревский пр-кт". +
                    • В поле Улица выбрать "Пискаревский пр-кт".
                    • -
                    • В поле Дом написать "2". +
                    • В поле Дом написать "2".
                    • -
                    • В поле Корпус написать "2". +
                    • В поле Корпус написать "2".
                    • -
                    • Для ввода литеры необходимо  Добавить поле, выбрать из выпадающего списка значение Литера и проставить в поле значение "Щ". +
                    • Для ввода литеры необходимо Добавить поле, выбрать из выпадающего списка значение Литера и проставить в поле значение "Щ".
                    • -
                    • Вместо поля Квартира выбрать из выпадающего списка поле Офис и ввести значение "12345".
                  • +
                  • Вместо поля Квартира выбрать из выпадающего списка поле Офис и ввести значение "12345".
                • Для ввода адреса, содержащего другие значения полей, например "Москва, улица Адмирала Лазарева, домовладение 89, корпус 16, строение 1" необходимо: -
                  • В поле Город, населенный пункт выбрать "Москва г". +
                    • В поле Город, населенный пункт выбрать "Москва г".
                    • -
                    • В поле Улица выбрать "Адмирала Лазарева ул". +
                    • В поле Улица выбрать "Адмирала Лазарева ул".
                    • -
                    • Вместо поля Дом выбрать из выпадающего списка поле Домовладение, введите значение "89". +
                    • Вместо поля Дом выбрать из выпадающего списка поле Домовладение, введите значение "89".
                    • -
                    • В поле Корпус написать "16". +
                    • В поле Корпус написать "16".
                    • -
                    • Нажмите  Добавить, выберите из выпадающего списка поле Строение, проставьте в поле "1".

                  Проверка заполнения адреса

                  -

                  Нажмите Проверить заполнение, для того чтобы проанализировать корректность заполнения адреса. Приложение производит проверку:

                  +
                • Нажмите Добавить, выберите из выпадающего списка поле Строение, проставьте в поле "1".

              Проверка заполнения адреса

              +

              Нажмите Проверить заполнение, для того чтобы проанализировать корректность заполнения адреса. Приложение производит проверку:

              • проверка актуальности версии адресного классификатора с предложением обновить данные;
              • на заполненность адреса; @@ -57,32 +57,32 @@
              • длины наименований реквизитов адреса;
              • -
              • на соответствие классификатору. В клиент-серверной базе проверка адреса на соответствие классификатору производится на сервере. После проверки правильности заполнения адреса приложение выдает сообщение "Адрес введен корректно" или список ошибок. Проверка правильности невозможна для иностранных адресов, они не проверяются. Также команда становится недоступной, если адрес введен в свободной форме. +
              • на соответствие классификатору. В клиент-серверной базе проверка адреса на соответствие классификатору производится на сервере. После проверки правильности заполнения адреса приложение выдает сообщение "Адрес введен корректно" или список ошибок. Проверка правильности невозможна для иностранных адресов, они не проверяются. Также команда становится недоступной, если адрес введен в свободной форме.
              • -
              • Если адрес некорректный, то в приложении производится перебор вариантов нумерации (не дом, а владение; наличие корпусов, строений; буквы в номере дома). +
              • Если адрес некорректный, то в приложении производится перебор вариантов нумерации (не дом, а владение; наличие корпусов, строений; буквы в номере дома).
              • Производится поиск в исторических данных адреса, например, улица была переименована.

              История изменений

              • В некоторых списках можно просмотреть историю изменения адреса с помощью команды Еще - История изменений.

              Адрес на Яндекс.Картах, Адрес на Google Maps

              • -
                С помощью этих команд любой адрес, введенный в приложении, можно посмотреть на картах.

              Выбор вида территориального деления

              +
              С помощью этих команд любой адрес, введенный в приложении, можно посмотреть на картах.

            Выбор вида территориального деления

            • -
              Перед заполнением адреса с помощью флажка можно выбрать:
              +
              Перед заполнением адреса с помощью флажка можно выбрать:
              • Муниципальное деление;
              • Административно-территориальное деление.

            Ввод адреса в свободной форме

            -
            • Включите флажок Адрес в свободной форме меню Еще, для того чтобы при вводе адреса по шаблону ввести заведомо некорректный адрес (например, с товаром на накладной неправильный адрес поставщика, его надо временно зафиксировать для печати, но в дальнейшем его использовать нельзя). Такой адрес используется для хранения, поэтому можно рекомендовать использовать его только для единичных случаев. +
              • Включите флажок Адрес в свободной форме меню Еще, для того чтобы при вводе адреса по шаблону ввести заведомо некорректный адрес (например, с товаром на накладной неправильный адрес поставщика, его надо временно зафиксировать для печати, но в дальнейшем его использовать нельзя). Такой адрес используется для хранения, поэтому можно рекомендовать использовать его только для единичных случаев.
              • -
              • Напишите адрес, заполнив поля адреса. Также адрес можно ввести в поле Представление адреса. Проверка заполнения адреса в данном случае отключена. +
              • Напишите адрес, заполнив поля адреса. Также адрес можно ввести в поле Представление адреса. Проверка заполнения адреса в данном случае отключена.
              • Для подтверждения адреса нажмите ОК. Приложением будет зафиксировано, что адрес заполнен в свободной форме и на просмотр адрес будет выводиться в таком виде.

              Заполнение адреса по почтовому индексу

              -
              • Если известен индекс адреса и адресный классификатор по соответствующему региону загружен, то с помощью команды Еще - Заполнить по почтовому индексу имеется возможность по индексу найти адрес. Для выбора выводятся только те адреса, которые соответствуют введенному индексу. Выберите нужную часть адреса, дозаполните оставшиеся поля. +
                • Если известен индекс адреса и адресный классификатор по соответствующему региону загружен, то с помощью команды Еще - Заполнить по почтовому индексу имеется возможность по индексу найти адрес. Для выбора выводятся только те адреса, которые соответствуют введенному индексу. Выберите нужную часть адреса, дозаполните оставшиеся поля.
                • -
                • Если указан почтовый индекс, сведения о котором отсутствует в приложении, то в сообщении будет предложено загрузить адресные сведения для соответствующего региона с сайта фирмы "1С".

                Очистка адреса

                -
                • С помощью команды меню Еще - Очистить адрес можно стереть неправильно введенный адрес.

                Загрузка классификатора

                -
                • Выполните команду Еще - Загрузить классификатор. После проведения обновления адресного классификатора по выбранному региону можно продолжить редактирование адреса. При заполнении некоторых полей приложение автоматически предлагает загрузить классификатор.

                См. также:

                +
              • Если указан почтовый индекс, сведения о котором отсутствует в приложении, то в сообщении будет предложено загрузить адресные сведения для соответствующего региона с сайта фирмы "1С".

              Очистка адреса

              +
              • С помощью команды меню Еще - Очистить адрес можно стереть неправильно введенный адрес.

              Загрузка классификатора

              +
              • Выполните команду Еще - Загрузить классификатор. После проведения обновления адресного классификатора по выбранному региону можно продолжить редактирование адреса. При заполнении некоторых полей приложение автоматически предлагает загрузить классификатор.

              См. также:

              • Виды контактной информации;
              • Ввод контактной информации; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index 083713d53..1488db2e4 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -141,7 +141,7 @@ Элементы.ЗаполнитьПоПочтовомуИндексу.Видимость = Ложь; Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; Элементы.ГруппаИнформация.Видимость = Ложь; - Элементы.НужнаПомощь.Видимость = Ложь; + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес; КонецЕсли; @@ -158,9 +158,18 @@ ОпределитьОтображениеЭлементовИЦветов(Параметры.ТолькоПросмотр); - Если Не ЕстьПравоЗагружатьКлассификатор И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru = 'Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Если ЕстьПравоЗагружатьКлассификатор Тогда + ТексСообщения = СтроковыеФункции.ФорматированнаяСтрока( + НСтр("ru = 'Для автоподбора и проверки адресов загрузите адресные сведения. Загрузить'")); + Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = ТексСообщения; + Иначе + Элементы.ИнформацияОЗагрузкеАдресныеСведений.Заголовок = НСтр("ru = 'Для автоподбора и проверки адресов обратитесь к администратору для загрузки адресных сведений.'"); + Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; + КонецЕсли; + Иначе Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; + Элементы.СведенияОбАдресе.Видимость = Ложь; КонецЕсли; УстановитьКлючИспользованияФормы(); @@ -177,6 +186,19 @@ СодержитУлицы = РаботаСАдресами.АдресСодержитУлицы(ИдентификаторНаселенногоПункта, НаселенныйПунктДетально.AddressType); Элементы.Улица.ПодсказкаВвода = УстановитьПодсказкуВводаДляУлиц(СодержитУлицы); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаОбращенияВТехническуюПоддержку.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаКлиенте @@ -608,7 +630,6 @@ КонецПроцедуры - &НаКлиенте Процедура НаселенныйПунктОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -877,7 +898,6 @@ КонецПроцедуры - &НаКлиенте Процедура ИнформацияОЗагрузкеАдресныеСведенийОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) @@ -893,24 +913,6 @@ КонецПроцедуры - -&НаКлиенте -Процедура ДекорацияНужнаПомощьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - - Если СтрНайти(НавигационнаяСсылкаФорматированнойСтроки, ".СведенияОбАдресномКлассификаторе") > 0 - И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - СтандартнаяОбработка = Ложь; - - ПараметрыОткрытия = Новый Структура(); - ПараметрыОткрытия.Вставить("Адрес", ПредставлениеАдреса); - ПараметрыОткрытия.Вставить("СведенияОбАдресе", СведенияОбАдресе(НаселенныйПунктДетально)); - - МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); - МодульАдресныйКлассификаторКлиент .ОткрытьСведенияОбАдресномКлассификаторе(ПараметрыОткрытия); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ДомНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПоказатьСписокДомовИлиЗемельныхУчастков(Ложь); @@ -921,6 +923,84 @@ ПоказатьСписокДомовИлиЗемельныхУчастков(Истина); КонецПроцедуры +&НаКлиенте +Процедура ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + СтандартнаяОбработка = Ложь; + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + Если НавигационнаяСсылка = "ВопросВПоддержку" Тогда + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.Тема = РаботаСАдресамиСлужебныйКлиент.ТемаОбращенияВПоддержку(); + ПараметрыОбращения.ТехнологическаяИнформация = ИнформацияДляПоддержки( + ПредставлениеАдреса, + НаселенныйПунктДетально); + + ОписаниеОшибок = Новый Массив; + ОшибкиЗаполнения = СписокОшибокЗаполнения(НаселенныйПунктДетально, ВидКонтактнойИнформации, Ложь, Ложь); + + Для Каждого ОшибкаЗаполнения Из ОшибкиЗаполнения Цикл + ОписаниеОшибок.Добавить(ОшибкаЗаполнения.ТекстОшибки); + КонецЦикла; + + ОписаниеОшибки = СтрСоединить(ОписаниеОшибок, "; "); + + ПараметрыОбращения.Сообщение = РаботаСАдресамиСлужебныйКлиент.ТекстОбращенияВПоддержку( + ПредставлениеАдреса, + ОписаниеОшибки); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + ИначеЕсли НавигационнаяСсылка = "ИнформацияДляОтправкиВПоддержку" Тогда + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = ИнформацияДляПоддержки( + ПредставлениеАдреса, + НаселенныйПунктДетально); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + Иначе + + Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'"); + ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке); + + КонецЕсли; + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура СведенияОбАдресеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + Если НавигационнаяСсылка = "СведенияОбАдресе" + И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + + СтандартнаяОбработка = Ложь; + + ПараметрыОткрытия = Новый Структура(); + ПараметрыОткрытия.Вставить("Адрес", ПредставлениеАдреса); + ПараметрыОткрытия.Вставить("СведенияОбАдресе", СведенияОбАдресе(НаселенныйПунктДетально)); + + МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); + МодульАдресныйКлассификаторКлиент.ОткрытьСведенияОбАдресномКлассификаторе(ПараметрыОткрытия); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -995,8 +1075,6 @@ КонецПроцедуры - - &НаКлиенте Процедура АвторизацияНаСайтеПоддержкиПользователей(Команда) @@ -1041,7 +1119,6 @@ &НаКлиенте Процедура АдресныйКлассификаторУстарел(Команда) - СообщениеОПроверкеАдреса = НСтр("ru = 'Адресные сведения, загруженные в приложение, устарели. |Рекомендуется выполнить обновление адресного классификатор, чтобы проверка адреса выполнялась корректно.'"); Если ЕстьПравоЗагружатьКлассификатор Тогда @@ -1110,10 +1187,46 @@ КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьАдресВБуферОбмена(Команда) + УправлениеКонтактнойИнформациейКлиент.ПоместитьТекстВБуфераОбмена(ПредставлениеАдреса); +КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаСервереБезКонтекста +Функция ИнформацияДляПоддержки(ПредставлениеАдреса, НаселенныйПунктДетально) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + СведенияОбАдресе = СведенияОбАдресе(НаселенныйПунктДетально); + + ИнформацияДляПоддержки = МодульАдресныйКлассификаторСлужебный.ИнформацияДляПоддержки( + ПредставлениеАдреса, + СведенияОбАдресе); + + Иначе + ИнформацияДляПоддержки = СтандартныеПодсистемыСервер.ИнформацияДляПоддержки(); + КонецЕсли; + + Возврат ИнформацияДляПоддержки + +КонецФункции + +&НаСервереБезКонтекста +Функция СведенияОбАдресе(НаселенныйПунктДетально) + + АдресВJSON = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально); + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("КодыАдреса", Истина); + + Возврат РаботаСАдресами.СведенияОбАдресе(АдресВJSON, ДополнительныеПараметры); + +КонецФункции + &НаСервереБезКонтекста Функция АдресСИсторией(ЗначенияПолей) @@ -1268,7 +1381,6 @@ КонецФункции - &НаКлиенте Процедура ФормаВыбораУлицПоИндексу(Знач Текст) @@ -1438,7 +1550,6 @@ КонецФункции - &НаКлиентеНаСервереБезКонтекста Процедура ПереопределитьТипаАдресаПоСтране(Страна, НаселенныйПунктДетально, СведенияОСтране, МеждународныйФорматАдреса) @@ -1979,6 +2090,7 @@ ДанныеВыбора = НаселенныйПунктДетально; КонецЕсли; + КонтактнаяИнформация = ""; Если ТипЗнч(ДанныеВыбора) = Тип("Структура") Тогда Если ПустаяСтрока(ДанныеВыбора.countryCode) Тогда СведенияОСтране = УправлениеКонтактнойИнформацией.ДанныеСтраныМира(Неопределено, ДанныеВыбора.Country); @@ -1988,10 +2100,10 @@ КонецЕсли; Значение = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(ДанныеВыбора); - КонтактнаяИнформация = УправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзJSONВXML(ДанныеВыбора, Перечисления.ТипыКонтактнойИнформации.Адрес); + УправлениеКонтактнойИнформациейЛокализация.ПриКонвертированииКонтактнуюИнформациюИзJSONВXML(ДанныеВыбора, + КонтактнаяИнформация, Перечисления.ТипыКонтактнойИнформации.Адрес); Иначе Значение = ""; - КонтактнаяИнформация = ""; КонецЕсли; Результат.ДанныеВыбора = Новый Структура; @@ -4006,27 +4118,27 @@ Если МеждународныйФорматАдреса Тогда Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес; - Элементы.НужнаПомощь.Видимость = Ложь; + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; ЦветРамки = Новый Цвет(); ЦветТекстаПредставления = Новый Цвет(); ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаМуниципальныйАдрес; - Элементы.НужнаПомощь.Видимость = Истина; + Элементы.ГруппаТребуетсяПомощь.Видимость = Истина; ЦветРамки = ЦветФонаФормы; ЦветТекстаПредставления = ЦветПоясняющегоТекста; ИначеЕсли РаботаСАдресамиКлиент.ЭтоАдминистративноТерриториальныйАдрес(НаселенныйПунктДетально.AddressType) Тогда Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаАдминистративноТерриториальныйАдрес; - Элементы.НужнаПомощь.Видимость = Истина; + Элементы.ГруппаТребуетсяПомощь.Видимость = Истина; ЦветРамки = ЦветФонаФормы; ЦветТекстаПредставления = ЦветПоясняющегоТекста; ИначеЕсли УправлениеКонтактнойИнформациейКлиентСервер.ЭтоАдресВСвободнойФорме(НаселенныйПунктДетально.AddressType) Тогда Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаАдресВСвободнойФорме; - Элементы.НужнаПомощь.Видимость = Истина; + Элементы.ГруппаТребуетсяПомощь.Видимость = Истина; ЦветРамки = Новый Цвет(); ЦветТекстаПредставления = Новый Цвет(); Иначе Элементы.СтраницаТипАдреса.ТекущаяСтраница = Элементы.СтраницаДругойАдрес; - Элементы.НужнаПомощь.Видимость = Ложь; + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; ЦветРамки = ЦветФонаФормы; ЦветТекстаПредставления = ЦветПоясняющегоТекста; КонецЕсли; @@ -4183,10 +4295,11 @@ Возврат; КонецЕсли; - Если ЗначениеЗаполнено(СокрЛП(ПредставлениеАдреса)) Тогда - Комментарий = ?(НЕ ПустаяСтрока(Комментарий), Комментарий + Символы.ПС, "") - + НСтр("ru = 'Исходный адрес:'") + " " + ПредставлениеАдреса; - НаселенныйПунктДетально.comment = Комментарий; + Если ЗначениеЗаполнено(СокрЛП(ПредставлениеАдреса)) + И СтрНайти(ВРег(Комментарий), ВРег(ПредставлениеАдреса)) = 0 Тогда + Комментарий = ?(НЕ ПустаяСтрока(Комментарий), Комментарий + Символы.ПС, "") + + НСтр("ru = 'Исходный адрес:'") + " " + ПредставлениеАдреса; + НаселенныйПунктДетально.comment = Комментарий; КонецЕсли; ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); @@ -4291,26 +4404,15 @@ ДополнительныйТекст = Символы.ПС + Символы.ПС + НСтр("ru = 'Также адрес можно ввести в свободной форме (см. Еще - Адрес в свободной форме).'"); Если ВидКонтактнойИнформации.МожноИзменятьСпособРедактирования И ВидКонтактнойИнформации.ПроверятьКорректность Тогда - ДополнительныйТекст = ДополнительныйТекст + " "+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ДополнительныйТекст = ДополнительныйТекст + " " + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для этого предварительно снять флажок ""Запрещать ввод некорректных адресов"" в виде контактной информации ""%1"".'"), ОписаниеВидаКонтактнойИнформации(ЭтотОбъект).Ссылка); - КонецЕсли; Элементы.ДекорацияНужнаПомощь.Заголовок = Новый ФорматированнаяСтрока(Элементы.ДекорацияНужнаПомощь.Заголовок, ДополнительныйТекст); КонецПроцедуры -&НаСервереБезКонтекста -Функция СведенияОбАдресе(НаселенныйПунктДетально) - - АдресВJSON = УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(НаселенныйПунктДетально); - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("КодыАдреса", Истина); - Возврат РаботаСАдресами.СведенияОбАдресе(АдресВJSON, ДополнительныеПараметры); - -КонецФункции - // Возвращаемое значение: // см. УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации // diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html index 123b86b97..ad0c4ab4f 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html @@ -2,11 +2,11 @@

                Предназначена для выбора адреса по почтовому индексу. Если известен почтовый индекс, это убыстрит ввод адреса.

                Почтовое деление России следует административному делению страны. Введенная в 1971 году система 6-значных почтовых индексов была унаследована от СССР и не претерпела существенных изменений. Первые три цифры индекса соответствуют определенному субъекту федерации. Следующие три - номеру почтового отделения в нем.

                Для поиска адреса по индексу необходимо, чтобы по соответствующему региону был загружен адресный классификатор.

                -

                Открывается из окна ввода адреса автоматически или по команде Еще - Заполнить по почтовому индексу после ввода почтового индекса.

                -
                • Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить. +

                  Открывается из окна ввода адреса автоматически или по команде Еще - Заполнить по почтовому индексу после ввода почтового индекса.

                  +
                  • Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить.
                  • Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района. -
                  • Выделите соответствующую часть адреса, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши. -
                  • После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.

                  См. также:

                  +
                • Выделите соответствующую часть адреса, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши. +
                • После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Help/ru.html index 5fb2fa51a..1aae4472e 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Help/ru.html @@ -1,8 +1,8 @@

                Предназначена для выбора адреса по почтовому индексу.

                Для поиска адреса по индексу необходимо, чтобы по соответствующему региону был загружен адресный классификатор.

                -

                Открывается из окна ввода адреса по команде Еще - Заполнить по почтовому индексу после ввода почтового индекса.

                -

                Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить. Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района. Выделите соответствующую часть адреса, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши. После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.

                +

                Открывается из окна ввода адреса по команде Еще - Заполнить по почтовому индексу после ввода почтового индекса.

                +

                Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить. Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района. Выделите соответствующую часть адреса, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши. После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.

                См. также:

                • Виды контактной информации;
                • Ввод контактной информации; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Help/ru.html index 5fb2fa51a..1aae4472e 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/ВыборУлицы/Help/ru.html @@ -1,8 +1,8 @@

                  Предназначена для выбора адреса по почтовому индексу.

                  Для поиска адреса по индексу необходимо, чтобы по соответствующему региону был загружен адресный классификатор.

                  -

                  Открывается из окна ввода адреса по команде Еще - Заполнить по почтовому индексу после ввода почтового индекса.

                  -

                  Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить. Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района. Выделите соответствующую часть адреса, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши. После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.

                  +

                  Открывается из окна ввода адреса по команде Еще - Заполнить по почтовому индексу после ввода почтового индекса.

                  +

                  Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить. Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района. Выделите соответствующую часть адреса, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши. После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.

                  См. также:

                  • Виды контактной информации;
                  • Ввод контактной информации; diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html index 5843b8621..e2908b1cf 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html @@ -1,15 +1,15 @@

                    Предназначена для ввода населенного пункта по детальному шаблону.

                    -

                    Открывается из шаблона ввода адреса в поле Город, населенный пункт по кнопке  Выбрать.

                    +

                    Открывается из шаблона ввода адреса в поле Город, населенный пункт по кнопке Выбрать.

                    Выбор вида территориального деления

                    • -
                      Перед заполнением адреса с помощью флажка можно выбрать:
                      +
                      Перед заполнением адреса с помощью флажка можно выбрать:
                      • Муниципальное деление;
                      • Административно-территориальное деление.

                    Ввод населенного пункта

                    -
                    • В поле Регион необходимо ввести наименование субъекта Российской Федерации, к которому относится населенный пункт. +
                      • В поле Регион необходимо ввести наименование субъекта Российской Федерации, к которому относится населенный пункт.
                      • Если адресный классификатор для этого субъекта Российской Федерации не заполнен, будет выведено сообщение.
                      • diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html index 4d9733d5e..7ea9a9742 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Forms/НастройкиАдреса/Help/ru.html @@ -2,6 +2,6 @@

                        Предназначена для настройки адреса РФ.

                        Открывается из окна настройки адреса в списке Виды контактной информации по команде Дополнительные настройки адреса.

                        При включенном флажке Только российский адрес становятся активными дополнительные флажки:

                        -
                        • Запрещать ввод некорректного адреса - если флажок включен, то при некорректном вводе российского адреса невозможно будет ввести данные в приложении (имеет смысл только при использовании шаблонов ввода и адресного классификатора). Данные проверяются по ГАР ФНС России. +
                          • Запрещать ввод некорректного адреса - если флажок включен, то при некорректном вводе российского адреса невозможно будет ввести данные в приложении (имеет смысл только при использовании шаблонов ввода и адресного классификатора). Данные проверяются по ГАР ФНС России.
                          • Указывать ОКТМО - включите флажок, для того чтобы автоматически заполнялось поле ОКТМО.
                          \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Help/ru.html b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Help/ru.html index 373aff71d..44d6fa894 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Help/ru.html +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/Help/ru.html @@ -1,15 +1,15 @@ -

                          После настройки необходимых видов контактной информации, используемых на предприятии или в организации, и загрузки адресного классификатора, можно приступать к заполнению контактной информации в списках и документах приложения.

                          +

                          После настройки необходимых видов контактной информации, используемых на предприятии или в организации, и загрузки адресного классификатора, можно приступать к заполнению контактной информации в списках и документах приложения.

                          Контактную информацию можно вводить:

                          • в виде произвольной строки,
                          • с помощью шаблонов.

                          Использование шаблонов позволяет унифицировать ввод информации, улучшает ее восприятие при просмотре и поиске в списках.

                          -

                          При использовании шаблона адреса поля адреса можно заполнять с помощью адресного классификатора. Заполнение адресов с помощью шаблонов и с использованием адресного классификатора значительно убыстряет ввод, снижает количество ошибок при вводе, что в свою очередь облегчает сдачу отчетности в различные организации. Кроме того, адресный классификатор постоянно обновляется, следовательно, адреса сотрудников всегда будут в актуальном состоянии. В приложении предусмотрена возможность при использовании шаблонов адресов в порядке исключения ввести некоторые адреса, указанные с ошибкой, в свободной форме.

                          +

                          При использовании шаблона адреса поля адреса можно заполнять с помощью адресного классификатора. Заполнение адресов с помощью шаблонов и с использованием адресного классификатора значительно убыстряет ввод, снижает количество ошибок при вводе, что в свою очередь облегчает сдачу отчетности в различные организации. Кроме того, адресный классификатор постоянно обновляется, следовательно, адреса сотрудников всегда будут в актуальном состоянии. В приложении предусмотрена возможность при использовании шаблонов адресов в порядке исключения ввести некоторые адреса, указанные с ошибкой, в свободной форме.

                          Использование шаблона при вводе телефонов и факсов облегчает ввод информации, сокращает количество ошибок при вводе.

                          -

                          При вводе контактной информации доступны не только предопределенные поля, но и те поля, которые были добавлены в список Виды контактной информации в процессе работы приложения.

                          +

                          При вводе контактной информации доступны не только предопределенные поля, но и те поля, которые были добавлены в список Виды контактной информации в процессе работы приложения.

                          Если при настройке одного или нескольких видов контактной информации включен флажок Разрешить ввод нескольких значений, то в окне для ввода предусмотрена кнопка Добавить. При нажатии на нее предлагается список возможных видов контактной информации для добавления. Например, у организации может быть несколько адресов электронной почты, веб-страниц и т.п.

                          Для работы с контактной информацией можно воспользоваться командами контекстного меню по правой кнопке мыши:

                          -
                          • Выбрать (клавиша F4) - ввести контактную информацию по шаблону, аналогично кнопке  Выбрать. По шаблону можно ввести адрес, телефон или факс. +
                            • Выбрать (клавиша F4) - ввести контактную информацию по шаблону, аналогично кнопке Выбрать. По шаблону можно ввести адрес, телефон или факс.
                            • Открыть (сочетание клавиш Ctrl+Shift+F4) - просмотр введенной контактной информации (например, слишком длинный адрес можно увидеть целиком с помощью этой команды);
                            • @@ -23,9 +23,9 @@
                            • Выделить все (сочетание клавиш Ctrl+A).
                            • -
                            • Ввести комментарий - с помощью этой команды можно ввести или изменить комментарий, не открывая окно редактирования поля. Комментарии предусмотрены для всех видов контактной информации, кроме текстового поля Другое, т.к. в это поле можно ввести всю нужную информацию. Воспользуйтесь командой, затем введите текст комментария, нажмите кнопку ОК для продолжения работы в приложении. Если комментарий не пуст, то он выводится под полем контактной информации. +
                            • Ввести комментарий - с помощью этой команды можно ввести или изменить комментарий, не открывая окно редактирования поля. Комментарии предусмотрены для всех видов контактной информации, кроме текстового поля Другое, т.к. в это поле можно ввести всю нужную информацию. Воспользуйтесь командой, затем введите текст комментария, нажмите кнопку ОК для продолжения работы в приложении. Если комментарий не пуст, то он выводится под полем контактной информации.
                            • Адрес на Яндекс.Картах; Адрес на Google Maps - команды, которые позволяют увидеть адрес объекта на картах соответственно Яндекс или Google. Также можно эти команды найти в меню Еще в карточке ввода адреса.
                            • -
                            • История изменений - с помощью этой команды можно просмотреть изменения контактной информации.

                            Ввод телефона по маске

                            +
                          • История изменений - с помощью этой команды можно просмотреть изменения контактной информации.

                          Ввод телефона по маске

                          Если настроена маска для ввода телефона, следует его ввести в поле ввода в соответствии с маской. Шаблон в этом случае не нужен.
                          \ No newline at end of file diff --git a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl index cf6627463..8c04eab86 100644 --- a/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РасширенныйВводКонтактнойИнформации/ManagerModule.bsl @@ -57,14 +57,11 @@ ТипИнформации = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.ТипВидаКонтактнойИнформации(ВидИнформации); - ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; - Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда + Если ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводАдреса"; - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда + ИначеЕсли ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") + Или ТипИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; КонецЕсли; @@ -190,8 +187,9 @@ Возврат Адрес; КонецЕсли; - ЗаполнитьЗначенияСвойств(Адрес, АдресныеСведения.Данные, "addressType,codeKLADR,id,ifnsFLAreaCode,ifnsFLCode,ifnsULAreaCode,ifnsULCode,okato,oktmo, - |ZIPCode,value,admLevels,munLevels,areaValue"); + ЗаполнитьЗначенияСвойств(Адрес, АдресныеСведения.Данные, + "addressType,codeKLADR,id,ifnsFLAreaCode,ifnsFLCode,ifnsULAreaCode,ifnsULCode,okato,oktmo, + |ZIPCode,value,admLevels,munLevels,areaValue"); Если ПустаяСтрока(Адрес.Country) Тогда Адрес.Вставить("Country", Строка(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана())); @@ -434,10 +432,8 @@ Возврат УправлениеКонтактнойИнформациейЛокализация.КонтактнаяИнформацияИзXML(ЗначенияПолей, ОжидаемыйТип); КонецЕсли; - Если ОжидаемыйТип <> Неопределено Тогда - Если ОжидаемыйТип <> Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, ожидается адрес'"); - КонецЕсли; + Если ОжидаемыйТип <> Неопределено И ОжидаемыйТип <> Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + ВызватьИсключение НСтр("ru = 'Некорректная контактная информация, ожидается адрес'"); КонецЕсли; // Старый формат через разделитель строк и равенство. @@ -602,21 +598,17 @@ // Функция АдресXMLВXDTO(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйТип = Неопределено) Экспорт - Если Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено Тогда - - ТипЗначения = ТипЗнч(ЗначенияПолей); - РазбиратьПоПолям = (ТипЗначения = Тип("СписокЗначений") Или ТипЗначения = Тип("Структура") - Или (ТипЗначения = Тип("Строка") И Не ПустаяСтрока(ЗначенияПолей))); - Если РазбиратьПоПолям Тогда - // Разбираем из значений полей. - Возврат ДесериализацияАдресаОбщая(ЗначенияПолей, Представление, ОжидаемыйТип); - КонецЕсли; - - // Разбираем адрес из его представления по классификатору. - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Возврат СформироватьАдресПоПредставлению(Представление); - КонецЕсли; + ТипЗначения = ТипЗнч(ЗначенияПолей); + РазбиратьПоПолям = (ТипЗначения = Тип("СписокЗначений") Или ТипЗначения = Тип("Структура") Или (ТипЗначения = Тип( + "Строка") И Не ПустаяСтрока(ЗначенияПолей))); + Если РазбиратьПоПолям Тогда + // Разбираем из значений полей. + Возврат ДесериализацияАдресаОбщая(ЗначенияПолей, Представление, ОжидаемыйТип); + КонецЕсли; + // Разбираем адрес из его представления по классификатору. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + Возврат СформироватьАдресПоПредставлению(Представление); КонецЕсли; // Пустой объект с представлением. @@ -1328,11 +1320,13 @@ Поле = "СубъектРФ"; Если ПустаяСтрока(ДанныеАдреса.AreaType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, "СубъектРФ", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для региона ""%1"" не указан тип (республика, область, город и пр.)'"), Регион), НСтр("ru = 'Регион'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для региона ""%1"" не указан тип (республика, область, город и пр.)'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Регион, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии региона ""%1"" есть не кириллические символы'"), Регион), НСтр("ru = 'Регион'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В названии региона ""%1"" есть не кириллические символы'"), Регион), НСтр("ru = 'Регион'")); КонецЕсли КонецЕсли; @@ -1342,11 +1336,13 @@ Поле = "Район"; Если ПустаяСтрока(ДанныеАдреса.DistrictType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для района ""%1"" не указан тип (район, поселение и пр.)'"), Район), НСтр("ru = 'Район'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для района ""%1"" не указан тип (район, поселение и пр.)'"), Район), НСтр("ru = 'Район'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Район, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии района ""%1"" есть не кириллические символы'"), Район), НСтр("ru = 'Район'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В названии района ""%1"" есть не кириллические символы'"), Район), НСтр("ru = 'Район'")); КонецЕсли; КонецЕсли; @@ -1356,11 +1352,13 @@ Поле = "Город"; Если ПустаяСтрока(ДанныеАдреса.CityType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для города ""%1"" не указан тип (город, поселок, сельское поселение и пр.)'"), Город), НСтр("ru = 'Город'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для города ""%1"" не указан тип (город, поселок, сельское поселение и пр.)'"), Город), НСтр("ru = 'Город'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Город, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии города ""%1"" есть не кириллические символы'"), Город), НСтр("ru = 'Город'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В названии города ""%1"" есть не кириллические символы'"), Город), НСтр("ru = 'Город'")); КонецЕсли; КонецЕсли; @@ -1370,12 +1368,14 @@ Поле = "НаселПункт"; Если ПустаяСтрока(ДанныеАдреса.LocalityType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для населенного пункта ""%1"" не указан тип (город, деревня, село и пр.)'"), НаселенныйПункт), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для населенного пункта ""%1"" не указан тип (город, деревня, село и пр.)'"), НаселенныйПункт), НСтр("ru = 'Населенный пункт'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(НаселенныйПункт, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии населенного пункта ""%1"" есть не кириллические символы'"), НаселенныйПункт), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В названии населенного пункта ""%1"" есть не кириллические символы'"), НаселенныйПункт), НСтр("ru = 'Населенный пункт'")); КонецЕсли; КонецЕсли; @@ -1386,11 +1386,13 @@ Поле = "Улица"; Если ПустаяСтрока(ДанныеАдреса.StreetType) Тогда ДобавитьОшибкуЗаполненияАдреса(НеУказаныСокращенияПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Для улицы ""%1"" не указан тип (улица, переулок, шоссе и пр.)'"), Улица), НСтр("ru = 'Улица'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для улицы ""%1"" не указан тип (улица, переулок, шоссе и пр.)'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; Если Не СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Улица, Ложь, ДопустимоКромеКириллицы) Тогда ДобавитьОшибкуЗаполненияАдреса(НедопустимыеСимволыПолей, Поле, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В названии улицы ""%1"" есть не кириллические символы'"), Улица), НСтр("ru = 'Улица'")); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В названии улицы ""%1"" есть не кириллические символы'"), Улица), НСтр("ru = 'Улица'")); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form index b64d648ef..e21f81cb2 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборКонстанты/Form.form @@ -45,7 +45,7 @@ СписокКонстант.Наименование - СписокКонстантНаименованиеРасширеннаяПодсказка + СписокКонстантНаименованиеExtendedTooltip 37 Label true @@ -89,7 +89,7 @@ None - СписокКонстантИндексКартинкиАвторегистрацияРасширеннаяПодсказка + СписокКонстантИндексКартинкиАвторегистрацияExtendedTooltip 38 Label true @@ -204,7 +204,7 @@ - СписокКонстантРасширеннаяПодсказка + СписокКонстантExtendedTooltip 36 Label true @@ -229,7 +229,7 @@ true - СписокКонстантКонтекстноеМенюВыбратьКонстантуРасширеннаяПодсказка + СписокКонстантКонтекстноеМенюВыбратьКонстантуExtendedTooltip 29 Label true @@ -258,7 +258,7 @@ true - СписокКонстантКонтекстноеМенюНайтиРасширеннаяПодсказка + СписокКонстантКонтекстноеМенюНайтиExtendedTooltip 31 Label true @@ -284,7 +284,7 @@ true - СписокКонстантКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + СписокКонстантКонтекстноеМенюВыделитьВсеExtendedTooltip 32 Label true @@ -310,7 +310,7 @@ true - СписокКонстантКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + СписокКонстантКонтекстноеМенюОтменитьПоискExtendedTooltip 33 Label true @@ -336,7 +336,7 @@ true - СписокКонстантКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + СписокКонстантКонтекстноеМенюВывестиСписокExtendedTooltip 34 Label true @@ -362,7 +362,7 @@ true - СписокКонстантКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + СписокКонстантКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip 35 Label true @@ -389,7 +389,7 @@ Констант контекстное меню группа 1 - СписокКонстантКонтекстноеМенюГруппа1РасширеннаяПодсказка + СписокКонстантКонтекстноеМенюГруппа1ExtendedTooltip 30 Label true @@ -447,7 +447,7 @@ true - Декорация1РасширеннаяПодсказка + Декорация1ExtendedTooltip 40 Label true @@ -480,7 +480,7 @@ true - ДекорацияАвторегистрацияРасширеннаяПодсказка + ДекорацияАвторегистрацияExtendedTooltip 41 Label true @@ -510,7 +510,7 @@ false - Группа1РасширеннаяПодсказка + Группа1ExtendedTooltip 39 Label true @@ -544,7 +544,7 @@ true - ФормаВыбратьКонстантуРасширеннаяПодсказка + ФормаВыбратьКонстантуExtendedTooltip 28 Label true diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form index a7596b99b..11441ff91 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Form.form @@ -38,7 +38,7 @@ true - ОтборДобавитьЭлементОтбораРасширеннаяПодсказка + ОтборДобавитьЭлементОтбораExtendedTooltip 41 Label true @@ -64,7 +64,7 @@ true - ОтборСгруппироватьЭлементыОтбораРасширеннаяПодсказка + ОтборСгруппироватьЭлементыОтбораExtendedTooltip 42 Label true @@ -90,7 +90,7 @@ true - ОтборУдалитьРасширеннаяПодсказка + ОтборУдалитьExtendedTooltip 43 Label true @@ -116,7 +116,7 @@ true - ОтборПереместитьВнизРасширеннаяПодсказка + ОтборПереместитьВнизExtendedTooltip 44 Label true @@ -142,7 +142,7 @@ true - ОтборПереместитьВверхРасширеннаяПодсказка + ОтборПереместитьВверхExtendedTooltip 45 Label true @@ -172,7 +172,7 @@ Действия отбора - ОтборГруппа1РасширеннаяПодсказка + ОтборГруппа1ExtendedTooltip 46 Label true @@ -198,7 +198,7 @@ Действия формы - ОтборГруппа2РасширеннаяПодсказка + ОтборГруппа2ExtendedTooltip 47 Label true @@ -289,7 +289,7 @@ - ОтборРасширеннаяПодсказка + ОтборExtendedTooltip 48 Label true @@ -341,7 +341,7 @@ Элементы отбора - Группа1РасширеннаяПодсказка + Группа1ExtendedTooltip 40 Label true @@ -425,7 +425,7 @@ true - СписокДанныхВыбратьОтобранныеЗначенияРасширеннаяПодсказка + СписокДанныхВыбратьОтобранныеЗначенияExtendedTooltip 59 Label true @@ -458,7 +458,7 @@ true - СписокДанныхВыбратьТекущуюСтрокуРасширеннаяПодсказка + СписокДанныхВыбратьТекущуюСтрокуExtendedTooltip 60 Label true @@ -490,7 +490,7 @@ true - СписокДанныхЗакрытьРасширеннаяПодсказка + СписокДанныхЗакрытьExtendedTooltip 61 Label true @@ -584,7 +584,7 @@ - СписокДанныхРасширеннаяПодсказка + СписокДанныхExtendedTooltip 62 Label true @@ -609,7 +609,7 @@ true - СписокДанныхКонтекстноеМенюВыбратьОтобранныеЗначенияРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюВыбратьОтобранныеЗначенияExtendedTooltip 49 Label true @@ -642,7 +642,7 @@ true - СписокДанныхКонтекстноеМенюВыбратьТекущуюСтрокуРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюВыбратьТекущуюСтрокуExtendedTooltip 50 Label true @@ -674,7 +674,7 @@ true - СписокДанныхКонтекстноеМенюОткрытьТекущийОбъектРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюОткрытьТекущийОбъектExtendedTooltip 52 Label true @@ -704,7 +704,7 @@ Данных контекстное меню группа 2 - СписокДанныхКонтекстноеМенюГруппа2РасширеннаяПодсказка + СписокДанныхКонтекстноеМенюГруппа2ExtendedTooltip 51 Label true @@ -727,7 +727,7 @@ true - СписокДанныхКонтекстноеМенюНайтиРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюНайтиExtendedTooltip 54 Label true @@ -753,7 +753,7 @@ true - СписокДанныхКонтекстноеМенюОбновитьРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюОбновитьExtendedTooltip 55 Label true @@ -779,7 +779,7 @@ true - СписокДанныхКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюОтменитьПоискExtendedTooltip 56 Label true @@ -805,7 +805,7 @@ true - СписокДанныхКонтекстноеМенюНастройкаСпискаРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюНастройкаСпискаExtendedTooltip 57 Label true @@ -831,7 +831,7 @@ true - СписокДанныхКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + СписокДанныхКонтекстноеМенюВывестиСписокExtendedTooltip 58 Label true @@ -858,7 +858,7 @@ Данных контекстное меню группа 1 - СписокДанныхКонтекстноеМенюГруппа1РасширеннаяПодсказка + СписокДанныхКонтекстноеМенюГруппа1ExtendedTooltip 53 Label true diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form index 19e9a60fd..69de7f9fa 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -4394,7 +4394,7 @@ 382 <key>ru</key> - <value>Выборочная регистрация объектов – это режим дополнительной проверки, который используется при регистрации объектов (настраивается разработчиками программы). + <value>Выборочная регистрация объектов – это режим дополнительной проверки, который используется при регистрации объектов (настраивается разработчиками приложениями). Режим "Отключен" – все записываемые объекты считаются измененными и будут зарегистрированы к обмену; Режим "Модифицированность" – регистрируем к обмену объекты, у которых были изменения в данных; Режим "Согласно правилам xml" – к обменам регистрируем объекты, у которых есть изменения в реквизитах. Список реквизитов получается из правил конвертаций.</value> diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png index e97da27ee..a5e0be3c5 100644 Binary files a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png and b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Items/ДеревоМетаданных/RowsPicture.png differ diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index 7c6f67929..564335824 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -2550,15 +2550,22 @@ Новый Массив, ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации)); МетаИмя = Строка.МетаПолноеИмя; Если ПустаяСтрока(МетаИмя) Тогда + // Корень конфигурации без пометки Результат.МетаИмена.Добавить(Неопределено); Иначе - Результат.МетаИмена.Добавить(МетаИмя); - Родитель = Строка.ПолучитьРодителя(); МетаРодительИмя = Родитель.МетаПолноеИмя; Если ПустаяСтрока(МетаРодительИмя) Тогда + + Если СтруктураИменМетаданных.Свойство(МетаИмя) Тогда + Результат.МетаИмена = СтруктураИменМетаданных[МетаИмя]; + Иначе + Результат.МетаИмена.Добавить(МетаИмя); + КонецЕсли; + Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, Строка.Наименование); Иначе + Результат.МетаИмена.Добавить(МетаИмя); Результат.Описание = ПолучитьОписаниеВыбранныхМетаданных(БезУчетаАвторегистрации, МетаРодительИмя, МетаИмя); КонецЕсли; КонецЕсли; @@ -2876,9 +2883,9 @@ Возврат; КонецЕсли; - МодульОбменДаннымиПовтИсп = ОбщийМодульОбменДаннымиПовтИсп(); - МодульОбменДаннымиРегистрацияПовтИсп = ОбщийМодульОбменДаннымиРегистрацияПовтИсп(); - МодульОбменДаннымиРегистрацияСервер = ОбщийМодульОбменДаннымиРегистрацияСервер(); + МодульОбменДаннымиПовтИсп = ОбщийМодуль("ОбменДаннымиПовтИсп"); + МодульОбменДаннымиРегистрацияПовтИсп = ОбщийМодуль("ОбменДаннымиРегистрацияПовтИсп"); + МодульОбменДаннымиРегистрацияСервер = ОбщийМодуль("ОбменДаннымиРегистрацияСервер"); Если ЗначениеЗаполнено(УзелОбменаСсылка) Тогда @@ -2930,26 +2937,46 @@ КонецФункции -&НаСервере -Функция ОбщийМодульОбменДаннымиПовтИсп() - Возврат Вычислить("ОбменДаннымиПовтИсп"); // АПК:488 Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. +// Возвращает ссылку на общий модуль по имени. +// +// Параметры: +// Имя - Строка - имя общего модуля, например: +// "ОбщегоНазначения", +// "ОбщегоНазначенияКлиент". +// +// Возвращаемое значение: +// ОбщийМодуль +// +&НаКлиентеНаСервереБезКонтекста +Функция ОбщийМодуль(Имя) + +// АПК:488-выкл "Вычислить" вместо "ОбщегоНазначения.ВычислитьВБезопасномРежиме()", так как обработка автономная +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда + УстановитьБезопасныйРежим(Истина); + Модуль = Вычислить(Имя); + Иначе + Модуль = Неопределено; + КонецЕсли; + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); + КонецЕсли; +#Иначе + Модуль = Вычислить(Имя); + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); + КонецЕсли; +#КонецЕсли +// АПК:488-вкл + + Возврат Модуль; + КонецФункции -&НаСервере -Функция ОбщийМодульОбменДаннымиРегистрацияПовтИсп() - Возврат Вычислить("ОбменДаннымиРегистрацияПовтИсп"); // АПК:488 Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. -КонецФункции +#Область ПроцедурыИФункцииИзБазовойФункциональностиДляОбеспеченияАвтономности -&НаСервере -Функция ОбщийМодульОбменДаннымиРегистрацияСервер() - Возврат Вычислить("ОбменДаннымиРегистрацияСервер"); // АПК:488 Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. -КонецФункции - - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции из базовой функциональности для обеспечения автономности. - -&НаСервере +&НаКлиентеНаСервереБезКонтекста Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); @@ -2967,4 +2994,6 @@ КонецФункции +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html index 685c623bb..a2c0b912f 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html @@ -1,26 +1,26 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Предназначена для регистрации изменений данных в приложении. Это необходимо для последующей отправки данных при синхронизации в другие приложения.</p> -<p>Список можно открыть с помощью кнопки <img src="StdPicture.InputFieldOpen"></img> или по команде <strong>Еще -</strong> <strong>Состав отправляемых данных</strong> из списка <a href="CommonForm.НастройкиСинхронизацииДанных/Help">Синхронизации данных</a>.</p> +<p>Предназначена для регистрации изменений данных в приложении. Это необходимо для последующей отправки данных при синхронизации в другие приложения.</p> +<p>Список можно открыть с помощью кнопки <img src="StdPicture.InputFieldOpen"></img> или по команде <strong>Еще -</strong> <strong>Состав отправляемых данных</strong> из списка <a href="CommonForm.НастройкиСинхронизацииДанных/Help">Синхронизации данных</a>.</p> <p>Ведется регистрация номеров сообщений. Нажмите на ссылку с номерами сообщений, чтобы просмотреть их или исправить. </p> <p>Список состоит из двух частей: </p> <ul><li>левая часть состоит из двух колонок: -<ul><li><strong>Объект конфигурации</strong> - перечислены объекты приложения (справочники, документы и т.д.) в виде дерева; +<ul><li><strong>Объект конфигурации</strong> - перечислены объекты приложения (справочники, документы и т.д.) в виде дерева; </li> -<li><strong>Количество</strong> - количество зарегистрированных измененных (или вновь введенных) / не выгруженных элементов в этих объектах;</li></ul></li> +<li><strong>Количество</strong> - количество зарегистрированных измененных (или вновь введенных) / не выгруженных элементов в этих объектах;</li></ul></li> <li>правая часть меняется в зависимости от выделенного объекта в левой части: -<ul><li>По выделенной группе объектов в колонке <strong>Описание</strong> приводится подробное описание статистических данных левой части. +<ul><li>По выделенной группе объектов в колонке <strong>Описание</strong> приводится подробное описание статистических данных левой части. </li> -<li>По выделенному объекту приложения правая часть делится на две колонки: -<ul><li>Наименование конкретного объекта (например, <strong>Валюта</strong>) - приводится перечень всех измененных и не выгруженных элементов списка; +<li>По выделенному объекту приложения правая часть делится на две колонки: +<ul><li>Наименование конкретного объекта (например, <strong>Валюта</strong>) - приводится перечень всех измененных и не выгруженных элементов списка; </li> <li><strong>Номер отправленного</strong> - номер сообщения, в котором отправлены измененные элементы списка (указывается номер сообщения или выводится <strong>Не выгружалось</strong>);</li></ul></li></ul></li></ul><h3>Отбор изменений</h3> -<ul><li>В поле <strong>Отображать</strong> выберите нужное значение из списка: +<ul><li>В поле <strong>Отображать</strong> выберите нужное значение из списка: <ul><li><strong>Все</strong>; </li> <li><strong>Только выгруженные</strong>; </li> <li><strong>Только невыгруженные</strong>.</li></ul></li></ul><h3>Регистрация изменений и отмена регистрации</h3> -<ul><li>Измененные и вновь вводимые объекты приложение регистрирует автоматически. Для ручной регистрации объектов выберите объект в дереве с помощью флажков, нажмите <strong>Зарегистрировать</strong>: +<ul><li>Измененные и вновь вводимые объекты приложение регистрирует автоматически. Для ручной регистрации объектов выберите объект в дереве с помощью флажков, нажмите <strong>Зарегистрировать</strong>: <ul><li><strong>- всех объектов выбранных типов</strong> - можно выбрать объект и все его подчиненные объекты; </li> <li><strong>- объектов выбранных типов с авторегистрацией</strong>; @@ -30,8 +30,8 @@ <li><strong>- объектов при помощи отбора</strong> (задайте отбор, отберите нужные элементы); </li> <li><strong>- результатов запроса</strong>.</li></ul></li> -<li>Для того чтобы отменить отправку всех данных, приготовленных для других приложений, в дереве объектов выделите корень (информационную базу) и нажмите <strong>Отменить регистрацию - Всех объектов выбранных типов</strong>) - все настройки аналогичны предыдущим.</li></ul><h3>Настройки</h3> -<ul><li>Для того чтобы настроить параметры регистрации изменений объектов, нажмите <strong>Еще -</strong> <strong>Настройки</strong>. Можно настроить параметры авторегистрации, установить номер сообщения при регистрации, при необходимости указать путь к каталогу консоли запросов. +<li>Для того чтобы отменить отправку всех данных, приготовленных для других приложений, в дереве объектов выделите корень (информационную базу) и нажмите <strong>Отменить регистрацию - Всех объектов выбранных типов</strong>) - все настройки аналогичны предыдущим.</li></ul><h3>Настройки</h3> +<ul><li>Для того чтобы настроить параметры регистрации изменений объектов, нажмите <strong>Еще -</strong> <strong>Настройки</strong>. Можно настроить параметры авторегистрации, установить номер сообщения при регистрации, при необходимости указать путь к каталогу консоли запросов. </li> <li>С помощью флажков можно включить <strong>Авторегистрацию</strong>: <ul><li><strong>Движений вместе с документами</strong>; @@ -45,7 +45,7 @@ </li> <li>Включите флажок, для того чтобы <strong>Использовать</strong> Библиотеку стандартных подсистем <strong>при регистрации изменений объектов ограничения миграции данных</strong>. </li> -<li>Для того чтобы настройки вступили в силу, нажмите <strong>Записать</strong>.</li></ul><h3>Просмотр результата выгрузки для РИБ</h3> -<ul><li>Для того чтобы просмотреть результат выгрузки, выделите объект, по которому зарегистрированы изменения, в левой части списка, при этом в правой части появляется список элементов, выделите нужный элемент, нажмите кнопку <strong>Показать результат выгрузки</strong> или <strong>Еще - Стандартный результат выгрузки.</strong></li></ul><h3>См. также:</h3> +<li>Для того чтобы настройки вступили в силу, нажмите <strong>Записать</strong>.</li></ul><h3>Просмотр результата выгрузки для РИБ</h3> +<ul><li>Для того чтобы просмотреть результат выгрузки, выделите объект, по которому зарегистрированы изменения, в левой части списка, при этом в правой части появляется список элементов, выделите нужный элемент, нажмите кнопку <strong>Показать результат выгрузки</strong> или <strong>Еще - Стандартный результат выгрузки.</strong></li></ul><h3>См. также:</h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl index fe8986628..57379648b 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -946,8 +946,6 @@ // // Параметры: // ИмяТаблицы - Строка - имя таблицы, например "РегистрСведений.КурсыВалют". -// ВсеИзмерения - Булево - флаг того, что для регистра сведений получаем все измерения, а не -// только основные и ведущие. // // Возвращаемое значение: // ТаблицаЗначений: @@ -955,7 +953,7 @@ // * ТипЗначения - ОписаниеТипов - типы. // * Заголовок - Строка - представление для измерения. // -Функция ИзмеренияНабораЗаписей(ИмяТаблицы, ВсеИзмерения = Ложь) Экспорт +Функция ИзмеренияНабораЗаписей(ИмяТаблицы) Экспорт Если ТипЗнч(ИмяТаблицы) = Тип("Строка") Тогда Мета = МетаданныеПоПолномуИмени(ИмяТаблицы); @@ -970,85 +968,35 @@ Колонки.Добавить("ТипЗначения"); Колонки.Добавить("Заголовок"); - Если Не ВсеИзмерения Тогда - // Что-то регистрируемое - НеУчитывать = "#НомерСообщения#Узел#"; - Для Каждого МетаОбщий Из Метаданные.ОбщиеРеквизиты Цикл - НеУчитывать = НеУчитывать + "#" + МетаОбщий.Имя + "#" ; - КонецЦикла; - - ШаблонТекстаЗапроса = - "ВЫБРАТЬ - | * - |ИЗ - | &ИмяТаблицыМетаданных КАК ИмяТаблицыМетаданных - |ГДЕ - | ЛОЖЬ"; - - ИмяТаблицыМетаданных = Мета.ПолноеИмя() + ".Изменения"; - ТекстЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "&ИмяТаблицыМетаданных", ИмяТаблицыМетаданных); - - Запрос = Новый Запрос(ТекстЗапроса); - ПустойРезультат = Запрос.Выполнить(); - Для Каждого КолонкаРезультата Из ПустойРезультат.Колонки Цикл - ИмяКолонки = КолонкаРезультата.Имя; - Если СтрНайти(НеУчитывать, "#" + ИмяКолонки + "#") = 0 Тогда - Строка = Измерения.Добавить(); - Строка.Имя = ИмяКолонки; - Строка.ТипЗначения = КолонкаРезультата.ТипЗначения; - - МетаИзмерение = Мета.Измерения.Найти(ИмяКолонки); - Строка.Заголовок = ?(МетаИзмерение = Неопределено, ИмяКолонки, МетаИзмерение.Представление()); - КонецЕсли; - КонецЦикла; - - Возврат Измерения; - - КонецЕсли; + НеУчитывать = "#НомерСообщения#Узел#"; - // Все измерения + ШаблонТекстаЗапроса = + "ВЫБРАТЬ + | * + |ИЗ + | &ИмяТаблицыМетаданных КАК ИмяТаблицыМетаданных + |ГДЕ + | ЛОЖЬ"; - ЭтоРегистрСведений = Метаданные.РегистрыСведений.Содержит(Мета); + ИмяТаблицыМетаданных = Мета.ПолноеИмя() + ".Изменения"; + ТекстЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "&ИмяТаблицыМетаданных", ИмяТаблицыМетаданных); - // Регистратор - Если Метаданные.РегистрыНакопления.Содержит(Мета) - Или Метаданные.РегистрыБухгалтерии.Содержит(Мета) - Или Метаданные.РегистрыРасчета.Содержит(Мета) - Или (ЭтоРегистрСведений И Мета.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору) - Или Метаданные.Последовательности.Содержит(Мета) Тогда - Строка = Измерения.Добавить(); - Строка.Имя = "Регистратор"; - Строка.ТипЗначения = Документы.ТипВсеСсылки(); - Строка.Заголовок = НСтр("ru = 'Регистратор'"); - КонецЕсли; - - // Период - Если ЭтоРегистрСведений И Мета.ОсновнойОтборПоПериоду Тогда - Строка = Измерения.Добавить(); - Строка.Имя = "Период"; - Строка.ТипЗначения = Новый ОписаниеТипов("Дата"); - Строка.Заголовок = НСтр("ru = 'Период'"); - КонецЕсли; - - // Измерения - Если ЭтоРегистрСведений Тогда - Для Каждого МетаИзмерение Из Мета.Измерения Цикл + Запрос = Новый Запрос(ТекстЗапроса); + ПустойРезультат = Запрос.Выполнить(); + Для Каждого КолонкаРезультата Из ПустойРезультат.Колонки Цикл + ИмяКолонки = КолонкаРезультата.Имя; + Если СтрНайти(НеУчитывать, "#" + ИмяКолонки + "#") = 0 Тогда Строка = Измерения.Добавить(); - Строка.Имя = МетаИзмерение.Имя; - Строка.ТипЗначения = МетаИзмерение.Тип; - Строка.Заголовок = МетаИзмерение.Представление(); - КонецЦикла; - КонецЕсли; - - // Перерасчет - Если Метаданные.РегистрыРасчета.Содержит(Мета.Родитель()) Тогда - Строка = Измерения.Добавить(); - Строка.Имя = "ОбъектПерерасчета"; - Строка.ТипЗначения = Документы.ТипВсеСсылки(); - Строка.Заголовок = НСтр("ru = 'Объект перерасчета'"); - КонецЕсли; - + Строка.Имя = ИмяКолонки; + Строка.ТипЗначения = КолонкаРезультата.ТипЗначения; + + МетаИзмерение = Мета.Измерения.Найти(ИмяКолонки); + Строка.Заголовок = ?(МетаИзмерение = Неопределено, ИмяКолонки, МетаИзмерение.Представление()); + КонецЕсли; + КонецЦикла; + Возврат Измерения; + КонецФункции // Модифицирует таблицу формы, добавляя туда колонки. @@ -1149,7 +1097,7 @@ // Ссылка Результат = ""; - МодульОбщегоНазначения = ОбщийМодульОбщегоНазначения(); + МодульОбщегоНазначения = ОбщийМодуль("ОбщегоНазначения"); Если МодульОбщегоНазначения <> Неопределено Тогда Результат = МодульОбщегоНазначения.ПредметСтрокой(ОбъектПредставления); КонецЕсли; @@ -1394,7 +1342,7 @@ Если ЭтоРегистрацияПоОтбору Тогда - МодульОбменДаннымиСобытия = ОбщийМодульОбменДаннымиСобытия(); + МодульОбменДаннымиСобытия = ОбщийМодуль("ОбменДаннымиСобытия"); ПараметрыПР = МодульОбменДаннымиСобытия.ПараметрыПакетнойРегистрации(); @@ -1451,8 +1399,14 @@ Продолжить; КонецЕсли; - // Удаление регистрации - платформенным методом. - Значения.Добавить(Неопределено); + // Удаление регистрации. + Если ИменаМетаданных = Неопределено Тогда + ИменаМетаданных = СформироватьСтруктуруМетаданных(Узел).СтруктураИмен; + КонецЕсли; + + Для Каждого МД Из ИменаМетаданных Цикл + ИзменитьРегистрациюНаСервере(Команда, БезУчетаАвторегистрации, Узел, МД.Значение, ИмяТаблицы, ИменаМетаданных); + КонецЦикла; ИначеЕсли Тип = Тип("Строка") Тогда // Метаданные, возможно как коллекция, так и конкретный вид, на авторегистрацию смотрим. @@ -1638,7 +1592,7 @@ КонецЕсли; // Заводим на регистрацию в БСП всегда, необходимы дополнительные действия. - МодульОбменДаннымиСобытия = ОбщийМодульОбменДаннымиСобытия(); + МодульОбменДаннымиСобытия = ОбщийМодуль("ОбменДаннымиСобытия"); // На входе или объект метаданных или непосредственно объект. Если ТипЗнч(ОбъектРегистрации) = Тип("ОбъектМетаданных") Тогда @@ -2052,57 +2006,42 @@ Возврат Результат; КонецФункции -// Возвращает общий модуль ОбменДаннымиСобытия или Неопределено, если такого нет в составе конфигурации. +// Возвращает ссылку на общий модуль по имени. // -Функция ОбщийМодульОбменДаннымиСобытия() - Если Метаданные.ОбщиеМодули.Найти("ОбменДаннымиСобытия") = Неопределено Тогда - Возврат Неопределено; +// Параметры: +// Имя - Строка - имя общего модуля, например: +// "ОбщегоНазначения", +// "ОбщегоНазначенияКлиент". +// +// Возвращаемое значение: +// ОбщийМодуль +// +Функция ОбщийМодуль(Имя) + + Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда + УстановитьБезопасныйРежим(Истина); + Модуль = Вычислить(Имя); // АПК:488 "Вычислить" вместо "ОбщегоНазначения.ВычислитьВБезопасномРежиме()", так как обработка автономная + Иначе + Модуль = Неопределено; КонецЕсли; - // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. - Возврат Вычислить("ОбменДаннымиСобытия"); -КонецФункции - -// Возвращает общий модуль СтандартныеПодсистемыСервер или Неопределено, если такого нет в составе конфигурации. -// -Функция ОбщийМодульСтандартныеПодсистемыСервер() - Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыСервер") = Неопределено Тогда - Возврат Неопределено; + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не существует.'"), Имя); КонецЕсли; - // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. - Возврат Вычислить("СтандартныеПодсистемыСервер"); -КонецФункции - -// Возвращает общий модуль СтандартныеПодсистемыСервер или Неопределено, если такого нет в составе конфигурации. -// -Функция ОбщийМодульСтандартныеПодсистемыПовтИсп() - Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыПовтИсп") = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; + Возврат Модуль; - // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. - Возврат Вычислить("СтандартныеПодсистемыПовтИсп"); -КонецФункции - -// Возвращает общий модуль ОбщегоНазначения или Неопределено, если такого нет в составе конфигурации. -// -Функция ОбщийМодульОбщегоНазначения() - Если Метаданные.ОбщиеМодули.Найти("ОбщегоНазначения") = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - // Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал. - Возврат Вычислить("ОбщегоНазначения"); КонецФункции Функция ЭтоУзелПланаОбменаБСП(Узел) - Если Метаданные.ОбщиеМодули.Найти("ОбменДаннымиПовтИсп") = Неопределено Тогда - Возврат Ложь; - КонецЕсли; + МодульОбменДаннымиПовтИсп = ОбщийМодуль("ОбменДаннымиПовтИсп"); - МодульОбменДаннымиПовтИсп = Вычислить("ОбменДаннымиПовтИсп"); + Если МодульОбменДаннымиПовтИсп = Неопределено Тогда + + Возврат Ложь; + + КонецЕсли; Возврат МодульОбменДаннымиПовтИсп.ПланыОбменаБСП().Найти(МодульОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Узел)) <> Неопределено; @@ -2113,7 +2052,7 @@ Функция БСП_ДоступнаТребуемаяВерсия(Знач Версия = Неопределено) ТекущаяВерсия = Неопределено; - МодульСтандартныеПодсистемыСервер = ОбщийМодульСтандартныеПодсистемыСервер(); + МодульСтандартныеПодсистемыСервер = ОбщийМодуль("СтандартныеПодсистемыСервер"); Если МодульСтандартныеПодсистемыСервер <> Неопределено Тогда Попытка ТекущаяВерсия = МодульСтандартныеПодсистемыСервер.ВерсияБиблиотеки(); @@ -2155,7 +2094,7 @@ Функция БСД_ДоступнаТребуемаяВерсия(Знач Версия = Неопределено) ТекущаяВерсия = Неопределено; - МодульСтандартныеПодсистемыПовтИсп = ОбщийМодульСтандартныеПодсистемыПовтИсп(); + МодульСтандартныеПодсистемыПовтИсп = ОбщийМодуль("СтандартныеПодсистемыПовтИсп"); Если МодульСтандартныеПодсистемыПовтИсп <> Неопределено Тогда Попытка ТекущаяВерсия = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам["БиблиотекаСинхронизацииДанных"].Версия @@ -2197,7 +2136,7 @@ Функция БСП_КонтрольВыгрузкиОбъекта(Узел, ОбъектРегистрации) Отправка = ОтправкаЭлементаДанных.Авто; - МодульОбменДаннымиСобытия = ОбщийМодульОбменДаннымиСобытия(); + МодульОбменДаннымиСобытия = ОбщийМодуль("ОбменДаннымиСобытия"); Если МодульОбменДаннымиСобытия <> Неопределено Тогда МодульОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ОбъектРегистрации, Отправка, , Узел); Возврат Отправка = ОтправкаЭлементаДанных.Авто; @@ -2417,7 +2356,7 @@ Если Описание.ЭтоСсылка И ДоступнаПакетнаяРегистрация Тогда - МодульОбменДаннымиСобытия = ОбщийМодульОбменДаннымиСобытия(); + МодульОбменДаннымиСобытия = ОбщийМодуль("ОбменДаннымиСобытия"); МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ПараметрыПР = МодульОбменДаннымиСобытия.ПараметрыПакетнойРегистрации(); @@ -2457,6 +2396,15 @@ КонецФункции // Обновляет данные ИОМ и регистрируем на переданном узле. +// +// Параметры: +// Узел - ПланОбменаСсылка +// +// Возвращаемое значение: +// Структура: +// * Всего - Число +// * Успешно - Число +// * Команда - Булево // Функция БСП_ОбновитьИЗарегистрироватьИОМГлавногоУзла(Знач Узел) Экспорт @@ -2577,8 +2525,7 @@ Возврат Дерево; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции из базовой функциональности для обеспечения автономности. +#Область ПроцедурыИФункцииИзБазовойФункциональностиДляОбеспеченияАвтономности Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено) @@ -2592,6 +2539,8 @@ #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html index 686caec9c..ddc2c11a4 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html @@ -1,22 +1,22 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Описание свойств регламентного задания.</p> -<p>Как правило, необходимость в изменении свойств регламентных заданий возникает редко. Чаще всего, используется флажок <strong>Включено</strong>, с помощью которого можно отключить выполнение регламентного задания. </p> -<p>В некоторых случаях бывает необходимо задать два разных расписания для одного регламентного задания. Тогда в список можно добавить новое регламентное задание по одному из предопределенных шаблонов, предусмотренных в приложении.</p> +<p>Как правило, необходимость в изменении свойств регламентных заданий возникает редко. Чаще всего, используется флажок <strong>Включено</strong>, с помощью которого можно отключить выполнение регламентного задания. </p> +<p>В некоторых случаях бывает необходимо задать два разных расписания для одного регламентного задания. Тогда в список можно добавить новое регламентное задание по одному из предопределенных шаблонов, предусмотренных в приложении.</p> <h3>Свойства регламентного задания</h3> -<ul><li><strong>Включено</strong> - флажок позволяет включить или отключить выполнение регламентного задания.</li> -<li>С помощью ссылки <strong>Расписание</strong> можно настроить <a href="v8help://mngbase/jobschedule.lf">расписание регламентного задания</a>.</li> +<ul><li><strong>Включено</strong> - флажок позволяет включить или отключить выполнение регламентного задания.</li> +<li>С помощью ссылки <strong>Расписание</strong> можно настроить <a href="v8help://mngbase/jobschedule.lf">расписание регламентного задания</a>.</li> <li><strong>Наименование</strong> - наименование регламентного задания. Обычно пустое, и в качестве него применяется синоним, указанный в шаблоне регламентного задания, заданного в конфигураторе. Если синоним шаблона не задан, используется его имя. </li> -<li><strong>При ошибках повторять, раз</strong> - число попыток выполнения регламентного задания, при возникновении ошибки.  -<ul><li><strong>через, сек</strong> - пауза (в секундах) между попытками выполнения регламентного задания, при возникновении ошибки.</li></ul></li> -<li><b>Запускаться от имени</b> - имя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> информационной базы, который будет использован для выполнения регламентного задания. Выбирается из выпадающего списка <a href="Catalog.Пользователи/Help">Пользователи</a>.</li> -<li><strong>Ключ</strong> - нужен только для продвинутого администратора. Требуется для тонкой настройки выполнения регламентных заданий и для исследования нестандартных проблем в работе регламентных заданий, если таковые есть. Если ключ указан, то перед запуском <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.ФоновоеЗадание/Help">фонового задания</a> проверяется, что нет других активных фоновых заданий по тому же шаблону регламентного задания, который применен в экземпляре регламентного задания.</li> -<li><strong>Сообщение или информация об ошибке регламентного задания</strong> - поле содержит текст сообщений и текст сведений об ошибке, если сообщения и/или ошибки произошли при выполнении последнего фонового задания созданного по этому регламентному заданию. То же содержание доступно, если открыть последнее фоновое задание этого регламентного задания.</li></ul><p></p> +<li><strong>При ошибках повторять, раз</strong> - число попыток выполнения регламентного задания, при возникновении ошибки. +<ul><li><strong>через, сек</strong> - пауза (в секундах) между попытками выполнения регламентного задания, при возникновении ошибки.</li></ul></li> +<li><b>Запускаться от имени</b> - имя <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> информационной базы, который будет использован для выполнения регламентного задания. Выбирается из выпадающего списка <a href="Catalog.Пользователи/Help">Пользователи</a>.</li> +<li><strong>Ключ</strong> - нужен только для продвинутого администратора. Требуется для тонкой настройки выполнения регламентных заданий и для исследования нестандартных проблем в работе регламентных заданий, если таковые есть. Если ключ указан, то перед запуском <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.ФоновоеЗадание/Help">фонового задания</a> проверяется, что нет других активных фоновых заданий по тому же шаблону регламентного задания, который применен в экземпляре регламентного задания.</li> +<li><strong>Сообщение или информация об ошибке регламентного задания</strong> - поле содержит текст сообщений и текст сведений об ошибке, если сообщения и/или ошибки произошли при выполнении последнего фонового задания созданного по этому регламентному заданию. То же содержание доступно, если открыть последнее фоновое задание этого регламентного задания.</li></ul><p></p> <h3>Техническая информация</h3> -<p>Носит служебный характер и недоступна для редактирования. Предназначена только для разработчика конфигурации. </p> +<p>Носит служебный характер и недоступна для редактирования. Предназначена только для разработчика конфигурации. </p> <ul><li><strong>Предопределенно</strong>е - принимает значения <strong>Да</strong> и <strong>Нет</strong>. Непредопределенные (введенные вручную) регламентные задания используются в редких случаях.</li> -<li><strong>Имя</strong> - имя шаблона регламентного задания, определенного в конфигураторе.</li> -<li><strong>Синоним</strong> - синоним шаблона регламентного задания, определенного в конфигураторе.</li> -<li><strong>Имя метода</strong> - имя процедуры в конфигурации, которая будет выполняться по расписанию регламентного задания.</li> -<li><strong>Идентификатор</strong> - нужен только для продвинутого администратора, знающего встроенный язык. Требуется для исследования нестандартных проблем в работе регламентных заданий, если таковые есть.</li></ul><h3>См. также:</h3> +<li><strong>Имя</strong> - имя шаблона регламентного задания, определенного в конфигураторе.</li> +<li><strong>Синоним</strong> - синоним шаблона регламентного задания, определенного в конфигураторе.</li> +<li><strong>Имя метода</strong> - имя процедуры в конфигурации, которая будет выполняться по расписанию регламентного задания.</li> +<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 b334a3b1e..604b787a4 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -45,7 +45,8 @@ <id>285</id> <title> <key>ru</key> - <value>Работа со всеми внешними ресурсами (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, заблокирована для предотвращения конфликтов с основной информационной базой. <link Разблокировать>Разблокировать</>.</value> + <value>Работа со всеми внешними ресурсами (синхронизация данных, отправка почты и т.п.), выполняемая в фоне по расписанию, заблокирована для предотвращения конфликтов с основной информационной базой. +<link Разблокировать>Разблокировать</></value> true true @@ -70,12 +71,14 @@ true Label true + Center URLProcessing ПояснениеБлокировкаРаботыСВнешнимиРесурсамиОбработкаНавигационнойСсылки Left + Center 2 @@ -149,7 +152,7 @@ 300 <key>ru</key> - <value>Выполняется формирование списка регламентных заданий...</value> + <value>Формируется список регламентных заданий...</value> true true @@ -904,6 +907,37 @@ Auto InAdditionalSubmenu + + ТаблицаРегламентныеЗаданияЗаблокироватьРаботуСВнешнимиРесурсами + 321 + + <key>ru</key> + <value>Заблокировать работу с внешними ресурсами</value> + + true + true + + true + + + ТаблицаРегламентныеЗаданияЗаблокироватьРаботуСВнешнимиРесурсамиРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Form.Command.ЗаблокироватьРаботуСВнешнимиРесурсами + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ТаблицаРегламентныеЗаданияИзменитьФорму 244 @@ -1702,23 +1736,238 @@ - ПоПериоду - 150 - - ДекорацияЗаПериод - 241 - - <key>ru</key> - <value>За период:</value> - + ГруппаПериодРегламентноеЗадание + 319 + + ПоПериоду + 150 + + ВидОтбораПоПериоду + 110 + + <key>ru</key> + <value>За период</value> + + true + true + + true + + + ВидОтбораПоПериоду + + Left + + OnChange + ВидОтбораПоПериодуПриИзменении + + + ВидОтбораПоПериодуРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + ВидОтбораПоПериодуКонтекстноеМеню + 111 + true + + InputField + Enter + true + Left + true + + 15 + 15 + true + true + true + true + true + true + + + ru + Все время + + + 0 + + + + + ru + Прошлая ночь + + + 1 + + + + + ru + Вчера + + + 2 + + + + + ru + Сегодня + + + 3 + + + + + ru + Произвольный + + + 4 + + + Normal + + + + УстановкаПроизвольногоПериода + 112 + + ОтборПериодС + 113 + + <key>ru</key> + <value>с</value> + + true + true + + true + + + ОтборПериодС + + + ОтборПериодСРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + + ОтборПериодСКонтекстноеМеню + 114 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ОтборПериодПо + 115 + + <key>ru</key> + <value>по</value> + + true + true + + true + + + ОтборПериодПо + + + ОтборПериодПоРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + + ОтборПериодПоКонтекстноеМеню + 116 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + true + + true + + + <key>ru</key> + <value>Установка произвольного периода</value> + + + УстановкаПроизвольногоПериодаРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + true true true + + <key>ru</key> + <value>По периоду</value> + - ДекорацияЗаПериодРасширеннаяПодсказка - 243 + ПоПериодуРасширеннаяПодсказка + 211 Label true true @@ -1726,122 +1975,24 @@ Left - - ДекорацияЗаПериодКонтекстноеМеню - 242 - true - - Label - true - - Left - - - - ВидОтбораПоПериоду - 110 - - <key>ru</key> - <value>Вид отбора по периоду</value> - - true - true - - true - - - ВидОтбораПоПериоду - - None - - OnChange - ВидОтбораПоПериодуПриИзменении - - - ВидОтбораПоПериодуРасширеннаяПодсказка - 213 - Label - true - true - - Left - - - - ВидОтбораПоПериодуКонтекстноеМеню - 111 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - - - ru - Все время - - - 0 - - - - - ru - Прошлая ночь - - - 1 - - - - - ru - Вчера - - - 2 - - - - - ru - Сегодня - - - 3 - - - - - ru - Произвольный - - - 4 - - - Normal + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto - УстановкаПроизвольногоПериода - 112 + ПоРегламентномуЗаданию + 96 - ОтборПериодС - 113 + ОтбиратьПоРегламентномуЗаданию + 94 <key>ru</key> - <value>с</value> + <value>По регламентному заданию:</value> true true @@ -1849,11 +2000,20 @@ true - ОтборПериодС + ОтбиратьПоРегламентномуЗаданию + Right + + ru + Включить отбор по регламентному заданию + + + OnChange + ОтбиратьПоРегламентномуЗаданиюПриИзменении + - ОтборПериодСРасширеннаяПодсказка - 217 + ОтбиратьПоРегламентномуЗаданиюРасширеннаяПодсказка + 220 Label true true @@ -1862,42 +2022,40 @@ - ОтборПериодСКонтекстноеМеню - 114 + ОтбиратьПоРегламентномуЗаданиюКонтекстноеМеню + 95 true - InputField + CheckBoxField Enter true Left true - - true - true - true - true - true - Normal - + - ОтборПериодПо - 115 + РегламентноеЗаданиеДляОтбора + 56 <key>ru</key> - <value>по</value> + <value>Регламентное задание для отбора идентификатор</value> true - true + false true - ОтборПериодПо + РегламентноеЗаданиеДляОтбораИдентификатор + None + + ru + Регламентное задание для отбора + - ОтборПериодПоРасширеннаяПодсказка - 218 + РегламентноеЗаданиеДляОтбораРасширеннаяПодсказка + 221 Label true true @@ -1906,8 +2064,8 @@ - ОтборПериодПоКонтекстноеМеню - 116 + РегламентноеЗаданиеДляОтбораКонтекстноеМеню + 57 true InputField @@ -1916,25 +2074,32 @@ Left true + + Clearing + РегламентноеЗаданиеДляОтбораОчистка + true true + true + false + true true true - true Normal + true true true <key>ru</key> - <value>Установка произвольного периода</value> + <value>По регламентному заданию</value> - УстановкаПроизвольногоПериодаРасширеннаяПодсказка - 216 + ПоРегламентномуЗаданиюРасширеннаяПодсказка + 219 Label true true @@ -1958,143 +2123,11 @@ <key>ru</key> - <value>По периоду</value> + <value>Период регламентное задание</value> - ПоПериодуРасширеннаяПодсказка - 211 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - ПоРегламентномуЗаданию - 96 - - ОтбиратьПоРегламентномуЗаданию - 94 - - <key>ru</key> - <value>Отбирать по регламентному заданию:</value> - - true - true - - true - - - ОтбиратьПоРегламентномуЗаданию - - Right - - ru - Включить отбор по регламентному заданию - - - OnChange - ОтбиратьПоРегламентномуЗаданиюПриИзменении - - - ОтбиратьПоРегламентномуЗаданиюРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - - ОтбиратьПоРегламентномуЗаданиюКонтекстноеМеню - 95 - true - - CheckBoxField - Enter - true - Left - true - - - - РегламентноеЗаданиеДляОтбора - 56 - - <key>ru</key> - <value>Регламентное задание для отбора идентификатор</value> - - true - false - - true - - - РегламентноеЗаданиеДляОтбораИдентификатор - - None - - ru - Регламентное задание для отбора - - - РегламентноеЗаданиеДляОтбораРасширеннаяПодсказка - 221 - Label - true - true - - Left - - - - РегламентноеЗаданиеДляОтбораКонтекстноеМеню - 57 - true - - InputField - Enter - true - Left - true - - - Clearing - РегламентноеЗаданиеДляОтбораОчистка - - true - true - true - false - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>По регламентному заданию</value> - - - ПоРегламентномуЗаданиюРасширеннаяПодсказка - 219 + ГруппаПериодРегламентноеЗаданиеРасширеннаяПодсказка + 320 Label true true @@ -2105,6 +2138,7 @@ UsualGroup HorizontalIfPossible + Auto true true Auto @@ -3557,19 +3591,6 @@
                          true
                          - - НастройкиЗагружены - 19 - - Boolean - - - true - - - true - - ТекстНеопределено 20 @@ -3977,6 +3998,24 @@ DontUse Auto + + ЗаблокироватьРаботуСВнешнимиРесурсами + + <key>ru</key> + <value>Заблокировать работу с внешними ресурсами</value> + + 11 + + true + + + + ЗаблокироватьРаботуСВнешнимиРесурсами + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index a2af114b9..2ec23ddf2 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -17,6 +17,8 @@ ВызватьИсключение(НСтр("ru = 'Недостаточно прав доступа.'"), КатегорияОшибки.НарушениеПравДоступа); КонецЕсли; + ЗаполнитьНастройкиФормы(Новый Соответствие); + ПустойИдентификатор = Строка(ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор()); ТекстНеОпределено = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); @@ -26,7 +28,9 @@ Элементы.ТаблицаРегламентныеЗаданияВыполнитьНеВФоне.Видимость = Истина; КонецЕсли; - Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована(); + РаботаСВнешнимиРесурсамиЗаблокирована = РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована(); + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = РаботаСВнешнимиРесурсамиЗаблокирована; + Элементы.ТаблицаРегламентныеЗаданияЗаблокироватьРаботуСВнешнимиРесурсами.Доступность = НЕ РаботаСВнешнимиРесурсамиЗаблокирована; Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда @@ -41,10 +45,6 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если НЕ НастройкиЗагружены Тогда - ЗаполнитьНастройкиФормы(Новый Соответствие); - КонецЕсли; - ЗагрузитьРегламентныеЗадания(); КонецПроцедуры @@ -61,6 +61,12 @@ КонецЕсли; ИначеЕсли ИмяСобытия = "РазрешенаРаботаСВнешнимиРесурсами" Тогда Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = Ложь; + Элементы.ТаблицаРегламентныеЗаданияЗаблокироватьРаботуСВнешнимиРесурсами.Доступность = Истина; + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + ИначеЕсли ИмяСобытия = "ЗапрещенаРаботаСВнешнимиРесурсами" Тогда + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = Истина; + Элементы.ТаблицаРегламентныеЗаданияЗаблокироватьРаботуСВнешнимиРесурсами.Доступность = Ложь; + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); ИначеЕсли ИмяСобытия = "Запись_НаборКонстант" Тогда ПодключитьОбработчикОжидания("ОтложенноеОбновлениеРегламентныхЗаданий", 0.1, Истина); КонецЕсли; @@ -72,8 +78,6 @@ ЗаполнитьНастройкиФормы(Настройки); - НастройкиЗагружены = Истина; - КонецПроцедуры #КонецОбласти @@ -462,6 +466,25 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗаблокироватьРаботуСВнешнимиРесурсами(Команда) + + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ЗаблокироватьРаботуСВнешнимиРесурсамиЗавершение", ЭтотОбъект); + ТекстСообщения = НСтр("ru = 'Работа со всеми внешними ресурсами (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, будет заблокирована. + | + |Возможные причины для блокировки: + |• Ошибочная отметка базы, как перемещенной + |• Необходимость временной блокировки регламентных заданий'"); + СписокКнопок = Новый СписокЗначений(); + СписокКнопок.Добавить(КодВозвратаДиалога.Да, "Заблокировать"); + СписокКнопок.Добавить(КодВозвратаДиалога.Нет, "Отмена"); + ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, + ТекстСообщения, + СписокКнопок, , + КодВозвратаДиалога.Нет, НСтр("ru = 'Блокировка работы с внешними ресурсами'")); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -637,39 +660,33 @@ НастройкиПоУмолчанию = Новый Структура; - // Настройка отбора фоновых заданий. Если Настройки.Получить("ОтборПоСостояниюАктивно") = Неопределено Тогда Настройки.Вставить("ОтборПоСостояниюАктивно", Истина); КонецЕсли; Если Настройки.Получить("ОтборПоСостояниюЗавершено") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюЗавершено", Истина); + Настройки.Вставить("ОтборПоСостояниюЗавершено", Ложь); КонецЕсли; Если Настройки.Получить("ОтборПоСостояниюЗавершеноАварийно") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюЗавершеноАварийно", Истина); + Настройки.Вставить("ОтборПоСостояниюЗавершеноАварийно", Ложь); КонецЕсли; Если Настройки.Получить("ОтборПоСостояниюОтменено") = Неопределено Тогда - Настройки.Вставить("ОтборПоСостояниюОтменено", Истина); + Настройки.Вставить("ОтборПоСостояниюОтменено", Ложь); КонецЕсли; Если Настройки.Получить("ОтбиратьПоРегламентномуЗаданию") = Неопределено - ИЛИ Настройки.Получить("РегламентноеЗаданиеДляОтбораИдентификатор") = Неопределено Тогда + ИЛИ Настройки.Получить("РегламентноеЗаданиеДляОтбораИдентификатор") = Неопределено Тогда Настройки.Вставить("ОтбиратьПоРегламентномуЗаданию", Ложь); Настройки.Вставить("РегламентноеЗаданиеДляОтбораИдентификатор", ПустойИдентификатор); КонецЕсли; - // Настройка отбора по периоду "За все время". // См. также обработчик события ВидОтбораПоПериодуПриИзменении переключателя. - Если Настройки.Получить("ВидОтбораПоПериоду") = Неопределено - ИЛИ Настройки.Получить("ОтборПериодС") = Неопределено - ИЛИ Настройки.Получить("ОтборПериодПо") = Неопределено Тогда + Если Настройки.Получить("ВидОтбораПоПериоду") = Неопределено Тогда - Настройки.Вставить("ВидОтбораПоПериоду", 0); + Настройки.Вставить("ВидОтбораПоПериоду", 3); // за сегодня ТекущаяДатаСеанса = ТекущаяДатаСеанса(); - Настройки.Вставить("ОтборПериодС", НачалоДня(ТекущаяДатаСеанса) - 3*3600); - Настройки.Вставить("ОтборПериодПо", НачалоДня(ТекущаяДатаСеанса) + 9*3600); КонецЕсли; Для Каждого Настройка Из Настройки Цикл @@ -678,7 +695,6 @@ ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПоУмолчанию); - // Настройка видимости и доступности. Элементы.УстановкаПроизвольногоПериода.Видимость = (ВидОтбораПоПериоду = 4); Элементы.ОтборПериодС.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); Элементы.ОтборПериодПо.ТолькоПросмотр = НЕ (ВидОтбораПоПериоду = 4); @@ -919,8 +935,22 @@ РегламентныеЗаданияСервер.РазблокироватьРаботуСВнешнимиРесурсами(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Фоновая загрузка регламентных заданий. +&НаКлиенте +Процедура ЗаблокироватьРаботуСВнешнимиРесурсамиЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ЗаблокироватьРаботуСВнешнимиРесурсамиНаСервере(); + Оповестить("ЗапрещенаРаботаСВнешнимиРесурсами"); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаблокироватьРаботуСВнешнимиРесурсамиНаСервере() + РегламентныеЗаданияСервер.ЗаблокироватьРаботуСВнешнимиРесурсами(); +КонецПроцедуры + +#Область ФоноваяЗагрузкаРегламентныхЗаданий &НаКлиенте Процедура ЗагрузитьРегламентныеЗадания(ИдентификаторЗадания = Неопределено, ОбновитьНезаметно = Ложь) @@ -931,7 +961,7 @@ Если Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные <> Неопределено Тогда ИдентификаторТекущейСтроки = Элементы.ТаблицаРегламентныеЗадания.ТекущиеДанные.Идентификатор; КонецЕсли; - Результат = ЗагрузкаРегламентныхЗаданий(ИдентификаторЗадания); + Результат = ЗагрузитьРегламентныеЗаданияСервер(ИдентификаторЗадания); ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; @@ -957,14 +987,13 @@ Элементы.СтраницыОтложеннаяЗагрузкаРегламентныхЗаданий.ТекущаяСтраница = Элементы.СтраницаРегламентныеЗадания; ИначеЕсли Результат.Статус = "Ошибка" Тогда Элементы.СтраницыОтложеннаяЗагрузкаРегламентныхЗаданий.ТекущаяСтраница = Элементы.СтраницаРегламентныеЗадания; - СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке( - Результат.ИнформацияОбОшибке); + СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке); КонецЕсли; КонецПроцедуры &НаСервере -Функция ЗагрузкаРегламентныхЗаданий(ИдентификаторЗадания) +Функция ЗагрузитьРегламентныеЗаданияСервер(ИдентификаторЗадания) Если РезультатВыполнения <> Неопределено И ЗначениеЗаполнено(РезультатВыполнения.ИдентификаторЗадания) Тогда @@ -1001,6 +1030,8 @@ Процедура ОбработатьРезультат(ПараметрыЗадания) Результат = ПолучитьИзВременногоХранилища(ПараметрыЗадания.АдресРезультата); + УдалитьИзВременногоХранилища(ПараметрыЗадания.АдресРезультата); + ОтключенныеЗадания.Очистить(); Для Каждого ЭлементСписка Из Результат.ОтключенныеЗадания Цикл ОтключенныеЗадания.Добавить(ЭлементСписка.Значение); @@ -1042,8 +1073,9 @@ Возврат "<>"; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Фоновая загрузка фоновых заданий. +#КонецОбласти + +#Область ФоноваяЗагрузкаФоновыхЗаданий &НаКлиенте Процедура ОбновитьТаблицуФоновыхЗаданийНаКлиенте() @@ -1080,7 +1112,7 @@ Если Результат.Статус = "Выполнено" Тогда ОбновитьТаблицуФоновыхЗаданий(Результат.АдресРезультата); ИначеЕсли Результат.Статус = "Ошибка" Тогда - ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ВызватьИсключение Результат.ИнформацияОбОшибке; КонецЕсли; Возврат Результат; @@ -1090,10 +1122,7 @@ &НаСервере Функция ОтборФоновыхЗаданий() - // 1. Подготовка отбора. Отбор = Новый Структура; - - // 1.1. Добавление отбора по состояниям. МассивСостояний = Новый Массив; Если ОтборПоСостояниюАктивно Тогда @@ -1113,23 +1142,16 @@ КонецЕсли; Если МассивСостояний.Количество() <> 4 Тогда - Если МассивСостояний.Количество() = 1 Тогда - Отбор.Вставить("Состояние", МассивСостояний[0]); - Иначе - Отбор.Вставить("Состояние", МассивСостояний); - КонецЕсли; + Отбор.Вставить("Состояние", ?(МассивСостояний.Количество() = 1, МассивСостояний[0], МассивСостояний)); КонецЕсли; - // 1.2. Добавление отбора по регламентному заданию. Если ОтбиратьПоРегламентномуЗаданию Тогда - Отбор.Вставить( - "ИдентификаторРегламентногоЗадания", - ?(РегламентноеЗаданиеДляОтбораИдентификатор = ПустойИдентификатор, - "", - РегламентноеЗаданиеДляОтбораИдентификатор)); + Отбор.Вставить("ИдентификаторРегламентногоЗадания", + ?(РегламентноеЗаданиеДляОтбораИдентификатор = ПустойИдентификатор, + "", + РегламентноеЗаданиеДляОтбораИдентификатор)); КонецЕсли; - // 1.3. Добавление отбора по периоду. Если ВидОтбораПоПериоду <> 0 Тогда ОбновитьАвтоматическийПериод(ЭтотОбъект, ТекущаяДатаСеанса()); Отбор.Вставить("Начало", ОтборПериодС); @@ -1143,8 +1165,6 @@ &НаСервере Процедура ОбновитьТаблицуФоновыхЗаданий(АдресРезультата = Неопределено) - // Обновление списка фоновых заданий. - Если АдресРезультата <> Неопределено Тогда ДанныеИзХранилища = ПолучитьИзВременногоХранилища(АдресРезультата); ТекущаяТаблица = ДанныеИзХранилища.ТаблицаСвойств; @@ -1159,9 +1179,7 @@ Если Индекс >= Таблица.Количество() ИЛИ Таблица.Получить(Индекс).Идентификатор <> Задание.Идентификатор Тогда - // Вставка нового задания. Обновляемое = Таблица.Вставить(Индекс); - // Установка уникального идентификатора. Обновляемое.Идентификатор = Задание.Идентификатор; Иначе Обновляемое = Таблица[Индекс]; @@ -1182,16 +1200,13 @@ Обновляемое.ИдентификаторРегламентногоЗадания = ТекстНеОпределено; КонецЕсли; - // Получение информации об ошибках. Обновляемое.СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный.СообщенияИОписанияОшибокФоновогоЗадания( Обновляемое.Идентификатор, Задание); - // Увеличение индекса Индекс = Индекс + 1; КонецЦикла; - // Удаление лишних строк. Пока Индекс < Таблица.Количество() Цикл Таблица.Удалить(Таблица.Количество()-1); КонецЦикла; @@ -1227,8 +1242,7 @@ ИначеЕсли Результат.Статус = "Ошибка" Тогда Элементы.ГруппаШапка.Доступность = Истина; Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаФоновыеЗадания; - СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке( - Результат.ИнформацияОбОшибке); + СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке); КонецЕсли; КонецПроцедуры @@ -1267,3 +1281,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html index 7e5f4d172..e3a02f48e 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html @@ -1,12 +1,12 @@ -

                          Описание свойств фонового задания.

                          -
                          • Наименование - копия поля Наименование регламентного задания. При применении кнопки Выполнить сейчас на командной панели регламентного задания, наименованию фонового задания присваивается значение "Запуск вручную: <Представление регламентного задания>". +

                            Описание свойств фонового задания.

                            +
                            • Наименование - копия поля Наименование регламентного задания. При применении кнопки Выполнить сейчас на командной панели регламентного задания, наименованию фонового задания присваивается значение "Запуск вручную: <Представление регламентного задания>".
                            • Состояние - возможны значения: "Задание выполнено", "Задание завершено с ошибками", "Задание отменено пользователем", "Задание выполняется".
                            • Дата начала - дата и время начала выполнения фонового задания.
                            • Дата окончания - дата и время окончания выполнения фонового задания (если задание еще выполняется, тогда пустая дата и время: <>). -
                            • Место выполнения - имя компьютера сети без домена, на котором выполнялось фоновое задание. Это либо имя сервера, либо имя компьютера пользователя, если регламентные задания обрабатывались в файловой информационной базе.
                            • Идентификатор - нужен только для продвинутого администратора, знающего внутренний язык 1С. Требуется для исследования нестандартных проблем в работе фоновых заданий, если таковые есть. -
                            • Ключ - значение поля Ключ, указанного в регламентном задании (на момент создания фонового задания) или другое, указанное явно, если фоновое задание создано программно, а не планировщиком сервера. -
                            • Имя метода метаданных - имя процедуры в конфигурации, которая выполняется или выполнялась в фоновом задании. Обычно соответствует значению поля Имя метода соответствующего регламентного задания.
                            • Наименование - выбирается одно из значений полей (по порядку поиска заполненного): +
                            • Место выполнения - имя компьютера сети без домена, на котором выполнялось фоновое задание. Это либо имя сервера, либо имя компьютера пользователя, если регламентные задания обрабатывались в файловой информационной базе.
                            • Идентификатор - нужен только для продвинутого администратора, знающего внутренний язык 1С. Требуется для исследования нестандартных проблем в работе фоновых заданий, если таковые есть. +
                            • Ключ - значение поля Ключ, указанного в регламентном задании (на момент создания фонового задания) или другое, указанное явно, если фоновое задание создано программно, а не планировщиком сервера. +
                            • Имя метода метаданных - имя процедуры в конфигурации, которая выполняется или выполнялась в фоновом задании. Обычно соответствует значению поля Имя метода соответствующего регламентного задания.
                            • Наименование - выбирается одно из значений полей (по порядку поиска заполненного):
                              • Наименование;
                              • Синоним;
                              • Имя.
                            • Идентификатор - идентификатор регламентного задания, соответствующий фоновому заданию.
                            • Сообщение - поле содержит текст сообщений и текст сведений об ошибке, если ошибки произошли при выполнении фонового задания.

                            См. также:

                            diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index a65c3c846..af3f96bc8 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html @@ -1,16 +1,16 @@ -

                            Предназначен для администрирования регламентных и фоновых заданий.

                            -

                            Ряд действий в приложении может выполняться автоматически в фоновом режиме, по определенному расписанию. Такие действия называются регламентными заданиями, например, это ежедневная загрузка курсов валют, регулярная рассылка отчетов, отложенное проведение документов и т.п. Регламентные задания облегчают работу в приложении, позволяя перенести выполнение рутинных задач в само приложение, и в то же время они снижают человеческий фактор (например, можно забыть загрузить курсы валют в один из перегруженных другими задачами дней).

                            -

                            Открывается по команде Регламентные и фоновые задания в разделе Администрирование - Обслуживание - Регламентные операции.

                            -

                            Список предоставляет следующие возможности: 

                            +

                            Предназначен для администрирования регламентных и фоновых заданий.

                            +

                            Ряд действий в приложении может выполняться автоматически в фоновом режиме, по определенному расписанию. Такие действия называются регламентными заданиями, например, это ежедневная загрузка курсов валют, регулярная рассылка отчетов, отложенное проведение документов и т.п. Регламентные задания облегчают работу в приложении, позволяя перенести выполнение рутинных задач в само приложение, и в то же время они снижают человеческий фактор (например, можно забыть загрузить курсы валют в один из перегруженных другими задачами дней).

                            +

                            Открывается по команде Регламентные и фоновые задания в разделе Администрирование - Обслуживание - Регламентные операции.

                            +

                            Список предоставляет следующие возможности:

                            Регламентные задания

                            +
                          • Контроль выполнения регламентных заданий.

                          Регламентные задания

                          В списке можно включить (или отключить) то или иное регламентное задание и поменять расписание.

                          В списке выводится:

                          -
                          •  - флажок в колонке означает, что регламентное задание Включено и выполняется в соответствии с заданным расписанием; +
                            • - флажок в колонке означает, что регламентное задание Включено и выполняется в соответствии с заданным расписанием;
                            • Наименование - полное наименование регламентного задания;
                            • @@ -19,25 +19,25 @@
                            • Дата окончания - дата и время завершения регламентного задания.

                            Если в колонках Состояние и Дата окончания проставлено <не определено>, а флажок включен, следует проверить расписание регламентного задания. Возможно, оно некорректное, поэтому регламентное задание не может выполняться.

                            Обновление списка

                            • -
                              С помощью кнопки Обновить можно актуализировать информацию в списке регламентных заданий, а также на вкладке Фоновые задания, т.к. списки связаны, при этом будет произведен отбор в соответствии с указанными ранее настройками.

                            Настройка расписания

                            +
                            С помощью кнопки Обновить можно актуализировать информацию в списке регламентных заданий, а также на вкладке Фоновые задания, т.к. списки связаны, при этом будет произведен отбор в соответствии с указанными ранее настройками.

                          Настройка расписания

                          • -
                            Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение. В приложении поддерживаются однократные и периодические расписания.
                            +
                            Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение. В приложении поддерживаются однократные и периодические расписания.
                          • Нажмите Настроить расписание.

                          Выполнение регламентного задания

                          • -
                            Для того чтобы начать выполнение регламентного задания сразу же, нажмите Выполнить сейчас. 
                            +
                            Для того чтобы начать выполнение регламентного задания сразу же, нажмите Выполнить сейчас.
                          • -
                            В файловом режиме работы приложения оно будет выполнено в текущем сеансе.
                            +
                            В файловом режиме работы приложения оно будет выполнено в текущем сеансе.
                          • -
                            В клиент-серверном режиме работы приложения выполнение произойдет в фоновом задании на сервере. При выполнении процедуры в фоновом задании на сервере не меняется дата последнего выполнения, используемая для запуска по расписанию.
                            +
                            В клиент-серверном режиме работы приложения выполнение произойдет в фоновом задании на сервере. При выполнении процедуры в фоновом задании на сервере не меняется дата последнего выполнения, используемая для запуска по расписанию.
                          • -
                            Одновременное выполнение двух версий одного и того же регламентного задания невозможно. Если запустить то же самое регламентное задание, которое выполняется в данный момент, то приложение выведет сообщение о невозможности вторичного запуска регламентного задания.

                          Ввод нового регламентного задания

                          +
                          Одновременное выполнение двух версий одного и того же регламентного задания невозможно. Если запустить то же самое регламентное задание, которое выполняется в данный момент, то приложение выведет сообщение о невозможности вторичного запуска регламентного задания.

                        Ввод нового регламентного задания

                        • -
                          В некоторых случаях бывает необходимо задать два разных расписания для одного регламентного задания. Тогда в список можно добавить новое регламентное задание по одному из предопределенных шаблонов, предусмотренных в приложении.
                          +
                          В некоторых случаях бывает необходимо задать два разных расписания для одного регламентного задания. Тогда в список можно добавить новое регламентное задание по одному из предопределенных шаблонов, предусмотренных в приложении.
                        • Нажмите Добавить, выберите из списка шаблон, нажмите кнопку ОК. Заполните необходимые поля.

                        Включение регламентного задания

                        @@ -58,7 +58,7 @@ +
                      • сегодня - стандартный период 24 часа с 00:00-23:59 сегодняшнего дня.
                      • Отбор Описание
                        По состоянию -
                        • Позволяет выполнить отбор по состоянию (дополнительно к отбору по периоду и по регламентному заданию): +
                          • Позволяет выполнить отбор по состоянию (дополнительно к отбору по периоду и по регламентному заданию):
                            • Выполнено;
                            • Завершено с ошибками; @@ -72,32 +72,32 @@
                              Позволяет выполнить отбор по периоду (дополнительно к отбору по состоянию и по регламентному заданию):
                              • произвольный - можно установить нестандартный период;
                              • -
                              • все время - отбор по периоду не выполняется; +
                              • все время - отбор по периоду не выполняется;
                              • -
                              • прошлая ночь - стандартный период 12 часов с 21:00-09:00; +
                              • прошлая ночь - стандартный период 12 часов с 21:00-09:00;
                              • вчера - стандартный период 24 часа с 00:00-23:59 вчерашнего дня;
                              • -
                              • сегодня - стандартный период 24 часа с 00:00-23:59 сегодняшнего дня.
                        По регламентному заданию
                        По регламентному заданию
                        • Позволяет выполнить отбор по регламентному заданию (дополнительно к отбору по состоянию и по периоду).
                        • -
                        • Включите флажок Отбирать по регламентному заданию. +
                        • Включите флажок Отбирать по регламентному заданию.
                        • Выберите наименование регламентного задания из списка.
                        • -
                        • Наименование регламентного задания "<не определено>" используется для отбора фоновых заданий,
                          запущенных для выполнения прочих (не регламентных) заданий.

                        Внимание! Для того чтобы отобрать фоновые задания в соответствии с выбранными настройками, нажмите Обновить.

                        +
                      • Наименование регламентного задания "<не определено>" используется для отбора фоновых заданий,
                        запущенных для выполнения прочих (не регламентных) заданий.

                      Внимание! Для того чтобы отобрать фоновые задания в соответствии с выбранными настройками, нажмите Обновить.

                      Просмотр информации о фоновом задании

                      -
                      • Для того чтобы просмотреть свойства фонового задания, дважды щелкните мышью по нужной строке. Также можно нажать Открыть.

                      Контроль выполнения регламентных заданий

                      -
                      • Контроль может быть либо простым, либо детальным. +
                        • Для того чтобы просмотреть свойства фонового задания, дважды щелкните мышью по нужной строке. Также можно нажать Открыть.

                        Контроль выполнения регламентных заданий

                        +
                        • Контроль может быть либо простым, либо детальным.
                        • -
                        • Простой контроль - это анализ колонок Состояние и Дата окончания на вкладке Регламентные задания, а также анализ текста поля Сообщения пользователю и описание информации об ошибке в окне редактирования регламентного задания. +
                        • Простой контроль - это анализ колонок Состояние и Дата окончания на вкладке Регламентные задания, а также анализ текста поля Сообщения пользователю и описание информации об ошибке в окне редактирования регламентного задания.
                        • Детальный контроль - это анализ списка фоновых заданий (на вкладке Фоновые задания), которые были созданы и выполнены для выполнения регламентного задания.
                        • Детальный контроль производится отбором фоновых заданий по интересующему регламентному заданию, и анализом реквизитов фоновых заданий. Следует учитывать, что сведения о выполнении регламентного задания получаются выборкой части сведений о выполнении последнего фонового задания.
                        • -
                        • Отбор фоновых заданий производится только по команде Обновить, поэтому после изменения настройки отбора нужно выполнить эту команду. +
                        • Отбор фоновых заданий производится только по команде Обновить, поэтому после изменения настройки отбора нужно выполнить эту команду.
                        • -
                        • Для детального анализа хода выполнения регламентных заданий в клиент-серверном режиме см. отчет Продолжительность работы регламентных заданий из группы отчетов Контроль работы пользователей, который открывается по соответствующей команде в разделе Администрирование - Обслуживание - Отчеты администратора.

                        См. также:

                        +
                      • Для детального анализа хода выполнения регламентных заданий в клиент-серверном режиме см. отчет Продолжительность работы регламентных заданий из группы отчетов Контроль работы пользователей, который открывается по соответствующей команде в разделе Администрирование - Обслуживание - Отчеты администратора.

                      См. также:

                      \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html index 78846dc1f..92b728242 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html @@ -1,15 +1,15 @@ -

                      Предназначена для восстановления данных из резервной копии.

                      +

                      Предназначена для восстановления данных из резервной копии.

                      Открывается командой Восстановление из резервной копии раздела Администрирование - Обслуживание - Резервное копирование и восстановление.

                      -

                      В любой момент времени можно восстановить данные из созданной ранее резервной копии. Необходимо учитывать, что все данные в восстановленной информационно базе будут актуальны на момент создания копии. Данные, введенные в приложение после создания резервной копии, будут отсутствовать в восстановленной ИБ.

                      +

                      В любой момент времени можно восстановить данные из созданной ранее резервной копии. Необходимо учитывать, что все данные в восстановленной информационно базе будут актуальны на момент создания копии. Данные, введенные в приложение после создания резервной копии, будут отсутствовать в восстановленной ИБ.

                      Восстановление данных

                      -
                      • С помощью кнопки  Выбрать укажите путь к файлу с резервной копией, из которого будет восстановлена информационная база (поле обязательно для заполнения). +
                        • С помощью кнопки Выбрать укажите путь к файлу с резервной копией, из которого будет восстановлена информационная база (поле обязательно для заполнения).
                        • В данном помощнике при восстановлении данных можно использовать только архивы формата .zip, содержащие один файл - файл информационной базы 1cv8.cd. Лучше всего использовать архивы, созданные помощником создания резервной копии.
                        • -
                        • Приложение выводит предупреждение о том, что имеются другие пользователи, которые кроме вас работают с информационной базой в текущий момент. Перейдите по ссылке, для того чтобы Посмотреть список активных сеансов. +
                        • Приложение выводит предупреждение о том, что имеются другие пользователи, которые кроме вас работают с информационной базой в текущий момент. Перейдите по ссылке, для того чтобы Посмотреть список активных сеансов.
                        • -
                        • Нажмите Восстановить данные. Если присутствуют активные сеансы, будет запущен механизм отключения их от информационной базы. Затем приложение выполнит восстановление данных.

                        Вход в базу в случае сбоя восстановления данных

                        -
                        • Важно: Для того чтобы войти в информационную базу, если восстановление данных не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /C РазрешитьРаботуПользователей /UC РезервноеКопирование.

                        См. также:

                        +
                      • Нажмите Восстановить данные. Если присутствуют активные сеансы, будет запущен механизм отключения их от информационной базы. Затем приложение выполнит восстановление данных.

                      Вход в базу в случае сбоя восстановления данных

                      +
                      • >Важно: Для того чтобы войти в информационную базу, если восстановление данных не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /C РазрешитьРаботуПользователей /UC РезервноеКопирование.

                      См. также:

                      \ No newline at end of file +Работа с формами.
                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index 857cec884..e64281f14 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -328,8 +328,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры обработчиков ожидания. +#Область ПроцедурыОбработчиковОжидания &НаКлиенте Процедура ИстечениеВремениОжидания() @@ -408,8 +407,9 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции подготовки восстановления данных. +#КонецОбласти + +#Область ПроцедурыИФункцииПодготовкиВосстановленияДанных #Если Не ВебКлиент И Не МобильныйКлиент Тогда @@ -423,6 +423,7 @@ ПараметрыСкрипта.ИмяФайлаПрограммы = ПараметрыКопирования.ИмяФайлаПрограммы; ПараметрыСкрипта.СобытиеЖурналаРегистрации = ПараметрыКопирования.СобытиеЖурналаРегистрации; ПараметрыСкрипта.ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); + ПараметрыСкрипта.ПутьКCOMСоединителю = КаталогПрограммы() + "comcntr.dll"; ПараметрыСкрипта.ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыКлиент.ЭтоБазоваяВерсияКонфигурации(); ПараметрыСкрипта.ПараметрыСкрипта = РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ); ПараметрыСкрипта.ПараметрыЗапускаПредприятия = ОбщегоНазначенияСлужебныйКлиент.ПараметрыЗапускаПредприятияИзСкрипта(); @@ -558,3 +559,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html index dbac683f8..77f720b33 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html @@ -1,27 +1,27 @@ -

                    Предназначена для создания резервной копии информационной базы.

                    -

                    Рекомендуется создавать резервные копии перед любой операцией в приложении, которая может необратимо изменить большие объемы данных, например, перед групповым изменением реквизитов объектов приложения. В этом случае необходимо выполнить резервное копирование в ручном режиме.

                    +

                    Предназначена для создания резервной копии информационной базы.

                    +

                    Рекомендуется создавать резервные копии перед любой операцией в приложении, которая может необратимо изменить большие объемы данных, например, перед групповым изменением реквизитов объектов приложения. В этом случае необходимо выполнить резервное копирование в ручном режиме.

                    Открывается по команде Создание резервной копии из раздела Администрирование - Обслуживание - Резервное копирование и восстановление.

                    Ограничения

                    -
                    • Внимание! Резервное копирование не поддерживается в случае, если пользователь Администратор, от лица которого запускается резервное копирование,имеет аутентификацию операционной системы.

                    Создание резервной копии

                    +
                    • Внимание! Резервное копирование не поддерживается в случае, если пользователь Администратор, от лица которого запускается резервное копирование,имеет аутентификацию операционной системы.

                    Создание резервной копии

                    • В верхней части окна выводится информация о том, когда последний раз выполнялось резервное копирование.
                    • -
                    • С помощью кнопки  Выбрать в поле Каталог для сохранения резервной копии (обязательное поле для заполнения) укажите папку, в которую приложение сохранит резервную копию информационной базы. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель. +
                    • С помощью кнопки Выбрать в поле Каталог для сохранения резервной копии (обязательное поле для заполнения) укажите папку, в которую приложение сохранит резервную копию информационной базы. Рекомендуется выполнять резервное копирование на другой компьютер или внешний носитель.
                    • -
                    • Если в приложении имеются текущие сеансы, приложение выводит предупреждение об этом. Перейдите по ссылке, для того чтобы Посмотреть список активных сеансов. Работу пользователей в приложении необходимо завершить. +
                    • Если в приложении имеются текущие сеансы, приложение выводит предупреждение об этом. Перейдите по ссылке, для того чтобы Посмотреть список активных сеансов. Работу пользователей в приложении необходимо завершить.
                    • После установки необходимых параметров нажмите Сохранить резервную копию.

                    Процедура резервного копирования

                    -
                    • Приложение попытается произвести резервное копирование в настоящий момент. При этом в окне выводится сообщение Проводится подготовка к созданию резервной копии и ссылка Активные пользователи, по которой можно открыть список подключений к приложению. Приложение предпримет попытку завершения работы всех пользователей. +
                      • Приложение попытается произвести резервное копирование в настоящий момент. При этом в окне выводится сообщение Проводится подготовка к созданию резервной копии и ссылка Активные пользователи, по которой можно открыть список подключений к приложению. Приложение предпримет попытку завершения работы всех пользователей.
                      • -
                      • После завершения работы всех пользователей приложение установит блокировку и выполнит резервное копирование. +
                      • После завершения работы всех пользователей приложение установит блокировку и выполнит резервное копирование.
                      • -
                      • Если приложение не сможет завершить работу всех пользователей, то она предложит выполнить резервное копирование при подключенных к приложению пользователях. С предложением приложения можно согласиться, если администратор уверен в том, что подключенные пользователи не вводят данные в приложение (например, если пользователи в конце рабочего дня забыли выйти из приложения). В противном случае необходимо завершить сеансы таких пользователей на их рабочих местах. +
                      • Если приложение не сможет завершить работу всех пользователей, то она предложит выполнить резервное копирование при подключенных к приложению пользователях. С предложением приложения можно согласиться, если администратор уверен в том, что подключенные пользователи не вводят данные в приложение (например, если пользователи в конце рабочего дня забыли выйти из приложения). В противном случае необходимо завершить сеансы таких пользователей на их рабочих местах.
                      • -
                      • После успешного окончания резервного копирования приложение запускается снова, при этом выводится сообщение о выполненной процедуре резервного копирования, в котором указан путь к файлу с резервной копией. +
                      • После успешного окончания резервного копирования приложение запускается снова, при этом выводится сообщение о выполненной процедуре резервного копирования, в котором указан путь к файлу с резервной копией.
                      • -
                      • Если приложению не удалось принудительно отключить сеансы, и администратором также не были предприняты какие-либо действия, то резервное копирование может не состояться. В этом случае приложение выводит предупреждение, что резервное копирование не было проведено, и список сеансов, которые не удалось завершить (например, Конфигуратор).

                      +
                    • Если приложению не удалось принудительно отключить сеансы, и администратором также не были предприняты какие-либо действия, то резервное копирование может не состояться. В этом случае приложение выводит предупреждение, что резервное копирование не было проведено, и список сеансов, которые не удалось завершить (например, Конфигуратор).

                    Запуск приложения в случае ошибок во время резервного копирования

                    -
                    • Перед началом резервного копирования приложение выводит сообщение с рекомендациями по немедленному запуску. +
                      • Перед началом резервного копирования приложение выводит сообщение с рекомендациями по немедленному запуску.
                      • -
                      • Для того, чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /C РазрешитьРаботуПользователей /UC РезервноеКопирование.

                      См. также:

                      +
                    • >Для того, чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /C РазрешитьРаботуПользователей /UC РезервноеКопирование.

                    См. также:

                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index 6c9b8f41a..e2dd16e25 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -559,8 +559,7 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы на сервере и изменения настроек резервного копирования. +#Область ОбработчикиСобытийФормыНаСервереИИзмененияНастроекРезервногоКопирования &НаСервереБезКонтекста Процедура УстановитьПутьАрхиваСКопиями(Знач Путь, Знач АвтоматическоеВыполнение) @@ -575,8 +574,9 @@ КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции подготовки резервного копирования. +#КонецОбласти + +#Область ПроцедурыИФункцииПодготовкиРезервногоКопирования #Если Не ВебКлиент И Не МобильныйКлиент Тогда @@ -591,6 +591,7 @@ ПараметрыСкрипта.ИмяФайлаПрограммы = ПараметрыРезервногоКопирования.ИмяФайлаПрограммы; ПараметрыСкрипта.СобытиеЖурналаРегистрации = ПараметрыРезервногоКопирования.СобытиеЖурналаРегистрации; ПараметрыСкрипта.ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); + ПараметрыСкрипта.ПутьКCOMСоединителю = КаталогПрограммы() + "comcntr.dll"; ПараметрыСкрипта.ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыКлиент.ЭтоБазоваяВерсияКонфигурации(); ПараметрыСкрипта.ПараметрыСкрипта = РезервноеКопированиеИБКлиент.ПараметрыАутентификацииАдминистратораОбновления(ПарольАдминистратораИБ); ПараметрыСкрипта.ПараметрыЗапускаПредприятия = ОбщегоНазначенияСлужебныйКлиент.ПараметрыЗапускаПредприятияИзСкрипта(); @@ -773,3 +774,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt index 405eba93b..d1f8dcbe0 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt @@ -24,12 +24,14 @@ var comConnectorName = [ИмяCOMСоединителя] // имя COM-клас var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 var tempLogFileName = 'templog.txt' var retryCount = 0 +var v8comcntr = [ПутьКCOMСоединителю] // Путь к comcntr.dll var runAppAdditionalParams = [ПараметрыЗапускаПредприятия] // Аргументы командной строки, которые следует добавить к запуску 1С:Предприятия в режиме клиента. #КонецОбласти #Область ОбластьРезервногоКопирования if (useComConnector) { + registerCOM() var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов } @@ -73,19 +75,17 @@ function runApp (sFilePath, sFileArgs, show, bWaitOnReturn) { } var ret = -1 log(format('[СообщениеНачалоЗапуска]', - sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)) - if (oFileSystemObject.FileExists(sFilePath)) { - try { - ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) - } catch (e) { - log(format('[СообщениеДеталиИсключения]', e.name, e.message), true) - return -1 - } - log(format('[СообщениеРезультатЗапуска]', ret), ret !== 0) - return ret - } else { - log(format("[СообщениеОтказЗапуска]", sFilePath), true) + sFilePath, + sFileArgs, + SWtoString(show), + bWaitOnReturn)) + try { + ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) + } catch (e) { + log(format('[СообщениеДеталиИсключения]', e.name, e.message), true) + return -1 } + log(format('[СообщениеРезультатЗапуска]', ret), ret !== 0) return ret } @@ -407,6 +407,11 @@ function fromUnicode (text) { return str } +function registerCOM() { + param = format('/n /i:user /s "{0}"', v8comcntr) + return runApp('regsvr32.exe', param, SW_HIDE, true) +} + // Интерактивный запуск "1С:Предприятие" function runEnterprise () { return runApp( diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index 8c5e3e333..0fb58d6ad 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -24,12 +24,14 @@ var comConnectorName = [ИмяCOMСоединителя] // имя COM-клас var useComConnector = [ИспользоватьCOMСоединитель] // флаг использования COM-соединения для работы с 1С:Предприятием 8 var OnExit = [ВыполнитьПриЗавершенииРаботы] // "true" - при завершении работы, "false" - прямо сейчас. var tempLogFileName = 'templog.txt' +var v8comcntr = [ПутьКCOMСоединителю] // Путь к comcntr.dll var runAppAdditionalParams = [ПараметрыЗапускаПредприятия] // Аргументы командной строки, которые следует добавить к запуску 1С:Предприятия в режиме клиента. #КонецОбласти #Область ОбластьРезервногоКопирования if (useComConnector) { + registerCOM() var comConnectorCached = new ActiveXObject(comConnectorName) // для защиты от перерегистрации comConnector из других сеансов } @@ -76,19 +78,17 @@ function runApp (sFilePath, sFileArgs, show, bWaitOnReturn) { } var ret = 1 log(format('[СообщениеНачалоЗапуска]', - sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)) - if (oFileSystemObject.FileExists(sFilePath)) { - try { - ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) - } catch (e) { - log(format('[СообщениеДеталиИсключения]', e.name, e.message), true) - return 1 - } - log(format('[СообщениеРезультатЗапуска]', ret), ret !== 0) - return ret - } else { - log(format('[СообщениеОтказЗапуска]', sFilePath), true) + sFilePath, + sFileArgs, + SWtoString(show), + bWaitOnReturn)) + try { + ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn) + } catch (e) { + log(format('[СообщениеДеталиИсключения]', e.name, e.message), true) + return 1 } + log(format('[СообщениеРезультатЗапуска]', ret), ret !== 0) return ret } @@ -451,6 +451,11 @@ function fromUnicode (text) { return str } +function registerCOM() { + param = format('/n /i:user /s "{0}"', v8comcntr) + return runApp('regsvr32.exe', param, SW_HIDE, true) +} + // Интерактивный запуск "1С:Предприятие" function runEnterprise () { if (OnExit === false) { diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Help/ru.html index a3102e40c..2b6e9ecb2 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Help/ru.html @@ -2,4 +2,4 @@

                    Индикатор показывает ход обновления ИБ.

                    В сообщении выводится номер версии, на которую производится обновление ИБ.

                    Обновление может занять длительное время, в зависимости от объема данных и производительности компьютера.

                    -

                    Для получения подробных сведений о ходе обновления ИБ из журнала регистрации перейдите по ссылке Техническая информация о ходе обновления.

                    \ No newline at end of file +

                    Для получения подробных сведений о ходе обновления ИБ из журнала регистрации перейдите по ссылке Техническая информация о ходе обновления.

                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Module.bsl index 781e6e2a9..e6f076c70 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОбновлениеВерсииПрограммы/Module.bsl @@ -82,8 +82,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление параметров работы программы и неразделенных данных в сервисе. +#Область ОбновлениеПараметровРаботыПрограммыИНеразделенныхДанныхВСервисе &НаКлиенте Процедура ЗагрузитьОбновитьПараметрыРаботыПрограммы(Параметры) Экспорт @@ -373,8 +372,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы (все в локальном режиме и область данных в сервисе). +#КонецОбласти + +#Область ОбновлениеИнформационнойБазыВсеВЛокальномРежимеИОбластьДанныхВСервисе &НаКлиенте Процедура ОбновитьИнформационнуюБазу() Экспорт @@ -609,8 +609,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Регистрация данных для параллельного отложенного обновления. +#КонецОбласти + +#Область РегистрацияДанныхДляПараллельногоОтложенногоОбновления // Параметры: // Результат - см. ДлительныеОперацииКлиент.НовыйРезультатДлительнойОперации @@ -796,8 +797,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Общие процедуры для всех этапов. +#КонецОбласти + +#Область ОбщиеПроцедурыДляВсехЭтапов &НаКлиенте Процедура НачатьЗакрытие() Экспорт @@ -894,3 +896,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form index 56ab73fd8..e26b929ec 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form @@ -1739,26 +1739,155 @@ Auto - Bottom - true - - ФормаКоманднаяПанель - -1 - - ФормаЗакрытьФорму - 8 - - <key>ru</key> - <value>Закрыть</value> - + + ГруппаПодвал + 153 + + ГруппаТребуетсяПомощь + 155 + + ГруппаОбращенияВТехническуюПоддержку + 157 + + ОписаниеОбращенияВПоддержку + 159 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 160 + true + + Label + true + true + + Left + + + + ВопросВПоддержку + 162 + + <key>ru</key> + <value>Вопрос в поддержку</value> + + true + true + + true + + + ВопросВПоддержкуРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВопросВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.ОтправитьЭлектронноеПисьмо + + Auto + + + ИнформацияДляОтправкиВПоддержку + 164 + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + true + true + + true + + + ИнформацияДляОтправкиВПоддержкуРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИнформацияДляОтправкиВПоддержку + Normal + Auto + true + true + UserCmds + + CommonPicture.Скачать + + Auto + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true true + + <key>ru</key> + <value>Требуется помощь?</value> + + Center - ФормаЗакрытьФормуРасширеннаяПодсказка - 22 + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 156 Label true true @@ -1766,14 +1895,109 @@ Left - Form.Command.ЗакрытьФорму - Auto - true + UsualGroup + + Vertical + PopUp + WeakSeparation + true + true + auto + Auto + Auto + + + + КоманднаяПанель + 166 + + ФормаЗакрытьФорму + 8 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + ФормаЗакрытьФормуРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.ЗакрытьФорму + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + КоманднаяПанельРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Подвал</value> + + + ГруппаПодвалРасширеннаяПодсказка + 154 + Label true true - UserCmds - Auto - + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 Right @@ -2490,6 +2714,42 @@ Auto Auto + + ВопросВПоддержку + + <key>ru</key> + <value>Вопрос в поддержку</value> + + 10 + + true + + + + ВопросВПоддержку + + + Auto + Auto + + + ИнформацияДляОтправкиВПоддержку + + <key>ru</key> + <value>Информация для отправки в поддержку</value> + + 11 + + true + + + + ИнформацияДляОтправкиВПоддержку + + + Auto + Auto + diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html index d95631c58..a61c26975 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html @@ -1,6 +1,6 @@ -

                    Предназначен для просмотра дополнительных процедур обработки данных, которые проходят после обновления версии отложенно, в фоновом режиме.

                    -

                    Список можно открыть, перейдя по соответствующей ссылке из окна Результаты обновления приложения, в которое можно перейти по команде Результаты обновления и дополнительная обработка данных раздела Администрирование - Обслуживание - Обновление приложения.

                    +

                    Предназначен для просмотра дополнительных процедур обработки данных, которые проходят после обновления версии отложенно, в фоновом режиме.

                    +

                    Список можно открыть, перейдя по соответствующей ссылке из окна Результаты обновления приложения, в которое можно перейти по команде Результаты обновления и дополнительная обработка данных раздела Администрирование - Обслуживание - Обновление приложения.

                    В списке выводится:

                    • Процедура обработки данных - наименование процедуры дополнительной обработки данных и ее подробное описание.
                      @@ -9,10 +9,10 @@
                      Статус выполнения - краткая информация о том, как прошло выполнение дополнительной обработки данных.

                    Выделите процедуру обработки данных, для того чтобы просмотреть подробную информацию о ходе выполнения этой процедуры внизу списка.

                    Отборы

                    • -
                      в поле Статус выберите нужный статус выполнения ("Все процедуры", "Ошибка", "Выполняется", "Выполнено", "Желательно быстрее");
                      +
                      в поле Статус выберите нужный статус выполнения ("Все процедуры", "Ошибка", "Выполняется", "Выполнено", "Желательно быстрее");
                    • -
                      в поле Найти наберите слово или его часть.

                    Выполнение дополнительных процедур обработки данных

                    +
                    в поле Найти наберите слово или его часть.

                  Выполнение дополнительных процедур обработки данных

                  • Нажмите Запустить, для того чтобы начать выполнение дополнительных процедур обработки данных. Кнопка видна, если процедуры дополнительной обработки данных еще не выполнялись или в списке имеются невыполненные процедуры.
                  • Если процедура завершилась с ошибкой, становится доступной команда Запустить процедуру для ее повторного выполнения.

                  Управление ходом дополнительных процедур обработки данных

                  @@ -23,7 +23,7 @@
                  Пользоваться этой возможностью рекомендуется только после консультации со службой поддержки.

                Установка очередности выполнения процедур обработки данных

                • С помощью флажков В плановом порядке и Желательно быстрее меню Еще или контекстного меню по правой кнопки мыши.

                Просмотр журнала регистрации

                -
                • Для того чтобы ознакомиться с подробностями выполнения дополнительных процедур обработки данных в журнале регистрации, после их выполнения перейдите по ссылке Журнал регистрации.

                Обработчики обновления

                -
                • С помощью ссылки Обработчики обновления можно перейти к расширенному списку обработчиков обновления с возможностью просмотра служебных сведений для расследования ошибок обновления. При выполнении обработчиков все ошибки и предупреждения запоминаются.

                Отчет по прогрессу отложенного обновления

                +
                • Для того чтобы ознакомиться с подробностями выполнения дополнительных процедур обработки данных в журнале регистрации, после их выполнения перейдите по ссылке Журнал регистрации.

                Обработчики обновления

                +
                • С помощью ссылки Обработчики обновления можно перейти к расширенному списку обработчиков обновления с возможностью просмотра служебных сведений для расследования ошибок обновления. При выполнении обработчиков все ошибки и предупреждения запоминаются.

                Отчет по прогрессу отложенного обновления

                • -
                  С помощью ссылки Отчет по прогрессу отложенного обновления можно просмотреть статистические данные о выполнении процедур отложенного обновления
                \ No newline at end of file +
                С помощью ссылки Отчет по прогрессу отложенного обновления можно просмотреть статистические данные о выполнении процедур отложенного обновления
              \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl index e1b706e28..9a6bea23e 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -69,6 +69,19 @@ Элементы.Статус.СписокВыбора.Добавить(ЗначениеВыполняется, ЗначениеВыполняется); Элементы.Статус.СписокВыбора.Добавить(ЗначениеВыполнен, ЗначениеВыполнен); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаТребуетсяПомощь.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры #КонецОбласти @@ -305,6 +318,85 @@ ОбновлениеИнформационнойБазыКлиент.ОбработатьРезультатРучнойПроверкиДоступныхПатчей(Результат, ОписаниеОповещения); КонецПроцедуры +&НаКлиенте +Процедура ВопросВПоддержку(Команда) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.Тема = НСтр("ru = 'Не удалось обновить приложение на новую версию'"); + + ТехнологическаяИнформация = Новый Массив; + ТехнологическаяИнформация.Добавить(ПараметрыОбращения.ТехнологическаяИнформация); + + СтатусОшибка = ПредопределенноеЗначение("Перечисление.СтатусыОбработчиковОбновления.Ошибка"); + ПараметрОтбора = Новый Структура("Статус", СтатусОшибка); + НайденныеОшибки = ОтложенныеОбработчики.НайтиСтроки(ПараметрОтбора); + + Для Каждого НайденнаяОшибка Из НайденныеОшибки Цикл + ТехнологическаяИнформация.Добавить(НайденнаяОшибка.ИнформацияОПроцедуреОбновления); + ТехнологическаяИнформация.Добавить(Символы.ПС); + КонецЦикла; + + ПараметрыОбращения.ТехнологическаяИнформация = СтрСоединить(ТехнологическаяИнформация, Символы.ПС); + + ПолучитьСведенияОбОбновлении(); + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаНачала", ВремяНачалаОтложенногоОбновления); + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("Сеанс", НомерТекущегоСеанса); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияДляОтправкиВПоддержку(Команда) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + + ТехнологическаяИнформация = Новый Массив; + ТехнологическаяИнформация.Добавить(ПараметрыОбращения.ТехнологическаяИнформация); + + СтатусОшибка = ПредопределенноеЗначение("Перечисление.СтатусыОбработчиковОбновления.Ошибка"); + ПараметрОтбора = Новый Структура("Статус", СтатусОшибка); + НайденныеОшибки = ОтложенныеОбработчики.НайтиСтроки(ПараметрОтбора); + + Для Каждого НайденнаяОшибка Из НайденныеОшибки Цикл + ТехнологическаяИнформация.Добавить(НайденнаяОшибка.ИнформацияОПроцедуреОбновления); + ТехнологическаяИнформация.Добавить(Символы.ПС); + КонецЦикла; + + ПараметрыОбращения.ТехнологическаяИнформация = СтрСоединить(ТехнологическаяИнформация, Символы.ПС); + + ПолучитьСведенияОбОбновлении(); + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаНачала", ВремяНачалаОтложенногоОбновления); + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); + ПараметрыОбращения.ОтборЖурналаРегистрации.Вставить("Сеанс", НомерТекущегоСеанса); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -602,6 +694,24 @@ Элементы.ПроверитьНаличиеИсправлений.Видимость = СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно <> Истина И ОбновлениеИнформационнойБазыСлужебный.ДоступнаРучнаяПроверкаНаличияИсправления(); + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + ПараметрОтбора = Новый Структура("Статус", Перечисления.СтатусыОбработчиковОбновления.Ошибка); + НайденныеОшибки = ОтложенныеОбработчики.НайтиСтроки(ПараметрОтбора); + + Если НайденныеОшибки.Количество() > 0 Тогда + МодульОбращенияВТехническуюПоддержкуСлужебный.ПоказатьРазделТребуетсяПомощь(Элементы); + Иначе + МодульОбращенияВТехническуюПоддержкуСлужебный.СкрытьРазделТребуетсяПомощь(Элементы); + КонецЕсли; + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОчисткаУстаревшихДанных/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОчисткаУстаревшихДанных/Help/ru.html index c0fad41cf..5bfe0d65a 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОчисткаУстаревшихДанных/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОчисткаУстаревшихДанных/Help/ru.html @@ -4,21 +4,21 @@

              Открывается с помощью ссылки Очистка устаревших данных в разделе Администрирование - Обслуживание - Обновление приложения.

              Очистка устаревших данных:

              -
              • запускает длительную операцию поиска устаревших данных; 
              • +
                • запускает длительную операцию поиска устаревших данных;
                • выводит таблицу с устаревшими данными, которую можно удалить в режиме 1С:Предприятия.

                -

                С помощью флажка Вывести количество выводятся в таблицу:

                +

                С помощью флажка Вывести количество выводятся в таблицу:

                • количество записей, которое будет удалено в зависимых регистрах сведений;
                • количество регистраторов, записи которых будут удалены в регистрах сведений подчиненных регистратору;
                • количество объектов, которые будут удалены в ссылочных таблицах (справочниках, документах и т.д.).

                -

                С помощью флажка Чистить удаляемые выводится список всех устаревших данных (а не только тех, которые могут вызвать ошибку).

                -

                Кнопка План очистки открывает форму с описанием, в которой подробно указано в каких таблицах и по каким условиям будет выполняться поиск устаревших данных. 

                +

                С помощью флажка Чистить удаляемые выводится список всех устаревших данных (а не только тех, которые могут вызвать ошибку).

                +

                Кнопка План очистки открывает форму с описанием, в которой подробно указано в каких таблицах и по каким условиям будет выполняться поиск устаревших данных.

                С помощью кнопки Обновить можно актуализировать данные для очистки. Для того чтобы очистить данные нажмите кнопку Очистить.

                -

                После очистки устаревших данных можно продолжить обновление приложения в Конфигураторе. 

                +

                После очистки устаревших данных можно продолжить обновление приложения в Конфигураторе.


                -

                См. также:

                -

                -

                +

                См. также:

                +

                +

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Help/ru.html index acdb1688e..ce72f2c23 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Help/ru.html @@ -1,12 +1,12 @@

                Предназначена для индикации хода и просмотра результатов отложенного обновления ИБ.

                -

                При обновлении версии ИБ в приложении предусмотрена возможность часть данных обрабатывать отложенно, во время работы приложения, в фоновом режиме. В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ приложение выдает сообщение, что действия с документом временно запрещены, так как не завершен переход на новую версию приложения. Некоторые отчеты также могут быть недоступны. Приложение при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию приложения.

                -

                Открывается автоматически при входе в приложение после обновления ИБ одновременно с открытием окна Описание изменений приложения  (Что нового в конфигурации).

                -

                Сведения о результатах отложенного обновления версии приложения также открыть из раздела Администрирование - Обслуживание - Обновление приложенияы по команде Результаты обновления и дополнительная обработка данных, а также из окна Что нового в конфигурации, перейдя по ссылке Необходимо выполнить дополнительные процедуры обработки данных. После начала выполнения ссылка меняет значение на Выполняются дополнительные процедуры обработки данных.

                +

                При обновлении версии ИБ в приложении предусмотрена возможность часть данных обрабатывать отложенно, во время работы приложения, в фоновом режиме. В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ приложение выдает сообщение, что действия с документом временно запрещены, так как не завершен переход на новую версию приложения. Некоторые отчеты также могут быть недоступны. Приложение при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию приложения.

                +

                Открывается автоматически при входе в приложение после обновления ИБ одновременно с открытием окна Описание изменений приложения (Что нового в конфигурации).

                +

                Сведения о результатах отложенного обновления версии приложения также открыть из раздела Администрирование - Обслуживание - Обновление приложенияы по команде Результаты обновления и дополнительная обработка данных, а также из окна Что нового в конфигурации, перейдя по ссылке Необходимо выполнить дополнительные процедуры обработки данных. После начала выполнения ссылка меняет значение на Выполняются дополнительные процедуры обработки данных.

                Информация о проведенном обновлении ИБ

                • Указывается, на какую версию проведено обновление, дата и время обновления, длительность процесса обновления.

                Просмотр журнала регистрации

                • Перейдите по ссылке Техническая информация о результатах обновления, для того чтобы просмотреть события обновления ИБ в журнале регистрации.

                Выполнение процедур обработки данных

                -
                • Если процедуры обработки данных еще не были запущены, то ссылка принимает значение Список процедур обработки данных. Перейдите по ссылке, для того чтобы просмотреть список дополнительных процедур. +
                  • Если процедуры обработки данных еще не были запущены, то ссылка принимает значение Список процедур обработки данных. Перейдите по ссылке, для того чтобы просмотреть список дополнительных процедур.
                  • Нажмите Выполнить, для того чтобы начать обработку данных.
                  • @@ -23,15 +23,15 @@

                    Установка приоритета

                    • -
                      Приложение позволяет ускорить обработку данных. Для этого предусмотрена возможность повышения приоритета обработки данных над работой пользователей в приложении. Это уменьшает время, затрачиваемое на отложенное обновление.
                      +
                      Приложение позволяет ускорить обработку данных. Для этого предусмотрена возможность повышения приоритета обработки данных над работой пользователей в приложении. Это уменьшает время, затрачиваемое на отложенное обновление.
                    • С помощью переключателя Приоритет можно установить, что во время отложенной обработки данных важнее:
                      • -
                        Работа пользователей - данные обрабатываются медленнее, меньше нагрузка на сервер и влияние на работу пользователей в приложении;
                        +
                        Работа пользователей - данные обрабатываются медленнее, меньше нагрузка на сервер и влияние на работу пользователей в приложении;
                      • -
                        Обработка данных - выше скорость обработки данных, но выше и нагрузка на сервер, в связи с этим происходит существенное замедление работы пользователей в приложении.
                        +
                        Обработка данных - выше скорость обработки данных, но выше и нагрузка на сервер, в связи с этим происходит существенное замедление работы пользователей в приложении.
                        • При установке приоритета за обработкой данных убирается задержка между запусками регламентного задания по отложенной обработке данных.
                        • @@ -39,11 +39,11 @@
                          Рекомендуется использовать в тех случаях, когда необходимо быстрее получить доступ к обрабатываемым данным.
                    • При повышении приоритета выполнения дополнительной процедуры обработки данных также повышается приоритет тех процедур, от которых она зависит.
                    -

                    Перезапуск отложенного обновления

                    +

                    Перезапуск отложенного обновления

                    • Бывают случаи, когда отложенное обновление выполнилось с ошибкой. Это может произойти из-за ошибки в обработчике обновления или в процедуре регистрации данных для обновления.
                    • После исправления ошибки, например, патчем, для корректного обновления может потребоваться заново собрать данные, требуемые для обновления.
                    • -
                    • Для этого предусмотрена команда Еще - Перезапустить отложенное обновление. 
                    • +
                    • Для этого предусмотрена команда Еще - Перезапустить отложенное обновление.
                    • В открывшемся окне можно при необходимости выбрать для перезапуска те обработчики, которые уже успешно выполнились, в том случае, если после исправления данные по ним надо зарегистрировать заново. Выполнив необходимые настройки, можно нажать кнопку Перезапустить.
                    • Приложение позволяет заново зарегистрировать данные по еще незавершенным обработчикам обновления. После регистрации данных для обновления будут автоматически перезапущены все незавершенные обработчики, а также выбранные для перезапуска.
                    • Это может быть полезно в случаях, когда ошибка в обработчике обновления приводит к тому, что часть данных остается не обновленной, хотя само обновление при этом завершилось успешно.
                    @@ -76,13 +76,13 @@
                  • Если расписание изменить так, что сейчас обновлять не нужно, то рабочие потоки завершат текущую работу и регламентное задание завершится (до следующего срабатывания по расписанию).

                Настройка расписания обработки данных

                -
                • Как правило, обработка данных может занимать длительное время (от нескольких минут до нескольких часов в зависимости от объема введенных данных в приложении и производительности компьютера), а также во время ее выполнения может наблюдаться существенное замедление работы пользователей. Поэтому рекомендуется выполнять обработку в период наименьшей активности пользователей. +
                  • Как правило, обработка данных может занимать длительное время (от нескольких минут до нескольких часов в зависимости от объема введенных данных в приложении и производительности компьютера), а также во время ее выполнения может наблюдаться существенное замедление работы пользователей. Поэтому рекомендуется выполнять обработку в период наименьшей активности пользователей.
                  • В клиент-серверном режиме можно настроить расписание регламентного задания Отложенное обновление ИБ. Для того чтобы настроить выполнение регламентного задания Отложенное обновление ИБ, нажмите Настроить расписание.
                  • -
                  • Также можно настроить регламентное задание из общего списка регламентных и фоновых заданий по соответствующей команде раздела Администрирование - Обслуживание - Регламентные операции.

                  Проверка блокировки регламентных заданий

                  +
                • Также можно настроить регламентное задание из общего списка регламентных и фоновых заданий по соответствующей команде раздела Администрирование - Обслуживание - Регламентные операции.

                Проверка блокировки регламентных заданий

                • -
                  Если в клиент-серверном режиме установлена блокировка регламентных заданий, то отложенное обновление не будет выполняться.
                  +
                  Если в клиент-серверном режиме установлена блокировка регламентных заданий, то отложенное обновление не будет выполняться.
                • Проконтролировать блокировку можно:
                  @@ -92,7 +92,7 @@
                • С помощью консоли администрирования кластера серверов. Подробнее о консоли см. документацию о платформе.
                  • -
                    Запустить консоль можно из меню Пуск, выбрав раздел Все приложения - 1С:Предприятие 8 - Дополнительно.
                    +
                    Запустить консоль можно из меню Пуск, выбрав раздел Все приложения - 1С:Предприятие 8 - Дополнительно.
                  • Для отображения свойств отдельной информационной базы выберите нужный центральный сервер, нужный кластер, нужную информационную базу.
                    diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Module.bsl index 0aa23716e..d920dcee2 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/РезультатыОбновленияПрограммы/Module.bsl @@ -513,7 +513,7 @@ Запись.Статус = Перечисления.СтатусыОбработчиковОбновления.НеВыполнялся; СтатистикаВыполнения = Запись.СтатистикаВыполнения.Получить(); СтатистикаВыполнения.Вставить("КоличествоЗапусков", 0); - Запись.СтатистикаВыполнения = Новый ХранилищеЗначения(СтатистикаВыполнения); + Запись.СтатистикаВыполнения = Новый ХранилищеЗначения(СтатистикаВыполнения, Новый СжатиеДанных(9)); НаборЗаписей.Записать(); КонецЦикла; diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html index 1b525819f..b4858c2a0 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html @@ -1,5 +1,5 @@

                    Предназначено для информирования об ошибке во время обновления ИБ.

                    -

                    Для того чтобы посмотреть в журнале регистрации сведения об ошибках, перейдите по ссылке Подробности см. в Журнале регистрации. 

                    -

                    Для того чтобы выйти из приложения, нажмите Завершить.

                    -

                    Для того чтобы попытаться запустить приложение еще раз, нажмите Перезапустить.

                    \ No newline at end of file +

                    Для того чтобы посмотреть в журнале регистрации сведения об ошибках, перейдите по ссылке Подробности см. в Журнале регистрации.

                    +

                    Для того чтобы выйти из приложения, нажмите Завершить.

                    +

                    Для того чтобы попытаться запустить приложение еще раз, нажмите Перезапустить.

                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html index 61b635063..3dc9251b2 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html @@ -6,35 +6,35 @@
                    работа пользователей заблокирована.
                  • -
                    применяется для обновления тех данных, обработка которых должна быть обязательно завершена к моменту входа пользователей в приложение.
                    +
                    применяется для обновления тех данных, обработка которых должна быть обязательно завершена к моменту входа пользователей в приложение.
                    • чем меньше таких данных, тем меньше время простоя.
                • с помощью отложенных обработчиков:
                  • -
                    вход пользователей в приложение разрешен.
                    +
                    вход пользователей в приложение разрешен.
                  • применяется для обновления "архивной" части данных ИБ, с которыми пользователи либо активно не работают, либо могут начинать свою работу, не дожидаясь завершения обработки.

                Обновление информационной базы

                -
                • После обновления версии приложения (в режиме Конфигуратор или с использованием помощника Обновление конфигурации в базовых версиях) требуется обязательно выполнить первый запуск приложения от имени администратора. Во время запуска приложение выполнит завершающие процедуры процесса обновления, которые могут занять продолжительное время (зависит от обновления и от производительности компьютера). +
                  • После обновления версии приложения (в режиме Конфигуратор или с использованием помощника Обновление конфигурации в базовых версиях) требуется обязательно выполнить первый запуск приложения от имени администратора. Во время запуска приложение выполнит завершающие процедуры процесса обновления, которые могут занять продолжительное время (зависит от обновления и от производительности компьютера).
                  • -
                  • Перед выполнением первого запуска приложения рекомендуется завершить работу всех пользователей. Это необходимо для корректного обновления версии приложения. +
                  • Перед выполнением первого запуска приложения рекомендуется завершить работу всех пользователей. Это необходимо для корректного обновления версии приложения.
                  • -
                  • Если в приложении еще работают пользователи, то в файловом режиме работы можно завершить активные сеансы пользователей, препятствующие обновлению, а также временно заблокировать вход в приложение (в клиент-серверной версии запуск прерывается с сообщением о наличии активных сеансов). Перейдя по ссылке, можно просмотреть список активных пользователей и попросить их завершить свою работу, или продолжить выполнение обновления информационной базы по кнопке Завершить сеансы и повторить. +
                  • Если в приложении еще работают пользователи, то в файловом режиме работы можно завершить активные сеансы пользователей, препятствующие обновлению, а также временно заблокировать вход в приложение (в клиент-серверной версии запуск прерывается с сообщением о наличии активных сеансов). Перейдя по ссылке, можно просмотреть список активных пользователей и попросить их завершить свою работу, или продолжить выполнение обновления информационной базы по кнопке Завершить сеансы и повторить.
                  • -
                  • После этого начинается подготовка к завершению активных сеансов других пользователей, работающих с приложением. В активных сеансах пользователей приложение выводит сообщение о необходимости завершить свою работу. В указанное в сообщении время производится принудительное завершение работы приложения и продолжается обновление версии. +
                  • После этого начинается подготовка к завершению активных сеансов других пользователей, работающих с приложением. В активных сеансах пользователей приложение выводит сообщение о необходимости завершить свою работу. В указанное в сообщении время производится принудительное завершение работы приложения и продолжается обновление версии.
                  • -
                  • При этом выполнение приложения не останавливается и открывается пустой рабочий стол с сообщением Обновление версии приложения. В сообщении выводится номер версии, на которую производится обновление ИБ. Индикатор показывает ход обновления ИБ - графически и в процентном отношении. Для получения подробных сведений о ходе обновления ИБ из журнала регистрации перейдите по ссылке Техническая информация о ходе обновления. +
                  • При этом выполнение приложения не останавливается и открывается пустой рабочий стол с сообщением Обновление версии приложения. В сообщении выводится номер версии, на которую производится обновление ИБ. Индикатор показывает ход обновления ИБ - графически и в процентном отношении. Для получения подробных сведений о ходе обновления ИБ из журнала регистрации перейдите по ссылке Техническая информация о ходе обновления.
                  • Если запуск происходит на устаревшей версии платформы, то выводится сообщение о необходимости обновления версии платформы и блокирует рабочий стол.
                  • -
                  • После завершения обновления ИБ приложение автоматически перезапускается. Сразу открывается рабочий стол, но работа приложения блокируется и для продолжения работы в ней потребуется подтвердить легальность получения обновления. После получения подтверждения можно приступить к работе в приложении. +
                  • После завершения обновления ИБ приложение автоматически перезапускается. Сразу открывается рабочий стол, но работа приложения блокируется и для продолжения работы в ней потребуется подтвердить легальность получения обновления. После получения подтверждения можно приступить к работе в приложении.
                  • -
                  • Если в процессе обновления возникает нештатная ситуация, то приложение выводит сообщение об ошибке, по поводу которого необходимо обратиться в службу технической поддержки. По ссылке Подробности см. в Журнале регистрации можно просмотреть сообщения, возникшие в процессе обновления. Работа с приложением в таком случае не может быть продолжена. +
                  • Если в процессе обновления возникает нештатная ситуация, то приложение выводит сообщение об ошибке, по поводу которого необходимо обратиться в службу технической поддержки. По ссылке Подробности см. в Журнале регистрации можно просмотреть сообщения, возникшие в процессе обновления. Работа с приложением в таком случае не может быть продолжена.
                  • -
                  • В случае успешного обновления приложения открывается окно Что нового. Также будет разблокирован вход в приложение для всех пользователей.

                  Описание изменений приложения

                  +
                • В случае успешного обновления приложения открывается окно Что нового. Также будет разблокирован вход в приложение для всех пользователей.

                Описание изменений приложения

                • После успешного завершения обновления версии приложении можно просмотреть описание изменений и улучшений в новой версии (окно Что нового в конфигурации), перейти к журналу регистрации, чтобы ознакомиться с техническими событиями, возникшими в ходе процесса обновления, а также запустить, а затем проконтролировать ход отложенной обработки данных (если она предусмотрена в этой версии приложения). В дальнейшем окно Что нового можно также открыть в разделе Главное.

                Особенности и преимущества отложенного обновления ИБ

                • В клиент-серверном варианте работы переход на новую версию приложения может предусматривать дополнительную обработку данных, которая в целях сокращения времени простоя выполняется в фоновом режиме. При этом пользователи могут начинать свою работу в приложении, не дожидаясь завершения этой обработки. В период ее выполнения часть функций приложения может быть временно недоступна, так как еще не полностью завершен переход на новую версию.
                • -
                • В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ приложение выдает сообщение, что действия с документами временно запрещены, так как не завершен переход на новую версию приложения. Некоторые отчеты также могут быть недоступны. Приложение при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию приложения.

                Контроль процесса отложенного обновления

                -
                • В тех случаях, когда переход на новую версию приложения предусматривает фоновую отложенную обработку данных, с ходом выполнения отложенных процедур обновления версии приложения администратор может ознакомиться, выполнив команду Результаты обновления и дополнительная обработка данных раздела Администрирование - Обслуживание - Обновление приложения, а также по ссылке Выполняются дополнительные процедуры обработки данных в окне Что нового в конфигурации.
                \ No newline at end of file +
              • В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ приложение выдает сообщение, что действия с документами временно запрещены, так как не завершен переход на новую версию приложения. Некоторые отчеты также могут быть недоступны. Приложение при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию приложения.

              Контроль процесса отложенного обновления

              +
              • В тех случаях, когда переход на новую версию приложения предусматривает фоновую отложенную обработку данных, с ходом выполнения отложенных процедур обновления версии приложения администратор может ознакомиться, выполнив команду Результаты обновления и дополнительная обработка данных раздела Администрирование - Обслуживание - Обновление приложения, а также по ссылке Выполняются дополнительные процедуры обработки данных в окне Что нового в конфигурации.
              \ No newline at end of file diff --git a/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl index 97b859a61..25ee05a60 100644 --- a/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РекомендацияПоПовышениюСкоростиРаботы/Forms/Форма/Module.bsl @@ -61,7 +61,7 @@ РекомендацияПоОбъемуОперативнойПамяти.Вставить("Показывать", Не Результат.БольшеНеЗадаватьЭтотВопрос); РекомендацияПоОбъемуОперативнойПамяти.Вставить("ДатаПредыдущегоПоказа", ОбщегоНазначенияКлиент.ДатаСеанса()); - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя", + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя", "РекомендацияПоОбъемуОперативнойПамяти", РекомендацияПоОбъемуОперативнойПамяти); КонецПроцедуры diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form index 89f71109e..cd23ea7f3 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Form.form @@ -1574,44 +1574,6 @@ TIF - Не все браузеры отображают этот формат.Auto - - ИнформацияДляТехническойПоддержки - 165 - - <key>ru</key> - <value>Информация для технической поддержки</value> - - true - true - - true - - - ИнформацияДляТехническойПоддержкиРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - ИнформацияДляТехническойПоддержкиКонтекстноеМеню - 166 - true - - Label - true - true - - - Click - ИнформацияДляТехническойПоддержкиНажатие - - true - - true true @@ -1678,18 +1640,121 @@ TIF - Не все браузеры отображают этот формат.Auto + + ОшибкаСканирования + 145 + + КартинкаОшибкиСканирования + 147 + + <key>ru</key> + <value>Картинка ошибки сканирования</value> + + true + true + + true + + + КартинкаОшибкиСканированияРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + КартинкаОшибкиСканированияКонтекстноеМеню + 148 + true + + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + + + ТекстОшибкиСканирования + 150 + + <key>ru</key> + <value>Сканирование завершилось аварийно. При возникновении затруднений обратитесь в службу поддержки фирмы "1С".</value> + + true + true + + true + + + ТекстОшибкиСканированияРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ТекстОшибкиСканированияКонтекстноеМеню + 151 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ошибка сканирования</value> + + + ОшибкаСканированияРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + ГруппаПодвал 153 - ОшибкаСканирования - 145 + ГруппаТребуетсяПомощь + 177 - КартинкаОшибкиСканирования - 147 + Рекомендации + 179 <key>ru</key> - <value>Картинка ошибки сканирования</value> + <value>Попробуйте одно из следующих действий: + +</value> true true @@ -1697,8 +1762,8 @@ TIF - Не все браузеры отображают этот формат.true - КартинкаОшибкиСканированияРасширеннаяПодсказка - 149 + РекомендацииРасширеннаяПодсказка + 181 Label true true @@ -1707,44 +1772,8 @@ TIF - Не все браузеры отображают этот формат. - КартинкаОшибкиСканированияКонтекстноеМеню - 148 - true - - true - true - - - CommonPicture.Предупреждение - - AsFileRef - - - - ТекстОшибкиСканирования - 150 - - <key>ru</key> - <value>Сканирование завершилось аварийно, сохранить <link ТехническаяИнформация>информацию для технической поддержки</>.</value> - - true - true - - true - - - ТекстОшибкиСканированияРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - - ТекстОшибкиСканированияКонтекстноеМеню - 151 + РекомендацииКонтекстноеМеню + 180 true true @@ -1753,11 +1782,77 @@ TIF - Не все браузеры отображают этот формат. URLProcessing - ТекстОшибкиСканированияОбработкаНавигационнойСсылки + РекомендацииОбработкаНавигационнойСсылки Left + + ГруппаОбращенияВТехническуюПоддержку + 182 + + ОписаниеОбращенияВПоддержку + 184 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 185 + true + + Label + 55 + true + + + URLProcessing + ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true @@ -1765,11 +1860,12 @@ TIF - Не все браузеры отображают этот формат. <key>ru</key> - <value>Ошибка сканирования</value> + <value>Требуется помощь?</value> + Center - ОшибкаСканированияРасширеннаяПодсказка - 146 + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 178 Label true true @@ -1779,10 +1875,12 @@ TIF - Не все браузеры отображают этот формат. UsualGroup - HorizontalIfPossible - Auto + Vertical + PopUp + WeakSeparation true true + auto Auto Auto @@ -2485,6 +2583,20 @@ TIF - Не все браузеры отображают этот формат.true + + ПредставлениеОшибки + 29 + + String + + + + true + + + true + + ОК diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html index e4063d9a9..64ee6bed1 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html @@ -1,33 +1,33 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Приложение позволяет хранить файлы, полученные напрямую со сканера. Для работы со сканером в приложении необходимо произвести настройку сканирования. Сканирование возможно с любых устройств, драйвера которых поддерживают одну из технологий <a href="https://ru.wikipedia.org/wiki/SANE">SANE</a>, <a href="https://ru.wikipedia.org/wiki/Windows_Image_Acquisition">WIA</a>, <a href="https://ru.wikipedia.org/wiki/TWAIN">TWAIN</a>, на операционных системах Microsoft Windows и Linux. Подробнее о версиях операционных систем см. <a href="https://v8.1c.ru/tekhnologii/sistemnye-trebovaniya-1s-predpriyatiya-8/">Системные требования "1С:Предприятия 8"</a>. Перед выполнением настроек к компьютеру необходимо подключить сканер, при этом в зависимости от возможностей подключенного сканера будут доступны те или иные параметры.</p> +<p>Приложение позволяет хранить файлы, полученные напрямую со сканера. Для работы со сканером в приложении необходимо произвести настройку сканирования. Сканирование возможно с любых устройств, драйвера которых поддерживают одну из технологий <a href="https://ru.wikipedia.org/wiki/SANE">SANE</a>, <a href="https://ru.wikipedia.org/wiki/Windows_Image_Acquisition">WIA</a>, <a href="https://ru.wikipedia.org/wiki/TWAIN">TWAIN</a>, на операционных системах Microsoft Windows и Linux. Подробнее о версиях операционных систем см. <a href="https://v8.1c.ru/tekhnologii/sistemnye-trebovaniya-1s-predpriyatiya-8/">Системные требования "1С:Предприятия 8"</a>. Перед выполнением настроек к компьютеру необходимо подключить сканер, при этом в зависимости от возможностей подключенного сканера будут доступны те или иные параметры.</p> <h3>Имя сканера</h3> -<ul><li>В поле <strong>Сканер </strong>выберите используемый сканер из списка доступных устройств, подключенных к компьютеру (если сканер подключен один, то выбирается по умолчанию).</li></ul><h3>Задать настройки</h3> -<ul><li><b>Основные в приложении</b> - диалог сканера не открывается, а применяются настройки, заданные в приложении. </li> -<li><b>Расширенные в диалоге сканера</b> - отображается диалог сканера, в котором можно задать другие дополнительные настройки, характерные для конкретного устройства, например, можно выбрать область сканирования на листе бумаги. </li></ul><h3>Основное</h3> -<p>Зависят от возможностей выбранного сканера, который подключен к приложению. Некоторые из них могут быть недоступны.</p> +<ul><li>В поле <strong>Сканер </strong>выберите используемый сканер из списка доступных устройств, подключенных к компьютеру (если сканер подключен один, то выбирается по умолчанию).</li></ul><h3>Задать настройки</h3> +<ul><li><b>Основные в приложении</b> - диалог сканера не открывается, а применяются настройки, заданные в приложении. </li> +<li><b>Расширенные в диалоге сканера</b> - отображается диалог сканера, в котором можно задать другие дополнительные настройки, характерные для конкретного устройства, например, можно выбрать область сканирования на листе бумаги. </li></ul><h3>Основное</h3> +<p>Зависят от возможностей выбранного сканера, который подключен к приложению. Некоторые из них могут быть недоступны.</p> <ul><li>Выберите <strong>Разрешение </strong>сканирования (DPI). Список доступных разрешений зависит от выбранного сканера. </li> <li>Выберите <strong>Цветность </strong>изображений, которые будут получены со сканера (<strong>Монохромное</strong>, <strong>Градации Серого</strong>, <strong>Цветное</strong>). Зависит от возможностей сканера. </li> -<li>Выберите один из вариантов <strong>Поворота</strong> изображения после сканирования. Для некоторых моделей сканеров это свойство недоступно. +<li>Выберите один из вариантов <strong>Поворота</strong> изображения после сканирования. Для некоторых моделей сканеров это свойство недоступно. </li> <li>Выберите<strong> Размер бумаги</strong>, которая помещена в сканер. Для некоторых моделей сканеров это свойство недоступно. </li> <li>Если необходимо отсканировать документ с двух сторон, включите флажок <strong>Двустороннее сканирование</strong>. Для некоторых моделей сканеров это свойство недоступно.</li> <li>Если необходимо в автоматическом режиме отсканировать документы без ручной подачи каждого листа, включите флажок <strong>Автоматическая подача документов</strong>. Для некоторых моделей сканеров это свойство недоступно.</li></ul><h3>Просмотр списка Номера отсканированных файлов</h3> -<ul><li>Нажмите <strong>Открыть номера отсканированных файлов</strong>, для того чтобы просмотреть соответствующий <a href="InformationRegister.НомераОтсканированныхФайлов/Help">список</a>.</li></ul><h3>Для одностраничных изображений</h3> +<ul><li>Нажмите <strong>Открыть номера отсканированных файлов</strong>, для того чтобы просмотреть соответствующий <a href="InformationRegister.НомераОтсканированныхФайлов/Help">список</a>.</li></ul><h3>Для одностраничных изображений</h3> <ul><li> -<div><strong>Сохранить как</strong> - приложение позволяет выбрать один из поддерживаемых форматов (<strong>PNG</strong>, <strong>JPG</strong>, <strong>TIF</strong>, <strong>GIF</strong>) для помещения файла в информационную базу. Если флажок<strong> Преобразовать в PDF</strong> включен, то в списке становится доступным также формат <strong>PDF</strong> (в этом случае можно выбрать <strong>PDF</strong> для хранения, остальные форматы - для сканирования).</div> +<div><strong>Сохранить как</strong> - приложение позволяет выбрать один из поддерживаемых форматов (<strong>PNG</strong>, <strong>JPG</strong>, <strong>TIF</strong>, <strong>GIF</strong>) для помещения файла в информационную базу. Если флажок<strong> Преобразовать в PDF</strong> включен, то в списке становится доступным также формат <strong>PDF</strong> (в этом случае можно выбрать <strong>PDF</strong> для хранения, остальные форматы - для сканирования).</div> <ul><li><strong>Качество</strong> - если выбран формат <strong>JPG</strong>, то можно настроить его качество (100 - максимальное качество и максимальный размер, 1 - минимальное качество и минимальный размер). По умолчанию - 100. </li> -<li><strong>Сжатие</strong> - если выбран формат <strong>TIF</strong>, можно настроить сжатие. Возможные варианты: <strong>LZW</strong>, <strong>RLE</strong>, <strong>CCITT3</strong>, <strong>CCITT4</strong>, <strong>Без сжатия</strong>. По умолчанию: <strong>Без сжатия</strong>.</li></ul></li></ul><h3>Для многостраничных изображений</h3> -<ul><li><strong>Сохранить как</strong> - приложение позволяет выбрать один из поддерживаемых форматов (<strong>TIF</strong>, <strong>PDF</strong>) для помещения многостраничного файла в информационную базу. Применяется, когда при работе с <a href="DataProcessor.Сканирование.Form.РезультатСканирования/Help">Помощником сканирования</a> для нескольких отсканированных изображений выбрана команда <strong>Принять все как один файл</strong>. </li></ul><h3>Возможность преобразования в PDF</h3> -<ul><li>Выберите с помощью переключателя <strong>Преобразовать в PDF встроенными средствами </strong> - позволяет поместить отсканированные изображения в PDF-файл. </li> -<li>Выберите <strong>Преобразовать в PDF с помощью ImageMagick </strong> - преобразование в данном случае может выполняться быстрее и формировать файлы изображений меньшего размера. При выборе этого способа на рабочем компьютере, к которому подключен сканер, должно быть установлено бесплатное приложение <a href="http://www.imagemagick.org/script/binary-releases.php#windows">ImageMagick</a>.  </li> -<li>Укажите <strong> Путь к приложению преобразования в PDF</strong> - путь к исполняемому файлу приложения ImageMagick (по умолчанию "convert.exe"). Если это имя конфликтует с другими приложениями, с помощью кнопки <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать </strong>нужно указать полный путь вида "C:\Program Files\ImageMagick-6.6.3-Q8\convert.exe".</li></ul><h3>Диагностика проблем</h3> -<ul><li>Включите флажок <strong>Сохранить информацию для технической поддержки</strong>, для того чтобы автоматически сохранять сведения для диагностики проблем сканирования. Это необходимо, например, в случае аварийного завершения приложения. </li> +<li><strong>Сжатие</strong> - если выбран формат <strong>TIF</strong>, можно настроить сжатие. Возможные варианты: <strong>LZW</strong>, <strong>RLE</strong>, <strong>CCITT3</strong>, <strong>CCITT4</strong>, <strong>Без сжатия</strong>. По умолчанию: <strong>Без сжатия</strong>.</li></ul></li></ul><h3>Для многостраничных изображений</h3> +<ul><li><strong>Сохранить как</strong> - приложение позволяет выбрать один из поддерживаемых форматов (<strong>TIF</strong>, <strong>PDF</strong>) для помещения многостраничного файла в информационную базу. Применяется, когда при работе с <a href="DataProcessor.Сканирование.Form.РезультатСканирования/Help">Помощником сканирования</a> для нескольких отсканированных изображений выбрана команда <strong>Принять все как один файл</strong>. </li></ul><h3>Возможность преобразования в PDF</h3> +<ul><li>Выберите с помощью переключателя <strong>Преобразовать в PDF встроенными средствами </strong> - позволяет поместить отсканированные изображения в PDF-файл. </li> +<li>Выберите <strong>Преобразовать в PDF с помощью ImageMagick </strong> - преобразование в данном случае может выполняться быстрее и формировать файлы изображений меньшего размера. При выборе этого способа на рабочем компьютере, к которому подключен сканер, должно быть установлено бесплатное приложение <a href="http://www.imagemagick.org/script/binary-releases.php#windows">ImageMagick</a>. </li> +<li>Укажите <strong> Путь к приложению преобразования в PDF</strong> - путь к исполняемому файлу приложения ImageMagick (по умолчанию "convert.exe"). Если это имя конфликтует с другими приложениями, с помощью кнопки <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать </strong>нужно указать полный путь вида "C:\Program Files\ImageMagick-6.6.3-Q8\convert.exe".</li></ul><h3>Диагностика проблем</h3> +<ul><li>Включите флажок <strong>Сохранить информацию для технической поддержки</strong>, для того чтобы автоматически сохранять сведения для диагностики проблем сканирования. Это необходимо, например, в случае аварийного завершения приложения. </li> <li>В поле <b>Каталог журнала диагностики</b> укажите путь для сохранения технической информации по проблеме сканирования.</li> <li>С помощью гиперссылки <b>Информация для технической поддержки</b> выгрузите техническую информацию по проблеме в указанный каталог.</li></ul><table width="100%"><tbody><tr><td><img src="StdPicture.DialogExclamation" width="32" height="32"></img></td> <td> -<p>Примечание: при работе под управлением ОС <strong>Windows Server 2008 </strong>для использования сканера вам нужно установить компоненту <strong>Возможности рабочего стола</strong> (<strong>Desktop Experience</strong>).</p></td></tr></tbody></table><h3>См. также:</h3> +<p>Примечание: при работе под управлением ОС <strong>Windows Server 2008 </strong>для использования сканера вам нужно установить компоненту <strong>Возможности рабочего стола</strong> (<strong>Desktop Experience</strong>).</p></td></tr></tbody></table><h3>См. также:</h3> <ul><li><a href="Catalog.Файлы/Help"><u>Общие сведения о файлах</u></a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl index a6aff3234..a618237e2 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Module.bsl @@ -45,10 +45,23 @@ Элементы.ОК.Заголовок = НСтр("ru='Сканировать'"); КонецЕсли; - ПараметрыЗаданияСканирования = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", Неопределено); + ПараметрыЗаданияСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", Неопределено); Элементы.ОшибкаСканирования.Видимость = ПараметрыЗаданияСканирования <> Неопределено; + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаОбращенияВТехническуюПоддержку.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаКлиенте @@ -60,6 +73,9 @@ ОбновитьСостояние(); ОбработатьИспользованиеДиалогаСканирования(); Элементы.ОшибкаСканирования.Видимость = Элементы.ОшибкаСканирования.Видимость И Не ОткрытаФормаСканирования(); + + УстановитьТекстРекомендации(); + КонецПроцедуры &НаСервере @@ -107,7 +123,7 @@ СтандартнаяОбработка = Ложь; - Если НЕ РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда + Если НЕ РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда Возврат; КонецЕсли; @@ -159,20 +175,10 @@ КонецПроцедуры -&НаКлиенте -Процедура ТекстОшибкиСканированияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - Если НавигационнаяСсылкаФорматированнойСтроки = "ТехническаяИнформация" Тогда - ПослеПолученияТехническойИнформации = Новый ОписаниеОповещения("ПослеПолученияТехническойИнформации", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПолучитьТехническуюИнформацию(НСтр("ru='Последняя попытка сканирования завершилась неудачно.'"), - ПослеПолученияТехническойИнформации); - СтандартнаяОбработка = Ложь; - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура КаталогЖурналаСканированияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - Если НЕ РаботаСФайламиСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда + Если НЕ РаботаСФайламиСлужебныйКлиент.Расширение1СПредприятияПодключено() Тогда Возврат; КонецЕсли; @@ -196,10 +202,64 @@ КонецПроцедуры &НаКлиенте -Процедура ИнформацияДляТехническойПоддержкиНажатие(Элемент) - ПослеПолученияТехническойИнформации = Новый ОписаниеОповещения("ПослеПолученияТехническойИнформации", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПолучитьТехническуюИнформацию(НСтр("ru='Отправка технической информации из формы настроек.'"), - ПослеПолученияТехническойИнформации); +Процедура РекомендацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + Если НавигационнаяСсылка = "Запустить32БитныйКлиент" Тогда + СтандартнаяОбработка = Ложь; + Запустить32БитныйКлиент(); + Иначе + Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'"); + ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылка = "ВопросВПоддержку" Тогда + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьОтправкуВопросаВПоддержку", + ЭтотОбъект); + + Если Не ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + ПредставлениеОшибки = НСтр("ru='Вызвана помощь из настроек сканирования.'"); + КонецЕсли; + + РаботаСФайламиСлужебныйКлиент.СформироватьИнформациюДляПоддержки( + ПредставлениеОшибки, + ОбработчикЗавершения); + + ИначеЕсли НавигационнаяСсылка = "ИнформацияДляОтправкиВПоддержку" Тогда + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку", + ЭтотОбъект); + + Если Не ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + ПредставлениеОшибки = НСтр("ru='Вызвана помощь из настроек сканирования.'"); + КонецЕсли; + + РаботаСФайламиСлужебныйКлиент.СформироватьИнформациюДляПоддержки( + ПредставлениеОшибки, + ОбработчикЗавершения); + + Иначе + + Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'"); + ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке); + + КонецЕсли; + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержкуКонецПроцедуры + КонецПроцедуры #КонецОбласти @@ -257,6 +317,95 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ПродолжитьОтправкуВопросаВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = Результат.ТехнологическаяИнформация; + ПараметрыОбращения.ДополнительныеФайлы = Результат.ДополнительныеФайлы; + ПараметрыОбращения.Тема = НСтр("ru = 'Проблема при настройке сканирования'"); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = Результат.ТехнологическаяИнформация; + ПараметрыОбращения.ДополнительныеФайлы = Результат.ДополнительныеФайлы; + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьТекстРекомендации() + + Рекомендации = Новый Массив; + + Рекомендации.Добавить(НСтр("ru = 'Попробуйте следующие варианты:'")); + Рекомендации.Добавить(" • " + НСтр("ru = 'Проверьте подключение сканера и повторите попытку сканирования.'")); + + Если Не ПоказыватьДиалогСканера И Не ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда + Рекомендация = " • " + НСтр("ru = 'Смените способ задания настроек на <b>Расширенные в диалоге сканера</b>.'"); + Рекомендации.Добавить(Рекомендация); + КонецЕсли; + + РазрешениеИзображения = ПредопределенноеЗначение("Перечисление.РазрешенияСканированногоИзображения.dpi1200"); + Если ПоказыватьДиалогСканера Или Разрешение = РазрешениеИзображения Тогда + Рекомендации.Добавить(" • " + НСтр("ru = 'Снизьте разрешение сканирования до <b>600 dpi</b>.'")); + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + Шаблон = " • " + НСтр( + "ru = 'Установите и запустите <a href = ""%1"">тонкий клиент 1С:Предприятия для Windows (32-bit)</a>, + | в котором доступно больше устройств и настроек сканирования.'"); + Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, "Запустить32БитныйКлиент"); + Рекомендации.Добавить(Рекомендация); + КонецЕсли; + + Элементы.Рекомендации.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + СтрСоединить(Рекомендации, Символы.ПС)); + +КонецПроцедуры + +&НаКлиенте +Процедура Запустить32БитныйКлиент() + +#Если Не ВебКлиент Тогда + + КаталогПрограммы32 = СтрЗаменить(КаталогПрограммы(), "\Program Files\", "\Program Files (x86)\"); + ИмяПриложения = КаталогПрограммы32 + "1cv8.exe"; + ФайлПриложения = Новый Файл(ИмяПриложения); + Если ФайлПриложения.Существует() Тогда + ФайловаяСистемаКлиент.ЗапуститьПрограмму(ИмяПриложения); + Иначе + СистемнаяИнформация = Новый СистемнаяИнформация(); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку( + "https://releases.1c.ru/version_files?nick=Platform83&ver=" + СистемнаяИнформация.ВерсияПриложения); + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ОбновитьСостояние() @@ -485,8 +634,9 @@ Если НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF Тогда Если Не ЗначениеЗаполнено(НастройкиСканированияПользователя.ПутьКПрограммеКонвертации) Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Не заполнен путь к программе %1.'"), - "ImageMagick"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Не указан путь к приложению %1.'"), + "ImageMagick"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "ПутьКПрограммеКонвертации"); ОшибкаПроверкиЗаполнения = Истина; Иначе diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html index a4721f19e..317be0739 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html @@ -1,18 +1,18 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Предназначена для настройки на данный сеанс сканирования (эти настройки не будут сохранены). Открывается из <a href="DataProcessor.Сканирование.Form.РезультатСканирования/Help">Помощника сканирования</a> по команде <strong>Настройка</strong>.</p> -<p>В зависимости от возможностей сканера, а также долговременных <a href="DataProcessor.Сканирование.Form.НастройкаСканирования/Help">настроек сканирования</a>, некоторые параметры могут быть скрыты. Например, если преобразование в PDF отключено, то поменять формат многостраничного изображения невозможно, по умолчанию будет выбран формат TIF.</p> +<p>Предназначена для настройки на данный сеанс сканирования (эти настройки не будут сохранены). Открывается из <a href="DataProcessor.Сканирование.Form.РезультатСканирования/Help">Помощника сканирования</a> по команде <strong>Настройка</strong>.</p> +<p>В зависимости от возможностей сканера, а также долговременных <a href="DataProcessor.Сканирование.Form.НастройкаСканирования/Help">настроек сканирования</a>, некоторые параметры могут быть скрыты. Например, если преобразование в PDF отключено, то поменять формат многостраничного изображения невозможно, по умолчанию будет выбран формат TIF.</p> <h3>Основное</h3> -<p>Параметры становятся доступными, если соответствующие возможности имеются у сканера.</p> +<p>Параметры становятся доступными, если соответствующие возможности имеются у сканера.</p> <ul><li><strong>Разрешение - </strong>позволяет выбрать разрешение сканирования (DPI). Список доступных разрешений зависит от выбранного сканера. </li><li><strong>Цветность - </strong>выбор цветности изображений, которые будут получены со сканера (Монохромное, Градации Серого, Цветное). </li><li><strong>Поворот изображения - </strong>позволяет выбрать один из вариантов поворота изображений после сканирования. Для некоторых моделей сканеров это свойство недоступно. </li><li><strong>Размер бумаги - </strong>позволяет выбрать размер бумаги, которая помещена в сканер. Для некоторых моделей сканеров это свойство недоступно. -</li><li><strong>Двустороннее сканирование</strong> - если установлено, будут отсканированы обе стороны бумаги. Для некоторых моделей сканеров это свойство недоступно. </li></ul><h3>Для одностраничных изображений</h3> -<ul><li><strong>Формат - </strong>позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF, PDF) для помещения в информационную базу. -<ul><li><strong>Тип сканированного изображения - </strong>позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF) для изображений, которые будут получены со сканера. Опция доступна, если формат одностраничного изображения - PDF. +</li><li><strong>Двустороннее сканирование</strong> - если установлено, будут отсканированы обе стороны бумаги. Для некоторых моделей сканеров это свойство недоступно. </li></ul><h3>Для одностраничных изображений</h3> +<ul><li><strong>Формат - </strong>позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF, PDF) для помещения в информационную базу. +<ul><li><strong>Тип сканированного изображения - </strong>позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF) для изображений, которые будут получены со сканера. Опция доступна, если формат одностраничного изображения - PDF. </li><li><strong>Качество</strong> - если выбран формат JPG, то можно настроить его качество (100 - максимальное качество и максимальный размер,1 - минимальное качество и минимальный размер.). По умолчанию - 100. </li><li><strong>Сжатие</strong> - если выбран формат TIF, можно настроить сжатие. Возможные варианты: LZW, RLE, CCITT3, CCITT4, Без сжатия. По умолчанию: Без сжатия.</li></ul></li></ul><h3>Для многостраничных изображений</h3> -<p>Параметр становится доступным для выбора, если в настройках сканирования включено преобразование в PDF.</p> -<ul><li><strong>Формат - </strong>позволяет выбрать один из поддерживаемых форматов (TIF, PDF) для помещения в информационную базу. Применяется когда выбрана команда <strong>Принять все как один файл</strong>. </li></ul><h3>Диалог сканера</h3> -<ul><li><strong>Показывать диалог сканера</strong> - если флажок включен, перед сканированием будет показан диалог для расширенной настройки сканирования (например, выбор области сканирования на листе бумаги).</li></ul><h3>См. также:</h3> +<p>Параметр становится доступным для выбора, если в настройках сканирования включено преобразование в PDF.</p> +<ul><li><strong>Формат - </strong>позволяет выбрать один из поддерживаемых форматов (TIF, PDF) для помещения в информационную базу. Применяется когда выбрана команда <strong>Принять все как один файл</strong>. </li></ul><h3>Диалог сканера</h3> +<ul><li><strong>Показывать диалог сканера</strong> - если флажок включен, перед сканированием будет показан диалог для расширенной настройки сканирования (например, выбор области сканирования на листе бумаги).</li></ul><h3>См. также:</h3> <ul><li><a href="Catalog.Файлы/Help"><u><font color="#0000ff">Общие сведения о файлах</font></u></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 deleted file mode 100644 index 74144581d..000000000 --- a/SSL/src/DataProcessors/Сканирование/Forms/ОшибкаСканирования/Form.form +++ /dev/null @@ -1,301 +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"> - <title> - <key>ru</key> - <value>Не удалось отсканировать документ</value> - - - ГруппаОшибки - 10 - - КартинкаОшибки - 7 - - <key>ru</key> - <value>Декорация1</value> - - true - true - - true - - - КартинкаОшибкиРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - - КартинкаОшибкиКонтекстноеМеню - 8 - true - - true - true - - - StdPicture.DialogExclamation - - AsFileRef - - - - ТекстОшибки - 4 - - <key>ru</key> - <value>Сканер %1 не обнаружен или не подключен. - -Попробуйте одно из следующих действий: - • Проверьте подключение сканера и повторите попытку сканирования. - • Укажите в <link Настройки>настройках сканирования</> доступный сканер. - • Выберите в настройках сканирования вариант <b>Расширенные в диалоге сканера</>. - • В настройках сканера задайте профиль сканирования и укажите его профилем по умолчанию.</value> - - true - true - - true - - - ТекстОшибкиРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - ТекстОшибкиКонтекстноеМеню - 5 - true - - true - Label - true - - - URLProcessing - ТекстОшибкиОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Ошибка</value> - - - ГруппаОшибкиРасширеннаяПодсказка - 11 - Label - true - true - - Left - - - UsualGroup - - AlwaysHorizontal - Auto - true - true - Auto - Auto - - - - ГруппаКоманд - 16 - - ПовторитьСканирование - 20 - - <key>ru</key> - <value>Повторить сканирование</value> - - true - true - - true - - true - - ПовторитьСканированиеРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - UsualButton - Form.Command.ПовторитьСканирование - Auto - true - true - true - UserCmds - Auto - - - Отмена - 14 - true - true - - true - - - ОтменаРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.Cancel - Normal - Auto - true - true - Right - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Команды</value> - - 3 - Right - - ГруппаКомандРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Double - Bottom - Auto - true - true - Auto - Auto - - - - ФормаКоманднаяПанель - -1 - Left - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - LockOwner - true - true - Vertical - true - true - true - auto - true - - ПовторитьСканирование - - <key>ru</key> - <value>Повторить сканирование</value> - - 3 - - true - - - - ПовторитьСканирование - - - Auto - Auto - - - ИмяУстройстваСканирования - - String - - - true - - - Заголовок - - String - - - - - ПодробноеПредставлениеОшибки - - String - - - true - - - ПоказыватьДиалогСканера - - Boolean - - true - - - РежимТребуетсяПомощь - - Boolean - - true - - - Разрешение - - true - - - - - - diff --git a/SSL/src/DataProcessors/Сканирование/Forms/ОшибкаСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/ОшибкаСканирования/Module.bsl deleted file mode 100644 index 85baf7110..000000000 --- a/SSL/src/DataProcessors/Сканирование/Forms/ОшибкаСканирования/Module.bsl +++ /dev/null @@ -1,119 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Заголовок = Параметры.Заголовок; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - УстановитьТекстОшибки(); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура ТекстОшибкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - Если НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьНастройки" Тогда - СтандартнаяОбработка = Ложь; - РаботаСФайламиКлиент.ОткрытьФормуНастройкиСканирования(); - ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ТехническаяИнформация" Тогда - СтандартнаяОбработка = Ложь; - ПолучитьТехническуюИнформацию(); - ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "Запустить32БитныйКлиент" Тогда - СтандартнаяОбработка = Ложь; - Запустить32БитныйКлиент(); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ПовторитьСканирование(Команда) - Закрыть("ПовторитьСканирование"); -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура УстановитьТекстОшибки() - Рекомендации = Новый Массив; - Рекомендации.Добавить(НСтр("ru = 'Проверьте подключение сканера и повторите попытку сканирования.'")); - Рекомендации.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Укажите в настройках сканирования доступный сканер.'"), - "ОткрытьНастройки")); - - Если Не Параметры.ПоказыватьДиалогСканера И Не ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда - Рекомендации.Добавить(НСтр("ru = 'Смените способ задания настроек на Расширенные в диалоге сканера.'")); - КонецЕсли; - - Если Параметры.ПоказыватьДиалогСканера - Или Параметры.Разрешение = ПредопределенноеЗначение("Перечисление.РазрешенияСканированногоИзображения.dpi1200") Тогда - Рекомендации.Добавить(НСтр("ru = 'Снизьте разрешение сканирования до 600 dpi.'")); - КонецЕсли; - - СистемнаяИнформация = Новый СистемнаяИнформация(); - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - Рекомендации.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установите и запустите тонкий клиент 1С:Предприятия для Windows (32-bit), - | в котором доступно больше устройств и настроек сканирования.'"), - "Запустить32БитныйКлиент")); - КонецЕсли; - - Если Параметры.РежимТребуетсяПомощь Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сканирование выполняется с помощью %1.'"), - Параметры.ИмяУстройстваСканирования); - Иначе - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сканер ""%1"" не обнаружен или не подключен.'"), - Параметры.ИмяУстройстваСканирования); - КонецЕсли; - - ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС - + НСтр("ru = 'Попробуйте следующие варианты:'") + Символы.ПС - + " • " + СтрСоединить(Рекомендации, Символы.ПС + " • "); - ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Если проблема повторится, обратитесь в службу поддержки фирмы ""1С"", - |предоставив техническую информацию о возникшей проблеме.'"), - "ТехническаяИнформация"); - - Элементы.ТекстОшибки.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(ТекстОшибки); -КонецПроцедуры - -&НаКлиенте -Процедура ПолучитьТехническуюИнформацию() - РаботаСФайламиСлужебныйКлиент.ПолучитьТехническуюИнформацию(Параметры.ПодробноеПредставлениеОшибки); -КонецПроцедуры - -&НаКлиенте -Процедура Запустить32БитныйКлиент() -#Если Не ВебКлиент Тогда - КаталогПрограммы32 = СтрЗаменить(КаталогПрограммы(), "\Program Files\", "\Program Files (x86)\"); - ИмяПриложения = КаталогПрограммы32 + "1cv8.exe"; - ФайлПриложения = Новый Файл(ИмяПриложения); - Если ФайлПриложения.Существует() Тогда - ФайловаяСистемаКлиент.ЗапуститьПрограмму(ИмяПриложения); - Иначе - СистемнаяИнформация = Новый СистемнаяИнформация(); - ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://releases.1c.ru/version_files?nick=Platform83&ver=" + СистемнаяИнформация.ВерсияПриложения); - КонецЕсли; -#КонецЕсли -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form index b8056e96b..98626b7d4 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Form.form @@ -311,205 +311,26 @@ - ОшибкаСканирования - 66 - - КартинкаОшибкиСканирования - 68 - - <key>ru</key> - <value>Картинка ошибки сканирования</value> - - true - true - - true - - - КартинкаОшибкиСканированияРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - - КартинкаОшибкиСканированияКонтекстноеМеню - 69 - true - - true - true - - - CommonPicture.Предупреждение - - AsFileRef - - - - ТекстОшибкиСканирования - 71 - - <key>ru</key> - <value>Сканирование завершилось аварийно, сохранить <link ТехническаяИнформация>информацию для технической поддержки</>.</value> - - true - true - - true - - - ТекстОшибкиСканированияРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - - ТекстОшибкиСканированияКонтекстноеМеню - 72 - true - - true - Label - true - - - URLProcessing - ТекстОшибкиСканированияОбработкаНавигационнойСсылки - - Left - - - true - true - - true - - - <key>ru</key> - <value>Ошибка сканирования</value> - - - ОшибкаСканированияРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - Auto - true - true - Auto - Auto - - - - ГруппаСообщение - 20 - - ДекорацияИконка - 21 - - <key>ru</key> - <value>Декорация иконка</value> - - true - true - - true - - - ДекорацияИконкаРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - - ДекорацияИконкаКонтекстноеМеню - 22 - true - - true - true - false - - - StdPicture.Information - - - - - ТекстНастроекИзменить1 - 64 - - <key>ru</key> - <value>Текст настроек изменить</value> - - true - - true - - - ТекстНастроекИзменить1РасширеннаяПодсказка - 65 - Label - true - true - - Left - - - UsualButton - Form.Command.ТекстНастроекИзменить - Normal - Picture - true - true - UserCmds - - CommonPicture.ПрочиеПользовательскиеНастройки - - Auto - + ГруппаПодвал + 77 - ГруппаТекстНастроек - 53 - - ТекстНастроек - 17 + ОшибкаСканирования + 66 + + КартинкаОшибкиСканирования + 68 <key>ru</key> - <value>Текст настроек</value> + <value>Картинка ошибки сканирования</value> true true true - - ТекстНастроек - - None - ТекстНастроекРасширеннаяПодсказка - 38 + КартинкаОшибкиСканированияРасширеннаяПодсказка + 70 Label true true @@ -518,26 +339,123 @@ - ТекстНастроекКонтекстноеМеню - 18 + КартинкаОшибкиСканированияКонтекстноеМеню + 69 true - LabelField - Enter - true - Left - true - - 75 + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + + + ТекстОшибкиСканирования + 71 + + <key>ru</key> + <value>Сканирование завершилось аварийно. При возникновении затруднений обратитесь в службу поддержки фирмы "1С".</value> + + true + true + + true + + + ТекстОшибкиСканированияРасширеннаяПодсказка + 73 + Label true - 2 true - false + + Left + + + + ТекстОшибкиСканированияКонтекстноеМеню + 72 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ошибка сканирования</value> + + + ОшибкаСканированияРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ГруппаСообщение + 20 + + ДекорацияИконка + 21 + + <key>ru</key> + <value>Декорация иконка</value> + + true + true + + true + + + ДекорацияИконкаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ДекорацияИконкаКонтекстноеМеню + 22 + true + + true + true + false + + + StdPicture.Information + - ТекстНастроекИзменить - 60 + ТекстНастроекИзменить1 + 64 <key>ru</key> <value>Текст настроек изменить</value> @@ -547,8 +465,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ТекстНастроекИзменитьРасширеннаяПодсказка</name> - <id>61</id> + <name>ТекстНастроекИзменить1РасширеннаяПодсказка</name> + <id>65</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -556,17 +474,125 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <type>Hyperlink</type> + <type>UsualButton</type> <commandName>Form.Command.ТекстНастроекИзменить</commandName> <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <width>75</width> + <representation>Picture</representation> <autoMaxWidth>true</autoMaxWidth> - <height>2</height> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> + <picture xsi:type="core:PictureRef"> + <picture>CommonPicture.ПрочиеПользовательскиеНастройки</picture> + </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаТекстНастроек</name> + <id>53</id> + <items xsi:type="form:FormField"> + <name>ТекстНастроек</name> + <id>17</id> + <title> + <key>ru</key> + <value>Текст настроек</value> + + true + true + + true + + + ТекстНастроек + + None + + ТекстНастроекРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ТекстНастроекКонтекстноеМеню + 18 + true + + LabelField + Enter + true + Left + true + + 75 + true + 2 + true + false + + + + ТекстНастроекИзменить + 60 + + <key>ru</key> + <value>Текст настроек изменить</value> + + true + + true + + + ТекстНастроекИзменитьРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Hyperlink + Form.Command.ТекстНастроекИзменить + Normal + Auto + 75 + true + 2 + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Текст настроек</value> + + + ГруппаТекстНастроекРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + true true @@ -574,11 +600,150 @@ <key>ru</key> - <value>Текст настроек</value> + <value>Сообщение</value> + 2 - ГруппаТекстНастроекРасширеннаяПодсказка - 54 + ГруппаСообщениеРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + ГруппаТребуетсяПомощь + 90 + + Рекомендации + 92 + + <key>ru</key> + <value>Попробуйте одно из следующих действий: + +</value> + + true + true + + true + + + РекомендацииРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + РекомендацииКонтекстноеМеню + 93 + true + + true + Label + true + + + URLProcessing + РекомендацииОбработкаНавигационнойСсылки + + Left + + + + ГруппаОбращенияВТехническуюПоддержку + 95 + + ОписаниеОбращенияВПоддержку + 97 + true + true + + true + + + ОписаниеОбращенияВПоддержкуРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + ОписаниеОбращенияВПоддержкуКонтекстноеМеню + 98 + true + + Label + 55 + true + + + URLProcessing + ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Обращения в техническую поддержку</value> + + + ГруппаОбращенияВТехническуюПоддержкуРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Требуется помощь?</value> + + Center + + ГруппаТребуетсяПомощьРасширеннаяПодсказка + 91 Label true true @@ -589,51 +754,15 @@ UsualGroup Vertical + PopUp + WeakSeparation true true + auto Auto Auto - - ТребуетсяПомощь - 74 - - <key>ru</key> - <value>Требуется помощь</value> - - true - true - - true - - - ТребуетсяПомощьРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - - ТребуетсяПомощьКонтекстноеМеню - 75 - true - - Label - true - true - - - Click - ТребуетсяПомощьНажатие - - true - Left - - true true @@ -641,12 +770,11 @@ <key>ru</key> - <value>Сообщение</value> + <value>Подвал</value> - 2 - ГруппаСообщениеРасширеннаяПодсказка - 36 + ГруппаПодвалРасширеннаяПодсказка + 78 Label true true @@ -656,7 +784,8 @@ UsualGroup - HorizontalIfPossible + Vertical + Auto true true Auto @@ -1531,6 +1660,20 @@ true + + ПредставлениеОшибки + 44 + + String + + + + true + + + true + + Сохранить diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html index 382ad0d3a..44b37c5d4 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html @@ -1,20 +1,20 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18212"></meta></head><body> <p>В этом окне вы можете отсканировать одно или несколько изображений. </p> -<p>Сканирование изображений производится по команде <strong>Создать файл - Со сканера</strong> в <a href="Catalog.Файлы.Form.Файлы/Help">списке</a> <strong>Файлы</strong> (<a href="DataProcessor.РаботаСФайлами.Form.ПрисоединенныеФайлы/Help">Присоединенные файлы</a>).</p> +<p>Сканирование изображений производится по команде <strong>Создать файл - Со сканера</strong> в <a href="Catalog.Файлы.Form.Файлы/Help">списке</a> <strong>Файлы</strong> (<a href="DataProcessor.РаботаСФайлами.Form.ПрисоединенныеФайлы/Help">Присоединенные файлы</a>).</p> <h3>Работа с отсканированными изображениями</h3> -<p>После того как первое изображение отсканировано, оно показывается в окне <strong>Помощника</strong>,<strong> </strong>в информационной строке под изображением выводится формат и другие параметры изображения. Становятся доступными команды:</p> -<ul><li><strong>Сканировать</strong> - нажмите эту кнопку, если необходимо отсканировать сразу несколько документов. +<p>После того как первое изображение отсканировано, оно показывается в окне <strong>Помощника</strong>,<strong> </strong>в информационной строке под изображением выводится формат и другие параметры изображения. Становятся доступными команды:</p> +<ul><li><strong>Сканировать</strong> - нажмите эту кнопку, если необходимо отсканировать сразу несколько документов. </li> <li><strong>Пересканировать</strong> - удаляет текущее изображение и сканирует заново. </li> -<li><strong>Сохранить</strong> - создает файл на основании изображения (кнопка доступна, если отсканировано одно изображение). Автоматически создается <a href="Catalog.Файлы.Form.ФормаЭлемента/Help">карточка файла</a>, окно помощника закрывается. +<li><strong>Сохранить</strong> - создает файл на основании изображения (кнопка доступна, если отсканировано одно изображение). Автоматически создается <a href="Catalog.Файлы.Form.ФормаЭлемента/Help">карточка файла</a>, окно помощника закрывается. </li> -<li><strong>Сохранить все как один файл</strong> - кнопка становится доступной, если отсканировано два и более изображения, создает многостраничный файл (TIF или PDF) на основании всех изображений. Автоматически создается карточка файла и выводится на экран, окно помощника закрывается. +<li><strong>Сохранить все как один файл</strong> - кнопка становится доступной, если отсканировано два и более изображения, создает многостраничный файл (TIF или PDF) на основании всех изображений. Автоматически создается карточка файла и выводится на экран, окно помощника закрывается. </li> -<li><strong>Сохранить все как отдельные файлы</strong> - кнопка становится доступной, если отсканировано два и более изображения, создает отдельный файл на основании каждого из изображений. Автоматически создаются карточки файла, окно помощника закрывается. +<li><strong>Сохранить все как отдельные файлы</strong> - кнопка становится доступной, если отсканировано два и более изображения, создает отдельный файл на основании каждого из изображений. Автоматически создаются карточки файла, окно помощника закрывается. </li> <li><strong>Отмена</strong> - отказаться от продолжения сканирования и выйти без сохранения отсканированных изображений. </li> -<li><strong>Настройка</strong> - выполните эту команду меню <strong>Еще</strong>, для того чтобы в этом сеансе сканирования изменить <a href="DataProcessor.Сканирование.Form.НастройкаСканирования/Help">параметры сканирования</a>, установленные в персональных настройках приложения. Установите <a href="DataProcessor.Сканирование.Form.НастройкаСканированияНаСеанс/Help">параметры на этот сеанс</a> и нажмите кнопку <strong>ОК</strong>. Ранее отсканированные изображения не удаляются.</li> -<li><b>Требуется помощь</b> - нажмите на гиперссылку, если возникли проблемы при сканировании файла. Откроется окно с вариантами решения типичных проблем при работе со сканированием и варианты их решения. Также можно обратиться в службу поддержки фирмы "1С", предоставив всю необходимую информацию о возникшей проблеме. Предварительно техническую информацию можно выгрузить из приложения в каталог на компьютер. </li></ul><h3>См. также:</h3> +<li><strong>Настройка</strong> - выполните эту команду меню <strong>Еще</strong>, для того чтобы в этом сеансе сканирования изменить <a href="DataProcessor.Сканирование.Form.НастройкаСканирования/Help">параметры сканирования</a>, установленные в персональных настройках приложения. Установите <a href="DataProcessor.Сканирование.Form.НастройкаСканированияНаСеанс/Help">параметры на этот сеанс</a> и нажмите кнопку <strong>ОК</strong>. Ранее отсканированные изображения не удаляются.</li> +<li><b>Требуется помощь</b> - нажмите на гиперссылку, если возникли проблемы при сканировании файла. Откроется окно с вариантами решения типичных проблем при работе со сканированием и варианты их решения. Также можно обратиться в службу поддержки фирмы "1С", предоставив всю необходимую информацию о возникшей проблеме. Предварительно техническую информацию можно выгрузить из приложения в каталог на компьютер. </li></ul><h3>См. также:</h3> <ul><li><a href="Catalog.Файлы/Help">Общая информация о файлах</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index 496550d42..2be894d89 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -61,6 +61,19 @@ ПараметрыЗаданияСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", Неопределено); Элементы.ОшибкаСканирования.Видимость = ПараметрыЗаданияСканирования <> Неопределено; + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + МодульОбращенияВТехническуюПоддержкуСлужебный = ОбщегоНазначения.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебный"); + + МодульОбращенияВТехническуюПоддержкуСлужебный.ПриСозданииНаСервере(ЭтотОбъект); + + Иначе + Элементы.ГруппаОбращенияВТехническуюПоддержку.Видимость = Ложь; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + КонецПроцедуры &НаКлиенте @@ -78,6 +91,8 @@ ПозицияДляВставки = Неопределено; + УстановитьТекстРекомендации(); + КонецПроцедуры &НаКлиенте @@ -123,6 +138,74 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РекомендацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + Если НавигационнаяСсылка = "ОткрытьНастройки" Тогда + СтандартнаяОбработка = Ложь; + РаботаСФайламиКлиент.ОткрытьФормуНастройкиСканирования(); + ИначеЕсли НавигационнаяСсылка = "Запустить32БитныйКлиент" Тогда + СтандартнаяОбработка = Ложь; + Запустить32БитныйКлиент(); + Иначе + Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'"); + ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОписаниеОбращенияВПоддержкуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку") Тогда + + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылка = "ВопросВПоддержку" Тогда + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьОтправкуВопросаВПоддержку", + ЭтотОбъект); + + Если Не ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + ПредставлениеОшибки = НСтр("ru='Вызвана помощь из окна сканирования.'"); + КонецЕсли; + + РаботаСФайламиСлужебныйКлиент.СформироватьИнформациюДляПоддержки( + ПредставлениеОшибки, + ОбработчикЗавершения); + + ИначеЕсли НавигационнаяСсылка = "ИнформацияДляОтправкиВПоддержку" Тогда + + ОбработчикЗавершения = Новый ОписаниеОповещения( + "ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку", + ЭтотОбъект); + + Если Не ЗначениеЗаполнено(ПредставлениеОшибки) Тогда + ПредставлениеОшибки = НСтр("ru='Вызвана помощь из окна сканирования.'"); + КонецЕсли; + + РаботаСФайламиСлужебныйКлиент.СформироватьИнформациюДляПоддержки( + ПредставлениеОшибки, + ОбработчикЗавершения); + + Иначе + + Выражение = НСтр("ru = 'Действие для навигационной ссылки не определено.'"); + ВызватьИсключение(Выражение, КатегорияОшибки.ОшибкаПереходаПоНавигационнойСсылке); + + КонецЕсли; + + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержкуКонецПроцедуры + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаФайлов &НаКлиенте @@ -362,28 +445,108 @@ КонецПроцедуры -&НаКлиенте -Процедура ТекстОшибкиСканированияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - Если НавигационнаяСсылкаФорматированнойСтроки = "ТехническаяИнформация" Тогда - ПослеПолученияТехническойИнформации = Новый ОписаниеОповещения("ПослеПолученияТехническойИнформации", ЭтотОбъект); - РаботаСФайламиСлужебныйКлиент.ПолучитьТехническуюИнформацию(НСтр("ru='Последняя попытка сканирования завершилась неудачно.'"), - ПослеПолученияТехническойИнформации); - СтандартнаяОбработка = Ложь; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ТребуетсяПомощьНажатие(Элемент) - - РаботаСФайламиСлужебныйКлиент.ПоказатьОшибкуСканирования(ЭтотОбъект, НСтр("ru='Проблема при сканировании'"), - НСтр("ru='Вызвана помощь из окна сканирования.'"), Истина); - -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ПродолжитьОтправкуВопросаВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = Результат.ТехнологическаяИнформация; + ПараметрыОбращения.ДополнительныеФайлы = Результат.ДополнительныеФайлы; + ПараметрыОбращения.Тема = НСтр("ru = 'Проблема при сканировании файла'"); + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ОтправитьВопросВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура ПродолжитьСкачиваниеИнформацииДляОтправкиВПоддержку(Результат, ДополнительныеПараметры) Экспорт + + // СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль( + "ОбращенияВТехническуюПоддержкуСлужебныйКлиент"); + + ПараметрыОбращения = МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.ПараметрыОбращения(); + ПараметрыОбращения.ТехнологическаяИнформация = Результат.ТехнологическаяИнформация; + ПараметрыОбращения.ДополнительныеФайлы = Результат.ДополнительныеФайлы; + + МодульОбращенияВТехническуюПоддержкуСлужебныйКлиент.СкачатьИнформациюДляОтправкиВПоддержку( + ЭтотОбъект, + ПараметрыОбращения); + // Конец СтандартныеПодсистемы.ОбращенияВТехническуюПоддержку + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьТекстРекомендации() + + Рекомендации = Новый Массив; + + Шаблон = НСтр("ru = 'Сканирование выполняется с помощью %1.'"); + Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяУстройстваСканирования); + Рекомендации.Добавить(Рекомендация); + + Рекомендации.Добавить(""); + Рекомендации.Добавить(НСтр("ru = 'Попробуйте следующие варианты:'")); + Рекомендации.Добавить(" • " + НСтр("ru = 'Проверьте подключение сканера и повторите попытку сканирования.'")); + + Шаблон = " • " + НСтр("ru = 'Укажите в <a href = ""%1"">настройках сканирования</a> доступный сканер.'"); + Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, "ОткрытьНастройки"); + Рекомендации.Добавить(Рекомендация); + + Если Не ПоказыватьДиалогСканера И Не ОбщегоНазначенияКлиент.ЭтоLinuxКлиент() Тогда + Рекомендация = " • " + НСтр("ru = 'Смените способ задания настроек на <b>Расширенные в диалоге сканера</b>.'"); + Рекомендации.Добавить(Рекомендация); + КонецЕсли; + + РазрешениеИзображения = ПредопределенноеЗначение("Перечисление.РазрешенияСканированногоИзображения.dpi1200"); + Если ПоказыватьДиалогСканера Или РазрешениеПеречисление = РазрешениеИзображения Тогда + Рекомендации.Добавить(" • " + НСтр("ru = 'Снизьте разрешение сканирования до <b>600 dpi</b>.'")); + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация(); + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + Шаблон = " • " + НСтр( + "ru = 'Установите и запустите <a href = ""%1"">тонкий клиент 1С:Предприятия для Windows (32-bit)</a>, + | в котором доступно больше устройств и настроек сканирования.'"); + Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, "Запустить32БитныйКлиент"); + Рекомендации.Добавить(Рекомендация); + КонецЕсли; + + Элементы.Рекомендации.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока( + СтрСоединить(Рекомендации, Символы.ПС)); + +КонецПроцедуры + +&НаКлиенте +Процедура Запустить32БитныйКлиент() + +#Если Не ВебКлиент Тогда + + КаталогПрограммы32 = СтрЗаменить(КаталогПрограммы(), "\Program Files\", "\Program Files (x86)\"); + ИмяПриложения = КаталогПрограммы32 + "1cv8.exe"; + ФайлПриложения = Новый Файл(ИмяПриложения); + Если ФайлПриложения.Существует() Тогда + ФайловаяСистемаКлиент.ЗапуститьПрограмму(ИмяПриложения); + Иначе + СистемнаяИнформация = Новый СистемнаяИнформация(); + ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку( + "https://releases.1c.ru/version_files?nick=Platform83&ver=" + СистемнаяИнформация.ВерсияПриложения); + КонецЕсли; + +#КонецЕсли + +КонецПроцедуры + &НаКлиенте Процедура ПередОткрытием() @@ -705,8 +868,6 @@ ТекущаяДата - НачалоСканирования, "ImageScan.log"); РаботаСФайламиСлужебныйКлиент.ЗаписатьЖурналСканирования("СобытиеСканера" + "." + Событие, ПредставлениеОшибки, Истина); - РаботаСФайламиСлужебныйКлиент.ПоказатьОшибкуСканирования(ЭтотОбъект, - НСтр("ru='Не удалось отсканировать документ'"), ПредставлениеОшибки); Иначе Контекст = Новый Структура; Контекст.Вставить("ЗакрытьФорму", ТаблицаФайлов.Количество() = 0); @@ -726,7 +887,7 @@ #КонецЕсли -КонецПроцедуры +КонецПроцедуры &НаКлиенте Процедура ПослеУдаленияОшибки(Результат, Контекст) Экспорт @@ -1111,7 +1272,7 @@ АдресКартинки = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ДлительнаяОперация48.ПолучитьДвоичныеДанные(), УникальныйИдентификатор); #КонецЕсли - ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", + ОбщегоНазначенияКлиент.ХранилищеОбщихНастроекСохранить("КомпонентаСканирования", "ПараметрыЗаданияСканирования", ПараметрыЗаданияСканирования,,,Истина); РаботаСФайламиСлужебныйКлиент.НачатьСканирование(ЭтотОбъект, ПодключаемыйМодуль, ПараметрыСканирования); КонецПроцедуры diff --git a/SSL/src/DataProcessors/Сканирование/Сканирование.mdo b/SSL/src/DataProcessors/Сканирование/Сканирование.mdo index 68f902499..cb9f3b36e 100644 --- a/SSL/src/DataProcessors/Сканирование/Сканирование.mdo +++ b/SSL/src/DataProcessors/Сканирование/Сканирование.mdo @@ -52,15 +52,6 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="bb4009c1-7c48-4a5c-a4af-3b27de48ed3e"> - <name>ОшибкаСканирования</name> - <synonym> - <key>ru</key> - <value>Ошибка сканирования</value> - </synonym> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> <commands uuid="0a7e5d85-3f94-4d93-8478-6d34f3b3ea33"> <name>СканироватьЛист</name> <synonym> diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html index 12961c6cc..71f0918d1 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html @@ -10,7 +10,7 @@ <li>Предупреждение при изменении версионируемого объекта.</li></ul><p>Очистка конфиденциальной информации производится в двух режимах.</p> <h3>Автоматический режим</h3> <ul><li> -<div>Применяется при подготовке ИБ для передачи в техническую поддержку.</div> +<div>Применяется при подготовке ИБ для передачи в техническую поддержку.</div> </li> <li> <div><strong>Внимание! </strong>Обработка всех данных информационной базы. Рекомендуется производить на копии рабочей базы, т.к. это приведет к безвозвратной потере данных.</div> @@ -36,13 +36,13 @@ <div>Список обрабатываемых реквизитов состоит из двух вкладок.</div></li></ul><h3>Обрабатываемые объекты</h3> <p>Список состоит из двух колонок: </p> <ul><li> -<div>В колонке <strong>Объект</strong> можно с помощью флажков отметить, какие объекты и их реквизиты нужно обработать.</div> +<div>В колонке <strong>Объект</strong> можно с помощью флажков отметить, какие объекты и их реквизиты нужно обработать.</div> </li> <li> -<div>В колонке <strong>Правило обработки</strong> указано <strong>По умолчанию</strong> (такое значение не выбирается, выставлено приложением автоматически, для каждого поля может быть установлено одно из следующих значений). </div> +<div>В колонке <strong>Правило обработки</strong> указано <strong>По умолчанию</strong> (такое значение не выбирается, выставлено приложением автоматически, для каждого поля может быть установлено одно из следующих значений). </div> </li> <li> -<div>Выберите, как будет обрабатываться конкретный реквизит, с помощью кнопки <img src="StdPicture.InputFieldSelect"></img>: <strong>Не изменять</strong>, <strong>Случайное значение</strong>, <strong>Имя поля и индекс</strong>, <strong>Имя объекта и индекс</strong>. </div></li></ul><h3>Правила обработки</h3> +<div>Выберите, как будет обрабатываться конкретный реквизит, с помощью кнопки <img src="StdPicture.InputFieldSelect"></img>: <strong>Не изменять</strong>, <strong>Случайное значение</strong>, <strong>Имя поля и индекс</strong>, <strong>Имя объекта и индекс</strong>. </div></li></ul><h3>Правила обработки</h3> <ul><li> <div><strong>Строки</strong>: "Не изменять", "Очистить", "Случайное значение", "ИмяПоля+Индекс", "ИмяОбъекта+Индекс".</div> </li> diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl index d750c6d41..88c734bf2 100644 --- a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl @@ -17,9 +17,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры скрытия конфиденциальной информации в интерактивном режиме. - +#Область ПроцедурыСкрытияКонфиденциальнойИнформацииВИнтерактивномРежиме // Параметры: // Параметры - Структура: @@ -978,8 +976,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. +#КонецОбласти + +#Область ПрочиеПроцедурыИФункции // Параметры: // ОбъектМетаданных - ОбъектМетаданныхКонстанта @@ -1197,6 +1196,8 @@ #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index 0a746ca1d..95c7be468 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -359,8 +359,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики ожидания +#Область ОбработчикиОжидания &НаКлиенте Процедура ОбработчикОжиданияФоновогоЗадания() @@ -390,8 +389,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий переходов. +#КонецОбласти + +#Область ОбработчикиСобытийПереходов // Страница 1: Ошибка автоматического сопоставления. // @@ -582,8 +582,9 @@ ,ПодробноеПредставлениеОшибки); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Инициализация переходов помощника. +#КонецОбласти + +#Область ИнициализацияПереходовПомощника &НаСервере Процедура СценарийАвтоматическогоСопоставленияОбъектов() @@ -603,3 +604,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index dbd14ab3a..cd07c0bf9 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -453,7 +453,7 @@ <id>282</id> <title> <key>ru</key> - <value>Загрузить данные из другой программы</value> + <value>Загрузить данные из другого приложения</value> true true @@ -1072,7 +1072,7 @@ <key>ru</key> - <value>Данные этой программы</value> + <value>Данные этого приложения</value> ДанныеЭтойПрограммыExtendedTooltip @@ -1404,7 +1404,7 @@ <key>ru</key> - <value>Данные второй программы</value> + <value>Данные второго приложения</value> ДанныеВторойПрограммыExtendedTooltip @@ -3677,7 +3677,7 @@ ВыполнитьЗагрузкуДанных <key>ru</key> - <value>Загрузить данные из другой программы</value> + <value>Загрузить данные из другого приложения</value> 10 diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index 44d257880..28dcf9139 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -503,8 +503,7 @@ ОбновитьТаблицуСопоставления(); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (Поставляемая часть). +#Область СлужебныеПроцедурыИФункцииПоставляемаяЧасть &НаКлиенте Процедура ИзменитьПорядковыйНомерПерехода(Итератор) @@ -696,6 +695,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере @@ -981,8 +982,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прикладные +#Область Прикладные &НаКлиенте Процедура ЗаполнитьТаблицуСортировки(СписокЗначенийИсточник) @@ -1359,8 +1359,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Свойства +#КонецОбласти + +#Область Свойства &НаКлиенте Функция МаксимальноеКоличествоПользовательскихПолей() @@ -1369,8 +1370,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий переходов. +#КонецОбласти + +#Область ОбработчикиСобытийПереходов // Страница 1: Ошибка сопоставления объектов. // @@ -1596,8 +1598,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Инициализация переходов помощника. +#КонецОбласти + +#Область ИнициализацияПереходовПомощника &НаСервере Процедура СценарийВыполненияСопоставленияОбъектов() @@ -1615,3 +1618,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html index 982070ed5..9e4d7f781 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html @@ -1,7 +1,7 @@

              Предназначена для сопоставления данных двух приложений.

              Список открывается по команде Выполнить сопоставление на странице Сопоставление данных Помощника интерактивной синхронизации данных. Также можно дважды щелкнуть мышью по строке, в которой обнаружены проблемы сопоставления данных.

              -

              Список состоит из двух колонок, каждая из которых соответствует информационной базе, участвующей в обмене. Данные сгруппированы по объектам приложения (документы, списки). В нижней части списка выводится информационная строка: сколько элементов сопоставлено, сколько не сопоставлено.

              +

              Список состоит из двух колонок, каждая из которых соответствует информационной базе, участвующей в обмене. Данные сгруппированы по объектам приложения (документы, списки). В нижней части списка выводится информационная строка: сколько элементов сопоставлено, сколько не сопоставлено.

              В поле Выводить можно выбрать, какие данные показывать в списке. По умолчанию выводятся Несопоставленные данные.

              Сопоставление объектов

              • Нажмите Сопоставить автоматически (рекомендуется), выберите поля для сопоставления с помощью флажков. Некоторые поля выбраны приложением по умолчанию. Для того чтобы подтвердить свой выбор, нажмите Выполнить сопоставление. После поиска приложение выводит на просмотр сопоставленные ею данные. Для подтверждения нажмите Применить. @@ -9,9 +9,9 @@
              • После автоматического сопоставления можно оставшиеся объекты сопоставить вручную или изменить сопоставление объектов. Выделите нужные объекты двух баз, нажмите Отменить соответствие, для того чтобы попытаться сопоставить объекты вручную, нажмите Установить соответствие для того чтобы сопоставить объекты.
              • Для подтверждения нажмите Записать и закрыть.

              Настройка полей таблицы сопоставления

              -
              • Нажмите Колонки, чтобы добавить поля в колонки списка. С помощью флажков можно отметить дополнительные поля, для подтверждения нажмите Применить.

              Получение данных из другого приложения

              -
              • Для того чтобы получить данные из другого приложения, нажмите Еще -  Загрузить данные из другого приложения.

              Порядок сопоставления объектов

              -
              • Рекомендуется выполнять сопоставление и загрузку данных с учетом ссылочных связей. Особенно, если поле используется для сопоставления объектов. +
                • Нажмите Колонки, чтобы добавить поля в колонки списка. С помощью флажков можно отметить дополнительные поля, для подтверждения нажмите Применить.

                Получение данных из другого приложения

                +
                • Для того чтобы получить данные из другого приложения, нажмите Еще - Загрузить данные из другого приложения.

                Порядок сопоставления объектов

                +
                • Рекомендуется выполнять сопоставление и загрузку данных с учетом ссылочных связей. Особенно, если поле используется для сопоставления объектов.
                • Например, в конфигурации имеется справочник договоров контрагентов, который подчинен справочнику контрагентов. Сопоставление договоров контрагентов выполняется по справочнику-владельцу, т.е. по справочнику контрагентов. Следовательно, для правильного сопоставления данных необходимо сначала сопоставить и загрузить справочник контрагентов, а затем - справочник договоров контрагентов.
                • diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 2514237ac..8ee59641e 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -19,8 +19,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. +#Область ЭкспортныеСлужебныеПроцедурыИФункции // Выполняет сопоставление объектов этой информационной базы и информационной базы источника. // Формирует таблицу сопоставления для вывода пользователю. @@ -217,7 +216,7 @@ СписокПолейТаблицы.ЗагрузитьЗначения(СтрРазделить(ПоляТаблицыПриемника, ",", Ложь)); МассивПолейПоиска = СтрРазделить(ПоляПоискаТаблицыПриемника, ",", Ложь); - + // Удаляем из массива полей поиска поля свыше указанного лимита; удаляем элементы массива с конца. ПроверитьКоличествоПолейСопоставленияВМассиве(МассивПолейПоиска); @@ -242,8 +241,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функции-свойства +#КонецОбласти + +#Область ФункцииСвойства // Таблица сопоставления объектов. // @@ -262,8 +262,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - дайджест сопоставления. +#КонецОбласти + +#Область ФункцииСвойстваДайджестСопоставления // Количество объектов текущего типа данных в файле сообщения обмена. // @@ -320,8 +321,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Локальные функции-свойства +#КонецОбласти + +#Область ЛокальныеФункцииСвойства Функция ДайджестСопоставления() @@ -368,8 +370,9 @@ Возврат ПолеТипСтрокаНеограниченнойДлины; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Получение таблицы сопоставления. +#КонецОбласти + +#Область ПолучениеТаблицыСопоставления Процедура ВыполнитьСопоставлениеОбъектовИнформационныхБаз(Отказ) @@ -2198,8 +2201,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные служебные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеСлужебныеПроцедурыИФункции Процедура ЗаполнитьСписокОтмеченнымиЭлементами(СписокИсточник, СписокПриемник) @@ -2330,6 +2334,8 @@ #КонецОбласти +#КонецОбласти + #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index 1eaa3a7e8..6b8254320 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -138,8 +138,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции формирования списка дел пользователя. +#Область ПроцедурыИФункцииФормированияСпискаДелПользователя &НаКлиенте Процедура ОбновитьТекущиеДелаАвтоматически() @@ -279,8 +278,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Фоновое обновление +#КонецОбласти + +#Область ФоновоеОбновление &НаСервере Функция СформироватьСписокТекущихДелВФоне() @@ -415,8 +415,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции &НаКлиенте Процедура ПереходКВажномуДелуИзЦентраОповещений(Идентификатор) Экспорт @@ -844,3 +845,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html b/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html index 8b7f8a284..e6d99d356 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html +++ b/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html @@ -2,21 +2,21 @@

                  Предназначена для вывода списка текущих дел пользователя на рабочий стол.

                  Приложение позволяет выводить список текущих дел пользователя на рабочем столе: новые письма, задачи, заявки, несогласованные заказы и т.п. Список дел может включать в себя важные и обычные дела, однострочные и многострочные, с количественными показателями и без. Список дел сгруппирован по разделам командного интерфейса, предусмотрена возможность настраивать видимость и порядок отображения, автоматическое обновление через заданный интервал. Важные дела выделяются цветом.

                  -

                  Дела отображаются в виде ссылок, перейдя по которым, можно открыть соответствующие списки, документы или другие объекты приложения.

                  +

                  Дела отображаются в виде ссылок, перейдя по которым, можно открыть соответствующие списки, документы или другие объекты приложения.

                  С помощью кнопки Настроить в нижней части списка текущих дел можно управлять списком дел и разделов.

                  Отображаемые дела

                  • На этой вкладке настройки текущих дел с помощью флажков можно управлять видимостью списка дел.
                  • -
                  • С помощью кнопки  Установить флажки можно сделать видимыми все разделы и дела. +
                  • С помощью кнопки Установить флажки можно сделать видимыми все разделы и дела.
                  • -
                  • С помощью кнопки  Снять флажки можно скрыть все разделы и дела. +
                  • С помощью кнопки Снять флажки можно скрыть все разделы и дела.
                  • -
                  • С помощью кнопок  и  можно менять очередность дел и разделов в списке.

                  Обновление списка дел

                  +
                • С помощью кнопок и можно менять очередность дел и разделов в списке.

                Обновление списка дел

                • На вкладке Другое можно отрегулировать частоту обновления списка текущих дел.
                • Включите флажок Обновлять автоматически каждые 5 минут (по умолчанию). При необходимости укажите другое число минут.
                • Также Обновить список дел можно в любой момент с помощью кнопки .

                Исключение дублирования информации

                -
                • Если какое-то из дел дублирует информацию, отображаемую на рабочем столе, то следует выбрать одну из возможностей приложения: +
                  • Если какое-то из дел дублирует информацию, отображаемую на рабочем столе, то следует выбрать одну из возможностей приложения:
                    • Отключить дело из списка Текущие дела;

                  или

                    • Скрыть информацию с рабочего стола.
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/Форма/Form.form new file mode 100644 index 000000000..bb16ca697 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаWS + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаАутентификации/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаАутентификации/Form.form new file mode 100644 index 000000000..0d190bdab --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаАутентификации/Form.form @@ -0,0 +1,761 @@ + + + + <key>ru</key> + <value>Аутентификация</value> + + + ВыполнениеПроверкиПодключения + 1 + + ЗапросПароляПользователя + 3 + + ГруппаЗапросаПароля + 5 + + Декорация2 + 7 + + <key>ru</key> + <value>Введите пароль для подключению к приложению</value> + + true + true + + true + + + Декорация2ExtendedTooltip + 9 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 8 + true + + Label + true + + Left + + + + ГруппаВводаПароля + 10 + true + true + + true + + + <key>ru</key> + <value>Ввода пароля</value> + + + ГруппаВводаПароляРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Запроса пароля</value> + + + ГруппаЗапросаПароляРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + АутентификацияОперационнойСистемы + 73 + true + true + + true + + + Объект.АутентификацияОперационнойСистемы + + Right + + OnChange + АутентификацияОперационнойСистемыПриИзменении + + + АутентификацияОперационнойСистемыРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + АутентификацияОперационнойСистемыКонтекстноеМеню + 74 + true + + CheckBoxField + Enter + true + Left + true + + + + ИмяПользователя + 67 + true + true + + true + + + Объект.ИмяПользователя + + + ИмяПользователяРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ИмяПользователяКонтекстноеМеню + 68 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПарольПользователя + 70 + true + true + + true + + + Объект.ПарольПользователя + + + ПарольПользователяРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ПарольПользователяКонтекстноеМеню + 71 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Декорация1 + 64 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 65 + true + + Label + true + true + + Left + + + + КоманднаяПанельВыполненияОбмена + 35 + + ОК + 51 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + + ОКРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Отмена + 53 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ОтменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель выполнения обмена</value> + + + КоманднаяПанельВыполненияОбменаExtendedTooltip + 36 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Запрос пароля пользователя</value> + + + ЗапросПароляПользователяExtendedTooltip + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ОжиданиеПроверкиПодключения + 41 + + Группа1 + 43 + + ДлительнаяОперация1 + 45 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация1РасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ДлительнаяОперация1КонтекстноеМеню + 46 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + СтатусОжиданияЗапускаСинхронизации + 48 + + <key>ru</key> + <value>Выполняется проверка подключения. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусОжиданияЗапускаСинхронизацииРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СтатусОжиданияЗапускаСинхронизацииКонтекстноеМеню + 49 + true + + Label + 3 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа1РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + Декорация5 + 61 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 62 + true + + Label + true + true + true + + Left + + + + КоманднаяПанельПроверкаПодключения + 55 + + Отмена1 + 59 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + Отмена1РасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель выполнения обмена</value> + + + КоманднаяПанельПроверкаПодключенияРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Ожидание проверки подключения</value> + + + ОжиданиеПроверкиПодключенияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Выполнение проверки подключения</value> + + + ВыполнениеПроверкиПодключенияРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + Vertical + true + true + true + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаCOM + + + true + + + true + +
                  true
                  +
                  + + Корреспондент + 6 + + ExchangePlanRef + + + true + + + true + + + + ИдентификаторТранспорта + 7 + + String + + + + true + + + true + + + + ДанныеАутентификации + 8 + + + true + + + true + + + + ИмяПланаОбмена + 9 + + String + + + + true + + + true + + + + НастройкиТранспорта + 10 + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 3 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаАутентификации/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаАутентификации/Module.bsl new file mode 100644 index 000000000..05b5a8cab --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаАутентификации/Module.bsl @@ -0,0 +1,167 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("Корреспондент") + И Не Параметры.Свойство("ИдентификаторТранспорта") + И Не Параметры.Свойство("ИмяПланаОбмена") + И Не Параметры.Свойство("НастройкиТранспорта") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + Корреспондент = Параметры.Корреспондент; + ИдентификаторТранспорта = Параметры.ИдентификаторТранспорта; + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + НастройкиТранспорта = Параметры.НастройкиТранспорта; + + Если НЕ ЗначениеЗаполнено(НастройкиТранспорта) + И ЗначениеЗаполнено(Корреспондент) Тогда + + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта( + Корреспондент, ИдентификаторТранспорта); + + ИмяПользователя = НастройкиТранспорта.ИмяПользователя; + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, НастройкиТранспорта); + + ДанныеАутентификации = Новый Структура; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + АутентификацияОперационнойСистемы(); + +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура АутентификацияОперационнойСистемыПриИзменении(Элемент) + + АутентификацияОперационнойСистемы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + ДанныеАутентификации.Вставить("ИмяПользователя", Объект.ИмяПользователя); + ДанныеАутентификации.Вставить("ПарольПользователя", Объект.ПарольПользователя); + ДанныеАутентификации.Вставить("АутентификацияОперационнойСистемы", Объект.АутентификацияОперационнойСистемы); + + Элементы.ВыполнениеПроверкиПодключения.ТекущаяСтраница = Элементы.ОжиданиеПроверкиПодключения; + + ФоновоеЗадание = ПроверкаАутентификацииНачало( + ?(ЗначениеЗаполнено(Корреспондент), Корреспондент, ИмяПланаОбмена), + ИдентификаторТранспорта, + ДанныеАутентификации); + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + + Обработчик = Новый ОписаниеОповещения("ПроверкаАутентификацииЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура АутентификацияОперационнойСистемы() + + Элементы.ИмяПользователя.Доступность = Не Объект.АутентификацияОперационнойСистемы; + Элементы.ПарольПользователя.Доступность = Не Объект.АутентификацияОперационнойСистемы; + +КонецПроцедуры + +&НаСервере +Функция ПроверкаАутентификацииНачало(Корреспондент, ИдентификаторТранспорта, ДанныеАутентификации) Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Проверка подключения к корреспонденту'", ОбщегоНазначения.КодОсновногоЯзыка()); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + + Возврат ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "ТранспортСообщенийОбмена.ПроверитьАутентификацию", + Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, ДанныеАутентификации); + +КонецФункции + +&НаКлиенте +Процедура ПроверкаАутентификацииЗавершение(ФоновоеЗадание, ДополнительныеПараметры) Экспорт + + Если ФоновоеЗадание = Неопределено Тогда + + Возврат; + + ИначеЕсли ФоновоеЗадание.Статус = "Ошибка" Тогда + + Элементы.ВыполнениеПроверкиПодключения.ТекущаяСтраница = Элементы.ЗапросПароляПользователя; + СообщениеОбОшибке = ФоновоеЗадание.КраткоеПредставлениеОшибки + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); + + Иначе + + Если ЗначениеЗаполнено(Корреспондент) Тогда + СохранитьНастройкиТранспорта(); + КонецЕсли; + + Закрыть(ДанныеАутентификации); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройкиТранспорта() + + ИдентификаторПароля = Строка(Новый УникальныйИдентификатор); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ИдентификаторПароля, Объект.ПарольПользователя); + + НастройкиТранспорта.Вставить("ИмяПользователя", Объект.ИмяПользователя); + НастройкиТранспорта.Вставить("АутентификацияОперационнойСистемы", Объект.АутентификацияОперационнойСистемы); + НастройкиТранспорта.Вставить("ПарольПользователя", ИдентификаторПароля); + НастройкиТранспорта.Вставить("ПродолжениеНастройки", Ложь); + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта( + Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, Истина); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..340058508 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаНастройки/Form.form @@ -0,0 +1,597 @@ + + + + ВариантРаботыИнформационнойБазы + 26 + true + true + + true + + + Объект.ВариантРаботыИнформационнойБазы + + None + + OnChange + ВариантРаботыИнформационнойБазыПриИзменении + + + ВариантРаботыИнформационнойБазыРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ВариантРаботыИнформационнойБазыКонтекстноеМеню + 27 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Файловая база-корреспондент + + + 0 + + + + + ru + Клиент-серверная база-корреспондент + + + 1 + + + Vertical + + + + ВариантыРаботыИнформационнойБазы + 29 + + СтраницаВариантРаботыФайловый + 31 + + КаталогИнформационнойБазы + 55 + true + true + + true + + + Объект.КаталогИнформационнойБазы + + Top + + КаталогИнформационнойБазыРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + КаталогИнформационнойБазыКонтекстноеМеню + 56 + true + + InputField + Enter + true + Left + true + + + StartChoice + КаталогИнформационнойБазыНачалоВыбора + + + Opening + КаталогИнформационнойБазыОткрытие + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница вариант работы файловый</value> + + + СтраницаВариантРаботыФайловыйExtendedTooltip + 32 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаВариантРаботыКлиентСерверный + 36 + + ИмяСервера1СПредприятия + 38 + + <key>ru</key> + <value>Имя сервера</value> + + true + true + + true + + + Объект.ИмяСервера1СПредприятия + + + ИмяСервера1СПредприятияРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ИмяСервера1СПредприятияКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяИнформационнойБазыНаСервере1СПредприятия + 41 + + <key>ru</key> + <value>Имя информационной базы на сервере</value> + + true + true + + true + + + Объект.ИмяИнформационнойБазыНаСервере1СПредприятия + + + ИмяИнформационнойБазыНаСервере1СПредприятияРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ИмяИнформационнойБазыНаСервере1СПредприятияКонтекстноеМеню + 42 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница вариант работы клиент серверный</value> + + + СтраницаВариантРаботыКлиентСерверныйExtendedTooltip + 37 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Варианты работы информационной базы</value> + + + ВариантыРаботыИнформационнойБазыExtendedTooltip + 30 + Label + true + true + + Left + + + Pages + + Auto + + + + АутентификацияОперационнойСистемы + 44 + true + true + + true + + + Объект.АутентификацияОперационнойСистемы + + Right + + OnChange + АутентификацияОперационнойСистемыПриИзменении + + + АутентификацияОперационнойСистемыРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + АутентификацияОперационнойСистемыКонтекстноеМеню + 45 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаПользовательПароль + 47 + + Пользователь + 49 + true + true + + true + + + Объект.ИмяПользователя + + + ПользовательРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ПользовательКонтекстноеМеню + 50 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Пароль + 52 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + Объект.ПарольПользователя + + + ПарольРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 53 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>COM группа пользователь пароль</value> + + + ГруппаПользовательПарольРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаCOM + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..816cc732d --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,190 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ВариантРаботыИнформационнойБазы(); + + АутентификацияОперационнойСистемы(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВариантРаботыИнформационнойБазыПриИзменении(Элемент) + + ВариантРаботыИнформационнойБазы(); + +КонецПроцедуры + +&НаКлиенте +Процедура АутентификацияОперационнойСистемыПриИзменении(Элемент) + + АутентификацияОперационнойСистемы() + +КонецПроцедуры + +&НаКлиенте +Процедура ВариантРаботыИнформационнойБазы() + + ТекущаяСтраница = ?(Объект.ВариантРаботыИнформационнойБазы = 0, Элементы.СтраницаВариантРаботыФайловый, Элементы.СтраницаВариантРаботыКлиентСерверный); + + Элементы.ВариантыРаботыИнформационнойБазы.ТекущаяСтраница = ТекущаяСтраница; + +КонецПроцедуры + +&НаКлиенте +Процедура АутентификацияОперационнойСистемы() + + Элементы.Пользователь.Доступность = Не Объект.АутентификацияОперационнойСистемы; + Элементы.Пароль.Доступность = Не Объект.АутентификацияОперационнойСистемы; + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "КаталогИнформационнойБазы", СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "КаталогИнформационнойБазы", СтандартнаяОбработка) + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + Если Не ПустаяСтрока(Объект.КаталогИнформационнойБазы) + Или Не ПустаяСтрока(Объект.ИмяИнформационнойБазыНаСервере1СПредприятия) Тогда + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); + Разрешение = МодульРаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса( + ИмяCOMСоединителя, ОбщегоНазначения.ИдентификаторCOMСоединителя(ИмяCOMСоединителя)); + + Разрешения.Добавить(Разрешение); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + КонецЕсли; + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Заполним пароль. + ТранспортСообщенийОбмена.ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(ЭтаФорма, ОбработкаОбъект); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + + +#КонецОбласти + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Help/ru.html new file mode 100644 index 000000000..89cbff9a0 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/Help/ru.html @@ -0,0 +1,15 @@ + +

                  Данный вариант подключения рекомендуется в том случае, если другое приложение находится на том же компьютере, что и это приложение, или оба приложения расположены в одной локальной сети (в одном офисе).

                  +
                  • С помощью переключателя выберите вариант информационной базы: +
                    • Файловая база корреспондент +
                      • Выберите Каталог информационной базы.
                      • +
                    • +
                    • Клиент серверная база-корреспондент +
                      • Введите Имя сервера;
                      • +
                      • Введите Имя информационной базы на сервере.
                      • +
                    • +
                  • +
                  • При необходимости включите флажок Аутентификация операционной системы (по умолчанию выключен). В этом случае не нужно заполнять следующие поля.
                  • +
                  • Введите Имя пользователя;
                  • +
                  • Введите Пароль.
                  • +
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ManagerModule.bsl new file mode 100644 index 000000000..c242061a4 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ManagerModule.bsl @@ -0,0 +1,72 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Данный вариант подключения рекомендуется в том случае, если другая программа находится на том же компьютере, + |что и эта программа, или обе программы расположены в одной локальной сети (в одном офисе).'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Прямое подключение (com-соединение)'"); + Параметры.ИдентификаторТранспорта = "COM"; + Параметры.Описание = Описание; + Параметры.ИмяФормыАутентификации = "ФормаАутентификации"; + Параметры.РеквизитыДляБезопасногоХранилища.Добавить("ПарольПользователя"); + Параметры.ПрямоеПодключение = Истина; + Параметры.РежимРаботыПриложения = 0; + Параметры.ИспользоватьПрогресс = Ложь; + Параметры.СохранитьПараметрыПодключенияВФайл = Ложь; + Параметры.Картинка = БиблиотекаКартинок.ТранспортCOM; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияВXML_1_2(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияИзXML_1_2(ТекстXML, "COM"); + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + Возврат ""; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ObjectModule.bsl new file mode 100644 index 000000000..fec3a053c --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ObjectModule.bsl @@ -0,0 +1,798 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщениеОбмена(СообщениеДляСопоставленияДанных); + Исключение + Результат = Ложь; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + Результат = ПолучитьСообщениеОбмена(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат ПроверкаВнешнегоСоединенияПередОбменом(Перечисления.ДействияПриОбмене.ВыгрузкаДанных, СообщениеДляСопоставленияДанных); + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбмена); + + ВнешнееСоединение = УстановитьВнешнееСоединениеСБазой(); + Если ВнешнееСоединение = Неопределено Тогда + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + Результат.ПодключениеУстановлено = Ложь; + Возврат Результат; + КонецЕсли; + + Результат.ПодключениеУстановлено = Истина; + Результат.ВерсииИнтерфейса = ТранспортСообщенийОбмена.ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение); + + Если Результат.ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено + Или Результат.ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено + Или Результат.ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда + + СообщениеОбОшибке = ""; + + ИдентификаторИнформационнойБазыИсточника = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + + Если Результат.ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда + + ДополнительныеПараметры = Новый Структура; + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); + ДополнительныеПараметры.Вставить("ИдентификаторНастройки", НастройкиПодключения.ИдентификаторНастройки); + КонецЕсли; + + ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_3_0_2_2( + ИмяПланаОбменаКорреспондента, + ИдентификаторИнформационнойБазыИсточника, + СообщениеОбОшибке, + ДополнительныеПараметры); + Иначе + + ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6( + ИмяПланаОбменаКорреспондента, + ИдентификаторИнформационнойБазыИсточника, + СообщениеОбОшибке); + + КонецЕсли; + + ПараметрыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыИнформационнойБазы); + + Если Не ПараметрыКорреспондента.ПланОбменаСуществует Тогда + + ШаблонСообщения = + НСтр("ru = 'В корреспонденте не найден план обмена ""%1"". + |Убедитесь, что + | - выбран правильный вид приложения для настройки обмена; + | - корректно указано расположение программы, к которой выполняется подключение.'"); + + СообщениеОбОшибке = СтрШаблон(ШаблонСообщения, ИмяПланаОбмена); + + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Результат; + + КонецЕсли; + + Результат.ПараметрыКорреспондентаПолучены = Истина; + Результат.ПараметрыКорреспондента = ПараметрыКорреспондента; + Результат.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; + + Иначе + + СообщениеОбОшибке = + НСтр("ru = 'Корреспондент не поддерживает версию 3.0.1.x интерфейса ""ОбменДанными"". + |Для настройки подключения обновите конфигурацию корреспондента, или начните настройку из него.'"); + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Результат; + + КонецЕсли; + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ТранспортСообщенийОбмена.ПриПодключенииККорреспонденту( + Отказ, ИмяПланаОбмена, ПараметрыКорреспондента.ВерсияКонфигурации, СообщениеОбОшибке); + + Если Отказ Тогда + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + ТранспортСообщенийОбмена.ПроверитьДублированиеСинхронизаций(ИмяПланаОбмена, ПараметрыКорреспондента, Результат); + + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + ВнешнееСоединение = УстановитьВнешнееСоединениеСБазой(); + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + НастройкиПодключенияКорреспондента = ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.Создать(); + + НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; + НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; + НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + + Попытка + + СтрокаНастроекПодключенияXML = Обработки.ТранспортСообщенийОбменаCOM.НастройкиПодключенияВXML(НастройкиПодключения); + + ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.ЗаполнитьНастройкиПодключенияИзXML( + НастройкиПодключенияКорреспондента, СтрокаНастроекПодключенияXML); + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + + НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; + + ТаблицаОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( + НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", НастройкиПодключения.УзелИнформационнойБазы); + + СтрокаХранилище = СериализаторXDTO.XMLСтрока( + Новый ХранилищеЗначения(ТаблицаОбъекты, Новый СжатиеДанных(9))); + + НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = + ВнешнееСоединение.СериализаторXDTO.XMLЗначение( + ВнешнееСоединение.NewObject("ОписаниеТипов", "ХранилищеЗначения").Типы().Get(0), СтрокаХранилище); + + КонецЕсли; + + Попытка + + ВнешнееСоединение.ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(Истина); + ВнешнееСоединение.Обработки.ПомощникСозданияОбменаДанными.ВыполнитьДействияПоНастройкеОбменаДанными( + НастройкиПодключенияКорреспондента); + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат ПродолжениеНастройки; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.УдалитьНастройкуСинхронизацииВКорреспонденте +Функция УдалитьНастройкуСинхронизацииВКорреспонденте() Экспорт + + ВнешнееСоединение = УстановитьВнешнееСоединениеСБазой(); + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + ИдентификаторУзла = ОбменДаннымиСервер.ИдентификаторЭтогоУзлаДляОбмена(Корреспондент); + УзелКорреспондента = ВнешнееСоединение.ОбменДаннымиСервер.УзелПланаОбменаПоКоду(ИмяПланаОбменаКорреспондента, ИдентификаторУзла); + + Если УзелКорреспондента = Неопределено Тогда + + ШаблонСообщения = НСтр("ru = 'В программе-корреспонденте не найден узел плана обмена ""%1"" по коду ""%2"".'"); + СообщениеОбОшибке = СтрШаблон(ШаблонСообщения, ИмяПланаОбменаКорреспондента, ИдентификаторУзла); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецЕсли; + + Попытка + + ВнешнееСоединение.ОбменДаннымиСервер.УдалитьНастройкуСинхронизации(УзелКорреспондента); + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодключениеУстановлено() Экспорт + + ВнешнееСоединение = УстановитьВнешнееСоединениеСБазой(); + + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +Функция ОтправитьСообщениеОбмена(СообщениеДляСопоставленияДанных) + + СтруктураНастроекОбменаВС = Неопределено; + ОбменСБСП20 = Ложь; + + ВнешнееСоединение = ВнешнееСоединениеДляОтправкиПолученияСообщения( + Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + СтруктураНастроекОбменаВС, + ОбменСБСП20, + СообщениеДляСопоставленияДанных); + + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовXDTO.Создать(); + Иначе + ОбработкаДляЗагрузкиДанных = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + КонецЕсли; + + ОбработкаДляЗагрузкиДанных.РежимОбмена = "Загрузка"; + ОбработкаДляЗагрузкиДанных.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбменаВС.УзелИнформационнойБазы; + + ОбменДаннымиСервер.УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаДляЗагрузкиДанных, СтруктураНастроекОбменаВС, ОбменСБСП20); + + ЕстьПоддержкаСопоставления = Истина; + НастройкаСинхронизацииДанныхЗавершена = Истина; + ВерсииИнтерфейса = ТранспортСообщенийОбмена.ВерсииИнтерфейсаЧерезВнешнееСоединение(ВнешнееСоединение); + + Если ВерсииИнтерфейса.Найти("3.0.1.1") <> Неопределено + Или ВерсииИнтерфейса.Найти("3.0.2.1") <> Неопределено + Или ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда + + СообщениеОбОшибке = ""; + КодУзла = ОбменДаннымиСервер.КодПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена); + + ИмяПланаОбменаКорреспондента = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбменаКорреспондента(Корреспондент); + + Если ВерсииИнтерфейса.Найти("3.0.2.2") <> Неопределено Тогда + + ДополнительныеПараметры = Новый Структура; + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); + КонецЕсли; + + ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_3_0_2_2( + ИмяПланаОбменаКорреспондента, КодУзла, СообщениеОбОшибке, ДополнительныеПараметры); + Иначе + + ПараметрыИнформационнойБазы = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6( + ИмяПланаОбменаКорреспондента, КодУзла, СообщениеОбОшибке); + + КонецЕсли; + + ПараметрыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПараметрыИнформационнойБазы); + + Если ПараметрыКорреспондента.Свойство("ПоддерживаетсяСопоставлениеДанных") Тогда + ЕстьПоддержкаСопоставления = ПараметрыКорреспондента.ПоддерживаетсяСопоставлениеДанных; + КонецЕсли; + + Если ПараметрыКорреспондента.Свойство("НастройкаСинхронизацииДанныхЗавершена") Тогда + НастройкаСинхронизацииДанныхЗавершена = ПараметрыКорреспондента.НастройкаСинхронизацииДанныхЗавершена; + КонецЕсли; + + КонецЕсли; + + Если СообщениеДляСопоставленияДанных + И (ЕстьПоддержкаСопоставления Или Не НастройкаСинхронизацииДанныхЗавершена) Тогда + ОбработкаДляЗагрузкиДанных.РежимЗагрузкиДанных = "ЗагрузкаСообщенияДляСопоставленияДанных"; + КонецЕсли; + + ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию = + КоличествоЭлементовВТранзакцииВыполняемогоДействия(Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + ОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции = (ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию <> 1); + + Если СообщениеДляСопоставленияДанных Тогда + + ЧтениеТекста = Новый ЧтениеТекста(СообщениеОбмена); + ДанныеВыгрузкиXML = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + ОбработкаДляЗагрузкиДанных.ПоместитьСообщениеДляСопоставленияДанных(ДанныеВыгрузкиXML); + + Иначе + + ОбработкаДляЗагрузкиДанных.ИмяФайлаОбмена = СообщениеОбмена; + ОбработкаДляЗагрузкиДанных.ВыполнитьЗагрузкуДанных(); + + КонецЕсли; + + СтруктураНастроекОбменаВС.РезультатВыполненияОбменаСтрокой = ОбработкаДляЗагрузкиДанных.РезультатВыполненияОбменаСтрокой(); + ОбработкаДляЗагрузкиДанных = Неопределено; + + ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбменаВС); + ВнешнееСоединение = Неопределено; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьСообщениеОбмена() + + СтруктураНастроекОбменаВС = Неопределено; + ОбменСБСП20 = Ложь; + + ВнешнееСоединение = ВнешнееСоединениеДляОтправкиПолученияСообщения( + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + СтруктураНастроекОбменаВС, + ОбменСБСП20); + + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + + // Получаем правила обмена из второй ИБ. + ПравилаКонвертацииОбъектов = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПравилаКонвертацииОбъектов(СтруктураНастроекОбменаВС.ИмяПланаОбмена); + + КонецЕсли; + + // Получаем инициализированную обработку для выгрузки данных. + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ОбработкаОбменаДаннымиВС = ВнешнееСоединение.Обработки.КонвертацияОбъектовXDTO.Создать(); + ОбработкаОбменаДаннымиВС.РежимОбмена = "Выгрузка"; + Иначе + ОбработкаОбменаДаннымиВС = ВнешнееСоединение.Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + ОбработкаОбменаДаннымиВС.СохраненныеНастройки = ПравилаКонвертацииОбъектов; + ОбработкаОбменаДаннымиВС.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Ложь; + ОбработкаОбменаДаннымиВС.РежимОбмена = "Выгрузка"; + + Попытка + ОбработкаОбменаДаннымиВС.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецПопытки; + + // Задаем узлы обмена. + ОбработкаОбменаДаннымиВС.УзелДляФоновогоОбмена = Неопределено; + ОбработкаОбменаДаннымиВС.НеВыгружатьОбъектыПоСсылкам = Истина; + ОбработкаОбменаДаннымиВС.ИмяФайлаПравилОбмена = "1"; + ОбработкаОбменаДаннымиВС.ВнешнееСоединение = Неопределено; + + КонецЕсли; + + ОбработкаОбменаДаннымиВС.УзелДляОбмена = СтруктураНастроекОбменаВС.УзелИнформационнойБазы; + Если ОбработкаОбменаДаннымиВС.Метаданные().Реквизиты.Найти("УстановитьБлокировкуУзлаПланаОбмена") <> Неопределено Тогда + ОбработкаОбменаДаннымиВС.УстановитьБлокировкуУзлаПланаОбмена = Истина; + КонецЕсли; + + ОбменДаннымиСервер.УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДаннымиВС, СтруктураНастроекОбменаВС, ОбменСБСП20); + + ОбработкаОбменаДаннымиВС.ИмяФайлаОбмена = СообщениеОбмена; + ОбработкаОбменаДаннымиВС.ВыполнитьВыгрузкуДанных(); + СтруктураНастроекОбменаВС.РезультатВыполненияОбменаСтрокой = ОбработкаОбменаДаннымиВС.РезультатВыполненияОбменаСтрокой(); + + ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбменаВС); + ВнешнееСоединение = Неопределено; + + Возврат Истина; + +КонецФункции + +Функция ВнешнееСоединениеДляОтправкиПолученияСообщения(ДействиеПриОбмене, СтруктураНастроекОбменаВС, ОбменСБСП20, СообщениеДляСопоставленияДанных = Ложь) + + ВнешнееСоединение = УстановитьВнешнееСоединениеСБазой(ДействиеПриОбмене); + + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); + + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ + СтруктураНастроекОбмена = ТранспортСообщенийОбмена.НастройкиОбменаДляВнешнегоСоединения( + Корреспондент, + ДействиеПриОбмене, + КоличествоЭлементовВТранзакции); + + // Получаем версию удаленной базы. + ВерсияБСППоВнешнемуСоединению = ВнешнееСоединение.СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + ОбменСБСП20 = ОбщегоНазначенияКлиентСервер.СравнитьВерсии("2.1.1.10", ВерсияБСППоВнешнемуСоединению) > 0; + + Структура = Новый Структура("ИмяПланаОбмена, ИмяПланаОбменаКорреспондента, + |ТекущийУзелПланаОбменаКод, КоличествоЭлементовВТранзакции"); + + ЗаполнитьЗначенияСвойств(Структура, СтруктураНастроекОбмена); + + // Выполняем реверс значений перечисления. + ДействиеПриОбменеСтрокой = ?(ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ОбщегоНазначения.ИмяЗначенияПеречисления(Перечисления.ДействияПриОбмене.ЗагрузкаДанных), + ОбщегоНазначения.ИмяЗначенияПеречисления(Перечисления.ДействияПриОбмене.ВыгрузкаДанных)); + + Структура.Вставить("ДействиеПриОбменеСтрокой", ДействиеПриОбменеСтрокой); + Структура.Вставить("РежимОтладки", Ложь); + Структура.Вставить("ИмяФайлаПротоколаОбмена", ""); + + СтруктураКорреспондента = ОбщегоНазначения.СкопироватьРекурсивно(Структура, Ложь); + СтруктураКорреспондента.ИмяПланаОбмена = Структура.ИмяПланаОбменаКорреспондента; + СтруктураКорреспондента.ИмяПланаОбменаКорреспондента = Структура.ИмяПланаОбмена; + + Попытка + // СтруктураНастроекОбменаВнешнееСоединение + СтруктураНастроекОбменаВС = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(СтруктураКорреспондента); + Исключение + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + Возврат Неопределено; + КонецПопытки; + + СтруктураНастроекОбменаВС.Вставить("ДатаНачала", ВнешнееСоединение.ТекущаяДатаСеанса()); + + Возврат ВнешнееСоединение; + +КонецФункции + +Функция УстановитьВнешнееСоединениеСБазой(ДействиеПриОбмене = Неопределено) + + НомерПопытки = 1; + + СтруктураПараметров = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); + ЗаполнитьЗначенияСвойств(СтруктураПараметров, ЭтотОбъект); + + ВнешнееСоединение = Неопределено; + + Пока НомерПопытки <= 2 Цикл + + Подключение = ТранспортСообщенийОбменаПовтИсп.УстановитьВнешнееСоединениеСБазой(СтруктураПараметров); + ВнешнееСоединение = Подключение.Соединение; + + Если ВнешнееСоединение <> Неопределено Тогда + Возврат ВнешнееСоединение; + КонецЕсли; + + Если ВнешнееСоединение = Неопределено + И Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + СообщениеОбОшибке = Подключение.КраткоеОписаниеОшибки; + СообщениеОбОшибкеЖР = Подключение.ПодробноеОписаниеОшибки; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + + Прервать; + + КонецЕсли; + + Если НомерПопытки = 1 Тогда + + Если НЕ ЗарегистрироватьCOMСоединитель() Тогда + Прервать; + КонецЕсли; + + ИначеЕсли НомерПопытки = 2 Тогда + + СообщениеОбОшибке = Подключение.КраткоеОписаниеОшибки; + СообщениеОбОшибкеЖР = Подключение.ПодробноеОписаниеОшибки; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + + КонецЕсли; + + НомерПопытки = НомерПопытки + 1; + + КонецЦикла; + + Возврат ВнешнееСоединение; + +КонецФункции + +Функция ЗарегистрироватьCOMСоединитель(ДействиеПриОбмене = Неопределено) + + ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы(); + ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; + ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина; + + ТекстКоманды = СтрШаблон("regsvr32.exe /n /i:user /s ""%1comcntr.dll""", КаталогПрограммы()); + + РезультатЗапуска = ФайловаяСистема.ЗапуститьПрограмму(ТекстКоманды, ПараметрыЗапускаПрограммы); + + Шаблон = + НСтр("ru = 'Выполнена перерегистрация компоненты ""comcntr"" на компьютере %1. + |Команда: %2 + |Код возврата %3, сообщение: + |%4'"); + + Комментарий = СтрШаблон(Шаблон, ИмяКомпьютера(), ТекстКоманды, РезультатЗапуска.КодВозврата, РезультатЗапуска.ПотокВывода); + + ЭтоОшибка = РезультатЗапуска.КодВозврата <> 0; + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене, Комментарий, ЭтоОшибка); + + Возврат РезультатЗапуска.КодВозврата = 0; + +КонецФункции + +Функция ПроверкаВнешнегоСоединенияПередОбменом(ДействиеПриОбмене, СообщениеДляСопоставленияДанных = Ложь) + + ВнешнееСоединение = УстановитьВнешнееСоединениеСБазой(ДействиеПриОбмене); + Если ВнешнееСоединение = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + КоличествоЭлементовВТранзакции = ОбменДаннымиСервер.КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); + + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ + СтруктураНастроекОбмена = ТранспортСообщенийОбмена.НастройкиОбменаДляВнешнегоСоединения( + Корреспондент, + ДействиеПриОбмене, + КоличествоЭлементовВТранзакции); + + // Получаем версию удаленной базы. + ВерсияБСППоВнешнемуСоединению = ВнешнееСоединение.СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + ОбменСБСП20 = ОбщегоНазначенияКлиентСервер.СравнитьВерсии("2.1.1.10", ВерсияБСППоВнешнемуСоединению) > 0; + + Структура = Новый Структура("ИмяПланаОбмена, ИмяПланаОбменаКорреспондента, + |ТекущийУзелПланаОбменаКод, КоличествоЭлементовВТранзакции"); + + ЗаполнитьЗначенияСвойств(Структура, СтруктураНастроекОбмена); + + // Выполняем реверс значений перечисления. + ДействиеПриОбменеСтрокой = ?(ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных, + ОбщегоНазначения.ИмяЗначенияПеречисления(Перечисления.ДействияПриОбмене.ЗагрузкаДанных), + ОбщегоНазначения.ИмяЗначенияПеречисления(Перечисления.ДействияПриОбмене.ВыгрузкаДанных)); + + Структура.Вставить("ДействиеПриОбменеСтрокой", ДействиеПриОбменеСтрокой); + Структура.Вставить("РежимОтладки", Ложь); + Структура.Вставить("ИмяФайлаПротоколаОбмена", ""); + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + // Проверка псевдонима предопределенного узла + ПсевдонимПредопределенногоУзла = ОбменДаннымиСервер.ПсевдонимПредопределенногоУзла(Корреспондент); + ПланОбменаМенеджер = ВнешнееСоединение.ПланыОбмена[Структура.ИмяПланаОбменаКорреспондента]; + ПроверятьНаличиеУзлаВКорреспонденте = Истина; + Если ЗначениеЗаполнено(ПсевдонимПредопределенногоУзла) Тогда + // Надо проверить код узла в корреспонденте - он может быть уже перекодирован. + // Тогда псевдоним больше не нужен. + Если ПланОбменаМенеджер.НайтиПоКоду(ПсевдонимПредопределенногоУзла) <> ПланОбменаМенеджер.ПустаяСсылка() Тогда + Структура.ТекущийУзелПланаОбменаКод = ПсевдонимПредопределенногоУзла; + ПроверятьНаличиеУзлаВКорреспонденте = Ложь; + КонецЕсли; + КонецЕсли; + Если ПроверятьНаличиеУзлаВКорреспонденте Тогда + ПланОбменаСсылка = ПланОбменаМенеджер.НайтиПоКоду(Структура.ТекущийУзелПланаОбменаКод); + Если НЕ ЗначениеЗаполнено(ПланОбменаСсылка.Code) Тогда + // При необходимости запуск перехода на синхронизацию данных через универсальный формат. + ТекстСообщения = НСтр("ru = 'Необходим переход на синхронизацию данных через универсальный формат в базе-корреспонденте.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене, ТекстСообщения, Ложь); + + СтруктураПараметров = Новый Структура(); + СтруктураПараметров.Вставить("Код", Структура.ТекущийУзелПланаОбменаКод); + СтруктураПараметров.Вставить("ВариантНастройки", + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "ВариантНастройки")); + СтруктураПараметров.Вставить("Ошибка", Ложь); + СтруктураПараметров.Вставить("СообщениеОбОшибке", ""); + + ЕстьОшибки = Ложь; + СообщениеОбОшибке = ""; + РезультатПерехода = ПланОбменаМенеджер.ПереходНаСинхронизациюЧерезУниверсальныйФорматВнешнееСоединение(СтруктураПараметров); + + Если СтруктураПараметров.Ошибка Тогда + + ЕстьОшибки = Истина; + + ТекстСообщения = НСтр("ru = 'Ошибка при переходе на синхронизацию данных через универсальный формат: %1. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + СообщениеОбОшибке = СтрШаблон(ТекстСообщения, СтруктураПараметров.СообщениеОбОшибке); + + ИначеЕсли РезультатПерехода = Неопределено Тогда + + ЕстьОшибки = Истина; + СообщениеОбОшибке = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат не выполнен'"); + + КонецЕсли; + + Если ЕстьОшибки Тогда + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + Возврат Ложь; + Иначе + ТекстСообщения = НСтр("ru = 'Переход на синхронизацию данных через универсальный формат завершен успешно.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене, ТекстСообщения, Ложь); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + СтруктураКорреспондента = ОбщегоНазначения.СкопироватьРекурсивно(Структура, Ложь); + СтруктураКорреспондента.ИмяПланаОбмена = Структура.ИмяПланаОбменаКорреспондента; + СтруктураКорреспондента.ИмяПланаОбменаКорреспондента = Структура.ИмяПланаОбмена; + + Попытка + // СтруктураНастроекОбменаВнешнееСоединение + СтруктураНастроекОбменаВС = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(СтруктураКорреспондента); + Исключение + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + Возврат Ложь; + КонецПопытки; + + Если СтруктураНастроекОбменаВС.Свойство("НастройкаСинхронизацииДанныхЗавершена") Тогда + Если Не СообщениеДляСопоставленияДанных + И СтруктураНастроекОбменаВС.НастройкаСинхронизацииДанныхЗавершена = Ложь Тогда + + ТекстСообщения = НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и завершите в ней настройку синхронизации. + |Выполнение обмена данными отменено.'"); + + СообщениеОбОшибке = СтрШаблон(ТекстСообщения, СтруктураНастроекОбменаВС.УзелИнформационнойБазыНаименование); + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + + Возврат Ложь; + + КонецЕсли; + КонецЕсли; + + Если СтруктураНастроекОбменаВС.Свойство("ПолученоСообщениеДляСопоставленияДанных") Тогда + Если Не СообщениеДляСопоставленияДанных + И СтруктураНастроекОбменаВС.ПолученоСообщениеДляСопоставленияДанных = Истина Тогда + + ТекстСообщения = НСтр("ru = 'Для продолжения перейдите в программу ""%1"" и выполните загрузку сообщения для сопоставления данных. + |Выполнение обмена данными отменено.'"); + + СообщениеОбОшибке = СтрШаблон(ТекстСообщения, СтруктураНастроекОбменаВС.УзелИнформационнойБазыНаименование); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + + Возврат Ложь; + + КонецЕсли; + КонецЕсли; + + Если ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных + И НЕ ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + + // Получаем правила обмена из второй ИБ. + ПравилаКонвертацииОбъектов = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПравилаКонвертацииОбъектов(СтруктураНастроекОбменаВС.ИмяПланаОбмена); + + Если ПравилаКонвертацииОбъектов = Неопределено Тогда + + // Правила обмена должны быть указаны. + + ТекстСообщения = НСтр("ru = 'Не заданы правила конвертации во второй информационной базе для плана обмена %1. Обмен отменен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + СообщениеОбОшибке = СтрШаблон(ТекстСообщения, СтруктураНастроекОбменаВС.ИмяПланаОбмена); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + КонецЕсли; + + ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ЗаписьЖурналаРегистрацииНачалаОбменаДанными(СтруктураНастроекОбменаВС); + ВнешнееСоединение = Неопределено; + + Возврат Истина; + +КонецФункции + +Функция КоличествоЭлементовВТранзакцииВыполняемогоДействия(Действие) + + Если Действие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда + КоличествоЭлементов = ОбменДаннымиСервер.КоличествоЭлементовВТранзакцииВыгрузкиДанных(); + Иначе + КоличествоЭлементов = ОбменДаннымиСервер.КоличествоЭлементовВТранзакцииЗагрузкиДанных(); + КонецЕсли; + + Возврат КоличествоЭлементов; + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщенияОбмена = Неопределено; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ТранспортСообщенийОбменаCOM.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ТранспортСообщенийОбменаCOM.mdo new file mode 100644 index 000000000..317b552f2 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаCOM/ТранспортСообщенийОбменаCOM.mdo @@ -0,0 +1,155 @@ + + + + + + + ТранспортСообщенийОбменаCOM + + ru + Транспорт сообщений обмена COM + + true + DataProcessor.ТранспортСообщенийОбменаCOM.Form.Форма + true + + + ru + + + + ВариантРаботыИнформационнойБазы + + ru + Вариант работы информационной базы + + + Number + + 1 + + + + ru + Вариант работы информационной базы: 0 – файловый; 1 – клиент-серверный + + + + + + КаталогИнформационнойБазы + + ru + Каталог информационной базы + + + String + + + + + + + АутентификацияОперационнойСистемы + + ru + Аутентификация операционной системы + + + Boolean + + + + + + ИмяПользователя + + ru + Имя пользователя + + + String + + + + + + + ПарольПользователя + + ru + Пароль пользователя + + + String + + + + + + + ИмяСервера1СПредприятия + + ru + Имя сервера + + + String + + + + + + + ИмяИнформационнойБазыНаСервере1СПредприятия + + ru + Имя информационной базы на сервере + + + String + + + + + + + ПродолжениеНастройки + + ru + Продолжение настройки + + + Boolean + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаАутентификации + + ru + Форма аутентификации + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..6bb81c460 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/ФормаНастройки/Form.form @@ -0,0 +1,460 @@ + + + + <key>ru</key> + <value>Электронная почта</value> + + + УчетнаяЗапись + 24 + true + true + + true + + + Объект.УчетнаяЗапись + + + УчетнаяЗаписьРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + УчетнаяЗаписьКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + РазмерФайла + 27 + + МаксимальныйДопустимыйРазмерСообщения + 29 + + <key>ru</key> + <value>Максимальный размер сообщения обмена, КБайт</value> + + true + true + + true + + + Объект.МаксимальныйДопустимыйРазмерСообщения + + + МаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + МаксимальныйДопустимыйРазмерСообщенияКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Декорация2 + 32 + + <key>ru</key> + <value>КБ (0 – нет ограничений)</value> + + true + true + + true + + + Декорация2ExtendedTooltip + 34 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 33 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Размер файла</value> + + + РазмерФайлаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + Архив + 4 + + СжиматьФайлИсходящегоСообщения + 6 + true + true + + true + + + Объект.СжиматьФайлИсходящегоСообщения + + Right + + OnChange + СжиматьФайлИсходящегоСообщенияПриИзменении + + + СжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 7 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена + 9 + true + true + + true + + + Объект.ПарольАрхиваСообщенияОбмена + + Top + + ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбменаКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Архив</value> + + true + + АрхивРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + Транслитерация + 35 + + <key>ru</key> + <value>Транслитерация имени файла сообщения обмена</value> + + true + true + + true + + + Объект.Транслитерация + + Right + + ТранслитерацияРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ТранслитерацияКонтекстноеМеню + 36 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаEMAIL + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..ab0c33513 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,103 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + + УстановитьВидимостьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СжиматьФайлИсходящегоСообщенияПриИзменении(Элемент) + УстановитьВидимостьДоступность(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + + ПоказатьПредупреждение(, ТекстПредупреждения); + +КонецПроцедуры + + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Заполним пароль. + ТранспортСообщенийОбмена.ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(ЭтаФорма, ОбработкаОбъект); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьДоступность() + Элементы.ПарольАрхиваСообщенияОбмена.Доступность = Объект.СжиматьФайлИсходящегоСообщения; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Help/ru.html new file mode 100644 index 000000000..c679f09a9 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/Help/ru.html @@ -0,0 +1,8 @@ + +

                  В случае если к другом приложении нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), рекомендуется использовать другие каналы связи, например Электронная почта. При этом приложения, между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. Такой вариант подходит не только для синхронизации данных с приложениями, расположенными в других сетях (офисах), но и для приложений в одной сети.

                  +

                  При настройке синхронизации будет сформирован файл(ы) с настройками подключения (*.xml и *.json). В приложении-корреспонденте при выборе типа подключения, необходимо выбрать опцию Продолжение настройки, выбрать необходимый тип подключения и загрузить файл с настройками подключения

                  +
                  • В поле Учетная запись электронной почты выберите элемент из списка или создайте новый.
                  • +
                  • Укажите Допустимый размер вложения письма, для того чтобы ограничить объем пересылаемого сообщения.
                  • +
                  • Включите флажок Сжимать отправляемые данные в архив , для того чтобы ограничить размер отправляемого сообщения.
                  • +
                  • Введите Пароль архива для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложений.
                  • +

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ManagerModule.bsl new file mode 100644 index 000000000..8af2b9018 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ManagerModule.bsl @@ -0,0 +1,231 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо указать учетную запись электронной почты.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Электронная почта'"); + Параметры.ИдентификаторТранспорта = "EMAIL"; + Параметры.Описание = Описание; + Параметры.РеквизитыДляБезопасногоХранилища.Добавить("ПарольАрхиваСообщенияОбмена"); + Параметры.НастройкаУзлаВКорреспонденте = Истина; + Параметры.Картинка = БиблиотекаКартинок.ТранспортЭлектроннаяПочта; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияВXML_1_2(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияИзXML_1_2(ТекстXML, "EMAIL"); + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + НастройкиТранспортаJSON = Новый Структура; + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + + НастройкиТранспортаJSON.Вставить("MaxMessageSize", НастройкиТранспорта.МаксимальныйДопустимыйРазмерСообщения); + НастройкиТранспортаJSON.Вставить("CompressOutgoingMessageFile", НастройкиТранспорта.СжиматьФайлИсходящегоСообщения); + НастройкиТранспортаJSON.Вставить("ArchivePasswordExchangeMessages", ПарольАрхиваСообщенияОбмена); + НастройкиТранспортаJSON.Вставить("TransliterateExchangeMessageFileNames", НастройкиТранспорта.Транслитерация); + + Если ЗначениеЗаполнено(НастройкиТранспорта.УчетнаяЗапись) Тогда + + СпрУчетнаязапись = НастройкиТранспорта.УчетнаяЗапись; + + УчетнаяЗапись = Новый Структура; + + УчетнаяЗапись.Вставить("Ref", Строка(СпрУчетнаяЗапись.УникальныйИдентификатор())); + УчетнаяЗапись.Вставить("Description", СпрУчетнаяЗапись.Наименование); + УчетнаяЗапись.Вставить("DeletionMark", СпрУчетнаяЗапись.ПометкаУдаления); + УчетнаяЗапись.Вставить("PredefinedDataName", СпрУчетнаяЗапись.ИмяПредопределенныхДанных); + + Словарь = СловарьДляУчетнойЗаписи(); + Тип = ТипЗнч(СпрУчетнаязапись); + МетаданныеСправочника = Метаданные.НайтиПоТипу(Тип); + + Для Каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл + + Ключ = Реквизит.Имя; + Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда + Если Словарь.Получить(Ключ) <> Неопределено Тогда + Ключ = Словарь.Получить(Ключ); + КонецЕсли; + КонецЕсли; + + Значение = СпрУчетнаязапись[Реквизит.Имя]; + Если ТипЗнч(Значение) <> Тип("Число") + Или ТипЗнч(Значение) <> Тип("Строка") + Или ТипЗнч(Значение) <> Тип("Дата") + Или ТипЗнч(Значение) <> Тип("Булево") Тогда + + Значение = Строка(Значение); + + КонецЕсли; + + УчетнаяЗапись.Вставить(Ключ, Значение); + + КонецЦикла; + + НастройкиТранспортаJSON.Вставить("Account", УчетнаяЗапись); + + ПарольSMTP = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.УчетнаяЗапись, "ПарольSMTP"); + Если ЗначениеЗаполнено(ПарольSMTP) Тогда + НастройкиТранспортаJSON.Вставить("PasswordSMTP", ПарольSMTP); + КонецЕсли; + + КонецЕсли; + + Возврат НастройкиТранспортаJSON; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + НастройкиТранспорта = Новый Структура; + НастройкиТранспорта.Вставить("МаксимальныйДопустимыйРазмерСообщения", НастройкиТранспортаJSON.MaxMessageSize); + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", НастройкиТранспортаJSON.CompressOutgoingMessageFile); + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", НастройкиТранспортаJSON.ArchivePasswordExchangeMessages); + НастройкиТранспорта.Вставить("Транслитерация", НастройкиТранспортаJSON.TransliterateExchangeMessageFileNames); + + СтруктураУчетнойЗаписи = Новый Структура; + СтруктураУчетнойЗаписи.Вставить("Наименование", НастройкиТранспортаJSON.Account.Description); + СтруктураУчетнойЗаписи.Вставить("ИмяПредопределенныхДанных", НастройкиТранспортаJSON.Account.PredefinedDataName); + + Словарь = СловарьДляУчетнойЗаписи("ru"); + + Для Каждого КлючИЗначение Из НастройкиТранспортаJSON.Account Цикл + + Ключ = КлючИЗначение.Ключ; + Значение = КлючИЗначение.Значение; + + Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда + Если Словарь.Получить(Ключ) <> Неопределено Тогда + Ключ = Словарь.Получить(Ключ); + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + СтруктураУчетнойЗаписи.Вставить(Ключ, Значение); + + КонецЦикла; + + ИмяСправочника = "УчетныеЗаписиЭлектроннойПочты"; + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник." + ИмяСправочника); + УчетнаяЗаписьЭлектроннойПочты = Менеджер.СоздатьЭлемент(); + УчетнаяЗаписьЭлектроннойПочты.Наименование = СтруктураУчетнойЗаписи.Наименование; + Если СтруктураУчетнойЗаписи.Свойство("ИмяПредопределенныхДанных") Тогда + УчетнаяЗаписьЭлектроннойПочты.ИмяПредопределенныхДанных = СтруктураУчетнойЗаписи.ИмяПредопределенныхДанных; + КонецЕсли; + + Для Каждого Реквизит Из Метаданные.Справочники[ИмяСправочника].Реквизиты Цикл + + Если Не СтруктураУчетнойЗаписи.Свойство(Реквизит.Имя) Тогда + Продолжить; + КонецЕсли; + + УчетнаяЗаписьЭлектроннойПочты[Реквизит.Имя] = СтруктураУчетнойЗаписи[Реквизит.Имя]; + + КонецЦикла; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + + МодульРаботаСПочтовымиСообщениямиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебный"); + + УчетнаяЗаписьЭтойБазы = МодульРаботаСПочтовымиСообщениямиСлужебный.УчетнаяЗаписьЭтойБазыПоДаннымУчетнойЗаписиКорреспондента( + УчетнаяЗаписьЭлектроннойПочты); + + НастройкиТранспорта.Вставить("УчетнаяЗапись", УчетнаяЗаписьЭтойБазы.Ссылка); + + ПарольSMTP = ""; + Если НастройкиТранспортаJSON.Свойство("PasswordSMTP", ПарольSMTP) Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьЭтойБазы.Ссылка, ПарольSMTP); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗаписьЭтойБазы.Ссылка, ПарольSMTP, "ПарольSMTP"); + КонецЕсли; + + КонецЕсли; + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция СловарьДляУчетнойЗаписи(НаправлениеПеревода = "en") + + Словарь = Новый Соответствие; + + Словарь.Вставить("АдресЭлектроннойПочты", "Email"); + Словарь.Вставить("ВремяОжидания", "Timeout"); + Словарь.Вставить("ИмяПользователя", "UserName"); + Словарь.Вставить("ИспользоватьДляОтправки", "UseForSending"); + Словарь.Вставить("ИспользоватьДляПолучения", "UseForReceiving"); + Словарь.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", "UseSecureConnectionForIncomingMail"); + Словарь.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", "UseSecureConnectionForOutgoingMail"); + Словарь.Вставить("ОставлятьКопииСообщенийНаСервере", "KeepMessageCopiesAtServer"); + Словарь.Вставить("ПериодХраненияСообщенийНаСервере", "KeepMailAtServerPeriod"); + Словарь.Вставить("Пользователь", "User"); + Словарь.Вставить("ПользовательSMTP", "SMTPUser"); + Словарь.Вставить("ПортСервераВходящейПочты", "IncomingMailServerPort"); + Словарь.Вставить("ПортСервераИсходящейПочты", "OutgoingMailServerPort"); + Словарь.Вставить("ПротоколВходящейПочты", "ProtocolForIncomingMail"); + Словарь.Вставить("СерверВходящейПочты", "IncomingMailServer"); + Словарь.Вставить("СерверИсходящейПочты", "OutgoingMailServer"); + Словарь.Вставить("ТребуетсяВходНаСерверПередОтправкой", "SignInBeforeSendingRequired"); + Словарь.Вставить("ОтправлятьСкрытыеКопииПисемНаЭтотАдрес", "SendBCCToThisAddress"); + Словарь.Вставить("ВладелецУчетнойЗаписи", "AccountOwner"); + Словарь.Вставить("ПриОтправкеПисемТребуетсяАвторизация", "AuthorizationRequiredOnSendEmails"); + Словарь.Вставить("АвторизацияСПомощьюПочтовогоСервиса", "EmailServiceAuthorization"); + Словарь.Вставить("ИмяПочтовогоСервиса", "EmailServiceName"); + + Если НаправлениеПеревода = "en" Тогда + + Возврат Словарь; + + ИначеЕсли НаправлениеПеревода = "ru" Тогда + + НовыйСловарь = Новый Соответствие; + Для Каждого КлючИЗначение Из Словарь Цикл + НовыйСловарь.Вставить(КлючИЗначение.Значение, КлючИЗначение.Ключ); + КонецЦикла; + + Возврат НовыйСловарь; + + КонецЕсли; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index f8f928e4b..9c29b9e3e 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -9,330 +9,140 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных -Перем СтрокаСообщенияОбОшибке Экспорт; -Перем СтрокаСообщенияОбОшибкеЖР Экспорт; -// Соответствие с предопределенными сообщениями ошибок обработки. -Перем СообщенияОшибок; // Соответствие +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; -Перем ИмяОбъекта; // Имя объекта метаданных - -Перем ВременныйФайлСообщенияОбмена; // Временный файл сообщения обмена для выгрузки/загрузки данных. - -Перем ВременныйКаталогСообщенийОбмена; // Временный каталог для сообщений обмена. - -Перем ТемаСообщения; // Шаблон темы сообщения - -Перем ТелоСообщенияПростое; // Текст тела сообщения с вложением - файлом XML. - -Перем ТелоСообщенияСжатое; // Текст тела сообщения с вложением - сжатым файлом. - -Перем ТелоСообщенияПакетное; // Текст тела сообщения с вложением - сжатый файл, в котором с набор файлов. +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; Перем ОбщийМодульРаботаСПочтовымиСообщениями; -Перем ИдентификаторКаталога; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщение(); + Исключение + Результат = Ложь; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + + Для Каждого Шаблон Из ШаблоныИменДляПолученияСообщения Цикл + + Результат = ПолучитьСообщение(Шаблон); + + Если Результат Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. - -// Создает временный каталог в каталоге временных файлов пользователя операционной системы. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ВыполнитьДействияПередОбработкойСообщения() Экспорт - - ИнициализацияСообщений(); - - ИдентификаторКаталога = Неопределено; - - Возврат СоздатьВременныйКаталогСообщенийОбмена(); - -КонецФункции - -// Выполняет отправку сообщения обмена на заданный ресурс из временного каталога сообщения обмена. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ОтправитьСообщение() Экспорт - - ИнициализацияСообщений(); - - Попытка - Результат = ОтправитьСообщениеОбмена(); - Исключение - Результат = Ложь; - КонецПопытки; - - Возврат Результат; - -КонецФункции - -// Получает сообщение обмена с заданного ресурса во временный каталог сообщения обмена. -// -// Параметры: -// ПроверкаНаличия - Булево - Истина, если необходимо только проверить наличие сообщений обмена, без их загрузки. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ПолучитьСообщение(ПроверкаНаличия = Ложь) Экспорт - - ИнициализацияСообщений(); - - Попытка - Результат = ПолучитьСообщениеОбмена(ПроверкаНаличия); - Исключение - Результат = Ложь; - КонецПопытки; - - Возврат Результат; - -КонецФункции - -// Удаляет временный каталог сообщений обмена после выполнения выгрузки или загрузки данных. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина -// -Функция ВыполнитьДействияПослеОбработкиСообщения() Экспорт - - ИнициализацияСообщений(); - - УдалитьВременныйКаталогСообщенийОбмена(); - - Возврат Истина; - -КонецФункции - -// Выполняет инициализацию свойств обработки начальными значениями и константами. -// -// Параметры: -// Нет. -// -Процедура Инициализация() Экспорт - - ИнициализацияСообщений(); - - ТемаСообщения = "Exchange message (%1)"; // Строка не подлежит локализации. - ТемаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТемаСообщения, ШаблонИмениФайлаСообщения); - - ТелоСообщенияПростое = НСтр("ru = 'Сообщение обмена данными'"); - ТелоСообщенияСжатое = НСтр("ru = 'Сжатое сообщение обмена данными'"); - ТелоСообщенияПакетное = НСтр("ru = 'Пакетное сообщение обмена данными'"); - -КонецПроцедуры - -// Выполняет проверку возможности установки подключения к заданному ресурсу. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - подключение может быть установлено; Ложь - нет. -// -Функция ПодключениеУстановлено() Экспорт - - ИнициализацияСообщений(); - - Если НЕ ЗначениеЗаполнено(EMAILУчетнаяЗапись) Тогда - ПолучитьСообщениеОбОшибке(101); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - -// Время изменения файла сообщения обмена. -// -// Возвращаемое значение: -// Строка - время изменения файла сообщения обмена. -// -Функция ДатаФайлаСообщенияОбмена() Экспорт - - Результат = Неопределено; - - Если ТипЗнч(ВременныйФайлСообщенияОбмена) = Тип("Файл") Тогда +Функция ОтправитьСообщение() - Если ВременныйФайлСообщенияОбмена.Существует() Тогда - - Результат = ВременныйФайлСообщенияОбмена.ПолучитьВремяИзменения(); - - КонецЕсли; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Полное имя файла сообщения обмена. -// -// Возвращаемое значение: -// Строка - полное имя файла сообщения обмена. -// -Функция ИмяФайлаСообщенияОбмена() Экспорт - - Имя = ""; - - Если ТипЗнч(ВременныйФайлСообщенияОбмена) = Тип("Файл") Тогда - - Имя = ВременныйФайлСообщенияОбмена.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -// Полное имя каталога сообщения обмена. -// -// Возвращаемое значение: -// Строка - полное имя каталога сообщения обмена. -// -Функция ИмяКаталогаСообщенияОбмена() Экспорт - - Имя = ""; - - Если ТипЗнч(ВременныйКаталогСообщенийОбмена) = Тип("Файл") Тогда - - Имя = ВременныйКаталогСообщенийОбмена.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - -Функция СоздатьВременныйКаталогСообщенийОбмена() - - // Создаем временный каталог для сообщений обмена. - Попытка - ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(ИдентификаторКаталога); - Исключение - ПолучитьСообщениеОбОшибке(4); - ДополнитьСообщениеОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Ложь; - КонецПопытки; - - ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); - - ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".xml"); - - ВременныйФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщения); - - Возврат Истина; -КонецФункции - -Функция УдалитьВременныйКаталогСообщенийОбмена() - - Попытка - Если Не ПустаяСтрока(ИмяКаталогаСообщенияОбмена()) Тогда - УдалитьФайлы(ИмяКаталогаСообщенияОбмена()); - ВременныйКаталогСообщенийОбмена = Неопределено; - КонецЕсли; - - Если Не ИдентификаторКаталога = Неопределено Тогда - ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ИдентификаторКаталога); - ИдентификаторКаталога = Неопределено; - КонецЕсли; - Исключение - Возврат Ложь; - КонецПопытки; - - Возврат Истина; - -КонецФункции - -Функция ОтправитьСообщениеОбмена() - Результат = Истина; - Расширение = ?(СжиматьФайлИсходящегоСообщения(), ".zip", ".xml"); - - ИмяФайлаИсходящегоСообщения = ШаблонИмениФайлаСообщения + Расширение; - - Если СжиматьФайлИсходящегоСообщения() Тогда + Если СжиматьФайлИсходящегоСообщения Тогда - // Получаем имя для временного файла архива. - ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".zip"); - - Попытка - - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, НСтр("ru = 'Файл сообщения обмена'")); - Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); - Архиватор.Записать(); - - Исключение - + Если Не ТранспортСообщенийОбмена.ЗапаковатьСообщениеОбменаВZipФайл(ЭтотОбъект, ПарольАрхиваСообщенияОбмена) Тогда Результат = Ложь; - ПолучитьСообщениеОбОшибке(3); - ДополнитьСообщениеОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - Архиватор = Неопределено; - - Если Результат Тогда - - // Выполняем проверку на максимально допустимый размер сообщения обмена. - Если ОбменДаннымиСервер.РазмерСообщенияОбменаПревышаетДопустимый(ИмяВременногоФайлаАрхива, МаксимальныйДопустимыйРазмерСообщения()) Тогда - ПолучитьСообщениеОбОшибке(108); - Результат = Ложь; - КонецЕсли; - КонецЕсли; - Если Результат Тогда - - Результат = ОтправитьСообщениеПоЭлектроннойПочте( - ТелоСообщенияСжатое, - ИмяФайлаИсходящегоСообщения, - ИмяВременногоФайлаАрхива); - - КонецЕсли; + Файл = Новый Файл(СообщениеОбмена); + ИмяФайлаПриемника = Файл.Имя; Иначе - Если Результат Тогда - - // Выполняем проверку на максимально допустимый размер сообщения обмена. - Если ОбменДаннымиСервер.РазмерСообщенияОбменаПревышаетДопустимый(ИмяФайлаСообщенияОбмена(), МаксимальныйДопустимыйРазмерСообщения()) Тогда - ПолучитьСообщениеОбОшибке(108); - Результат = Ложь; - КонецЕсли; - + ИмяФайлаПриемника = ИмяСообщенияДляОтправки; + + КонецЕсли; + + Если Результат Тогда + + // Выполняем проверку на максимально допустимый размер сообщения обмена. + Если ОбменДаннымиСервер.РазмерСообщенияОбменаПревышаетДопустимый(СообщениеОбмена, МаксимальныйДопустимыйРазмерСообщения) Тогда + СообщениеОбОшибке = НСтр("ru = 'Превышен допустимый размер сообщения обмена.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Результат = Ложь; КонецЕсли; - Если Результат Тогда - - Результат = ОтправитьСообщениеПоЭлектроннойПочте( - ТелоСообщенияПростое, - ИмяФайлаИсходящегоСообщения, - ИмяФайлаСообщенияОбмена()); - - КонецЕсли; + КонецЕсли; + + Если Результат Тогда + + ТелоСообщенияПростое = НСтр("ru = 'Сообщение обмена данными'"); + + Результат = ОтправитьСообщениеПоЭлектроннойПочте( + ТелоСообщенияПростое, + ИмяФайлаПриемника, + СообщениеОбмена); КонецЕсли; @@ -340,281 +150,198 @@ КонецФункции -// Возвращаемое значение: -// ТаблицаЗначений - коллекция сообщений обмена: -// * Идентификатор - Массив из Строка - коллекция идентификаторов сообщений. -// * ДатаОтправления - Дата - дата отправки сообщения. -// -Функция ТаблицаСообщенийОбмена() - - ТаблицаСообщенийОбмена = Новый ТаблицаЗначений; - ТаблицаСообщенийОбмена.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Массив")); - ТаблицаСообщенийОбмена.Колонки.Добавить("ДатаОтправления", Новый ОписаниеТипов("Дата")); - - Возврат ТаблицаСообщенийОбмена; - -КонецФункции - -Функция ПолучитьСообщениеОбмена(ПроверкаНаличия) +Функция ПолучитьСообщение(ШаблонИмениСообщения) ТаблицаСообщенийОбмена = ТаблицаСообщенийОбмена(); + МассивКолонок = Новый Массив; + ПараметрыЗагрузки = Новый Структура; ПараметрыЗагрузки.Вставить("ПолучениеЗаголовков", Истина); ПараметрыЗагрузки.Вставить("ПриводитьСообщенияКТипу", Ложь); Попытка - НаборСообщений = ОбщийМодульРаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); + НаборСообщений = ОбщийМодульРаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(УчетнаяЗапись, ПараметрыЗагрузки); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(103); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении заголовков сообщений с сервера электронной почты.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + Возврат Ложь; + КонецПопытки; - - ПодстрокаТемыДляПоиска = ВРег(СтрЗаменить(СокрЛП(ШаблонИмениФайлаСообщения), "Message_", "")); - + Для Каждого ПочтовоеСообщение Из НаборСообщений Цикл - ТемаПС = СокрЛП(ПочтовоеСообщение.Тема); - ТемаПС = СтрЗаменить(ТемаПС, Символы.Таб, ""); - - Если ВРег(ТемаПС) <> ВРег(СокрЛП(ТемаСообщения)) Тогда - // Возможно, имя сообщения в формате Message_[префикс]_УИД1_УИД2 - Если СтрНайти(ВРег(ТемаПС), ПодстрокаТемыДляПоиска) = 0 Тогда - Продолжить; - КонецЕсли; - КонецЕсли; + Тема = СокрЛП(ПочтовоеСообщение.Тема); + Тема = СтрЗаменить(Тема, Символы.Таб, ""); НоваяСтрока = ТаблицаСообщенийОбмена.Добавить(); + НоваяСтрока.Тема = Тема; НоваяСтрока.ДатаОтправления = ПочтовоеСообщение.ДатаОтправления; + НоваяСтрока.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор); НоваяСтрока.Идентификатор.Добавить(ПочтовоеСообщение); КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Т.ИдентификаторСтроки КАК ИдентификаторСтроки, + | Т.ДатаОтправления КАК ДатаОтправления, + | Т.Тема КАК Тема + |ПОМЕСТИТЬ ВТ + |ИЗ + | &ТаблицаСообщенийОбмена КАК Т + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ.ИдентификаторСтроки КАК ИдентификаторСтроки + |ИЗ + | ВТ КАК ВТ + |ГДЕ + | ВТ.Тема ПОДОБНО &Шаблон + | + |УПОРЯДОЧИТЬ ПО + | ВТ.ДатаОтправления УБЫВ"; - Если ТаблицаСообщенийОбмена.Количество() = 0 Тогда + // Поиск без учета расширения + Позиция = СтрНайти(ШаблонИмениСообщения, ".", НаправлениеПоиска.СКонца); + ШаблонИмениСообщенияДляПоиска = Лев(ШаблонИмениСообщения, Позиция - 1); + ШаблонИмениСообщенияДляПоиска = "%" + СтрЗаменить(ШаблонИмениСообщенияДляПоиска, "*", "%") + "%"; + + Запрос.УстановитьПараметр("ТаблицаСообщенийОбмена", ТаблицаСообщенийОбмена); + Запрос.УстановитьПараметр("Шаблон", ШаблонИмениСообщенияДляПоиска); + + РезультатПоискаПисем = Запрос.Выполнить().Выгрузить(); + + Если РезультатПоискаПисем.Количество() = 0 Тогда - Если Не ПроверкаНаличия Тогда - ПолучитьСообщениеОбОшибке(104); - - СтрокаСообщения = НСтр("ru = 'Не обнаружены письма с заголовком: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ТемаСообщения); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - КонецЕсли; + СообщениеОбОшибке = НСтр("ru = 'Не обнаружены письма с заголовком: ""%1""'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ШаблонИмениСообщения); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); Возврат Ложь; + КонецЕсли; + + МассивКолонок = Новый Массив; + МассивКолонок.Добавить("Вложения"); + + Идентификатор = ТаблицаСообщенийОбмена.Найти(РезультатПоискаПисем[0].ИдентификаторСтроки).Идентификатор; + + ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузки.Вставить("Колонки", МассивКолонок); + ПараметрыЗагрузки.Вставить("ЗаголовкиИдентификаторы", Идентификатор); + + Попытка + НаборСообщений = ОбщийМодульРаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(УчетнаяЗапись, ПараметрыЗагрузки); + Исключение + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении сообщения с сервера электронной почты.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецПопытки; + + ДвоичныеДанные = Неопределено; + Для Каждого КлючИЗначение Из НаборСообщений[0].Вложения Цикл + ФайлЗапакован = ВРег(Прав(КлючИЗначение.Ключ, 3)) = "ZIP"; + ДвоичныеДанные = КлючИЗначение.Значение; + КонецЦикла; + + Если ДвоичныеДанные = Неопределено Тогда + + СообщениеОбОшибке = НСтр("ru = 'Ошибка: в почтовом сообщении не найден файл с сообщением.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + Если ФайлЗапакован Тогда + + // Получаем имя для временного файла архива. + ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + СообщениеОбмена, Строка(Новый УникальныйИдентификатор) + ".zip"); + + ДвоичныеДанные.Записать(ИмяВременногоФайлаАрхива); + + Если Не ТранспортСообщенийОбмена.РаспаковатьСообщениеОбменаИзZipФайла( + ЭтотОбъект, ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена) Тогда + + Возврат Ложь; + + КонецЕсли; + Иначе - Если ПроверкаНаличия Тогда - Возврат Истина; - КонецЕсли; - - ТаблицаСообщенийОбмена.Сортировать("ДатаОтправления Убыв"); - - МассивКолонок = Новый Массив; - МассивКолонок.Добавить("Вложения"); - - ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("Колонки", МассивКолонок); - ПараметрыЗагрузки.Вставить("ЗаголовкиИдентификаторы", ТаблицаСообщенийОбмена[0].Идентификатор); - Попытка - НаборСообщений = ОбщийМодульРаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); + ДвоичныеДанные.Записать(СообщениеОбмена); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(105); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при записи файла сообщения обмена на диск.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + Возврат Ложь; + КонецПопытки; - ДвоичныеДанные = НаборСообщений[0].Вложения.Получить(ШаблонИмениФайлаСообщения+".zip"); // ДвоичныеДанные - - Если ДвоичныеДанные <> Неопределено Тогда - ФайлЗапакован = Истина; - Иначе - ДвоичныеДанные = НаборСообщений[0].Вложения.Получить(ШаблонИмениФайлаСообщения+".xml"); - ФайлЗапакован = Ложь; - КонецЕсли; - - // Возможно, имя сообщения в формате Message_[префикс]_УИД1_УИД2 - ФайлЗапакован = Ложь; - ШаблонПоиска = СтрЗаменить(ШаблонИмениФайлаСообщения, "Message_",""); - Для Каждого ТекВложение Из НаборСообщений[0].Вложения Цикл - Если СтрНайти(ТекВложение.Ключ, ШаблонПоиска) > 0 Тогда - ДвоичныеДанные = ТекВложение.Значение; - Если СтрЗаканчиваетсяНа(ТекВложение.Ключ,".zip") > 0 Тогда - ФайлЗапакован = Истина; - КонецЕсли; - // Перепишем точный шаблон имени файла как имя вложения без расширения. - СтруктураИмениВложенногоФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ТекВложение.Ключ,Ложь); - ШаблонИмениФайлаСообщения = СтруктураИмениВложенногоФайла.ИмяБезРасширения; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ДвоичныеДанные = Неопределено Тогда - ПолучитьСообщениеОбОшибке(109); - Возврат Ложь; - КонецЕсли; - - Если ФайлЗапакован Тогда - - // Получаем имя для временного файла архива. - ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".zip"); - - Попытка - ДвоичныеДанные.Записать(ИмяВременногоФайлаАрхива); - Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(106); - ДополнитьСообщениеОбОшибке(ТекстОшибки); - Возврат Ложь; - КонецПопытки; - - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(УзелИнформационнойБазы, ИмяВременногоФайлаАрхива); - - // Распаковываем временный файл архива. - УспешноРаспаковано = ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоФайлаАрхива, ИмяКаталогаСообщенияОбмена(), ПарольАрхиваСообщенияОбмена); - - Если Не УспешноРаспаковано Тогда - ПолучитьСообщениеОбОшибке(2); - Возврат Ложь; - КонецЕсли; - - // Проверка на существование файла сообщения. - Файл = Новый Файл(ИмяФайлаСообщенияОбмена()); - - Если Не Файл.Существует() Тогда - // Возможно, имя архива не соответствует имени файла внутри. - СтруктураИмениФайлаСообщения = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаСообщенияОбмена(),Ложь); - - Если ШаблонИмениФайлаСообщения <> СтруктураИмениФайлаСообщения.ИмяБезРасширения Тогда - МассивРаспакованныхФайлов = НайтиФайлы(ИмяКаталогаСообщенияОбмена(), "*.xml", Ложь); - Если МассивРаспакованныхФайлов.Количество() > 0 Тогда - РаспакованныйФайл = МассивРаспакованныхФайлов[0]; - ПереместитьФайл(РаспакованныйФайл.ПолноеИмя,ИмяФайлаСообщенияОбмена()); - Иначе - ПолучитьСообщениеОбОшибке(5); - Возврат Ложь; - КонецЕсли; - Иначе - ПолучитьСообщениеОбОшибке(5); - Возврат Ложь; - КонецЕсли; - - КонецЕсли; - - Иначе - - Попытка - ДвоичныеДанные.Записать(ИмяФайлаСообщенияОбмена()); - Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(106); - ДополнитьСообщениеОбОшибке(ТекстОшибки); - Возврат Ложь; - КонецПопытки; - - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(ИмяФайлаСообщенияОбмена(), ИмяВременногоФайлаАрхива); - - КонецЕсли; - КонецЕсли; Возврат Истина; КонецФункции -Процедура ПолучитьСообщениеОбОшибке(НомерСообщения) +Функция ПодключениеУстановлено() Экспорт - УстановитьСтрокуСообщенияОбОшибке(СообщенияОшибок[НомерСообщения]); - -КонецПроцедуры - -Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) - - Если Сообщение = Неопределено Тогда - Сообщение = НСтр("ru = 'Внутренняя ошибка'"); + Если НЕ ЗначениеЗаполнено(УчетнаяЗапись) Тогда + СообщениеОбОшибке = НСтр("ru = 'Ошибка инициализации: не указана учетная запись электронной почты транспорта сообщений обмена.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + Возврат Ложь; КонецЕсли; - СтрокаСообщенияОбОшибке = Сообщение; - СтрокаСообщенияОбОшибкеЖР = ИмяОбъекта + ": " + Сообщение; - -КонецПроцедуры - -Процедура ДополнитьСообщениеОбОшибке(Сообщение) - - СтрокаСообщенияОбОшибкеЖР = СтрокаСообщенияОбОшибкеЖР + Символы.ПС + Сообщение; - -КонецПроцедуры - -// Переопределяемая функция, возвращает максимально допустимый размер -// сообщения, которое может быть отправлено. -// -Функция МаксимальныйДопустимыйРазмерСообщения() - - Возврат EMAILМаксимальныйДопустимыйРазмерСообщения; + Возврат Истина; КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - -// Флаг сжатия файла исходящего сообщения. -// -Функция СжиматьФайлИсходящегоСообщения() +Функция ТаблицаСообщенийОбмена() - Возврат EMAILСжиматьФайлИсходящегоСообщения; + ТаблицаСообщенийОбмена = Новый ТаблицаЗначений; + ТаблицаСообщенийОбмена.Колонки.Добавить("ИдентификаторСтроки", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(36))); + ТаблицаСообщенийОбмена.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Массив")); + ТаблицаСообщенийОбмена.Колонки.Добавить("ДатаОтправления", Новый ОписаниеТипов("Дата")); + ТаблицаСообщенийОбмена.Колонки.Добавить("Тема", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200))); + + Возврат ТаблицаСообщенийОбмена; КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// Инициализация - -Процедура ИнициализацияСообщений() - - СтрокаСообщенияОбОшибке = ""; - СтрокаСообщенияОбОшибкеЖР = ""; - -КонецПроцедуры - -Процедура ИнициализацияСообщенийОшибок() - - СообщенияОшибок = Новый Соответствие; - - // Общие коды ошибок - СообщенияОшибок.Вставить(001, НСтр("ru = 'Не обнаружены сообщения обмена.'")); - СообщенияОшибок.Вставить(002, НСтр("ru = 'Ошибка при распаковке сжатого файла сообщения.'")); - СообщенияОшибок.Вставить(003, НСтр("ru = 'Ошибка при сжатии файла сообщения обмена.'")); - СообщенияОшибок.Вставить(004, НСтр("ru = 'Ошибка при создании временного каталога.'")); - СообщенияОшибок.Вставить(005, НСтр("ru = 'Архив не содержит файл сообщения обмена.'")); - СообщенияОшибок.Вставить(006, НСтр("ru = 'Сообщение обмена не отправлено: превышен допустимый размер сообщения.'")); - - // Коды ошибок, зависящие от вида транспорта. - СообщенияОшибок.Вставить(101, НСтр("ru = 'Ошибка инициализации: не указана учетная запись электронной почты транспорта сообщений обмена.'")); - СообщенияОшибок.Вставить(102, НСтр("ru = 'Ошибка при отправке сообщения электронной почты.'")); - СообщенияОшибок.Вставить(103, НСтр("ru = 'Ошибка при получении заголовков сообщений с сервера электронной почты.'")); - СообщенияОшибок.Вставить(104, НСтр("ru = 'Не обнаружены сообщения обмена на почтовом сервере.'")); - СообщенияОшибок.Вставить(105, НСтр("ru = 'Ошибка при получении сообщения с сервера электронной почты.'")); - СообщенияОшибок.Вставить(106, НСтр("ru = 'Ошибка при записи файла сообщения обмена на диск.'")); - СообщенияОшибок.Вставить(107, НСтр("ru = 'Проверка параметров учетной записи завершилась с ошибками.'")); - СообщенияОшибок.Вставить(108, НСтр("ru = 'Превышен допустимый размер сообщения обмена.'")); - СообщенияОшибок.Вставить(109, НСтр("ru = 'Ошибка: в почтовом сообщении не найден файл с сообщением.'")); - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// Работа с E-MAIL - Функция ОтправитьСообщениеПоЭлектроннойПочте(Тело, ИмяФайлаИсходящегоСообщения, ПутьКФайлу) ОписаниеВложения = Новый Структура; ОписаниеВложения.Вставить("Представление", ИмяФайлаИсходящегоСообщения); ОписаниеВложения.Вставить("АдресВоВременномХранилище", ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу))); - АдресЭлектроннойПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(EMAILУчетнаяЗапись, "АдресЭлектроннойПочты"); - + АдресЭлектроннойПочты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты"); + + ТемаСообщения = "Exchange message (%1)"; // Строка не подлежит локализации. + ТемаСообщения = СтрШаблон(ТемаСообщения, ИмяФайлаИсходящегоСообщения); + ПараметрыСообщения = Новый Структура; ПараметрыСообщения.Вставить("Кому", АдресЭлектроннойПочты); ПараметрыСообщения.Вставить("Тема", ТемаСообщения); @@ -624,13 +351,18 @@ ПараметрыСообщения.Вложения.Добавить(ОписаниеВложения); Попытка - НовоеПисьмо = ОбщийМодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(EMAILУчетнаяЗапись, ПараметрыСообщения); - ОбщийМодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(EMAILУчетнаяЗапись, НовоеПисьмо); + НовоеПисьмо = ОбщийМодульРаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыСообщения); + ОбщийМодульРаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, НовоеПисьмо); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(102); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при отправке сообщения электронной почты.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецПопытки; Возврат Истина; @@ -641,14 +373,8 @@ #Область Инициализация -ИнициализацияСообщений(); -ИнициализацияСообщенийОшибок(); - -ВременныйКаталогСообщенийОбмена = Неопределено; -ВременныйФайлСообщенияОбмена = Неопределено; - -ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); -ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); +ВременныйКаталог = Неопределено; +СообщенияОбмена = Неопределено; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда ОбщийМодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo index f8a471937..e521296f6 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ТранспортСообщенийОбменаEMAIL.mdo @@ -10,11 +10,17 @@ Транспорт сообщения обмена через E-mail DataProcessor.ТранспортСообщенийОбменаEMAIL.Form.Форма + true + + + ru + + - EMAILМаксимальныйДопустимыйРазмерСообщения + МаксимальныйДопустимыйРазмерСообщения ru - Максимальный размер сообщения обмена, КБайт + Максимальный допустимый размер сообщения Number @@ -31,7 +37,7 @@ - EMAILСжиматьФайлИсходящегоСообщения + СжиматьФайлИсходящегоСообщения ru Сжимать файл исходящего сообщения @@ -43,7 +49,7 @@ - EMAILУчетнаяЗапись + УчетнаяЗапись ru Учетная запись электронной почты @@ -71,44 +77,18 @@ - - ШаблонИмениФайлаСообщения + + Транслитерация ru - Шаблон имени файла сообщения + Транслитерация - - String - - - - - - - ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений - - ru - Использовать временный каталог для отправки и приема сообщений - - Истина - Отправка и получение сообщений обмена будет выполняться через временный каталог; Ложь – отправка и получение будет выполняться напрямую через каталог обмена Boolean - - УзелИнформационнойБазы - - ru - Узел информационной базы - - - ExchangePlanRef - - - - Форма @@ -118,4 +98,13 @@ PersonalComputer MobileDevice + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/Форма/Form.form new file mode 100644 index 000000000..81a0f0622 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/Форма/Form.form @@ -0,0 +1,42 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаESB1C + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..4a8c8f1f8 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройки/Form.form @@ -0,0 +1,484 @@ + + + + ГруппаПредварительныеНастройки + 71 + + Декорация2 + 73 + + <key>ru</key> + <value>Декорация1</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 74 + true + + 3 + true + 2 + true + + + StdPicture.Information + + Proportionally + AsFileRef + + + + ДекорацияПредварительныеНастройки + 76 + + <key>ru</key> + <value>Перед продолжением настройки: +• В <b>1С:Шина</> настройте процесс интеграции и добавьте <b>инфосистемы</>; +• Настройте <link СервисыИнтеграции>сервис интеграции</>; +• Включите регламентное задание <link РегламентноеЗадание>Обработка сервисов интеграции</>; + +Подробную инструкцию см. в <link Справка>справке</>.</value> + + true + true + + true + + + ДекорацияПредварительныеНастройкиРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ДекорацияПредварительныеНастройкиКонтекстноеМеню + 77 + true + + true + Label + true + + + URLProcessing + ДекорацияПредварительныеНастройкиОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>ПредварительныеНастройки</value> + + true + + ГруппаПредварительныеНастройкиРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + + Style.ToolTipBackColor + + Auto + Auto + + + + СервисИнтеграции + 26 + + <key>ru</key> + <value>Сервис интеграции</value> + + true + true + + true + + + Объект.СервисИнтеграции + + + OnChange + СервисИнтеграцииПриИзменении + + + СервисИнтеграцииРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СервисИнтеграцииКонтекстноеМеню + 27 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + true + true + true + Normal + + + + КаналПолучения + 60 + true + true + + true + + + Объект.КаналПолучения + + + КаналПолученияРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + КаналПолученияКонтекстноеМеню + 61 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + true + true + true + Normal + + + + КаналОтправки + 63 + true + true + + true + + + Объект.КаналОтправки + + + КаналОтправкиРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + КаналОтправкиКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + true + true + true + Normal + + + + КодПолучателя + 66 + + <key>ru</key> + <value>Код получателя в шине</value> + + true + true + + true + + + Объект.КодПолучателя + + + КодПолучателяРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + КодПолучателяКонтекстноеМеню + 67 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаESB1C + + + true + + + true + +
                  true
                  +
                  + + ЕстьПодсистемаРегламентныеЗадания + 2 + + Boolean + + + true + + + true + + + + ИдентификаторРегламентногоЗадания + 3 + + UUID + + + true + + + true + + + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..a9ba09673 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,212 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + + ЗаполнитьСервисИнтеграции(); + ЗаполнитьСписокКаналов(); + + ЕстьПодсистемаРегламентныеЗадания = + ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания"); + + ИдентификаторРегламентногоЗадания = РегламентныеЗаданияСервер.УникальныйИдентификатор( + Метаданные.РегламентныеЗадания.ОбработкаСервисовИнтеграции); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СервисИнтеграцииПриИзменении(Элемент) + + ЗаполнитьСписокКаналов(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияПредварительныеНастройкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Если НавигационнаяСсылкаФорматированнойСтроки = "СервисыИнтеграции" Тогда + + ПодключитьВнешнююОбработкуНаСервере(); + ОткрытьФорму("ВнешняяОбработка.StandardIntegrationServicesManagment.Форма"); + + ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "РегламентноеЗадание" Тогда + + Если ЕстьПодсистемаРегламентныеЗадания Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Действие", "Изменить"); + ПараметрыФормы.Вставить("Идентификатор", ИдентификаторРегламентногоЗадания); + + ИмяФормыРегламетногоЗадания = "Обработка.РегламентныеИФоновыеЗадания.Форма.РегламентноеЗадание"; + ОткрытьФорму(ИмяФормыРегламетногоЗадания, ПараметрыФормы, ЭтотОбъект); + + Иначе + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Идентификатор", ИдентификаторРегламентногоЗадания); + + ИмяФормыРегламетногоЗадания = "Обработка.ТранспортСообщенийОбменаESB1C.Форма.ФормаНастройкиРегламентногоЗадания"; + ОткрытьФорму(ИмяФормыРегламетногоЗадания, ПараметрыФормы, ЭтотОбъект); + + КонецЕсли; + + ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "Справка" Тогда + + ОткрытьСправку("Обработка.ТранспортСообщенийОбменаESB1C"); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + Если ПодключениеУстановлено Тогда + + ТекстПредупреждения = НСтр("ru = 'Подключение успешно установлено.'", + ОбщегоНазначенияКлиент.КодОсновногоЯзыка()); + + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтотОбъект); + +КонецФункции + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСервисИнтеграции() + + Для Каждого СервисИнтеграции Из Метаданные.СервисыИнтеграции Цикл + + Элементы.СервисИнтеграции.СписокВыбора.Добавить(СервисИнтеграции.Имя); + + КонецЦикла; + + Список = Элементы.СервисИнтеграции.СписокВыбора; + Если Не ЗначениеЗаполнено(Объект.СервисИнтеграции) + И Список.Количество() = 1 Тогда + + Объект.СервисИнтеграции = Список[0].Значение; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокКаналов() + + Список = Элементы.КаналОтправки.СписокВыбора; + Список.Очистить(); + + Если ЗначениеЗаполнено(Объект.СервисИнтеграции) Тогда + + Для Каждого Канал Из Метаданные.СервисыИнтеграции[Объект.СервисИнтеграции].КаналыСервисаИнтеграции Цикл + Если Канал.НаправлениеСообщения = Метаданные.СвойстваОбъектов.НаправлениеСообщенияКаналаСервисаИнтеграции.Отправка Тогда + Список.Добавить(Канал.Имя); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Если Список.Количество() = 1 Тогда + Объект.КаналОтправки = Список[0].Значение; + КонецЕсли; + + Список = Элементы.КаналПолучения.СписокВыбора; + Список.Очистить(); + + Если ЗначениеЗаполнено(Объект.СервисИнтеграции) Тогда + + Для Каждого Канал Из Метаданные.СервисыИнтеграции[Объект.СервисИнтеграции].КаналыСервисаИнтеграции Цикл + Если Канал.НаправлениеСообщения = Метаданные.СвойстваОбъектов.НаправлениеСообщенияКаналаСервисаИнтеграции.Получение Тогда + Список.Добавить(Канал.Имя); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Если Список.Количество() = 1 Тогда + Объект.КаналПолучения = Список[0].Значение; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПодключитьВнешнююОбработкуНаСервере() + + ВнешниеОбработки.Подключить("v8res://mngbase/StandardIntegrationServicesManagment.epf", "StandardIntegrationServicesManagment", false); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройкиРегламентногоЗадания/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройкиРегламентногоЗадания/Form.form new file mode 100644 index 000000000..3d7087ab0 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройкиРегламентногоЗадания/Form.form @@ -0,0 +1,293 @@ + + + + <key>ru</key> + <value>Обработка сервисов интеграции</value> + + + ИспользоватьРегламентноеЗадание + 1 + + <key>ru</key> + <value>Использовать регламентное задание</value> + + true + true + + true + + + ИспользоватьРегламентноеЗадание + + Right + + OnChange + ИспользоватьРегламентноеЗаданиеПриИзменении + + + ИспользоватьРегламентноеЗаданиеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ИспользоватьРегламентноеЗаданиеКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + + НастроитьРасписаниеРегламентногоЗадания + 4 + + <key>ru</key> + <value>Настроить расписание регламентного задания</value> + + true + true + + true + + + НастроитьРасписаниеРегламентногоЗаданияРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьРасписаниеРегламентногоЗадания + Normal + PictureAndText + true + true + UserCmds + Auto + + + Декорация1 + 10 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 11 + true + + Label + true + true + + Left + + + + ГруппаПанель + 6 + + ЗакрытьФорму + 13 + + <key>ru</key> + <value>Закрыть</value> + + true + true + + true + + + ЗакрытьФормуРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Form.Command.ЗакрытьФорму + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Панель</value> + + + ГруппаПанельРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 45 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаESB1C + + + true + + + true + +
                  true
                  +
                  + + ИспользоватьРегламентноеЗадание + + <key>ru</key> + <value>Использовать регламентное задание</value> + + 2 + + Boolean + + + true + + + true + + + + ИдентификаторРегламентногоЗадания + 4 + + UUID + + + true + + + true + + + + Расписание + 3 + + + true + + + true + + + + НастроитьРасписаниеРегламентногоЗадания + + <key>ru</key> + <value>Настроить расписание регламентного задания</value> + + 1 + + ru + Настроить расписание регламентного задания + + + true + + + StdPicture.ScheduledJob + + + + НастроитьРасписаниеРегламентногоЗадания + + + Auto + Auto + + + ЗакрытьФорму + + <key>ru</key> + <value>Закрыть</value> + + 2 + + ru + Закрыть форму + + + true + + + + ЗакрытьФорму + + + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройкиРегламентногоЗадания/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройкиРегламентногоЗадания/Module.bsl new file mode 100644 index 000000000..56198e4f2 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Forms/ФормаНастройкиРегламентногоЗадания/Module.bsl @@ -0,0 +1,120 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("Идентификатор") Тогда + + ТекстСообщения = НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'"); + ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ); + + Возврат; + + КонецЕсли; + + Параметры.Свойство("Идентификатор", ИдентификаторРегламентногоЗадания); + + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); + + УстановитьПривилегированныйРежим(Истина); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + + Задание = Задания[0]; + + ИспользоватьРегламентноеЗадание = Задание.Использование; + Расписание = Задание.Расписание; + + Элементы.НастроитьРасписаниеРегламентногоЗадания.Заголовок = Строка(Расписание); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИспользоватьРегламентноеЗаданиеПриИзменении(Элемент) + + УстановитьПараметрыРегламентногоЗадания(); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); + + // Открываем диалог для редактирования Расписания. + ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеРегламентногоЗаданияЗавершение", ЭтотОбъект); + Диалог.Показать(ОписаниеОповещения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьПараметрыРегламентногоЗадания() + + Отбор = Новый Структура; + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(ИдентификаторРегламентногоЗадания)); + + УстановитьПривилегированныйРежим(Истина); + Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); + + Задание = Задания[0]; + Задание.Использование = ИспользоватьРегламентноеЗадание; + Задание.Расписание = Расписание; + + Попытка + + Задание.Записать(); + + Исключение + + Шаблон = НСтр("ru = 'Произошла ошибка при сохранении расписания выполнения обменов. Подробное описание ошибки: %1'"); + СтрокаСообщения = СтрШаблон(Шаблон, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + + ОбщегоНазначения.СообщитьПользователю(СтрокаСообщения); + + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьРасписаниеРегламентногоЗаданияЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + + Возврат; + + КонецЕсли; + + Расписание = Результат; + + Элементы.НастроитьРасписаниеРегламентногоЗадания.Заголовок = Строка(Расписание); + + УстановитьПараметрыРегламентногоЗадания(); + +КонецПроцедуры + +#КонецОбласти + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Help/_files/2024-02-28_14-32-35.png b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Help/_files/2024-02-28_14-32-35.png new file mode 100644 index 000000000..5c9a650bb Binary files /dev/null and b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Help/_files/2024-02-28_14-32-35.png differ diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Help/ru.html new file mode 100644 index 000000000..3633275b6 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/Help/ru.html @@ -0,0 +1,30 @@ + + +

                  Для настройки подключения через 1С:Шина необходимо указать следующие параметры:

                  + +
                  • Сервис интеграции, через который происходит подключение к 1С:Шине.
                  • +
                  • Канал получения для входящих сообщений обмена.
                  • +
                  • Канал отправки для исходящих сообщений обмена.
                  • +
                  • Код получателя в шине (код информационной базы, который указывается в шине).
                  • +

                  + +

                  Перед настройка синхронизации в 1С:Предприятии необходимо настроить процесс интеграции в 1С:Шина. Подробную информацию о создании процесса интеграции можно посмотреть по ссылке.

                  +

                  Добавьте новый процесс интеграции, со схемой как на картинке ниже. (имена блоков могут отличаться от имен в примере)

                  +

                  +

                  Добавьте инфосистемы. Для каждого приложения (базы 1с) необходимо добавить отдельную инфосистему.

                  +

                  +

                  Для каждой инфосистемы получите ключ API.

                  +

                  В конфигураторе базы 1с необходимо добавить новое расширение, а в нем новый сервис интеграции (это можно сделать и в основной конфигурации, если она снята с поддержки).

                  +

                  +

                  В сервис интеграции загрузить каналы, при помощи полученного ранее ключа API.

                  +

                  +

                  В модуле сервиса интеграции, в каждый обработчик необходимо добавить вызов процедуры Обработки.ТранспортСообщенийОбменаESB1C.ПоместитьСообщениеВХранилище(Сообщение, Отказ)

                  +

                  +

                  После сохранения расширения (конфигурации), необходимо перейти в режим предприятия и начать настройку синхронизации.

                  +

                  Через форму настройки подключения к шине включите регламентное задание и подключите сервис интеграции, используя ключ API.

                  +

                  +

                  После ввода настроек подключения к шине, продолжите настройку синхронизации следуя по этапам помощника создания синхронизации.

                  +


                  +

                  + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ManagerModule.bsl new file mode 100644 index 000000000..44d6f11f8 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ManagerModule.bsl @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Параметры транспорта. Возвращает параметры транспорта +// +// Возвращаемое значение: +// Структура - см. ТранспортСообщенийОбмена.СтруктураПараметровТранспорта +// +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо указать данные для подключения к шине.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = '1С:Шина'"); + Параметры.ИдентификаторТранспорта = "ESB1C"; + Параметры.Описание = Описание; + + Параметры.Картинка = БиблиотекаКартинок.ТранспортESB1C; + + Возврат Параметры; + +КонецФункции + +// Помещает сообщение обмена в регистр сведений СообщенияОбменаДанными для дальнейшей загрузки при выполнении синхронизации +// +// Параметры: +// Сообщение - СообщениеСервисаИнтеграции +// Отказ - Булево +// +Процедура ПоместитьСообщениеВХранилище(Сообщение, Отказ) Экспорт + + Попытка + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + + Поток = ФайловыеПотоки.Открыть(ИмяВременногоФайла, РежимОткрытияФайла.ОткрытьИлиСоздать, ДоступКФайлу.Запись); + + Тело = Сообщение.ПолучитьТелоКакПоток(); + Тело.КопироватьВ(Поток); + Поток.СброситьБуферы(); + + Тело.Закрыть(); + Поток.Закрыть(); + + // Помещение в хранилище + КаталогХранилища = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов(); + ИмяФайлаВХранилище = ИмяФайла(Сообщение.КодОтправителя); + ПолноеИмяФайлаВХранилище = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогХранилища, ИмяФайлаВХранилище); + + ПереместитьФайл(ИмяВременногоФайла, ПолноеИмяФайлаВХранилище); + + ОбменДаннымиСервер.ПоместитьФайлВХранилище(ПолноеИмяФайлаВХранилище, ИмяФайлаВХранилище); + + Исключение + + Отказ = Истина; + + КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Транспорт сообщений обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); + ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, + УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки); + + КонецПопытки; + +КонецПроцедуры + +// Возвращает имя (идентификатор) под которым файл будет записан во временном хранилище (регистр сведений СообщенияОбменаДанными) +// +// Параметры: +// КодОтправителя - Строка - код отправителя +// +// Возвращаемое значение: +// Строка - имя файла +// +Функция ИмяФайла(КодОтправителя) Экспорт + + Шаблон = "esb_1c_%1.xml"; + Возврат СтрШаблон(Шаблон, КодОтправителя); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ObjectModule.bsl new file mode 100644 index 000000000..6a11fded4 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ObjectModule.bsl @@ -0,0 +1,167 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщение(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + + Результат = ПолучитьСообщение(); + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодключениеУстановлено() Экспорт + + Попытка + + Если СервисыИнтеграции[СервисИнтеграции].ПолучитьАктивность() Тогда + Возврат Истина; + Иначе + СообщениеОбОшибке = НСтр("ru = 'Сервис интеграции не активен.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + Возврат Ложь; + КонецЕсли; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + +КонецФункции + +Функция ОтправитьСообщение() + + Поток = ФайловыеПотоки.Открыть(СообщениеОбмена, РежимОткрытияФайла.Открыть, ДоступКФайлу.Чтение); + + Сообщение = СервисыИнтеграции[СервисИнтеграции].СоздатьСообщение(); + Сообщение.КодПолучателя = КодПолучателя; + + Тело = Сообщение.ПолучитьТелоКакПоток(); + Поток.КопироватьВ(Тело); + Тело.СброситьБуферы(); + Тело.Закрыть(); + Поток.Закрыть(); + + СервисыИнтеграции[СервисИнтеграции][КаналОтправки].ОтправитьСообщение(Сообщение); + + СервисыИнтеграции.ВыполнитьОбработку(); + + Возврат Истина; + +КонецФункции + +Функция ПолучитьСообщение() + + ИмяФайлаВХранилище = Обработки.ТранспортСообщенийОбменаESB1C.ИмяФайла(КодПолучателя); + СообщениеОбмена = ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ИмяФайлаВХранилище,,Ложь); + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщениеОбмена = Неопределено; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ТранспортСообщенийОбменаESB1C.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ТранспортСообщенийОбменаESB1C.mdo new file mode 100644 index 000000000..dd8e0273f --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаESB1C/ТранспортСообщенийОбменаESB1C.mdo @@ -0,0 +1,110 @@ + + + + + + + ТранспортСообщенийОбменаESB1C + + ru + Транспорт сообщений обмена через 1С:Шина + + DataProcessor.ТранспортСообщенийОбменаESB1C.Form.Форма + true + + + ru + + + + КаналОтправки + + ru + Канал отправки + + + String + + 50 + + + + + ShowError + + + КаналПолучения + + ru + Канал получения + + + String + + 50 + + + + + ShowError + + + КодПолучателя + + ru + Код получателя + + + String + + 50 + + + + + ShowError + + + СервисИнтеграции + + ru + Сервис интеграции + + + String + + 50 + + + + + ShowError + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаНастройкиРегламентногоЗадания + + ru + Форма настройки регламентного задания + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..eb24d1dbc --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/ФормаНастройки/Form.form @@ -0,0 +1,362 @@ + + + + КаталогОбменаИнформацией + 12 + true + true + + true + + + Объект.КаталогОбменаИнформацией + + Top + ShowBottom + + КаталогОбменаИнформациейРасширеннаяПодсказка + 14 + + <key>ru</key> + <value>Укажите локальный или сетевой каталог, который будет использоваться для передачи сообщений обмена.</value> + + Label + true + true + + Left + + + + КаталогОбменаИнформациейКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + + StartChoice + КаталогОбменаИнформациейНачалоВыбора + + + Opening + КаталогОбменаИнформациейОткрытие + + 40 + true + true + true + true + true + true + true + Normal + + + + Архив + 4 + + СжиматьФайлИсходящегоСообщения + 6 + true + true + + true + + + Объект.СжиматьФайлИсходящегоСообщения + + Right + + OnChange + СжиматьФайлИсходящегоСообщенияПриИзменении + + + СжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 7 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена + 9 + true + true + + true + + + Объект.ПарольАрхиваСообщенияОбмена + + Top + + ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбменаКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Архив</value> + + true + + АрхивРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + Транслитерация + 24 + + <key>ru</key> + <value>Транслитерация имени файла сообщения обмена</value> + + true + true + + true + + + Объект.Транслитерация + + Right + + ТранслитерацияРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ТранслитерацияКонтекстноеМеню + 25 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаFILE + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..d9cf25040 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,152 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + + УстановитьВидимостьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура КаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "КаталогОбменаИнформацией", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура КаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "КаталогОбменаИнформацией", СтандартнаяОбработка) +КонецПроцедуры + +&НаКлиенте +Процедура СжиматьФайлИсходящегоСообщенияПриИзменении(Элемент) + УстановитьВидимостьДоступность(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + Если Не ПустаяСтрока(Объект.КаталогОбменаИнформацией) Тогда + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( + Объект.КаталогОбменаИнформацией, Истина, Истина)); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + КонецЕсли; + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Заполним пароль. + ТранспортСообщенийОбмена.ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(ЭтаФорма, ОбработкаОбъект); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьДоступность() + Элементы.ПарольАрхиваСообщенияОбмена.Доступность = Объект.СжиматьФайлИсходящегоСообщения; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Help/ru.html new file mode 100644 index 000000000..a0decdf41 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/Help/ru.html @@ -0,0 +1,7 @@ + +

                  В случае если к другому приложению нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), рекомендуется использовать другие каналы связи, например Локальный или сетевой каталог. При этом приложения, между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. Такой вариант подходит не только для синхронизации данных с приложениями, расположенными в других сетях (офисах), но и для приложений в одной сети.

                  +

                  При настройке синхронизации будет сформирован файл(ы) с настройками подключения (*.xml и *.json). В приложении-корреспонденте при выборе типа подключения, необходимо выбрать опцию Продолжение настройки, выбрать необходимый тип подключения и загрузить файл с настройками подключения

                  +
                  • В поле Каталог выберите путь к локальному или сетевому каталогу.
                  • +
                  • Включите флажок Сжимать отправляемые данные в архив , для того чтобы ограничить размер отправляемого сообщения.
                  • +
                  • Введите Пароль архива для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложении.
                  • +

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ManagerModule.bsl new file mode 100644 index 000000000..313f0dbbc --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ManagerModule.bsl @@ -0,0 +1,86 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + + +// Параметры транспорта. Возвращает параметры транспорта +// +// Возвращаемое значение: +// Структура - см. ТранспортСообщенийОбмена.СтруктураПараметровТранспорта +// +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо указать каталог, расположенный на текущем компьютере или в локальной сети.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Локальный или сетевой каталог'"); + Параметры.ИдентификаторТранспорта = "FILE"; + Параметры.Описание = Описание; + Параметры.РеквизитыДляБезопасногоХранилища.Добавить("ПарольАрхиваСообщенияОбмена"); + Параметры.Картинка = БиблиотекаКартинок.Папка; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияВXML_1_2(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияИзXML_1_2(ТекстXML, "FILE"); + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + НастройкиТранспортаJSON = Новый Структура; + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + НастройкиТранспортаJSON.Вставить("DataExchangeDirectory", НастройкиТранспорта.КаталогОбменаИнформацией); + НастройкиТранспортаJSON.Вставить("CompressOutgoingMessageFile", НастройкиТранспорта.СжиматьФайлИсходящегоСообщения); + НастройкиТранспортаJSON.Вставить("ArchivePasswordExchangeMessages", ПарольАрхиваСообщенияОбмена); + НастройкиТранспортаJSON.Вставить("TransliterateExchangeMessageFileNames", НастройкиТранспорта.Транслитерация); + + Возврат НастройкиТранспортаJSON; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + НастройкиТранспорта = Новый Структура; + + НастройкиТранспорта.Вставить("КаталогОбменаИнформацией", НастройкиТранспортаJSON.DataExchangeDirectory); + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", НастройкиТранспортаJSON.CompressOutgoingMessageFile); + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", НастройкиТранспортаJSON.ArchivePasswordExchangeMessages); + НастройкиТранспорта.Вставить("Транслитерация", НастройкиТранспортаJSON.TransliterateExchangeMessageFileNames); + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат НастройкиПодключения.НастройкиТранспорта.КаталогОбменаИнформацией; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index 46433feef..c3053dab5 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -9,158 +9,193 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных -Перем СтрокаСообщенияОбОшибке Экспорт; -Перем СтрокаСообщенияОбОшибкеЖР Экспорт; -Перем СообщенияОшибок; // Соответствие с сообщениями ошибок обработки. -Перем ИмяОбъекта; // имя объекта метаданных +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; -Перем ВременныйФайлСообщенияОбмена; // временный файл сообщения обмена для выгрузки/загрузки данных. -Перем ВременныйКаталогСообщенийОбмена; // Временный каталог для сообщений обмена. -Перем КаталогОбменаИнформацией; // Сетевой каталог для обмена сообщениями. +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; -Перем ИдентификаторКаталога; #КонецОбласти -#Область СлужебныеПроцедурыИФункции - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. - -// Создает временный каталог в каталоге временных файлов пользователя операционной системы. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ВыполнитьДействияПередОбработкойСообщения() Экспорт - - ИнициализацияСообщений(); - - ИдентификаторКаталога = Неопределено; - - Возврат СоздатьВременныйКаталогСообщенийОбмена(); - -КонецФункции +#Область ПрограммныйИнтерфейс // Выполняет отправку сообщения обмена на заданный ресурс из временного каталога сообщения обмена. // // Параметры: -// Нет. +// СообщениеДляСопоставленияДанных - Булево - если сообщение является сообщением для сопоставления // // Возвращаемое значение: // Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. // -Функция ОтправитьСообщение() Экспорт +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт Результат = Истина; - - ИнициализацияСообщений(); - + Попытка - - Если ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений Тогда - - Результат = ОтправитьСообщениеОбмена(); - - КонецЕсли; - + Результат = ОтправитьСообщение(); Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Результат = Ложь; + КонецПопытки; Возврат Результат; - + КонецФункции // Получает сообщение обмена с заданного ресурса во временный каталог сообщения обмена. // +// Возвращаемое значение: +// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. +// +Функция ПолучитьДанные() Экспорт + + Попытка + + Для Каждого Шаблон Из ШаблоныИменДляПолученияСообщения Цикл + + Результат = ПолучитьСообщение(Шаблон); + + Если Результат Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Возвращает параметры базы-корреспондента. Актуально при прямом подключении к корреспонденту. +// // Параметры: -// ПроверкаНаличия - Булево +// НастройкиПодключения - Структура - настройки подключения к базе корреспонденту. +// см. ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы +// +// Возвращаемое значение: +// Структура - см. ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента. +// +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// Выполняется перед отправкой и выгрузкой данных. +// +// Параметры: +// СообщениеДляСопоставленияДанных - Булево - если сообщение является сообщением для сопоставления // // Возвращаемое значение: // Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. // -Функция ПолучитьСообщение(ПроверкаНаличия = Ложь) Экспорт - - ИнициализацияСообщений(); - - Попытка - Результат = ПолучитьСообщениеОбмена(ПроверкаНаличия); - Исключение - Результат = Ложь; - КонецПопытки; - - Возврат Результат; -КонецФункции - -// Удаляет временный каталог сообщений обмена после выполнения выгрузки или загрузки данных. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина -// -Функция ВыполнитьДействияПослеОбработкиСообщения() Экспорт - - ИнициализацияСообщений(); - - Если ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений Тогда - - УдалитьВременныйКаталогСообщенийОбмена(); - - КонецЕсли; +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт Возврат Истина; + КонецФункции -// Выполняет инициализацию свойств обработки начальными значениями и константами. -// -// Параметры: -// Нет. +// Сохраняет настройки синхронизации в базе-корреспонденте. Актуально при прямом подключении к корреспонденту. // -Процедура Инициализация() Экспорт +// Параметры: +// НастройкиПодключения - Структура - настройки подключения к базе корреспонденту. +// см. ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы +// +// Возвращаемое значение: +// Булево - Истина - при удачном сохранении параметров в корреспонденте, Ложь - произошла ошибка +// +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; - КаталогОбменаИнформацией = Новый Файл(FILEКаталогОбменаИнформацией); - -КонецПроцедуры +КонецФункции -// Выполняет проверку возможности установки подключения к заданному ресурсу. -// -// Параметры: -// Нет. +// Проверяет, требуется ли вводить дополнительные данные аутентификации перед началом синхронизации. +// см. ОбработкаОбъект.ТранспортСообщенийОбменаWS.ТребуетсяАутентификация // -// Возвращаемое значение: -// Булево - Истина - подключение может быть установлено; Ложь - нет. +// Возвращаемое значение: +// Булево - Истина - аутентификация требуется, +// в этом случае необходимо задать форму аутентификации в процедуре модуля менеджера ПараметрыТранспорта), +// Ложь - аутентификация не требуется // +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции + +// Событие возникает при удалении синхронизации с параметром "Удалить настройку так же в корреспонденте". +// +// Возвращаемое значение: +// Булево - удалось выполнить удаление, Ложь - произошла ошибка. +// +Функция УдалитьНастройкуСинхронизацииВКорреспонденте() Экспорт + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Функция ПодключениеУстановлено() Экспорт - ИнициализацияСообщений(); + Каталог = Новый Файл(КаталогОбменаИнформацией); - Если ПустаяСтрока(FILEКаталогОбменаИнформацией) Тогда + Если ПустаяСтрока(КаталогОбменаИнформацией) Тогда + + СообщениеОбОшибке = НСтр("ru = 'Ошибка подключения: Не указан каталог обмена информацией.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); - ПолучитьСообщениеОбОшибке(1); Возврат Ложь; - ИначеЕсли Не КаталогОбменаИнформацией.Существует() Тогда + ИначеЕсли Не Каталог.Существует() Тогда + + СообщениеОбОшибке = НСтр("ru = 'Ошибка подключения: Каталог обмена информацией не существует.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); - ПолучитьСообщениеОбОшибке(2); Возврат Ложь; + КонецЕсли; ИмяФайлаПроверки = ОбменДаннымиСервер.ИмяВременногоФайлаПроверкиПодключения(); Если Не СоздатьФайлПроверки(ИмяФайлаПроверки) Тогда - ПолучитьСообщениеОбОшибке(8); + СообщениеОбОшибке = НСтр("ru = 'Ошибка записи файла в каталог обмена информацией. Проверьте права пользователя на доступ к каталогу.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + Возврат Ложь; ИначеЕсли Не УдалитьФайлПроверки(ИмяФайлаПроверки) Тогда - ПолучитьСообщениеОбОшибке(9); + СообщениеОбОшибке = НСтр("ru = 'Ошибка удаления файла из каталога обмена информацией. Проверьте права пользователя на доступ к каталогу.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + Возврат Ложь; КонецЕсли; @@ -169,206 +204,45 @@ КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - -// Функция-свойство: полное имя файла сообщения обмена. -// -// Возвращаемое значение: -// Строка - полное имя файла сообщения обмена. -// -Функция ИмяФайлаСообщенияОбмена() Экспорт - - Имя = ""; - - Если ТипЗнч(ВременныйФайлСообщенияОбмена) = Тип("Файл") Тогда - - Имя = ВременныйФайлСообщенияОбмена.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -// Функция-свойство: полное имя каталога сообщения обмена. -// -// Возвращаемое значение: -// Строка - полное имя каталога сообщения обмена. -// -Функция ИмяКаталогаСообщенияОбмена() Экспорт - - Имя = ""; - - Если ТипЗнч(ВременныйКаталогСообщенийОбмена) = Тип("Файл") Тогда - - Имя = ВременныйКаталогСообщенийОбмена.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -// Функция-свойство: полное имя каталога обмена информацией (сетевой или локальный ресурс). -// -// Возвращаемое значение: -// Строка - полное имя каталога обмена информацией (сетевой или локальный ресурс). -// -Функция ИмяКаталогаОбменаИнформацией() Экспорт - - Имя = ""; - - Если ТипЗнч(КаталогОбменаИнформацией) = Тип("Файл") Тогда - - Имя = КаталогОбменаИнформацией.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -// Функция-свойство: время изменения файла сообщения обмена. -// -// Возвращаемое значение: -// Дата - время изменения файла сообщения обмена. -// -Функция ДатаФайлаСообщенияОбмена() Экспорт - - Результат = Неопределено; - - Если ТипЗнч(ВременныйФайлСообщенияОбмена) = Тип("Файл") Тогда - - Если ВременныйФайлСообщенияОбмена.Существует() Тогда - - Результат = ВременныйФайлСообщенияОбмена.ПолучитьВремяИзменения(); - - КонецЕсли; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - -Функция СоздатьВременныйКаталогСообщенийОбмена() - - Если ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений Тогда - - // Создаем временный каталог для сообщений обмена. - Попытка - ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(ИдентификаторКаталога); - Исключение - ПолучитьСообщениеОбОшибке(6); - ДополнитьСообщениеОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Ложь; - КонецПопытки; - - ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); - - Иначе - - ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяКаталогаОбменаИнформацией()); - - КонецЕсли; - - ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".xml"); - - ВременныйФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщения); - - Возврат Истина; -КонецФункции - -Функция УдалитьВременныйКаталогСообщенийОбмена() - - Попытка - Если Не ПустаяСтрока(ИмяКаталогаСообщенияОбмена()) Тогда - УдалитьФайлы(ИмяКаталогаСообщенияОбмена()); - ВременныйКаталогСообщенийОбмена = Неопределено; - КонецЕсли; - - Если Не ИдентификаторКаталога = Неопределено Тогда - ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ИдентификаторКаталога); - ИдентификаторКаталога = Неопределено; - КонецЕсли; - Исключение - Возврат Ложь; - КонецПопытки; - - Возврат Истина; -КонецФункции - -Функция ОтправитьСообщениеОбмена() +Функция ОтправитьСообщение() Результат = Истина; - Расширение = ?(СжиматьФайлИсходящегоСообщения(), "zip", "xml"); - - ИмяФайлаИсходящегоСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаОбменаИнформацией(), ШаблонИмениФайлаСообщения + "." + Расширение); - - Если СжиматьФайлИсходящегоСообщения() Тогда + Если СжиматьФайлИсходящегоСообщения Тогда - // Получаем имя для временного файла архива. - ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".zip"); - - Попытка - - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, НСтр("ru = 'Файл сообщения обмена'")); - Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); - Архиватор.Записать(); - - Исключение + Если Не ТранспортСообщенийОбмена.ЗапаковатьСообщениеОбменаВZipФайл(ЭтотОбъект, ПарольАрхиваСообщенияОбмена) Тогда Результат = Ложь; - ПолучитьСообщениеОбОшибке(5); - ДополнитьСообщениеОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Архиватор = Неопределено; - - Если Результат Тогда - - // Копируем файл архива в каталог обмена информацией. - Если Не ВыполнитьКопированиеФайла(ИмяВременногоФайлаАрхива, ИмяФайлаИсходящегоСообщения) Тогда - Результат = Ложь; - КонецЕсли; - КонецЕсли; + Файл = Новый Файл(СообщениеОбмена); + ИмяФайлаПриемника = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогОбменаИнформацией, Файл.Имя); + Иначе - // Копируем файл сообщения в каталог обмена информацией. - Если Не ВыполнитьКопированиеФайла(ИмяФайлаСообщенияОбмена(), ИмяФайлаИсходящегоСообщения) Тогда - Результат = Ложь; - КонецЕсли; + ИмяФайлаПриемника = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогОбменаИнформацией, ИмяСообщенияДляОтправки); КонецЕсли; + // Копируем файл сообщения в каталог обмена информацией. + Если Не ВыполнитьКопированиеФайла(СообщениеОбмена, ИмяФайлаПриемника) Тогда + Результат = Ложь; + КонецЕсли; + Возврат Результат; КонецФункции -Функция ПолучитьСообщениеОбмена(ПроверкаНаличия) +Функция ПолучитьСообщение(ШаблонИмениСообщения) ТаблицаФайловСообщенийОбмена = Новый ТаблицаЗначений; ТаблицаФайловСообщенийОбмена.Колонки.Добавить("Файл", Новый ОписаниеТипов("Файл")); ТаблицаФайловСообщенийОбмена.Колонки.Добавить("ВремяИзменения"); - ШаблонИмениФайлаСообщенияДляПоиска = СтрЗаменить(ШаблонИмениФайлаСообщения, "Message", "Message*"); - МассивНайденныхФайлов = НайтиФайлы(ИмяКаталогаОбменаИнформацией(), ШаблонИмениФайлаСообщенияДляПоиска + ".*", Ложь); + МассивНайденныхФайлов = НайтиФайлы(КаталогОбменаИнформацией, ШаблонИмениСообщения, Ложь); Для Каждого ТекущийФайл Из МассивНайденныхФайлов Цикл - - // Проверяем нужное расширение. - Если ((ВРег(ТекущийФайл.Расширение) <> ".ZIP") - И (ВРег(ТекущийФайл.Расширение) <> ".XML")) Тогда - - Продолжить; - - // Проверяем что это файл, а не каталог. - ИначеЕсли НЕ ТекущийФайл.ЭтоФайл() Тогда + + Если НЕ ТекущийФайл.ЭтоФайл() Тогда Продолжить; @@ -386,86 +260,38 @@ КонецЦикла; Если ТаблицаФайловСообщенийОбмена.Количество() = 0 Тогда - - Если Не ПроверкаНаличия Тогда - ПолучитьСообщениеОбОшибке(3); - - СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаОбменаИнформацией()); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщенияДляПоиска + ".xml", ШаблонИмениФайлаСообщенияДляПоиска + ".zip"); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - КонецЕсли; + СообщениеОбОшибке = + НСтр("ru = 'В каталоге обмена информацией не был обнаружен файл сообщения с данными. + |Каталог обмена информацией: ""%1"" + |Имя файла сообщения обмена: ""%2""'"); + + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, КаталогОбменаИнформацией, ШаблонИмениСообщения); + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); Возврат Ложь; Иначе - Если ПроверкаНаличия Тогда - Возврат Истина; - КонецЕсли; - ТаблицаФайловСообщенийОбмена.Сортировать("ВремяИзменения Убыв"); // Получаем из таблицы самый "свежий" файл сообщения обмена. - ФайлВходящегоСообщения = ТаблицаФайловСообщенийОбмена[0].Файл; - ФайлЗапакован = (ВРег(ФайлВходящегоСообщения.Расширение) = ".ZIP"); - Если НЕ СтрНачинаетсяС(ФайлВходящегоСообщения.Имя, ШаблонИмениФайлаСообщения) Тогда - // Файл не полностью соответствует шаблону. Надо переназначить шаблон для корректной работы. - СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлВходящегоСообщения.Имя,Ложь); - ШаблонИмениФайлаСообщения = СтруктураИмениФайла.ИмяБезРасширения; - КонецЕсли; - - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(УзелИнформационнойБазы, ФайлВходящегоСообщения.ПолноеИмя); + Файл = ТаблицаФайловСообщенийОбмена[0].Файл; + ФайлЗапакован = (ВРег(Файл.Расширение) = ".ZIP"); Если ФайлЗапакован Тогда - // Получаем имя для временного файла архива. - ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".zip"); - - // Копируем файл архива из сетевого каталога во временный. - Если Не ВыполнитьКопированиеФайла(ФайлВходящегоСообщения.ПолноеИмя, ИмяВременногоФайлаАрхива) Тогда + Если Не ТранспортСообщенийОбмена.РаспаковатьСообщениеОбменаИзZipФайла( + ЭтотОбъект, Файл.ПолноеИмя, ПарольАрхиваСообщенияОбмена) Тогда + Возврат Ложь; - КонецЕсли; - - // Распаковываем временный файл архива. - УспешноРаспаковано = ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоФайлаАрхива, ИмяКаталогаСообщенияОбмена(), ПарольАрхиваСообщенияОбмена); - - Если Не УспешноРаспаковано Тогда - ПолучитьСообщениеОбОшибке(4); - Возврат Ложь; - КонецЕсли; - - // Проверка на существование файла сообщения. - Файл = Новый Файл(ИмяФайлаСообщенияОбмена()); - - Если Не Файл.Существует() Тогда - // Возможно, имя архива не соответствует имени файла внутри. - СтруктураИмениФайлаАрхива = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлВходящегоСообщения.Имя,Ложь); - СтруктураИмениФайлаСообщения = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаСообщенияОбмена(),Ложь); - - Если СтруктураИмениФайлаАрхива.ИмяБезРасширения <> СтруктураИмениФайлаСообщения.ИмяБезРасширения Тогда - МассивРаспакованныхФайлов = НайтиФайлы(ИмяКаталогаСообщенияОбмена(), "*.xml", Ложь); - Если МассивРаспакованныхФайлов.Количество() > 0 Тогда - РаспакованныйФайл = МассивРаспакованныхФайлов[0]; - ПереместитьФайл(РаспакованныйФайл.ПолноеИмя,ИмяФайлаСообщенияОбмена()); - Иначе - ПолучитьСообщениеОбОшибке(7); - Возврат Ложь; - КонецЕсли; - Иначе - ПолучитьСообщениеОбОшибке(7); - Возврат Ложь; - КонецЕсли; КонецЕсли; Иначе - // Просто копируем файл входящего сообщения из каталога обмена в каталог временных файлов. - Если ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений И Не ВыполнитьКопированиеФайла(ФайлВходящегоСообщения.ПолноеИмя, ИмяФайлаСообщенияОбмена()) Тогда + Если Не ВыполнитьКопированиеФайла(Файл.ПолноеИмя, СообщениеОбмена) Тогда Возврат Ложь; @@ -476,6 +302,7 @@ КонецЕсли; Возврат Истина; + КонецФункции Функция СоздатьФайлПроверки(ИмяФайлаПроверки) @@ -485,12 +312,15 @@ Попытка - ТекстовыйДокумент.Записать(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаОбменаИнформацией(), ИмяФайлаПроверки)); + ТекстовыйДокумент.Записать(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогОбменаИнформацией, ИмяФайлаПроверки)); Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + Возврат Ложь; + КонецПопытки; Возврат Истина; @@ -500,12 +330,15 @@ Попытка - УдалитьФайлы(ИмяКаталогаОбменаИнформацией(), ИмяФайлаПроверки); + УдалитьФайлы(КаталогОбменаИнформацией, ИмяФайлаПроверки); Исключение - ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Ошибка,,, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + Возврат Ложь; + КонецПопытки; Возврат Истина; @@ -520,13 +353,12 @@ Исключение - СтрокаСообщения = НСтр("ru = 'Ошибка при копировании файла из %1 в %2. Описание ошибки: %3'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - ИмяФайлаИсточника, - ИмяФайлаПриемника, - ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - УстановитьСтрокуСообщенияОбОшибке(СтрокаСообщения); + СообщениеОбОшибке = НСтр("ru = 'Ошибка при копировании файла из %1 в %2.'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ИмяФайлаИсточника, ИмяФайлаПриемника); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); Возврат Ложь @@ -536,77 +368,12 @@ КонецФункции -Процедура ПолучитьСообщениеОбОшибке(НомерСообщения) - - УстановитьСтрокуСообщенияОбОшибке(СообщенияОшибок[НомерСообщения]) - -КонецПроцедуры - -Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) - - Если Сообщение = Неопределено Тогда - Сообщение = НСтр("ru = 'Внутренняя ошибка'"); - КонецЕсли; - - СтрокаСообщенияОбОшибке = Сообщение; - СтрокаСообщенияОбОшибкеЖР = ИмяОбъекта + ": " + Сообщение; - -КонецПроцедуры - -Процедура ДополнитьСообщениеОбОшибке(Сообщение) - - СтрокаСообщенияОбОшибкеЖР = СтрокаСообщенияОбОшибкеЖР + Символы.ПС + Сообщение; - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - -Функция СжиматьФайлИсходящегоСообщения() - - Возврат FILEСжиматьФайлИсходящегоСообщения; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Инициализация - -Процедура ИнициализацияСообщений() - - СтрокаСообщенияОбОшибке = ""; - СтрокаСообщенияОбОшибкеЖР = ""; - -КонецПроцедуры - -Процедура ИнициализацияСообщенийОшибок() - - СообщенияОшибок = Новый Соответствие; - СообщенияОшибок.Вставить(1, НСтр("ru = 'Ошибка подключения: Не указан каталог обмена информацией.'")); - СообщенияОшибок.Вставить(2, НСтр("ru = 'Ошибка подключения: Каталог обмена информацией не существует.'")); - - СообщенияОшибок.Вставить(3, НСтр("ru = 'В каталоге обмена информацией не был обнаружен файл сообщения с данными.'")); - СообщенияОшибок.Вставить(4, НСтр("ru = 'Ошибка при распаковке сжатого файла сообщения.'")); - СообщенияОшибок.Вставить(5, НСтр("ru = 'Ошибка при сжатии файла сообщения обмена.'")); - СообщенияОшибок.Вставить(6, НСтр("ru = 'Ошибка при создании временного каталога'")); - СообщенияОшибок.Вставить(7, НСтр("ru = 'Архив не содержит файл сообщения обмена'")); - - СообщенияОшибок.Вставить(8, НСтр("ru = 'Ошибка записи файла в каталог обмена информацией. Проверьте права пользователя на доступ к каталогу.'")); - СообщенияОшибок.Вставить(9, НСтр("ru = 'Ошибка удаления файла из каталога обмена информацией. Проверьте права пользователя на доступ к каталогу.'")); - -КонецПроцедуры - #КонецОбласти #Область Инициализация -ИнициализацияСообщений(); -ИнициализацияСообщенийОшибок(); - -ВременныйКаталогСообщенийОбмена = Неопределено; -ВременныйФайлСообщенияОбмена = Неопределено; - -ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); -ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); +ВременныйКаталог = Неопределено; +СообщениеОбмена = Неопределено; #КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo index e421098b7..da180c8a8 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ТранспортСообщенийОбменаFILE.mdo @@ -10,8 +10,14 @@ Транспорт сообщений обмена через общий сетевой ресурс DataProcessor.ТранспортСообщенийОбменаFILE.Form.Форма + true + + + ru + + - FILEКаталогОбменаИнформацией + КаталогОбменаИнформацией ru Каталог обмена информацией @@ -24,7 +30,7 @@ - FILEСжиматьФайлИсходящегоСообщения + СжиматьФайлИсходящегоСообщения ru Сжимать файл исходящего сообщения @@ -48,44 +54,18 @@ - - ШаблонИмениФайлаСообщения + + Транслитерация ru - Шаблон имени файла сообщения + Транслитерация - - String - - - - - - - ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений - - ru - Использовать временный каталог для отправки и приема сообщений - - Истина - Отправка и получение сообщений обмена будет выполняться через временный каталог; Ложь – отправка и получение будет выполняться напрямую через каталог обмена Boolean - - УзелИнформационнойБазы - - ru - Узел информационной базы - - - ExchangePlanRef - - - - Форма @@ -95,4 +75,13 @@ PersonalComputer MobileDevice + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..521b6d60b --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/ФормаНастройки/Form.form @@ -0,0 +1,732 @@ + + + + ГруппаСерверПорт + 24 + + СоединениеПуть + 26 + true + true + + true + + + Объект.Путь + + + СоединениеПутьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + СоединениеПутьКонтекстноеМеню + 27 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + СоединениеПорт + 29 + true + true + + true + + + Объект.Порт + + + СоединениеПортРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СоединениеПортКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + true + true + true + + ru + ЧГ=0 + + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Сервер порт</value> + + + ГруппаСерверПортExtendedTooltip + 25 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + ГруппаПользовательПароль + 32 + + СоединениеПользователь + 34 + true + true + + true + + + Объект.Пользователь + + + СоединениеПользовательРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + СоединениеПользовательКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + СоединениеПароль + 37 + true + true + + true + + + Объект.Пароль + + + СоединениеПарольРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + СоединениеПарольКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Пользователь пароль</value> + + + ГруппаПользовательПарольExtendedTooltip + 33 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + + РазмерФайла + 40 + + СоединениеМаксимальныйДопустимыйРазмерСообщения + 42 + + <key>ru</key> + <value>Максимальный размер сообщения обмена, КБайт</value> + + true + true + + true + + + Объект.МаксимальныйДопустимыйРазмерСообщения + + + СоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + СоединениеМаксимальныйДопустимыйРазмерСообщенияКонтекстноеМеню + 43 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Декорация1 + 45 + + <key>ru</key> + <value>КБ (0 – нет ограничений)</value> + + true + true + + true + + + Декорация1ExtendedTooltip + 47 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 46 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Размер файла</value> + + + РазмерФайлаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + СоединениеПассивноеСоединение + 48 + true + true + + true + + + Объект.ПассивноеСоединение + + Right + + СоединениеПассивноеСоединениеРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СоединениеПассивноеСоединениеКонтекстноеМеню + 49 + true + + CheckBoxField + Enter + true + Left + true + + + + ПараметрыДоступаВИнтернет + 51 + + <key>ru</key> + <value>Параметры доступа в Интернет</value> + + true + true + + true + + + ПараметрыДоступаВИнтернетРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПараметрыДоступаВИнтернет + Normal + Auto + true + true + UserCmds + Auto + + + Архив + 4 + + СжиматьФайлИсходящегоСообщения + 6 + true + true + + true + + + Объект.СжиматьФайлИсходящегоСообщения + + Right + + OnChange + СжиматьФайлИсходящегоСообщенияПриИзменении + + + СжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 7 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена + 9 + true + true + + true + + + Объект.ПарольАрхиваСообщенияОбмена + + Top + + ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбменаКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 20 + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Архив</value> + + true + + АрхивРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + Транслитерация + 53 + + <key>ru</key> + <value>Транслитерация имени файла сообщения обмена</value> + + true + true + + true + + + Объект.Транслитерация + + Right + + ТранслитерацияРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ТранслитерацияКонтекстноеМеню + 54 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаFTP + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + ПараметрыДоступаВИнтернет + + <key>ru</key> + <value>Параметры доступа в Интернет</value> + + 5 + + ru + Параметры доступа в Интернет + + + true + + + + ПараметрыДоступаВИнтернет + + + DontUse + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..719a66edb --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,155 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + + НастройкиТранспорта = Неопределено; + Параметры.Свойство("НастройкиТранспорта", НастройкиТранспорта); + Если Не ЗначениеЗаполнено(НастройкиТранспорта) Тогда + Объект.Порт = 21; + КонецЕсли; + + УстановитьВидимостьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СжиматьФайлИсходящегоСообщенияПриИзменении(Элемент) + УстановитьВидимостьДоступность(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыДоступаВИнтернет(Команда) + + ТранспортСообщенийОбменаКлиент.ОткрытьФормуПараметровПроксиСервера(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + Если Не ПустаяСтрока(Объект.Путь) Тогда + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Объект.Путь); + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, Объект.Порт)); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + КонецЕсли; + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Заполним пароли. + ТранспортСообщенийОбмена.ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(ЭтаФорма, ОбработкаОбъект); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьДоступность() + Элементы.ПарольАрхиваСообщенияОбмена.Доступность = Объект.СжиматьФайлИсходящегоСообщения; +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Help/ru.html new file mode 100644 index 000000000..165a1a802 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/Help/ru.html @@ -0,0 +1,11 @@ + +

                  В случае если к другому приложению нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), рекомендуется использовать другие каналы связи, например FTP-сервер. При этом приложения, между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. Такой вариант подходит не только для синхронизации данных с приложениями, расположенными в других сетях (офисах), но и для приложений в одной сети.

                  +

                  При настройке синхронизации будет сформирован файл(ы) с настройками подключения (*.xml и *.json). В приложении-корреспонденте при выборе типа подключения, необходимо выбрать опцию Продолжение настройки, выбрать необходимый тип подключения и загрузить файл с настройками подключения

                  +
                  • Введите Путь к каталогу и Порт компьютера для передачи данных.
                  • +
                  • Введите имя Пользователя (логин) и Пароль.
                  • +
                  • Укажите Максимальный размер файла, для того чтобы ограничить объем пересылаемого сообщения.
                  • +
                  • При необходимости включите флажок Пассивное соединение.
                  • +
                  • Перейдите по ссылке Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.
                  • +
                  • Включите флажок Сжимать отправляемые данные в архив , для того чтобы ограничить размер отправляемого сообщения.
                  • +
                  • Введите Пароль архива для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложений.
                  • +

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ManagerModule.bsl index e69de29bb..396458da4 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ManagerModule.bsl @@ -0,0 +1,98 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо указать каталог, расположенный на FTP-сервере, доступном из обменивающихся приложений.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'FTP-сервер'"); + Параметры.ИдентификаторТранспорта = "FTP"; + Параметры.Описание = Описание; + Параметры.Картинка = БиблиотекаКартинок.ТранспортFTP; + + Реквизиты = Новый Массив; + Реквизиты.Добавить("ПарольАрхиваСообщенияОбмена"); + Реквизиты.Добавить("Пароль"); + + Параметры.РеквизитыДляБезопасногоХранилища = Реквизиты; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияВXML_1_2(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияИзXML_1_2(ТекстXML, "FTP"); + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + НастройкиТранспортаJSON = Новый Структура; + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.Пароль); + + НастройкиТранспортаJSON.Вставить("CompressOutgoingMessageFile", НастройкиТранспорта.СжиматьФайлИсходящегоСообщения); + НастройкиТранспортаJSON.Вставить("MaxMessageSize", НастройкиТранспорта.МаксимальныйДопустимыйРазмерСообщения); + НастройкиТранспортаJSON.Вставить("Password", Пароль); + НастройкиТранспортаJSON.Вставить("PassiveConnection", НастройкиТранспорта.ПассивноеСоединение); + НастройкиТранспортаJSON.Вставить("User", НастройкиТранспорта.Пользователь); + НастройкиТранспортаJSON.Вставить("Port", НастройкиТранспорта.Порт); + НастройкиТранспортаJSON.Вставить("Path", НастройкиТранспорта.Путь); + НастройкиТранспортаJSON.Вставить("ArchivePasswordExchangeMessages", ПарольАрхиваСообщенияОбмена); + НастройкиТранспортаJSON.Вставить("TransliterateExchangeMessageFileNames", НастройкиТранспорта.Транслитерация); + + Возврат НастройкиТранспортаJSON; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + НастройкиТранспорта = Новый Структура; + + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", НастройкиТранспортаJSON.CompressOutgoingMessageFile); + НастройкиТранспорта.Вставить("МаксимальныйДопустимыйРазмерСообщения", НастройкиТранспортаJSON.MaxMessageSize); + НастройкиТранспорта.Вставить("Пароль", НастройкиТранспортаJSON.Password); + НастройкиТранспорта.Вставить("ПассивноеСоединение", НастройкиТранспортаJSON.PassiveConnection); + НастройкиТранспорта.Вставить("Пользователь", НастройкиТранспортаJSON.User); + НастройкиТранспорта.Вставить("Порт", НастройкиТранспортаJSON.Port); + НастройкиТранспорта.Вставить("Путь", НастройкиТранспортаJSON.Path); + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", НастройкиТранспортаJSON.ArchivePasswordExchangeMessages); + НастройкиТранспорта.Вставить("Транслитерация", НастройкиТранспортаJSON.TransliterateExchangeMessageFileNames); + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 91b3daeb1..fb60a21ce 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -9,131 +9,111 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных -Перем СтрокаСообщенияОбОшибке Экспорт; -Перем СтрокаСообщенияОбОшибкеЖР Экспорт; -Перем СообщенияОшибок; // Соответствие с предопределенными сообщениями ошибок обработки. -Перем ИмяОбъекта; // имя объекта метаданных -Перем ИмяFTPСервера; // Адрес FTP сервера - имя или ip адрес. -Перем КаталогНаFTPСервере;// Каталог на сервере, для хранения/получения сообщений обмена. +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; -Перем ВременныйФайлСообщенияОбмена; // Временный файл сообщения обмена для выгрузки/загрузки данных. -Перем ВременныйКаталогСообщенийОбмена; // Временный каталог для сообщений обмена. +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; +// Для FTP Перем ТаймаутОтправкиПолученияДанных; // Таймаут, используемый для FTP соединения при отправке и получении данных. Перем ТаймаутПроверкиСоединения; // Таймаут, используемый для проверки соединения с FTP-сервером. +Перем ИмяFTPСервера; // Адрес FTP сервера - имя или ip адрес. +Перем КаталогНаFTPСервере; // Каталог на сервере, для хранения/получения сообщений обмена. -Перем ИдентификаторКаталога; #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции. - -// Создает временный каталог в каталоге временных файлов пользователя операционной системы. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ВыполнитьДействияПередОбработкойСообщения() Экспорт - - ИнициализацияСообщений(); - - ИдентификаторКаталога = Неопределено; - - Возврат СоздатьВременныйКаталогСообщенийОбмена(); - -КонецФункции - -// Выполняет отправку сообщения обмена на заданный ресурс из временного каталога сообщения обмена. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ОтправитьСообщение() Экспорт - - ИнициализацияСообщений(); +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт Попытка - Результат = ОтправитьСообщениеОбмена(); + Результат = ОтправитьСообщение(); Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + + Для Каждого Шаблон Из ШаблоныИменДляПолученияСообщения Цикл + + Результат = ПолучитьСообщение(Шаблон); + + Если Результат Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + КонецПопытки; Возврат Результат; КонецФункции -// Получает сообщение обмена с заданного ресурса во временный каталог сообщения обмена. -// -// Параметры: -// ПроверкаНаличия - Булево - Истина, если необходимо только проверить наличие сообщений обмена, без их загрузки. -// -// Возвращаемое значение: -// Булево - Истина - удалось выполнить функцию, Ложь - произошла ошибка. -// -Функция ПолучитьСообщение(ПроверкаНаличия = Ложь) Экспорт +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт - ИнициализацияСообщений(); - - Попытка - Результат = ПолучитьСообщениеОбмена(ПроверкаНаличия); - Исключение - Результат = Ложь; - КонецПопытки; + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; Возврат Результат; КонецФункции -// Удаляет временный каталог сообщений обмена после выполнения выгрузки или загрузки данных. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина -// -Функция ВыполнитьДействияПослеОбработкиСообщения() Экспорт - - ИнициализацияСообщений(); - - УдалитьВременныйКаталогСообщенийОбмена(); +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт Возврат Истина; КонецФункции -// Выполняет инициализацию свойств обработки начальными значениями и константами. -// -// Параметры: -// Нет. -// -Процедура Инициализация() Экспорт +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; - ИнициализацияСообщений(); +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт - ИмяСервераИКаталогНаСервере = РазделитьFTPРесурсНаСерверИКаталог(СокрЛП(FTPСоединениеПуть)); - ИмяFTPСервера = ИмяСервераИКаталогНаСервере.ИмяСервера; - КаталогНаFTPСервере = ИмяСервераИКаталогНаСервере.ИмяКаталога; + Возврат Ложь; -КонецПроцедуры +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции -// Выполняет проверку возможности установки подключения к заданному ресурсу. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - подключение может быть установлено; Ложь - нет. -// Функция ПодключениеУстановлено() Экспорт // Возвращаемое значение функции. @@ -143,13 +123,10 @@ Возврат Результат; КонецЕсли; - ИнициализацияСообщений(); - - Если ПустаяСтрока(FTPСоединениеПуть) Тогда - - ПолучитьСообщениеОбОшибке(101); + Если ПустаяСтрока(Путь) Тогда + СообщениеОбОшибке = НСтр("ru = 'Не задан путь на сервере.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); Возврат Ложь; - КонецЕсли; // Создаем файл во временном каталоге. @@ -165,191 +142,54 @@ // Удаляем файл на внешнем ресурсе. Если Результат Тогда - Результат = ВыполнитьУдалениеФайлаНаFTPСервере(ИмяФайлаНаСторонеПриемника, Истина); - КонецЕсли; // Удаляем файл из временного каталога. УдалитьФайлы(ИмяВременногоФайлаПроверкиПодключения); - Возврат Результат; -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - -// Функция-свойство: время изменения файла сообщения обмена. -// -// Возвращаемое значение: -// Дата - время изменения файла сообщения обмена. -// -Функция ДатаФайлаСообщенияОбмена() Экспорт - - Результат = Неопределено; - - Если ТипЗнч(ВременныйФайлСообщенияОбмена) = Тип("Файл") Тогда - - Если ВременныйФайлСообщенияОбмена.Существует() Тогда - - Результат = ВременныйФайлСообщенияОбмена.ПолучитьВремяИзменения(); - - КонецЕсли; - - КонецЕсли; - Возврат Результат; КонецФункции -// Функция-свойство: полное имя файла сообщения обмена. -// -// Возвращаемое значение: -// Строка - полное имя файла сообщения обмена. -// -Функция ИмяФайлаСообщенияОбмена() Экспорт - - Имя = ""; - - Если ТипЗнч(ВременныйФайлСообщенияОбмена) = Тип("Файл") Тогда - - Имя = ВременныйФайлСообщенияОбмена.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -// Функция-свойство: полное имя каталога сообщения обмена. -// -// Возвращаемое значение: -// Строка - полное имя каталога сообщения обмена. -// -Функция ИмяКаталогаСообщенияОбмена() Экспорт - - Имя = ""; - - Если ТипЗнч(ВременныйКаталогСообщенийОбмена) = Тип("Файл") Тогда - - Имя = ВременныйКаталогСообщенийОбмена.ПолноеИмя; - - КонецЕсли; - - Возврат Имя; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - -Функция СоздатьВременныйКаталогСообщенийОбмена() - - // Создаем временный каталог для сообщений обмена. - Попытка - ИмяВременногоКаталога = ОбменДаннымиСервер.СоздатьВременныйКаталогСообщенийОбмена(ИдентификаторКаталога); - Исключение - ПолучитьСообщениеОбОшибке(4); - ДополнитьСообщениеОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - Возврат Ложь; - КонецПопытки; - - ВременныйКаталогСообщенийОбмена = Новый Файл(ИмяВременногоКаталога); - - ИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".xml"); - - ВременныйФайлСообщенияОбмена = Новый Файл(ИмяФайлаСообщения); - - Возврат Истина; -КонецФункции - -Функция УдалитьВременныйКаталогСообщенийОбмена() - - Попытка - Если Не ПустаяСтрока(ИмяКаталогаСообщенияОбмена()) Тогда - УдалитьФайлы(ИмяКаталогаСообщенияОбмена()); - ВременныйКаталогСообщенийОбмена = Неопределено; - КонецЕсли; - - Если Не ИдентификаторКаталога = Неопределено Тогда - ОбменДаннымиСервер.ПолучитьФайлИзХранилища(ИдентификаторКаталога); - ИдентификаторКаталога = Неопределено; - КонецЕсли; - Исключение - Возврат Ложь; - КонецПопытки; - - Возврат Истина; - -КонецФункции - -Функция ОтправитьСообщениеОбмена() +Функция ОтправитьСообщение() Результат = Истина; - Расширение = ?(СжиматьФайлИсходящегоСообщения(), ".zip", ".xml"); - - ИмяФайлаИсходящегоСообщения = ШаблонИмениФайлаСообщения + Расширение; - - Если СжиматьФайлИсходящегоСообщения() Тогда + Если СжиматьФайлИсходящегоСообщения Тогда - // Получаем имя для временного файла архива. - ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".zip"); - - Попытка - - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, НСтр("ru = 'Файл сообщения обмена'")); - Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); - Архиватор.Записать(); - - Исключение - + Если Не ТранспортСообщенийОбмена.ЗапаковатьСообщениеОбменаВZipФайл(ЭтотОбъект, ПарольАрхиваСообщенияОбмена) Тогда Результат = Ложь; - ПолучитьСообщениеОбОшибке(3); - ДополнитьСообщениеОбОшибке(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - Архиватор = Неопределено; - - Если Результат Тогда - - // Выполняем проверку на максимально допустимый размер сообщения обмена. - Если ОбменДаннымиСервер.РазмерСообщенияОбменаПревышаетДопустимый(ИмяВременногоФайлаАрхива, МаксимальныйДопустимыйРазмерСообщения()) Тогда - ПолучитьСообщениеОбОшибке(108); - Результат = Ложь; - КонецЕсли; - - КонецЕсли; - - Если Результат Тогда - - // Копируем файл архива на FTP сервер в каталог обмена информацией. - Если Не ВыполнитьКопированиеФайлаНаFTPСервер(ИмяВременногоФайлаАрхива, ИмяФайлаИсходящегоСообщения, ТаймаутОтправкиПолученияДанных) Тогда - Результат = Ложь; - КонецЕсли; - КонецЕсли; + + Файл = Новый Файл(СообщениеОбмена); + ИмяФайлаПриемника = Файл.Имя; Иначе - Если Результат Тогда + ИмяФайлаПриемника = ИмяСообщенияДляОтправки; + + КонецЕсли; + + Если Результат Тогда + + // Выполняем проверку на максимально допустимый размер сообщения обмена. + Если ОбменДаннымиСервер.РазмерСообщенияОбменаПревышаетДопустимый(СообщениеОбмена, МаксимальныйДопустимыйРазмерСообщения) Тогда - // Выполняем проверку на максимально допустимый размер сообщения обмена. - Если ОбменДаннымиСервер.РазмерСообщенияОбменаПревышаетДопустимый(ИмяФайлаСообщенияОбмена(), МаксимальныйДопустимыйРазмерСообщения()) Тогда - ПолучитьСообщениеОбОшибке(108); - Результат = Ложь; - КонецЕсли; + СообщениеОбОшибке = НСтр("ru = 'Превышен допустимый размер сообщения обмена.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; КонецЕсли; - Если Результат Тогда - - // Копируем файл архива на FTP сервер в каталог обмена информацией. - Если Не ВыполнитьКопированиеФайлаНаFTPСервер(ИмяФайлаСообщенияОбмена(), ИмяФайлаИсходящегоСообщения, ТаймаутОтправкиПолученияДанных) Тогда - Результат = Ложь; - КонецЕсли; - + КонецЕсли; + + Если Результат Тогда + + // Копируем файл архива на FTP сервер в каталог обмена информацией. + Если Не ВыполнитьКопированиеФайлаНаFTPСервер(СообщениеОбмена, ИмяФайлаПриемника, ТаймаутОтправкиПолученияДанных) Тогда + Результат = Ложь; КонецЕсли; КонецЕсли; @@ -358,7 +198,7 @@ КонецФункции -Функция ПолучитьСообщениеОбмена(ПроверкаНаличия) +Функция ПолучитьСообщение(ШаблонИмениСообщения) ТаблицаФайловСообщенийОбмена = Новый ТаблицаЗначений; ТаблицаФайловСообщенийОбмена.Колонки.Добавить("Файл"); @@ -367,32 +207,34 @@ Попытка FTPСоединение = ПолучитьFTPСоединение(ТаймаутОтправкиПолученияДанных); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(102); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка инициализации подключения к FTP-серверу.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + Возврат Ложь; + КонецПопытки; - ШаблонИмениФайлаСообщенияДляПоиска = СтрЗаменить(ШаблонИмениФайлаСообщения, "Message", "Message*"); - + Попытка - МассивНайденныхФайлов = FTPСоединение.НайтиФайлы(КаталогНаFTPСервере, ШаблонИмениФайлаСообщенияДляПоиска + ".*", Ложь); + МассивНайденныхФайлов = FTPСоединение.НайтиФайлы(КаталогНаFTPСервере, ШаблонИмениСообщения, Ложь); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(104); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка инициализации подключения к FTP-серверу.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + Возврат Ложь; + КонецПопытки; Для Каждого ТекущийФайл Из МассивНайденныхФайлов Цикл - // Проверяем нужное расширение. - Если ((ВРег(ТекущийФайл.Расширение) <> ".ZIP") - И (ВРег(ТекущийФайл.Расширение) <> ".XML")) Тогда - - Продолжить; - - // Проверяем что это файл, а не каталог. - ИначеЕсли НЕ ТекущийФайл.ЭтоФайл() Тогда + Если НЕ ТекущийФайл.ЭтоФайл() Тогда Продолжить; @@ -412,90 +254,67 @@ Если ТаблицаФайловСообщенийОбмена.Количество() = 0 Тогда - Если Не ПроверкаНаличия Тогда - ПолучитьСообщениеОбОшибке(1); + СообщениеОбОшибке = НСтр("ru = 'В каталоге обмена информацией не был обнаружен файл сообщения с данными. + |Каталог обмена информацией на сервере: ""%1"" + |Имя файла сообщения обмена: ""%2""'"); - СтрокаСообщения = НСтр("ru = 'Каталог обмена информацией на сервере: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КаталогНаFTPСервере); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - - СтрокаСообщения = НСтр("ru = 'Имя файла сообщения обмена: ""%1"" или ""%2""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ШаблонИмениФайлаСообщения + ".xml", ШаблонИмениФайлаСообщения + ".zip"); - ДополнитьСообщениеОбОшибке(СтрокаСообщения); - КонецЕсли; + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, КаталогНаFTPСервере, ШаблонИмениСообщения); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); Возврат Ложь; Иначе - Если ПроверкаНаличия Тогда - Возврат Истина; - КонецЕсли; - ТаблицаФайловСообщенийОбмена.Сортировать("ВремяИзменения Убыв"); // Получаем из таблицы самый "свежий" файл сообщения обмена. - ФайлВходящегоСообщения = ТаблицаФайловСообщенийОбмена[0].Файл; - - ФайлЗапакован = (ВРег(ФайлВходящегоСообщения.Расширение) = ".ZIP"); - - РегистрыСведений.АрхивСообщенийОбменов.ПоместитьСообщениеВАрхив(УзелИнформационнойБазы, ФайлВходящегоСообщения.ПолноеИмя); - + Файл = ТаблицаФайловСообщенийОбмена[0].Файл; + ФайлЗапакован = (ВРег(Файл.Расширение) = ".ZIP"); + Если ФайлЗапакован Тогда - // Получаем имя для временного файла архива. - ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ИмяКаталогаСообщенияОбмена(), ШаблонИмениФайлаСообщения + ".zip"); - - Попытка - FTPСоединение.Получить(ФайлВходящегоСообщения.ПолноеИмя, ИмяВременногоФайлаАрхива); - Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(105); - ДополнитьСообщениеОбОшибке(ТекстОшибки); - Возврат Ложь; - КонецПопытки; - - // Распаковываем временный файл архива. - УспешноРаспаковано = ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяВременногоФайлаАрхива, ИмяКаталогаСообщенияОбмена(), ПарольАрхиваСообщенияОбмена); - - Если Не УспешноРаспаковано Тогда - ПолучитьСообщениеОбОшибке(2); - Возврат Ложь; - КонецЕсли; - - // Проверка на существование файла сообщения. - Файл = Новый Файл(ИмяФайлаСообщенияОбмена()); - - Если Не Файл.Существует() Тогда - // Возможно, имя архива не соответствует имени файла внутри. - СтруктураИмениФайлаАрхива = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ФайлВходящегоСообщения.Имя,Ложь); - СтруктураИмениФайлаСообщения = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаСообщенияОбмена(),Ложь); + ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ВременныйКаталог, Строка(Новый УникальныйИдентификатор) + ".zip"); - Если СтруктураИмениФайлаАрхива.ИмяБезРасширения <> СтруктураИмениФайлаСообщения.ИмяБезРасширения Тогда - МассивРаспакованныхФайлов = НайтиФайлы(ИмяКаталогаСообщенияОбмена(), "*.xml", Ложь); - Если МассивРаспакованныхФайлов.Количество() > 0 Тогда - РаспакованныйФайл = МассивРаспакованныхФайлов[0]; - ПереместитьФайл(РаспакованныйФайл.ПолноеИмя,ИмяФайлаСообщенияОбмена()); - Иначе - ПолучитьСообщениеОбОшибке(7); - Возврат Ложь; - КонецЕсли; - Иначе - ПолучитьСообщениеОбОшибке(7); - Возврат Ложь; - КонецЕсли; + Попытка + FTPСоединение.Получить(Файл.ПолноеИмя, ИмяВременногоФайлаАрхива); + Исключение + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении файла с FTP-сервера.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецПопытки; + + Если Не ТранспортСообщенийОбмена.РаспаковатьСообщениеОбменаИзZipФайла( + ЭтотОбъект, ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена) Тогда + + Возврат Ложь; КонецЕсли; Иначе + Попытка - FTPСоединение.Получить(ФайлВходящегоСообщения.ПолноеИмя, ИмяФайлаСообщенияОбмена()); + + FTPСоединение.Получить(Файл.ПолноеИмя, СообщениеОбмена); + Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(105); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении файла с FTP-сервера.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецПопытки; + КонецЕсли; КонецЕсли; @@ -504,96 +323,24 @@ КонецФункции -Процедура ПолучитьСообщениеОбОшибке(НомерСообщения) - - УстановитьСтрокуСообщенияОбОшибке(СообщенияОшибок[НомерСообщения]); - -КонецПроцедуры - -Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) - - Если Сообщение = Неопределено Тогда - Сообщение = НСтр("ru = 'Внутренняя ошибка'"); - КонецЕсли; - - СтрокаСообщенияОбОшибке = Сообщение; - СтрокаСообщенияОбОшибкеЖР = ИмяОбъекта + ": " + Сообщение; - -КонецПроцедуры - -Процедура ДополнитьСообщениеОбОшибке(Сообщение) - - СтрокаСообщенияОбОшибкеЖР = СтрокаСообщенияОбОшибкеЖР + Символы.ПС + Сообщение; - -КонецПроцедуры - -// Переопределяемая функция, возвращает максимально допустимый размер -// сообщения, которое может быть отправлено. -// -Функция МаксимальныйДопустимыйРазмерСообщения() - - Возврат FTPСоединениеМаксимальныйДопустимыйРазмерСообщения; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Функции-свойства - -Функция СжиматьФайлИсходящегоСообщения() - - Возврат FTPСжиматьФайлИсходящегоСообщения; - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////// -// Инициализация - -Процедура ИнициализацияСообщений() - - СтрокаСообщенияОбОшибке = ""; - СтрокаСообщенияОбОшибкеЖР = ""; - -КонецПроцедуры - -Процедура ИнициализацияСообщенийОшибок() - - СообщенияОшибок = Новый Соответствие; - - // Общие коды ошибок - СообщенияОшибок.Вставить(001, НСтр("ru = 'В каталоге обмена информацией не был обнаружен файл сообщения с данными.'")); - СообщенияОшибок.Вставить(002, НСтр("ru = 'Ошибка при распаковке сжатого файла сообщения.'")); - СообщенияОшибок.Вставить(003, НСтр("ru = 'Ошибка при сжатии файла сообщения обмена.'")); - СообщенияОшибок.Вставить(004, НСтр("ru = 'Ошибка при создании временного каталога.'")); - СообщенияОшибок.Вставить(005, НСтр("ru = 'Архив не содержит файл сообщения обмена.'")); - - // Коды ошибок, зависящие от вида транспорта. - СообщенияОшибок.Вставить(101, НСтр("ru = 'Не задан путь на сервере.'")); - СообщенияОшибок.Вставить(102, НСтр("ru = 'Ошибка инициализации подключения к FTP-серверу.'")); - СообщенияОшибок.Вставить(103, НСтр("ru = 'Ошибка подключения к FTP-серверу, проверьте правильность задания пути и права доступа к ресурсу.'")); - СообщенияОшибок.Вставить(104, НСтр("ru = 'Ошибка при поиске файлов на FTP-сервере.'")); - СообщенияОшибок.Вставить(105, НСтр("ru = 'Ошибка при получении файла с FTP-сервера.'")); - СообщенияОшибок.Вставить(106, НСтр("ru = 'Ошибка удаления файла на FTP-сервере, проверьте права доступа к ресурсу.'")); - - СообщенияОшибок.Вставить(108, НСтр("ru = 'Превышен допустимый размер сообщения обмена.'")); - - СообщенияОшибок.Вставить(109, НСтр("ru = 'Ошибка при попытке установить активное соединение с FTP-сервером. Попробуйте использовать пассивное соединение.'")); - -КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////// // Работа с FTP Функция ПолучитьFTPСоединение(Таймаут) - НастройкиFTP = ОбменДаннымиСервер.FTPНастройкиСоединения(Таймаут); - НастройкиFTP.Сервер = ИмяFTPСервера; - НастройкиFTP.Порт = FTPСоединениеПорт; - НастройкиFTP.ИмяПользователя = FTPСоединениеПользователь; - НастройкиFTP.ПарольПользователя = FTPСоединениеПароль; - НастройкиFTP.ПассивноеСоединение = FTPСоединениеПассивноеСоединение; - НастройкиFTP.ЗащищенноеСоединение = ОбменДаннымиСервер.ЗащищенноеСоединение(FTPСоединениеПуть); + ИмяСервераИКаталогНаСервере = РазделитьFTPРесурсНаСерверИКаталог(СокрЛП(Путь)); + ИмяFTPСервера = ИмяСервераИКаталогНаСервере.ИмяСервера; + КаталогНаFTPСервере = ИмяСервераИКаталогНаСервере.ИмяКаталога; - Возврат ОбменДаннымиСервер.FTPСоединение(НастройкиFTP); + НастройкиFTP = ТранспортСообщенийОбмена.FTPНастройкиСоединения(Таймаут); + НастройкиFTP.Сервер = ИмяFTPСервера; + НастройкиFTP.Порт = Порт; + НастройкиFTP.ИмяПользователя = Пользователь; + НастройкиFTP.ПарольПользователя = Пароль; + НастройкиFTP.ПассивноеСоединение = ПассивноеСоединение; + НастройкиFTP.ЗащищенноеСоединение = ОбменДаннымиСервер.ЗащищенноеСоединение(Путь); + + Возврат ТранспортСообщенийОбмена.FTPСоединение(НастройкиFTP); КонецФункции @@ -601,25 +348,35 @@ Перем КаталогНаСервере; - СерверИКаталогНаСервере = РазделитьFTPРесурсНаСерверИКаталог(СокрЛП(FTPСоединениеПуть)); + СерверИКаталогНаСервере = РазделитьFTPРесурсНаСерверИКаталог(СокрЛП(Путь)); КаталогНаСервере = СерверИКаталогНаСервере.ИмяКаталога; Попытка FTPСоединение = ПолучитьFTPСоединение(Таймаут); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(102); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка инициализации подключения к FTP-серверу.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецПопытки; Если Таймаут = ТаймаутПроверкиСоединения И FTPСоединение.ПассивныйРежим - И Не FTPСоединениеПассивноеСоединение Тогда - ТекстОшибки = ""; - ПолучитьСообщениеОбОшибке(109); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + И Не ПассивноеСоединение Тогда + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при попытке установить активное соединение с FTP-сервером. Попробуйте использовать пассивное соединение.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецЕсли; СоздатьКаталогПриНеобходимости(FTPСоединение, КаталогНаСервере); @@ -627,9 +384,13 @@ Попытка FTPСоединение.Записать(ИмяФайлаИсточника, КаталогНаСервере + ИмяФайлаПриемника); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(103); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка подключения к FTP-серверу, проверьте правильность задания пути и права доступа к ресурсу.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; КонецПопытки; @@ -640,10 +401,15 @@ Попытка МассивФайлов = FTPСоединение.НайтиФайлы(КаталогНаСервере, ИмяФайлаПриемника, Ложь); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(104); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка при поиске файлов на FTP-сервере.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецПопытки; Возврат МассивФайлов.Количество() > 0; @@ -658,7 +424,7 @@ Если ОбщегоНазначения.РазделениеВключено() Тогда - // При работе в сервисе, проверка наличия каталога – очень затратная операция. + // При работе в сервисе, проверка наличия каталога - очень затратная операция. // Поэтому каждый раз используется СоздатьКаталог. // Если каталог уже существует, то переходим в Исключение и ничего не делаем Попытка @@ -690,36 +456,47 @@ Перем КаталогНаСервере; - СерверИКаталогНаСервере = РазделитьFTPРесурсНаСерверИКаталог(СокрЛП(FTPСоединениеПуть)); + СерверИКаталогНаСервере = РазделитьFTPРесурсНаСерверИКаталог(СокрЛП(Путь)); КаталогНаСервере = СерверИКаталогНаСервере.ИмяКаталога; Попытка FTPСоединение = ПолучитьFTPСоединение(ТаймаутПроверкиСоединения); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(102); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка инициализации подключения к FTP-серверу.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + Возврат Ложь; + КонецПопытки; Попытка FTPСоединение.Удалить(КаталогНаСервере + ИмяФайла); Исключение - ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(106); - ДополнитьСообщениеОбОшибке(ТекстОшибки); + + СообщениеОбОшибке = НСтр("ru = 'Ошибка удаления файла на FTP-сервере, проверьте права доступа к ресурсу.'"); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); Если ПроверкаПодключения Тогда СообщениеОбОшибке = НСтр("ru = 'Не удалось проверить подключение с помощью тестового файла ""%1"". - |Возможно, заданный каталог не существует или не доступен. - |Рекомендуется также обратиться к документации по FTP-серверу для настройки поддержки имен файлов с кириллицей.'"); - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяФайла); - ДополнитьСообщениеОбОшибке(СообщениеОбОшибке); + |Возможно, заданный каталог не существует или не доступен. + |Рекомендуется также обратиться к документации по FTP-серверу для настройки поддержки имен файлов с кириллицей.'"); + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ИмяФайла); + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); КонецЕсли; Возврат Ложь; + КонецПопытки; Возврат Истина; @@ -730,30 +507,25 @@ Результат = Новый Структура("ИмяСервера, ИмяКаталога"); - ПараметрыFTP = ОбменДаннымиСервер.FTPИмяСервераИПуть(ПолныйПуть); + ПараметрыFTP = ТранспортСообщенийОбмена.FTPИмяСервераИПуть(ПолныйПуть); Результат.ИмяСервера = ПараметрыFTP.Сервер; Результат.ИмяКаталога = ПараметрыFTP.Путь; Возврат Результат; + КонецФункции #КонецОбласти #Область Инициализация -ИнициализацияСообщений(); -ИнициализацияСообщенийОшибок(); +ВременныйКаталог = Неопределено; +СообщениеОбмена = Неопределено; -ВременныйКаталогСообщенийОбмена = Неопределено; -ВременныйФайлСообщенияОбмена = Неопределено; - -ИмяFTPСервера = Неопределено; +ИмяFTPСервера = Неопределено; КаталогНаFTPСервере = Неопределено; -ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); -ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); - ТаймаутОтправкиПолученияДанных = 12*60*60; ТаймаутПроверкиСоединения = 10; diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo index f65f4c7bc..60cac6212 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ТранспортСообщенийОбменаFTP.mdo @@ -10,8 +10,14 @@ Транспорт сообщений обмена через FTP DataProcessor.ТранспортСообщенийОбменаFTP.Form.Форма + true + + + ru + + - FTPСжиматьФайлИсходящегоСообщения + СжиматьФайлИсходящегоСообщения ru Сжимать файл исходящего сообщения @@ -23,10 +29,10 @@ - FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + МаксимальныйДопустимыйРазмерСообщения ru - Максимальный размер сообщения обмена, КБайт + Максимальный допустимый размер сообщения Number @@ -43,7 +49,7 @@ - FTPСоединениеПароль + Пароль ru Пароль @@ -57,7 +63,7 @@ - FTPСоединениеПассивноеСоединение + ПассивноеСоединение ru Пассивное соединение @@ -70,7 +76,7 @@ - FTPСоединениеПользователь + Пользователь ru Пользователь (логин) @@ -83,7 +89,7 @@ - FTPСоединениеПорт + Порт ru Порт @@ -99,7 +105,7 @@ - FTPСоединениеПуть + Путь ru Путь к каталогу @@ -124,44 +130,18 @@ - - ШаблонИмениФайлаСообщения + + Транслитерация ru - Шаблон имени файла сообщения + Транслитерация - - String - - - - - - - ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений - - ru - Использовать временный каталог для отправки и приема сообщений - - Истина - Отправка и получение сообщений обмена будет выполняться через временный каталог; Ложь – отправка и получение будет выполняться напрямую через каталог обмена Boolean - - УзелИнформационнойБазы - - ru - Узел информационной базы - - - ExchangePlanRef - - - - Форма @@ -171,4 +151,13 @@ PersonalComputer MobileDevice + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/Форма/Form.form new file mode 100644 index 000000000..50f81d1fb --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаEMAIL + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаАвторизации/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаАвторизации/Form.form new file mode 100644 index 000000000..594e946c9 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаАвторизации/Form.form @@ -0,0 +1,114 @@ + + + + <key>ru</key> + <value>Авторизация в сервисе</value> + + + ПолеHTML + 1 + + <key>ru</key> + <value>Поле HTML</value> + + true + true + + true + + + ПолеHTML + + None + + ПолеHTMLРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПолеHTMLКонтекстноеМеню + 2 + true + + HTMLDocumentField + Enter + true + Left + true + + + DocumentComplete + ПолеHTMLДокументСформирован + + 50 + true + 10 + true + true + true + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
                  true
                  +
                  + + ПолеHTML + + <key>ru</key> + <value>Поле HTML</value> + + 2 + + String + + + + true + + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаАвторизации/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаАвторизации/Module.bsl new file mode 100644 index 000000000..78363f607 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаАвторизации/Module.bsl @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("ClientID") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + ПолеHTML = "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=" + Параметры.ClientID + + "&redirect_uri=http://localhost&access_type=offline&scope=https://www.googleapis.com/auth/drive" + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПолеHTMLДокументСформирован(Элемент) + + Позиция = СтрНайти(Элемент.Документ.URL, "code="); + Если Позиция Тогда + + Код = Сред(Элемент.Документ.URL, Позиция + 5); + + Закрыть(Код); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..838d5cabe --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаНастройки/Form.form @@ -0,0 +1,658 @@ + + + + КаталогВОблаке + 74 + true + true + + true + + + Объект.КаталогВОблаке + + ShowBottom + + КаталогВОблакеРасширеннаяПодсказка + 76 + + <key>ru</key> + <value>Например 'exchange’. Каталог должен быть уже создан в сервисе. Доспутимо использовать только латинские символы </value> + + Label + true + true + + Left + + + + КаталогВОблакеКонтекстноеМеню + 75 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиДоступа + 58 + + GoogleПолучитьТокен + 77 + + <key>ru</key> + <value>Получить токен</value> + + true + true + + true + + + GoogleПолучитьТокенРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + UsualButton + Form.Command.ПолучитьТокен + Normal + Auto + true + true + UserCmds + Auto + + + CclientID + 50 + + <key>ru</key> + <value>Client ID</value> + + true + true + + true + + + Объект.ClientID + + + CclientIDРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + CclientIDКонтекстноеМеню + 51 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ClientSecret + 53 + + <key>ru</key> + <value>Client secret</value> + + true + true + + true + + + Объект.ClientSecret + + + ClientSecretРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ClientSecretКонтекстноеМеню + 54 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + AccessToken + 35 + + <key>ru</key> + <value>Access token</value> + + true + true + + true + + + Объект.AccessToken + + + AccessTokenРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + AccessTokenКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + RefreshToken + 38 + + <key>ru</key> + <value>Refresh token</value> + + true + true + + true + + + Объект.RefreshToken + + + RefreshTokenРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + RefreshTokenКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ExpiresIn + 44 + + <key>ru</key> + <value>Expires in (Истекает)</value> + + true + true + + true + + + Объект.ExpiresIn + + + ExpiresInРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ExpiresInКонтекстноеМеню + 45 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки доступа</value> + + + НастройкиДоступаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + true + true + auto + Auto + Auto + + + + Декорация1 + 20 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 21 + true + + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщения + 11 + true + true + + true + + + Объект.СжиматьФайлИсходящегоСообщения + + Right + + OnChange + СжиматьФайлИсходящегоСообщенияПриИзменении + + + СжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 12 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена + 14 + true + true + + true + + + Объект.ПарольАрхиваСообщенияОбмена + + Top + + ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбменаКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Транслитерация + 17 + + <key>ru</key> + <value>Транслитерация имени файла сообщения обмена</value> + + true + true + + true + + + Объект.Транслитерация + + Right + + ТранслитерацияРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ТранслитерацияКонтекстноеМеню + 18 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 1 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 3 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаGoogleDrive + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 2 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + ПолучитьТокен + + <key>ru</key> + <value>Получить токен</value> + + 4 + + ru + Получить токен + + + true + + + + ПолучитьТокен + + + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..834aeae9d --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,177 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + + ИнициализироватьРеквизитыФормы(); + + УстановитьВидимостьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СжиматьФайлИсходящегоСообщенияПриИзменении(Элемент) + УстановитьВидимостьДоступность(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьТокен(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ClientID", Объект.ClientID); + ПараметрыФормы.Вставить("ClientSecret", Объект.ClientSecret); + + Оповещение = Новый ОписаниеОповещения("ПолучитьТокенЗавершение", ЭтотОбъект); + + ОткрытьФорму("Обработка.ТранспортСообщенийОбменаGoogleDrive.Форма.ФормаПолученияТокена", + ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьТокенЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS", "www.googleapis.com")); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьДоступность() + + Элементы.ПарольАрхиваСообщенияОбмена.Доступность = Объект.СжиматьФайлИсходящегоСообщения; + + НастройкиТранспорта = Неопределено; + Параметры.Свойство("НастройкиТранспорта", НастройкиТранспорта); + Если ЗначениеЗаполнено(НастройкиТранспорта) Тогда + Элементы.НастройкиДоступа.Скрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + Если Не Параметры.Свойство("НастройкиТранспорта") Тогда + Объект.СжиматьФайлИсходящегоСообщения = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаПолученияТокена/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаПолученияТокена/Form.form new file mode 100644 index 000000000..13db27393 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаПолученияТокена/Form.form @@ -0,0 +1,374 @@ + + + + <key>ru</key> + <value>Получение токена Google Drive</value> + + + ПолеHTML + 1 + + <key>ru</key> + <value>Поле HTML</value> + + true + true + + true + + + ПолеHTML + + None + + ПолеHTMLРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПолеHTMLКонтекстноеМеню + 2 + true + + HTMLDocumentField + Enter + true + Left + true + + 50 + 10 + true + true + + + + Декорация1 + 14 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 15 + true + + Label + true + true + + Left + + + + ГруппаПолучениеТокена + 7 + + ClientID + 4 + + <key>ru</key> + <value>Client ID</value> + + true + true + + true + + + ClientID + + + ClientIDРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ClientIDКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ClientSecret + 9 + + <key>ru</key> + <value>Client secret</value> + + true + true + + true + + + ClientSecret + + + ClientSecretРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ClientSecretКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолучитьТокен + 12 + + <key>ru</key> + <value>Получить токен</value> + + true + true + + true + + + ПолучитьТокенРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualButton + Form.Command.ПолучитьТокен + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Получение токена</value> + + + ГруппаПолучениеТокенаРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + + Web.LightGreen + + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + Vertical + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
                  true
                  +
                  + + ПолеHTML + + <key>ru</key> + <value>Поле HTML</value> + + 2 + + String + + + + true + + + true + + + + ClientID + + <key>ru</key> + <value>Client ID</value> + + 3 + + String + + + + true + + + true + + + ClientID + + + + ClientSecret + + <key>ru</key> + <value>Client secret</value> + + 4 + + String + + + + true + + + true + + + ClientSecret + + + + Код + 5 + + String + + + + true + + + true + + + Код + + + + ПолучитьТокен + + <key>ru</key> + <value>Получить токен</value> + + 1 + + ru + Получить токен + + + true + + + + ПолучитьТокен + + + Auto + Auto + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаПолученияТокена/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаПолученияТокена/Module.bsl new file mode 100644 index 000000000..ec57453b8 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Forms/ФормаПолученияТокена/Module.bsl @@ -0,0 +1,114 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("ClientID") + Или Не Параметры.Свойство("ClientSecret") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + ПолеHTML = Обработки.ТранспортСообщенийОбменаGoogleDrive.ПолучитьМакет("ПолучениеТокена_ru").ПолучитьТекст(); + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "ClientID,ClientSecret"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПолучитьТокен(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ClientID", ClientID); + + Оповещение = Новый ОписаниеОповещения("ПолучитьТокенЗавершение", ЭтотОбъект); + + ОткрытьФорму("Обработка.ТранспортСообщенийОбменаGoogleDrive.Форма.ФормаАвторизации", + ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПолучитьТокенЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Код = Результат; + + Результат = ПолучитьТокенЗавершениеНаСервере(); + + Закрыть(Результат); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьТокенЗавершениеНаСервере() + + ИмяСервера = "accounts.google.com"; + АдресРесурса = "/o/oauth2/token"; + + СтрокаЗапроса = "client_id=" + ClientID + "&" + + "client_secret=" + ClientSecret + "&" + + "grant_type=authorization_code" + "&" + + "code=" + Код + "&" + + "redirect_uri=http://localhost"; + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded"); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса); + + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); + КонецЕсли; + Соединение = Новый HTTPСоединение(ИмяСервера, 443,,, Прокси, 20, ЗащищенноеСоединение); + + Ответ = Соединение.ОтправитьДляОбработки(Запрос); + ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(ТелоОтвета); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error"]["message"]; + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); + + Возврат Неопределено; + + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("AccessToken", РезультатЗапроса["access_token"]); + Результат.Вставить("RefreshToken", РезультатЗапроса["refresh_token"]); + Результат.Вставить("ExpiresIn", ТекущаяДатаСеанса() + РезультатЗапроса["expires_in"]); + Результат.Вставить("ClientID", ClientID); + Результат.Вставить("ClientSecret", ClientSecret); + + Возврат Результат; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Help/ru.html new file mode 100644 index 000000000..136d2f5fd --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Help/ru.html @@ -0,0 +1,7 @@ + +

                  В случае если к другому приложению нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), рекомендуется использовать другие каналы связи, например Google Drive. При этом приложения, между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. Такой вариант подходит не только для синхронизации данных с приложениями, расположенными в других сетях (офисах), но и для приложений в одной сети.

                  +

                  При настройке синхронизации будет сформирован файл(ы) с настройками подключения (*.xml и *.json). В приложении-корреспонденте при выборе типа подключения, необходимо выбрать опцию Продолжение настройки, выбрать необходимый тип подключения и загрузить файл с настройками подключения

                  +
                  • Введите параметры доступа к сервису: Client ID, Client Secret, Access Token и Refresh Token. По нажатию кнопки Получить токен, откроется инструкцию по настройке сервиса и получению параметров доступа.
                  • +
                  • Включите флажок Сжимать отправляемые данные в архив , для того чтобы ограничить размер отправляемого сообщения.
                  • +
                  • Введите Пароль архива для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложений.
                  • +
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ManagerModule.bsl new file mode 100644 index 000000000..7c9ca948f --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ManagerModule.bsl @@ -0,0 +1,101 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо параметры авторизации на облачном сервисе.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Google Drive'"); + Параметры.ИдентификаторТранспорта = "GoogleDrive"; + Параметры.Описание = Описание; + Параметры.Картинка = БиблиотекаКартинок.GooggleDrive; + + Реквизиты = Новый Массив; + Реквизиты.Добавить("ПарольАрхиваСообщенияОбмена"); + + Параметры.РеквизитыДляБезопасногоХранилища = Реквизиты; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Настройки = Новый Структура; + Возврат Настройки; + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + НастройкиТранспортаJSON = Новый Структура; + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + + НастройкиТранспортаJSON.Вставить("CompressOutgoingMessageFile", НастройкиТранспорта.СжиматьФайлИсходящегоСообщения); + НастройкиТранспортаJSON.Вставить("ArchivePasswordExchangeMessages", ПарольАрхиваСообщенияОбмена); + НастройкиТранспортаJSON.Вставить("TransliterateExchangeMessageFileNames", НастройкиТранспорта.Транслитерация); + + // Google + НастройкиТранспортаJSON.Вставить("AccessToken",НастройкиТранспорта.AccessToken); + НастройкиТранспортаJSON.Вставить("ClientID",НастройкиТранспорта.ClientID); + НастройкиТранспортаJSON.Вставить("ClientSecret",НастройкиТранспорта.ClientSecret); + НастройкиТранспортаJSON.Вставить("ExpiresIn",НастройкиТранспорта.ExpiresIn); + НастройкиТранспортаJSON.Вставить("RefreshToken",НастройкиТранспорта.RefreshToken); + НастройкиТранспортаJSON.Вставить("CloudDirectory",НастройкиТранспорта.КаталогВОблаке); + + Возврат НастройкиТранспортаJSON; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + НастройкиТранспорта = Новый Структура; + + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", НастройкиТранспортаJSON.CompressOutgoingMessageFile); + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", НастройкиТранспортаJSON.ArchivePasswordExchangeMessages); + НастройкиТранспорта.Вставить("Транслитерация", НастройкиТранспортаJSON.TransliterateExchangeMessageFileNames); + + // Google + НастройкиТранспорта.Вставить("AccessToken", НастройкиТранспортаJSON.AccessToken); + НастройкиТранспорта.Вставить("ClientID", НастройкиТранспортаJSON.ClientID); + НастройкиТранспорта.Вставить("ClientSecret", НастройкиТранспортаJSON.ClientSecret); + НастройкиТранспорта.Вставить("ExpiresIn", НастройкиТранспортаJSON.ExpiresIn); + НастройкиТранспорта.Вставить("RefreshToken", НастройкиТранспортаJSON.RefreshToken); + НастройкиТранспорта.Вставить("КаталогВОблаке", НастройкиТранспортаJSON.CloudDirectory); + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ObjectModule.bsl new file mode 100644 index 000000000..43fbbb5a3 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ObjectModule.bsl @@ -0,0 +1,559 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +Перем Таймаут; +Перем ТаймаутОтправкаПолучение; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщение(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + + Для Каждого Шаблон Из ШаблоныИменДляПолученияСообщения Цикл + + Результат = ПолучитьСообщение(Шаблон); + + Если Результат Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьСообщение(ШаблонИмениСообщения) + + ОбновитьТокен(); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","Bearer " + AccessToken); + + ИдентификаторКаталогаВОблаке = ИдентификаторКаталогаВОблаке(); + + АдресРесурса = "/drive/v3/files?q='%1' in parents and trashed = false and name contains '%2'&orderBy=modifiedTime desc"; + АдресРесурса = СтрШаблон(АдресРесурса, ИдентификаторКаталогаВОблаке, ШаблонИмениСообщения); + + HTTPСоединение = HTTPСоединение("www.googleapis.com", Таймаут); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error"]["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + ФайлыВОблаке = РезультатЗапроса["files"]; + + ТаблицаФайлов = Новый ТаблицаЗначений; + ТаблицаФайлов.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200))); + ТаблицаФайлов.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200))); + + Для Каждого Файл Из ФайлыВОблаке Цикл + + НовСтрока = ТаблицаФайлов.Добавить(); + НовСтрока.ИмяФайла = Файл["name"]; + НовСтрока.Идентификатор = Файл["id"]; + + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Т.ИмяФайла КАК ИмяФайла, + | Т.Идентификатор КАК Идентификатор + |ПОМЕСТИТЬ ВТ + |ИЗ + | &ТаблицаФайлов КАК Т + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ.ИмяФайла КАК ИмяФайла, + | ВТ.Идентификатор КАК Идентификатор + |ИЗ + | ВТ КАК ВТ + |ГДЕ + | ВТ.ИмяФайла ПОДОБНО &Шаблон"; + + ШаблонИмениСообщенияДляПоиска = СтрЗаменить(ШаблонИмениСообщения, "*", "%"); + + Запрос.УстановитьПараметр("Шаблон", ШаблонИмениСообщенияДляПоиска); + Запрос.УстановитьПараметр("ТаблицаФайлов", ТаблицаФайлов); + + РезультатПоискаФайлов = Запрос.Выполнить().Выгрузить(); + + Если РезультатПоискаФайлов.Количество() = 0 Тогда + + СообщениеОбОшибке = НСтр("ru = 'В каталоге обмена информацией не был обнаружен файл сообщения с данными. + |Идентификатор каталога на сервере на сервере: ""%1"" + |Имя файла сообщения обмена: ""%2""'"); + + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, ИдентификаторКаталогаВОблаке, ШаблонИмениСообщения); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + // загрузка файла с диска + Файл = РезультатПоискаФайлов[0]; + + HTTPСоединение = HTTPСоединение("www.googleapis.com", ТаймаутОтправкаПолучение); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","Bearer " + AccessToken); + + АдресРесурса = "/drive/v3/files/%1?alt=media"; + АдресРесурса = СтрШаблон(АдресРесурса, Файл["Идентификатор"]); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + Ответ = HTTPСоединение.Получить(Запрос); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + ФайлЗапакован = ВРег(Прав(Файл["ИмяФайла"], 3)) = "ZIP"; + + Если ФайлЗапакован Тогда + + // Получаем имя для временного файла архива. + ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ВременныйКаталог, Строка(Новый УникальныйИдентификатор) + ".zip"); + + ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ДвоичныеДанные.Записать(ИмяВременногоФайлаАрхива); + + Если Не ТранспортСообщенийОбмена.РаспаковатьСообщениеОбменаИзZipФайла( + ЭтотОбъект, ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена) Тогда + + Возврат Ложь; + + КонецЕсли; + + Иначе + + ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ДвоичныеДанные.Записать(СообщениеОбмена); + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ОтправитьСообщение() + + ОбновитьТокен(); + + Если СжиматьФайлИсходящегоСообщения Тогда + + Тип = "application/zip"; + + Если Не ТранспортСообщенийОбмена.ЗапаковатьСообщениеОбменаВZipФайл(ЭтотОбъект, ПарольАрхиваСообщенияОбмена) Тогда + Возврат Ложь; + КонецЕсли; + + Файл = Новый Файл(ИмяСообщенияДляОтправки); + ИмяСообщения = Файл.ИмяБезРасширения + ".zip"; + + Иначе + + ИмяСообщения = ИмяСообщенияДляОтправки; + Тип = "application/xml"; + + КонецЕсли; + + ИдентификаторФайла = ""; + + Если Не ПоискФайла(ИмяСообщения, ИдентификаторФайла, "ВыгрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Разделитель = "v8exchange_cloud"; + + // Метаданные файла + Свойства = Новый Соответствие(); + Свойства.Вставить("name", ИмяСообщения); + Свойства.Вставить("mimeType", Тип); + + ИдентификаторКаталогаВОблаке = ИдентификаторКаталогаВОблаке(); + + Если Не ЗначениеЗаполнено(ИдентификаторФайла) Тогда + МассивКаталогов = Новый Массив; + МассивКаталогов.Добавить(ИдентификаторКаталогаВОблаке); + Свойства.Вставить("parents", МассивКаталогов); + КонецЕсли; + + МетаданныеФайла = ТранспортСообщенийОбмена.ЗначениеВJSON(Свойства); + + Поток = Новый ПотокВПамяти(); + ЗаписьДанных = Новый ЗаписьДанных(Поток); + + ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/json; charset=UTF-8"); + ЗаписьДанных.ЗаписатьСтроку(""); + ЗаписьДанных.ЗаписатьСтроку(МетаданныеФайла); + ЗаписьДанных.Закрыть(); + + ДвоичныеДанныеМетаданные = Поток.ЗакрытьИПолучитьДвоичныеДанные(); + + // Данные файла + ДвоичныеДанные = Новый ДвоичныеДанные(СообщениеОбмена); + + Поток = Новый ПотокВПамяти(); + ЗаписьДанных = Новый ЗаписьДанных(Поток); + ЗаписьДанных.ЗаписатьСтроку("Content-Type:" + Тип); + ЗаписьДанных.ЗаписатьСтроку(""); + ЗаписьДанных.Записать(ДвоичныеДанные); + ЗаписьДанных.Закрыть(); + + ДвоичныеДанныеФайл = Поток.ЗакрытьИПолучитьДвоичныеДанные(); + + // Тело запроса + ПотокТело = Новый ПотокВПамяти(); + ЗаписьДанных = Новый ЗаписьДанных(ПотокТело); + ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); + ЗаписьДанных.Записать(ДвоичныеДанныеМетаданные); + ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); + ЗаписьДанных.Записать(ДвоичныеДанныеФайл); + ЗаписьДанных.ЗаписатьСтроку(""); + ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); + ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); + + ЗаписьДанных.Закрыть(); + + ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные(); + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Authorization", "Bearer " + AccessToken); + Заголовки.Вставить("Content-Type", "Multipart/Related; boundary=" + Разделитель); + Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ=")); + + Соединение = HTTPСоединение("www.googleapis.com", ТаймаутОтправкаПолучение); + + Если ЗначениеЗаполнено(ИдентификаторФайла) Тогда + + Запрос = Новый HTTPЗапрос("/upload/drive/v3/files/" + ИдентификаторФайла + "?uploadType=multipart", Заголовки); + Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело); + + Ответ = Соединение.Изменить(Запрос); + + Иначе + + Запрос = Новый HTTPЗапрос("/upload/drive/v3/files?uploadType=multipart", Заголовки); + Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело); + + Ответ = Соединение.ОтправитьДляОбработки(Запрос); + + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error"]["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПодключениеУстановлено() Экспорт + + ОбновитьТокен(); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","Bearer " + AccessToken); + + АдресРесурса = "/drive/v3/files?pageSize=1"; + + HTTPСоединение = HTTPСоединение("www.googleapis.com", Таймаут); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error"]["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ОбновитьТокен() + + Если ЗначениеЗаполнено(ExpiresIn) И ТекущаяДатаСеанса() < ExpiresIn Тогда + Возврат Истина; + КонецЕсли; + + АдресРесурса = "client_id=%1&client_secret=%2&grant_type=refresh_token&refresh_token=%3"; + АдресРесурса = СтрШаблон(АдресРесурса, ClientID, ClientSecret, RefreshToken); + + Соединение = HTTPСоединение("accounts.google.com", Таймаут); + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded"); + + Запрос = Новый HTTPЗапрос("/o/oauth2/token", Заголовки); + Запрос.УстановитьТелоИзСтроки(АдресРесурса); + + Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error_description"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + Возврат Ложь; + + КонецЕсли; + + access_token = РезультатЗапроса["access_token"]; + expires_in = ТекущаяДатаСеанса() + РезультатЗапроса["expires_in"] - 25; + + Если ЗначениеЗаполнено(Корреспондент) Тогда + + НастройкиТранспорта = ТранспортСообщенийОбмена.НастройкиТранспорта(Корреспондент, "GoogleDrive"); + + Если НастройкиТранспорта <> Неопределено Тогда + + НастройкиТранспорта.Вставить("Google_access_token", access_token); + НастройкиТранспорта.Вставить("Google_expires_in", expires_in); + + ТранспортСообщенийОбмена.СохранитьНастройкиТранспорта(Корреспондент, "GoogleDrive", НастройкиТранспорта); + + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ИдентификаторКаталогаВОблаке() + + Если ЗначениеЗаполнено(КаталогВОблаке) Тогда + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","Bearer " + AccessToken); + + АдресРесурса = "/drive/v3/files?q=trashed = false and name='%1'"; + АдресРесурса = СтрШаблон(АдресРесурса, КаталогВОблаке); + + HTTPСоединение = HTTPСоединение("www.googleapis.com", Таймаут); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error"]["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект,"ЗагрузкаДанных"); + Возврат ""; + + КонецЕсли; + + ФайлыВОблаке = РезультатЗапроса["files"]; + + Если ФайлыВОблаке.Количество() = 0 Тогда + Возврат ""; + Иначе + Возврат ФайлыВОблаке[0]["id"]; + КонецЕсли; + + Иначе + + Возврат "root"; + + КонецЕсли; + +КонецФункции + +Функция ПоискФайла(ИмяФайла, ИдентификаторФайла, ДействиеПриОбмене) + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","Bearer " + AccessToken); + + ИдентификаторКаталогаВОблаке = ИдентификаторКаталогаВОблаке(); + + АдресРесурса = "/drive/v3/files?q='%1' in parents and trashed = false and name='%2'"; + АдресРесурса = СтрШаблон(АдресРесурса, ИдентификаторКаталогаВОблаке, ИмяФайла); + + HTTPСоединение = HTTPСоединение("www.googleapis.com", Таймаут); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["error"]["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + + Возврат Ложь; + + КонецЕсли; + + ФайлыВОблаке = РезультатЗапроса["files"]; + + Если ФайлыВОблаке.Количество() = 0 Тогда + ИдентификаторФайла = ""; + Иначе + ИдентификаторФайла = ФайлыВОблаке[0]["id"]; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция HTTPСоединение(Сервер, Таймаут) + + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); + КонецЕсли; + + Возврат Новый HTTPСоединение(Сервер,,,, Прокси, Таймаут, ЗащищенноеСоединение); + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщениеОбмена = Неопределено; + +Таймаут = 20; +ТаймаутОтправкаПолучение = 43200; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Templates/ПолучениеТокена_ru/Template.htmldoc b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Templates/ПолучениеТокена_ru/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Templates/ПолучениеТокена_ru/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Templates/ПолучениеТокена_ru/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Templates/ПолучениеТокена_ru/ru.html new file mode 100644 index 000000000..bb06738d1 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/Templates/ПолучениеТокена_ru/ru.html @@ -0,0 +1,35 @@ + + +

                  1. В консоли разработчика Google на странице управления ресурсами создайте новый проект по кнопке CREATE PROJECT (создать проект).

                  +


                  +2. На странице создания проекта укажите Project name (Имя проекта), или оставьте по умолчанию. Нажмите кнопку CREATE (создать).

                  +

                  +

                  3. Перейдите на страницу библиотеки и выберите Google Drive API.

                  +


                  4. При помощи кнопки ENABLE активируйте Google Drive API.

                  +


                  5. Перейдите в раздел AOuth consent screen. Выберите External и нажмите CREATE.

                  +


                  6. На следующей странице заполните поля App name (имя приложения), user support email, email address и нажмите SAVE AND CONTINUE.

                  +


                  7. Следующие шаги можно пропустить, нажимая SAVE AND CONTINUE.

                  +

                  8. Перейдите по ссылке, сделайте данные публичными, кнопка PUBLISH APP.

                  +

                  +

                  9. Перейдите в раздел credentials и нажмите кнопку CREATE CREDENTIALS – OAuth client ID.

                  +


                  +

                  +10. Выберите тип приложения Desktop App и нажмите CREATE.

                  +


                  +11. Скопируйте Client ID и Client secret в соответствующие поля внизу формы и нажмите Получить токен.

                  +


                  +12. В открывшемся окне пройдите авторизацию в сервисе google и дайте разрешение на использование сервиса.

                  +


                  + + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ТранспортСообщенийОбменаGoogleDrive.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ТранспортСообщенийОбменаGoogleDrive.mdo new file mode 100644 index 000000000..4c94da8ba --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаGoogleDrive/ТранспортСообщенийОбменаGoogleDrive.mdo @@ -0,0 +1,181 @@ + + + + + + + ТранспортСообщенийОбменаGoogleDrive + + ru + Транспорт сообщений обмена Google Drive + + true + DataProcessor.ТранспортСообщенийОбменаGoogleDrive.Form.Форма + true + + + ru + + + + AccessToken + + ru + Access token + + + String + + + + + + + ClientID + + ru + Client ID + + + String + + + + + + + ClientSecret + + ru + Client secret + + + String + + + + + + + ExpiresIn + + ru + Expires in + + + Date + + + + + + + RefreshToken + + ru + Refresh token + + + String + + + + + + + КаталогВОблаке + + ru + Каталог в облаке + + + String + + 100 + + + + + + + ПарольАрхиваСообщенияОбмена + + ru + Пароль архива сообщения обмена + + + String + + + + + + + СжиматьФайлИсходящегоСообщения + + ru + Сжимать файл исходящего сообщения + + + Boolean + + + + + + Транслитерация + + ru + Транслитерация + + + Boolean + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаПолученияТокена + + ru + Форма получения токена + + PersonalComputer + MobileDevice + + + ФормаАвторизации + + ru + Форма авторизации + + PersonalComputer + MobileDevice + + + ПолучениеТокена_ru + + ru + Получение токена + + HTMLDocument + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/Форма/Form.form new file mode 100644 index 000000000..4ff8ed549 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаHTTP + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаАутентификации/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаАутентификации/Form.form new file mode 100644 index 000000000..a532f8675 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаАутентификации/Form.form @@ -0,0 +1,704 @@ + + + + <key>ru</key> + <value>Аутентификация</value> + + + ВыполнениеПроверкиПодключения + 1 + + ЗапросПароляПользователя + 3 + + ГруппаЗапросаПароля + 5 + + Декорация2 + 7 + + <key>ru</key> + <value>Введите пароль для входа в приложение в Интернете</value> + + true + true + + true + + + Декорация2ExtendedTooltip + 9 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 8 + true + + Label + true + + Left + + + + ГруппаВводаПароля + 10 + + Пароль + 12 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + Пароль + + + ПарольРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 13 + true + + InputField + true + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Ввода пароля</value> + + + ГруппаВводаПароляРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Запроса пароля</value> + + + ГруппаЗапросаПароляРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + Декорация1 + 64 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 65 + true + + Label + true + true + + Left + + + + КоманднаяПанельВыполненияОбмена + 35 + + ОК + 51 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + + ОКРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Отмена + 53 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ОтменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель выполнения обмена</value> + + + КоманднаяПанельВыполненияОбменаExtendedTooltip + 36 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Запрос пароля пользователя</value> + + + ЗапросПароляПользователяExtendedTooltip + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ОжиданиеПроверкиПодключения + 41 + + Группа1 + 43 + + ДлительнаяОперация1 + 45 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация1РасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ДлительнаяОперация1КонтекстноеМеню + 46 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + СтатусОжиданияЗапускаСинхронизации + 48 + + <key>ru</key> + <value>Выполняется проверка подключения. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусОжиданияЗапускаСинхронизацииРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СтатусОжиданияЗапускаСинхронизацииКонтекстноеМеню + 49 + true + + Label + 3 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа1РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + Декорация5 + 61 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 62 + true + + Label + true + true + true + + Left + + + + КоманднаяПанельПроверкаПодключения + 55 + + Отмена1 + 59 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + Отмена1РасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель выполнения обмена</value> + + + КоманднаяПанельПроверкаПодключенияРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Ожидание проверки подключения</value> + + + ОжиданиеПроверкиПодключенияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Выполнение проверки подключения</value> + + + ВыполнениеПроверкиПодключенияРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + Vertical + true + true + true + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаWS + + + true + + + true + +
                  true
                  +
                  + + Пароль + + <key>ru</key> + <value>Пароль</value> + + 2 + + String + + + + true + + + true + + + + Корреспондент + 6 + + ExchangePlanRef + + + true + + + true + + + + ИдентификаторТранспорта + 7 + + String + + + + true + + + true + + + + ДанныеАутентификации + 8 + + + true + + + true + + + + ИмяПланаОбмена + 9 + + String + + + + true + + + true + + + + НастройкиТранспорта + 10 + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 3 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаАутентификации/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаАутентификации/Module.bsl new file mode 100644 index 000000000..c94fb832f --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаАутентификации/Module.bsl @@ -0,0 +1,105 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("Корреспондент") + И Не Параметры.Свойство("ИдентификаторТранспорта") + И Не Параметры.Свойство("ИмяПланаОбмена") + И Не Параметры.Свойство("НастройкиТранспорта") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + Корреспондент = Параметры.Корреспондент; + ИдентификаторТранспорта = Параметры.ИдентификаторТранспорта; + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + НастройкиТранспорта = Параметры.НастройкиТранспорта; + + ДанныеАутентификации = Новый Структура; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + ДанныеАутентификации.Вставить("Пароль", Пароль); + + Элементы.ВыполнениеПроверкиПодключения.ТекущаяСтраница = Элементы.ОжиданиеПроверкиПодключения; + + ФоновоеЗадание = ПроверкаАутентификацииНачало( + ?(ЗначениеЗаполнено(Корреспондент), Корреспондент, ИмяПланаОбмена), + ИдентификаторТранспорта, + ДанныеАутентификации); + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + + Обработчик = Новый ОписаниеОповещения("ПроверкаАутентификацииЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ПроверкаАутентификацииНачало(Знач Корреспондент, Знач ИдентификаторТранспорта, Знач ДанныеАутентификации) Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Проверка подключения к корреспонденту'", ОбщегоНазначения.КодОсновногоЯзыка()); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + + Возврат ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "ТранспортСообщенийОбмена.ПроверитьАутентификацию", + Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, ДанныеАутентификации); + +КонецФункции + +&НаКлиенте +Процедура ПроверкаАутентификацииЗавершение(ФоновоеЗадание, ДополнительныеПараметры) Экспорт + + Если ФоновоеЗадание = Неопределено Тогда + + Возврат; + + ИначеЕсли ФоновоеЗадание.Статус = "Ошибка" Тогда + + Элементы.ВыполнениеПроверкиПодключения.ТекущаяСтраница = Элементы.ЗапросПароляПользователя; + СообщениеОбОшибке = ФоновоеЗадание.КраткоеПредставлениеОшибки + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); + + Иначе + + Закрыть(ДанныеАутентификации); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..fad531df0 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаНастройки/Form.form @@ -0,0 +1,486 @@ + + + + КаталогОбменаИнформацией + 12 + true + true + + true + + Top + ShowBottom + + КаталогОбменаИнформациейРасширеннаяПодсказка + 14 + + <key>ru</key> + <value>Укажите локальный или сетевой каталог, который будет использоваться для передачи сообщений обмена.</value> + + Label + true + true + + Left + + + + КаталогОбменаИнформациейКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + + StartChoice + КаталогОбменаИнформациейНачалоВыбора + + + Opening + КаталогОбменаИнформациейОткрытие + + 40 + true + true + true + true + true + true + true + Normal + + + + АдресВебСервиса + 24 + true + true + + true + + + Объект.АдресВебСервиса + + + АдресВебСервисаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + АдресВебСервисаКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяПубликации + 40 + true + true + + true + + + ИмяПубликацииРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ИмяПубликацииКонтекстноеМеню + 41 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяПользователь + 27 + true + true + + true + + + Объект.ИмяПользователя + + + ИмяПользовательРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ИмяПользовательКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаПароль + 33 + + Пароль + 30 + true + true + + true + + + Объект.Пароль + + + ПарольРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ЗапомнитьПароль + 35 + true + true + + true + + + Объект.ЗапомнитьПароль + + Right + + ЗапомнитьПарольРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ЗапомнитьПарольКонтекстноеМеню + 36 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Пароль</value> + + + ГруппаПарольРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ПараметрыДоступаВИнтернет + 38 + + <key>ru</key> + <value>Параметры доступа в Интернет</value> + + true + true + + true + + + ПараметрыДоступаВИнтернетРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПараметрыДоступаВИнтернет + Normal + Auto + true + true + UserCmds + Auto + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаHTTP + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + ПараметрыДоступаВИнтернет + + <key>ru</key> + <value>Параметры доступа в Интернет</value> + + 2 + + ru + Параметры доступа в Интернет + + + true + + + + ПараметрыДоступаВИнтернет + + + DontUse + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..f24771a25 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура КаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "КаталогОбменаИнформацией", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура КаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "КаталогОбменаИнформацией", СтандартнаяОбработка) +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + Если Не Объект.ЗапомнитьПароль Тогда + Объект.Пароль = ""; + КонецЕсли; + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыДоступаВИнтернет(Команда) + + ТранспортСообщенийОбменаКлиент.ОткрытьФормуПараметровПроксиСервера(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + Если Не ПустаяСтрока(Объект.АдресВебСервиса) Тогда + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Объект.АдресВебСервиса); + Если ЗначениеЗаполнено(СтруктураАдреса.Схема) Тогда + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, СтруктураАдреса.Порт)); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + КонецЕсли; + + КонецЕсли; + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Заполним пароль. + ТранспортСообщенийОбмена.ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(ЭтаФорма, ОбработкаОбъект); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Help/ru.html new file mode 100644 index 000000000..d1048d6fe --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/Help/ru.html @@ -0,0 +1,8 @@ + +

                  Этот вариант подключения рекомендуется выбрать, если приложение находится в другой сети (офисе) и при этом доступна для подключения через Интернет (http-сервис).

                  +

                  База-корреспонент должна быть опубликована на веб-сервере (Apache, IIS)

                  +
                  • Введите Адрес приложения в интернете.
                  • +
                  • Введите имя Пользователя и Пароль.
                  • +
                  • При необходимости включите флажок Запомнить пароль. Если данный флажок не установлен, то при каждой синхронизации необходимо вводить пароль, так же недоступна синхронизация по сценарию..
                  • +
                  • Перейдите по ссылке Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.
                  • +
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ManagerModule.bsl new file mode 100644 index 000000000..b022d512d --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ManagerModule.bsl @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо указать параметры подключения к базе корреспонденту.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Интернет (http-сервис)'"); + Параметры.ИдентификаторТранспорта = "HTTP"; + Параметры.Описание = Описание; + Параметры.ИмяФормыАутентификации = "ФормаАутентификации"; + Параметры.РеквизитыДляБезопасногоХранилища.Добавить("Пароль"); + Параметры.ПрямоеПодключение = Истина; + Параметры.РежимРаботыПриложения = 1; + Параметры.ИспользоватьПрогресс = Ложь; + Параметры.СохранитьПараметрыПодключенияВФайл = Ложь; + Параметры.Картинка = БиблиотекаКартинок.ТранспортHTTP; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ObjectModule.bsl new file mode 100644 index 000000000..2f36d127a --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ObjectModule.bsl @@ -0,0 +1,732 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщениеОбмена(СообщениеДляСопоставленияДанных); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + Результат = ПолучитьСообщениеОбмена(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента); + + HTTPСоединение = HTTPСоединение(); + + Параметры = Новый Структура; + Параметры.Вставить("ExchangePlanName", ИмяПланаОбменаКорреспондента); + Параметры.Вставить("NodeCode", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код); + Параметры.Вставить("IsXDTOExchangePlan", ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена)); + Параметры.Вставить("SettingID", НастройкиПодключения.ИдентификаторНастройки); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "GET", "GetIBParameters", Параметры); + + Если ОтветЭтоОшибка(Ответ) Тогда + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + ПараметрыКорреспондента = Новый Структура; + + ПараметрыКорреспондента.Вставить("ПланОбменаСуществует", РезультатЗапроса["ExchangePlanExists"]); + ПараметрыКорреспондента.Вставить("ПрефиксИнформационнойБазы", РезультатЗапроса["InfobasePrefix"]); + ПараметрыКорреспондента.Вставить("ПрефиксИнформационнойБазыПоУмолчанию", РезультатЗапроса["DefaultInfobasePrefix"]); + ПараметрыКорреспондента.Вставить("НаименованиеИнформационнойБазы", РезультатЗапроса["InfobaseDescription"]); + ПараметрыКорреспондента.Вставить("НаименованиеИнформационнойБазыПоУмолчанию", РезультатЗапроса["DefaultInfobaseDescription"]); + ПараметрыКорреспондента.Вставить("НастройкиПараметровУчетаЗаданы", РезультатЗапроса["AccountingParametersSettingsAreSpecified"]); + ПараметрыКорреспондента.Вставить("КодЭтогоУзла", РезультатЗапроса["ThisNodeCode"]); + ПараметрыКорреспондента.Вставить("ВерсияКонфигурации", РезультатЗапроса["ConfigurationVersion"]); + ПараметрыКорреспондента.Вставить("УзелСуществует", РезультатЗапроса["NodeExists"]); + ПараметрыКорреспондента.Вставить("ВерсияФорматаНастроекОбменаДанными", РезультатЗапроса["DataExchangeSettingsFormatVersion"]); + ПараметрыКорреспондента.Вставить("ИспользоватьПрефиксыДляНастройкиОбмена", РезультатЗапроса["UsePrefixesForExchangeSettings"]); + ПараметрыКорреспондента.Вставить("ФорматОбмена", РезультатЗапроса["ExchangeFormat"]); + ПараметрыКорреспондента.Вставить("ИмяПланаОбмена", РезультатЗапроса["ExchangePlanName"]); + ПараметрыКорреспондента.Вставить("ВерсииФорматаОбмена", РезультатЗапроса["ExchangeFormatVersions"]); + ПараметрыКорреспондента.Вставить("НастройкаСинхронизацииДанныхЗавершена", РезультатЗапроса["DataSynchronizationSetupCompleted"]); + ПараметрыКорреспондента.Вставить("ПолученоСообщениеДляСопоставленияДанных", РезультатЗапроса["MessageReceivedForDataMapping"]); + ПараметрыКорреспондента.Вставить("ПоддерживаетсяСопоставлениеДанных", РезультатЗапроса["DataMappingSupported"]); + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + + ОбъектыФормата = ТранспортСообщенийОбмена.ТаблицаИзМассива_ПоддерживаемыеОбъектыФормата( + РезультатЗапроса["SupportedObjectsInFormat"], + РезультатЗапроса["ExchangeFormatVersions"]); + + ПараметрыКорреспондента.Вставить("ПоддерживаемыеОбъектыФормата", ОбъектыФормата); + + КонецЕсли; + + Результат.ПодключениеУстановлено = Ложь; + + Если Не ПараметрыКорреспондента.ПланОбменаСуществует Тогда + + Текст = НСтр("ru = 'В корреспонденте не найден план обмена ""%1"". + |Убедитесь, что + | - выбран правильный вид приложения для настройки обмена; + | - указан правильный адрес приложения в Интернете.'"); + + СообщениеОбОшибке = СтрШаблон(Текст, ИмяПланаОбмена); + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + Результат.ПараметрыКорреспондентаПолучены = Истина; + Результат.ПараметрыКорреспондента = ПараметрыКорреспондента; + Результат.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; + Результат.ПодключениеУстановлено = Истина; + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ВерсияКонфигурации = Результат.ПараметрыКорреспондента.ВерсияКонфигурации; + + ТранспортСообщенийОбмена.ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, ВерсияКонфигурации, СообщениеОбОшибке); + + Если Отказ Тогда + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + ТранспортСообщенийОбмена.ПроверитьДублированиеСинхронизаций(ИмяПланаОбмена, ПараметрыКорреспондента, Результат); + + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат ПодключениеУстановлено(); + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + HTTPСоединение = HTTPСоединение(); + + НастройкиПодключенияВJSON = ТранспортСообщенийОбмена.НастройкиПодключенияВJSON(НастройкиПодключения); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "CreateExchangeNode", , НастройкиПодключенияВJSON); + + Если ОтветЭтоОшибка(Ответ) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат НЕ ЗапомнитьПароль; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.УдалитьНастройкуСинхронизацииВКорреспонденте +Функция УдалитьНастройкуСинхронизацииВКорреспонденте() Экспорт + + HTTPСоединение = HTTPСоединение(); + + Параметры = Новый Структура; + Параметры.Вставить("ExchangePlanName", ИмяПланаОбменаКорреспондента); + Параметры.Вставить("NodeCode", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "DELETE", "RemoveExchangeNode", Параметры); + + Если ОтветЭтоОшибка(Ответ) Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодключениеУстановлено() Экспорт + + HTTPСоединение = HTTPСоединение(); + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресВебСервиса); + АдресРесурса = СтруктураURI.ПутьНаСервере + "/hs/exchange_dsl_1_0_0_1/version"; + + Заголовки = Новый Соответствие(); + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + + Если Ответ.КодСостояния = 200 Тогда + + Возврат Истина; + + Иначе + + СообщениеОбОшибке = НСтр("ru = 'Аутентификация пользователя не выполнена.'"); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект,,Ответ.ПолучитьТелоКакСтроку()); + + Возврат Ложь; + + КонецЕсли; + +КонецФункции + +Функция ОтправитьСообщениеОбмена(СообщениеДляСопоставленияДанных) + + HTTPСоединение = HTTPСоединение(180); + + Если Не ЗначениеЗаполнено(Корреспондент) Тогда + ИдентификаторФайлаУИД = ПоместитьФайлВХранилищеВСервисе(HTTPСоединение, СообщениеОбмена, 1024); + Возврат Истина; + КонецЕсли; + + Параметры = Новый Структура; + Параметры.Вставить("ExchangePlanName", ИмяПланаОбменаКорреспондента); + Параметры.Вставить("NodeCode", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код); + Параметры.Вставить("IsXDTOExchangePlan", ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена)); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "GET", "GetIBParameters", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ВыгрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(); + СостояниеНастройки = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + ИдентификаторФайлаУИД = ПоместитьФайлВХранилищеВСервисе(HTTPСоединение, СообщениеОбмена, 1024); + + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайлаУИД); + + Если СообщениеДляСопоставленияДанных + И (СостояниеНастройки["DataMappingSupported"] + Или Не СостояниеНастройки["DataSynchronizationSetupCompleted"]) Тогда + + Параметры = Новый Структура; + Параметры.Вставить("ExchangePlanName", ИмяПланаОбменаКорреспондента); + Параметры.Вставить("NodeCode", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код); + Параметры.Вставить("FileID", ИдентификаторФайлаСтрокой); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "PutMessageForDataMatching", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ВыгрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Иначе + + Параметры = Новый Структура; + Параметры.Вставить("ExchangePlanName", ИмяПланаОбменаКорреспондента); + Параметры.Вставить("NodeCode", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код); + Параметры.Вставить("FileID", ИдентификаторФайлаСтрокой); + Параметры.Вставить("TimeConsumingOperationAllowed", Истина); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "DownloadData", Параметры); + + Тело = Ответ.ПолучитьТелоКакСтроку(); + + Если ОтветЭтоОшибка(Ответ, "ВыгрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Результат = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; + ПараметрыОбмена.ДлительнаяОперация = Результат["TimeConsumingOperation"]; + ПараметрыОбмена.ИдентификаторОперации = Результат["OperationID"]; + + Если ПараметрыОбмена.ДлительнаяОперация Тогда + + ОжиданиеЗавершенияОперации(HTTPСоединение, ПараметрыОбмена, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПоместитьФайлВХранилищеВСервисе(HTTPСоединение, Знач ИмяФайла, + Знач РазмерЧастиКБ = 1024, ИдентификаторФайла = Неопределено) Экспорт + + Если HTTPСоединение = Неопределено Тогда + + ВызватьИсключение НСтр("ru ='Не определен WS-прокси передачи файла выгрузки в базу приемник. + |Обратитесь к администратору.'", ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + КаталогФайлов = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогФайлов); + + // Архивирование файла. + ИмяНеразделенногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогФайлов, "data.zip"); + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла,,,, УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(ИмяФайла); + Архиватор.Записать(); + + // Разделение файла на части. + ИдентификаторСессии = Новый УникальныйИдентификатор; + + РазмерЧастиВБайтах = РазмерЧастиКБ * 1024; + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, РазмерЧастиВБайтах); + + КоличествоЧастей = ИменаФайлов.Количество(); + Для НомерЧасти = 1 По КоличествоЧастей Цикл + + ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; + ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); + + Параметры = Новый Структура; + Параметры.Вставить("SessionID", ИдентификаторСессии); + Параметры.Вставить("PartNumber", НомерЧасти); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "PutFilePart", Параметры, ДанныеФайла); + + Если ОтветЭтоОшибка(Ответ, "ВыгрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + КонецЦикла; + + Попытка + УдалитьФайлы(КаталогФайлов); + Исключение + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеВременногоФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Параметры = Новый Структура; + Параметры.Вставить("SessionID", ИдентификаторСессии); + Параметры.Вставить("PartCount", КоличествоЧастей); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "SaveFileFromParts", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ВыгрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(); + Результат = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Возврат Результат["FileID"]; + +КонецФункции + +Процедура ОжиданиеЗавершенияОперации(HTTPСоединение, ПараметрыОбмена, ДействиеПриОбменеВЭтойИБ = Неопределено) Экспорт + + Если ПараметрыОбмена.ИнтервалОжиданияНаСервере = 0 Тогда + + Если ДействиеПриОбменеВЭтойИБ <> Неопределено Тогда + + // В этой ИБ "Загрузка", значит в корреспонденте "Выгрузка" + Если ДействиеПриОбменеВЭтойИБ = Перечисления.ДействияПриОбмене.ЗагрузкаДанных Тогда + + ДействиеВКорреспондентеСтрокой = НСтр("ru ='выгрузка'", ОбщегоНазначения.КодОсновногоЯзыка()); + + Иначе + + ДействиеВКорреспондентеСтрокой = НСтр("ru ='загрузка'", ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + ШаблонСообщения = НСтр("ru = 'Ожидание выполнения операции (%1 данных в базе-корреспонденте)...'", ОбщегоНазначения.КодОсновногоЯзыка()); + Сообщение = СтрШаблон(ШаблонСообщения, ДействиеВКорреспондентеСтрокой); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект,, Сообщение, Ложь); + + КонецЕсли; + + Возврат; + + КонецЕсли; + + Пока ПараметрыОбмена.ДлительнаяОперация Цикл // Замена рекурсии + + ОбменДаннымиСервер.Пауза(ПараметрыОбмена.ИнтервалОжиданияНаСервере); + + СтрокаСообщенияОбОшибке = ""; + + Параметры = Новый Структура; + Параметры.Вставить("OperationID", ПараметрыОбмена.ИдентификаторОперации); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "GET", "GetContinuousOperationStatus", Параметры); + + Если ОтветЭтоОшибка(Ответ) Тогда + СостояниеОперации = ""; + Иначе + Тело = Ответ.ПолучитьТелоКакСтроку(); + Результат = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + СостояниеОперации = Результат["ActionState"]; + КонецЕсли; + + Если СостояниеОперации = "Active" Тогда + + ПараметрыОбмена.ИнтервалОжиданияНаСервере = Мин(ПараметрыОбмена.ИнтервалОжиданияНаСервере + 30, 180); + + ИначеЕсли СостояниеОперации = "Completed" Тогда + + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; + ПараметрыОбмена.ДлительнаяОперация = Ложь; + ПараметрыОбмена.ИдентификаторОперации = Неопределено; + + Иначе + + ВызватьИсключение СтрШаблон(НСтр("ru = 'Ошибка в базе-корреспонденте:%1 %2'"), Символы.ПС, СтрокаСообщенияОбОшибке); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьСообщениеОбмена() + + HTTPСоединение = HTTPСоединение(180); + + Если Не ЗначениеЗаполнено(Корреспондент) Тогда + СообщениеОбмена = ПолучитьФайлИзХранилищаВСервисе(HTTPСоединение, ШаблоныИменДляПолученияСообщения[0], 1024); + Возврат Истина; + КонецЕсли; + + Параметры = Новый Структура; + Параметры.Вставить("ExchangePlanName", ИмяПланаОбменаКорреспондента); + Параметры.Вставить("NodeCode", ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код); + Параметры.Вставить("TimeConsumingOperationAllowed", Истина); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "UploadData", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ЗагрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(); + + Результат = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ДлительнаяОперацияРазрешена = Истина; + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; + ПараметрыОбмена.ИдентификаторФайла = Результат["FileID"]; + ПараметрыОбмена.ДлительнаяОперация = Результат["TimeConsumingOperation"]; + ПараметрыОбмена.ИдентификаторОперации = Результат["OperationID"]; + + Если ПараметрыОбмена.ДлительнаяОперация Тогда + + ОжиданиеЗавершенияОперации(HTTPСоединение, ПараметрыОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + КонецЕсли; + + УИДФайлаСообщения = Новый УникальныйИдентификатор(ПараметрыОбмена.ИдентификаторФайла); + + СообщениеОбмена = ПолучитьФайлИзХранилищаВСервисе(HTTPСоединение, УИДФайлаСообщения, 1024); + + Если ОтветЭтоОшибка(Ответ, "ЗагрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьФайлИзХранилищаВСервисе(HTTPСоединение, Знач ИдентификаторФайла, Знач РазмерЧасти = 1024) Экспорт + + // Возвращаемое значение функции. + ИмяФайлаРезультата = ""; + + Параметры = Новый Структура; + Параметры.Вставить("FileID", ИдентификаторФайла); + Параметры.Вставить("BlockSize", Формат(РазмерЧасти, "ЧГ=")); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "POST", "PrepareGetFile", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ЗагрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(); + + Результат = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + ИдентификаторСессии = Результат["SessionID"]; + КоличествоЧастей = Результат["PartCount"]; + + ИменаФайлов = Новый Массив; + + КаталогСборки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(КаталогСборки); + + ШаблонИмениФайла = "data.zip.[n]"; + + ШаблонСообщения = НСтр("ru = 'Начало получения сообщения обмена из Интернета (количество частей файла %1).'"); + Сообщение = СтрШаблон(ШаблонСообщения, Формат(КоличествоЧастей, "ЧН=0; ЧГ=0")); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных", Сообщение, Ложь); + + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = Неопределено; // ДвоичныеДанные + + Параметры = Новый Структура; + Параметры.Вставить("SessionID", ИдентификаторСессии); + Параметры.Вставить("PartNumber", НомерЧасти); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "GET", "GetFilePart", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ЗагрузкаДанных") Тогда + + Параметры = Новый Структура; + Параметры.Вставить("SessionID", ИдентификаторСессии); + + ВыполнитьHTTPЗапрос(HTTPСоединение, "DELETE", "ReleaseFile", Параметры); + + Возврат Ложь; + + Иначе + + ДанныеЧасти = Ответ.ПолучитьТелоКакДвоичныеДанные(); + + КонецЕсли; + + ИмяФайла = СтрЗаменить(ШаблонИмениФайла, "[n]", Формат(НомерЧасти, "ЧГ=0")); + ИмяФайлаЧасти = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ИмяФайла); + + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + + КонецЦикла; + + ДанныеЧасти = Неопределено; + + Параметры = Новый Структура; + Параметры.Вставить("SessionID", ИдентификаторСессии); + + Ответ = ВыполнитьHTTPЗапрос(HTTPСоединение, "DELETE", "ReleaseFile", Параметры); + + Если ОтветЭтоОшибка(Ответ, "ЗагрузкаДанных") Тогда + Возврат Ложь; + КонецЕсли; + + ИмяАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, "data.zip"); + + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Если Разархиватор.Элементы.Количество() = 0 Тогда + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + КонецПопытки; + ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); + КонецЕсли; + + // Протоколирование событий обмена. + ФайлАрхива = Новый Файл(ИмяАрхива); + + ШаблонСообщения = НСтр("ru = 'Окончание получения сообщения обмена из Интернета (размер сжатого сообщения обмена %1 Мб).'"); + Сообщение = СтрШаблон(ШаблонСообщения, Формат(Окр(ФайлАрхива.Размер() / 1024 / 1024, 3), "ЧН=0; ЧГ=0")); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных", Сообщение, Ложь); + + ЭлементАрхива = Разархиватор.Элементы.Получить(0); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогСборки, ЭлементАрхива.Имя); + + Разархиватор.Извлечь(ЭлементАрхива, КаталогСборки); + Разархиватор.Закрыть(); + + Файл = Новый Файл(ИмяФайла); + + ВременныйКаталог = ПолучитьИмяВременногоФайла(); //АПК:441 удаление каталога происходит при получении данных обмена в другой ИБ + СоздатьКаталог(ВременныйКаталог); + + ИмяФайлаРезультата = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ВременныйКаталог, Файл.Имя); + + ПереместитьФайл(ИмяФайла, ИмяФайлаРезультата); + + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + КонецПопытки; + + Возврат ИмяФайлаРезультата; + +КонецФункции + +Функция HTTPСоединение(Таймаут = 20) + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресВебСервиса); + + Если НРег(СтруктураURI.Схема) = НРег("https") Тогда + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + Иначе + ЗащищенноеСоединение = Неопределено; + КонецЕсли; + + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси(СтруктураURI.Схема); + КонецЕсли; + + Возврат Новый HTTPСоединение(СтруктураURI.ИмяСервера,,ИмяПользователя, Пароль, Прокси, Таймаут, ЗащищенноеСоединение); + +КонецФункции + +Функция ВыполнитьHTTPЗапрос(HTTPСоединение, ВидЗапроса, Метод, Параметры = Неопределено, Тело = Неопределено) + + СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресВебСервиса); + + АдресРесурсаШаблон = "/%1/hs/exchange_dsl_1_0_0_1/v1/%2?%3"; + ПараметрыСтрокой = ""; + + Если ЗначениеЗаполнено(Параметры) Тогда + + Для Каждого КлючИЗначение Из Параметры Цикл + + Если ПараметрыСтрокой <> "" Тогда + ПараметрыСтрокой = ПараметрыСтрокой + "&" + КонецЕсли; + + ПараметрыСтрокой = ПараметрыСтрокой + КлючИЗначение.Ключ + "=" + КлючИЗначение.Значение + + КонецЦикла; + + КонецЕсли; + + АдресРесурса = СтрШаблон(АдресРесурсаШаблон, СтруктураURI.ПутьНаСервере, Метод, ПараметрыСтрокой); + + Заголовки = Новый Соответствие(); + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Если ТипЗнч(Тело) = Тип("Строка") Тогда + Запрос.УстановитьТелоИзСтроки(Тело); + ИначеЕсли ТипЗнч(Тело) = Тип("ДвоичныеДанные") Тогда + Запрос.УстановитьТелоИзДвоичныхДанных(Тело); + КонецЕсли; + + Если НРег(ВидЗапроса) = "post" Тогда + Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос); + ИначеЕсли НРег(ВидЗапроса) = "get" Тогда + Ответ = HTTPСоединение.Получить(Запрос); + ИначеЕсли НРег(ВидЗапроса) = "delete" Тогда + Ответ = HTTPСоединение.Удалить(Запрос); + КонецЕсли; + + Возврат Ответ; + +КонецФункции + +Функция ОтветЭтоОшибка(Ответ, ДействиеПриОбмене = Неопределено) + + Если Ответ.КодСостояния <> 200 Тогда + + Тело = Ответ.ПолучитьТелоКакСтроку(); + + Попытка + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + Исключение + СообщениеОбОшибке = Тело; + КонецПопытки; + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + + Возврат Истина; + + Иначе + + Возврат Ложь; + + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщенияОбмена = Неопределено; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ТранспортСообщенийОбменаHTTP.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ТранспортСообщенийОбменаHTTP.mdo new file mode 100644 index 000000000..fdb6f143d --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаHTTP/ТранспортСообщенийОбменаHTTP.mdo @@ -0,0 +1,97 @@ + + + + + + + ТранспортСообщенийОбменаHTTP + + ru + Транспорт сообщений обмена HTTP + + DataProcessor.ТранспортСообщенийОбменаHTTP.Form.Форма + true + + + ru + + + + АдресВебСервиса + + ru + Адрес + + + String + + + + + + + ИмяПользователя + + ru + Имя пользователя + + + String + + + + + + + Пароль + + ru + Пароль + + + String + + + + + + + ЗапомнитьПароль + + ru + Запомнить пароль + + + Boolean + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаАутентификации + + ru + Форма аутентификации + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/Форма/Form.form new file mode 100644 index 000000000..f8bee0e45 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаSM + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..57018d1f9 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаНастройки/Form.form @@ -0,0 +1,284 @@ + + + + ОбластьДанныхКорреспондента + 24 + true + true + + true + + + Объект.ОбластьДанныхКорреспондента + + + ОбластьДанныхКорреспондентаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ОбластьДанныхКорреспондентаКонтекстноеМеню + 25 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НаименованиеКорреспондента + 27 + true + true + + true + + + Объект.НаименованиеКорреспондента + + + НаименованиеКорреспондентаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + НаименованиеКорреспондентаКонтекстноеМеню + 28 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + КонечнаяТочкаКорреспондентаПредставление + 36 + + <key>ru</key> + <value>Конечная точка корреспондента</value> + + true + true + + true + + + КонечнаяТочкаКорреспондентаПредставление + + + КонечнаяТочкаКорреспондентаПредставлениеРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + КонечнаяТочкаКорреспондентаПредставлениеКонтекстноеМеню + 37 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ВнутренняяПубликация + 30 + true + true + + true + + + Объект.ВнутренняяПубликация + + Right + + ВнутренняяПубликацияРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ВнутренняяПубликацияКонтекстноеМеню + 31 + true + + CheckBoxField + true + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаSM + + + true + + + true + +
                  true
                  +
                  + + КонечнаяТочкаКорреспондентаПредставление + + <key>ru</key> + <value>Конечная точка корреспондента</value> + + 2 + + String + + + + true + + + true + + + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..a2e8cf010 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/ТранспортСообщенийОбменаSM/Forms/ФормаПервойНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаПервойНастройки/Form.form new file mode 100644 index 000000000..a94c4ae23 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаПервойНастройки/Form.form @@ -0,0 +1,1200 @@ + + + + ГруппаМоиПриложения + 11 + + ГруппаКоманднаяПанельСписокПриложений + 13 + + ГруппаКоманднаяПанельСписокПриложенийСлева + 15 + + ПриложенияВСервисеОбновитьСписокДоступныхПриложений + 17 + + <key>ru</key> + <value>Обновить</value> + + true + true + + true + + + ПриложенияВСервисеОбновитьСписокДоступныхПриложенийРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.ОбновитьСписокДоступныхПриложений + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель список приложений слева</value> + + false + + ГруппаКоманднаяПанельСписокПриложенийСлеваРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + CommandBar + + Left + + + + ПанельПриложенияВСервисе + 19 + + СтраницаПриложенияВСервисеОжидание + 21 + + ДекорацияПриложенияОжиданиеКартинка + 23 + + <key>ru</key> + <value>Декорация приложения ожидание картинка</value> + + true + true + + true + + + ДекорацияПриложенияОжиданиеКартинкаРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ДекорацияПриложенияОжиданиеКартинкаКонтекстноеМеню + 24 + true + + true + true + + + CommonPicture.ДлительнаяОперация16 + + + + + ДекорацияПриложенияОжиданиеНадпись + 26 + + <key>ru</key> + <value>Выполняется получение списка доступных приложений...</value> + + true + true + + true + + + ДекорацияПриложенияОжиданиеНадписьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ДекорацияПриложенияОжиданиеНадписьКонтекстноеМеню + 27 + true + + Label + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница приложения в сервисе ожидание</value> + + + СтраницаПриложенияВСервисеОжиданиеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + + СтраницаПриложенияВСервисеОшибка + 29 + + ДекорацияПриложенияОшибкаКартинка + 31 + + <key>ru</key> + <value>Декорация приложения ошибка картинка</value> + + true + true + + true + + + ДекорацияПриложенияОшибкаКартинкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ДекорацияПриложенияОшибкаКартинкаКонтекстноеМеню + 32 + true + + true + true + + + CommonPicture.Предупреждение + + + + + ДекорацияПриложенияОшибкаНадпись + 34 + + <key>ru</key> + <value>Не удалось получить список доступных приложений.</value> + + true + true + + true + + + ДекорацияПриложенияОшибкаНадписьРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ДекорацияПриложенияОшибкаНадписьКонтекстноеМеню + 35 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница приложения в сервисе ошибка</value> + + + СтраницаПриложенияВСервисеОшибкаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Page + + AlwaysHorizontal + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Панель приложения в сервисе</value> + + + ПанельПриложенияВСервисеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Командная панель список приложений</value> + + + ГруппаКоманднаяПанельСписокПриложенийРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Center + true + true + Auto + Auto + + + + ПриложенияВСервисе + 37 + + <key>ru</key> + <value>Приложения в сервисе</value> + + true + true + + true + + + ПриложенияВСервисе + + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + MoveDown + MoveUp + ShowRowRearrangement + + ПриложенияВСервисеНаименованиеПриложения + 50 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + ПриложенияВСервисе.НаименованиеПриложения + + + ПриложенияВСервисеНаименованиеПриложенияРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ПриложенияВСервисеНаименованиеПриложенияКонтекстноеМеню + 51 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриложенияВСервисеПрефикс + 53 + + <key>ru</key> + <value>Префикс</value> + + true + + true + + + ПриложенияВСервисе.Префикс + + + ПриложенияВСервисеПрефиксРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ПриложенияВСервисеПрефиксКонтекстноеМеню + 54 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПриложенияВСервисеОбластьДанных + 56 + + <key>ru</key> + <value>Область данных</value> + + true + true + + true + + + ПриложенияВСервисе.ОбластьДанных + + + ПриложенияВСервисеОбластьДанныхРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ПриложенияВСервисеОбластьДанныхКонтекстноеМеню + 57 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ПриложенияВСервисеКоманднаяПанель + 39 + Left + true + + + OnActivateRow + ПриложенияВСервисеПриАктивизацииСтроки + + + ПриложенияВСервисеСтрокаПоиска + 41 + + ПриложенияВСервисеСтрокаПоискаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ПриложенияВСервисеСтрокаПоискаКонтекстноеМеню + 42 + true + + ПриложенияВСервисе + + true + + + + ПриложенияВСервисеСостояниеПросмотра + 44 + + ПриложенияВСервисеСостояниеПросмотраРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ПриложенияВСервисеСостояниеПросмотраКонтекстноеМеню + 45 + true + + ViewStatusAddition + ПриложенияВСервисе + + true + + + + ПриложенияВСервисеУправлениеПоиском + 47 + + ПриложенияВСервисеУправлениеПоискомРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ПриложенияВСервисеУправлениеПоискомКонтекстноеМеню + 48 + true + + SearchControlAddition + ПриложенияВСервисе + + true + + + + ПриложенияВСервисеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + ПриложенияВСервисеКонтекстноеМеню + 38 + true + + true + true + true + true + true + true +
                  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> + + + ГруппаМоиПриложенияРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualGroup + + Vertical + Button + WeakSeparation + true + true + Auto + Auto + +
                  + + ВнутренняяПубликация + 59 + true + + true + + + Объект.ВнутренняяПубликация + + Right + + ВнутренняяПубликацияРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ВнутренняяПубликацияКонтекстноеМеню + 60 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаГотово + 1 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.Готово + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + ПриложенияВСервисе + + <key>ru</key> + <value>Приложения в сервисе</value> + + 2 + + ValueTable + + + true + + + true + + + НаименованиеПриложения + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + Префикс + + <key>ru</key> + <value>Префикс</value> + + 2 + + String + + 2 + + + + true + + + true + + + + РольКорреспондента + 3 + + String + + + + true + + + true + + + + ИмяПланаОбмена + 4 + + String + + + + true + + + true + + + + ФорматОбмена + 5 + + String + + + + true + + + true + + + + ВерсияКорреспондента + 6 + + String + + + + true + + + true + + + + ОбластьДанных + + <key>ru</key> + <value>Область данных</value> + + 7 + + Number + + 10 + true + + + + true + + + true + + + + КонечнаяТочкаКорреспондента + 8 + + DefinedType.КонечнаяТочкаОбменаСообщениями + + + true + + + true + + + + КартинкаРежимИспользования + 9 + + Number + + 10 + + + + true + + + true + + + + НастройкаСинхронизацииНедоступна + 10 + + Boolean + + + true + + + true + + + + ИдентификаторНастройки + 11 + + String + + + + true + + + true + + + + ПрефиксКорреспондента + 12 + + String + + + + true + + + true + + + + СообщениеОбОшибке + 14 + + String + + + + true + + + true + + + + ДоступенExchangeAdministrationManage_3_0_1_1 + 15 + + Boolean + + + true + + + true + + + + КонечнаяТочка + 13 + + DefinedType.КонечнаяТочкаОбменаСообщениями + + + true + + + true + + + + + ИмяПланаОбмена + 3 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений + 4 + + + true + + + true + + + + ПараметрыОбработчикаПолученияСпискаПриложений + 5 + + + true + + + true + + + + ИдентификаторНастройки + 6 + + String + + + + true + + + true + + + + ФорматОбмена + 7 + + String + + + + true + + + true + + + + ПараметрыОбработчикаПроверкиПодключения + 8 + + + true + + + true + + + + НаименованиеКорреспондента + 9 + + String + + + + true + + + true + + + + Удалить_ПрефиксОбластиКорреспондента + 10 + + String + + + + true + + + true + + + + Удалить_КонечнаяТочка + 11 + + String + + + + true + + + true + + + + Удалить_КонечнаяТочкаКорреспондента + 12 + + String + + + + true + + + true + + + + ОбластьДанныхКорреспондента + 13 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжиданияПроверкиПодключения + 14 + + + true + + + true + + + + ПроверкаПодключенияВыполнена + 15 + + String + + + + true + + + true + + + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаSM + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ОбновитьСписокДоступныхПриложений + + <key>ru</key> + <value>Обновить</value> + + 3 + + ru + Обновить список доступных приложений + + + true + + + StdPicture.Refresh + + + + ОбновитьСписокДоступныхПриложений + + + TextPicture + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаПервойНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаПервойНастройки/Module.bsl new file mode 100644 index 000000000..e2cb4ac50 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Forms/ФормаПервойНастройки/Module.bsl @@ -0,0 +1,228 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("НастройкиПодключения") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.НастройкиПодключения); + + Параметры.Свойство("ИдентификаторНастройки", ИдентификаторНастройки); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + НачатьПолучениеСпискаПриложенийДляПодключения(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ПриложенияВСервисеПриАктивизацииСтроки(Элемент) + + ТекущиеДанные = Элементы.ПриложенияВСервисе.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Объект.ВнутренняяПубликация = ТекущиеДанные.ДоступенExchangeAdministrationManage_3_0_1_1; + Объект.КонечнаяТочка = ТекущиеДанные.КонечнаяТочка; + Объект.КонечнаяТочкаКорреспондента = ТекущиеДанные.КонечнаяТочкаКорреспондента; + Объект.НаименованиеКорреспондента = ТекущиеДанные.НаименованиеПриложения; + Объект.ОбластьДанныхКорреспондента = ТекущиеДанные.ОбластьДанных; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСписокДоступныхПриложений(Команда) + + НачатьПолучениеСпискаПриложенийДляПодключения(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +#Область ПолучениеСпискаПриложенийДляПодключения + +&НаКлиенте +Процедура НачатьПолучениеСпискаПриложенийДляПодключения() + + Элементы.ПанельПриложенияВСервисе.Видимость = Истина; + Элементы.ПриложенияВСервисе.Доступность = Ложь; + Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Ложь; + Элементы.ВнутренняяПубликация.Доступность = Ложь; + Элементы.ФормаГотово.Доступность = Ложь; + + Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОжидание; + ПодключитьОбработчикОжидания("ПриНачалеПолученияСпискаПриложенийДляПодключения", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриНачалеПолученияСпискаПриложенийДляПодключения() + + ПараметрыОбработчикаПолученияСпискаПриложений = Неопределено; + ПродолжитьОжидание = Ложь; + + ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания( + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + + ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); + Иначе + ПриЗавершенииПолученияСпискаПриложенийДляПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключения() + + ПродолжитьОжидание = Ложь; + ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); + + Если ПродолжитьОжидание Тогда + ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияПолученияСпискаПриложений); + + ПодключитьОбработчикОжидания("ПриОжиданииПолученияСпискаПриложенийДляПодключения", + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений.ТекущийИнтервал, Истина); + Иначе + ПараметрыОбработчикаОжиданияПолученияСпискаПриложений = Неопределено; + ПриЗавершенииПолученияСпискаПриложенийДляПодключения(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключения() + + Отказ = Ложь; + ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ); + + Элементы.ПриложенияВСервисеОбновитьСписокДоступныхПриложений.Доступность = Истина; + Элементы.ПриложенияВСервисе.Доступность = Истина; + Элементы.ВнутренняяПубликация.Доступность = Истина; + Элементы.ФормаГотово.Доступность = Истина; + + Если Отказ Тогда + Элементы.ПанельПриложенияВСервисе.ТекущаяСтраница = Элементы.СтраницаПриложенияВСервисеОшибка; + Иначе + Элементы.ПанельПриложенияВСервисе.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриНачалеПолученияСпискаПриложенийДляПодключенияНаСервере(ПродолжитьОжидание) + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); + + Если МодульПомощникНастройки = Неопределено Тогда + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + + ПараметрыПомощника = Новый Структура; + ПараметрыПомощника.Вставить("Режим", "НеНастроенныеОбмены"); + ПараметрыПомощника.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + + Если ЗначениеЗаполнено(ФорматОбмена) Тогда + ПараметрыПомощника.Вставить("ФорматОбмена", ФорматОбмена); + Иначе + ПараметрыПомощника.Вставить("ФорматОбмена", ИмяПланаОбмена); + КонецЕсли; + ПараметрыПомощника.Вставить("ИдентификаторНастройки", ИдентификаторНастройки); + + МодульПомощникНастройки.ПриНачалеПолученияСпискаПриложений(ПараметрыПомощника, + ПараметрыОбработчикаПолученияСпискаПриложений, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОжиданииПолученияСпискаПриложенийДляПодключенияНаСервере(ПараметрыОбработчика, ПродолжитьОжидание) + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); + + Если МодульПомощникНастройки = Неопределено Тогда + ПродолжитьОжидание = Ложь; + Возврат; + КонецЕсли; + + МодульПомощникНастройки.ПриОжиданииПолученияСпискаПриложений( + ПараметрыОбработчика, ПродолжитьОжидание); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗавершенииПолученияСпискаПриложенийДляПодключенияНаСервере(Отказ = Ложь) + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); + + Если МодульПомощникНастройки = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + СтатусЗавершения = Неопределено; + МодульПомощникНастройки.ПриЗавершенииПолученияСпискаПриложений( + ПараметрыОбработчикаПолученияСпискаПриложений, СтатусЗавершения); + + Если СтатусЗавершения.Отказ Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + ТаблицаПриложений = СтатусЗавершения.Результат; // ТаблицаЗначений + + ТаблицаПриложений.Колонки.Добавить("КартинкаРежимИспользования", Новый ОписаниеТипов("Число")); + ТаблицаПриложений.ЗаполнитьЗначения(1, "КартинкаРежимИспользования"); // приложение в Интернете + ПриложенияВСервисе.Загрузить(ТаблицаПриложений); + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Help/ru.html new file mode 100644 index 000000000..d425e8cae --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/Help/ru.html @@ -0,0 +1,3 @@ + +

                  Данный вариант подключения позволяет настроить синхронизацию между приложениями (областями), которые находятся в сервисе.

                  +

                  При настройке необходимо выбрать доступное приложение из списка и выполнить по шагам инструкции помощника подключения.

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ManagerModule.bsl new file mode 100644 index 000000000..8effa9e81 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ManagerModule.bsl @@ -0,0 +1,172 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Обмен через управляющую программу в сервисе (Менеджер сервиса).'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Обмен с приложением в сервисе'"); + Параметры.ИдентификаторТранспорта = "SM"; + Параметры.Описание = Описание; + Параметры.ИмяФормыПервойНастройки = "ФормаПервойНастройки"; + Параметры.ЗапускОбменаИзКорреспондента = Истина; + Параметры.ИспользоватьПрогресс = Ложь; + Параметры.РежимРаботыПриложения = 1; + Параметры.ПрямоеПодключение = Истина; + Параметры.СохранитьПараметрыПодключенияВФайл = Ложь; + Параметры.Картинка = БиблиотекаКартинок.ТранспортFresh; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + РеквизитыУзла = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( + НастройкиПодключения.УзелИнформационнойБазы, "Код,НомерПринятого,НомерОтправленного"); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыНастройки"); // @Non-NLS + ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", ТранспортСообщенийОбмена.ВерсияФорматаНастроекОбменаДаннымиXML()); // @Non-NLS + + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); + + // Параметры подключения + ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); // @Non-NLS + + ИмяПланаОбмена = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(НастройкиПодключения.ИмяПланаОбмена, "ru"); + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, ИмяПланаОбмена, "ИмяПланаОбмена"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеВторойБазы"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.КодУзла, "КодНовогоУзлаВторойБазы"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); // @Non-NLS + + // Настройки транспорта сообщений обмена + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, Неопределено, "ВидТранспортаСообщенийОбмена"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, "", "ПарольАрхиваСообщенияОбмена"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, Ложь, "ТранслитерацияИмениФайловСообщенийОбмена"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, "", "FILEКаталогОбменаИнформацией"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, Ложь, "FILEСжиматьФайлИсходящегоСообщения"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, Ложь, "ИспользоватьПараметрыТранспортаEMAIL"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, Истина, "ИспользоватьПараметрыТранспортаFILE"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, Ложь, "ИспользоватьПараметрыТранспортаFTP"); // @Non-NLS + + // Поддержка файла настроек обмена формата версии 1.0. + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.КодУзла, "КодНовогоУзла"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, РеквизитыУзла.Код, "КодПредопределенногоУзла"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, РеквизитыУзла.НомерОтправленного, "НомерОтправленного"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, РеквизитыУзла.НомерПринятого, "НомерПринятого"); // @Non-NLS + + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.WSКонечнаяТочкаКорреспондента, "WSКонечнаяТочкаКорреспондента"); // @Non-NLS + ТранспортСообщенийОбмена.ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.WSОбластьДанныхКорреспондента, "WSОбластьДанныхКорреспондента"); // @Non-NLS + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ОсновныеПараметрыОбмена + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + ТранспортСообщенийОбмена.ЗаписатьПараметрыОбменаXDTO(ЗаписьXML, НастройкиПодключения.ИмяПланаОбмена); + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыНастройки + + Возврат ЗаписьXML.Закрыть(); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Настройки = Новый Структура; + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(ТекстXML); + + Фабрика = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML); + + Если Фабрика.Свойства().Получить("ОсновныеПараметрыОбмена") <> Неопределено Тогда + + ОсновныеПараметры = Новый Структура; + ОсновныеПараметрыXDTO = Фабрика["ОсновныеПараметрыОбмена"]; // @Non-NLS + Для Каждого Свойство Из ОсновныеПараметрыXDTO.Свойства() Цикл + ОсновныеПараметры.Вставить(Свойство.Имя, ОсновныеПараметрыXDTO[Свойство.Имя]); + КонецЦикла; + + Настройки.Вставить("ИмяПланаОбмена", ОсновныеПараметры["ИмяПланаОбмена"]); // @Non-NLS-2 + Настройки.Вставить("НаименованиеВторойБазы", ОсновныеПараметры["НаименованиеВторойБазы"]); // @Non-NLS-2 + Настройки.Вставить("НаименованиеЭтойБазы", ОсновныеПараметры["НаименованиеЭтойБазы"]); // @Non-NLS-2 + Настройки.Вставить("КодНовогоУзлаВторойБазы", ОсновныеПараметры["КодНовогоУзлаВторойБазы"]); // @Non-NLS-2 + Настройки.Вставить("ПрефиксИнформационнойБазыИсточника", ОсновныеПараметры["ПрефиксИнформационнойБазыИсточника"]); // @Non-NLS-2 + + Настройки.Вставить("НаименованиеНастройкиВыполненияОбмена", ОсновныеПараметры["НаименованиеНастройкиВыполненияОбмена"]); // @Non-NLS-2 + Настройки.Вставить("КодНовогоУзла", ОсновныеПараметры["КодНовогоУзла"]); // @Non-NLS-2 + Настройки.Вставить("КодПредопределенногоУзла", ОсновныеПараметры["КодПредопределенногоУзла"]); // @Non-NLS-2 + Настройки.Вставить("ИдентификаторТранспорта", "SM"); + + ТранспортСообщенийОбмена.СкопироватьЗначениеСтруктуры(ОсновныеПараметры, "НомерОтправленного", Настройки, "НомерОтправленного"); // @Non-NLS-1 + ТранспортСообщенийОбмена.СкопироватьЗначениеСтруктуры(ОсновныеПараметры, "НомерПринятого", Настройки, "НомерПринятого"); // @Non-NLS-1 + + КонецЕсли; + + Если Фабрика.Свойства().Получить("ПараметрыОбменаXDTO") <> Неопределено Тогда + + ПараметрыОбмена = Новый Структура; + ПараметрыОбменаXDTO = Фабрика["ПараметрыОбменаXDTO"]; + Для Каждого Свойство Из ПараметрыОбменаXDTO.Свойства() Цикл + ПараметрыОбмена.Вставить(Свойство.Имя, ПараметрыОбменаXDTO[Свойство.Имя]); + КонецЦикла; + + Настройки.Вставить("ФорматОбмена", ПараметрыОбменаXDTO["ФорматОбмена"]); // @Non-NLS-2 + + КонецЕсли; + + Возврат Настройки; + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ObjectModule.bsl new file mode 100644 index 000000000..95a49cf7f --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ObjectModule.bsl @@ -0,0 +1,771 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Результат = Истина; + + Попытка + + Если ВнутренняяПубликация Тогда + Результат = ВнутренняяПубликация_ОтправитьСообщение(СообщениеДляСопоставленияДанных); + Иначе + Результат = МенеджерСервиса_ОтправитьСообщение(СообщениеДляСопоставленияДанных); + КонецЕсли; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + Результат = МенеджерСервиса_ПолучитьСообщение(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Если ВнутренняяПубликация Тогда + Результат = ВнутренняяПубликация_ПараметрыКорреспондента(); + Иначе + Результат = МенеджерСервиса_ПараметрыКорреспондента(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Если ВнутренняяПубликация Тогда + Результат = ВнутренняяПубликация_СохранитьНастройкиВКорреспонденте(НастройкиПодключения); + Иначе + Результат = МенеджерСервиса_СохранитьНастройкиВКорреспонденте(НастройкиПодключения); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.УдалитьНастройкуСинхронизацииВКорреспонденте +Функция УдалитьНастройкуСинхронизацииВКорреспонденте() Экспорт + + Если ВнутренняяПубликация Тогда + + Возврат ВнутренняяПубликация_УдалитьНастройкуСинхронизацииВКорреспонденте(); + + Иначе + + Возврат Истина; + + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ВнутренняяПубликация_ПараметрыКорреспондента() + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбмена); + + МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); + ПараметрыПодключения = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(КонечнаяТочкаКорреспондента); + + Попытка + + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецПопытки; + + ВерсияИнтерфейса = ОбменДаннымиВебСервис.МаксимальнаяОбщаяВерсияИнтерфейсаОбмена(ВерсииКорреспондента); + + Если НЕ СтрНайти("3.0.2.1, 3.0.2.2", ВерсияИнтерфейса) Тогда + + СообщениеОбОшибке = НСтр("ru = 'Корреспондент не поддерживает версию интерфейса 3.0.2.x ""ОбменДанными"". + |Для настройки подключения обновите конфигурацию корреспондента.'"); + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + Прокси = ВнутренняяПубликация_Прокси(); + + Если Прокси = Неопределено Тогда + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); + КонецЕсли; + + КодЭтогоУзла = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код; + + ПараметрыИБ = ОбменДаннымиВебСервис.ПолучитьПараметрыИБ( + Прокси, ИмяПланаОбмена, КодЭтогоУзла, СообщениеОбОшибке, ОбластьДанныхКорреспондента, ДополнительныеПараметры); + + ПараметрыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(ПараметрыИБ); + + Если Не ПараметрыКорреспондента.ПланОбменаСуществует Тогда + + Текст = НСтр("ru = 'В корреспонденте не найден план обмена ""%1"". + |Убедитесь, что + | - выбран правильный вид приложения для настройки обмена; + | - указан правильный адрес приложения в Интернете.'"); + + СообщениеОбОшибке = СтрШаблон(Текст, ИмяПланаОбмена); + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + Результат.ПараметрыКорреспондентаПолучены = Истина; + Результат.ПараметрыКорреспондента = ПараметрыКорреспондента; + Результат.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; + Результат.ПодключениеУстановлено = Истина; + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ТранспортСообщенийОбмена.ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, ВерсияИнтерфейса, СообщениеОбОшибке); + + Если Отказ Тогда + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + ТранспортСообщенийОбмена.ПроверитьДублированиеСинхронизаций(ИмяПланаОбмена, ПараметрыКорреспондента, Результат); + + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +Функция ВнутренняяПубликация_СохранитьНастройкиВКорреспонденте(НастройкиПодключения) + + Прокси = ВнутренняяПубликация_Прокси(); + + Если Прокси = Неопределено Тогда + + Возврат Ложь; + + КонецЕсли; + + НастройкиПодключенияКорреспондента = Новый Структура; + Для Каждого ЭлементНастройки Из НастройкиПодключения Цикл + НастройкиПодключенияКорреспондента.Вставить(ЭлементНастройки.Ключ); + КонецЦикла; + + НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; + НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; + НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; + + ТаблицаОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( + НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", НастройкиПодключения.УзелИнформационнойБазы); + + НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = Новый ХранилищеЗначения(ТаблицаОбъекты, Новый СжатиеДанных(9)); + КонецЕсли; + + НастройкиПодключенияКорреспондента.WSКонечнаяТочкаКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Код"); + НастройкиПодключенияКорреспондента.WSОбластьДанныхКорреспондента = ПараметрыСеанса.ОбластьДанныхЗначение; + НастройкиПодключения.WSКонечнаяТочкаКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КонечнаяТочка, "Код"); + НастройкиПодключения.WSОбластьДанныхКорреспондента = ПараметрыСеанса.ОбластьДанныхЗначение; + + СтрокаНастроекПодключенияXML = Обработки.ТранспортСообщенийОбменаSM.НастройкиПодключенияВXML(НастройкиПодключения); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("НастройкиПодключения", НастройкиПодключенияКорреспондента); + ПараметрыПодключения.Вставить("СтрокаПараметровXML", СтрокаНастроекПодключенияXML); + + Попытка + ОбменДаннымиВебСервис.СоздатьУзелОбмена(Прокси, ПараметрыПодключения, ОбластьДанныхКорреспондента); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +Функция ВнутренняяПубликация_ОтправитьСообщение(СообщениеДляСопоставленияДанных) + + Прокси = ВнутренняяПубликация_Прокси(); + + Если Прокси = Неопределено Тогда + + Возврат Ложь; + + КонецЕсли; + + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( + Корреспондент, Перечисления.ДействияПриОбмене.ВыгрузкаДанных, "SM"); + + Отказ = Ложь; + СостояниеНастройки = ОбменДаннымиВебСервис.СостояниеНастройки( + Прокси, СтруктураНастроекОбмена, ОбластьДанныхКорреспондента, Отказ, СообщениеОбОшибке); + + Если Отказ Тогда + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецЕсли; + + ИдентификаторФайлаУИД = ОбменДаннымиВебСервис.ПоместитьФайлВХранилищеВСервисе( + Прокси, СообщениеОбмена, 1024,, ОбластьДанныхКорреспондента); + + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайлаУИД); + + Если СообщениеДляСопоставленияДанных + И (СостояниеНастройки.ПоддерживаетсяСопоставлениеДанных + Или Не СостояниеНастройки.НастройкаСинхронизацииДанныхЗавершена) Тогда + + ОбменДаннымиВебСервис.ПоместитьСообщениеДляСопоставленияДанных( + Прокси, СтруктураНастроекОбмена, ИдентификаторФайлаСтрокой, ОбластьДанныхКорреспондента); + + Иначе + + // + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ВнутренняяПубликация_УдалитьНастройкуСинхронизацииВКорреспонденте() + + Прокси = ВнутренняяПубликация_Прокси(); + + Если Прокси = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы(Корреспондент, "УдалениеУзла"); + + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(); + СтруктураНастроекОбмена.ДействиеПриОбмене = Неопределено; + + Попытка + ОбменДаннымиВебСервис.УдалитьУзелОбмена(Прокси, СтруктураНастроекОбмена, ОбластьДанныхКорреспондента); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +Функция МенеджерСервиса_ПараметрыКорреспондента() + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); + + Если МодульПомощникНастройки = Неопределено Тогда + ПродолжитьОжидание = Ложь; + Возврат Результат; + КонецЕсли; + + НастройкиПодключения = Новый Структура; + НастройкиПодключения.Вставить("ИмяПланаОбмена", ИмяПланаОбмена); + НастройкиПодключения.Вставить("НаименованиеКорреспондента", НаименованиеКорреспондента); + НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + ПродолжитьОжидание = Истина; + + ПараметрыОбработчика = Неопределено; + МодульПомощникНастройки.ПриНачалеПолученияОбщихДанныхУзловКорреспондента( + НастройкиПодключения, ПараметрыОбработчика, ПродолжитьОжидание); + + // Ожидание + ПараметрыОбработчикаОжидания = Неопределено; + ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + Пока ПродолжитьОжидание Цикл + + ОбменДаннымиСервер.Пауза(ПараметрыОбработчикаОжидания.ТекущийИнтервал); + ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + МодульПомощникНастройки.ПриОжиданииПолученияОбщихДанныхУзловКорреспондента(ПараметрыОбработчика, ПродолжитьОжидание); + + КонецЦикла; + + СтатусЗавершения = Неопределено; + МодульПомощникНастройки.ПриЗавершенииПолученияОбщихДанныхУзловКорреспондента( + ПараметрыОбработчика, СтатусЗавершения); + + ПараметрыОбработчика = Неопределено; + + Если СтатусЗавершения.Отказ Тогда + + СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Иначе + + ПроверкаПодключенияВыполнена = СтатусЗавершения.Результат.ПараметрыКорреспондентаПолучены; + + Если ПроверкаПодключенияВыполнена Тогда + Результат.ПодключениеУстановлено = Истина; + Результат.ПараметрыКорреспондента = СтатусЗавершения.Результат.ПараметрыКорреспондента; + КонецЕсли; + + КонецЕсли; + + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +Функция МенеджерСервиса_СохранитьНастройкиВКорреспонденте(НастройкиПодключения) + + УстановитьПривилегированныйРежим(Истина); + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникНастройкиСинхронизацииДанныхМеждуПриложениямиВИнтернете(); + + НастройкаXDTO = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена); + + НастройкиПодключенияМС = МодульПомощникНастройки.ОписаниеНастроекПодключения(НастройкаXDTO); + + НастройкиПодключенияМС.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; + НастройкиПодключенияМС.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; + НастройкиПодключенияМС.ИдентификаторНастройки = НастройкиПодключения.ИдентификаторНастройки; + НастройкиПодключенияМС.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + НастройкиПодключенияМС.Наименование = НастройкиПодключения.НаименованиеЭтойБазы; + НастройкиПодключенияМС.НаименованиеКорреспондента = НастройкиПодключения.НаименованиеВторойБазы; + НастройкиПодключенияМС.Префикс = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + НастройкиПодключенияМС.ПрефиксКорреспондента = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + НастройкиПодключенияМС.ИдентификаторИнформационнойБазыИсточника = НастройкиПодключения.ИдентификаторИнформационнойБазыИсточника; + НастройкиПодключенияМС.ИдентификаторИнформационнойБазыПриемника = НастройкиПодключения.ИдентификаторИнформационнойБазыПриемника; + НастройкиПодключенияМС.КонечнаяТочкаКорреспондента = КонечнаяТочкаКорреспондента; + НастройкиПодключенияМС.ОбластьДанныхКорреспондента = ОбластьДанныхКорреспондента; + + Если НастройкаXDTO Тогда + НастройкиXDTOКорреспондента = НастройкиПодключенияМС.НастройкиXDTOКорреспондента; + НастройкиXDTOКорреспондента.ПоддерживаемыеВерсии.Добавить(НастройкиПодключения.ВерсияФорматаОбмена); + НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты = НастройкиПодключения.ПоддерживаемыеОбъектыФорматаКорреспондента; + КонецЕсли; + + // Общие данные узлов. + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ОбновитьПрефиксы( + Корреспондент, + НастройкиПодключенияМС.Префикс, + НастройкиПодключенияМС.ПрефиксКорреспондента); + + ФактическийКодКорреспондента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Код"); + + КодЭтогоУзла = НастройкиПодключенияМС.ИдентификаторИнформационнойБазыИсточника; + + // Работа с настройками транспорта. + Параметры = Новый Структура; + Параметры.Вставить("Корреспондент", Корреспондент); + Параметры.Вставить("КодЭтогоУзла", КодЭтогоУзла); + Параметры.Вставить("КодКорреспондента", НастройкиПодключенияМС.ИдентификаторИнформационнойБазыПриемника); + Параметры.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); + Параметры.Вставить("ЭтоКорреспондент", Ложь); + Параметры.Вставить("РежимСовместимостиСБСП_2_0_0", Ложь); + Параметры.Вставить("ПсевдонимЭтогоУзла", ""); + + ОбменДаннымиВМоделиСервиса.ОбновитьНастройкиТранспортаОбластиДанных(Параметры); + + ИмяПланаОбменаСообщениями = "ОбменСообщениями"; + МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса"); + МенеджерПланаОбменСообщениями = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("ПланОбмена." + + ИмяПланаОбменаСообщениями); + + ПараметрыОбработчикаСессии = ПараметрыОбработчикаДлительнойОперации(); + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + + // Отправляем сообщение корреспонденту. + Сообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение( + СообщенияОбменаДаннымиУправлениеИнтерфейс.СообщениеНастроитьОбменШаг1()); + + Сообщение.Body.CorrespondentZone = НастройкиПодключенияМС.ОбластьДанныхКорреспондента; + + Сообщение.Body.ExchangePlan = НастройкиПодключенияМС.ИмяПланаОбмена; + Сообщение.Body.CorrespondentCode = НастройкиПодключенияМС.ИдентификаторИнформационнойБазыИсточника; + Сообщение.Body.CorrespondentName = НастройкиПодключенияМС.Наименование; + + Сообщение.Body.Code = НастройкиПодключенияМС.ИдентификаторИнформационнойБазыПриемника; + Сообщение.Body.EndPoint = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МенеджерПланаОбменСообщениями.ЭтотУзел(), "Код"); + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключенияМС.ИмяПланаОбмена) Тогда + ВерсииФормата = ОбщегоНазначения.ВыгрузитьКолонку( + ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена"), "Ключ", Истина); + + ОбъектыФормата = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( + ИмяПланаОбмена, "ОтправкаПолучение", Корреспондент); + + НастройкиXDTOКорреспондента = Новый Структура; + НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеВерсии", ВерсииФормата); + НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеОбъекты", + Новый ХранилищеЗначения(ОбъектыФормата, Новый СжатиеДанных(9))); + + Сообщение.Body.XDTOSettings = СериализаторXDTO.ЗаписатьXDTO(НастройкиXDTOКорреспондента); + КонецЕсли; + + ДополнительныеСвойства = Новый Структура; + ДополнительныеСвойства.Вставить("Интерфейс", "3.0.1.1"); + ДополнительныеСвойства.Вставить("Префикс", НастройкиПодключенияМС.ПрефиксКорреспондента); + ДополнительныеСвойства.Вставить("ПрефиксКорреспондента", НастройкиПодключенияМС.Префикс); + ДополнительныеСвойства.Вставить("ИдентификаторНастройки", НастройкиПодключенияМС.ИдентификаторНастройки); + + Сообщение.AdditionalInfo = СериализаторXDTO.ЗаписатьXDTO(ДополнительныеСвойства); + + ПараметрыОбработчикаСессии.ИдентификаторОперации = ОбменДаннымиВМоделиСервиса.ОтправитьСообщение(Сообщение); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + Информация = ИнформацияОбОшибке(); + + ПараметрыОбработчикаСессии.Отказ = Истина; + ПараметрыОбработчикаСессии.СообщениеОбОшибке = ОбработкаОшибок.КраткоеПредставлениеОшибки(Информация); + + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(Информация); + + ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + Возврат Ложь; + + КонецПопытки; + + Если Не ПараметрыОбработчикаСессии.Отказ Тогда + МодульСообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения(); + + ПараметрыОбработчикаСессии.ДлительнаяОперация = Истина; + ПараметрыОбработчикаСессии.ДополнительныеПараметры.Вставить( + "Корреспондент", Корреспондент); + КонецЕсли; + + ПараметрыОбработчика = ПараметрыОбработчикаДлительнойОперации(); + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("Корреспондент", Корреспондент); + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ОжиданиеСессииОбменаСообщениямиСистемы1"); + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("ПараметрыОбработчикаСессии", ПараметрыОбработчикаСессии); + ПараметрыОбработчика.ДополнительныеПараметры.Вставить("НастройкиПодключения", НастройкиПодключенияМС); + + ПродолжитьОжидание = Истина; + + ПараметрыОбработчикаОжидания = Неопределено; + ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + Пока ПродолжитьОжидание Цикл + + ОбменДаннымиСервер.Пауза(ПараметрыОбработчикаОжидания.ТекущийИнтервал); + ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + МодульПомощникНастройки.ПриОжиданииСохраненияНастроекПодключения( + ПараметрыОбработчика, ПродолжитьОжидание); + + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция МенеджерСервиса_ОтправитьСообщение(СообщениеДляСопоставленияДанных) + + МодульНастройкиТранспортаОбменаОбластиДанных = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных"); + НастройкиТранспортаОбластиДанных = МодульНастройкиТранспортаОбменаОбластиДанных.НастройкиТранспорта(Корреспондент); + + Если НастройкиТранспортаОбластиДанных.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + + Транспорт = Обработки.ТранспортСообщенийОбменаFILE.Создать(); + Транспорт.КаталогОбменаИнформацией = НастройкиТранспортаОбластиДанных.FILEКаталогОбменаИнформацией; + Транспорт.СжиматьФайлИсходящегоСообщения = НастройкиТранспортаОбластиДанных.FILEСжиматьФайлИсходящегоСообщения; + Транспорт.ПарольАрхиваСообщенияОбмена = НастройкиТранспортаОбластиДанных.ПарольАрхиваСообщенияОбмена; + + ИначеЕсли НастройкиТранспортаОбластиДанных.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + + Транспорт = Обработки.ТранспортСообщенийОбменаFTP.Создать(); + Транспорт.СжиматьФайлИсходящегоСообщения = НастройкиТранспортаОбластиДанных.FTPСжиматьФайлИсходящегоСообщения; + Транспорт.МаксимальныйДопустимыйРазмерСообщения = НастройкиТранспортаОбластиДанных.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения; + Транспорт.ПассивноеСоединение = НастройкиТранспортаОбластиДанных.FTPСоединениеПассивноеСоединение; + Транспорт.Пользователь = НастройкиТранспортаОбластиДанных.FTPСоединениеПользователь; + Транспорт.Порт = НастройкиТранспортаОбластиДанных.FTPСоединениеПорт; + Транспорт.Путь = НастройкиТранспортаОбластиДанных.FTPСоединениеПуть; + Транспорт.ПарольАрхиваСообщенияОбмена = НастройкиТранспортаОбластиДанных.ПарольАрхиваСообщенияОбмена; + Транспорт.Пароль = НастройкиТранспортаОбластиДанных.FTPСоединениеПароль; + + КонецЕсли; + + Транспорт.Корреспондент = Корреспондент; + Транспорт.ИмяСообщенияДляОтправки = ИмяСообщенияДляОтправки; + Транспорт.ВременныйКаталог = ВременныйКаталог; + Транспорт.СообщениеОбмена = СообщениеОбмена; + + РезультатОтправки = Транспорт.ОтправитьДанные(СообщениеДляСопоставленияДанных); + + Если НЕ РезультатОтправки Тогда + Возврат Ложь; + КонецЕсли; + + Если СообщениеДляСопоставленияДанных Тогда + + НастройкиВыгрузки = Новый Структура; + НастройкиВыгрузки.Вставить("Корреспондент", Корреспондент); + НастройкиВыгрузки.Вставить("ОбластьДанныхКорреспондента", ОбластьДанныхКорреспондента); + + ПараметрыОбработчика = Неопределено; + ПродолжитьОжидание = Истина; + + ПараметрыОбработчикаОжидания = Неопределено; + ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + МодульПомощникИнтерактивногоОбмена = ОбменДаннымиСервер.МодульПомощникИнтерактивногоОбменаДаннымиВМоделиСервиса(); + + МодульПомощникИнтерактивногоОбмена.ПриНачалеПомещенияДанныхДляСопоставления( + НастройкиВыгрузки, ПараметрыОбработчика, ПродолжитьОжидание); + + Пока ПродолжитьОжидание Цикл + + ОбменДаннымиСервер.Пауза(ПараметрыОбработчикаОжидания.ТекущийИнтервал); + ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + МодульПомощникИнтерактивногоОбмена.ПриОжиданииСессииОбменаСообщениямиСистемы( + ПараметрыОбработчика, ПродолжитьОжидание); + + КонецЦикла; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция МенеджерСервиса_ПолучитьСообщение() + + МодульНастройкиТранспортаОбменаОбластиДанных = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных"); + НастройкиТранспортаОбластиДанных = МодульНастройкиТранспортаОбменаОбластиДанных.НастройкиТранспорта(Корреспондент); + + Если НастройкиТранспортаОбластиДанных.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда + + Транспорт = Обработки.ТранспортСообщенийОбменаFILE.Создать(); + Транспорт.КаталогОбменаИнформацией = НастройкиТранспортаОбластиДанных.FILEКаталогОбменаИнформацией; + Транспорт.СжиматьФайлИсходящегоСообщения = НастройкиТранспортаОбластиДанных.FILEСжиматьФайлИсходящегоСообщения; + Транспорт.ПарольАрхиваСообщенияОбмена = НастройкиТранспортаОбластиДанных.ПарольАрхиваСообщенияОбмена; + + ИначеЕсли НастройкиТранспортаОбластиДанных.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда + + Транспорт = Обработки.ТранспортСообщенийОбменаFTP.Создать(); + Транспорт.СжиматьФайлИсходящегоСообщения = НастройкиТранспортаОбластиДанных.FTPСжиматьФайлИсходящегоСообщения; + Транспорт.МаксимальныйДопустимыйРазмерСообщения = НастройкиТранспортаОбластиДанных.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения; + Транспорт.ПассивноеСоединение = НастройкиТранспортаОбластиДанных.FTPСоединениеПассивноеСоединение; + Транспорт.Пользователь = НастройкиТранспортаОбластиДанных.FTPСоединениеПользователь; + Транспорт.Порт = НастройкиТранспортаОбластиДанных.FTPСоединениеПорт; + Транспорт.Путь = НастройкиТранспортаОбластиДанных.FTPСоединениеПуть; + Транспорт.ПарольАрхиваСообщенияОбмена = НастройкиТранспортаОбластиДанных.ПарольАрхиваСообщенияОбмена; + Транспорт.Пароль = НастройкиТранспортаОбластиДанных.FTPСоединениеПароль; + + КонецЕсли; + + Транспорт.Корреспондент = Корреспондент; + Транспорт.СообщениеОбмена = СообщениеОбмена; + Транспорт.ВременныйКаталог = ВременныйКаталог; + Транспорт.ШаблоныИменДляПолученияСообщения = ШаблоныИменДляПолученияСообщения; + + Результат = Транспорт.ПолучитьДанные(); + СообщениеОбмена = Транспорт.СообщениеОбмена; + + Возврат Результат; + +КонецФункции + +Процедура ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт + + ПараметрыОбработчикаОжидания.ТекущийИнтервал = Мин(ПараметрыОбработчикаОжидания.МаксимальныйИнтервал, + Окр(ПараметрыОбработчикаОжидания.ТекущийИнтервал * ПараметрыОбработчикаОжидания.КоэффициентУвеличенияИнтервала, 1)); + +КонецПроцедуры + +Процедура ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания) Экспорт + + ПараметрыОбработчикаОжидания = Новый Структура; + ПараметрыОбработчикаОжидания.Вставить("МинимальныйИнтервал", 1); + ПараметрыОбработчикаОжидания.Вставить("МаксимальныйИнтервал", 15); + ПараметрыОбработчикаОжидания.Вставить("ТекущийИнтервал", 1); + ПараметрыОбработчикаОжидания.Вставить("КоэффициентУвеличенияИнтервала", 1.4); + +КонецПроцедуры + +Функция ПараметрыОбработчикаДлительнойОперации(ФоновоеЗадание = Неопределено) + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ФоновоеЗадание", ФоновоеЗадание); + ПараметрыОбработчика.Вставить("Отказ", Ложь); + ПараметрыОбработчика.Вставить("СообщениеОбОшибке", ""); + ПараметрыОбработчика.Вставить("ДлительнаяОперация", Ложь); + ПараметрыОбработчика.Вставить("ИдентификаторОперации", Неопределено); + ПараметрыОбработчика.Вставить("АдресРезультата", Неопределено); + ПараметрыОбработчика.Вставить("ДополнительныеПараметры", Новый Структура); + + Возврат ПараметрыОбработчика; + +КонецФункции + +Функция ПодключениеУстановлено() Экспорт + + Возврат Истина; + +КонецФункции + +Функция ВнутренняяПубликация_Прокси() + + МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); + НастройкиТранспортаWS = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(КонечнаяТочкаКорреспондента); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("АдресВебСервиса", НастройкиТранспортаWS.WSURLВебСервиса); + ПараметрыПодключения.Вставить("ИмяПользователя", НастройкиТранспортаWS.WSИмяПользователя); + ПараметрыПодключения.Вставить("Пароль", НастройкиТранспортаWS.WSПароль); + + Прокси = ОбменДаннымиВебСервис.WSПрокси(ПараметрыПодключения, СообщениеОбОшибке); + + Если Прокси = Неопределено Тогда + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + КонецЕсли; + + Возврат Прокси; + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщениеОбмена = Неопределено; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ТранспортСообщенийОбменаSM.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ТранспортСообщенийОбменаSM.mdo new file mode 100644 index 000000000..263e6eb85 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаSM/ТранспортСообщенийОбменаSM.mdo @@ -0,0 +1,110 @@ + + + + + + + ТранспортСообщенийОбменаSM + + ru + Транспорт сообщений обмена SM + + DataProcessor.ТранспортСообщенийОбменаSM.Form.Форма + true + + + ru + + + + ВнутренняяПубликация + + ru + Внутренняя публикация + + + Boolean + + + + + + КонечнаяТочка + + ru + Конечная точка + + + DefinedType.КонечнаяТочкаОбменаСообщениями + + + + + + КонечнаяТочкаКорреспондента + + ru + Конечная точка корреспондента + + + DefinedType.КонечнаяТочкаОбменаСообщениями + + + + + + НаименованиеКорреспондента + + ru + Наименование корреспондента + + + String + + + + + + + ОбластьДанныхКорреспондента + + ru + Область данных корреспондента + + + Number + + 7 + + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаПервойНастройки + + ru + Форма первой настройки + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/Форма/Form.form new file mode 100644 index 000000000..bb16ca697 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаWS + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаАутентификации/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаАутентификации/Form.form new file mode 100644 index 000000000..bded5083a --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаАутентификации/Form.form @@ -0,0 +1,1021 @@ + + + + <key>ru</key> + <value>Аутентификация</value> + + + ВыполнениеПроверкиПодключения + 1 + + ЗапросПароляПользователя + 3 + + ГруппаЗапросаПароля + 5 + + Декорация2 + 7 + + <key>ru</key> + <value>Введите пароль для входа в приложение в Интернете</value> + + true + true + + true + + + Декорация2ExtendedTooltip + 9 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 8 + true + + Label + true + + Left + + + + ГруппаВводаПароля + 10 + + Пароль + 12 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + Пароль + + + ПарольРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 13 + true + + InputField + true + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + true + Normal + + + + ЗабылиПароль + 15 + + <key>ru</key> + <value>Забыли пароль?</value> + + true + true + + true + + + ЗабылиПарольExtendedTooltip + 16 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗабылиПароль + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Ввода пароля</value> + + + ГруппаВводаПароляРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Запроса пароля</value> + + + ГруппаЗапросаПароляРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + NormalSeparation + true + true + Auto + Auto + + + + ГруппаПредупрежденияДолгойСинхронизации + 17 + + ГруппаДекорацияПредупреждение + 19 + + Декорация3 + 21 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 22 + true + + true + true + + + CommonPicture.Предупреждение + + + + true + true + + true + + + <key>ru</key> + <value>Декорация предупреждение</value> + + + ru + Декорация предупреждения + + + ГруппаДекорацияПредупреждениеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + + ГруппаТекстПредупреждение + 24 + + Декорация1 + 26 + + <key>ru</key> + <value>В некоторых случаях синхронизация данных может занять длительное время: + - медленный канал связи; + - большой объем данных; + - доступно обновление приложения в Интернете.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 27 + true + + Label + true + + Left + + + + НеНапоминатьОДолгойСинхронизации + 29 + + <key>ru</key> + <value>Больше не напоминать</value> + + true + true + + true + + + НеНапоминатьОДолгойСинхронизации + + Right + + НеНапоминатьОДолгойСинхронизацииРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + НеНапоминатьОДолгойСинхронизацииКонтекстноеМеню + 30 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Текст предупреждение</value> + + + ru + Текст предупреждения + + + ГруппаТекстПредупреждениеРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Предупреждения долгой синхронизации</value> + + + ГруппаПредупрежденияДолгойСинхронизацииРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + Декорация4 + 32 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 33 + true + + Label + true + true + true + + Left + + + + КоманднаяПанельВыполненияОбмена + 35 + + ОК + 51 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + + ОКРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Отмена + 53 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + ОтменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель выполнения обмена</value> + + + ru + Командная панель закрыть + + + КоманднаяПанельВыполненияОбменаExtendedTooltip + 36 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Запрос пароля пользователя</value> + + + ru + Загрузка данных + + + ЗапросПароляПользователяExtendedTooltip + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ОжиданиеПроверкиПодключения + 41 + + Группа1 + 43 + + ДлительнаяОперация1 + 45 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация1РасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ДлительнаяОперация1КонтекстноеМеню + 46 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + СтатусОжиданияЗапускаСинхронизации + 48 + + <key>ru</key> + <value>Выполняется проверка подключения. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусОжиданияЗапускаСинхронизацииРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + СтатусОжиданияЗапускаСинхронизацииКонтекстноеМеню + 49 + true + + Label + 3 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа1РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + true + true + Auto + Auto + + + + Декорация5 + 61 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 62 + true + + Label + true + true + true + + Left + + + + КоманднаяПанельПроверкаПодключения + 55 + + Отмена1 + 59 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + Отмена1РасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель выполнения обмена</value> + + + КоманднаяПанельПроверкаПодключенияРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Ожидание проверки подключения</value> + + + ОжиданиеПроверкиПодключенияРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Выполнение проверки подключения</value> + + + ВыполнениеПроверкиПодключенияРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + DontBlock + Vertical + true + true + true + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаWS + + + true + + + true + +
                  true
                  +
                  + + Пароль + + <key>ru</key> + <value>Пароль</value> + + 2 + + String + + + + true + + + true + + + + ИмяПользователя + 3 + + String + + + + true + + + true + + + + НеНапоминатьОДолгойСинхронизации + + <key>ru</key> + <value>Больше не напоминать</value> + + 4 + + Boolean + + + true + + + true + + + + АдресДляВосстановленияПароляУчетнойЗаписи + 5 + + String + + + + true + + + true + + + + Корреспондент + 6 + + ExchangePlanRef + + + true + + + true + + + + ИдентификаторТранспорта + 7 + + String + + + + true + + + true + + + + ДанныеАутентификации + 8 + + + true + + + true + + + + ИмяПланаОбмена + 9 + + String + + + + true + + + true + + + + НастройкиТранспорта + 10 + + + true + + + true + + + + ЗабылиПароль + + <key>ru</key> + <value>Забыли пароль?</value> + + 2 + + ru + Забыли пароль + + + true + + + + ЗабылиПароль + + + DontUse + Auto + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + Auto + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 3 + + ru + Отмена + + + true + + + + Отмена + + + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаАутентификации/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаАутентификации/Module.bsl new file mode 100644 index 000000000..c4c233c9c --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаАутентификации/Module.bsl @@ -0,0 +1,175 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("Корреспондент") + И Не Параметры.Свойство("ИдентификаторТранспорта") + И Не Параметры.Свойство("ИмяПланаОбмена") + И Не Параметры.Свойство("НастройкиТранспорта") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + Корреспондент = Параметры.Корреспондент; + ИдентификаторТранспорта = Параметры.ИдентификаторТранспорта; + ИмяПланаОбмена = Параметры.ИмяПланаОбмена; + НастройкиТранспорта = Параметры.НастройкиТранспорта; + + ДанныеАутентификации = Новый Структура; + + Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда + ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; + АдресДляВосстановленияПароляУчетнойЗаписи = АвтономнаяРаботаСлужебный.АдресДляВосстановленияПароляУчетнойЗаписи(); + КонецЕсли; + + Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); + НеНапоминатьОДолгойСинхронизации = Истина; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") + И ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто() Тогда + + МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота"); + + НеНапоминатьОДолгойСинхронизации = Не МодульАвтономнаяРабота.ФлагНастройкиВопросаОДолгойСинхронизации(); + + КонецЕсли; + + Элементы.ГруппаПредупрежденияДолгойСинхронизации.Видимость = Не НеНапоминатьОДолгойСинхронизации; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + + СохранитьФлагВопросаОДолгойСинхронизации(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + Если ЗначениеЗаполнено(ИмяПользователя) Тогда + ДанныеАутентификации.Вставить("ИмяПользователя", ИмяПользователя); + КонецЕсли; + + ДанныеАутентификации.Вставить("Пароль", Пароль); + + Элементы.ВыполнениеПроверкиПодключения.ТекущаяСтраница = Элементы.ОжиданиеПроверкиПодключения; + + ФоновоеЗадание = ПроверкаАутентификацииНачало( + ?(ЗначениеЗаполнено(Корреспондент), Корреспондент, ИмяПланаОбмена), + ИдентификаторТранспорта, + ДанныеАутентификации); + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + + Обработчик = Новый ОписаниеОповещения("ПроверкаАутентификацииЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ФоновоеЗадание, Обработчик, НастройкиОжидания); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗабылиПароль(Команда) + + ТранспортСообщенийОбменаКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура СохранитьФлагВопросаОДолгойСинхронизации() + + Настройки = Неопределено; + Если СохранитьФлагВопросаОДолгойСинхронизацииСервер(Не НеНапоминатьОДолгойСинхронизации, Настройки) Тогда + ИзмененныеНастройки = Новый Массив; + ИзмененныеНастройки.Добавить(Настройки); + Оповестить("ИзмененыНастройкиПользователя", ИзмененныеНастройки, ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СохранитьФлагВопросаОДолгойСинхронизацииСервер(Знач Флаг, Настройки = Неопределено) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") + И ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто() Тогда + + МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота"); + НадоСохранять = Флаг <> МодульАвтономнаяРабота.ФлагНастройкиВопросаОДолгойСинхронизации(); + + Если НадоСохранять Тогда + МодульАвтономнаяРабота.ФлагНастройкиВопросаОДолгойСинхронизации(Флаг, Настройки); + КонецЕсли; + + Иначе + НадоСохранять = Ложь; + КонецЕсли; + + Возврат НадоСохранять; + +КонецФункции + +&НаСервере +Функция ПроверкаАутентификацииНачало(Знач Корреспондент, Знач ИдентификаторТранспорта, Знач ДанныеАутентификации) Экспорт + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Проверка подключения к корреспонденту'", ОбщегоНазначения.КодОсновногоЯзыка()); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + + Возврат ДлительныеОперации.ВыполнитьФункцию( + ПараметрыВыполнения, + "ТранспортСообщенийОбмена.ПроверитьАутентификацию", + Корреспондент, ИдентификаторТранспорта, НастройкиТранспорта, ДанныеАутентификации); + +КонецФункции + +&НаКлиенте +Процедура ПроверкаАутентификацииЗавершение(ФоновоеЗадание, ДополнительныеПараметры) Экспорт + + Если ФоновоеЗадание = Неопределено Тогда + + Возврат; + + ИначеЕсли ФоновоеЗадание.Статус = "Ошибка" Тогда + + Элементы.ВыполнениеПроверкиПодключения.ТекущаяСтраница = Элементы.ЗапросПароляПользователя; + СообщениеОбОшибке = ФоновоеЗадание.КраткоеПредставлениеОшибки + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке); + + Иначе + + Закрыть(ДанныеАутентификации); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..f238e0c2f --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаНастройки/Form.form @@ -0,0 +1,448 @@ + + + + КаталогОбменаИнформацией + 12 + true + true + + true + + Top + ShowBottom + + КаталогОбменаИнформациейРасширеннаяПодсказка + 14 + + <key>ru</key> + <value>Укажите локальный или сетевой каталог, который будет использоваться для передачи сообщений обмена.</value> + + Label + true + true + + Left + + + + КаталогОбменаИнформациейКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + + + StartChoice + КаталогОбменаИнформациейНачалоВыбора + + + Opening + КаталогОбменаИнформациейОткрытие + + 40 + true + true + true + true + true + true + true + Normal + + + + АдресВебСервиса + 24 + true + true + + true + + + Объект.АдресВебСервиса + + + АдресВебСервисаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + АдресВебСервисаКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяПользователь + 27 + true + true + + true + + + Объект.ИмяПользователя + + + ИмяПользовательРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ИмяПользовательКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ГруппаПароль + 33 + + Пароль + 30 + true + true + + true + + + Объект.Пароль + + + ПарольРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ЗапомнитьПароль + 35 + true + true + + true + + + Объект.ЗапомнитьПароль + + Right + + ЗапомнитьПарольРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ЗапомнитьПарольКонтекстноеМеню + 36 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Пароль</value> + + + ГруппаПарольРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + ПараметрыДоступаВИнтернет + 38 + + <key>ru</key> + <value>Параметры доступа в Интернет</value> + + true + true + + true + + + ПараметрыДоступаВИнтернетРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПараметрыДоступаВИнтернет + Normal + Auto + true + true + UserCmds + Auto + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 22 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 20 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаWS + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 4 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + ПараметрыДоступаВИнтернет + + <key>ru</key> + <value>Параметры доступа в Интернет</value> + + 2 + + ru + Параметры доступа в Интернет + + + true + + + + ПараметрыДоступаВИнтернет + + + DontUse + Auto + + + НастройкиТранспорта + + true + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..f24771a25 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,154 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура КаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Объект, "КаталогОбменаИнформацией", СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура КаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Объект, "КаталогОбменаИнформацией", СтандартнаяОбработка) +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + Если Не Объект.ЗапомнитьПароль Тогда + Объект.Пароль = ""; + КонецЕсли; + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыДоступаВИнтернет(Команда) + + ТранспортСообщенийОбменаКлиент.ОткрытьФормуПараметровПроксиСервера(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + Если Не ПустаяСтрока(Объект.АдресВебСервиса) Тогда + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Объект.АдресВебСервиса); + Если ЗначениеЗаполнено(СтруктураАдреса.Схема) Тогда + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( + СтруктураАдреса.Схема, СтруктураАдреса.Хост, СтруктураАдреса.Порт)); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + КонецЕсли; + + КонецЕсли; + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Заполним пароль. + ТранспортСообщенийОбмена.ЗаполнитьНастройкиИзБезопасногоХранилищаДляФормы(ЭтаФорма, ОбработкаОбъект); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Help/ru.html new file mode 100644 index 000000000..e1655fc43 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/Help/ru.html @@ -0,0 +1,8 @@ + +

                  Этот вариант подключения рекомендуется выбрать, если приложение находится в другой сети (офисе) и при этом доступна для подключения через Интернет (WS-сервис).

                  +

                  База-корреспонент должна быть опубликована на веб-сервере (Apache, IIS)

                  +
                  • Введите Адрес приложения в интернете.
                  • +
                  • Введите имя Пользователя и Пароль.
                  • +
                  • При необходимости включите флажок Запомнить пароль. Если данный флажок не установлен, то при каждой синхронизации необходимо вводить пароль, так же недоступна синхронизация по сценарию..
                  • +
                  • Перейдите по ссылке Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.
                  • +
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ManagerModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ManagerModule.bsl new file mode 100644 index 000000000..cc1e0de66 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ManagerModule.bsl @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо указать параметры подключения к базе корреспонденту.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Интернет (веб-сервис)'"); + Параметры.ИдентификаторТранспорта = "WS"; + Параметры.Описание = Описание; + Параметры.ИмяФормыАутентификации = "ФормаАутентификации"; + Параметры.РеквизитыДляБезопасногоХранилища.Добавить("Пароль"); + Параметры.ПрямоеПодключение = Истина; + Параметры.РежимРаботыПриложения = 1; + Параметры.ИспользоватьПрогресс = Ложь; + Параметры.СохранитьПараметрыПодключенияВФайл = Ложь; + Параметры.Картинка = БиблиотекаКартинок.ТранспортWS; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияВXML_1_2(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ТранспортСообщенийОбмена.НастройкиПодключенияИзXML_1_2(ТекстXML, "WS"); + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ObjectModule.bsl new file mode 100644 index 000000000..98dbfb29b --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ObjectModule.bsl @@ -0,0 +1,430 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщениеОбмена(СообщениеДляСопоставленияДанных); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + Результат = ПолучитьСообщениеОбмена(); + Исключение + + СообщениеОбОшибке = НСтр("ru = 'При выгрузке данных возникли ошибки во второй информационной базе:'", + ОбщегоНазначения.КодОсновногоЯзыка()) + Символы.ПС; + СообщениеОбОшибкеЖР = СообщениеОбОшибке; + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке(), Истина); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбменаКорреспондента); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("WSURLВебСервиса", АдресВебСервиса); + ПараметрыПодключения.Вставить("WSИмяПользователя", ИмяПользователя); + ПараметрыПодключения.Вставить("WSПароль", Пароль); + + Попытка + + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецПопытки; + + ВерсияИнтерфейса = ОбменДаннымиВебСервис.МаксимальнаяОбщаяВерсияИнтерфейсаОбмена(ВерсииКорреспондента); + + Если НЕ СтрНайти("3.0.1.1, 3.0.2.1, 3.0.2.2", ВерсияИнтерфейса) Тогда + + СообщениеОбОшибке = НСтр("ru = 'Корреспондент не поддерживает версию интерфейса 3.0.1.x ""ОбменДанными"". + |Для настройки подключения обновите конфигурацию корреспондента, или начните настройку из него.'"); + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + Прокси = Прокси(); + + Если Прокси = Неопределено Тогда + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена) Тогда + ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); + ДополнительныеПараметры.Вставить("ИдентификаторНастройки", НастройкиПодключения.ИдентификаторНастройки); + КонецЕсли; + + КодЭтогоУзла = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().Код; + + ПараметрыИБ = ОбменДаннымиВебСервис.ПолучитьПараметрыИБ( + Прокси, ИмяПланаОбменаКорреспондента, КодЭтогоУзла, СообщениеОбОшибке, 0, ДополнительныеПараметры); + + ПараметрыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(ПараметрыИБ); + + Если Не ПараметрыКорреспондента.ПланОбменаСуществует Тогда + + Текст = НСтр("ru = 'В корреспонденте не найден план обмена ""%1"". + |Убедитесь, что + | - выбран правильный вид приложения для настройки обмена; + | - указан правильный адрес приложения в Интернете.'"); + + СообщениеОбОшибке = СтрШаблон(Текст, ИмяПланаОбмена); + + Результат.ПодключениеУстановлено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + Результат.ПараметрыКорреспондентаПолучены = Истина; + Результат.ПараметрыКорреспондента = ПараметрыКорреспондента; + Результат.ИмяПланаОбменаКорреспондента = ПараметрыКорреспондента.ИмяПланаОбмена; + Результат.ПодключениеУстановлено = Истина; + + Отказ = Ложь; + СообщениеОбОшибке = ""; + + ВерсияКонфигурации = Результат.ПараметрыКорреспондента.ВерсияКонфигурации; + ТранспортСообщенийОбмена.ПриПодключенииККорреспонденту(Отказ, ИмяПланаОбмена, ВерсияКонфигурации, СообщениеОбОшибке); + + Если Отказ Тогда + + Результат.ПодключениеРазрешено = Ложь; + Результат.СообщениеОбОшибке = СообщениеОбОшибке; + + Возврат Результат; + + КонецЕсли; + + ТранспортСообщенийОбмена.ПроверитьДублированиеСинхронизаций(ИмяПланаОбмена, ПараметрыКорреспондента, Результат); + + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Прокси = Прокси(); + + Если Прокси = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + НастройкиПодключенияКорреспондента = Новый Структура; + Для Каждого ЭлементНастройки Из НастройкиПодключения Цикл + НастройкиПодключенияКорреспондента.Вставить(ЭлементНастройки.Ключ); + КонецЦикла; + + НастройкиПодключенияКорреспондента.ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными"; + НастройкиПодключенияКорреспондента.ВариантНастройкиОбмена = НастройкиПодключения.ВариантНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ИмяПланаОбмена = НастройкиПодключения.ИмяПланаОбменаКорреспондента; + НастройкиПодключенияКорреспондента.ИмяПланаОбменаКорреспондента = НастройкиПодключения.ИмяПланаОбмена; + НастройкиПодключенияКорреспондента.ФорматОбмена = НастройкиПодключения.ФорматОбмена; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбмена = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента; + + НастройкиПодключенияКорреспондента.ИспользоватьПрефиксыДляНастройкиОбменаКорреспондента = + НастройкиПодключения.ИспользоватьПрефиксыДляНастройкиОбмена; + + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыИсточника = НастройкиПодключения.ПрефиксИнформационнойБазыПриемника; + НастройкиПодключенияКорреспондента.ПрефиксИнформационнойБазыПриемника = НастройкиПодключения.ПрефиксИнформационнойБазыИсточника; + + Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(НастройкиПодключения.ИмяПланаОбмена) Тогда + НастройкиПодключенияКорреспондента.ВерсияФорматаОбмена = НастройкиПодключения.ВерсияФорматаОбмена; + + ТаблицаОбъекты = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата( + НастройкиПодключения.ИмяПланаОбмена, "ОтправкаПолучение", НастройкиПодключения.УзелИнформационнойБазы); + + НастройкиПодключенияКорреспондента.ПоддерживаемыеОбъектыФормата = Новый ХранилищеЗначения(ТаблицаОбъекты, Новый СжатиеДанных(9)); + КонецЕсли; + + СтрокаНастроекПодключенияXML = Обработки.ТранспортСообщенийОбменаWS.НастройкиПодключенияВXML(НастройкиПодключения); + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("НастройкиПодключения", НастройкиПодключенияКорреспондента); + ПараметрыПодключения.Вставить("СтрокаПараметровXML", СтрокаНастроекПодключенияXML); + + Попытка + ОбменДаннымиВебСервис.СоздатьУзелОбмена(Прокси, ПараметрыПодключения); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Или НЕ ЗапомнитьПароль; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.УдалитьНастройкуСинхронизацииВКорреспонденте +Функция УдалитьНастройкуСинхронизацииВКорреспонденте() Экспорт + + Прокси = Прокси(); + + Если Прокси = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы(Корреспондент, "УдалениеУзла"); + + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииУдалениеОбменаДанными(); + СтруктураНастроекОбмена.ДействиеПриОбмене = Неопределено; + + Попытка + ОбменДаннымиВебСервис.УдалитьУзелОбмена(Прокси, СтруктураНастроекОбмена); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодключениеУстановлено() Экспорт + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("АдресWSDL", АдресВебСервиса + "/ws/InterfaceVersion?wsdl"); + ПараметрыПодключения.Вставить("URIПространстваИмен", "http://www.1c.ru/SaaS/1.0/WS"); + ПараметрыПодключения.Вставить("ИмяСервиса", "InterfaceVersion"); + ПараметрыПодключения.Вставить("ИмяПользователя", ИмяПользователя); + ПараметрыПодключения.Вставить("Пароль", Пароль); + ПараметрыПодключения.Вставить("Таймаут", 7); + + Попытка + + Прокси = ОбщегоНазначения.СоздатьWSПрокси(ПараметрыПодключения); + Прокси.GetVersions("ОбменДанными"); + Возврат Истина; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецПопытки; + +КонецФункции + +Функция ОтправитьСообщениеОбмена(СообщениеДляСопоставленияДанных) + + Прокси = Прокси("ВыгрузкаДанных"); + + Если Прокси = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Отказ = Ложь; + + Если НЕ ЗначениеЗаполнено(Корреспондент) Тогда + ОбменДаннымиВебСервис.ПоместитьФайлВХранилищеВСервисе(Прокси, СообщениеОбмена, 1024); + Возврат Истина; + КонецЕсли; + + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( + Корреспондент, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СостояниеНастройки = ОбменДаннымиВебСервис.СостояниеНастройки(Прокси, СтруктураНастроекОбмена,,Отказ,СообщениеОбОшибке); + + Если Отказ Тогда + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + Возврат Ложь; + КонецЕсли; + + ИдентификаторФайлаУИД = ОбменДаннымиВебСервис.ПоместитьФайлВХранилищеВСервисе(Прокси, СообщениеОбмена, 1024); + + ИдентификаторФайлаСтрокой = Строка(ИдентификаторФайлаУИД); + + Если СообщениеДляСопоставленияДанных + И (СостояниеНастройки.ПоддерживаетсяСопоставлениеДанных + Или Не СостояниеНастройки.НастройкаСинхронизацииДанныхЗавершена) Тогда + + ОбменДаннымиВебСервис.ПоместитьСообщениеДляСопоставленияДанных( + Прокси, СтруктураНастроекОбмена, ИдентификаторФайлаСтрокой); + + Иначе + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + + ОбменДаннымиВебСервис.ВыполнитьЗагрузкуДанных(Прокси, СтруктураНастроекОбмена, ПараметрыОбмена, ИдентификаторФайлаСтрокой); + + Если ПараметрыОбмена.ДлительнаяОперация Тогда + + ОбменДаннымиВебСервис.ОжиданиеЗавершенияОперации( + СтруктураНастроекОбмена, ПараметрыОбмена, Прокси, Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьСообщениеОбмена() + + Прокси = Прокси("ЗагрузкаДанных"); + + Если Прокси = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Корреспондент) Тогда + СообщениеОбмена = ОбменДаннымиВебСервис.ПолучитьФайлИзХранилищаВСервисе(Прокси, ШаблоныИменДляПолученияСообщения[0],,1024); + Возврат Истина; + КонецЕсли; + + ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); + ПараметрыОбмена.ДлительнаяОперацияРазрешена= Истина; + ПараметрыОбмена.ИнтервалОжиданияНаСервере = 15; + СтруктураНастроекОбмена = ОбменДаннымиСервер.НастройкиОбменаДляУзлаИнформационнойБазы( + Корреспондент, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + ОбменДаннымиВебСервис.ВыполнитьВыгрузкуДанных(Прокси, СтруктураНастроекОбмена, ПараметрыОбмена); + + Если ПараметрыОбмена.ДлительнаяОперация Тогда + + ОбменДаннымиВебСервис.ОжиданиеЗавершенияОперации( + СтруктураНастроекОбмена, ПараметрыОбмена, Прокси, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + + КонецЕсли; + + УИДФайлаСообщения = Новый УникальныйИдентификатор(ПараметрыОбмена.ИдентификаторФайла); + СообщениеОбмена = ОбменДаннымиВебСервис.ПолучитьФайлИзХранилищаВСервисе( + Прокси, УИДФайлаСообщения, Корреспондент, 1024); + + Возврат Истина; + +КонецФункции + +Функция Прокси(ДействиеПриОбмене = Неопределено) + + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("АдресВебСервиса", АдресВебСервиса); + ПараметрыПодключения.Вставить("ИмяПользователя", ИмяПользователя); + ПараметрыПодключения.Вставить("Пароль", Пароль); + + Прокси = ОбменДаннымиВебСервис.WSПрокси(ПараметрыПодключения, СообщениеОбОшибкеЖР, СообщениеОбОшибке); + + Если Прокси = Неопределено Тогда + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, ДействиеПриОбмене); + КонецЕсли; + + Возврат Прокси; + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщенияОбмена = Неопределено; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ТранспортСообщенийОбменаWS.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ТранспортСообщенийОбменаWS.mdo new file mode 100644 index 000000000..9c837b083 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаWS/ТранспортСообщенийОбменаWS.mdo @@ -0,0 +1,97 @@ + + + + + + + ТранспортСообщенийОбменаWS + + ru + Транспорт сообщений обмена WS + + DataProcessor.ТранспортСообщенийОбменаWS.Form.Форма + true + + + ru + + + + АдресВебСервиса + + ru + Адрес + + + String + + + + + + + ИмяПользователя + + ru + Имя пользователя + + + String + + + + + + + Пароль + + ru + Пароль + + + String + + + + + + + ЗапомнитьПароль + + ru + Запомнить пароль + + + Boolean + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаАутентификации + + ru + Форма аутентификации + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/Форма/Form.form new file mode 100644 index 000000000..5dc6d9d00 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаПассивныйРежим + + + true + + + true + +
                  true
                  +
                  + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..4253cdbc0 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/ФормаНастройки/Form.form @@ -0,0 +1,232 @@ + + + + <key>ru</key> + <value>Пассивный режим</value> + + + Группа1 + 9 + + Декорация3 + 11 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 12 + true + + 4 + true + 2 + true + + + StdPicture.Information + + true + 200 + AsFileRef + + + + Декорация1 + 1 + + <key>ru</key> + <value>Для данного вида подключения настроек не требуется. +Нажмите <b>Готово</> для продолжения.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 2 + true + + true + Label + true + Center + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + Группа1РасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + Auto + Auto + + + + Декорация2 + 6 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 7 + true + + Label + true + true + + Left + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаГотово + 4 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + LockOwner + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаПассивныйРежим + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + 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..02a7c190c --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,16 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/ТранспортСообщенийОбменаПассивныйРежим/Help/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Help/ru.html new file mode 100644 index 000000000..6708cc61b --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/Help/ru.html @@ -0,0 +1,4 @@ + +

                  При таком варианте подключения это приложение отправляет и принимает данные через Интернет только по запросу от приложения-корреспондента.

                  +

                  Данный вид подключения не требует никаких настроек.

                  +

                  С его помощью можно продолжить настройку синхронизации, которая была начата в другом приложении. Для этого требуется конфигурационный файл с настройками синхронизации данных через EnterpriseData из приложения-корреспондента.

                  \ 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..4e57fd967 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/ManagerModule.bsl @@ -0,0 +1,70 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'При таком варианте подключения эта программа отправляет и принимает данные только по запросу от программы-корреспондента.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Пассивный режим'"); + Параметры.ИдентификаторТранспорта = "ПассивныйРежим"; + Параметры.Описание = Описание; + Параметры.ЗапускОбменаИзКорреспондента = Ложь; + Параметры.ИспользоватьПрогресс = Ложь; + Параметры.РежимРаботыПриложения = 1; + Параметры.ПрямоеПодключение = Ложь; + Параметры.ПассивныйРежим = Истина; + Параметры.Картинка = БиблиотекаКартинок.ТранспортПассивныйРежим; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ОбменДаннымиXDTOСервер.НастройкиПодключенияВСообщениеОбмена(НастройкиПодключения); + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Возврат ОбменДаннымиXDTOСервер.СообщениеОбменаВНастройкиПодключения(ТекстXML); + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + Возврат Новый Структура; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ 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..0603b49a0 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/ObjectModule.bsl @@ -0,0 +1,96 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПодключениеУстановлено() Экспорт + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщенияОбмена = Неопределено; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/ТранспортСообщенийОбменаПассивныйРежим.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/ТранспортСообщенийОбменаПассивныйРежим.mdo new file mode 100644 index 000000000..985ca7291 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаПассивныйРежим/ТранспортСообщенийОбменаПассивныйРежим.mdo @@ -0,0 +1,37 @@ + + + + + + + ТранспортСообщенийОбменаПассивныйРежим + + ru + Транспорт сообщений обмена пассивный режим + + DataProcessor.ТранспортСообщенийОбменаПассивныйРежим.Form.Форма + true + + + ru + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/Форма/Form.form new file mode 100644 index 000000000..50f81d1fb --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/Форма/Form.form @@ -0,0 +1,41 @@ + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаEMAIL + + + 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..8d4d13da7 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/Форма/Module.bsl @@ -0,0 +1,18 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 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/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаАвторизации/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаАвторизации/Form.form new file mode 100644 index 000000000..39fa63355 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаАвторизации/Form.form @@ -0,0 +1,113 @@ + + + + <key>ru</key> + <value>Авторизация в сервисе Яндекс.Диск</value> + + + ПолеHTML + 1 + + <key>ru</key> + <value>Поле HTML</value> + + true + true + + true + + + ПолеHTML + + None + + ПолеHTMLРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПолеHTMLКонтекстноеМеню + 2 + true + + HTMLDocumentField + Enter + true + Left + true + + + DocumentComplete + ПолеHTMLДокументСформирован + + 50 + true + 10 + true + true + true + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + Vertical + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
                  true
                  +
                  + + ПолеHTML + + <key>ru</key> + <value>Поле HTML</value> + + 2 + + String + + + + true + + + true + + + + + + +
                  diff --git a/SSL/src/CommonForms/РезультатПроверки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаАвторизации/Module.bsl similarity index 55% rename from SSL/src/CommonForms/РезультатПроверки/Module.bsl rename to SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаАвторизации/Module.bsl index 991b33444..5a6be9705 100644 --- a/SSL/src/CommonForms/РезультатПроверки/Module.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаАвторизации/Module.bsl @@ -10,10 +10,16 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Элементы.Инструкция.Видимость = - ЭлектроннаяПодписьСлужебный.ВидимостьСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); - Элементы.ЗаголовокПредупреждения.Заголовок = Параметры.ЗаголовокПредупреждения; - ТекстПредупреждения = Параметры.ТекстПредупреждения; + + Если Не Параметры.Свойство("ClientID") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + ПолеHTML = "https://oauth.yandex.ru/authorize?response_type=code&client_id=" + Параметры.ClientID; + КонецПроцедуры #КонецОбласти @@ -21,11 +27,17 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ИнструкцияНажатие(Элемент) +Процедура ПолеHTMLДокументСформирован(Элемент) - ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(); + Позиция = СтрНайти(Элемент.Документ.URL, "code="); + Если Позиция Тогда + + Код = Сред(Элемент.Документ.URL, Позиция + 5); + + Закрыть(Код); + + КонецЕсли; КонецПроцедуры -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаНастройки/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаНастройки/Form.form new file mode 100644 index 000000000..b0675d2ff --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаНастройки/Form.form @@ -0,0 +1,658 @@ + + + + КаталогВОблаке + 23 + true + true + + true + + + Объект.КаталогВОблаке + + ShowBottom + + КаталогВОблакеРасширеннаяПодсказка + 25 + + <key>ru</key> + <value>Например 'exchange/dsl’. Каталог должен быть уже создан в сервисе. Доспутимо использовать только латинские символы </value> + + Label + true + true + + Left + + + + КаталогВОблакеКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиДоступа + 56 + + ПолучитьТокен + 72 + + <key>ru</key> + <value>Получить токен</value> + + true + true + + true + + + ПолучитьТокенРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + UsualButton + Form.Command.ПолучитьТокен + Normal + Auto + true + true + UserCmds + Auto + + + ClientID + 63 + + <key>ru</key> + <value>Client ID</value> + + true + true + + true + + + Объект.ClientID + + + ClientIDРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ClientIDКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ClientSecret + 66 + + <key>ru</key> + <value>Client secret</value> + + true + true + + true + + + Объект.ClientSecret + + + ClientSecretРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + ClientSecretКонтекстноеМеню + 67 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + AccessToken + 60 + + <key>ru</key> + <value>Access token</value> + + true + true + + true + + + Объект.AccessToken + + + AccessTokenРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + AccessTokenКонтекстноеМеню + 61 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + RefreshToken + 79 + + <key>ru</key> + <value>Refresh token</value> + + true + true + + true + + + Объект.RefreshToken + + + RefreshTokenРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + RefreshTokenКонтекстноеМеню + 80 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ExpiresIn + 69 + + <key>ru</key> + <value>Expires in (Истекает)</value> + + true + true + + true + + + Объект.ExpiresIn + + + ExpiresInРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ExpiresInКонтекстноеМеню + 70 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки доступа</value> + + + НастройкиДоступаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + UsualGroup + + Vertical + Collapsible + Button + true + true + auto + Auto + Auto + + + + Декорация1 + 20 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 21 + true + + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщения + 11 + true + true + + true + + + Объект.СжиматьФайлИсходящегоСообщения + + Right + + OnChange + СжиматьФайлИсходящегоСообщенияПриИзменении + + + СжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СжиматьФайлИсходящегоСообщенияКонтекстноеМеню + 12 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольАрхиваСообщенияОбмена + 14 + true + true + + true + + + Объект.ПарольАрхиваСообщенияОбмена + + Top + + ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ПарольАрхиваСообщенияОбменаКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Транслитерация + 17 + + <key>ru</key> + <value>Транслитерация имени файла сообщения обмена</value> + + true + true + + true + + + Объект.Транслитерация + + Right + + ТранслитерацияРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ТранслитерацияКонтекстноеМеню + 18 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьПодключение + 1 + + <key>ru</key> + <value>Проверить подключение</value> + + true + true + + true + + + ФормаПроверитьПодключениеРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Form.Command.ПроверитьПодключение + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГотово + 3 + + <key>ru</key> + <value>Готово</value> + + true + true + + true + + + ФормаГотовоРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ТранспортСообщенийОбменаЯндексДиск + + + true + + + true + +
                  true
                  +
                  + + Готово + + <key>ru</key> + <value>Готово</value> + + 1 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + ПроверитьПодключение + + <key>ru</key> + <value>Проверить подключение</value> + + 2 + + ru + Проверить подключение + + + true + + + + ПроверитьПодключение + + + Auto + Auto + + + ПолучитьТокен + + <key>ru</key> + <value>Получить токен</value> + + 3 + + ru + Получить токен + + + true + + + + ПолучитьТокен + + + Auto + Auto + + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаНастройки/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаНастройки/Module.bsl new file mode 100644 index 000000000..c5dff2b55 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаНастройки/Module.bsl @@ -0,0 +1,177 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТранспортСообщенийОбмена.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + + ИнициализироватьРеквизитыФормы(); + + УстановитьВидимостьДоступность(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура СжиматьФайлИсходящегоСообщенияПриИзменении(Элемент) + УстановитьВидимостьДоступность(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Готово(Команда) + + Если ПроверитьЗаполнение() Тогда + + РезультатЗакрытия = РезультатЗакрытияНаСервере(); + Закрыть(РезультатЗакрытия); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключение(Команда) + + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеЗавершение", ЭтотОбъект); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект); + МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); + МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Иначе + ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьТокен(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ClientID", Объект.ClientID); + ПараметрыФормы.Вставить("ClientSecret", Объект.ClientSecret); + + Оповещение = Новый ОписаниеОповещения("ПолучитьТокенЗавершение", ЭтотОбъект); + + ОткрытьФорму("Обработка.ТранспортСообщенийОбменаЯндексДиск.Форма.ФормаПолученияТокена", + ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьТокенЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Объект, Результат); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция РезультатЗакрытияНаСервере() + + Возврат ТранспортСообщенийОбмена.РезультатЗакрытияФормыТранспорта(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста +Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Объект) + + ЗапросыРазрешений = Новый Массив; + Разрешения = Новый Массив; + + МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); + + Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS", "cloud-api.yandex.net")); + + ЗапросыРазрешений.Добавить( + МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения)); + + Возврат ЗапросыРазрешений; + +КонецФункции + +&НаКлиенте +Процедура ПроверитьПодключениеЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.ОК Тогда + + ПодключениеУстановлено = Ложь; + ПроверитьПодключениеНаСервере(ПодключениеУстановлено); + + ТекстПредупреждения = ?(ПодключениеУстановлено, НСтр("ru = 'Подключение успешно установлено.'"), + НСтр("ru = 'Не удалось установить подключение.'")); + ПоказатьПредупреждение(, ТекстПредупреждения); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключениеНаСервере(ПодключениеУстановлено) + + УстановитьПривилегированныйРежим(Истина); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // Выполняем проверку подключения. + ПодключениеУстановлено = ОбработкаОбъект.ПодключениеУстановлено(); + Если Не ПодключениеУстановлено Тогда + + Отказ = Истина; + + СообщениеОбОшибке = ОбработкаОбъект.СообщениеОбОшибке + + Символы.ПС + НСтр("ru = 'Техническую информацию об ошибке см. в журнале регистрации.'"); + + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); + + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьДоступность() + + Элементы.ПарольАрхиваСообщенияОбмена.Доступность = Объект.СжиматьФайлИсходящегоСообщения; + + НастройкиТранспорта = Неопределено; + Параметры.Свойство("НастройкиТранспорта", НастройкиТранспорта); + Если ЗначениеЗаполнено(НастройкиТранспорта) Тогда + Элементы.НастройкиДоступа.Скрыть(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ИнициализироватьРеквизитыФормы() + + Если Не Параметры.Свойство("НастройкиТранспорта") Тогда + Объект.СжиматьФайлИсходящегоСообщения = Истина; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаПолученияТокена/Form.form b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаПолученияТокена/Form.form new file mode 100644 index 000000000..726da7cce --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаПолученияТокена/Form.form @@ -0,0 +1,374 @@ + + + + <key>ru</key> + <value>Получение токена Яндекс.Диск</value> + + + ПолеHTML + 1 + + <key>ru</key> + <value>Поле HTML</value> + + true + true + + true + + + ПолеHTML + + None + + ПолеHTMLРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ПолеHTMLКонтекстноеМеню + 2 + true + + HTMLDocumentField + Enter + true + Left + true + + 50 + 10 + true + true + + + + Декорация1 + 14 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 15 + true + + Label + true + true + + Left + + + + ГруппаПолучениеТокена + 7 + + ClientID + 4 + + <key>ru</key> + <value>Client ID</value> + + true + true + + true + + + ClientID + + + ClientIDРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ClientIDКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ClientSecret + 9 + + <key>ru</key> + <value>Client secret</value> + + true + true + + true + + + ClientSecret + + + ClientSecretРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ClientSecretКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолучитьТокен + 12 + + <key>ru</key> + <value>Получить токен</value> + + true + true + + true + + + ПолучитьТокенРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualButton + Form.Command.ПолучитьТокен + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Получение токена</value> + + + ГруппаПолучениеТокенаРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualGroup + + HorizontalIfPossible + Auto + true + true + + Web.LightGreen + + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + Vertical + true + true + true + auto + true + + Объект + 1 + + String + + + + true + + + true + +
                  true
                  +
                  + + ПолеHTML + + <key>ru</key> + <value>Поле HTML</value> + + 2 + + String + + + + true + + + true + + + + ClientID + + <key>ru</key> + <value>Client ID</value> + + 3 + + String + + + + true + + + true + + + ClientID + + + + ClientSecret + + <key>ru</key> + <value>Client secret</value> + + 4 + + String + + + + true + + + true + + + ClientSecret + + + + Код + 5 + + String + + + + true + + + true + + + Код + + + + ПолучитьТокен + + <key>ru</key> + <value>Получить токен</value> + + 1 + + ru + Получить токен + + + true + + + + ПолучитьТокен + + + Auto + Auto + + + + + +
                  diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаПолученияТокена/Module.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаПолученияТокена/Module.bsl new file mode 100644 index 000000000..4abf2ca1d --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Forms/ФормаПолученияТокена/Module.bsl @@ -0,0 +1,113 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("ClientID") + Или Не Параметры.Свойство("ClientSecret") Тогда + + ВызватьИсключение НСтр("ru = 'Эта форма не предназначена для непосредственного открытия.'", + ОбщегоНазначения.КодОсновногоЯзыка()); + + КонецЕсли; + + ПолеHTML = Обработки.ТранспортСообщенийОбменаЯндексДиск.ПолучитьМакет("ПолучениеТокена_ru").ПолучитьТекст(); + + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "ClientID,ClientSecret"); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПолучитьТокен(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ClientID", ClientID); + + Оповещение = Новый ОписаниеОповещения("ПолучитьТокенЗавершение", ЭтотОбъект); + + ОткрытьФорму("Обработка.ТранспортСообщенийОбменаЯндексДиск.Форма.ФормаАвторизации", + ПараметрыФормы,,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПолучитьТокенЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Код = Результат; + + Результат = ПолучитьТокенЗавершениеНаСервере(); + + Закрыть(Результат); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьТокенЗавершениеНаСервере() + + ИмяСервера = "oauth.yandex.ru"; + АдресРесурса = "/token"; + + СтрокаЗапроса = "grant_type=authorization_code" + + "&code=" + Код + + "&client_id=" + ClientID + + "&client_secret=" + ClientSecret; + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); + Заголовки.Вставить("Content-Length", Формат(СтрДлина(СтрокаЗапроса), "ЧГ=")); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса); + + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); + КонецЕсли; + Соединение = Новый HTTPСоединение(ИмяСервера, 443,,, Прокси, 20, ЗащищенноеСоединение); + Ответ = Соединение.ОтправитьДляОбработки(Запрос); + ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(ТелоОтвета); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = РезультатЗапроса["message"]; + ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке); + + Возврат Неопределено; + + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("AccessToken", РезультатЗапроса["access_token"]); + Результат.Вставить("RefreshToken", РезультатЗапроса["refresh_token"]); + Результат.Вставить("ExpiresIn", ТекущаяДатаСеанса() + РезультатЗапроса["expires_in"]); + Результат.Вставить("ClientID", ClientID); + Результат.Вставить("ClientSecret", ClientSecret); + + Возврат Результат; + +КонецФункции + +#КонецОбласти \ 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..ece3b93f2 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Help/ru.html @@ -0,0 +1,7 @@ + +

                  В случае если к другому приложению нет возможности прямого подключения по локальной сети или через Интернет (веб-сервисы), рекомендуется использовать другие каналы связи, например Яндекс.Диск. При этом приложения, между которыми настроена синхронизация данных, могут работать полностью автономно друг от друга и в разное время. Такой вариант подходит не только для синхронизации данных с приложениями, расположенными в других сетях (офисах), но и для приложений в одной сети.

                  +

                  При настройке синхронизации будет сформирован файл(ы) с настройками подключения (*.xml и *.json). В приложении-корреспонденте при выборе типа подключения, необходимо выбрать опцию Продолжение настройки, выбрать необходимый тип подключения и загрузить файл с настройками подключения

                  +
                  • Введите параметры доступа к сервису: Client ID, Client Secret, Access Token и Refresh Token. По нажатию кнопки Получить токен, откроется инструкцию по настройке сервиса и получению параметров доступа.
                  • +
                  • Включите флажок Сжимать отправляемые данные в архив , для того чтобы ограничить размер отправляемого сообщения.
                  • +
                  • Введите Пароль архива для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложений.
                  • +
                  \ 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..3ecbdbe13 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/ManagerModule.bsl @@ -0,0 +1,101 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаМенеджер.ТранспортСообщенийОбменаFILE.ПараметрыТранспорта +Функция ПараметрыТранспорта() Экспорт + + Описание = НСтр("ru = 'Для подключения необходимо параметры авторизации на облачном сервисе.'"); + + Параметры = ТранспортСообщенийОбмена.СтруктураПараметровТранспорта(); + + Параметры.Псевдоним = НСтр("ru = 'Яндекс.Диск'"); + Параметры.ИдентификаторТранспорта = "ЯндексДиск"; + Параметры.Описание = Описание; + Параметры.Картинка = БиблиотекаКартинок.ЯндексДиск; + + Реквизиты = Новый Массив; + Реквизиты.Добавить("ПарольАрхиваСообщенияОбмена"); + + Параметры.РеквизитыДляБезопасногоХранилища = Реквизиты; + + Возврат Параметры; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция НастройкиПодключенияВXML(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +Функция НастройкиПодключенияИзXML(ТекстXML) Экспорт + + Настройки = Новый Структура; + Возврат Настройки; + +КонецФункции + +Функция НастройкиТранспортаВJSON(НастройкиТранспорта) Экспорт + + НастройкиТранспортаJSON = Новый Структура; + + ПарольАрхиваСообщенияОбмена = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(НастройкиТранспорта.ПарольАрхиваСообщенияОбмена); + + НастройкиТранспортаJSON.Вставить("CompressOutgoingMessageFile", НастройкиТранспорта.СжиматьФайлИсходящегоСообщения); + НастройкиТранспортаJSON.Вставить("ArchivePasswordExchangeMessages", ПарольАрхиваСообщенияОбмена); + НастройкиТранспортаJSON.Вставить("TransliterateExchangeMessageFileNames", НастройкиТранспорта.Транслитерация); + + // Яндекс.Диск + НастройкиТранспортаJSON.Вставить("AccessToken", НастройкиТранспорта.AccessToken); + НастройкиТранспортаJSON.Вставить("ClientID", НастройкиТранспорта.ClientID); + НастройкиТранспортаJSON.Вставить("ClientSecret", НастройкиТранспорта.ClientSecret); + НастройкиТранспортаJSON.Вставить("ExpiresIn", НастройкиТранспорта.ExpiresIn); + НастройкиТранспортаJSON.Вставить("RefreshToken", НастройкиТранспорта.RefreshToken); + НастройкиТранспортаJSON.Вставить("CloudDirectory", НастройкиТранспорта.КаталогВОблаке); + + Возврат НастройкиТранспортаJSON; + +КонецФункции + +Функция НастройкиТранспортаИзJSON(НастройкиТранспортаJSON) Экспорт + + НастройкиТранспорта = Новый Структура; + + НастройкиТранспорта.Вставить("СжиматьФайлИсходящегоСообщения", НастройкиТранспортаJSON.CompressOutgoingMessageFile); + НастройкиТранспорта.Вставить("ПарольАрхиваСообщенияОбмена", НастройкиТранспортаJSON.ArchivePasswordExchangeMessages); + НастройкиТранспорта.Вставить("Транслитерация", НастройкиТранспортаJSON.TransliterateExchangeMessageFileNames); + + // Яндекс + НастройкиТранспорта.Вставить("AccessToken", НастройкиТранспортаJSON.AccessToken); + НастройкиТранспорта.Вставить("ClientID", НастройкиТранспортаJSON.ClientID); + НастройкиТранспорта.Вставить("ClientSecret", НастройкиТранспортаJSON.ClientSecret); + НастройкиТранспорта.Вставить("ExpiresIn", НастройкиТранспортаJSON.ExpiresIn); + НастройкиТранспорта.Вставить("RefreshToken", НастройкиТранспортаJSON.RefreshToken); + НастройкиТранспорта.Вставить("КаталогВОблаке", НастройкиТранспортаJSON.CloudDirectory); + + Возврат НастройкиТранспорта; + +КонецФункции + +Функция ИмяКаталогаСохраненияНастроек(НастройкиПодключения) Экспорт + + Возврат ""; + +КонецФункции + +#КонецОбласти + +#КонецЕсли \ 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..1659dcded --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/ObjectModule.bsl @@ -0,0 +1,422 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем СообщениеОбмена Экспорт; // При получении - имя полученного файла во ВременныйКаталог. При отправке - имя файла, который необходимо отправить +Перем ВременныйКаталог Экспорт; // Временный каталог для сообщений обмена. +Перем ИдентификаторКаталога Экспорт; +Перем Корреспондент Экспорт; +Перем ИмяПланаОбмена Экспорт; +Перем ИмяПланаОбменаКорреспондента Экспорт; +Перем СообщениеОбОшибке Экспорт; +Перем СообщениеОбОшибкеЖР Экспорт; + +Перем ШаблоныИменДляПолученияСообщения Экспорт; +Перем ИмяСообщенияДляОтправки Экспорт; + +Перем Таймаут; +Перем ТаймаутОтправкаПолучение; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ОтправитьДанные +Функция ОтправитьДанные(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Попытка + Результат = ОтправитьСообщение(); + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПолучитьДанные +Функция ПолучитьДанные() Экспорт + + Попытка + + Для Каждого Шаблон Из ШаблоныИменДляПолученияСообщения Цикл + + Результат = ПолучитьСообщение(Шаблон); + + Если Результат Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Исключение + + ТранспортСообщенийОбмена.ИнформацияОбОшибкеВСообщения(ЭтотОбъект, ИнформацияОбОшибке()); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Результат = Ложь; + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПередВыгрузкойДанных +Функция ПередВыгрузкойДанных(СообщениеДляСопоставленияДанных = Ложь) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ПараметрыКорреспондента +Функция ПараметрыКорреспондента(НастройкиПодключения) Экспорт + + Результат = ТранспортСообщенийОбмена.СтруктураРезультатаПолученияПараметровКорреспондента(); + Результат.ПодключениеУстановлено = Истина; + Результат.ПодключениеРазрешено = Истина; + + Возврат Результат; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.СохранитьНастройкиВКорреспонденте +Функция СохранитьНастройкиВКорреспонденте(НастройкиПодключения) Экспорт + + Возврат Истина; + +КонецФункции + +// См. ОбработкаОбъект.ТранспортСообщенийОбменаFILE.ТребуетсяАутентификация +Функция ТребуетсяАутентификация() Экспорт + + Возврат Ложь; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьСообщение(ШаблонИмениСообщения) + + HTTPСоединение = HTTPСоединение("cloud-api.yandex.net", Таймаут); + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","OAuth " + AccessToken); + + Если ПустаяСтрока(КаталогВОблаке) Тогда + Путь = "disk:/"; + Иначе + Путь = "disk:/" + КаталогВОблаке + "/"; + КонецЕсли; + + АдресРесурса = "/v1/disk/resources?path=%1&fields=_embedded.items,_embedded.items.name,_embedded.items.path,_embedded.items.modified"; + АдресРесурса = СтрШаблон(АдресРесурса, Путь); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело,,"modified"); + + ТаблицаФайлов = Новый ТаблицаЗначений; + ТаблицаФайлов.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200))); + ТаблицаФайлов.Колонки.Добавить("Путь", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200))); + ТаблицаФайлов.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата",,,,, Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + + Для Каждого Файл Из РезультатЗапроса["_embedded"]["items"] Цикл + + НовСтрока = ТаблицаФайлов.Добавить(); + НовСтрока.ИмяФайла = Файл["name"]; + НовСтрока.Путь = Файл["path"]; + НовСтрока.Дата = Файл["modified"]; + + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Т.ИмяФайла КАК ИмяФайла, + | Т.Путь КАК Путь, + | Т.Дата КАК Дата + |ПОМЕСТИТЬ ВТ + |ИЗ + | &ТаблицаФайлов КАК Т + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТ.Путь КАК Путь + |ИЗ + | ВТ КАК ВТ + |ГДЕ + | ВТ.ИмяФайла ПОДОБНО &Шаблон + | + |УПОРЯДОЧИТЬ ПО + | ВТ.Дата УБЫВ"; + + ШаблонИмениСообщенияДляПоиска = СтрЗаменить(ШаблонИмениСообщения, "*", "%"); + + Запрос.УстановитьПараметр("Шаблон", ШаблонИмениСообщенияДляПоиска); + Запрос.УстановитьПараметр("ТаблицаФайлов", ТаблицаФайлов); + + РезультатПоискаФайлов = Запрос.Выполнить().Выгрузить(); + + Если РезультатПоискаФайлов.Количество() = 0 Тогда + + СообщениеОбОшибке = НСтр("ru = 'В каталоге обмена информацией не был обнаружен файл сообщения с данными. + |Каталог обмена информацией на сервере: ""%1"" + |Имя файла сообщения обмена: ""%2""'"); + + СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, КаталогВОблаке, ШаблонИмениСообщения); + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + ПутьКФайлу = РезультатПоискаФайлов[0].Путь; + + // Получение ссылки на скачивание файла + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","OAuth " + AccessToken); + + АдресРесурса = "/v1/disk/resources/download?path=" + СтрЗаменить(ПутьКФайлу,"/","%2F"); + + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + + Если Ответ.КодСостояния <> 200 Тогда + + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + Ссылка = РезультатЗапроса.Получить("href"); + СсылкаПоЧастям = ОбщегоНазначенияКлиентСервер.СтруктураURI(Ссылка); + + HTTPСоединение = HTTPСоединение(СсылкаПоЧастям.ИмяСервера,Таймаут); + Запрос = Новый HTTPЗапрос(СсылкаПоЧастям.ПутьНаСервере); + Ответ = HTTPСоединение.Получить(Запрос); + + Если Ответ.КодСостояния <> 302 Тогда + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + Ссылка = Ответ.Заголовки.Получить("Location"); + СсылкаПоЧастям = ОбщегоНазначенияКлиентСервер.СтруктураURI(Ссылка); + + HTTPСоединение = HTTPСоединение(СсылкаПоЧастям.ИмяСервера, ТаймаутОтправкаПолучение); + + Запрос = Новый HTTPЗапрос(СсылкаПоЧастям.ПутьНаСервере); + Ответ = HTTPСоединение.Получить(Запрос); + + Если Ответ.КодСостояния <> 200 Тогда + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ЗагрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + ФайлЗапакован = ВРег(Прав(ПутьКФайлу, 3)) = "ZIP"; + + Если ФайлЗапакован Тогда + + // Получаем имя для временного файла архива. + ИмяВременногоФайлаАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ВременныйКаталог, Строка(Новый УникальныйИдентификатор) + ".zip"); + + ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ДвоичныеДанные.Записать(ИмяВременногоФайлаАрхива); + + Если Не ТранспортСообщенийОбмена.РаспаковатьСообщениеОбменаИзZipФайла( + ЭтотОбъект, ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена) Тогда + + Возврат Ложь; + + КонецЕсли; + + Иначе + + ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные(); + ДвоичныеДанные.Записать(СообщениеОбмена); + + КонецЕсли; + + Возврат Истина; +КонецФункции + +Функция ОтправитьСообщение() + + Если ПустаяСтрока(КаталогВОблаке) Тогда + Путь = "disk:/"; + Иначе + Путь = "disk:/" + КаталогВОблаке + "/"; + КонецЕсли; + + Если СжиматьФайлИсходящегоСообщения Тогда + + Если Не ТранспортСообщенийОбмена.ЗапаковатьСообщениеОбменаВZipФайл(ЭтотОбъект, ПарольАрхиваСообщенияОбмена) Тогда + Возврат Ложь; + КонецЕсли; + + Файл = Новый Файл(ИмяСообщенияДляОтправки); + Путь = Путь + Файл.ИмяБезРасширения + ".zip"; + + Иначе + + Путь = Путь + ИмяСообщенияДляОтправки; + + КонецЕсли; + + Заголовки = Новый Соответствие(); + Заголовки.Вставить("Authorization","OAuth " + AccessToken); + + АдресРесурса = "/v1/disk/resources/upload?path=%1&overwrite=true"; + АдресРесурса = СтрШаблон(АдресРесурса, Путь); + + HTTPСоединение = HTTPСоединение("cloud-api.yandex.net", Таймаут); + Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); + + Ответ = HTTPСоединение.Получить(Запрос); + + Если Ответ.КодСостояния <> 200 Тогда + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + + РезультатЗапроса = ТранспортСообщенийОбмена.JSONВЗначение(Тело); + + Ссылка = РезультатЗапроса.Получить("href"); //Ссылка + СсылкаПоЧастям = ОбщегоНазначенияКлиентСервер.СтруктураURI(Ссылка); + + HTTPСоединение = HTTPСоединение(СсылкаПоЧастям.ИмяСервера, ТаймаутОтправкаПолучение); + + Запрос = Новый HTTPЗапрос(СсылкаПоЧастям.ПутьНаСервере); + + Данные = Новый ДвоичныеДанные(СообщениеОбмена); + Запрос.УстановитьТелоИзДвоичныхДанных(Данные); + + Ответ = HTTPСоединение.Записать(Запрос); + + Если Ответ.КодСостояния <> 201 Тогда + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект, "ВыгрузкаДанных"); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПодключениеУстановлено() Экспорт + + Если ПустаяСтрока(КаталогВОблаке) Тогда + Путь = "disk:/"; + Иначе + Путь = "disk:/" + КаталогВОблаке + "/"; + КонецЕсли; + + ЗаголовокHTTP = Новый Соответствие(); + ЗаголовокHTTP.Вставить("Authorization","OAuth " + AccessToken); + + РесурсЗапроса = "/v1/disk/resources?fields=resource_id&path=%1&limit=1"; + РесурсЗапроса = СтрШаблон(РесурсЗапроса, Путь); + + HTTPСоединение = HTTPСоединение("cloud-api.yandex.net", Таймаут); + АдресРесурса = Новый HTTPЗапрос(РесурсЗапроса, ЗаголовокHTTP); + Ответ = HTTPСоединение.Получить(АдресРесурса); + + Если Ответ.КодСостояния <> 200 Тогда + + Тело = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + СообщениеОбОшибке = ТранспортСообщенийОбмена.JSONВЗначение(Тело)["message"]; + ТранспортСообщенийОбмена.ЗаписатьСообщениеВЖурналРегистрации(ЭтотОбъект); + + Возврат Ложь; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция HTTPСоединение(Сервер, Таймаут) + + ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); + + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); + Прокси = МодульПолучениеФайловИзИнтернета.ПолучитьПрокси("https"); + КонецЕсли; + + Возврат Новый HTTPСоединение(Сервер,,,, Прокси, Таймаут, ЗащищенноеСоединение); + +КонецФункции + +#КонецОбласти + +#Область Инициализация + +ВременныйКаталог = Неопределено; +СообщениеОбмена = Неопределено; + +Таймаут = 20; +ТаймаутОтправкаПолучение = 43200; + +#КонецОбласти + +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Templates/ПолучениеТокена_ru/Template.htmldoc b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Templates/ПолучениеТокена_ru/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Templates/ПолучениеТокена_ru/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Templates/ПолучениеТокена_ru/ru.html b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Templates/ПолучениеТокена_ru/ru.html new file mode 100644 index 000000000..b88a1325b --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/Templates/ПолучениеТокена_ru/ru.html @@ -0,0 +1,47 @@ + + +

                  Для подключения к сервису Яндекс.Диск необходимо получить OAuth-токен.

                  + +

                  Как это сделать можно прочитать перейдя по ссылке.

                  + +

                  Или выполнив шаги ниже.

                  + +

                  1. Войдите в аккаунт на Яндексе.

                  +

                  +

                  2. Откройте страницу создания приложения
                  +3. Укажите название вашего сервиса и при необходимости прикрепите иконку.
                  +4. Выберите платформы, на которых будет работать ваше приложение, и укажите их параметры.

                  +

                  +

                  +5. В разделе Доступ к данным выберите необходимые права доступа:

                  + +
                  • Запись в любом месте на Диске - cloud_api:disk.write;
                  • + +
                  • Чтение всего Диска - cloud_api:disk.read;
                  • + +
                  • Доступ к папке приложения на Диске - cloud_api:disk.app_folder;
                  • + +
                  • Доступ к информации о Диске - cloud_api:disk.info.
                  • +

                  Примечание: Если необходимые права доступа не появляются в выпадающем списке, то их необходимо вручную указать в поле Название доступа

                  +
                  +

                  + +

                  6. Укажите электронную почту для связи.
                  +7. Внизу страницы нажмите Создать приложение. На экране появятся его описание.

                  +


                  +8. Скопируйте идентификатор приложения из поля ClientID и Client secret в соотвествующие поля низу формы и нажмите кнопку Получить токен.

                  +

                  +

                  Вы будете перенаправлены на страницу авторизации в сервисе Яндекса. После успешной авторизации будет получен токен и вы будете перенаправлены в форму настройки подключения.

                  +

                  В дальнейшем открыть страницу со всеми вашими приложениями вы сможете по ссылке oauth.yandex.ru.

                  + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/ТранспортСообщенийОбменаЯндексДиск.mdo b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/ТранспортСообщенийОбменаЯндексДиск.mdo new file mode 100644 index 000000000..fea255fa8 --- /dev/null +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаЯндексДиск/ТранспортСообщенийОбменаЯндексДиск.mdo @@ -0,0 +1,181 @@ + + + + + + + ТранспортСообщенийОбменаЯндексДиск + + ru + Транспорт сообщений обмена Яндекс.Диск + + true + DataProcessor.ТранспортСообщенийОбменаЯндексДиск.Form.Форма + true + + + ru + + + + AccessToken + + ru + Access token + + + String + + + + + + + ClientID + + ru + Client ID + + + String + + + + + + + ClientSecret + + ru + Client secret + + + String + + + + + + + ExpiresIn + + ru + Expires in + + + Date + + + + + + + RefreshToken + + ru + Refresh token + + + String + + + + + + + КаталогВОблаке + + ru + Каталог в облаке + + + String + + 100 + + + + + + + ПарольАрхиваСообщенияОбмена + + ru + Пароль архива сообщения обмена + + + String + + + + + + + СжиматьФайлИсходящегоСообщения + + ru + Сжимать файл исходящего сообщения + + + Boolean + + + + + + Транслитерация + + ru + Транслитерация + + + Boolean + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ФормаНастройки + + ru + Форма настройки + + PersonalComputer + MobileDevice + + + ФормаПолученияТокена + + ru + Форма получения токена + + PersonalComputer + MobileDevice + + + ФормаАвторизации + + ru + Форма авторизации + + PersonalComputer + MobileDevice + + + ПолучениеТокена_ru + + ru + Получение токена + + HTMLDocument + + diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html index 5ad24c67a..a1782f532 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ВыборОбъектовМетаданныхПоПодсистемам/Help/ru.html @@ -1,6 +1,6 @@ -

                  Предназначено для настройки области полнотекстового поиска.

                  -

                  Можно ограничить область полнотекстового поиска с помощью переключателя, тем самым увеличив точность результатов поиска.

                  +

                  Предназначено для настройки области полнотекстового поиска.

                  +

                  Можно ограничить область полнотекстового поиска с помощью переключателя, тем самым увеличив точность результатов поиска.

                  По умолчанию поиск производится Везде.

                  Ограничение области поиска

                  • С помощью переключателя укажите В разделах. diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl index 9dea93247..6c2744078 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/НастройкиУдаленияОбъектов/Module.bsl @@ -21,6 +21,7 @@ УстановитьСостояниеФормыПоНастройкамРегламентногоЗадания(ЭтотОбъект); Если ОбщегоНазначения.РазделениеВключено() Тогда + Элементы.ИспользоватьРегламентноеУдаление.Заголовок = НСтр("ru = 'Автоматически удалять помеченные объекты'"); Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость = Ложь; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 6288661c2..cd687656f 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -3166,6 +3166,10 @@ -1 Left + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + OnOpen ПриОткрытии diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index cf8c57a09..cb9860a23 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -83,12 +83,14 @@ УстановитьУсловноеОформление(); КонецЕсли; - НастройкиОтбора = Настройки["ОтборМетаданных"]; - Если ЗначениеЗаполнено(НастройкиОтбора) Тогда - ОтборМетаданных = ОтборМетаданныхТолькоСуществующие(НастройкиОтбора); - Элементы.НастроитьОтбор.Заголовок = ПредставлениеОтбораМетаданных(НастройкиОтбора); - ИначеЕсли ЗначениеЗаполнено(Параметры.ОтборМетаданных) Тогда + Если Параметры.ОтборМетаданных.Количество() > 0 Тогда ОтборМетаданных = Параметры.ОтборМетаданных; + Иначе + НастройкиОтбора = Настройки["ОтборМетаданных"]; + Если ЗначениеЗаполнено(НастройкиОтбора) Тогда + ОтборМетаданных = ОтборМетаданныхТолькоСуществующие(НастройкиОтбора); + Элементы.НастроитьОтбор.Заголовок = ПредставлениеОтбораМетаданных(НастройкиОтбора); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -111,6 +113,13 @@ ПодключитьОбработчикОжидания("ЗапуститьЗаданиеСОжиданием", 0.1, Истина); КонецПроцедуры +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + Если Параметры.ОтборМетаданных.Количество() > 0 Тогда + Настройки["ОтборМетаданных"] = Неопределено; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) Если ЗавершениеРаботы Тогда @@ -1170,19 +1179,19 @@ &НаСервере Процедура УстановитьПереданныйОтборМетаданных() - Перем Элемент; - Перем УстановленныйОтбор; + УстановленныйОтбор = Новый СписокЗначений; Для Каждого Элемент Из Параметры.ОтборМетаданных Цикл УстановленныйОтбор.Добавить(Элемент.Значение, ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(Элемент.Значение).Представление()); КонецЦикла; УстановитьОтборМетаданных(ЭтотОбъект, УстановленныйОтбор); Параметры.ОтборМетаданных = УстановленныйОтбор; + КонецПроцедуры -// Настройка формы, если форма открыта через клиентский АПИ. &НаСервере Процедура НастроитьФормуДляРаботыКакСервис() + УдалятьПриОткрытии = Истина; Элементы.СтраницыИнформация.Видимость = Ложь; Элементы.ДеревоПомеченныхНаУдалениеНастроить.Видимость = Ложь; @@ -1192,6 +1201,7 @@ Элементы.СтраницыОтображениеСостояния.Видимость = Истина; АвтоЗаголовок = Ложь; Заголовок = ""; + КонецПроцедуры &НаСервере diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 81b406671..e555cb623 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -1,36 +1,36 @@

                    Предназначена для окончательного удаления помеченных объектов.

                    В процессе работы с приложением можно помечать на удаление объекты (например, ошибочно введенные). Помеченные на удаление объекты могут быть безвозвратно удалены пользователем с административными правами.

                    -

                    Команда Удаление помеченных объектов находится в разделе Администрирование - Обслуживание. Также можно найти эту команду в разделе Администрирование - Общие настройки - Удаление помеченных объектов. Также помощник Удаление помеченных объектов можно открыть из любого списка приложения во время работы с ним по команде Еще - Сервис - Перейти к помеченным на удаление. В этом случае список будет отфильтрован и показывает только объекты из открытого списка.

                    +

                    Команда Удаление помеченных объектов находится в разделе Администрирование - Обслуживание. Также можно найти эту команду в разделе Администрирование - Общие настройки - Удаление помеченных объектов. Также помощник Удаление помеченных объектов можно открыть из любого списка приложения во время работы с ним по команде Еще - Сервис - Перейти к помеченным на удаление. В этом случае список будет отфильтрован и показывает только объекты из открытого списка.

                    Удаление выполняется с контролем ссылочной целостности. Это значит, что если на тот или иной объект приложения (документ, элемент справочника и т.д.) ссылаются другие объекты, то удаление объекта не будет выполнено. Тем не менее, следует помнить, что удаление помеченных объектов - необратимая операция.

                    -

                    Выбор объектов для удаления

                    +

                    Выбор объектов для удаления

                    По умолчанию показываются все помеченные на удаление объекты. Поиск таких объектов может занимать время. Можно сразу нажать кнопку Удалить все, не дожидаясь окончания поиска помеченных. Не рекомендуется делать так, если в приложении ведется активная работа многими пользователями, т.к. есть вероятность удалить нужные объекты.

                    -

                    Перед удалением приложение анализирует объекты, помеченные на удаление, и отклоняет попытку удаления, если на объекты имеются ссылки. Однако и нужные объекты могут быть удалены, если на них нет ссылок из других объектов. 

                    +

                    Перед удалением приложение анализирует объекты, помеченные на удаление, и отклоняет попытку удаления, если на объекты имеются ссылки. Однако и нужные объекты могут быть удалены, если на них нет ссылок из других объектов.

                    Если помеченных на удаление объектов в списке много, в приложении предусмотрена возможность ограничить их количество.

                    В поле Показывать можно задать правила отбора помеченных на удаление объектов. По умолчанию показываются Все помеченные на удаление объекты. Ссылка показывает условие их отбора. С помощью ссылки открывается список разделов приложения. Для ограничения количества найденных объектов предназначен переключатель:

                    -
                    • Везде - выбор всех объектов без исключения, выбрано по умолчанию. +
                      • Везде - выбор всех объектов без исключения, выбрано по умолчанию.
                      • -
                      • В разделах - выбор объектов в разделах приложения. С помощью флажков в списке разделов можно уточнить отбор. С помощью кнопок панели навигации можно выбрать все или отключить все флажки. Для подтверждения нажмите кнопку Выбрать. Настройки будут сохранены.

                      Объекты приложения представлены в виде дерева. С помощью кнопки  можно просмотреть выбранный объект приложения. Если выбрана группа, то открывается список.

                      +
                    • В разделах - выбор объектов в разделах приложения. С помощью флажков в списке разделов можно уточнить отбор. С помощью кнопок панели навигации можно выбрать все или отключить все флажки. Для подтверждения нажмите кнопку Выбрать. Настройки будут сохранены.

                    Объекты приложения представлены в виде дерева. С помощью кнопки можно просмотреть выбранный объект приложения. Если выбрана группа, то открывается список.

                    При удалении помеченных объектов может наблюдаться замедление работы приложения. Поэтому рекомендуется проводить удаление, когда в приложении не работают пользователи или когда их мало.

                    -

                    Удаление помеченных объектов 

                    -

                    Приложение позволяет удалять помеченные ранее объекты. 

                    +

                    Удаление помеченных объектов

                    +

                    Приложение позволяет удалять помеченные ранее объекты.

                    -
                    • Удалить выбранные - приложение производит поиск помеченных объектов. По умолчанию выбраны все найденные объекты, можно изменить выбор. Будут удалены выбранные ранее объекты.Через некоторое время приложение выводит сообщение о количестве удаленных объектов, при этом вмешательство потребуется, только если удаление невозможно в случае обнаружения ссылок на удаляемые объекты.
                    • +
                      • Удалить выбранные - приложение производит поиск помеченных объектов. По умолчанию выбраны все найденные объекты, можно изменить выбор. Будут удалены выбранные ранее объекты.Через некоторое время приложение выводит сообщение о количестве удаленных объектов, при этом вмешательство потребуется, только если удаление невозможно в случае обнаружения ссылок на удаляемые объекты.
                      • Отменить - прекратить удаление.
                      • В случае успешного выполнения приложение выводит сообщение о количестве удаленных объектов. Для возвращения в приложение нажмите кнопку Закрыть.

                      Действия при невозможности удаления объектов

                      • В случае если удаляемый объект используется в других объектах, то приложение не удалит этот объект и на странице с результатами покажет места его использования. Показывается вся цепочка объектов, которые мешают удалению и предлагаются способы, которыми можно решить проблему.
                      • В левой части списка отображаются объекты, которые не удалось удалить, а в правой - объекты, в которых выбран отмеченный объект (места использования).
                      • -
                      • Двойным щелчком мыши по объекту или с помощью кнопки  Изменить можно открыть его и принять решение о правомерности его удаления. 
                      • После этого нажмите Повторить удаление, для того чтобы попытаться удалить объекты еще раз.
                      +
                    • Двойным щелчком мыши по объекту или с помощью кнопки Изменить можно открыть его и принять решение о правомерности его удаления.
                    • После этого нажмите Повторить удаление, для того чтобы попытаться удалить объекты еще раз.
                    • Нажав кнопку Действия, можно выбрать:
                      • Удалить - сделать еще одну попытку удаления;
                      • -
                      • Заменить удаляемый объект на другой во всех местах использования. 
                    • Нажмите Вернуться к выбору помеченных, чтобы изменить состав удаляемых объектов. +
                    • Заменить удаляемый объект на другой во всех местах использования.
                  • Нажмите Вернуться к выбору помеченных, чтобы изменить состав удаляемых объектов.
                  • Закройте форму, для того чтобы вернуться в приложение без продолжения попыток удаления.
                  • Иногда изменить документ невозможно (например, период, в котором документ, помеченный на удаление, создан и обработан, закрыт). В таких случаях нужны дополнительные действия (например, необходимо открыть период), целесообразность которых определяется в каждом конкретном случае. С помощью команды Пометить на удаление/Снять пометку меню по правой кнопке мыши можно изменить пометку удаления выбранного объекта. Например, можно снять пометку удаления с объекта, который не следует удалять или пометить на удаление объект, который препятствует удалению.
                  • После разрешения конфликтов (замены мест использования или изменения пометок удаления) можно Повторить удаление объектов. При необходимости можно вернуться к выбору объектов для удаления изменить режим удаления и выбрать другие объекты для удаления.

                  Настройка удаления объектов

                  С помощью кнопки панели навигации можно Настроить удаление помеченных объектов более точно.

                  -

                  Для того чтобы увидеть нужные реквизиты удаляемого объекта, не открывая его карточку, необходимо в списке Выводимые реквизиты задать колонки, которые требуется выводить в списке помеченных на удаление. Для этого с помощью кнопки  Добавить необходимо выбрать объект с помощью флажков, например, Валюты. Затем с помощью кнопки  Добавить выбрать нужные поля объекта, например, Загружается из Интернета.

                  +

                  Для того чтобы увидеть нужные реквизиты удаляемого объекта, не открывая его карточку, необходимо в списке Выводимые реквизиты задать колонки, которые требуется выводить в списке помеченных на удаление. Для этого с помощью кнопки Добавить необходимо выбрать объект с помощью флажков, например, Валюты. Затем с помощью кнопки Добавить выбрать нужные поля объекта, например, Загружается из Интернета.

                  С помощью переключателя можно выбрать Способ удаления:

                  • Стандартный - приложение выполняет полную проверку возможности удаления и не удаляет объекты при наличии мест использования (с контролем ссылочной целостности). Подходит для удаления одиночных объектов.
                  • @@ -42,8 +42,8 @@

                    Удаление помеченных объектов в ускоренном режиме (монопольном)

                    • Данная возможность предусмотрена для быстрого удаления больших объемов данных (например, после свертки информационной базы). Для удаления помеченных все пользователи должны выйти из приложения. В остальных случаях этот режим включать не рекомендуется, для того чтобы не блокировать работу в приложении.
                    • Удаление помеченных объектов может занимать длительное время. В это время может наблюдаться существенное замедление работы пользователей.
                    • -
                    • Предусмотрена возможность заблокировать всю работу в приложении и ускорить удаление, выбрав с помощью переключателя Способ удаления режим Ускоренный. При этом момент выбора режима и запуска могут быть сильно разнесены по времени. При настройке режима удаления выбор сохраняется. Можно в любой момент времени нажать Удалить все, после этого приложение выполнит попытку установить монопольный режим и удалить объекты.
                    • -
                    • После нажатия кнопки Удалить все требуется, чтобы в приложении никто не работал (вход в приложение будет закрыт вплоть до окончания удаления).
                    • +
                    • Предусмотрена возможность заблокировать всю работу в приложении и ускорить удаление, выбрав с помощью переключателя Способ удаления режим Ускоренный. При этом момент выбора режима и запуска могут быть сильно разнесены по времени. При настройке режима удаления выбор сохраняется. Можно в любой момент времени нажать Удалить все, после этого приложение выполнит попытку установить монопольный режим и удалить объекты.
                    • +
                    • После нажатия кнопки Удалить все требуется, чтобы в приложении никто не работал (вход в приложение будет закрыт вплоть до окончания удаления).
                    • В процессе удаления могут быть разные причины завершения задания удаления. Среди них невозможность установить монопольный режим. Для просмотра списка пользователей, работающих в приложении в данный момент, нажмите на ссылку Подробнее.

                    Настройка расписания автоматического удаления

                    • Включите флажок, для того чтобы Автоматически удалять помеченные объекты по расписанию.
                    • diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 30472575e..3ee59ac43 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -1751,8 +1751,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Передача информации на клиент. +#Область ПередачаИнформацииНаКлиент // Параметры: // ПараметрыВыполнения - см. РезультатУдаления @@ -1817,6 +1816,8 @@ #КонецОбласти +#КонецОбласти + Функция ОбъединениеТаблиц(Таблица1, Таблица2, СохранятьПорядок = Ложь) Возврат УдалениеПомеченныхОбъектовСлужебный.ОбъединениеТаблиц(Таблица1, Таблица2, СохранятьПорядок); КонецФункции @@ -1844,4 +1845,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index 9e75f9025..9c359b237 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -22,8 +22,8 @@ Объект.БезопасныйРежим = Истина; Объект.КодировкаФайлаПротоколаОбмена = "КодировкаТекста.UTF8"; - ЗаголовокФормы = НСтр("ru = 'Универсальный обмен данными в формате XML (%ВерсияОбработки%)'"); - ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, "%ВерсияОбработки%", ВерсияОбъектаСтрокойНаСервере()); + ЗаголовокФормы = НСтр("ru = 'Универсальный обмен данными в формате XML (%1)'"); + ЗаголовокФормы = СтрШаблон(ЗаголовокФормы, ВерсияОбъектаНаСервере()); Заголовок = ЗаголовокФормы; @@ -95,6 +95,10 @@ Элементы.ГруппаОС.ТекущаяСтраница = Элементы.ГруппаОС.ПодчиненныеЭлементы.ГруппаLinux; КонецЕсли; +#Если ВебКлиент Тогда + ПодключениеРасширенияРаботыСФайлами(Истина); +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -488,32 +492,17 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьИнформациюОФайлеОбменаЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор); + + НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,, АдресФайла, + ПодготовленныеПараметрыДиалогаПомещенияФайлов(), УникальныйИдентификатор); Иначе - ПолучитьИнформациюОФайлеОбменаЗавершение(Истина, АдресФайла, "", Неопределено); + ДополнительныеПараметры = ДополнительныеПараметрыОбработкиОповещения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПолучитьИнформациюОФайлеОбменаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт - - Если Результат Тогда + ДополнительныеПараметры.АдресФайлаНаСервере = АдресФайла; - Попытка - - ОткрытьФайлЗагрузкиНаСервере(Адрес); - ПредставлениеПериодаВыгрузки = ПредставлениеПериода(Объект.ДатаНачала, Объект.ДатаОкончания); - - Исключение - - СообщитьПользователю(НСтр("ru = 'Не удалось прочитать файл обмена.'")); - ОчиститьДанныеОФайлеДляЗагрузкиДанных(); - - КонецПопытки; + ПолучитьИнформациюОФайлеОбменаЗавершение(Истина, ДополнительныеПараметры); КонецЕсли; @@ -651,12 +640,13 @@ Процедура НастройкаОтладкиЗагрузки(Команда) АдресФайлаОбменаВХранилище = ""; - ИмяФайлаДляРасширения = ""; Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаОтладкиЗагрузкиЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаОбменаВХранилище, , , УникальныйИдентификатор); + + НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,, АдресФайлаОбменаВХранилище, + ПодготовленныеПараметрыДиалогаПомещенияФайлов(), УникальныйИдентификатор); Иначе @@ -664,20 +654,11 @@ Возврат; КонецЕсли; - НастройкаОтладкиЗагрузкиЗавершение(Истина, АдресФайлаОбменаВХранилище, ИмяФайлаДляРасширения, Неопределено); + ДополнительныеПараметры = ДополнительныеПараметрыОбработкиОповещения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НастройкаОтладкиЗагрузкиЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт - - Если Результат Тогда + ДополнительныеПараметры.АдресФайлаНаСервере = АдресФайлаПравилВХранилище; - Объект.ИмяФайлаОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаОбмена ,Адрес, ВыбранноеИмяФайла); - - ОткрытьФормуНастройкиОтладкиОбработчиков(Ложь); + НастройкаОтладкиЗагрузкиЗавершение(Истина, ДополнительныеПараметры); КонецЕсли; @@ -705,8 +686,6 @@ Возврат; КонецЕсли; - ИмяФайлаДляРасширения = ""; - Если ЭтоКлиент Тогда Если Не ПустаяСтрока(АдресФайлаПравилВХранилище) @@ -715,8 +694,10 @@ АдресФайлаПравилВХранилище = ""; КонецЕсли; - ОписаниеОповещения = Новый ОписаниеОповещения("ПрочитатьПравилаОбменаЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище, , , УникальныйИдентификатор); + ОписаниеОповещения = Новый ОписаниеОповещения("ПрочитатьПравилаОбменаЗавершение", ЭтотОбъект); + + НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,, АдресФайлаПравилВХранилище, + ПодготовленныеПараметрыДиалогаПомещенияФайлов(), УникальныйИдентификатор); Иначе @@ -725,30 +706,11 @@ Возврат; КонецЕсли; - ПрочитатьПравилаОбменаЗавершение(Истина, АдресФайлаПравилВХранилище, ИмяФайлаДляРасширения, Неопределено); + ДополнительныеПараметры = ДополнительныеПараметрыОбработкиОповещения(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПрочитатьПравилаОбменаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт - - Если Результат Тогда + ДополнительныеПараметры.АдресФайлаНаСервере = АдресФайлаПравилВХранилище; - АдресФайлаПравилВХранилище = Адрес; - - ВыполнитьЗагрузкуПравилОбмена(Адрес, ВыбранноеИмяФайла); - - Если Объект.ФлагОшибки Тогда - - УстановитьПризнакЗагрузкиПравил(Ложь); - - Иначе - - УстановитьПризнакЗагрузкиПравил(Истина); - - КонецЕсли; + ПрочитатьПравилаОбменаЗавершение(Истина, ДополнительныеПараметры); КонецЕсли; @@ -931,14 +893,6 @@ КонецПроцедуры -// Возвращает версию обработки. -&НаСервере -Функция ВерсияОбъектаСтрокойНаСервере() - - Возврат РеквизитФормыВЗначение("Объект").ВерсияОбъекта(); - -КонецФункции - &НаКлиенте Процедура ВыполнитьЗагрузкуПравилОбмена(АдресФайлаПравилВХранилище = "", ИмяФайлаДляРасширения = "") @@ -1042,6 +996,68 @@ КонецПроцедуры +&НаКлиенте +Процедура НастройкаОтладкиЗагрузкиЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Адрес = ""; + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("АдресФайлаНаСервере") Тогда + + Адрес = ДополнительныеПараметры.АдресФайлаНаСервере; + + Иначе + + Адрес = Результат.Адрес; + + КонецЕсли; + + Объект.ИмяФайлаОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаОбмена ,Адрес); + + ОткрытьФормуНастройкиОтладкиОбработчиков(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьПравилаОбменаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяВыбранногоФайла = ""; + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("АдресФайлаНаСервере") Тогда + + АдресФайлаПравилВХранилище = ДополнительныеПараметры.АдресФайлаНаСервере; + + Иначе + + АдресФайлаПравилВХранилище = Результат.Адрес; + ИмяВыбранногоФайла = Результат.СсылкаНаФайл.Имя; + + КонецЕсли; + + + ВыполнитьЗагрузкуПравилОбмена(АдресФайлаПравилВХранилище, ИмяВыбранногоФайла); + + Если Объект.ФлагОшибки Тогда + + УстановитьПризнакЗагрузкиПравил(Ложь); + + Иначе + + УстановитьПризнакЗагрузкиПравил(Истина); + + КонецЕсли; + +КонецПроцедуры + // Открывает диалог выбора файла. // &НаКлиенте @@ -1350,14 +1366,15 @@ Процедура ВыполнитьЗагрузкуИзФормы() АдресФайла = ""; - ИмяФайлаДляРасширения = ""; ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаОбмена.СписокВыбора, ИмяФайлаОбмена, ЗагрузкаДанныхИхФайла); Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЗагрузкуИзФормыЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор); + + НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,, АдресФайла, + ПодготовленныеПараметрыДиалогаПомещенияФайлов(), УникальныйИдентификатор); Иначе @@ -1365,23 +1382,76 @@ Возврат; КонецЕсли; - ВыполнитьЗагрузкуИзФормыЗавершение(Истина, АдресФайла, ИмяФайлаДляРасширения, Неопределено); + ДополнительныеПараметры = ДополнительныеПараметрыОбработкиОповещения(); + ДополнительныеПараметры.АдресФайлаНаСервере = АдресФайла; + + ВыполнитьЗагрузкуИзФормыЗавершение(Истина, ДополнительныеПараметры); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ВыполнитьЗагрузкуИзФормыЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт +Процедура ВыполнитьЗагрузкуИзФормыЗавершение(Результат, ДополнительныеПараметры) Экспорт - Если Результат Тогда + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяВыбранногоФайла= ""; + Адрес = ""; + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("АдресФайлаНаСервере") Тогда - ВыполнитьЗагрузкуНаСервере(Адрес, ВыбранноеИмяФайла); + Адрес = ДополнительныеПараметры.АдресФайлаНаСервере; - ОткрытьДанныеПротоколовОбменаПриНеобходимости(); + Иначе + + Адрес = Результат.Адрес; + ИмяВыбранногоФайла = Результат.СсылкаНаФайл.Имя; + + КонецЕсли; + + ВыполнитьЗагрузкуНаСервере(Адрес, ИмяВыбранногоФайла); + + ОткрытьДанныеПротоколовОбменаПриНеобходимости(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИнформациюОФайлеОбменаЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Адрес = ""; + + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("АдресФайлаНаСервере") Тогда + + Адрес = ДополнительныеПараметры.АдресФайлаНаСервере; + + Иначе + + Адрес = Результат.Адрес; КонецЕсли; + Попытка + + ОткрытьФайлЗагрузкиНаСервере(Адрес); + ПредставлениеПериодаВыгрузки = ПредставлениеПериода(Объект.ДатаНачала, Объект.ДатаОкончания); + + Исключение + + СообщитьПользователю(НСтр("ru = 'Не удалось прочитать файл обмена.'")); + ОчиститьДанныеОФайлеДляЗагрузкиДанных(); + + КонецПопытки; + КонецПроцедуры &НаСервере @@ -1421,7 +1491,7 @@ КонецЕсли; Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", ОбщегоНазначения.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", ОбъектДляСервера.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -1534,9 +1604,7 @@ Если ЭтоКлиент И Не ПрямаяВыгрузка И Не Объект.ФлагОшибки Тогда - ИмяСохраняемогоФайла = ?(Объект.АрхивироватьФайл, НСтр("ru = 'Файл выгрузки.zip'"),НСтр("ru = 'Файл выгрузки.xml'")); - - ПолучитьФайл(АдресФайлаДанныхВХранилище, ИмяСохраняемогоФайла) + ПолучитьФайлВыгрузкиНаКлиенте(АдресФайлаДанныхВХранилище); КонецЕсли; @@ -1544,6 +1612,27 @@ КонецПроцедуры +&НаКлиенте +Процедура ПолучитьФайлВыгрузкиНаКлиенте(Адрес) + + ИмяСохраняемогоФайла = НСтр("ru = 'Файл выгрузки'"); + + ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + + ДиалогВыбора.Заголовок = НСтр("ru = 'Выберите путь для сохранения файла выгрузки'"); + ДиалогВыбора.Расширение = ?(Объект.АрхивироватьФайл, "zip", "xml"); + ДиалогВыбора.Фильтр = ?(Объект.АрхивироватьФайл, "(*.zip)|*.zip", "(*.xml)|*.xml"); + + Оповещение = Новый ОписаниеОповещения; + + ПолучаемыеФайлы = Новый Массив; + + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяСохраняемогоФайла, Адрес)); + + НачатьПолучениеФайлов(Оповещение, ПолучаемыеФайлы, ДиалогВыбора); + +КонецПроцедуры + &НаСервере Функция ВыполнитьВыгрузкуНаСервере() @@ -1609,8 +1698,10 @@ Если ЭтоКлиент И Не ПрямаяВыгрузка Тогда - АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Объект.ИмяФайлаОбмена), УникальныйИдентификатор); - УдалитьФайлы(Объект.ИмяФайлаОбмена); + АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ОбъектДляСервера.ИмяФайлаОбмена), + УникальныйИдентификатор); + + УдалитьФайлы(ОбъектДляСервера.ИмяФайлаОбмена); Иначе @@ -1931,8 +2022,9 @@ Процедура ИзменитьРежимБезопаснаяЗагрузка(Интерактивно = Истина) Элементы.ГруппаБезопаснаяЗагрузка.Доступность = Объект.БезопаснаяЗагрузка; - + ЧерезХранилище = ЭтоКлиент; + #Если ВебКлиент Тогда ЧерезХранилище = Истина; #КонецЕсли @@ -1947,28 +2039,102 @@ Процедура ПоместитьФайлПравилЗагрузкиВХранилище() ЧерезХранилище = ЭтоКлиент; + #Если ВебКлиент Тогда ЧерезХранилище = Истина; #КонецЕсли АдресФайла = ""; - ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить", ЭтотОбъект); + + ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить", ЭтотОбъект); Если ЧерезХранилище Тогда - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор); - Иначе - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, ИмяФайлаПравилЗагрузки, Ложь, УникальныйИдентификатор); + + НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,, АдресФайла, + ПодготовленныеПараметрыДиалогаПомещенияФайлов(), УникальныйИдентификатор); + + Иначе + + НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,, АдресФайла, ИмяФайлаПравилЗагрузки, УникальныйИдентификатор); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт +Процедура ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить(Результат, ДополнительныеПараметры) Экспорт - Если Результат Тогда - АдресФайлаПравилЗагрузкиВХранилище = Адрес; + Если Результат = Неопределено Или Результат.ПомещениеФайлаОтменено Тогда + Возврат; + КонецЕсли; + + АдресФайлаПравилЗагрузкиВХранилище = Результат.Адрес; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключениеРасширенияРаботыСФайлами(УстановитьЕслиНеПодключено) Экспорт + + НачатьПодключениеРасширенияРаботыСФайлами( + Новый ОписаниеОповещения("ПослеПодключения", ЭтотОбъект, УстановитьЕслиНеПодключено)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПодключения(Подключено, УстановитьЕслиНеПодключено) Экспорт + + Если Подключено Тогда + + // Расширение работы с файлами подключено + + ИначеЕсли УстановитьЕслиНеПодключено Тогда + + НачатьУстановкуРасширенияРаботыСФайлами( + Новый ОписаниеОповещения("ПодключениеРасширенияРаботыСФайлами", ЭтотОбъект, Ложь)); + + Иначе + + ТекстСообщения = НСтр("ru = 'Не удалось установить или подключить расширение работы с файлами'"); + СообщитьПользователю(ТекстСообщения); + КонецЕсли; КонецПроцедуры +// Возвращает версию обработки. +&НаСервере +Функция ВерсияОбъектаНаСервере() + + Возврат РеквизитФормыВЗначение("Объект").ВерсияОбъекта(); + +КонецФункции + +&НаКлиенте +Функция ПодготовленныеПараметрыДиалогаПомещенияФайлов() + + ПараметрыДиалогаПомещения = Новый ПараметрыДиалогаПомещенияФайлов; + + ПараметрыДиалогаПомещения.МножественныйВыбор = Ложь; + ПараметрыДиалогаПомещения.Фильтр = "Все файлы (*.*)|*.*"; + ПараметрыДиалогаПомещения.Заголовок = НСтр("ru = 'Выберите файл для загрузки'"); + + Возврат ПараметрыДиалогаПомещения; + +КонецФункции + +// Возвращаемое значение: +// Структура: +// * АдресФайлаНаСервере - Строка +// +&НаКлиенте +Функция ДополнительныеПараметрыОбработкиОповещения() + + Структура = Новый Структура; + + Структура.Вставить("АдресФайлаНаСервере", ""); + + Возврат Структура; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html index 579deb2dd..7d271d9e8 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html @@ -1,6 +1,6 @@ 

                      Обработка "Универсальный обмен данными в формате XML" предназначена для загрузки и выгрузки данных в файл из любой конфигурации, реализованной на платформе 1С:Предприятие 8.

                      Режим работы

                      -

                      При использовании управляемой формы обработка имеет два режим работы:
                      1. На клиенте. При использовании этого режима файлы правил и загружаемых данных передаются с клиента на сервер, а файл выгружаемых данных передается с сервера на клиент. Пути к этим файлам, находящимся на клиенте, необходимо указывать в диалоговом окне непосредственно перед выполнением действия.
                      2. На сервере. В этом режиме файлы не передаются на клиент и пути к ним необходимо указывать на сервере.
                      Примечание: Файл внешней обработки и файлы протоколов обмена всегда должны находиться на сервере вне зависимости от режима работы.

                      +

                      При использовании управляемой формы обработка имеет два режим работы:
                      1. На клиенте. При использовании этого режима файлы правил и загружаемых данных передаются с клиента на сервер, а файл выгружаемых данных передается с сервера на клиент. Пути к этим файлам, находящимся на клиенте, необходимо указывать в диалоговом окне непосредственно перед выполнением действия.
                      2. На сервере. В этом режиме файлы не передаются на клиент и пути к ним необходимо указывать на сервере.
                      Примечание: Файл внешней обработки и файлы протоколов обмена всегда должны находиться на сервере вне зависимости от режима работы.

                      Обработка имеет четыре закладки

                      Выгрузка данных

                      Для осуществления выгрузки данных необходимо указать имя файла, в который будет осуществляться выгрузка данных и выбрать файл правил обмена. Правила обмена для любых конфигураций могут быть настроены в специализированной конфигурации "Конвертация данных, редакция 2".

                      @@ -9,7 +9,7 @@

                      На закладке "Параметры выгрузки" можно указать дополнительные параметры выгрузки данных.

                      На закладке "Комментарий" можно написать произвольный текст-комментарий, включаемый в файл обмена.

                      Загрузка данных

                      -

                      Для осуществления загрузки данных необходимо указать имя файла, из которого будет осуществляться загрузка данных.

                      +

                      Для осуществления загрузки данных необходимо указать имя файла, из которого будет осуществляться загрузка данных.

                      Режим "Безопасная загрузка данных" позволяет использовать для загрузки данных правила обмена, указанные в поле "Имя файла правил" (по умолчанию используются правила обмена, содержащиеся в сообщении обмена). Этот режим востребован в случаях, когда необходимо обезопасить информационную базу от выполнения вредоносного кода из правил обмена, содержащихся в файле с данными.

                      Есть возможность настроить загрузку данных в транзакции. Для этого необходимо взвести флажок "Использовать транзакции" и указать количество элементов в одной транзакции при загрузке.

                      "Загружать данные в режиме обмена (ОбменДанными.Загрузка = Истина)" – если флаг установлен, то загрузка объектов будет выполнятся с установленным признаком загрузки. Это означает, что при записи объектов в базу данных будут отключены все платформенные и прикладные проверки. Исключение составляют документы, которые записываются в режиме проведения или отмены проведения. Проведение и отмена проведения документа выполняется всегда без установки режима загрузки, т.е. проверки будут выполняться.

                      @@ -39,10 +39,10 @@

                      "Вывод в протокол информационных сообщений" – если флаг установлен, то в протокол обмена будут выводиться сообщения информативного характера, помимо сообщений об ошибках обмена.

                      "Открывать файлы протоколов обмена после выполнения операций" – если флаг установлен, то после выполнения обмена данными файлы протоколов обмена будут автоматически открыты для просмотра.

                      Удаление данных

                      -

                      Закладка нужна только для разработчиков правил обмена. Позволяет удалять из информационной базы произвольные объекты.

                      -

                      Отладка выгрузки и загрузки данных 

                      -

                      Обработка позволяет совершать отладку обработчиков событий и генерировать модуль отладки из файла-правил или файла-данных.

                      -

                      Включение режима отладки обработчиков выгрузки производится на закладке "Выгрузка данных" установкой флажка "Режим отладки обработчиков выгрузки". Соответственно, на закладке "Загрузка данных" включение режима отладки загрузки производится установкой флажка "Режим отладки обработчиков загрузки". 

                      +

                      Закладка нужна только для разработчиков правил обмена. Позволяет удалять из информационной базы произвольные объекты.

                      +

                      Отладка выгрузки и загрузки данных

                      +

                      Обработка позволяет совершать отладку обработчиков событий и генерировать модуль отладки из файла-правил или файла-данных.

                      +

                      Включение режима отладки обработчиков выгрузки производится на закладке "Выгрузка данных" установкой флажка "Режим отладки обработчиков выгрузки". Соответственно, на закладке "Загрузка данных" включение режима отладки загрузки производится установкой флажка "Режим отладки обработчиков загрузки".

                      После установки режима отладки обработчиков станет доступной кнопка настройки отладки. По нажатию на эту кнопку откроется окно настройки.

                      Настройка отладки обработчиков выполняется в четыре шага:

                      Шаг 1: Выбор режима отладки алгоритмов

                      @@ -60,7 +60,7 @@

                      Шаг 2: Формирование модуля отладки


                      На втором шаге необходимо произвести выгрузку обработчиков нажатием на кнопку "Сформировать модуль отладки выгрузки (загрузки)". Сформированные обработчики и алгоритмы будут выведены в отдельное окно для просмотра. Содержимое модуля отладки необходимо скопировать в буфер обмена нажатием на кнопку "Копировать в буфер обмена".

                      Шаг 3: Создание внешней обработки

                      -


                      На этом шаге необходимо запустить конфигуратор и создать новую внешнюю обработку. В модуль обработки необходимо вставить содержимое буфера обмена (модуль отладки) и сохранить обработку под любым именем. 

                      +


                      На этом шаге необходимо запустить конфигуратор и создать новую внешнюю обработку. В модуль обработки необходимо вставить содержимое буфера обмена (модуль отладки) и сохранить обработку под любым именем.

                      Шаг 4: Подключение внешней обработки


                      На четвертом, завершающем шаге, надо указать имя файла внешней обработки в поле ввода. При этом приложение выполняет проверку по времени создания (обновления) файла обработки. Если обработка имеет более раннюю версию, чем версия файла модуля отладки, то будет выведено предупреждение и форма настройки закрыта не будет.

                      Примечание: Возможность отладки глобального обработчика конвертации "После загрузки правил обмена" не поддерживается.

                      \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 2acee2f79..1516018a7 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -20,8 +20,7 @@ // ПВД - правило выгрузки данных. // ПОД - правило очистки данных. -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ МОДУЛЯ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ (ОБЩИЕ ДЛЯ ВЫГРУЗКИ И ЗАГРУЗКИ) +#Область ВспомогательныеПеременныеМодуляДляНаписанияАлгоритмовОбщиеДляВыгрузкиИЗагрузки Перем Конвертация Экспорт; // Структура свойств конвертации (Имя, Ид, обработчики событий обмена). @@ -62,8 +61,9 @@ Перем РазделителиКонфигурации; // Массив: содержащий разделители конфигурации. -//////////////////////////////////////////////////////////////////////////////// -// ФЛАГИ НАЛИЧИЯ ГЛОБАЛЬНЫХ ОБРАБОТЧИКОВ СОБЫТИЙ +#КонецОбласти + +#Область ФлагиНаличияГлобальныхОбработчиковСобытий Перем ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта; Перем ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта; @@ -76,8 +76,9 @@ Перем ВерсияПлатформыПриемника; Перем ПлатформаПриемника; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ОБРАБОТОК ОБМЕНА (ОБЩИЕ ДЛЯ ВЫГРУЗКИ И ЗАГРУЗКИ) +#КонецОбласти + +#Область ПеременныеОбработокОбменаОбщиеДляВыгрузкиИЗагрузки Перем одТипСтрока; // Тип("Строка") Перем одТипБулево; // Тип("Булево") @@ -103,8 +104,9 @@ Перем мСписокМакетовПравилОбмена Экспорт; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ ОБРАБОТКИ ВЫГРУЗКИ +#КонецОбласти + +#Область ПеременныеМодуляОбработкиВыгрузки Перем мСчетчикВыгруженныхОбъектов Экспорт; // Число - счетчик выгруженных объектов. Перем мСчетчикНПП Экспорт; // Число - счетчик НПП @@ -114,8 +116,9 @@ Перем мСтрокаТиповДляПриемника; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ МОДУЛЯ ОБРАБОТКИ ЗАГРУЗКИ +#КонецОбласти + +#Область ПеременныеМодуляОбработкиЗагрузки Перем мСчетчикЗагруженныхОбъектов Экспорт;// Число - счетчик загруженных объектов. @@ -151,13 +154,16 @@ Перем ТекущийУровеньВложенностиВыгрузитьПоПравилу; -//////////////////////////////////////////////////////////////////////////////// -// ПЕРЕМЕННЫЕ ДЛЯ ХРАНЕНИЯ МОДУЛЕЙ СТАНДАРТНЫХ ПОДСИСТЕМ +#КонецОбласти + +#Область ПеременныеДляХраненияМодулейСтандартныхПодсистем Перем МодульДатыЗапретаИзменения; #КонецОбласти +#КонецОбласти + #Область ПрограммныйИнтерфейс #Область РаботаСоСтроками @@ -963,7 +969,7 @@ Если ВестиДополнительныйКонтрольЗаписиВXML Тогда - Стр = ЗаменитьНедопустимыеСимволыXML(Стр, ""); + Стр = ЗаменитьНедопустимыеСимволыXML(Стр, ""); КонецЕсли; @@ -1551,7 +1557,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); КонецПопытки; @@ -1571,7 +1577,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, Объект, ""); КонецПопытки; @@ -1724,7 +1730,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (глобальный)'"); - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПередКонвертациейОбъекта")); КонецПопытки; @@ -1752,7 +1758,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПередВыгрузкойОбъекта"); КонецПопытки; @@ -2029,7 +2035,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПриВыгрузкеОбъекта"); КонецПопытки; @@ -2067,7 +2073,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ПослеВыгрузкиОбъекта"); КонецПопытки; @@ -2131,7 +2137,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(76, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(76, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); КонецПопытки; @@ -2716,7 +2722,7 @@ // Функция ВерсияОбъекта() Экспорт - Версия = "1.0.3.534"; + Версия = "1.0.4.183"; Возврат Версия; КонецФункции @@ -2831,7 +2837,7 @@ ДеструкторВнешнейОбработкиОбработчиковСобытий(); - СообщитьПользователю(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВПротоколВыполнения(78); РаботаВозможна = Ложь; @@ -2865,7 +2871,7 @@ ВнешняяОбработкаОбработчиковСобытий.Деструктор(); Исключение - СообщитьПользователю(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2894,7 +2900,7 @@ Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -2999,7 +3005,7 @@ ВременныйФайлЗаписей.Открыть(ИмяФайлаЗаписей, КодировкаТекста.UTF8); Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'Ошибка при создании временного файла для выгрузки данных'")); ВызватьИсключение; КонецПопытки; @@ -3024,7 +3030,7 @@ ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(1000, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), НСтр("ru = 'Ошибка при открытии временного файла для переноса данных в файл обмена'")); ВызватьИсключение; КонецПопытки; @@ -3133,12 +3139,18 @@ КонецПроцедуры // Сохраняет в протокол выполнения (или выводит на экран) сообщения указанной структуры. -// -// Параметры: -// Код - Число - код сообщения. -// СтруктураЗаписи - Структура - структура записи протокола. -// ВзвестиФлагОшибок - Булево - если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. // +// Параметры: +// Код - Число - код сообщения. +// СтруктураЗаписи - Структура - структура записи протокола. +// ВзвестиФлагОшибок - Булево - если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. +// Уровень - Число +// Выравнивание - Число +// БезусловнаяЗаписьВПротоколОбмена - Булево +// +// Возвращаемое значение: +// Строка +// Функция ЗаписатьВПротоколВыполнения(Код="", СтруктураЗаписи=Неопределено, ВзвестиФлагОшибок=Истина, Уровень=0, Выравнивание=22, БезусловнаяЗаписьВПротоколОбмена = Ложь) Экспорт @@ -3932,7 +3944,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеВПротокол(11, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(НоваяСтрока.Источник)); КонецПопытки; @@ -6076,7 +6088,7 @@ Менеджеры[Источник].ПКО = СтрокаТаблицы; КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(11, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(Источник)); + ЗаписатьИнформациюОбОшибкеВПротокол(11, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Строка(Источник)); КонецПопытки; КонецЕсли; @@ -6180,7 +6192,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(27, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(27, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "", "ПередОбработкойПравилаОчистки"); КонецПопытки; @@ -6287,7 +6299,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(28, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(28, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "", "ПослеОбработкиПравилаОчистки"); КонецПопытки; @@ -6423,7 +6435,7 @@ Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); Если Не ФлагРежимОтладки Тогда @@ -6451,7 +6463,7 @@ СвойстваМД = Менеджеры[Тип]; ИмяТипа = СвойстваМД.ИмяТипа; - Менеджер = СвойстваМД.Менеджер; // СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, ПланСчетовМенеджер, ПланВидовРасчетаМенеджер, ПланОбменаМенеджер, ЗадачаМенеджер, БизнесПроцессМенеджер + Менеджер = СвойстваМД.Менеджер; // СправочникМенеджер, ДокументМенеджер, РегистрСведенийМенеджер, ПланСчетовМенеджер, ПланВидовРасчетаМенеджер, ПланОбменаМенеджер Если ИмяТипа = "Справочник" ИЛИ ИмяТипа = "ПланВидовХарактеристик" Тогда @@ -7535,7 +7547,8 @@ // ОбъектНайден - если Ложь, то объект не найден, а создан новый. // // Возвращаемое значение: -// Новый или найденный объект информационной базы. +// - ЛюбаяСсылка - новый или найденный объект информационной базы. +// - Неопределено - если не удалось создать объект // Функция НайтиОбъектПоСсылке(ТипОбъекта, ИмяПКО = "", @@ -7740,7 +7753,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "", "", + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "", "", ТипОбъекта, Неопределено, НСтр("ru = 'Последовательность полей поиска'")); КонецПопытки; @@ -7910,7 +7923,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПКО; ЗП.Объект = Объект; ЗП.ТипОбъекта = ТипЗнч(Объект); @@ -8606,7 +8619,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (глобальный)'"); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПередЗагрузкойОбъекта")); @@ -8641,7 +8654,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); КонецПопытки; @@ -8698,7 +8711,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -8775,7 +8788,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПравила; ЗП.НПП = НПП; ЗП.ГНПП = ГНПП; @@ -8871,7 +8884,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -8915,7 +8928,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; @@ -8983,7 +8996,7 @@ УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); ИмяОбработчика = НСтр("ru = '%1 (глобальный)'"); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПослеЗагрузкиОбъекта")); @@ -9013,7 +9026,7 @@ Исключение УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ИмяПравила, Источник, ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; @@ -9090,7 +9103,7 @@ ЗП = ПолучитьСтруктуруЗаписиПротокола(25, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.ИмяПКО = ИмяПравила; Если Не ПустаяСтрока(Источник) Тогда @@ -9549,7 +9562,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(48, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(48, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПередОбработкойВыгрузкиГруппыСвойств",, Ложь); КонецПопытки; @@ -9638,7 +9651,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПослеОбработкиВыгрузкиГруппыСвойств",, Ложь); КонецПопытки; @@ -9669,7 +9682,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(66, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(66, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник,,,Ложь); Возврат; @@ -9742,7 +9755,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(50, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(50, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПередВыгрузкойГруппыСвойств",, Ложь); Прервать; @@ -9784,7 +9797,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(51, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(51, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПриВыгрузкеГруппыСвойств",, Ложь); Прервать; @@ -9826,7 +9839,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(52, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(52, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПослеВыгрузкиГруппыСвойств",, Ложь); Прервать; @@ -9885,7 +9898,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(49, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКГС, Источник, "ПослеОбработкиВыгрузкиГруппыСвойств",, Ложь); КонецПопытки; @@ -9970,7 +9983,7 @@ Исключение Если КодОшибки <> 14 Тогда - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, ""); КонецЕсли; @@ -10030,7 +10043,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПередВыгрузкойСвойства", Значение); КонецПопытки; @@ -10076,7 +10089,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПриВыгрузкеСвойства", Значение); КонецПопытки; @@ -10203,7 +10216,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПослеВыгрузкиСвойства", Значение); КонецПопытки; @@ -10621,7 +10634,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(55, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПередВыгрузкойСвойства", Значение); КонецПопытки; @@ -10752,7 +10765,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(56, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПриВыгрузкеСвойства", Значение); КонецПопытки; @@ -10871,7 +10884,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПКО, ПКС, Источник, "ПослеВыгрузкиСвойства", Значение); КонецПопытки; @@ -10945,7 +10958,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (глобальный)'"); - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПередВыгрузкойОбъектаВыборки"), Объект); @@ -10974,7 +10987,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПередВыгрузкойОбъектаВыборки", Объект); КонецПопытки; @@ -11006,7 +11019,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (глобальный)'"); - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПослеВыгрузкиОбъектаВыборки"), Объект); @@ -11031,7 +11044,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПослеВыгрузкиОбъектаВыборки", Объект); КонецПопытки; @@ -11282,7 +11295,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); КонецПопытки; @@ -11412,7 +11425,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -11524,12 +11537,18 @@ КонецПроцедуры // Параметры: -// Данные - - ДокументОбъект -// - ПланВидовХарактеристикОбъект -// - ПланСчетовОбъект -// - БизнесПроцессОбъект -// - ЗадачаОбъект -// - РегистрСведенийМенеджерЗаписи - справочник объект, документ объект, ключ регистра сведений и т.д. +// Данные - КонстантаМенеджерЗначения +// - СправочникОбъект +// - ДокументОбъект +// - ПланВидовХарактеристикОбъект +// - ПланСчетовОбъект +// - ПланВидовРасчетаОбъект +// - БизнесПроцессОбъект +// - ЗадачаОбъект +// - РегистрСведенийНаборЗаписей +// - РегистрНакопленияНаборЗаписей +// - РегистрБухгалтерииНаборЗаписей +// - РегистрРасчетаНаборЗаписей // Процедура ПолучитьСтрокуПравилВыгрузкиПоОбъектуОбмена(Данные, МетаданныеПоследнегоОбъекта, МетаданныеОбъектаВыгрузки, ПоследняяСтрокаПравилВыгрузки, ТекущаяСтрокаПравилаВыгрузки, ВременныйМассивПравилКонвертации, ОбъектДляПравилВыгрузки, @@ -11717,7 +11736,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -11758,7 +11777,7 @@ Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ТекущаяСтрокаПравилаВыгрузки.Имя, "ПередОбработкойВыгрузкиДанных"); КонецПопытки; @@ -11842,7 +11861,7 @@ ОтменитьТранзакцию(); КонецЕсли; - ЗП = ПолучитьСтруктуруЗаписиПротокола(72, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП = ПолучитьСтруктуруЗаписиПротокола(72, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.УзелПланаОбмена = УзелОбмена; ЗП.Объект = Данные; ЗП.ТипОбъекта = ТипДанныхДляВыгрузки; @@ -11873,7 +11892,7 @@ КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПоследняяСтрокаПравилаВыгрузки.Имя, "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -12701,7 +12720,7 @@ УдалитьФайлы(ИмяВременногоФайлаПравилОбмена); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -12712,7 +12731,7 @@ УдалитьФайлы(Источник); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецЕсли; @@ -12751,7 +12770,7 @@ Текст = НСтр("ru = 'Обработчик: ""%1"": %2'"); Текст = ПодставитьПараметрыВСтроку(Текст, "ПослеЗагрузкиПравилОбмена", - ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, Текст); @@ -12868,7 +12887,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(75, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП = ПолучитьСтруктуруЗаписиПротокола(75, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Обработчик = "ПослеЗагрузкиПараметров"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(75, ЗП, Истина); @@ -12900,7 +12919,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(39, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП = ПолучитьСтруктуруЗаписиПротокола(39, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗП.Обработчик = "АлгоритмФайлаОбмена"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(39, ЗП, Истина); @@ -12938,7 +12957,7 @@ Исключение СтрокаОшибки = ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при загрузке данных: %1'"), - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); РезультирующаяСтрокаСИнформациейОбОшибке = ЗаписатьВПротоколВыполнения(СтрокаОшибки, Неопределено, Истина, , , Истина); @@ -13056,7 +13075,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (конвертация)'"); - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПередЗагрузкойДанных")); Отказ = Истина; @@ -13117,7 +13136,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (конвертация)'"); - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПослеЗагрузкиДанных")); КонецПопытки; @@ -13176,21 +13195,20 @@ Процедура СжатьРезультирующийФайлОбмена() Попытка + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); - ИмяИсходногоФайлаОбмена = ИмяФайлаОбмена; - Если АрхивироватьФайл Тогда - ИмяФайлаОбмена = СтрЗаменить(ИмяФайлаОбмена, ".xml", ".zip"); - КонецЕсли; - - Архиватор = Новый ЗаписьZipФайла(ИмяФайлаОбмена, ПарольДляСжатияФайлаОбмена, НСтр("ru = 'Файл обмена данными'")); - Архиватор.Добавить(ИмяИсходногоФайлаОбмена); + Архиватор = Новый ЗаписьZipФайла(ИмяАрхива, ПарольДляСжатияФайлаОбмена, НСтр("ru = 'Файл обмена данными'")); + Архиватор.Добавить(ИмяФайлаОбмена); Архиватор.Записать(); - УдалитьФайлы(ИмяИсходногоФайлаОбмена); + УдалитьФайлы(ИмяФайлаОбмена); + + ИмяФайлаОбмена = ИмяАрхива; Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -13223,7 +13241,7 @@ Исключение - ЗП = ПолучитьСтруктуруЗаписиПротокола(2, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП = ПолучитьСтруктуруЗаписиПротокола(2, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписатьВПротоколВыполнения(2, ЗП, Истина); Возврат ""; @@ -13425,7 +13443,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (конвертация)'"); - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПередВыгрузкойДанных")); Отказ = Истина; @@ -13485,7 +13503,7 @@ Исключение ИмяОбработчика = НСтр("ru = '%1 (конвертация)'"); - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ПодставитьПараметрыВСтроку(ИмяОбработчика, "ПослеВыгрузкиДанных")); КонецПопытки; @@ -13523,7 +13541,7 @@ КонецЕсли; Отказ = Истина; - СтрокаОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + СтрокаОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписатьВПротоколВыполнения(ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при выгрузке данных: %1'"), СтрокаОшибки), Неопределено, Истина, , , Истина); @@ -14372,7 +14390,7 @@ СтрокаСообщенияОбОшибке = НСтр("ru = 'При попытке соединения с COM-сервером произошла следующая ошибка: |%1'"); СтрокаСообщенияОбОшибке = ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, - ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); СообщитьПользователю(СтрокаСообщенияОбОшибке); @@ -14485,7 +14503,7 @@ Исключение Текст = НСтр("ru = 'При попытке создания обработки %1 произошла ошибка: %2'"); - Текст = ПодставитьПараметрыВСтроку(Текст, Метаданные().Имя, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Текст = ПодставитьПараметрыВСтроку(Текст, Метаданные().Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); СообщитьПользователю(Текст); РезультатПодключения = Неопределено; @@ -14670,8 +14688,7 @@ Возврат Структура; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции из базовой функциональности для обеспечения автономности. +#Область ПроцедурыИФункцииИзБазовойФункциональностиДляОбеспеченияАвтономности Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт @@ -14784,12 +14801,15 @@ Возврат МодульОбщегоНазначения.КодОсновногоЯзыка(); КонецЕсли; Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + КонецФункции #КонецОбласти #КонецОбласти +#КонецОбласти + #Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); diff --git a/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Forms/Форма/Form.form index cb0b94a3a..2c24c10d5 100644 --- a/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Forms/Форма/Form.form @@ -2127,10 +2127,26 @@ ДатаАктуальности ДатаАктуальности + + <localValue> + <content> + <key>ru</key> + <value>Дата актуальности</value> + </content> + </localValue> + ДатаБессрочно ДатаБессрочно + + <localValue> + <content> + <key>ru</key> + <value>Дата бессрочно</value> + </content> + </localValue> + ТипСубъекта diff --git a/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Help/ru.html b/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Help/ru.html index 5b690d1b2..fff1e607e 100644 --- a/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Help/ru.html +++ b/SSL/src/DataProcessors/УничтожениеПерсональныхДанных/Help/ru.html @@ -1,4 +1,4 @@ -Предназначена для уничтожения персональных данных.  +Предназначена для уничтожения персональных данных.

                      В соответствии с требованиями, утвержденными Роскомнадзором, оператор персональных данных обязан уничтожать данные в случаях:
                      @@ -8,11 +8,11 @@
                    • достижение цели обработки персональных данных;
                    • отзыв субъектом персональных данных согласия на обработку.

                    -

                    Для того чтобы была возможность Уничтожать персональные данные, в разделе Администрирование - Настройки пользователей и прав - Защита персональных данных нужно установить флажок Уничтожать персональные данные. 

                    -

                    В верхней части панели указаны субъекты, у которых истек или истекает Срок хранения и требуется провести их дальнейшее уничтожение. 

                    -

                    С помощью флажка Показывать только с истекшим сроком хранения отобразятся те персональные данные,  у которых срок хранения уже истек. 

                    -

                    В поле Комментарий можно увидеть причину, по которой необходимо составить Акт об уничтожении персональных данных субъекта, например Отозвано согласие на обработку персональных данных. С помощью кнопки Создать акт можно составить Акт об уничтожении персональных данных.

                    +

                    Для того чтобы была возможность Уничтожать персональные данные, в разделе Администрирование - Настройки пользователей и прав - Защита персональных данных нужно установить флажок Уничтожать персональные данные.

                    +

                    В верхней части панели указаны субъекты, у которых истек или истекает Срок хранения и требуется провести их дальнейшее уничтожение.

                    +

                    С помощью флажка Показывать только с истекшим сроком хранения отобразятся те персональные данные, у которых срок хранения уже истек.

                    +

                    В поле Комментарий можно увидеть причину, по которой необходимо составить Акт об уничтожении персональных данных субъекта, например Отозвано согласие на обработку персональных данных. С помощью кнопки Создать акт можно составить Акт об уничтожении персональных данных.


                    -

                    См. также:

                    +

                    См. также:

                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index ddeeb345f..8cd9c98f6 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -119,7 +119,7 @@ ИначеЕсли КонтекстВыбора = "АгрегатыОптимальные" Тогда ОптимальныйОтносительныйРазмер = ВыбранноеЗначение.ОтносительныйРазмер; - ПолучитьОптимальныеАгрегатКлиент(); + ПолучитьОптимальныеАгрегатыКлиент(); КонецЕсли; @@ -594,7 +594,7 @@ &НаКлиенте Процедура ПолучитьОптимальныеАгрегаты(Команда) - ПолучитьОптимальныеАгрегатКлиент(); + ПолучитьОптимальныеАгрегатыКлиент(); КонецПроцедуры &НаКлиенте @@ -740,8 +740,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики асинхронных диалогов. +#Область ОбработчикиАсинхронныхДиалогов &НаКлиенте Процедура ОчиститьАгрегатыПоРегистрамЗавершение(Ответ, ДополнительныеПараметры) Экспорт @@ -787,8 +786,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент +#КонецОбласти + +#Область Клиент &НаКлиенте Процедура УстановитьФильтрСпискаАгрегатов() @@ -997,7 +997,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПолучитьОптимальныеАгрегатКлиент() +Процедура ПолучитьОптимальныеАгрегатыКлиент() Если ПолныеВозможности Тогда Если Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки.Количество() = 0 Тогда @@ -1011,7 +1011,7 @@ КонецЕсли; Результат = ПолучитьОптимальныеАгрегатыСервер(); - Обработчик = Новый ОписаниеОповещения("ПолучитьОптимальныеАгрегатКлиентЗавершение", ЭтотОбъект, Результат); + Обработчик = Новый ОписаниеОповещения("ПолучитьОптимальныеАгрегатыКлиентЗавершение", ЭтотОбъект, Результат); Если Не Результат.МожноПолучить Тогда Возврат; КонецЕсли; @@ -1033,7 +1033,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПолучитьОптимальныеАгрегатКлиентЗавершение(ПолученныеФайлы, РезультатВыполнения) Экспорт +Процедура ПолучитьОптимальныеАгрегатыКлиентЗавершение(ПолученныеФайлы, РезультатВыполнения) Экспорт Если ПолученныеФайлы = Неопределено Тогда Возврат; @@ -1047,8 +1047,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Клиент, Сервер +#КонецОбласти + +#Область КлиентСервер &НаКлиентеНаСервереБезКонтекста Функция ОкончаниеПериода(Знач Дата) @@ -1064,8 +1065,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вызов сервера, Сервер +#КонецОбласти + +#Область ВызовСервераСервер &НаСервере Функция ПолучитьОптимальныеАгрегатыСервер() @@ -1421,8 +1423,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервер +#КонецОбласти + +#Область Сервер &НаСервере Функция ВыделенныеСтроки(ИмяТаблицы) @@ -1522,3 +1525,5 @@ КонецПроцедуры #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html index 588883a19..372afac53 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html @@ -1,7 +1,7 @@

                    Предназначена для задания параметров перестроения использования агрегатов и получения списка оптимальных агрегатов.

                    • -
                      Максимальный относительный размер - максимальная сумма размеров агрегатов в процентах от таблицы движений. Если параметр не указан или равен нулю, то нет ограничения размера агрегатов.
                      +
                      Максимальный относительный размер - максимальная сумма размеров агрегатов в процентах от таблицы движений. Если параметр не указан или равен нулю, то нет ограничения размера агрегатов.
                    • -
                      Минимальный эффект от перестроения - процент, на который необходимо увеличить эффект старой сети при перестроении, если новая сеть увеличивает эффект на Минимальный эффект от перестроения %, то метод реально перестраивает сеть. Если параметр не указан или равен нулю, то нет требований к эффекту. Данный параметр недоступен для получения списка оптимальных агрегатов.
                    \ No newline at end of file +
                    Минимальный эффект от перестроения - процент, на который необходимо увеличить эффект старой сети при перестроении, если новая сеть увеличивает эффект на Минимальный эффект от перестроения %, то метод реально перестраивает сеть. Если параметр не указан или равен нулю, то нет требований к эффекту. Данный параметр недоступен для получения списка оптимальных агрегатов.
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html index 5ca3507a3..6c036e564 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html @@ -2,11 +2,11 @@

                  Предназначена для администрирования итогов регистров накопления и бухгалтерии, агрегатов оборотных регистров накопления.

                  Регистры приложения предназначены для хранения и обработки информации, отражающей деятельность предприятия. В регистрах обычно хранится информация об изменении состояний объектов предметной области (документов, справочников) или другая информация, не отражающаяся непосредственно в этих объектах. Например, в регистрах может храниться информация о курсах валют.

                  Агрегаты - это специальный механизм, реализованный в оборотных регистрах накопления. Для любого регистра может быть создано несколько агрегатов. Каждый агрегат - это специализированное хранилище, содержащее агрегированные данные регистра в различных разрезах, удобных для формирования отчетов в конкретной информационной базе. Использование агрегатов позволяет значительно сократить время формирования отчетов, что важно для больших информационных баз.

                  -

                  Открывается по соответствующей команде в разделе Администрирование - Обслуживание - Регламентные операции.

                  -

                  Управление итогами и агрегатами включает в себя процедуры, связанные с итогами регистров накопления и бухгалтерии, а также агрегатами оборотных регистров накопления. Управление итогами разделяется на два режима:

                  +

                  Открывается по соответствующей команде в разделе Администрирование - Обслуживание - Регламентные операции.

                  +

                  Управление итогами и агрегатами включает в себя процедуры, связанные с итогами регистров накопления и бухгалтерии, а также агрегатами оборотных регистров накопления. Управление итогами разделяется на два режима:

                  • Часто используемые возможности - режим предоставляет простые средства для выполнения наиболее часто используемых действий с итогами регистров. Позволяет "одним нажатием" выполнить наиболее частые действия, возникающие при обслуживании приложения.
                  • -
                  • Полные возможности - предоставляет полный доступ к возможностям управления итогами и агрегатами приложения.  Режим позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.

                  Для переключения режимов служит ссылка в правом нижнем углу окна. Приложение запоминает режим открытия окна.

                  +
                • Полные возможности - предоставляет полный доступ к возможностям управления итогами и агрегатами приложения. Режим позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.

                Для переключения режимов служит ссылка в правом нижнем углу окна. Приложение запоминает режим открытия окна.

                Некоторые операции с регистрами и агрегатами можно выполнять по заданному расписанию с помощью регламентных заданий.

                Часто используемые возможности

                Операции с итогами

                @@ -19,7 +19,7 @@
                Перестроить и заполнить - для всех оборотных регистров накопления, для которых включен режим агрегатов и установлено их использование, выполняет операцию перестроения использования агрегатов и выполняет заполнение агрегатов. Операция может выполняться продолжительное время. Данную операцию, как правило, нужно выполнять периодически, для этого можно воспользоваться регламентным заданием.
              • -
                Получить оптимальные агрегаты - выполняет получение списка оптимальных агрегатов для всех оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты. Будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван именем соответствующего регистра. Так, для регистра Продажи файл будет называться Продажи.xml. Файлы используются для загрузки и создания оптимальных агрегатов в Конфигураторе. При загрузке оптимальных агрегатов может возникнуть ситуация, когда необходимо будет изменить список оптимальных агрегатов, а для этого потребуется снять с поддержки конфигурацию. Операция не является регулярной. Данная операция наиболее ресурсоемкая и продолжительная, поэтому рекомендуется выполнять ее в случаях, когда с приложением не работают другие пользователи. 
                +
                Получить оптимальные агрегаты - выполняет получение списка оптимальных агрегатов для всех оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты. Будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван именем соответствующего регистра. Так, для регистра Продажи файл будет называться Продажи.xml. Файлы используются для загрузки и создания оптимальных агрегатов в Конфигураторе. При загрузке оптимальных агрегатов может возникнуть ситуация, когда необходимо будет изменить список оптимальных агрегатов, а для этого потребуется снять с поддержки конфигурацию. Операция не является регулярной. Данная операция наиболее ресурсоемкая и продолжительная, поэтому рекомендуется выполнять ее в случаях, когда с приложением не работают другие пользователи.
                • Выполнение расчета оптимальных агрегатов может потребоваться в следующих случаях:
                  • @@ -34,12 +34,12 @@

                    Список показывает текущее состояние регистров приложения.

                    Итоги

                    На вкладке Итоги представлен список регистров накопления и бухгалтерии.

                    -

                    В список попадают только те регистры, у которых для текущего пользователя установлено право Управление итогами.

                    +

                    В список попадают только те регистры, у которых для текущего пользователя установлено право Управление итогами.

                    Список показывает текущее состояние регистров приложения.

                    В списке выводится:

                    • Итоги - флажок установлен, если для регистра ведутся итоги, отсутствие флажка означает, что итоги по регистру не рассчитываются;
                    • -
                    • Регистр и режим использования - наименование регистра и, в виде подсказки, режим работы регистра: Просто итоговый регистр (когда у регистра есть остатки), Итоги или Агрегаты (когда у регистра есть только обороты); +
                    • Регистр и режим использования - наименование регистра и, в виде подсказки, режим работы регистра: Просто итоговый регистр (когда у регистра есть остатки), Итоги или Агрегаты (когда у регистра есть только обороты);
                    • Период - дата, по которую рассчитаны итоги регистра (для регистров накопления - на конец предыдущего месяца, для регистров бухгалтерии - на конец текущего месяца);
                    • @@ -51,7 +51,7 @@
                      с помощью соответствующей кнопки Обновить информацию о состоянии итогов;
                    • -
                      с помощью кнопки Итоги - включение и выключение использования итогов,
                      +
                      с помощью кнопки Итоги - включение и выключение использования итогов,
                    • с помощью кнопки Текущие итоги - включение и выключение использования текущих итогов,
                      @@ -60,11 +60,11 @@
                      с помощью соответствующей кнопки - включение и выключение Разделения итогов,
                    • -
                      с помощью соответствующей кнопки Установить выбранный период рассчитанных итогов,
                      +
                      с помощью соответствующей кнопки Установить выбранный период рассчитанных итогов,
                    • -
                      С помощью кнопки Пересчет - пересчитать итоги, пересчитать текущие итоги, пересчитать итоги за выбранный период.

                    Агрегаты

                    -
                    • На вкладке в верхнем списке содержится перечень оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты, а в нижнем списке - перечень этих агрегатов. В списке агрегатов содержится признак использования агрегата и статистическая информация о нем. +
                      С помощью кнопки Пересчет - пересчитать итоги, пересчитать текущие итоги, пересчитать итоги за выбранный период.

                    Агрегаты

                    +
                    • На вкладке в верхнем списке содержится перечень оборотных регистров накопления, для которых в Конфигураторе заданы агрегаты, а в нижнем списке - перечень этих агрегатов. В списке агрегатов содержится признак использования агрегата и статистическая информация о нем.
                    • В колонке Регистр кроме наименования регистра выводится информация о режиме использования регистра: Используются данные итогов или Используются данные агрегатов.
                    • @@ -80,17 +80,17 @@
                    • -
                      С помощью кнопки Обновить заполнить агрегаты,
                      +
                      С помощью кнопки Обновить заполнить агрегаты,
                    • -
                      С помощью соответствующей кнопки Очистить агрегаты,
                      +
                      С помощью соответствующей кнопки Очистить агрегаты,
                    • -
                      С помощью кнопки Оптимальные выполнить расчет списка оптимальных агрегатов. Для этого необходимо задать параметр расчета оптимальных агрегатов. После этого будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван идентификатором соответствующего регистра. Так, для регистра Продажи файл будет называться Продажи.xml. После выполнения операции, в списке регистров жирным шрифтом будут выделены те регистры, для которых необходимо обновить список агрегатов на рассчитанные оптимальные агрегаты. Обновление необходимо выполнять в Конфигураторе.
                      +
                      С помощью кнопки Оптимальные выполнить расчет списка оптимальных агрегатов. Для этого необходимо задать параметр расчета оптимальных агрегатов. После этого будет запрошен каталог, куда будут сохранены xml-файлы со списками оптимальных агрегатов. Каждый файл будет назван идентификатором соответствующего регистра. Так, для регистра Продажи файл будет называться Продажи.xml. После выполнения операции, в списке регистров жирным шрифтом будут выделены те регистры, для которых необходимо обновить список агрегатов на рассчитанные оптимальные агрегаты. Обновление необходимо выполнять в Конфигураторе.
                      • Задайте Параметр расчета оптимальных агрегатов.
                    • -
                    • С помощью кнопки Выделить все можно сделать активными все строки в списке, для того чтобы затем выполнить над ними предусмотренные остальными кнопками операции.
                    • +
                    • С помощью кнопки Выделить все можно сделать активными все строки в списке, для того чтобы затем выполнить над ними предусмотренные остальными кнопками операции.
                    • -
                      С помощью кнопки  или клавиши F5 можно Обновить информацию об агрегатах.

                    В нижней части окна отображается список агрегатов регистра, на котором установлен курсор в верхнем списке.

                    +
                    С помощью кнопки или клавиши F5 можно Обновить информацию об агрегатах.

                  В нижней части окна отображается список агрегатов регистра, на котором установлен курсор в верхнем списке.

                  См. также:

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВводПароля/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВводПароля/Help/ru.html index dd462b694..cef1e0e64 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВводПароля/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВводПароля/Help/ru.html @@ -15,14 +15,14 @@
                  • В поле логин указывается имя учетной записи DSS.
                  • -
                  • В поле сервер указывается, какой сервер используется для подключения. 
                  • +
                  • В поле сервер указывается, какой сервер используется для подключения.
                  • В поле сертификат указывает статус загруженного сертификата авторизация выданного пользователю в момент регистрации провайдером - сервиса. Это поле доступно только + сервиса. Это поле доступно только для способа Сертификат авторизации
                  • -
                  • В поле пароль необходимо ввести пароль учетной записи. 
                  • +
                  • В поле пароль необходимо ввести пароль учетной записи.
                  • Флажок сохранить позволяет сохранить пароль БД после успешной авторизация и не запрашивать его у пользователя при последующих diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборПрограммы/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборПрограммы/Help/ru.html index 8792f4c28..f67369f3c 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборПрограммы/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборПрограммы/Help/ru.html @@ -11,5 +11,5 @@ закрытых ключей на локальном компьютере.
                  • В поле учетная запись DSS указывается при варианте - хранения закрытых ключей в сервисе DSS. 
                  • + хранения закрытых ключей в сервисе DSS.
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборСервисаИзОписания/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборСервисаИзОписания/Help/ru.html index a85456a6a..df1e38650 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборСервисаИзОписания/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборСервисаИзОписания/Help/ru.html @@ -15,5 +15,5 @@ подключения к ЦИ.
                • В поле адрес сервиса электронной подписи содержит список возможных - адресов СЭП. 
                • + адресов СЭП.
                \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборТекущейУчетнойЗаписи/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборТекущейУчетнойЗаписи/Help/ru.html index 32a8cc0de..52bbdff01 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборТекущейУчетнойЗаписи/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборТекущейУчетнойЗаписи/Help/ru.html @@ -6,15 +6,15 @@

                В списке выводится:

                -
                • Наименование - полное наименование учетной - записи; 
                • +
                  • Наименование - полное наименование учетной + записи;
                  • -
                  • Комментарий – дополнительное - описание учетной записи; 
                  • +
                  • Комментарий – дополнительное + описание учетной записи;
                  • -
                  • Авторизован – текущий статус авторизации +
                  • Авторизован – текущий статус авторизации учетной записи.
                  • -

                   

                  +

                Если уже происходила авторизация с помощью учетной записи, то такая запись выделяется цветом.

                @@ -22,10 +22,10 @@

                Выбор учетной записи

                • Выделите нужную строку с - учетной записью, нажмите Выбрать. Также можно + учетной записью, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши.

                Просмотр данных об учетной записи

                -
                • С помощью команды Изменить контекстного - меню по правой кнопке мыши или меню Еще можно открыть данные об учетной записи.
                • +
                  • С помощью команды Изменить контекстного + меню по правой кнопке мыши или меню Еще можно открыть данные об учетной записи.
                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборУчетнойЗаписи/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборУчетнойЗаписи/Help/ru.html index a1210cc2f..191a801d6 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборУчетнойЗаписи/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборУчетнойЗаписи/Help/ru.html @@ -7,21 +7,21 @@

                  В списке выводится:

                  -
                  • Сервер – данные о сервере DSS; 
                  • +
                    • Сервер – данные о сервере DSS;
                    • -
                    • Логин – имя учетной записи, - под которым будет происходить авторизация; 
                    • +
                    • Логин – имя учетной записи, + под которым будет происходить авторизация;
                    • Первичная авторизация – выбранный способ авторизации в сервисе;
                    • -
                    • Наименование – наименование учетной записи в БД;
                    • +
                    • Наименование – наименование учетной записи в БД;
                    • -
                    • Комментарий – дополнительное описание учетной записи;
                    • +
                    • Комментарий – дополнительное описание учетной записи;

                    Выбор учетной записи

                    • Выделите нужную строку с - учетной записью, нажмите Выбрать. Также можно + учетной записью, нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши.

                    Добавление учетной записи

                    @@ -30,10 +30,10 @@
                      -
                    • Нажмите Создать.
                    • +
                    • Нажмите Создать.

                  Просмотр данных об учетной записи

                  -
                  • С помощью команды Изменить контекстного - меню по правой кнопке мыши или меню Еще можно - открыть данные об учетной записи.
                  • +
                    • С помощью команды Изменить контекстного + меню по правой кнопке мыши или меню Еще можно + открыть данные об учетной записи.
                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборЭкземпляровСервераDSS/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборЭкземпляровСервераDSS/Help/ru.html index 437055bc7..9e8e2c85d 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборЭкземпляровСервераDSS/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВыборЭкземпляровСервераDSS/Help/ru.html @@ -5,21 +5,21 @@

                    В списке выводится:

                    -
                    • Наименование - полное наименование сервера; 
                    • +
                      • Наименование - полное наименование сервера;
                      • -
                      • Адрес сервера – web-адрес подключения - к серверу; 
                      • +
                      • Адрес сервера – web-адрес подключения + к серверу;
                      • -
                      • Комментарий – дополнительная информация о +
                      • Комментарий – дополнительная информация о сервере.

                      Выбор сервера

                      • Выделите нужный сертификат, - нажмите Выбрать. Также можно + нажмите Выбрать. Также можно воспользоваться двойным щелчком мыши.

                      Просмотр данных о сервере

                      -
                      • С помощью команды Изменить контекстного - меню по правой кнопке мыши или меню Еще можно - открыть данные о сервере DSS.
                      • +
                        • С помощью команды Изменить контекстного + меню по правой кнопке мыши или меню Еще можно + открыть данные о сервере DSS.
                        \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВывестиИнформацию/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВывестиИнформацию/Help/ru.html index c86a55a1d..ec4077350 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВывестиИнформацию/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ВывестиИнформацию/Help/ru.html @@ -8,7 +8,7 @@
                        • В поле код ошибки указывается числовой код ошибки для ее идентификации.
                        • -
                        • В поле описание указывается описание ошибки. 
                        • +
                        • В поле описание указывается описание ошибки.
                        • Ссылка Перейти в журнал регистрации открывает журнал регистрации с отбором по ошибками возникших при работе сервиса DSS.
                        • diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ЗаявлениеНаИзменениеРеквизитовПодключения/Module.bsl b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ЗаявлениеНаИзменениеРеквизитовПодключения/Module.bsl index 68a8a8d70..e9f224639 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ЗаявлениеНаИзменениеРеквизитовПодключения/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ЗаявлениеНаИзменениеРеквизитовПодключения/Module.bsl @@ -562,8 +562,8 @@ ОповещениеСледующее = Новый ОписаниеОповещения("ЗакрытьФормуПослеВыбора", ЭтотОбъект); ПоказатьВопрос(ОповещениеСледующее, - НСтр("ru = 'Сохранить изменения?'"), - РежимДиалогаВопрос.ДаНет); + НСтр("ru = 'Сохранить изменения?'"), + РежимДиалогаВопрос.ДаНет); КонецПроцедуры @@ -618,7 +618,7 @@ Функция ПроверитьЭлектроннуюПочту(ЭлектроннаяПочта) Результат = НЕ ЗначениеЗаполнено(ЭлектроннаяПочта) - ИЛИ ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ЭлектроннаяПочта); + ИЛИ ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(ЭлектроннаяПочта); Возврат Результат; @@ -638,9 +638,7 @@ Функция ВидКонтактнойИнформацииТелефон() МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Результат = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления["ТипыКонтактнойИнформации"].Телефон); - - Возврат Результат; + Возврат МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); КонецФункции @@ -651,8 +649,10 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Результат = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(ТекущийТелефон, Перечисления["ТипыКонтактнойИнформации"].Телефон); - КонецЕсли; + ПараметрыВидаКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыТелефона(); + Результат = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияПоПредставлению(ТекущийТелефон, + ПараметрыВидаКонтактнойИнформации.Тип); + КонецЕсли; Возврат Результат; diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/НовыйЗапросНаСертификат/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/НовыйЗапросНаСертификат/Help/ru.html index 0d77a25ad..0e7ba02c0 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/НовыйЗапросНаСертификат/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/НовыйЗапросНаСертификат/Help/ru.html @@ -9,7 +9,7 @@
                          • В поле криптопровайдер содержит список доступных криптопровайдеров.
                          • В поле удостоверяющий центр указывается, какой УЦ будет использоваться - при выпуске нового сертификата. 
                          • + при выпуске нового сертификата.
                          • В поле шаблон сертификата содержит список шаблонов сертификатов, в соответствии с которым необходимо заполнить содержание запроса на сертификат.

                          Поля содержания запроса на сертификат

                          @@ -18,7 +18,7 @@
                        • В поле электронная почта необходимо адрес электронной почты
                        • Прочие поля – необходимо заполнить прочие поля, часть полей является обязательными и выделены - красным подчеркиванием. 
                        • + красным подчеркиванием.
                        • Кнопка создать запрос формирует запрос на новый сертификат к сервису DSS.
                        • diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодборУчетнойЗаписи/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодборУчетнойЗаписи/Help/ru.html index 731c6548e..cd10580ca 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодборУчетнойЗаписи/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодборУчетнойЗаписи/Help/ru.html @@ -1,13 +1,13 @@ Предназначен для подбора элементов списка учетных записей DSS.
                          В списке выводится:
                          -
                          • Наименование - наименование учетной записи в БД.
                          +
                          • Наименование - наименование учетной записи в БД.

                          Подбор учетной записи

                          -
                          • Выделите нужную строку с учетной записью или несколько строк, нажмите Выбрать из списка. Нажмите ОК для подтверждения выбора. 
                          +
                          • Выделите нужную строку с учетной записью или несколько строк, нажмите Выбрать из списка. Нажмите ОК для подтверждения выбора.

                          Добавление новой учетной записи

                          -
                          • Нажмите Создать новую учетную запись, заполните необходимые поля.
                          +
                          • Нажмите Создать новую учетную запись, заполните необходимые поля.

                          См. также:

                          diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборНавигационнойСсылки/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборНавигационнойСсылки/Help/ru.html index a0dde7d3c..04ed5d64c 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборНавигационнойСсылки/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборНавигационнойСсылки/Help/ru.html @@ -6,6 +6,6 @@

                          В списке выводится:

                          -
                          • Наименование – наименование файла в виде ссылки, - по которой можно открыть документ. 
                          • +
                            • Наименование – наименование файла в виде ссылки, + по которой можно открыть документ.
                            \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборСпособа/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборСпособа/Help/ru.html index 1b5c417a9..e18c73b58 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборСпособа/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииВыборСпособа/Help/ru.html @@ -11,16 +11,16 @@ DSS и ограничений со стороны 1С.

                            Варианты выбор способа

                            -
                            • Мобильное приложение myDSS - специальное мобильное +
                              • Мобильное приложение myDSS - специальное мобильное приложение уставливаемое на устройство для взаимодействия с сервером.
                              • -
                              • Мобильное приложение AirKey DSS - специальное мобильное приложение уставливаемое на +
                              • Мобильное приложение AirKey DSS - специальное мобильное приложение уставливаемое на устройство для взаимодействия с сервером.
                              • -
                              • Одноразовый пароль на мобильный телефон - пароль, полученный в SMS +
                              • Одноразовый пароль на мобильный телефон - пароль, полученный в SMS сообщении на мобильный телефон.
                              • -
                              • Одноразовый пароль на электронную почту - пароль, отправленный в письме +
                              • Одноразовый пароль на электронную почту - пароль, отправленный в письме на электронную почту.
                              \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииКодПодтверждения/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииКодПодтверждения/Help/ru.html index 3250fce40..ba52e389c 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииКодПодтверждения/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииКодПодтверждения/Help/ru.html @@ -11,13 +11,13 @@
                              • В поле сертификат указывается информация о сертификате, используемом при операции.
                              • В поле способ подтверждения можно изменить текущий способ на любой - доступный в списке выбора. 
                              • + доступный в списке выбора.
                              • В поле документы указывается список документов, с которыми проводится операция. Доступно только для операции Создание электронной подписи.
                              • В поле код подтверждения необходимо ввести одноразовый пароль, полученный - в SMS или Email. 
                              • + в SMS или Email.
                              • Кнопка повторить позволяет запросить получение повторного временного пароля. Внимание! получение повторного одноразового пароля ограничено по diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииМобильноеПриложение/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииМобильноеПриложение/Help/ru.html index a18ed127b..3a2181742 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииМобильноеПриложение/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииМобильноеПриложение/Help/ru.html @@ -16,7 +16,7 @@ при операции.
                              • В поле способ подтверждения можно изменить текущий способ на любой - доступный в списке выбора. 
                              • + доступный в списке выбора.
                              • В поле документы указывается список документов, с которыми проводится операция. Доступно только для операции Создание электронной подписи.
                              • diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииОшибка/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииОшибка/Help/ru.html index 5516e0d55..0ff3078df 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииОшибка/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПодтверждениеОперацииОшибка/Help/ru.html @@ -11,7 +11,7 @@ сервиса или сформированной в процессе работы.
                              • Кнопка повторить позволяет повторить действие, при котором возникла - ошибка. 
                              • + ошибка.
                              • Кнопка закрыть останавливает процедуру подтверждения операции.
                              \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПроверкаСервиса/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПроверкаСервиса/Help/ru.html index deec269e1..4db5789a9 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПроверкаСервиса/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ПроверкаСервиса/Help/ru.html @@ -6,7 +6,7 @@

                              Проверка работоспособности позволяет проверить следующие операции:

                              -
                              • Выбор сертификата - если в списке отсутствуют сертификаты, +
                                • Выбор сертификата - если в списке отсутствуют сертификаты, то необходимо инициировать выпуск нового сертификата, хранящийся в сервисе DSS.
                                • @@ -39,7 +39,7 @@ закончилась неудачей, то сервис DSS не поддерживает операции в формате XML. -
                                • Проверить сертификат - проверяет выбранный на предыдущих +
                                • Проверить сертификат - проверяет выбранный на предыдущих шагах сертификат на валидность (срок действия, отзыв и прочее). Если операция завершилась неудачей, то сервис проверки недоступен или не настроен.
                                • diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/РасширенныеНастройкиСервера/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/РасширенныеНастройкиСервера/Help/ru.html index d8dd961c2..ffabc94b0 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/РасширенныеНастройкиСервера/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/РасширенныеНастройкиСервера/Help/ru.html @@ -4,24 +4,24 @@

                                  Содержит дополнительные настройки сервера -DSS и позволит администратору ограничить список +DSS и позволит администратору ограничить список доступных пользователю способов авторизации в сервисе DSS.

                                    • В поле представление указывается наименование сервера, оно будет отображено на списках.
                                    • -
                                    • В поле таймаут указывается время ожидания ответа от сервиса. 
                                    • +
                                    • В поле таймаут указывается время ожидания ответа от сервиса.
                                    • В поле шаблон подтверждения указывает имя шаблона, как оно было зарегистрировано на сервере DSS.
                                    • -
                                    • В поле версия API необходимо для определения способов подключения к серверу DSS. 
                                    • +
                                    • В поле версия API необходимо для определения способов подключения к серверу DSS.
                                    • Флажок используется позволяет регулировать доступность данного элемента справочника в списках выбора.


                                    Первичная авторизация

                                    • Пометка включает строку в список доступных способов.
                                    • -
                                    • В поле Наименование выводится наименование способа. 
                                    • +
                                    • В поле Наименование выводится наименование способа.

                                    Вторичная авторизация

                                    • Пометка включает строку в список доступных способов.
                                    • -
                                    • В поле Наименование выводится наименование способа. 
                                    • +
                                    • В поле Наименование выводится наименование способа.
                                    \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Form.form b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Form.form index e139383cb..ef46cf35f 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Form.form +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Form.form @@ -1357,6 +1357,10 @@ + + НастройкиПользователя + + diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Help/ru.html index 6cc95034a..b8cec2226 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Help/ru.html @@ -17,7 +17,7 @@
                                  • В поле действителен указывается дата начала и окончания действия сертификата.
                                  • -
                                  • В поле отпечаток отображает +
                                  • В поле отпечаток отображает значение отпечатка в HEX представлении.

                                  Действия с сертификатом

                                  @@ -25,7 +25,7 @@ сервиса проверки.
                                • Кнопка выгрузить в файл выгружает содержимое сертификата в файл в - формате ASN. 
                                • + формате ASN.
                                • Если при использовании сервиса DSS допускается применение пин-кодов для сертификатов, то по ссылке изменить можно инициировать diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Module.bsl b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Module.bsl index c0e1659e5..04757edc8 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СвойствоСертификата/Module.bsl @@ -11,8 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Параметры.Свойство("НастройкиПользователя", НастройкиПользователя); - + НастройкиПользователя = Параметры.НастройкиПользователя; // см. СервисКриптографииDSSСлужебныйВызовСервера.ПолучитьНастройкиПользователяПоСертификату Если ЗначениеЗаполнено(Параметры.АдресСертификата) Тогда ДанныеСертификата = ПолучитьИзВременногоХранилища(Параметры.АдресСертификата); КонецЕсли; diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СменаПинКода/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СменаПинКода/Help/ru.html index 0cf6dd64f..456be6d0a 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СменаПинКода/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СменаПинКода/Help/ru.html @@ -17,14 +17,14 @@
                                  • В поле логин указывается имя учетной записи DSS.
                                  • -
                                  • В поле сервер указывается, какой сервер используется для подключения. 
                                  • +
                                  • В поле сервер указывается, какой сервер используется для подключения.
                                  • В поле сертификат указывает статус загруженного сертификата авторизация выданного пользователю в момент регистрации провайдером - сервиса. Это поле доступно только + сервиса. Это поле доступно только для способа Сертификат авторизации.
                                  • -
                                  • В поле пароль необходимо ввести пароль учетной записи. 
                                  • +
                                  • В поле пароль необходимо ввести пароль учетной записи.
                                  • Флажок сохранить позволяет сохранить пароль БД после успешной авторизации и не запрашивать его у пользователя при последующих diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокСертификатов/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокСертификатов/Help/ru.html index 26ab51ba0..cf46e4465 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокСертификатов/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокСертификатов/Help/ru.html @@ -8,19 +8,19 @@

                                    В списке выводится:

                                    • Наименование - полное наименование сервера - DSS; 
                                    • + DSS; -
                                    • Адрес сервера – содержит web-адрес - подключения к серверу DSS; 
                                    • +
                                    • Адрес сервера – содержит web-адрес + подключения к серверу DSS;
                                    • -
                                    • Комментарий – дополнительное описание о +
                                    • Комментарий – дополнительное описание о сервере.

                                    Добавление сервера

                                    -
                                      • Нажмите Добавить.
                                      • +
                                          • Нажмите Добавить.

                                        Просмотр данных о сервере

                                        -
                                        • С помощью команды Изменить контекстного - меню по правой кнопке мыши или меню Еще можно - открыть данные о сервере DSS.
                                        • +
                                          • С помощью команды Изменить контекстного + меню по правой кнопке мыши или меню Еще можно + открыть данные о сервере DSS.
                                          \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокУчетныхЗаписей/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокУчетныхЗаписей/Help/ru.html index 801b952b9..077a6bfb5 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокУчетныхЗаписей/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокУчетныхЗаписей/Help/ru.html @@ -7,22 +7,22 @@

                                          В списке выводится:

                                          -
                                          • Наименование – наименование учетной записи в БД;
                                          • +
                                            • Наименование – наименование учетной записи в БД;
                                            • -
                                            • Логин – имя учетной записи, - под которым будет происходить авторизация; 
                                            • +
                                            • Логин – имя учетной записи, + под которым будет происходить авторизация;
                                            • -
                                            • Сервер – данные о сервере DSS; 
                                            • +
                                            • Сервер – данные о сервере DSS;
                                            • Первичная авторизация – выбранный способ авторизации в сервисе;
                                            • -
                                            • Комментарий – дополнительное описание учетной записи;
                                            • +
                                            • Комментарий – дополнительное описание учетной записи;

                                            Добавление учетной записи

                                            -
                                              • Нажмите Создать.
                                              • +
                                                  • Нажмите Создать.

                                                Просмотр данных об учетной записи

                                                -
                                                • С помощью команды Изменить контекстного - меню по правой кнопке мыши или меню Еще можно открыть данные об учетной записи.
                                                • +
                                                  • С помощью команды Изменить контекстного + меню по правой кнопке мыши или меню Еще можно открыть данные об учетной записи.
                                                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокЭкземпляровСервераDSS/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокЭкземпляровСервераDSS/Help/ru.html index 4a64524d6..f8a4c60fc 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокЭкземпляровСервераDSS/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/СписокЭкземпляровСервераDSS/Help/ru.html @@ -8,18 +8,18 @@

                                                  В списке выводится:

                                                  • Наименование - полное наименование сервера - DSS; 
                                                  • + DSS; -
                                                  • Адрес сервера – содержит web-адрес - подключения к серверу DSS; 
                                                  • +
                                                  • Адрес сервера – содержит web-адрес + подключения к серверу DSS;
                                                  • -
                                                  • Комментарий – дополнительное описание о +
                                                  • Комментарий – дополнительное описание о сервере.

                                                  Добавление сервера

                                                  -
                                                    • Нажмите Добавить.
                                                    • +
                                                        • Нажмите Добавить.

                                                      Просмотр данных о сервере

                                                      -
                                                      • С помощью команды Изменить контекстного - меню по правой кнопке мыши или меню Еще можно открыть данные о сервера DSS.
                                                      • +
                                                        • С помощью команды Изменить контекстного + меню по правой кнопке мыши или меню Еще можно открыть данные о сервера DSS.
                                                        \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаУчетнойЗаписи/Module.bsl b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаУчетнойЗаписи/Module.bsl index 370755757..4dfd342bb 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаУчетнойЗаписи/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаУчетнойЗаписи/Module.bsl @@ -312,8 +312,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ БСП +#Область СлужебныеПроцедурыИФункцииБсп // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте @@ -608,6 +607,8 @@ КонецПроцедуры +#КонецОбласти + #Область АсинхронныеВызовы &НаКлиенте @@ -752,5 +753,4 @@ #КонецОбласти -#КонецОбласти - +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Help/ru.html b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Help/ru.html index acea5791d..408facd9d 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Help/ru.html @@ -20,20 +20,20 @@ DSS».

                                                        сервису.
                                                      • В поле адрес сервиса центра идентификации указывается полный или - относительный адрес подключения. 
                                                      • + относительный адрес подключения.
                                                      • В поле адрес сервиса электронной подписи указывается полный или - относительный адрес подключения. 
                                                      • + относительный адрес подключения.
                                                      • В поле адрес сервиса обработки документов указывается полный или относительный адрес подключения.
                                                      • В поле адрес службы проверки подписи и сертификатов указывает полный - или относительный адрес подключения. 
                                                      • + или относительный адрес подключения.
                                                      • В поле адрес личного кабинета указывается полный или относительный - адрес подключения. Это поле + адрес подключения. Это поле является не обязательным, информация в этом может быть удобной для организации быстрого перехода к странице личного кабинета пользователя опубликованного не сервисе.
                                                      • diff --git a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Module.bsl b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Module.bsl index fa3574414..12d6d15fa 100644 --- a/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПодключениемDSS/Forms/ФормаЭкземпляраСервераDSS/Module.bsl @@ -136,19 +136,15 @@ СистемнаяИнформация = Новый СистемнаяИнформация; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.24.0") > 0 Тогда - - Ответ = Ждать ВопросАсинх(НСтр("ru = 'Для создания защищенного соединения с сервером DSS рекомендуется использовать сертифицированные средства криптографии и сертификаты ГОСТ. - |Продолжить?'", - СервисКриптографииDSSСлужебныйКлиент.КодЯзыка()), - РежимДиалогаВопрос.ДаНет, - 30); - - Если Ответ = КодВозвратаДиалога.Нет Тогда - Объект.ЗащищенноеСоединениеГОСТ = ЗащищенноеСоединениеГОСТ; - Возврат; - КонецЕсли; + Ответ = Ждать ВопросАсинх(НСтр("ru = 'Для создания защищенного соединения с сервером DSS рекомендуется использовать сертифицированные средства криптографии и сертификаты ГОСТ. + |Продолжить?'", + СервисКриптографииDSSСлужебныйКлиент.КодЯзыка()), + РежимДиалогаВопрос.ДаНет, + 30); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Объект.ЗащищенноеСоединениеГОСТ = ЗащищенноеСоединениеГОСТ; + Возврат; КонецЕсли; КонецЕсли; @@ -352,8 +348,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ БСП +#Область СлужебныеПроцедурыИФункцииБсп // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте @@ -641,10 +636,7 @@ &НаКлиентеНаСервереБезКонтекста Процедура ВидимостьЗащищенноеСоединениеГОСТ(Форма) - СистемнаяИнформация = Новый СистемнаяИнформация; - Форма.Элементы.ЗащищенноеСоединениеГОСТ.Видимость = СтрНачинаетсяС(Форма.Объект.АдресСервера, "https://") - И (Форма.Объект.ЗащищенноеСоединениеГОСТ - Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.24.0") > 0); + Форма.Элементы.ЗащищенноеСоединениеГОСТ.Видимость = СтрНачинаетсяС(Форма.Объект.АдресСервера, "https://"); КонецПроцедуры @@ -720,6 +712,8 @@ КонецФункции +#КонецОбласти + #Область АсинхронныеВызовы &НаКлиенте @@ -829,4 +823,4 @@ #КонецОбласти -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html index 06e63bfd0..f2b57823e 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html @@ -1,7 +1,7 @@ -

                                                        Предназначена для настройки резервного копирования информационной базы при обновлении приложения.

                                                        -

                                                        Перед началом обновления приложения рекомендуется создавать резервную копию информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации.

                                                        -

                                                        Открывается по ссылке Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации из окна Поиск и установка обновлений. 

                                                        +

                                                        Предназначена для настройки резервного копирования информационной базы при обновлении приложения.

                                                        +

                                                        Перед началом обновления приложения рекомендуется создавать резервную копию информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации.

                                                        +

                                                        Открывается по ссылке Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации из окна Поиск и установка обновлений.

                                                        Для создания резервной копии выберите параметры:

                                                        • Не создавать резервную копию;
                                                        • diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl index ab2a60c35..a357d60fa 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Forms/Форма/Module.bsl @@ -175,8 +175,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы -//////////////////////////////////////////////////////////////////////////////// -// Страница ФайлОбновления +#Область СтраницаФайлОбновления &НаКлиенте Процедура ПереключательНуженФайлОбновленияПриИзменении(Элемент) @@ -191,8 +190,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница ПослеУстановкиИсправлений +#КонецОбласти + +#Область СтраницаПослеУстановкиИсправлений &НаКлиенте Процедура ДекорацияАктивныеПользователиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) @@ -208,8 +208,9 @@ ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ОтборЖурнала); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница ВыборРежимаОбновленияФайл +#КонецОбласти + +#Область СтраницаВыборРежимаОбновленияФайл &НаКлиенте Процедура НадписьСписокДействийНажатие(Элемент) @@ -249,8 +250,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Страница ВыборРежимаОбновленияСервер +#КонецОбласти + +#Область СтраницаВыборРежимаОбновленияСервер &НаКлиенте Процедура ПереключательОбновленияПриИзменении(Элемент) @@ -341,6 +343,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -1076,8 +1080,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Планирование обновления в указанное время. +#Область ПланированиеОбновленияВУказанноеВремя // Возвратить каталог файла - часть пути без имени файла. // @@ -1159,4 +1162,6 @@ #КонецЕсли КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html b/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html index a17f4cf8c..2df47db5b 100644 --- a/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html +++ b/SSL/src/DataProcessors/УстановкаОбновлений/Help/ru.html @@ -1,12 +1,12 @@ -

                                                          Установка обновлений позволяет автоматически устанавливать обновления конфигурации из файла.

                                                          -

                                                          Открывается с помощью ссылки Установка обновлений и исправлений (патчей) раздела Администрирование - Обслуживание - Обновление приложения.

                                                          +

                                                          Установка обновлений позволяет автоматически устанавливать обновления конфигурации из файла.

                                                          +

                                                          Открывается с помощью ссылки Установка обновлений и исправлений (патчей) раздела Администрирование - Обслуживание - Обновление приложения.

                                                          Приложение позволяет обновлять конфигурацию ИБ в режиме 1С:Предприятия. Обновление производится по требованию или в указанное время.

                                                          Внимание! Помощник не следует использовать, если в приложении включена возможность изменения объектов метаданных. В таких случаях рекомендуется выполнять обновление в режиме Конфигуратор.

                                                          На первом шаге выбирается источник установки обновления:

                                                          -
                                                          • Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu), файла исправления (.cfe или .zip) или файла поставки конфигурации (.cf) из локального или сетевого каталога. 
                                                          • -
                                                          • Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.
                                                          • +
                                                            • Если у Вас уже имеется файл обновления, то помощник позволяет провести обновление с использованием файла поставки обновления (.cfu), файла исправления (.cfe или .zip) или файла поставки конфигурации (.cf) из локального или сетевого каталога.
                                                            • +
                                                            • Если файл обновления уже загружен в основную конфигурацию, и она отличается от конфигурации информационной базы, то необходимо указать вариант обновления без использования файла обновления.
                                                            • С помощью ссылки Поиск и установка обновлений можно перейти к поиску обновления в Интернете.
                                                            Приложение определяет необходимость обновления. Если обновление не требуется, об этом выводится сообщение.

                                                            Получение обновлений из файла в локальном или сетевом каталоге

                                                            В случае если файл обновления уже имеется, то следует воспользоваться режимом обновления конфигурации из файла.

                                                            @@ -16,63 +16,63 @@
                                                            • Если файл обновления ранее уже был загружен в основную конфигурацию, и его необходимо применить к конфигурации информационной базы, то следует выбрать этот вариант. Эта возможность может быть востребована, например, при обновлении конфигурации узла распределенной информационной базы.

                                                          • -

                                                            Укажите файл обновления - с помощью кнопки  Выбрать укажите путь к файлу на компьютере.

                                                            -
                                                            • В качестве файла может быть указан cfu-файл обновления конфигурации или cf-файл поставки конфигурации, например, E:\1Cits\EXE\Migration\1Cv8.cf.
                                                          • +

                                                            Укажите файл обновления - с помощью кнопки Выбрать укажите путь к файлу на компьютере.

                                                            +
                                                            • В качестве файла может быть указан cfu-файл обновления конфигурации или cf-файл поставки конфигурации, например, E:\1Cits\EXE\Migration\1Cv8.cf.
                                                          • Нажмите Далее, для того чтобы продолжить установку обновлений.
                                                          -
                                                        • После нажатия на кнопку Далее приложение получает файл обновления из локального или сетевого каталога.

                                                        Установка обновлений 

                                                        -

                                                        После того, как обновление было получено локально на компьютер, помощник предлагает его установить. 

                                                        -
                                                        • Установка обновления выполняется от имени текущего пользователя. Введите Параметры администрирования информационной базы - Имя пользователя и Пароль, если для доступа к информационной базе необходима авторизация. В случае клиент-серверного варианта работы приложения также может потребоваться ввести имя и пароль администратора кластера серверов. +
                                                        • После нажатия на кнопку Далее приложение получает файл обновления из локального или сетевого каталога.

                                                        Установка обновлений

                                                        +

                                                        После того, как обновление было получено локально на компьютер, помощник предлагает его установить.

                                                        +
                                                        • Установка обновления выполняется от имени текущего пользователя. Введите Параметры администрирования информационной базы - Имя пользователя и Пароль, если для доступа к информационной базе необходима авторизация. В случае клиент-серверного варианта работы приложения также может потребоваться ввести имя и пароль администратора кластера серверов.
                                                        • -
                                                        • Перед началом обновления версии приложения рекомендуется создавать резервную копию информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации. К настройке автоматического создания резервной копии в файловом варианте работы можно перейти по ссылке Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации. -
                                                          • Если для резервного копирования используются сторонние средства, то можно отключить автоматическое создание резервной копии с помощью ссылки Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации, расположенной внизу страницы помощника. Создать резервную копию можно и другими средствами, например, путем копирования файла информационной базы. В клиент-серверном варианте работы рекомендуется создать резервную копию самостоятельно средствами SQL-сервера.
                                                        • -
                                                        • С помощью переключателя можно уточнить время обновления конфигурации ИБ: +
                                                        • Перед началом обновления версии приложения рекомендуется создавать резервную копию информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации. К настройке автоматического создания резервной копии в файловом варианте работы можно перейти по ссылке Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации. +
                                                          • Если для резервного копирования используются сторонние средства, то можно отключить автоматическое создание резервной копии с помощью ссылки Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации, расположенной внизу страницы помощника. Создать резервную копию можно и другими средствами, например, путем копирования файла информационной базы. В клиент-серверном варианте работы рекомендуется создать резервную копию самостоятельно средствами SQL-сервера.
                                                        • +
                                                        • С помощью переключателя можно уточнить время обновления конфигурации ИБ:
                                                          • Выполнить установку обновления прямо сейчас - для обновления потребуется перезапуск.
                                                          • Напомнить при завершении работы.
                                                          • Запланировать установку обновления на указанное время - в клиент-серверном варианте работы приложения есть возможность указать время и дату обновления конфигурации.
                                                        • -
                                                        • Прежде чем продолжить обновление конфигурации, необходимо сохранить несохраненные данные или закрыть окна их редактирования. +
                                                        • Прежде чем продолжить обновление конфигурации, необходимо сохранить несохраненные данные или закрыть окна их редактирования.
                                                        • В клиент-серверном варианте работы приложения все соединения будут завершены автоматически, а на время создания резервной копии и обновления конфигурации устанавливается блокировка соединений.
                                                        • Для файлового варианта работы необходимо выполнить следующие действия:
                                                        • -
                                                        • Если все указанные условия выполнены, после нажатия кнопки Далее приложение автоматически создаст резервную копию ИБ (если это предусмотрено), и обновит конфигурацию. +
                                                        • Если все указанные условия выполнены, после нажатия кнопки Далее приложение автоматически создаст резервную копию ИБ (если это предусмотрено), и обновит конфигурацию.
                                                        • -
                                                        • Процесс обновления приложения может занять продолжительное время, в зависимости от производительности компьютера и объема информационной базы. Не выключайте питание компьютера до завершения процесса. +
                                                        • Процесс обновления приложения может занять продолжительное время, в зависимости от производительности компьютера и объема информационной базы. Не выключайте питание компьютера до завершения процесса.
                                                        • После завершения обновления конфигурации приложения будет автоматически запущена и готова к дальнейшей работе. Для базовых версий конфигураций после обновления требуется выполнить первый запуск приложения от имени администратора, во время которого будет выполнено завершение процесса обновления конфигурации.
                                                        • Помощник выводит сообщение об успешном завершении обновления приложения. Перейдите по ссылке Новое в этой версии, для того чтобы просмотреть описание изменений приложения. Нажмите Готово, для того чтобы приступить к работе в приложении.
                                                        • Если в приложении предусмотрено отложенное обновление, выводится предупреждение о необходимости ознакомиться с дополнительными инструкциями для завершения обновления. Перейдите по соответствующей ссылке.

                                                        Планирование обновлений

                                                        -
                                                        • При работе в клиент-серверном варианте работы приложения можно задавать отложенное по времени обновление, например, можно отложить обновление конфигурации на ночь. +
                                                          • При работе в клиент-серверном варианте работы приложения можно задавать отложенное по времени обновление, например, можно отложить обновление конфигурации на ночь.
                                                          • -
                                                          • Для этого при обновлении конфигурации в помощнике выберите с помощью переключателя Запланировать установку обновления на указанное время и укажите время и дату обновления. +
                                                          • Для этого при обновлении конфигурации в помощнике выберите с помощью переключателя Запланировать установку обновления на указанное время и укажите время и дату обновления.
                                                          • -
                                                          • Существует возможность настроить отправку отчета на указанный адрес электронной почты об успешном или неуспешном выполнении обновления. Отправка сообщения производится с компьютера, на которой установлен сервер 1С:Предприятие. Для этого включите флажок Выслать отчет на почту, напишите адрес электронной почты.

                                                          Запланированное обновление будет выполнено с клиентского компьютера в фоновом режиме. Питание компьютера должно быть включено в указанную дату и время.

                                                          +
                                                        • Существует возможность настроить отправку отчета на указанный адрес электронной почты об успешном или неуспешном выполнении обновления. Отправка сообщения производится с компьютера, на которой установлен сервер 1С:Предприятие. Для этого включите флажок Выслать отчет на почту, напишите адрес электронной почты.

                                                        Запланированное обновление будет выполнено с клиентского компьютера в фоновом режиме. Питание компьютера должно быть включено в указанную дату и время.

                                                        Проблемы получения и установки обновлений

                                                        -

                                                        На специальной странице помощника выводится сообщение о невозможности проведения обновления приложения.

                                                        +

                                                        На специальной странице помощника выводится сообщение о невозможности проведения обновления приложения.

                                                        • Для получения технической информации о причинах проблем с получением и установкой обновлений можно воспользоваться следующими средствами: -
                                                          • Записи о произведенных операциях и возникших ошибках в ходе обновления заносятся в Журнал регистрации (тип события «Обновление информационной базы»). Воспользуйтесь ссылкой Перейти в журнал регистрации, для того чтобы просмотреть технические подробности. +
                                                            • Записи о произведенных операциях и возникших ошибках в ходе обновления заносятся в Журнал регистрации (тип события «Обновление информационной базы»). Воспользуйтесь ссылкой Перейти в журнал регистрации, для того чтобы просмотреть технические подробности.
                                                            • -
                                                            • В процессе установки обновления во временной папке текущего пользователя Windows создается лог-файл с записями о ходе обновления (содержимое лог-файла впоследствии автоматически добавляется в Журнал регистрации). Последний из каталогов вида %temp%\1CUpdate.<набор цифр>, отсортированных по алфавиту, соответствует последней сессии обновления.
                                                          -

                                                          Если настройка операционной системы "Язык приложений, не поддерживающих Юникод" задана некорректно, то процесс обновления завершится с ошибкой "invalid procedure call or arguments", при этом лог-файл окажется пустым. Для устранения данной ошибки необходимо, чтобы в региональных настройках операционной системы (Панель управления - Язык и региональные стандарты - Дополнительно) в поле Язык приложений, не поддерживающих Юникод был выбран русский язык.

                                                          -
                                                            • Результат обновления информационной базы записывается в Журнал событий Windows (Event Log).
                                                          • Если в результате нештатной ситуации при обновлении база оказалась заблокированной, то ее можно разблокировать с помощью консоли Администрирование серверов 1С:Предприятия, либо из командной строки, запустив 1С:Предприятие от имени администратора с ключом РазрешитьРаботуПользователей и указав код разблокировки ПакетноеОбновлениеКонфигурацииИБ. Например:

                                                          "C:\Program Files\1cv82\bin\1cv8.exe"ENTERPRISE /S"server\base" /N"Администратор" /P"" /WA- /C РазрешитьРаботуПользователей /UC ПакетноеОбновлениеКонфигурацииИБ

                                                          -
                                                          • Если обновление конфигурации завершилось неудачей, а во временном log-файле имеется запись: "Исключение в createConnection: Error, Automation server can't create object", то, скорее всего, используется 32-разрядная компонента comcntr.dll на компьютере под управлением 64-разрядной операционной системы. Для устранения данной проблемы необходимо взять 64-разрядную компоненту comcntr.dll из поставки 1С Предприятие x64 Сервер и зарегистрировать ее, запустив из командной строки:

                                                          regsvr32 <каталог 64-разрядного comcntr.dll>\comcntr.dll

                                                          -

                                                          Выяснив причины ошибки, произведите соответствующие настройки компьютера, затем нажмите Далее для повторения попытки.

                                                          +
                                                        • В процессе установки обновления во временной папке текущего пользователя Windows создается лог-файл с записями о ходе обновления (содержимое лог-файла впоследствии автоматически добавляется в Журнал регистрации). Последний из каталогов вида %temp%\1CUpdate.<набор цифр>, отсортированных по алфавиту, соответствует последней сессии обновления.
                                                      +

                                                      Если настройка операционной системы "Язык приложений, не поддерживающих Юникод" задана некорректно, то процесс обновления завершится с ошибкой "invalid procedure call or arguments", при этом лог-файл окажется пустым. Для устранения данной ошибки необходимо, чтобы в региональных настройках операционной системы (Панель управления - Язык и региональные стандарты - Дополнительно) в поле Язык приложений, не поддерживающих Юникод был выбран русский язык.

                                                      +
                                                        • Результат обновления информационной базы записывается в Журнал событий Windows (Event Log).
                                                      • Если в результате нештатной ситуации при обновлении база оказалась заблокированной, то ее можно разблокировать с помощью консоли Администрирование серверов 1С:Предприятия, либо из командной строки, запустив 1С:Предприятие от имени администратора с ключом РазрешитьРаботуПользователей и указав код разблокировки ПакетноеОбновлениеКонфигурацииИБ. Например:

                                                      "C:\Program Files\1cv82\bin\1cv8.exe"ENTERPRISE /S"server\base" /N"Администратор" /P"" /WA- /C РазрешитьРаботуПользователей /UC ПакетноеОбновлениеКонфигурацииИБ

                                                      +
                                                      • Если обновление конфигурации завершилось неудачей, а во временном log-файле имеется запись: "Исключение в createConnection: Error, Automation server can't create object", то, скорее всего, используется 32-разрядная компонента comcntr.dll на компьютере под управлением 64-разрядной операционной системы. Для устранения данной проблемы необходимо взять 64-разрядную компоненту comcntr.dll из поставки 1С Предприятие x64 Сервер и зарегистрировать ее, запустив из командной строки:

                                                      regsvr32 <каталог 64-разрядного comcntr.dll>\comcntr.dll

                                                      +

                                                      Выяснив причины ошибки, произведите соответствующие настройки компьютера, затем нажмите Далее для повторения попытки.

                                                      Обновление не подходит

                                                      • Приложение анализирует файл обновления, и если он не подходит (файл поставки от другой версии или от другого приложения), то об этом выводится предупреждение. Нажмите Закрыть.
                                                      • В этом случае следует найти нужный файл и повторить попытку обновления.

                                                      Если в приложении установлены расширения

                                                      -
                                                      • Если в приложении имеются расширения, об этом выводится сообщение. 
                                                      • -
                                                      • По ссылке в сообщении можно Перейти к списку расширений.
                                                      • -
                                                      • Необходимо учитывать, что расширения могут быть несовместимы с новой версией приложения. Можно предварительно выполнить обновление на резервной копии, для того чтобы проверить их совместимость. 

                                                      +
                                                      • Если в приложении имеются расширения, об этом выводится сообщение.
                                                      • +
                                                      • По ссылке в сообщении можно Перейти к списку расширений.
                                                      • +
                                                      • Необходимо учитывать, что расширения могут быть несовместимы с новой версией приложения. Можно предварительно выполнить обновление на резервной копии, для того чтобы проверить их совместимость.

                                                      См. также:

                                                      \ No newline at end of file diff --git a/SSL/src/DefinedTypes/ОбъектСОсновнымиПечатнымиФормами/ОбъектСОсновнымиПечатнымиФормами.mdo b/SSL/src/DefinedTypes/ОбъектСОсновнымиПечатнымиФормами/ОбъектСОсновнымиПечатнымиФормами.mdo new file mode 100644 index 000000000..564087346 --- /dev/null +++ b/SSL/src/DefinedTypes/ОбъектСОсновнымиПечатнымиФормами/ОбъектСОсновнымиПечатнымиФормами.mdo @@ -0,0 +1,17 @@ + + + + + + ОбъектСОсновнымиПечатнымиФормами + + ru + Объект с основными печатными формами + + + String + + 10 + + + diff --git a/SSL/src/DefinedTypes/ПланыОбменаБСД/ПланыОбменаБСД.mdo b/SSL/src/DefinedTypes/ПланыОбменаБСД/ПланыОбменаБСД.mdo new file mode 100644 index 000000000..4cb98336a --- /dev/null +++ b/SSL/src/DefinedTypes/ПланыОбменаБСД/ПланыОбменаБСД.mdo @@ -0,0 +1,17 @@ + + + + + + ПланыОбменаБСД + + ru + Планы обмена БСД + + + String + + 10 + + + diff --git a/SSL/src/DefinedTypes/ПолучательПечатныхФорм/ПолучательПечатныхФорм.mdo b/SSL/src/DefinedTypes/ПолучательПечатныхФорм/ПолучательПечатныхФорм.mdo new file mode 100644 index 000000000..f49116f61 --- /dev/null +++ b/SSL/src/DefinedTypes/ПолучательПечатныхФорм/ПолучательПечатныхФорм.mdo @@ -0,0 +1,17 @@ + + + + + + ПолучательПечатныхФорм + + ru + Получатель печатных форм + + + String + + 10 + + + diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl index c4e0d3f27..0b79e73d7 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоКонтакту/CommandModule.bsl @@ -10,21 +10,15 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - - + СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Контакт", ПараметрКоманды); - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Контакт"); - ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); - ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + ПараметрыФормы.Вставить("ТипВзаимодействия", "Контакт"); - - ОткрытьФорму( - "ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Источник.КлючУникальности, diff --git a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl index 3834bae00..c69099c01 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Commands/ВзаимодействияПоПредмету/CommandModule.bsl @@ -11,36 +11,23 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Предмет", ПараметрКоманды); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); + ПараметрыФормы.Вставить("ТипВзаимодействия", ""); + Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ПараметрКоманды) Тогда - - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Предмет", ПараметрКоманды); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Предмет"); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); - ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + ПараметрыФормы.ТипВзаимодействия = "Предмет"; ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ПараметрКоманды) Тогда - - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Предмет", ПараметрКоманды); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Взаимодействие"); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); - ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); - + ПараметрыФормы.ТипВзаимодействия = "Взаимодействие"; Иначе Возврат; КонецЕсли; - ОткрытьФорму( - "ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Источник.КлючУникальности, diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Help/ru.html index c52da131e..069d6e71a 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ВыборТипаПредмета/Help/ru.html @@ -1,7 +1,7 @@ -

                                                      Предназначена для выбора типа предмета в документах взаимодействий.

                                                      -

                                                      Для заполнения поля Предмет сначала выберите из списка тип предмета. После этого откроется список выбранных объектов приложения.

                                                      +

                                                      Предназначена для выбора типа предмета в документах взаимодействий.

                                                      +

                                                      Для заполнения поля Предмет сначала выберите из списка тип предмета. После этого откроется список выбранных объектов приложения.

                                                      По умолчанию в списке отображаются типы документов взаимодействий.

                                                      -

                                                      Для отображения других типов объектов приложения включите флажок Не отображать взаимодействия.

                                                      +

                                                      Для отображения других типов объектов приложения включите флажок Не отображать взаимодействия.

                                                      См. также:

                                                      \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html index 446f29adf..0cc69a539 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Help/ru.html @@ -1,14 +1,14 @@

                                                      Предназначена для настройки работы с почтой.

                                                      -

                                                      Перед тем как начать работать с почтовыми сообщениями, в приложении необходимо настроить работу с почтой. Для этого в списке взаимодействий выполните команду Еще - Персональные настройки.

                                                      +

                                                      Перед тем как начать работать с почтовыми сообщениями, в приложении необходимо настроить работу с почтой. Для этого в списке взаимодействий выполните команду Еще - Персональные настройки.

                                                      Как настроить подпись к письму?

                                                      Как указать, что для всех отправляемых писем по умолчанию необходимо уведомление о доставке и прочтении?

                                                      Как настроить порядок ответов на запросы уведомлений о прочтении?

                                                      -

                                                      Как указать, что в документе Исходящее письмо при ответе или пересылке необходимо отображать тело письма основания?

                                                      +

                                                      Как указать, что в документе Исходящее письмо при ответе или пересылке необходимо отображать тело письма основания?

                                                      Как указать, что в тело исходящего письма при ответе или пересылке необходимо включать тело письма основания?

                                                      Как указать в файловом режиме, что письма должны отправляться сразу?

                                                      Настройка подписи к письму

                                                      -

                                                      При настройке работы с почтой можно создать шаблоны подписей для исходящих электронных писем. Также шаблоны подписей можно создать при настройке почты для рассылок уведомлений.

                                                      +

                                                      При настройке работы с почтой можно создать шаблоны подписей для исходящих электронных писем. Также шаблоны подписей можно создать при настройке почты для рассылок уведомлений.

                                                      • Можно создать подпись двух видов:
                                                        • @@ -17,31 +17,31 @@
                                                        • для сообщений при ответе или пересылке - на вкладке Подпись при ответе.
                                                      • -
                                                        Установите флажок Включать для нужного вида подписи. Выберите Формат подписи:
                                                        +
                                                        Установите флажок Включать для нужного вида подписи. Выберите Формат подписи:
                                                        • Обычный текст;
                                                        • HTML. Создание подписи в формате HTML позволит форматировать текст и вставлять в него картинки.
                                                          • -
                                                            Создание подписей в формате HTML доступно, если это предусмотрено настройками приложения. Данную настройку можно изменить в разделе Администрирование - Органайзер, отредактировав значение флажка Исходящие письма в формате HTML.
                                                      • +
                                                        Создание подписей в формате HTML доступно, если это предусмотрено настройками приложения. Данную настройку можно изменить в разделе Администрирование - Органайзер, отредактировав значение флажка Исходящие письма в формате HTML.
                                                  • -
                                                    Напишите подпись в соответствующем поле. При выборе формата HTML можно выбирать различные способы форматирования текста, вставлять картинки и гиперссылки. Текст можно форматировать с помощью кнопок форматирования в панели навигации, а также команд меню Еще.
                                                  Если для электронной почты настроена подпись, то она подставляется при создании письма.
                                                  +
                                                  Напишите подпись в соответствующем поле. При выборе формата HTML можно выбирать различные способы форматирования текста, вставлять картинки и гиперссылки. Текст можно форматировать с помощью кнопок форматирования в панели навигации, а также команд меню Еще.
                                                Если для электронной почты настроена подпись, то она подставляется при создании письма.

                                                Уведомление о доставке и прочтении

                                                -

                                                На вкладке Отслеживание писем можно включить возможность запроса уведомлений от получателя о прочтении и доставке отправленных писем:

                                                +

                                                На вкладке Отслеживание писем можно включить возможность запроса уведомлений от получателя о прочтении и доставке отправленных писем:

                                                • Включите флажки Уведомление о прочтении и Уведомление о доставке.
                                                • Эти значения будут использоваться для каждого исходящего письма как значения по умолчанию, при этом их можно будет изменить.

                                                Настройка порядка ответов на запросы уведомлений о прочтении

                                                -

                                                Данные настройки можно выполнить на закладке Отслеживание писем. Доступны следующие варианты поведения приложения при получении запросов уведомлений о прочтении писем (выберите один из вариантов с помощью переключателя):

                                                -
                                                • Всегда отправлять уведомление - после установки во входящем электронном письме флажка Рассмотрено будет отправлено уведомление о прочтении. +

                                                  Данные настройки можно выполнить на закладке Отслеживание писем. Доступны следующие варианты поведения приложения при получении запросов уведомлений о прочтении писем (выберите один из вариантов с помощью переключателя):

                                                  +
                                                  • Всегда отправлять уведомление - после установки во входящем электронном письме флажка Рассмотрено будет отправлено уведомление о прочтении.
                                                  • Никогда не отправлять уведомление - запросы на отправку уведомления о прочтении будут игнорироваться.
                                                  • Запрашивать перед тем как отправить уведомление - при установке в письме флажка Рассмотрено будет задан вопрос об отправке уведомления о прочтении.
                                                  -

                                                  Отображение тела письма-основания в документе Исходящее письмо при ответе или пересылке

                                                  +

                                                  Отображение тела письма-основания в документе Исходящее письмо при ответе или пересылке

                                                  • Включите флажок Отображать тело исходного письма при ответе или пересылке на вкладке Прочее.
                                                  • @@ -50,13 +50,13 @@
                                                  • Это значение будет использоваться для каждого исходящего письма как значение по умолчанию, при этом в самом письме его можно будет изменить.
                                                  -

                                                  Включение тела письма-основания в тело исходящего письма при ответе или пересылке

                                                  +

                                                  Включение тела письма-основания в тело исходящего письма при ответе или пересылке

                                                  • Установите флажок Включать тело исходного письма при ответе или пересылке на вкладке Прочее.
                                                  • -
                                                    Это значение будет использоваться для каждого исходящего письма как значение по умолчанию, при этом в самом письме его можно будет изменить.

                                                  Настройка отправки сообщений сразу в файловом режиме

                                                  -
                                                  • В файловом режиме работы приложения предусмотрена возможность Отправлять почтовые сообщения сразу после нажатия кнопки Отправить (по умолчанию письма отправляются по расписанию регламентного задания Получение и отправка электронных писем). +
                                                    Это значение будет использоваться для каждого исходящего письма как значение по умолчанию, при этом в самом письме его можно будет изменить.

                                                  Настройка отправки сообщений сразу в файловом режиме

                                                  +
                                                  • В файловом режиме работы приложения предусмотрена возможность Отправлять почтовые сообщения сразу после нажатия кнопки Отправить (по умолчанию письма отправляются по расписанию регламентного задания Получение и отправка электронных писем).
                                                  • В файловом режиме письма можно отправить также с помощью команды Отправить и получить списка взаимодействий.

                                                  См. также:

                                                  \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html index a471d4270..85a62e47d 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПараметрыЭлектронногоПисьма/Help/ru.html @@ -1,20 +1,20 @@ -

                                                  Предназначена для просмотра и изменения параметров входящего электронного письма или исходящего электронного письма.

                                                  -

                                                  Открывается по соответствующей команде меню Еще из электронных писем.

                                                  +

                                                  Предназначена для просмотра и изменения параметров входящего электронного письма или исходящего электронного письма.

                                                  +

                                                  Открывается по соответствующей команде меню Еще из электронных писем.

                                                  Параметры письма:

                                                  • Создано - для исходящего письма означает дату окончания редактирования письма перед отправкой, для входящего означает дату отправки письма.
                                                  • -
                                                  • Внутренний номер - номер, под которым письмо зарегистрировано в приложении. +
                                                  • Внутренний номер - номер, под которым письмо зарегистрировано в приложении.
                                                  • Отправлено - дата отправки письма, отображается только для исходящего письма.
                                                  • Получено - дата получения письма, отображается только для входящего письма.
                                                  • -
                                                  • Включать тело исходного письма - можно изменить для исходящего письма в статусе Черновик или Исходящее. Если данный флажок включен, то к телу письма при отправке будет приложен текст письма-основания. +
                                                  • Включать тело исходного письма - можно изменить для исходящего письма в статусе Черновик или Исходящее. Если данный флажок включен, то к телу письма при отправке будет приложен текст письма-основания.
                                                  • Папка - текущая папка письма, доступна для изменения. Нажмите Показать все, выберите нужную папку из списка.
                                                  • -
                                                  • Уведомить о доставке - признак того, что отправитель запрашивает уведомление о доставке. Доступен для изменения, если статус исходящего письма Черновик или Исходящее. +
                                                  • Уведомить о доставке - признак того, что отправитель запрашивает уведомление о доставке. Доступен для изменения, если статус исходящего письма Черновик или Исходящее.
                                                  • Уведомить о прочтении - признак того, что отправитель запрашивает уведомление о прочтении. Доступен для изменения, если статус исходящего письма Черновик или Исходящее.
                                                  • diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form index d245d1aea..68b73576f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Form.form @@ -113,6 +113,103 @@ Auto + + ПредупреждениеОНеактуальностиИндекса + 943 + + ПредупреждениеОНеактуальностиИндексаКартинка + 945 + true + true + + true + + + ПредупреждениеОНеактуальностиИндексаКартинкаРасширеннаяПодсказка + 947 + Label + true + true + + Left + + + + ПредупреждениеОНеактуальностиИндексаКартинкаКонтекстноеМеню + 946 + true + + true + true + + + CommonPicture.Предупреждение + + AsFileRef + + + + ПредупреждениеОНеактуальностиИндексаНадпись + 948 + + <key>ru</key> + <value>Результаты поиска могут быть неточными, повторите поиск позднее</value> + + true + true + + true + + + ПредупреждениеОНеактуальностиИндексаНадписьРасширеннаяПодсказка + 950 + Label + true + true + + Left + + + + ПредупреждениеОНеактуальностиИндексаНадписьКонтекстноеМеню + 949 + true + + Label + true + + Left + + + true + + true + + + <key>ru</key> + <value>Предупреждение о неактуальности индекса</value> + + + ПредупреждениеОНеактуальностиИндексаРасширеннаяПодсказка + 944 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + WeakSeparation + true + true + Auto + Auto + + ГруппаПользовательскихНастроек 832 @@ -9084,6 +9181,19 @@ true + + ИндексПолнотекстовогоПоискаАктуален + 49 + + Boolean + + + true + + + true + + УстановитьВариантНавигацииПоПредмету @@ -9876,6 +9986,31 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>РежимВыбора</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> + <parameters> + <name>ТолькоПочта</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> + <parameters> + <name>ИмяТекущейПанелиНавигации</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> + <parameters> + <name>ТекущаяСтрока</name> + <valueType> + <types>AnyRef</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html index e126ae482..a91dc458e 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Help/ru.html @@ -2,10 +2,10 @@ <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Предназначен для работы с документами взаимодействий.</p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Бизнес-процессы помимо обычного делопроизводства в настоящее время включают и общение партнеров между собой, т.е. их взаимодействие: между партнерами проходят различные встречи, переговоры, электронная переписка. В процессе общения принимаются важные решения, заключаются различные договоры, составляются другие документы, поэтому необходимо это взаимодействие также задокументировать.</p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Приложение позволяет планировать, регистрировать, упорядочивать и работать с результатами взаимодействия - общения пользователей приложения с кем-либо по поводу предмета взаимодействия. Например, один сотрудник может взаимодействовать с другим сотрудником (контактом) по поводу заказа клиента (предмета). </p> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Приложение позволяет выстраивать различные взаимодействия, возникшие на основании одного и того же предмета, в цепочку. В цепочке взаимодействий в качестве предмета у всех взаимодействий указывается одно, как правило, первое по времени взаимодействие. При этом в любой момент времени в любом взаимодействии из цепочки можно указать другой предмет, не являющийся взаимодействием, например, один из документов приложения, приложение после этого в автоматическом режиме поменяет предмет у всей цепочки. Например, переговоры с потенциальным клиентом, состоявшие из встреч, телефонных звонков и переписки (цепочки взаимодействий) закончились заказом клиента. В этом случае приложение позволяет изменить предмет во всех взаимодействиях, предшествовавших заказу, на итоговый заказ клиента.</p> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Кроме этого, для удобства работы с контактами приложение формирует единую <a href="CommonForm.АдреснаяКнига/Help">адресную книгу</a> на основании контактной информации.</p> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Список взаимодействий состоит из двух частей: в левой части списка обычно отображается панель навигации, в правой части - документы взаимодействий. </p> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"> </p> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Приложение позволяет выстраивать различные взаимодействия, возникшие на основании одного и того же предмета, в цепочку. В цепочке взаимодействий в качестве предмета у всех взаимодействий указывается одно, как правило, первое по времени взаимодействие. При этом в любой момент времени в любом взаимодействии из цепочки можно указать другой предмет, не являющийся взаимодействием, например, один из документов приложения, приложение после этого в автоматическом режиме поменяет предмет у всей цепочки. Например, переговоры с потенциальным клиентом, состоявшие из встреч, телефонных звонков и переписки (цепочки взаимодействий) закончились заказом клиента. В этом случае приложение позволяет изменить предмет во всех взаимодействиях, предшествовавших заказу, на итоговый заказ клиента.</p> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Кроме этого, для удобства работы с контактами приложение формирует единую <a href="CommonForm.АдреснаяКнига/Help">адресную книгу</a> на основании контактной информации.</p> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Список взаимодействий состоит из двух частей: в левой части списка обычно отображается панель навигации, в правой части - документы взаимодействий. </p> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"> </p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#1">Какие сведения выводятся в списке?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#2">Как ввести документ взаимодействий?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695915">Какие виды панелей навигации доступны в списке взаимодействий?</a></p> @@ -25,22 +25,22 @@ <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591c">Может ли пользователь инициировать процесс отправки и получения писем?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591e">Можно ли ответить или переслать письмо из списка взаимодействий?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#8">Как из списка перейти к настройке электронной почты?</a></p> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"> </p> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a name="1">Правая часть списка состоит из колонок:</a></p> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"> </p> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a name="1">Правая часть списка состоит из колонок:</a></p> <div style="margin-bottom: 5px; margin-top: 0px; margin-left: 20px;"> <p></p> -<ul><li><img src="CommonPicture.ЭлектронноеПисьмо" width="16" height="16"></img> <strong>Вид взаимодействия</strong> - взаимодействия в списке отображаются соответствующими значками:</li> -<ul><li>Для отражения будущих взаимодействий в приложении используется документ <img src="CommonPicture.ЗапланированноеВзаимодействие" width="16" height="16"></img> <a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланированное взаимодействие</a>.</li> -<li>Для отражения фактически состоявшихся контактов служат документы: <img src="CommonPicture.Встреча" width="16" height="16"></img> <a href="Document.Встреча.Form.ФормаДокумента/Help">Встреча</a>;</li> -<li><img src="CommonPicture.НаписатьSMS" width="16" height="16"></img> <a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Сообщение SMS</a>;</li> -<li><img src="CommonPicture.ТелефонныйЗвонок" width="16" height="16"></img> <a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Телефонный звонок</a>;</li> -<li><img src="CommonPicture.ЭлектронноеПисьмоВходящее" width="16" height="16"></img> <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Электронное письмо входящее</a> - в отличие от остальных документов, невозможно ввести. Его можно только получить от отправителя;</li> -<li><img src="CommonPicture.ЭлектронноеПисьмоИсходящее" width="16" height="16"></img> <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Электронное письмо исходящее</a>.</li></ul><li><img src="CommonPicture.ВосклицательныйЗнакСерый" width="16" height="16"></img> <strong>Важность - </strong>признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения: <strong>Низкая</strong>, <strong>Обычная</strong> (значение по умолчанию), <strong>Высокая</strong>. Отображается в списке взаимодействий специальными значками.</li> +<ul><li><img src="CommonPicture.ЭлектронноеПисьмо" width="16" height="16"></img><strong>Вид взаимодействия</strong> - взаимодействия в списке отображаются соответствующими значками:</li> +<ul><li>Для отражения будущих взаимодействий в приложении используется документ <img src="CommonPicture.ЗапланированноеВзаимодействие" width="16" height="16"></img><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланированное взаимодействие</a>.</li> +<li>Для отражения фактически состоявшихся контактов служат документы: <img src="CommonPicture.Встреча" width="16" height="16"></img><a href="Document.Встреча.Form.ФормаДокумента/Help">Встреча</a>;</li> +<li><img src="CommonPicture.НаписатьSMS" width="16" height="16"></img><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Сообщение SMS</a>;</li> +<li><img src="CommonPicture.ТелефонныйЗвонок" width="16" height="16"></img><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Телефонный звонок</a>;</li> +<li><img src="CommonPicture.ЭлектронноеПисьмоВходящее" width="16" height="16"></img><a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Электронное письмо входящее</a> - в отличие от остальных документов, невозможно ввести. Его можно только получить от отправителя;</li> +<li><img src="CommonPicture.ЭлектронноеПисьмоИсходящее" width="16" height="16"></img><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Электронное письмо исходящее</a>.</li></ul><li><img src="CommonPicture.ВосклицательныйЗнакСерый" width="16" height="16"></img><strong>Важность - </strong>признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения: <strong>Низкая</strong>, <strong>Обычная</strong> (значение по умолчанию), <strong>Высокая</strong>. Отображается в списке взаимодействий специальными значками.</li> <li><strong>Участники</strong> - контакты, с которыми были взаимодействия;</li> <li><strong>Тема</strong> - краткое содержание взаимодействия.</li> <li><strong>Дата</strong> - дата создания документа;</li> -<li><img src="CommonPicture.Скрепка" width="16" height="16"></img> <strong>Наличие вложений - </strong>к письмам можно приложить различные файлы.</li></ul><p></p></div> -<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">В нижней части списка (в зависимости от <a href="#6">настроек</a>) может отображаться описание, текст выделенного в списке взаимодействия или тело письма.</p> +<li><img src="CommonPicture.Скрепка" width="16" height="16"></img><strong>Наличие вложений - </strong>к письмам можно приложить различные файлы.</li></ul><p></p></div> +<p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">В нижней части списка (в зависимости от <a href="#6">настроек</a>) может отображаться описание, текст выделенного в списке взаимодействия или тело письма.</p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Жирным шрифтом в списке выделяются документы к рассмотрению, письма и сообщения SMS с установленным признаком <strong>На контроле</strong>. Приложение ведет подсчет нерассмотренных документов и писем с флажком <strong>На контроле</strong> в каждой группе списка. Группы, которые содержат такие документы, выделяются жирным шрифтом.</p> <h3 style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a name="2">Ввод документов взаимодействия</a></h3> <ul><li> @@ -49,7 +49,7 @@ <ul><li><b>По предметам</b> - панель навигации заполняется предметами взаимодействий. Все взаимодействия в списке группируются по предметам. <ul><li>При позиционировании на предмете в списке отображаются взаимодействия по данному предмету. </li> -<li> В панели группировки можно открывать предметы, по которым сгруппированы взаимодействия (двойным щелчком мыши в панели группировки). +<li> В панели группировки можно открывать предметы, по которым сгруппированы взаимодействия (двойным щелчком мыши в панели группировки). </li> <li>С помощью перетаскивания мышью взаимодействия можно перемещать между предметами, при этом в самом взаимодействии меняется предмет. </li> @@ -64,7 +64,7 @@ <ul><li>При позиционировании на контакте в списке отображаются взаимодействия с данным контактом. </li> <li>Включите флажок в контекстном меню панели навигации по правой кнопке мыши, для того чтобы показывать <strong>Только значимые</strong> контакты.</li></ul></li> -<li><b>По папкам</b> - панель навигации заполняется доступными <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователю</a> <a href="Catalog.УчетныеЗаписиЭлектроннойПочты/Help">адресами электронной почты</a> и их <a href="Catalog.ПапкиЭлектронныхПисем/Help">папками</a>. В отличие от остальных видов панелей навигации, используется только для работы с электронными письмами. Подробнее см. <a href="#7">ниже</a>. +<li><b>По папкам</b> - панель навигации заполняется доступными <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователю</a> <a href="Catalog.УчетныеЗаписиЭлектроннойПочты/Help">адресами электронной почты</a> и их <a href="Catalog.ПапкиЭлектронныхПисем/Help">папками</a>. В отличие от остальных видов панелей навигации, используется только для работы с электронными письмами. Подробнее см. <a href="#7">ниже</a>. </li> <li><b>По закладкам</b> - панель навигации заполняется <a href="Catalog.ЗакладкиВзаимодействий/Help">закладками</a> пользователя. При позиционировании на <a href="Catalog.ЗакладкиВзаимодействий.Form.ФормаЭлемента/Help">закладке</a> в списке будет отображаться те взаимодействия, которые соответствуют отбору, настроенному в закладке. Подробнее о работе с закладками в списке см. <a href="#70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695934">ниже</a>. </li> @@ -73,31 +73,31 @@ </li> <li>При позиционировании на одном из значений в списке взаимодействий отображаются только те документы, у которых соответствующее сведение имеет такое же значение. </li></ul></li> <li><b>По категориям</b> - панель навигации заполняется видами свойств документов взаимодействий: -<ul><li>Если дополнительный реквизит или сведение имеет тип Булево, значениями которого могут быть либо <strong>Истина</strong>, либо <strong>Ложь</strong>, то в панели навигации отображаются наименования дополнительных реквизитов; +<ul><li>Если дополнительный реквизит или сведение имеет тип Булево, значениями которого могут быть либо <strong>Истина</strong>, либо <strong>Ложь</strong>, то в панели навигации отображаются наименования дополнительных реквизитов; <ul><li>При позиционировании на виде свойства в панели навигации в списке взаимодействий отображаются только те документы, у которых значение данного свойства <strong>Истина</strong>. </li></ul></li></ul></li> <li>Если дополнительный реквизит или сведение имеет значение, отличное от типа Булево, то в панели навигации доступна группировка, соответствующая названию дополнительного реквизита. <ul><li>При такой группировке в панели навигации отображаются значения дополнительного реквизита, а в списке взаимодействий отображаются взаимодействия, дополнительные реквизиты которых соответствуют значениям, выделенным в панели навигации.</li></ul></li></ul><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695917"> -<h3 style="MARGIN-LEFT: 0px">Переключение вида панели навигации</h3></a> +<h3 style="MARGIN-LEFT: 0px">Переключение вида панели навигации</h3></a> <ul><li> <div style="MARGIN-LEFT: 0px">Для выбора вида панели навигации воспользуйтесь выпадающим меню, которое располагается над панелью навигации.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695919"> </a></div></li></ul><a name="3"> -<h3 style="MARGIN-LEFT: 0px">Скрытие панели навигации</h3></a> +<h3 style="MARGIN-LEFT: 0px">Скрытие панели навигации</h3></a> <ul><li> -<div style="MARGIN-LEFT: 0px">Для удобства просмотра списка взаимодействий можно <strong>Скрыть панель навигации</strong> с помощью соответствующей команды меню <strong>Еще</strong>. </div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="otbory">Отборы списка</a></h3> +<div style="MARGIN-LEFT: 0px">Для удобства просмотра списка взаимодействий можно <strong>Скрыть панель навигации</strong> с помощью соответствующей команды меню <strong>Еще</strong>. </div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="otbory">Отборы списка</a></h3> <ul style="MARGIN-LEFT: 40px"><li>В поле <strong>Ответственный</strong> можно установить отбор по ответственному за отработку взаимодействий, которого можно выбрать из списка <a href="Catalog.Пользователи/Help">Пользователи</a>. </li> -<li>С помощью выпадающего меню по кнопке <b>Показывать</b> можно установить отбор по определенному типу взаимодействий, например, по входящим письмам или телефонным звонкам. По умолчанию выбраны <strong>Все</strong> типы. </li> -<ul><li>Если установлена группировка списка <b>По папкам</b>, кнопка не показывается, т.к. в этом случае видно только письма и их можно группировать с помощью папок. </li> -<li>Также можно отобрать взаимодействия с помощью команды <strong>Еще</strong><strong> - Показывать</strong>.</li></ul><li>С помощью выпадающего меню по кнопке <strong>Статус</strong> можно отобрать взаимодействия с определенным статусом рассмотрения, например, только нерассмотренные, или только отложенные. По умолчанию выбраны <strong>Все</strong> статусы. Также отобрать взаимодействия можно с помощью <strong><span style="font-weight: normal;">команды </span>Еще</strong><strong> -</strong> <strong>Статус</strong>. +<li>С помощью выпадающего меню по кнопке <b>Показывать</b> можно установить отбор по определенному типу взаимодействий, например, по входящим письмам или телефонным звонкам. По умолчанию выбраны <strong>Все</strong> типы. </li> +<ul><li>Если установлена группировка списка <b>По папкам</b>, кнопка не показывается, т.к. в этом случае видно только письма и их можно группировать с помощью папок. </li> +<li>Также можно отобрать взаимодействия с помощью команды <strong>Еще</strong><strong> - Показывать</strong>.</li></ul><li>С помощью выпадающего меню по кнопке <strong>Статус</strong> можно отобрать взаимодействия с определенным статусом рассмотрения, например, только нерассмотренные, или только отложенные. По умолчанию выбраны <strong>Все</strong> статусы. Также отобрать взаимодействия можно с помощью <strong>команды Еще</strong><strong> -</strong> <strong>Статус</strong>. <ul><li>Если в поле установлено значение <strong>К рассмотрению</strong>, то будут отображены взаимодействия, которые необходимо отработать до текущей даты и с неустановленным флажком <strong>Рассмотрено</strong>. </li> <li>Если в поле установлено значение <strong>Отложенные</strong>, то в списке показываются взаимодействия с заполненным полем <strong>Рассмотреть после</strong> и неустановленным флажком <strong>Рассмотрено</strong>. </li> <li>Если в поле установлено значение <strong>Рассмотренные</strong>, то в списке показываются взаимодействия с установленным флажком <strong>Рассмотрено</strong>.</li></ul></li> -<li>С помощью команды <strong>Еще - Установить период</strong> можно выбрать период просмотра документов взаимодействий. +<li>С помощью команды <strong>Еще - Установить период</strong> можно выбрать период просмотра документов взаимодействий. </li> <li>Установленные отборы запоминаются.</li></ul><h3>Учет отборов в панели группировки по предметам или контактам</h3> <div> -<ul><li>С помощью ссылки под панелью навигации можно <b>Изменить</b> группировку - включить или отключить учет отборов в панели группировки по предметам или контактам. </li> +<ul><li>С помощью ссылки под панелью навигации можно <b>Изменить</b> группировку - включить или отключить учет отборов в панели группировки по предметам или контактам. </li> <li>Если учет отборов в панели группировки отключен, то показываются все предметы (контакты).</li></ul></div> <div><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591b"> <h3 style="MARGIN-LEFT: 0px">Полнотекстовый поиск в переписке или во вложениях</h3></a> @@ -107,13 +107,13 @@ <div>Будет выполнен поиск по текстам, содержащимся в переписке или во вложениях.</div> </li> <li> -<div>Данный поиск позволяет найти взаимодействия, для которых либо в самом документе, либо в текстах присоединенных файлов имеется строка, удовлетворяющая условиям.</div> +<div>Данный поиск позволяет найти взаимодействия, для которых либо в самом документе, либо в текстах присоединенных файлов имеется строка, удовлетворяющая условиям.</div> </li> <li> <div>После выполнения поиска в списке взаимодействий остаются только те документы, которые удовлетворяют условию поиска. </div> </li> <li> -<div>При позиционировании на взаимодействии в нижней части списка отображается информация о тексте, который совпадает с условием поиска.</div> +<div>При позиционировании на взаимодействии в нижней части списка отображается информация о тексте, который совпадает с условием поиска.</div> </li> <li> <div>Если ни одно взаимодействие не найдено, поле ввода строки поиска подсвечивается красным.</div> @@ -121,7 +121,7 @@ <li> <div>Для того чтобы отменить отображение списка по результатам полнотекстового поиска, необходимо очистить строку поиска.</div></li></ul></li> <li> -<div>По умолчанию поиск работает по целому слову или словосочетанию. Производится с учетом морфологии, т.е. можно найти слово в других падежах, другого рода (мужского или женского), другом числе (единственном или множественном) и т.д.</div> +<div>По умолчанию поиск работает по целому слову или словосочетанию. Производится с учетом морфологии, т.е. можно найти слово в других падежах, другого рода (мужского или женского), другом числе (единственном или множественном) и т.д.</div> </li> <li> <div>Если необходимо выполнить какой-то другой вид поиска - например, по части слова, то необходимо использовать служебные символы языка запросов полнотекстового поиска.</div> @@ -130,10 +130,10 @@ <li> <div>Следует учитывать, что некоторые символы, введенные в строку поиска, будут трактоваться как служебные символы языка запросов полнотекстового поиска в данных. </div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591f">Установка признака Рассмотрено</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Выделите нужные документы. </div> +<div style="MARGIN-LEFT: 0px">Выделите нужные документы. </div> </li> <li> -<div style="MARGIN-LEFT: 0px">Нажмите <img src="CommonPicture.УстановитьПризнакРассмотреноДляВзаимодействия"></img> <strong>Установить признак</strong> <b>Рассмотрено</b> (<strong>Ctrl+R</strong>). </div> +<div style="MARGIN-LEFT: 0px">Нажмите <img src="CommonPicture.УстановитьПризнакРассмотреноДляВзаимодействия"></img><strong>Установить признак</strong> <b>Рассмотрено</b> (<strong>Ctrl+R</strong>). </div> </li> <li> <div style="MARGIN-LEFT: 0px">Для групповой установки признака<b> Рассмотрено</b> можно воспользоваться соответствующей командой контекстного меню панели навигации. </div> @@ -141,54 +141,54 @@ <div style="MARGIN-LEFT: 0px">В этом случае признак <b>Рассмотрено</b> будет установлен для всех документов, удовлетворяющих отбору списка. </div> </li> <li> -<div style="MARGIN-LEFT: 0px">Например, при выполнении данной команды на папке <b>Входящие</b> будет снят признак <b>На контроле</b> для всех писем данной папки. </div></li></ul></li> +<div style="MARGIN-LEFT: 0px">Например, при выполнении данной команды на папке <b>Входящие</b> будет снят признак <b>На контроле</b> для всех писем данной папки. </div></li></ul></li> <li> -<div style="MARGIN-LEFT: 0px">После установки флажка <strong>Рассмотрено</strong> выделение документа в списке снимается.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695921">Снятие признака Рассмотрено</a> </h3> +<div style="MARGIN-LEFT: 0px">После установки флажка <strong>Рассмотрено</strong> выделение документа в списке снимается.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695921">Снятие признака Рассмотрено</a> </h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужные документы. </div> </li> <li> -<div style="MARGIN-LEFT: 0px">Воспользуйтесь командой<strong> </strong><strong>Еще</strong><strong> - Снять признак рассмотрено</strong> (<strong>Alt+Shift+R</strong>). Для писем устанавливается признак <strong>На контроле</strong>.</div> +<div style="MARGIN-LEFT: 0px">Воспользуйтесь командой<strong> </strong><strong>Еще</strong><strong> - Снять признак рассмотрено</strong> (<strong>Alt+Shift+R</strong>). Для писем устанавливается признак <strong>На контроле</strong>.</div> </li> <li> <div style="MARGIN-LEFT: 0px">Документы в списке выделяются жирным шрифтом.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869592b">Команда Отложить рассмотрение</a></h3> <ul><li>Выделите нужные документы. </li> -<li>Нажмите <img src="CommonPicture.ОтложитьРассмотрениеВзаимодействия"></img> <strong>Отложить рассмотрение</strong> (<strong>Ctrl+B</strong>). Введите дату и время, после которых надо будет отработать документ. +<li>Нажмите <img src="CommonPicture.ОтложитьРассмотрениеВзаимодействия"></img><strong>Отложить рассмотрение</strong> (<strong>Ctrl+B</strong>). Введите дату и время, после которых надо будет отработать документ. </li> <li>Для того чтобы отложить рассмотрение нескольких взаимодействий, можно также воспользоваться соответствующей командой контекстного меню панели навигации. <ul><li>В этом случае будет отложено рассмотрение взаимодействий, удовлетворяющих отбору списка. </li> <li>Например, при выполнении данной команды на папке <b>Входящие</b> будет отложено рассмотрение всех писем данной папки.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695929"> </a></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="4">Просмотр отложенных взаимодействий</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Для просмотра отложенных взаимодействий используется статус <b>Отложенные</b>. При установке этого статуса в списке отображаются все неотработанные взаимодействия, у которых включен флажок <strong>На контроле</strong> или заполнена информация в поле <b>Рассмотреть после</b>.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="Predmet">Установка предмета взаимодействий</a></h3> +<div style="MARGIN-LEFT: 0px">Для просмотра отложенных взаимодействий используется статус <b>Отложенные</b>. При установке этого статуса в списке отображаются все неотработанные взаимодействия, у которых включен флажок <strong>На контроле</strong> или заполнена информация в поле <b>Рассмотреть после</b>.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="Predmet">Установка предмета взаимодействий</a></h3> <ul><li>Выделите нужные документы. </li> -<li>Нажмите <img src="CommonPicture.УстановитьПредметВзаимодействия"></img> <b>Установить предмет взаимодействия</b> (<strong>Ctrl+G</strong>). Выберите тип документа, который будет выступать в качестве предмета взаимодействий, затем из соответствующего списка выберите документ. +<li>Нажмите <img src="CommonPicture.УстановитьПредметВзаимодействия"></img><b>Установить предмет взаимодействия</b> (<strong>Ctrl+G</strong>). Выберите тип документа, который будет выступать в качестве предмета взаимодействий, затем из соответствующего списка выберите документ. </li> <li>Для групповой установки предмета взаимодействий можно также воспользоваться соответствующей командой контекстного меню панели навигации. <ul><li>В этом случае выбранный предмет будет установлен для всех документов, удовлетворяющих отбору списка. </li> <li>Например, при выполнении данной команды на папке <b>Входящие</b> будет установлен указанный предмет для всех писем данной папки.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869592e"> </a></li></ul></li> -<li>Если список сгруппирован по предметам, то установить предмет у нескольких взаимодействий можно с помощью перетаскивания мышью.</li></ul><h3 style="MARGIN-LEFT: 0px">Назначение ответственного для документов</h3> +<li>Если список сгруппирован по предметам, то установить предмет у нескольких взаимодействий можно с помощью перетаскивания мышью.</li></ul><h3 style="MARGIN-LEFT: 0px">Назначение ответственного для документов</h3> <p style="MARGIN-LEFT: 0px"></p> <ul><li>Выделите нужные документы. </li> -<li>Нажмите <img src="CommonPicture.УстановитьОтветственногоЗаВзаимодействие"></img> <b>Установить ответственного</b> (<strong>Ctrl+M</strong>). Выберите ответственного из списка пользователей. +<li>Нажмите <img src="CommonPicture.УстановитьОтветственногоЗаВзаимодействие"></img><b>Установить ответственного</b> (<strong>Ctrl+M</strong>). Выберите ответственного из списка пользователей. </li> <li>Для групповой установки ответственного можно воспользоваться соответствующей командой контекстного меню панели навигации. <ul><li>В этом случае ответственный будет установлен для всех документов, удовлетворяющих отбору списка. </li> -<li>Например, при выполнении данной команды на папке <b>Входящие</b> будет установлен выбранный ответственный для всех писем данной папки.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695930"> </a></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695934">Ввод закладки взаимодействий</a></h3> +<li>Например, при выполнении данной команды на папке <b>Входящие</b> будет установлен выбранный ответственный для всех писем данной папки.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695930"> </a></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695934">Ввод закладки взаимодействий</a></h3> <p style="MARGIN-LEFT: 0px"></p> <ul><li>Достаточно выделить в списке одно или несколько взаимодействий и воспользоваться командой <b>Добавить в закладки</b> контекстного меню списка. <ul><li>Будет создана закладка <strong>Избранные взаимодействия</strong>, включающая в себя отбор по выбранным взаимодействиям. </li></ul></li> <li>Для создания закладки можно воспользоваться соответствующей командой контекстного меню панели навигации. <ul><li>В этом случае закладка будет создана для всех документов, удовлетворяющих отбору списка. Например, при выполнении данной команды на папке <b>Входящие</b> будет создана закладка для всех писем данной папки, которая будет называться <strong>В папке Входящие</strong>. </li></ul></li> <li>Для того чтобы создать свою закладку и отобрать документы по необходимым для вас признакам, установите вид панели навигации <strong>По закладкам</strong>. -<ul><li>С помощью команды контекстного меню панели навигации можно <strong>Создать</strong> закладки, а с помощью команды <strong>Создать группу</strong> - группы закладок.</li></ul></li></ul><h3><a name="6">Просмотр содержания документов в списке</a></h3> -<ul><li>С помощью флажка <strong>Еще </strong>- <strong>Отображать область чтения</strong> можно установить режим просмотра текста писем или темы документов.</li></ul><h3 style="MARGIN-LEFT: 0px"><a name="7">Группировка списка по папкам электронных писем</a>. Работа с электронной перепиской</h3> -<p style="MARGIN-LEFT: 0px">С электронной перепиской в списке удобно работать при группировке <strong>По папкам</strong>.</p> +<ul><li>С помощью команды контекстного меню панели навигации можно <strong>Создать</strong> закладки, а с помощью команды <strong>Создать группу</strong> - группы закладок.</li></ul></li></ul><h3><a name="6">Просмотр содержания документов в списке</a></h3> +<ul><li>С помощью флажка <strong>Еще </strong>- <strong>Отображать область чтения</strong> можно установить режим просмотра текста писем или темы документов.</li></ul><h3 style="MARGIN-LEFT: 0px"><a name="7">Группировка списка по папкам электронных писем</a>. Работа с электронной перепиской</h3> +<p style="MARGIN-LEFT: 0px">С электронной перепиской в списке удобно работать при группировке <strong>По папкам</strong>.</p> <ul><li> <div style="MARGIN-LEFT: 0px">В этом случае вся корреспонденция группируется по папкам электронной почты. </div> </li> @@ -215,10 +215,10 @@ <li> <div style="MARGIN-LEFT: 0px"><b>Черновики</b> - папка, в которой находятся письма, редактирование которых не завершено.</div></li></ul></li> <li> -<div style="MARGIN-LEFT: 0px">В каждую папку письма попадают автоматически при получении или смене статуса, а также при <a href="Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ПрименениеПравил/Help">применении правил обработки</a>. Выполните команду <strong>Применить правила обработки </strong>контекстного меню панели группировки, для того чтобы произвести сортировку писем согласно ранее разработанным <a href="Catalog.ПравилаОбработкиЭлектроннойПочты/Help">правилам обработки</a>.</div> +<div style="MARGIN-LEFT: 0px">В каждую папку письма попадают автоматически при получении или смене статуса, а также при <a href="Catalog.ПравилаОбработкиЭлектроннойПочты.Form.ПрименениеПравил/Help">применении правил обработки</a>. Выполните команду <strong>Применить правила обработки </strong>контекстного меню панели группировки, для того чтобы произвести сортировку писем согласно ранее разработанным <a href="Catalog.ПравилаОбработкиЭлектроннойПочты/Help">правилам обработки</a>.</div> </li> -<li>При позиционировании на папке в списке отображаются письма данной папки.</li></ul><p style="MARGIN-LEFT: 0px">Для работы с папками электронных писем предусмотрены команды контекстного меню панели группировки по правой кнопки мыши:</p> -<ul><li><strong>Перенести в папку</strong> - команда доступна только для пользовательских папок (при наличии прав доступа). Для перемещения папок можно также использовать перетаскивание мышью. Воспользовавшись командой, можно выбрать нужную папку из списка или создать новую; +<li>При позиционировании на папке в списке отображаются письма данной папки.</li></ul><p style="MARGIN-LEFT: 0px">Для работы с папками электронных писем предусмотрены команды контекстного меню панели группировки по правой кнопки мыши:</p> +<ul><li><strong>Перенести в папку</strong> - команда доступна только для пользовательских папок (при наличии прав доступа). Для перемещения папок можно также использовать перетаскивание мышью. Воспользовавшись командой, можно выбрать нужную папку из списка или создать новую; </li> <li> <div style="MARGIN-LEFT: 0px"><strong>Создать папку</strong> - для создания новой папки заполните необходимые <a href="Catalog.ПапкиЭлектронныхПисем.Form.ФормаЭлемента/Help">поля</a>.</div> @@ -227,7 +227,7 @@ <div style="MARGIN-LEFT: 0px">Для перемещения писем из одной папки в другую можно пользоваться перетаскиванием мышью. </div> <ul><li style="MARGIN-LEFT: 0px">Также можно использовать команду контекстного меню правой части списка <strong>Перенести в папку</strong>. Выберите нужную папку из списка или создайте новую. Нажмите <strong>Выбрать</strong> для возврата в список.</li></ul></li> <li> -<div style="MARGIN-LEFT: 0px">При работе в папках доступны команды для работы с письмами:</div> +<div style="MARGIN-LEFT: 0px">При работе в папках доступны команды для работы с письмами:</div> <ul><li> <div style="MARGIN-LEFT: 0px"><strong>Написать</strong> письмо;</div> </li> @@ -235,24 +235,24 @@ <div style="MARGIN-LEFT: 0px"><strong>Ответить</strong>,</div> </li> <li> -<div style="MARGIN-LEFT: 0px"><strong><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем"></img> Ответить всем</strong>,</div> +<div style="MARGIN-LEFT: 0px"><strong><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем"></img> Ответить всем</strong>,</div> </li> <li> -<div style="MARGIN-LEFT: 0px"><strong><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</strong>;</div> +<div style="MARGIN-LEFT: 0px"><strong><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</strong>;</div> </li> <li> -<div style="MARGIN-LEFT: 0px"><strong><img src="CommonPicture.ОтправитьПолучитьПочту" width="16" height="16"></img> Отправить и получить</strong>.</div> +<div style="MARGIN-LEFT: 0px"><strong><img src="CommonPicture.ОтправитьПолучитьПочту" width="16" height="16"></img> Отправить и получить</strong>.</div> </li> <li> <div style="MARGIN-LEFT: 0px"><strong>Переслать как вложение</strong>- воспользуйтесь этой командой контекстного меню по правой кнопке мыши, будет сформировано новое письмо, выбранное письмо будет одним из вложений.</div></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591c">Отправка и получение писем</a></h3> -<p></p>Установите вид панели навигации <b>По папкам</b>. +<p></p>Установите вид панели навигации <b>По папкам</b>. <ul><li> -<p>В файловом варианте работы приложения нажмите <img src="CommonPicture.ОтправитьПолучитьПочту"></img> <strong>Отправить и</strong> п<strong>олучить почту</strong> (<strong>Ctrl+F9</strong>) и проверьте свой почтовый ящик. </p> -<ul><li>Если за период от последней проверки почтового ящика до текущего момента были получены новые письма, то приложение загрузит их в список, после чего выдаст сообщение о количестве новых писем. +<p>В файловом варианте работы приложения нажмите <img src="CommonPicture.ОтправитьПолучитьПочту"></img><strong>Отправить и</strong> п<strong>олучить почту</strong> (<strong>Ctrl+F9</strong>) и проверьте свой почтовый ящик. </p> +<ul><li>Если за период от последней проверки почтового ящика до текущего момента были получены новые письма, то приложение загрузит их в список, после чего выдаст сообщение о количестве новых писем. </li> -<li>По этой команде отправляются только письма текущего пользователя, и получается только почта с доступных ему адресов.</li></ul></li></ul><ul><li>В клиент-серверном варианте отправка и получение писем (всех пользователей, всех адресов электронной почты) выполняются с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентноеЗадание/Help">регламентного задания</a> с определенным администратором приложения интервалом.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591e"> </a></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591e">Ответ на письмо или пересылка письма из списка взаимодействий</a></h3> +<li>По этой команде отправляются только письма текущего пользователя, и получается только почта с доступных ему адресов.</li></ul></li></ul><ul><li>В клиент-серверном варианте отправка и получение писем (всех пользователей, всех адресов электронной почты) выполняются с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентноеЗадание/Help">регламентного задания</a> с определенным администратором приложения интервалом.<a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591e"> </a></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba869591e">Ответ на письмо или пересылка письма из списка взаимодействий</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Установите вид панели навигации <b>По папкам</b>.</div> +<div style="MARGIN-LEFT: 0px">Установите вид панели навигации <b>По папкам</b>.</div> </li> <li>Выберите нужную папку, в этом случае в командной панели списка взаимодействий появляются соответствующие команды. </li> @@ -261,10 +261,10 @@ <li>Нажмите соответствующую кнопку: <ul><li><strong>Ответить</strong> - в созданном исходящем письме в качестве получателя будет указан отправитель письма. Исходящее письмо при этом входит в цепочку взаимодействий. </li> -<li><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем" width="16" height="16"></img> <strong>Ответить всем</strong> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). +<li><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем" width="16" height="16"></img><strong>Ответить всем</strong> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). </li> -<li><img src="CommonPicture.ПереслатьЭлектронноеПисьмо" width="16" height="16"></img> <strong>Переслать</strong> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма. +<li><img src="CommonPicture.ПереслатьЭлектронноеПисьмо" width="16" height="16"></img><strong>Переслать</strong> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма. </li> -<li><strong>Переслать как вложение</strong> - по команде контекстного меню по правой кнопке мыши будет сформировано исходящее письмо, включающее в себя как вложение выбранные входящие или отправленные письма.</li></ul></li></ul><h3><a name="8">Персональные настройки</a></h3> +<li><strong>Переслать как вложение</strong> - по команде контекстного меню по правой кнопке мыши будет сформировано исходящее письмо, включающее в себя как вложение выбранные входящие или отправленные письма.</li></ul></li></ul><h3><a name="8">Персональные настройки</a></h3> <ul><li>С помощью команды <strong>Еще</strong> <strong>- Персональные настройки</strong> можно перейти к настройке персональной электронной почты.</li></ul><h3>См. также</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></div></body></html> \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 89154e0d8..f55dc6d92 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -20,13 +20,14 @@ УстановитьУсловноеОформление(); - Если Параметры.Свойство("РежимВыбора") И Параметры.РежимВыбора = Истина Тогда + Если Параметры.РежимВыбора Тогда РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Элементы.Список.РежимВыбора = Истина; КонецЕсли; - ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + ИндексПолнотекстовогоПоискаАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); + РазделениеВключено = ОбщегоНазначения.РазделениеВключено(); ГиперссылкаЦвет = ЦветаСтиля.ГиперссылкаЦвет; @@ -34,7 +35,8 @@ ОпределитьДоступностьПолнотекстовыйПоиск(); ПравоПометкиУдаленияПапок = ПравоДоступа("Изменение", Метаданные.Справочники.ПапкиЭлектронныхПисем); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Закладки, "Владелец", Пользователи.ТекущийПользователь(),,, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Закладки, "Владелец", + Пользователи.ТекущийПользователь(),,, Истина); ДополнитьМенюПанелиНавигации(); Взаимодействия.ЗаполнитьПодменюСтатус(Элементы.СписокСтатус, ЭтотОбъект); @@ -52,10 +54,9 @@ ТипВзаимодействия = ?(ТолькоПочта, "ВсеПисьма","Все"); Статус = "Все"; - ИмяТекущейПанелиНавигации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяТекущейПанелиНавигации"); - ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока"); - Если ЗначениеЗаполнено(ТекущаяСсылка) Тогда - ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка); + ИмяТекущейПанелиНавигации = Параметры.ИмяТекущейПанелиНавигации; + Если ЗначениеЗаполнено(Параметры.ТекущаяСтрока) Тогда + ПодготовитьНастройкиФормыКВыводуТекущейСсылки(Параметры.ТекущаяСтрока); КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды @@ -89,7 +90,7 @@ &НаСервере Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) - Если Параметры.Свойство("ИмяТекущейПанелиНавигации") Тогда + Если Не ПустаяСтрока(Параметры.ИмяТекущейПанелиНавигации) Тогда Настройки.Удалить("ИмяТекущейПанелиНавигации"); КонецЕсли; КонецПроцедуры @@ -100,8 +101,8 @@ Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Или Элементы.Найти(ИмяТекущейПанелиНавигации) = Неопределено Тогда ИмяТекущейПанелиНавигации = "СтраницаПредмет"; ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаСвойства" Тогда - Если ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый - Структура("ДопРеквизитСведение",ТекущееСвойствоПанелиНавигации)).Количество() = 0 Тогда + Если ТаблицаДопРеквизитовСвойств.НайтиСтроки( + Новый Структура("ДопРеквизитСведение", ТекущееСвойствоПанелиНавигации)).Количество() = 0 Тогда ИмяТекущейПанелиНавигации = "СтраницаПредмет"; КонецЕсли; КонецЕсли; @@ -168,30 +169,22 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ПустаяСтрока(ИмяТекущейПанелиНавигации) - Или ПустаяСтрока(Статус) - Или ПустаяСтрока(ТипВзаимодействия) Тогда - + Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Или ПустаяСтрока(Статус) Или ПустаяСтрока(ТипВзаимодействия) Тогда УстановитьНачальныеЗначенияПриОткрытии(); - КонецЕсли; ВосстановитьРаскрытыеУзлыДерева(); Если РазделениеВключено Тогда - ОтправитьПолучитьПочтуПользователяКлиент(); - Иначе - ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", 60, Истина); - КонецЕсли; #Если МобильныйКлиент Тогда - Элементы.СписокСтатус.Вид = ВидГруппыФормы.ГруппаКнопок; - Элементы.СписокТипВзаимодействия.Вид = ВидГруппыФормы.ГруппаКнопок; + Элементы.СписокСтатус.Вид = ВидГруппыФормы.ГруппаКнопок; + Элементы.СписокТипВзаимодействия.Вид = ВидГруппыФормы.ГруппаКнопок; #КонецЕсли @@ -583,16 +576,20 @@ Если СтрокаПоиска <> "" Тогда - ВыполнитьПолнотекстовыйПоиск(); + ПроверитьИндексПолнотекстовогоПоиска(); + + Иначе - Иначе РасширенныйПоиск = Ложь; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Поиск", Неопределено, ВидСравненияКомпоновкиДанных.Равно,,Ложь); + Элементы.ОписаниеНайденоПолнотекстовымПоиском.Видимость = РасширенныйПоиск; + Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Ложь; + КонецЕсли; КонецПроцедуры @@ -694,8 +691,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////// -// Обработка перетаскивания +#Область ОбработкаПеретаскивания &НаКлиенте Процедура ПредметыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -873,6 +869,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -1055,44 +1053,29 @@ Процедура ВзаимодействияПоПредмету(Команда) ИмяТекущегоЭлемента = Элементы.Список.Имя; - Если Не ВыборКорректен(ИмяТекущегоЭлемента,Истина) Тогда + Если Не ВыборКорректен(ИмяТекущегоЭлемента, Истина) Тогда Возврат; КонецЕсли; Предмет = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные.Предмет; + СтруктураОтбора = Новый Структура; + СтруктураОтбора.Вставить("Предмет", Предмет); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); + ПараметрыФормы.Вставить("ТипВзаимодействия", ""); + Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Предмет) Тогда - - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Предмет", Предмет); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Предмет"); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); - ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); - + ПараметрыФормы.ТипВзаимодействия = "Предмет"; ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Предмет) Тогда - - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Предмет", Предмет); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ТипВзаимодействия", "Взаимодействие"); - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Отбор", СтруктураОтбора); - ПараметрыФормы.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); - + ПараметрыФормы.ТипВзаимодействия = "Взаимодействие"; Иначе Возврат; КонецЕсли; - ОткрытьФорму( - "ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", - ПараметрыФормы, - ЭтотОбъект); + ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая", + ПараметрыФормы, ЭтотОбъект); КонецПроцедуры @@ -1576,8 +1559,7 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////// -// Обработка изменения быстрых отборов. +#Область ОбработкаИзмененияБыстрыхОтборов &НаСервере Процедура ИзменитьОтборТипВзаимодействияСервер(Знач ИмяКоманды) @@ -1662,8 +1644,9 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////// -// Обработка активизации строк списков и панели навигации. +#КонецОбласти + +#Область ОбработкаАктивизацииСтрокСписковИПанелиНавигации &НаКлиенте Процедура ОбработатьАктивизациюСтрокиСписка() @@ -1761,6 +1744,7 @@ ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов", Неопределено, Неопределено)); КонецЕсли; + ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда ТекущиеДанные = Элементы.Папки.ТекущиеДанные; @@ -2004,8 +1988,9 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////// -// Переключение и заполнение панелей навигации. +#КонецОбласти + +#Область ПереключениеИЗаполнениеПанелейНавигации &НаСервере Процедура ПереключитьПанельНавигацииСервер(ИмяКоманды) @@ -3519,11 +3504,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ЭтоПанельСДинамическимСписком(ИмяТекущейПанелиНавигации) - Если ИмяТекущейПанелиНавигации = "СтраницаПредмет" ИЛИ ИмяТекущейПанелиНавигации = "СтраницаКонтакт" Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; + Возврат ИмяТекущейПанелиНавигации = "СтраницаПредмет" ИЛИ ИмяТекущейПанелиНавигации = "СтраницаКонтакт"; КонецФункции @@ -3838,8 +3819,9 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////////////// -// Полнотекстовый поиск +#КонецОбласти + +#Область ПолнотекстовыйПоиск &НаСервере Процедура ОпределитьДоступностьПолнотекстовыйПоиск() @@ -4346,4 +4328,74 @@ КонецПроцедуры +#КонецОбласти + +#Область ВыполнениеПоиска + +&НаКлиенте +Процедура ПроверитьИндексПолнотекстовогоПоиска() + + Если Не ИндексПолнотекстовогоПоискаАктуален Тогда + + Если ИнформационнаяБазаФайловая Тогда + + ОповещениеПослеОтветаНаВопрос = Новый ОписаниеОповещения("ПроверитьИндексПолнотекстовогоПоискаЗавершение", ЭтотОбъект); + + ПоказатьВопрос(ОповещениеПослеОтветаНаВопрос, + НСтр("ru = 'Индекс полнотекстового поиска неактуален. Обновить индекс?'"), РежимДиалогаВопрос.ДаНет); + + Иначе + + Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Истина; + ВыполнитьПолнотекстовыйПоиск(); + + КонецЕсли; + + Иначе + + Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Ложь; + ВыполнитьПолнотекстовыйПоиск(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьИндексПолнотекстовогоПоискаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + + ПодключитьОбработчикОжидания("ОбновитьИндексПолнотекстовогоПоиска",0.2,Истина); + + Иначе + + Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Истина; + ВыполнитьПолнотекстовыйПоиск(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИндексПолнотекстовогоПоиска() + + Состояние(НСтр("ru = 'Идет обновление индекса полнотекстового поиска...'")); + ОбновитьИндексПолнотекстовогоПоискаСервер(); + ИндексПолнотекстовогоПоискаАктуален = Истина; + Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Ложь; + Состояние(НСтр("ru = 'Обновление индекса полнотекстового поиска завершено...'")); + ВыполнитьПолнотекстовыйПоиск(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИндексПолнотекстовогоПоискаСервер() + + УстановитьПривилегированныйРежим(Истина); + ПолнотекстовыйПоиск.ОбновитьИндекс(); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index 1593c8cbf..55245353b 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -3752,12 +3752,21 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <parameters> - <name>ДополнительныеПараметры</name> + <name>Отбор</name> <valueType/> </parameters> <parameters> - <name>Отбор</name> - <valueType/> + <name>ТипВзаимодействия</name> + <valueType> + <types>String</types> + <stringQualifiers/> + </valueType> + </parameters> + <parameters> + <name>ТолькоПочта</name> + <valueType> + <types>Boolean</types> + </valueType> </parameters> <commandInterface> <navigationPanel/> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html index 677e07cd5..406a40d56 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html @@ -12,24 +12,24 @@ <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30344dd8ba6d4">Как назначить ответственного для нескольких документов?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">В списке выводится:</p> <ul><li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЭлектронноеПисьмо"></img> Тип взаимодействия - показан в виде значка:</div> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЭлектронноеПисьмо"></img> Тип взаимодействия - показан в виде значка:</div> <ul><li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЗапланированноеВзаимодействие"></img> <a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланированное взаимодействие</a>;</div> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЗапланированноеВзаимодействие"></img><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланированное взаимодействие</a>;</div> </li> <li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.Встреча"></img> <a href="Document.Встреча.Form.ФормаДокумента/Help">Встреча</a>;</div> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.Встреча"></img><a href="Document.Встреча.Form.ФормаДокумента/Help">Встреча</a>;</div> </li> <li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ТелефонныйЗвонок"></img> <a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Телефонный звонок</a>;</div> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ТелефонныйЗвонок"></img><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Телефонный звонок</a>;</div> </li> <li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.НаписатьSMS"></img> <a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Сообщение SMS</a>;</div> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.НаписатьSMS"></img><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Сообщение SMS</a>;</div> </li> <li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЭлектронноеПисьмоВходящее"></img> <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Электронное письмо входящее</a>;</div> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЭлектронноеПисьмоВходящее"></img><a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Электронное письмо входящее</a>;</div> </li> <li> -<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЭлектронноеПисьмоИсходящее"></img> <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Электронное письмо исходящее</a>.</div></li></ul></li> +<div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><img src="CommonPicture.ЭлектронноеПисьмоИсходящее"></img><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Электронное письмо исходящее</a>.</div></li></ul></li> <li> <div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><strong>Участники </strong>- контакты, с которыми были взаимодействия;</div> </li> @@ -38,7 +38,7 @@ </li> <li> <div style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><strong>Тема </strong>- краткое содержание взаимодействия.</div></li></ul><p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px">Жирным шрифтом в списке выделяются документы к рассмотрению, письма и сообщения SMS с установленным признаком <strong>На контроле</strong>. После установки флажка <strong>Рассмотрено</strong> выделение снимается. </p> -<h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30341655e784a">Доступные режимы просмотра</a></h3> +<h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30341655e784a">Доступные режимы просмотра</a></h3> <ul><li> <div style="MARGIN-LEFT: 20px">Доступно два режима просмотра:</div> <ul><li> @@ -47,7 +47,7 @@ <li> <div style="MARGIN-LEFT: 20px"><b>Список</b> - взаимодействия отображаются плоским списком.</div></li></ul></li> <li> -<div style="MARGIN-LEFT: 20px">Для изменения режима просмотра нажмите <img src="StdPicture.ListViewModeHierarchicalList"></img> <b>Переключить режим просмотра</b>.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> +<div style="MARGIN-LEFT: 20px">Для изменения режима просмотра нажмите <img src="StdPicture.ListViewModeHierarchicalList"></img><b>Переключить режим просмотра</b>.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> <h3 style="MARGIN-LEFT: 0px">Отборы</h3></a> <ul style="MARGIN-LEFT: 40px"><li> <div style="MARGIN-LEFT: 20px">С помощью поля <strong>Статус</strong> можно отобрать взаимодействия с определенным статусом рассмотрения: </div> @@ -55,7 +55,7 @@ <div style="MARGIN-LEFT: 20px">По умолчанию выводятся <strong>Все</strong> документы взаимодействий;</div> </li> <li> -<div style="MARGIN-LEFT: 20px">Если в поле установлено значение <strong>К рассмотрению</strong>, то будут отображены взаимодействия, которые необходимо отработать до текущей даты и с неустановленным флажком <strong>Рассмотрено</strong>. </div> +<div style="MARGIN-LEFT: 20px">Если в поле установлено значение <strong>К рассмотрению</strong>, то будут отображены взаимодействия, которые необходимо отработать до текущей даты и с неустановленным флажком <strong>Рассмотрено</strong>. </div> </li> <li> <div style="MARGIN-LEFT: 20px">Если в поле установлено значение <strong>Отложенные</strong>, то в списке показываются взаимодействия с заполненным полем <strong>Рассмотреть после</strong> и не установленным флажком <strong>Рассмотрено</strong>. </div> @@ -63,56 +63,56 @@ <li> <div style="MARGIN-LEFT: 20px">Если в поле установлено значение <strong>Рассмотренные</strong>, то в списке показываются взаимодействия с установленным флажком <strong>Рассмотрено</strong>.</div></li></ul></li> <li> -<div style="MARGIN-LEFT: 20px">С помощью поля <strong>Ответственный</strong> можно установить отбор по ответственному за отработку взаимодействий, который выбирается из списка пользователей. </div> +<div style="MARGIN-LEFT: 20px">С помощью поля <strong>Ответственный</strong> можно установить отбор по ответственному за отработку взаимодействий, который выбирается из списка пользователей. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">С помощью команды <strong>Еще</strong> <strong>- Тип взаимодействий</strong> можно установить отбор по определенному типу взаимодействий, например, по входящим письмам или телефонным звонкам. </div> +<div style="MARGIN-LEFT: 20px">С помощью команды <strong>Еще</strong> <strong>- Тип взаимодействий</strong> можно установить отбор по определенному типу взаимодействий, например, по входящим письмам или телефонным звонкам. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">С помощью команды меню <strong>Еще</strong> - <strong>Установить период</strong> можно выбрать период просмотра документов взаимодействий.</div></li></ul><h3>Ввод документа взаимодействий</h3> +<div style="MARGIN-LEFT: 20px">С помощью команды меню <strong>Еще</strong> - <strong>Установить период</strong> можно выбрать период просмотра документов взаимодействий.</div></li></ul><h3>Ввод документа взаимодействий</h3> <ul><li> <div style="MARGIN-LEFT: 20px">Нажмите <strong>Создать</strong>, выберите нужный документ, заполните необходимые поля. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">Если список выведен по предмету, то в поле <strong>Предмет</strong> нового документа взаимодействий приложение автоматически проставляет тот же предмет.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30342df9e34d1"> +<div style="MARGIN-LEFT: 20px">Если список выведен по предмету, то в поле <strong>Предмет</strong> нового документа взаимодействий приложение автоматически проставляет тот же предмет.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30342df9e34d1"> <h3 style="MARGIN-LEFT: 0px">Установка признака Рассмотрено для нескольких документов</h3></a> <ul><li> -<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо установить признак <strong>Рассмотрено </strong>(для исходящих писем и сообщений SMS - снять признак <strong>На контроле)</strong>. </div> +<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо установить признак <strong>Рассмотрено </strong>(для исходящих писем и сообщений SMS - снять признак <strong>На контроле)</strong>. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.УстановитьПризнакРассмотреноДляВзаимодействия"></img> <strong>Установить признак Рассмотрено</strong>. </div> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.УстановитьПризнакРассмотреноДляВзаимодействия"></img><strong>Установить признак Рассмотрено</strong>. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">С рассмотренных документов взаимодействий выделение в списке снимается.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30342df9e34d3"> +<div style="MARGIN-LEFT: 20px">С рассмотренных документов взаимодействий выделение в списке снимается.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30342df9e34d3"> <h3 style="MARGIN-LEFT: 0px">Снятие признака Рассмотрено для нескольких документов</h3></a> <ul><li> -<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо снять признак <strong>Рассмотрено</strong> (для исходящих писем и сообщений SMS - установить признак <strong>На контроле</strong>). </div> +<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо снять признак <strong>Рассмотрено</strong> (для исходящих писем и сообщений SMS - установить признак <strong>На контроле</strong>). </div> </li> <li> <div style="MARGIN-LEFT: 20px">Воспользуйтесь командой<strong></strong><strong>Еще</strong><strong> -</strong> <strong>Снять признак рассмотрено</strong>. </div> </li> <li> <div style="MARGIN-LEFT: 20px">Нерассмотренные документы взаимодействий в списке выделяются жирным шрифтом.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30343a62cf9fb"> -<h3 style="MARGIN-LEFT: 0px">Команда Отложить рассмотрение</h3></a> +<h3 style="MARGIN-LEFT: 0px">Команда Отложить рассмотрение</h3></a> <ul><li> <div style="MARGIN-LEFT: 20px">Выделите документы, рассмотрение которых необходимо отложить. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.ОтложитьРассмотрениеВзаимодействия"></img> , укажитедату и время, до которого необходимо <strong>Отложить рассмотрение</strong>. </div></li></ul><h3 style="MARGIN-LEFT: 0px">Назначение ответственного для нескольких документов</h3> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.ОтложитьРассмотрениеВзаимодействия"></img> , укажитедату и время, до которого необходимо <strong>Отложить рассмотрение</strong>. </div></li></ul><h3 style="MARGIN-LEFT: 0px">Назначение ответственного для нескольких документов</h3> <ul><li> -<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо установить ответственного. </div> +<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо установить ответственного. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.УстановитьОтветственногоЗаВзаимодействие"></img> <b>Установить ответственного</b>.</div> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.УстановитьОтветственногоЗаВзаимодействие"></img><b>Установить ответственного</b>.</div> </li> <li> <div style="MARGIN-LEFT: 20px">Выберите ответственного из списка пользователей.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30343a62cf9fd"> <h3 style="MARGIN-LEFT: 0px">Установка предмета взаимодействий для нескольких документов</h3></a> <ul><li> -<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо установить новый предмет. </div> +<div style="MARGIN-LEFT: 20px">Выделите документы, у которых необходимо установить новый предмет. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.УстановитьПредметВзаимодействия"></img> <b>Установить предмет взаимодействия</b>.</div> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="CommonPicture.УстановитьПредметВзаимодействия"></img><b>Установить предмет взаимодействия</b>.</div> </li> <li> <div style="MARGIN-LEFT: 20px">Выберите из списка тип документа.</div> diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index 2e5c8aca2..6e31c28dd 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -29,34 +29,29 @@ Элементы.Участники.Заголовок = ЗаголовокУчастникиПочта; КонецЕсли; - - Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда ШаблонЗаголовка = НСтр("ru = 'Взаимодействия по %1'"); - Если Параметры.Отбор.Свойство("Предмет") Тогда - Если ТипЗнч(Параметры.ДополнительныеПараметры) = Тип("Структура") - И Параметры.ДополнительныеПараметры.Свойство("ТипВзаимодействия") Тогда - - Если Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Взаимодействие" Тогда - ПредметДляОтбора = Взаимодействия.ПолучитьЗначениеПредмета(Параметры.Отбор.Предмет); - Параметры.Отбор.Предмет = ПредметДляОтбора ; - ИначеЕсли Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Предмет" Тогда - ПредметДляОтбора = Параметры.Отбор.Предмет; - КонецЕсли; + Если Параметры.ТипВзаимодействия = "Взаимодействие" Тогда + ПредметДляОтбора = Взаимодействия.ПолучитьЗначениеПредмета(Параметры.Отбор.Предмет); + Параметры.Отбор.Предмет = ПредметДляОтбора ; + ИначеЕсли Параметры.ТипВзаимодействия = "Предмет" Тогда + ПредметДляОтбора = Параметры.Отбор.Предмет; КонецЕсли; Параметры.Отбор.Удалить("Предмет"); УстановитьОтборПоПредмету(); - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ОбщегоНазначения.ПредметСтрокой(ПредметДляОтбора)); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + ОбщегоНазначения.ПредметСтрокой(ПредметДляОтбора)); ИначеЕсли Параметры.Отбор.Свойство("Контакт") Тогда Контакт = Параметры.Отбор.Контакт; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ОбщегоНазначения.ПредметСтрокой(Контакт)); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, + ОбщегоНазначения.ПредметСтрокой(Контакт)); Параметры.Отбор.Удалить("Контакт"); УстановитьОтборПоКонтакту(); @@ -67,7 +62,7 @@ Взаимодействия.ЗаполнитьПодменюПоТипуВзаимодействия(Элементы.ДеревоТипВзаимодействия, ЭтотОбъект); Взаимодействия.ЗаполнитьПодменюПоТипуВзаимодействия(Элементы.СписокТипВзаимодействия, ЭтотОбъект); - ТипВзаимодействия = ?(ТолькоПочта,"ВсеПисьма","Все"); + ТипВзаимодействия = ?(ТолькоПочта, "ВсеПисьма", "Все"); Статус = "Все"; КонецПроцедуры @@ -136,9 +131,7 @@ КонецЕсли; Для Каждого ИзмененныйДокумент Из МассивИзмененныхДокументов Цикл - Оповестить("ЗаписьВзаимодействия", ИзмененныйДокумент); - КонецЦикла; КонецЕсли; @@ -193,13 +186,9 @@ Процедура ОтветственныйПриИзменении(Элемент) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, Элемент.Имя,, ОтборПоПредмету); - Иначе - ЗаполнитьДеревоВзаимодействийКлиент(); - КонецЕсли; КонецПроцедуры @@ -208,14 +197,10 @@ Процедура СтатусПриИзменении(Элемент) Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - ДатаДляОтбора = ОбщегоНазначенияКлиент.ДатаСеанса(); ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя, ДатаДляОтбора, ОтборПоПредмету); - Иначе - ЗаполнитьДеревоВзаимодействийКлиент(); - КонецЕсли; КонецПроцедуры @@ -223,7 +208,7 @@ &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - ЗначенияЗаполнения = Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт); + ЗначенияЗаполнения = Новый Структура("Предмет,Контакт", ПредметДляОтбора, Контакт); ВзаимодействияКлиент.СписокПередНачаломДобавления( Элемент,Отказ,Копирование,ТолькоПочта,ДокументыДоступныеДляСоздания, @@ -246,28 +231,28 @@ Процедура ДеревоВзаимодействийПередУдалением(Элемент, Отказ) Отказ = Истина; - Если Элементы.ДеревоВзаимодействий.ВыделенныеСтроки.Количество() > 0 Тогда - - ЕстьПомеченныеНаУдаление = Ложь; - Для каждого ВыделеннаяСтрока Из Элементы.ДеревоВзаимодействий.ВыделенныеСтроки Цикл - Если Элементы.ДеревоВзаимодействий.ДанныеСтроки(ВыделеннаяСтрока).ПометкаУдаления Тогда - ЕстьПомеченныеНаУдаление = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ЕстьПомеченныеНаУдаление Тогда - ТекстВопроса = НСтр("ru = 'Снять с выделенных элементов пометку на удаление?'"); - Иначе - ТекстВопроса = НСтр("ru = 'Пометить выделенные строки на удаление?'"); - КонецЕсли; - - ДополнительныеПараметры = Новый Структура("ЕстьПомеченныеНаУдаление", ЕстьПомеченныеНаУдаление); - ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОПометкеНаУдалениеПослеЗавершения", ЭтотОбъект, ДополнительныеПараметры); - ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, - ТекстВопроса,РежимДиалогаВопрос.ДаНет); - + Если Элементы.ДеревоВзаимодействий.ВыделенныеСтроки.Количество() = 0 Тогда + Возврат; КонецЕсли; + + ЕстьПомеченныеНаУдаление = Ложь; + Для каждого ВыделеннаяСтрока Из Элементы.ДеревоВзаимодействий.ВыделенныеСтроки Цикл + Если Элементы.ДеревоВзаимодействий.ДанныеСтроки(ВыделеннаяСтрока).ПометкаУдаления Тогда + ЕстьПомеченныеНаУдаление = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЕстьПомеченныеНаУдаление Тогда + ТекстВопроса = НСтр("ru = 'Снять с выделенных элементов пометку на удаление?'"); + Иначе + ТекстВопроса = НСтр("ru = 'Пометить выделенные строки на удаление?'"); + КонецЕсли; + + ДополнительныеПараметры = Новый Структура("ЕстьПомеченныеНаУдаление", ЕстьПомеченныеНаУдаление); + ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОПометкеНаУдалениеПослеЗавершения", + ЭтотОбъект, ДополнительныеПараметры); + ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры @@ -286,31 +271,35 @@ Процедура ДеревоВзаимодействийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; - Если Копирование Тогда - ТекущиеДанные = Элемент.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") - ИЛИ ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда - - ПоказатьПредупреждение(, НСтр("ru = 'Копирование электронных писем запрещено'")); - - ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда - - ОткрытьФорму("Документ.Встреча.ФормаОбъекта", - Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); - - ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда - - ОткрытьФорму("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", - Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); - - ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда - - ОткрытьФорму("Документ.ТелефонныйЗвонок.ФормаОбъекта", - Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтотОбъект); - - КонецЕсли; - КонецЕсли; + Если Не Копирование Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") + ИЛИ ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда + + ПоказатьПредупреждение(, НСтр("ru = 'Копирование электронных писем запрещено.'")); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда + + ОткрытьФорму("Документ.Встреча.ФормаОбъекта", + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда + + ОткрытьФорму("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта", + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда + + ОткрытьФорму("Документ.ТелефонныйЗвонок.ФормаОбъекта", + Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект); + КонецЕсли; КонецПроцедуры @@ -337,10 +326,8 @@ #Область ОбработчикиКомандФормы -// Изменяет отбор по типу взаимодействия в списке. -// // Параметры: -// Команда - КомандаФормы - выполняемая команда. +// Команда - КомандаФормы // &НаКлиенте Процедура Подключаемый_ИзменитьОтборТипВзаимодействия(Команда) @@ -471,11 +458,9 @@ Процедура СоздатьНовоеВзаимодействие(ТипОбъекта) ЗначенияЗаполнения = Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт); - - ВзаимодействияКлиент.СоздатьНовоеВзаимодействие( - ТипОбъекта, - Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения), - ЭтотОбъект); + ВзаимодействияКлиент.СоздатьНовоеВзаимодействие(ТипОбъекта, + Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения), + ЭтотОбъект); КонецПроцедуры @@ -1022,13 +1007,11 @@ КонецПроцедуры -// Получает массив, который передается в качестве параметра запроса при получении взаимодействий по контакту. -// // Параметры: -// Контакт - ЛюбаяСсылка - контакт, для которого необходимо выполнить поиск связанных контактов. +// Контакт - ОпределяемыйТип.КонтактВзаимодействия // // Возвращаемое значение: -// Массив +// Массив из ОпределяемыйТип.КонтактВзаимодействия // &НаСервере Функция ПараметрКонтактВЗависимостиОтТипа(Контакт) @@ -1048,7 +1031,6 @@ |ГДЕ | СправочникКонтакт.Ссылка = &Контакт"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "Справочник." + ЭлементМассиваОписания.Имя); Связь = ЭлементМассиваОписания.Связь; @@ -1065,11 +1047,15 @@ |ИЗ | &ИмяТаблицы КАК СправочникКонтакт |ГДЕ - | СправочникКонтакт." + Прав(Связь,СтрДлина(Связь) - СтрНайти(Связь,".")) + " = &Контакт"; + | СправочникКонтакт.ИмяРеквизитаСравнения = &Контакт"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "Справочник." + Лев(Связь,СтрНайти(Связь,".")-1)); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРеквизитаСравнения", "СправочникКонтакт." + Прав(Связь,СтрДлина(Связь) - СтрНайти(Связь,"."))); + ИмяРеквизитаСравнения = Прав(Связь, СтрДлина(Связь) - СтрНайти(Связь, ".")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяРеквизитаСравнения", + ИмяРеквизитаСравнения); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", + "Справочник." + Лев(Связь, СтрНайти(Связь, ".") - 1)); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРеквизитаСравнения", + "СправочникКонтакт." + ИмяРеквизитаСравнения); ЕстьДополнительныеТаблицы = Истина; КонецЕсли; @@ -1090,25 +1076,24 @@ | СправочникКонтакт.Владелец = &Контакт"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "Справочник." + ЭлементМассиваОписания.Имя); - ЕстьДополнительныеТаблицы = Истина; КонецЕсли; КонецЦикла; - Если ПустаяСтрока(ТекстЗапроса) ИЛИ (НЕ ЕстьДополнительныеТаблицы) Тогда + Если ПустаяСтрока(ТекстЗапроса) ИЛИ Не ЕстьДополнительныеТаблицы Тогда Возврат Новый Массив; - Иначе - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Контакт",Контакт); - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - Возврат Новый Массив; - Иначе - Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт"); - КонецЕсли; КонецЕсли; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Контакт",Контакт); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Новый Массив; + КонецЕсли; + + Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт"); КонецФункции @@ -1136,7 +1121,7 @@ СписокОтбора.ЗагрузитьЗначения( Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, - "Ссылка",СписокОтбора,ВидСравненияКомпоновкиДанных.ВСписке,,Истина); + "Ссылка", СписокОтбора,ВидСравненияКомпоновкиДанных.ВСписке,, Истина); КонецПроцедуры @@ -1153,7 +1138,8 @@ Процедура ВопросОПометкеНаУдалениеПослеЗавершения(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - ОбработатьИзменениеПометкиУдаленияВДереве(Элементы.ДеревоВзаимодействий.ВыделенныеСтроки, ДополнительныеПараметры.ЕстьПомеченныеНаУдаление); + ОбработатьИзменениеПометкиУдаленияВДереве(Элементы.ДеревоВзаимодействий.ВыделенныеСтроки, + ДополнительныеПараметры.ЕстьПомеченныеНаУдаление); КонецЕсли; КонецПроцедуры @@ -1161,25 +1147,21 @@ &НаКлиенте Процедура ВводДатыОтложитьРассмотрениеПослеЗавершения(ВведеннаяДата, ДополнительныеПараметры) Экспорт - Если ВведеннаяДата <> Неопределено Тогда + Если ВведеннаяДата = Неопределено Тогда + Возврат; + КонецЕсли; - ВыполненаЗамена = Ложь; - ОтложитьРассмотрение(ВведеннаяДата,ВыполненаЗамена); - - Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда - - Если ВыполненаЗамена Тогда - Элементы.Список.Обновить(); - КонецЕсли; - - Иначе - - Если ВыполненаЗамена Тогда - РазвернутьВсеСтрокиДерева(); - КонецЕсли; - + ВыполненаЗамена = Ложь; + ОтложитьРассмотрение(ВведеннаяДата,ВыполненаЗамена); + + Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда + Если ВыполненаЗамена Тогда + Элементы.Список.Обновить(); + КонецЕсли; + Иначе + Если ВыполненаЗамена Тогда + РазвернутьВсеСтрокиДерева(); КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -1198,7 +1180,6 @@ Процедура ПриИзмененииТипаСервер() Взаимодействия.ОбработатьПодменюОтборПоТипуВзаимодействий(ЭтотОбъект); - ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия); КонецПроцедуры diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form index a91c2add9..24c07e4aa 100644 --- a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Form.form @@ -698,6 +698,10 @@ <common>true</common> </edit> </attributes> + <parameters> + <name>ИстекшиеСогласия</name> + <valueType/> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl index fb9076c05..1c22e4915 100644 --- a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Forms/ФормаСписка/Module.bsl @@ -13,8 +13,9 @@ УстановитьУсловноеОформление(); - Если Параметры.Свойство("ИстекшиеСогласия") Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка", Параметры.ИстекшиеСогласия, ВидСравненияКомпоновкиДанных.ВСписке); + Если ЗначениеЗаполнено(Параметры.ИстекшиеСогласия) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка", + Параметры.ИстекшиеСогласия, ВидСравненияКомпоновкиДанных.ВСписке); КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html index 89fc3dcc6..c37854e3e 100644 --- a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -5,17 +5,17 @@ </li> <li>В приложении предусмотрена регистрация согласий субъектов во избежание повторного истребования согласия, когда это не требуется, и с целью повторного истребования, когда срок действия согласия уже истек. </li> -<li>Субъект персональных данных в любой момент может отозвать свое согласие на обработку персональных данных. Для документирования этого события в приложении имеется документ <strong>Отзыв согласия на обработку ПДн</strong>. +<li>Субъект персональных данных в любой момент может отозвать свое согласие на обработку персональных данных. Для документирования этого события в приложении имеется документ <strong>Отзыв согласия на обработку ПДн</strong>. </li> <li>С помощью кнопки <strong>Создать</strong> можно ввести: <ul><li><a href="Document.СогласиеНаОбработкуПерсональныхДанных/Help">Согласие на обработку ПДн</a>; </li> <li><a href="Document.ОтзывСогласияНаОбработкуПерсональныхДанных/Help">Отзыв согласия на обработку ПДн</a>.</li></ul></li></ul><h3>Печать</h3> <p>С помощью кнопки <strong>Печать</strong> можно распечатать выделенные согласия. Печать возможна:</p> -<ul><li>в виде табличных документов формата MXL (для печати в этом формате не требуется специальных приложений); +<ul><li>в виде табличных документов формата MXL (для печати в этом формате не требуется специальных приложений); </li> -<li>в виде офисных документов в форматах Microsoft Word OpenOffice.org, для этого требуются соответствующие приложения, установленные на компьютере.</li></ul><h3>Проведение документов</h3> -<p>С помощью команд меню <strong>Еще</strong> можно:</p> +<li>в виде офисных документов в форматах Microsoft Word OpenOffice.org, для этого требуются соответствующие приложения, установленные на компьютере.</li></ul><h3>Проведение документов</h3> +<p>С помощью команд меню <strong>Еще</strong> можно:</p> <ul><li><strong>Провести</strong> согласие или отзыв согласия; </li> <li>Отменить проведение с помощью команды <strong>Отмена проведения</strong>.</li></ul><h3>См. также:</h3> diff --git a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Form.form index 9f4ae39d4..470d639d6 100644 --- a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -1713,6 +1713,7 @@ </handlers> <excludedCommands>Post</excludedCommands> <excludedCommands>PostAndClose</excludedCommands> + <excludedCommands>UndoPosting</excludedCommands> <excludedCommands>Write</excludedCommands> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> diff --git a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index bb35e9f91..ceef319b5 100644 --- a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -41,10 +41,10 @@ КонецЕсли; КонецЕсли; + УстановитьСвойстваЭлементов(); + КонецЕсли; - УстановитьСвойстваЭлементов(); - КонецПроцедуры &НаСервере @@ -76,6 +76,7 @@ // Конец СтандартныеПодсистемы.Свойства ЗаполнитьДеревоКатегорийДанных(); + УстановитьСвойстваЭлементов(); КонецПроцедуры @@ -295,13 +296,20 @@ Элементы.СпособУничтожения.СписокВыбора.ЗагрузитьЗначения( ОбщегоНазначения.ВыгрузитьКолонку(Документы.АктОбУничтоженииПерсональныхДанных.СпособыУничтожения(), "Значение")); - ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ТипСубъекта", "ТолькоПросмотр", Объект.Проведен); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ТипСубъекта", "ТолькоПросмотр", + Объект.Проведен); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Субъект", "ТолькоПросмотр", Объект.Проведен); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФИОСубъекта", "ТолькоПросмотр", Объект.Проведен); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Провести", "Видимость", Не Объект.Проведен); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ФормаПровести", "Видимость", + Не Объект.Проведен); + Команды.ПровестиИЗакрыть.Заголовок = ?(Объект.Проведен, НСтр("ru = 'Записать и закрыть'"), + НСтр("ru = 'Провести и закрыть'")); + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КатегорииДанныхЗаполнитьКатегорииДанных", "Доступность", Не Объект.Проведен); - + УстановитьСвойстваТипаСубъекта(); УстановитьСвойстваСубъекта(); @@ -538,7 +546,11 @@ Возврат; КонецЕсли; - Если Не ПроверитьЗаполнение() Тогда + Если Объект.Проведен Тогда + Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Запись)); + Если ЗакрыватьПослеЗаписи Тогда + Закрыть(); + КонецЕсли; Возврат; КонецЕсли; diff --git a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Help/ru.html b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Help/ru.html index d9b966584..c099a1af9 100644 --- a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Help/ru.html +++ b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/Help/ru.html @@ -3,25 +3,25 @@ <div><b>Акт об уничтожении персональных данных</b> представляет собой документ, который фиксирует факт безвозвратного удаления персональных данных.</div> <div><br></div> <div> -<p>Для того чтобы создать <b>Акт об уничтожении персональных данных</b>,<b> </b>выберите из списка<b> Уничтожение персональных данных </b>один или несколько субъектов и нажмите на кнопку<b> Создать акты</b>. В форме создания акта, с помощью выпадающего списка укажите:</p> +<p>Для того чтобы создать <b>Акт об уничтожении персональных данных</b>,<b> </b>выберите из списка<b> Уничтожение персональных данных </b>один или несколько субъектов и нажмите на кнопку<b> Создать акты</b>. В форме создания акта, с помощью выпадающего списка укажите:</p> <ul><li>наименование <b>Организации</b> или <b>ФИО</b> предпринимателя;</li> -<li>причину уничтожения персональных данных, например <b>По заявлению физического лица</b>; <a name="СтандартныеПодсистемы.Пользователи"></a></li> -<li>способ уничтожения персональных данных, например <b>Уничтожение носителя информации.</b></li></ul><h3> +<li>причину уничтожения персональных данных, например <b>По заявлению физического лица</b>; <a name="СтандартныеПодсистемы.Пользователи"></a></li> +<li>способ уничтожения персональных данных, например <b>Уничтожение носителя информации.</b></li></ul><h3> </h3> <p style="font-size: 11.199999809265137px; font-weight: normal;">Данная операция является необратимой, персональные данные не смогут быть восстановлены!</p> -<h3 style="font-size: 13.4399995803833px;">Оператор персональных данных</h3> -<ul><li><b>Организация</b> или <b>ФИО</b> предпринимателя;</li> -<li><b>Наименование для печати</b> - используется для размещения полного официального наименования организации для вывода в печатные формы документов; </li> +<h3>Оператор персональных данных</h3> +<ul><li><b>Организация</b> или <b>ФИО</b> предпринимателя;</li> +<li><b>Наименование для печати</b> - используется для размещения полного официального наименования организации для вывода в печатные формы документов; </li> <li><b>Адрес</b> - юридический адрес организации, используемый в официальных документах;</li> <li><b>Ответственный за обработку ПДн</b> - ответственный за обработку персональных данных в организации;</li> -<li><b>ФИО ответственного для печати </b>- фамилия, имя и отчество ответственного за обработку ПДн.</li></ul><h3 style="font-size: 13.4399995803833px;">Субъект персональных данных </h3> -<h3 style="font-size: 13.4399995803833px;"> -<ul style="font-size: 11.199999809265137px;"><li>Субъект<span style="font-weight: normal;"> - субъект, предоставляющий согласие на обработку персональных данных; </span></li> -<li><b>ФИО </b><span style="font-weight: normal;">- ф</span><span style="font-weight: normal;">амилия, имя и отчество субъекта персональных данных;</span></li> -<li>Дата уничтожения<span style="font-weight: normal;"> - дата уничтожения персональных данных;</span></li> -<li>Причина уничтожения<span style="font-weight: normal;"> - причина уничтожения персональных данных, например </span>Окончание срока хранения<span style="font-weight: normal;">;</span></li> -<li>Наименование информационной системы <span style="font-weight: normal;">- наименование информационной системы, где были уничтожены персональные данные. </span></li></ul></h3> -<h3 style="font-size: 13.4399995803833px;">Категории персональных данных </h3> +<li><b>ФИО ответственного для печати </b>- фамилия, имя и отчество ответственного за обработку ПДн.</li></ul><h3>Субъект персональных данных </h3> +<h3> +<ul style="font-size: 11.199999809265137px;"><li>Субъект - субъект, предоставляющий согласие на обработку персональных данных; </li> +<li><b>ФИО </b>- фамилия, имя и отчество субъекта персональных данных;</li> +<li>Дата уничтожения - дата уничтожения персональных данных;</li> +<li>Причина уничтожения - причина уничтожения персональных данных, например Окончание срока хранения;</li> +<li>Наименование информационной системы - наименование информационной системы, где были уничтожены персональные данные. </li></ul></h3> +<h3>Категории персональных данных </h3> <ul><li><b>Фамилия, имя, отчество;</b></li> <li><b>Дата и место рождения;</b></li> <li><b>Сведения о постановке на налоговый учет (ИНН);</b></li> @@ -29,13 +29,13 @@ <li><b>Фотография;</b></li> <li><b>Паспортные данные;</b></li> <li><b>Сведения о месте регистрации и месте проживания;</b></li> -<li><b>Контактная информация.</b></li></ul><h3 style="font-size: 13.4399995803833px;">Дополнительно</h3> +<li><b>Контактная информация.</b></li></ul><h3>Дополнительно</h3> <ul><li><b>Заметки</b> - можно дополнительно оставить заметку с произвольной текстовой информацией;</li> <li><b>Комментарии </b>- можно дополнительно оставить комментарий по данному акту;</li> -<li><b>Ответственный</b> - пользователь, который оформил <b>Акт об уничтожении персональных данных</b>.</li></ul><h3 style="font-size: 13.4399995803833px;">Печать</h3> -<ul><li>С помощью кнопки <strong>Печать</strong> можно распечатать <b>Акт об уничтожении персональных данных</b>. Наряду с актом об уничтожении персональных данных необходимо напечатать и <b>Выгрузку из журнала</b>. Печать возможна в виде табличных документов формата MXL (для печати в этом формате не требуется специальных приложений; </li> -<li>В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие приложения, установленные на компьютере.</li></ul><h3 style="font-size: 13.4399995803833px;">Проведение документа</h3> -<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>, для того чтобы уничтожить в приложении персональные данные субъекта. </li></ul><h3 style="font-size: 13.4399995803833px;"><span style="font-size: 11.199999809265137px;">Акт об уничтожении персональных данных</span><span style="font-size: 11.199999809265137px; font-weight: normal;"> и </span><span style="font-size: 11.199999809265137px;">Выгрузка из журнала</span><span style="font-size: 11.199999809265137px; font-weight: normal;"> подлежат хранению в течение 3 лет с момента уничтожения персональных данных. </span></h3> -<h3 style="font-size: 13.4399995803833px;">См. также:</h3> +<li><b>Ответственный</b> - пользователь, который оформил <b>Акт об уничтожении персональных данных</b>.</li></ul><h3>Печать</h3> +<ul><li>С помощью кнопки <strong>Печать</strong> можно распечатать <b>Акт об уничтожении персональных данных</b>. Наряду с актом об уничтожении персональных данных необходимо напечатать и <b>Выгрузку из журнала</b>. Печать возможна в виде табличных документов формата MXL (для печати в этом формате не требуется специальных приложений; </li> +<li>В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие приложения, установленные на компьютере.</li></ul><h3>Проведение документа</h3> +<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>, для того чтобы уничтожить в приложении персональные данные субъекта. </li></ul><h3>Акт об уничтожении персональных данных и Выгрузка из журнала подлежат хранению в течение 3 лет с момента уничтожения персональных данных. </h3> +<h3>См. также:</h3> <ul><li><a href="DataProcessor.УничтожениеПерсональныхДанных/Help">Уничтожение персональных данных</a>;</li> <li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></div></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/ManagerModule.bsl index c0a7cb3c7..c8823c47c 100644 --- a/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/АктОбУничтоженииПерсональныхДанных/ManagerModule.bsl @@ -197,7 +197,7 @@ КонецФункции -// Возвращает массив категорий документа. +// Возвращает категории документа. // // Параметры: // Документы - Массив из ДокументСсылка.АктОбУничтоженииПерсональныхДанных @@ -212,25 +212,22 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | АктОбУничтоженииПерсональныхДанныхКатегорииДанных.Ссылка КАК Документ, - | АктОбУничтоженииПерсональныхДанныхКатегорииДанных.Категория КАК Категория + | КатегорииДанных.Ссылка КАК Ссылка, + | КатегорииДанных.Категория КАК Категория |ИЗ - | Документ.АктОбУничтоженииПерсональныхДанных.КатегорииДанных КАК АктОбУничтоженииПерсональныхДанныхКатегорииДанных + | Документ.АктОбУничтоженииПерсональныхДанных.КатегорииДанных КАК КатегорииДанных |ГДЕ - | АктОбУничтоженииПерсональныхДанныхКатегорииДанных.Ссылка В (&Документы) + | КатегорииДанных.Ссылка В (&Документы) |ИТОГИ |ПО - | Документ"; + | Ссылка"; Запрос.УстановитьПараметр("Документы", Документы); - РезультатЗапроса = Запрос.Выполнить(); - КатегорииДокументов = Новый Соответствие(); - - ВыборкаДокумент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + ВыборкаДокумент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДокумент.Следующий() Цикл - КатегорииДокументов.Вставить(ВыборкаДокумент.Документ); + КатегорииДокументов.Вставить(ВыборкаДокумент.Ссылка); ВыборкаДетальныеЗаписи = ВыборкаДокумент.Выбрать(); КатегорииДокумента = Новый Массив; // Массив из Строка Пока ВыборкаДетальныеЗаписи.Следующий() Цикл @@ -238,7 +235,7 @@ КатегорииДокумента.Добавить(ВыборкаДетальныеЗаписи.Категория); КонецЕсли; КонецЦикла; - КатегорииДокументов[ВыборкаДокумент.Документ] = КатегорииДокумента; + КатегорииДокументов[ВыборкаДокумент.Ссылка] = КатегорииДокумента; КонецЦикла; Возврат КатегорииДокументов; diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html index f5a29498b..e0efb485a 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> <p>Предназначена для ответов на вопросы при проведении анкетирования.</p> -<p>Открывается по двойному щелчку мыши в списке анкет, который становится доступным после входа респондента в приложение.</p> +<p>Открывается по двойному щелчку мыши в списке анкет, который становится доступным после входа респондента в приложение.</p> <h3>Разделы анкеты</h3> <ul><li>На первой странице анкеты отображается текст из вступительного раздела. </li> -<li>Передвигаться по разделам анкеты можно при помощи кнопок <strong>Далее</strong> и <strong>Назад</strong>, расположенных в верхнем правом углу окна (рекомендуется). +<li>Передвигаться по разделам анкеты можно при помощи кнопок <strong>Далее</strong> и <strong>Назад</strong>, расположенных в верхнем правом углу окна (рекомендуется). </li> -<li>Также для перемещения по разделам можно использовать навигационный список (дерево) разделов, видимость которого настраивается с помощью кнопок <strong>Показать разделы/Скрыть разделы</strong>. +<li>Также для перемещения по разделам можно использовать навигационный список (дерево) разделов, видимость которого настраивается с помощью кнопок <strong>Показать разделы/Скрыть разделы</strong>. <ul><li>Дерево разделов рекомендуется открывать для просмотра структуры анкеты, выбора нужного раздела, если это необходимо. Для корректного отображения элементов анкеты рекомендуется скрывать отображение дерева разделов. </li> <li>Двойным щелчком мыши можно выбрать один из разделов анкеты в дереве. После выбора раздела анкеты формируется окно заполнения раздела. </li></ul></li> <li>Анкета заканчивается заключительным разделом.</li></ul><h3>Способы ответов на вопросы</h3> <ul><li>В зависимости от типа вопросов ответ можно написать вручную, выбрать из списка или с помощью переключателя (тумблера). </li> -<li>Даты можно написать вручную или выбрать из календаря с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. +<li>Даты можно написать вручную или выбрать из календаря с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. </li> <li>Ответы на некоторые вопросы необходимо ввести в таблицу. В некоторых таблицах требуется <strong>Добавить</strong> строки с помощью соответствующей кнопки.</li></ul><h3>Сохранение анкеты</h3> <ul><li>Если составитель предусмотрел возможность сохранения анкеты, то будет доступна кнопка <b>Сохранить анкету</b>. С помощью этой кнопки можно сохранить частично заполненную анкету, для того чтобы вернуться к ее заполнению позднее. @@ -21,15 +21,15 @@ <li>Если анкета уже заполнялась ранее, но не была завершена, то в списке доступных анкет указывается дата ее последнего редактирования. </li> <li>Нажмите <strong>Закрыть</strong>, для того чтобы выйти из анкеты без сохранения.</li></ul><h3>Завершение редактирования анкеты</h3> -<ul><li>Для завершения редактирования анкеты нажмите <strong>Завершить и закрыть</strong>. +<ul><li>Для завершения редактирования анкеты нажмите <strong>Завершить и закрыть</strong>. </li> <li>Приложение выводит сообщение, что дальнейшее заполнение анкеты будет невозможно. </li> <li>Для подтверждения нажмите кнопку <strong>Да</strong>, для того чтобы сохранить возможность вернуться к заполнению анкеты еще раз, нажмите <strong>Нет</strong>. После подтверждения анкета пропадает из списка доступных анкет, но ее можно посмотреть по команде <strong>Архив анкет</strong> (зависит от настроек анкеты).</li></ul><h3>Обязательные вопросы</h3> <ul><li>Составитель анкеты может предусмотреть обязательные вопросы. Поля для ответов на такие вопросы выделены красным цветом. </li> -<li>Если вы не дадите ответы на обязательные вопросы, то при попытке завершить редактирование анкеты выполняется автоматическая проверка и выводится сообщение об обязательных вопросах, на которые не даны ответы. +<li>Если вы не дадите ответы на обязательные вопросы, то при попытке завершить редактирование анкеты выполняется автоматическая проверка и выводится сообщение об обязательных вопросах, на которые не даны ответы. </li> -<li>Возможность завершить редактирование анкеты появится только после того, как респондент ответит на все обязательные вопросы. Вопросы, на которые уже получен ответ, визуально выделяются зеленым цветом.</li></ul><h3>См. также:</h3> +<li>Возможность завершить редактирование анкеты появится только после того, как респондент ответит на все обязательные вопросы. Вопросы, на которые уже получен ответ, визуально выделяются зеленым цветом.</li></ul><h3>См. также:</h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl index b94576d93..9a922129c 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -331,8 +331,7 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Установка значений реквизитов формы. +#Область УстановкаЗначенийРеквизитовФормы &НаСервере Процедура УстановитьЗначенияРеквизитовФормыЗаполненияРаздела() @@ -692,8 +691,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Преобразование результатов заполнения анкеты в табличную часть документа. +#КонецОбласти + +#Область ПреобразованиеРезультатовЗаполненияАнкетыВТабличнуюЧастьДокумента &НаСервере Функция ОкончаниеРедактированиеФормыЗаполнения(РежимЗаписи) @@ -1113,8 +1113,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прочее +#КонецОбласти + +#Область Прочее &НаСервере Процедура ПостроениеФормыСогласноРаздела() @@ -1715,4 +1716,6 @@ // Конец СтандартныеПодсистемы.ПодключаемыеКоманды +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Help/ru.html index 7cf667fc3..abe5cd1b5 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Help/ru.html @@ -3,9 +3,9 @@ <p>Сотрудник, ответственный за проведение опроса, имеет возможность в реальном времени отслеживать и контролировать ход анкетирования. Заполненные респондентами <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a> попадают в список.</p> <p>Список открывается по команде <strong>Анкеты</strong> раздела <strong>Анкетирование</strong>.</p> <p>В списке выводится:</p> -<ul><li><strong>Дата</strong> - дата и время завершения редактирования анкеты респондентом. +<ul><li><strong>Дата</strong> - дата и время завершения редактирования анкеты респондентом. </li> -<li><strong>Номер</strong> - номер анкеты, присваивается приложением автоматически. +<li><strong>Номер</strong> - номер анкеты, присваивается приложением автоматически. </li> <li><strong>Опрос</strong> - информация о документе <a href="Document.НазначениеОпросов.Form.ФормаДокумента/Help">Назначение опросов</a>. </li> diff --git a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Help/ru.html index a53cd46ea..eaaec7006 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> <p>Предназначен для выбора документа <a href="Document.Встреча.Form.ФормаДокумента/Help">Встреча</a>.</p> -<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Встреча</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> +<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Встреча</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> <p>В списке выводится:</p> <ul><li><strong>Дата регистрации</strong> - дата создания документа; </li> @@ -8,7 +8,7 @@ </li> <li><strong>Описание</strong> - в поле указывается, какие действия необходимо выполнить в рамках взаимодействия; </li> -<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий; +<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий; </li> <li><strong>Список участников</strong> - контакты, которые указаны в документах взаимодействий.</li></ul><h3>Выбор документа</h3> <ul><li> @@ -16,8 +16,8 @@ </li> <li> <div>Также можно использовать двойной щелчок мыши.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> -<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Ввод документа Встреча</h3> -<ul><li>Нажмите <strong>Создать</strong>. Заполните необходимые поля.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании встречи</h3> +<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Ввод документа Встреча</h3> +<ul><li>Нажмите <strong>Создать</strong>. Заполните необходимые поля.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании встречи</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужный документ. Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -27,7 +27,7 @@ <div><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li> <li> -<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> +<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> </li> <li> <div><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Написать электронное письмо</a>;</div> diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html index 68e5c1900..9cea22ada 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html @@ -1,5 +1,5 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> -<p>Документ предназначен для регистрации информации о прошедших встречах, для планирования и отражения факта встреч - совещаний, семинаров и т.п. Например, в этом документе можно отразить результаты обсуждения с клиентом нового коммерческого предложения.</p> +<p>Документ предназначен для регистрации информации о прошедших встречах, для планирования и отражения факта встреч - совещаний, семинаров и т.п. Например, в этом документе можно отразить результаты обсуждения с клиентом нового коммерческого предложения.</p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a92456">Какие реквизиты можно указать в документе?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a92459">Как указать участников встречи?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a9245c">Какие взаимодействия можно создать на основании встречи?</a></p> @@ -9,17 +9,17 @@ </li> <li><b>Окончание</b> - дата и время окончания встречи. </li> -<li><b>Предмет</b> - то, чему посвящена встреча, например, обсуждению претензии клиента. Нажмите <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong>, укажите <strong>Тип данных</strong>, затем из соответствующего списка выберите документ взаимодействий или какой-либо документ приложения. Если предмет встречи не определен, то в качестве предмета выступает текущий документ, который представляет собой первое взаимодействие цепочки. При выполнении команды <strong>Взаимодействия</strong> во вновь созданном документе автоматически проставляется предмет, указанный в исходном документе, при этом основные поля будут также скопированы. Так можно создать цепочку <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">взаимодействий</a>. +<li><b>Предмет</b> - то, чему посвящена встреча, например, обсуждению претензии клиента. Нажмите <img src="StdPicture.InputFieldSelect" width="12" height="12"></img><strong>Выбрать</strong>, укажите <strong>Тип данных</strong>, затем из соответствующего списка выберите документ взаимодействий или какой-либо документ приложения. Если предмет встречи не определен, то в качестве предмета выступает текущий документ, который представляет собой первое взаимодействие цепочки. При выполнении команды <strong>Взаимодействия</strong> во вновь созданном документе автоматически проставляется предмет, указанный в исходном документе, при этом основные поля будут также скопированы. Так можно создать цепочку <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">взаимодействий</a>. </li> -<li><strong>Место</strong> - укажите адрес (номер) помещения, в котором происходила встреча. +<li><strong>Место</strong> - укажите адрес (номер) помещения, в котором происходила встреча. </li> <li><strong>Тема</strong> - краткое описание того, чему была посвящена встреча. </li> -<li><strong>Ответственный</strong> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. +<li><strong>Ответственный</strong> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. </li> -<li><strong>Рассмотрено</strong> - признак того, что данное взаимодействие рассмотрено и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение. Использовать флажок <strong>Рассмотрено</strong> рекомендуется при коллективной работе с документами взаимодействия. +<li><strong>Рассмотрено</strong> - признак того, что данное взаимодействие рассмотрено и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение. Использовать флажок <strong>Рассмотрено</strong> рекомендуется при коллективной работе с документами взаимодействия. </li> -<li><b>Рассмотреть после</b> - необходимо заполнить дату и время, если рассмотрение данной встречи планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. +<li><b>Рассмотреть после</b> - необходимо заполнить дату и время, если рассмотрение данной встречи планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. </li> <li><strong>Важность</strong> - выберите из списка признак необходимости уделения данному взаимодействию дополнительного внимания, или наоборот, признак несущественности. Может принимать значения <strong>Низкая</strong>, <strong>Обычная</strong>, <strong>Высокая</strong>. Отображается в списке специальными значками. </li> @@ -27,16 +27,16 @@ </li> <li><b>Комментарий</b> - произвольный текстовый комментарий. Располагается на специальной вкладке. </li> -<li><strong>Создана</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. +<li><strong>Создана</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. </li> -<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> +<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> <table border="4"><tbody><tr><td>Реквизиты <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a92459"> <h3 style="MARGIN-LEFT: 0px">Участники</h3> <ul></ul></a> -<p>Для фиксирования контактов, которые участвовали в мероприятии, используется список <strong>Участники</strong>. Перейдите на соответствующую вкладку. Информация об участниках вводится в табличную часть документа. Нажмите <strong>Добавить</strong>. В списке указывается имя участника и информация о том, как с ним связаться. Список является обязательным - хотя бы один участник должен быть указан.</p> +<p>Для фиксирования контактов, которые участвовали в мероприятии, используется список <strong>Участники</strong>. Перейдите на соответствующую вкладку. Информация об участниках вводится в табличную часть документа. Нажмите <strong>Добавить</strong>. В списке указывается имя участника и информация о том, как с ним связаться. Список является обязательным - хотя бы один участник должен быть указан.</p> <ul><li>Список состоит из колонок: <ul><li> -<div style="MARGIN-LEFT: 0px"><strong>Представление контакта</strong> - полное наименование контакта;</div> +<div style="MARGIN-LEFT: 0px"><strong>Представление контакта</strong> - полное наименование контакта;</div> </li> <li> <div style="MARGIN-LEFT: 0px"> @@ -45,9 +45,9 @@ <li> <div style="MARGIN-LEFT: 0px"><strong>Контакт</strong> - поле выбора участника.</div></li></ul></li> <li> -<div style="MARGIN-LEFT: 0px">Если участник уже зарегистрирован в приложении, то информация о нем указывается в поле <b>Контакт</b>. С помощью кнопки <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong> найдите контакт в окне <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. После выбора контакта поля <b>Представление контакта</b> и <b>Как связаться будут</b> заполнены автоматически. </div> +<div style="MARGIN-LEFT: 0px">Если участник уже зарегистрирован в приложении, то информация о нем указывается в поле <b>Контакт</b>. С помощью кнопки <img src="StdPicture.InputFieldSelect" width="12" height="12"></img><strong>Выбрать</strong> найдите контакт в окне <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. После выбора контакта поля <b>Представление контакта</b> и <b>Как связаться будут</b> заполнены автоматически. </div> </li> -<li>Если информацию о участнике встречи не планируется хранить, то достаточно указать <b>Представление контакта</b> и <b>Как связаться</b>. В этом случае в документе появляется информационное сообщение <strong>Не все контакты подобраны</strong>. </li></ul><ul><li>Зарегистрировать контакт можно после сохранения документа, нажав <b>Создать контакт</b>. Для выбора предлагаются списки приложения. Заполните необходимые поля.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a9245c"></a></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании встречи</h3> +<li>Если информацию о участнике встречи не планируется хранить, то достаточно указать <b>Представление контакта</b> и <b>Как связаться</b>. В этом случае в документе появляется информационное сообщение <strong>Не все контакты подобраны</strong>. </li></ul><ul><li>Зарегистрировать контакт можно после сохранения документа, нажав <b>Создать контакт</b>. Для выбора предлагаются списки приложения. Заполните необходимые поля.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a9245c"></a></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании встречи</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -65,6 +65,6 @@ <li> <div style="MARGIN-LEFT: 0px"><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>.</div></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="1">Просмотр взаимодействий, созданных на основании встречи</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании данного документа.</div></li></ul><h3 style="MARGIN-LEFT: 0px">См. также:</h3> +<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании данного документа.</div></li></ul><h3 style="MARGIN-LEFT: 0px">См. также:</h3> <ul><li> <div style="MARGIN-LEFT: 0px"><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html index dd8e25cd2..115e33bc9 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> <p>Предназначен для выбора документа <a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланированное взаимодействие</a>. Документ предназначен для планирования взаимодействия с одним или несколькими контактами. Документ вводится в том случае, если необходимо запланировать взаимодействие, однако как именно будет производиться взаимодействие (телефонный звонок, встреча, электронное письмо, сообщение SMS), еще не известно.</p> -<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Запланированное взаимодействие</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> +<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Запланированное взаимодействие</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> <p>В списке выводится:</p> <ul><li><strong>Дата регистрации</strong> - дата создания документа; </li> @@ -8,7 +8,7 @@ </li> <li><strong>Описание</strong> - в поле указывается, какие действия необходимо выполнить в рамках взаимодействия; </li> -<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий; +<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий; </li> <li><strong>Список участников</strong> - контакты, которые указаны в документах взаимодействий.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a></li></ul><h3>Выбор документа</h3> <ul><li> @@ -16,8 +16,8 @@ </li> <li> <div>Также можно использовать двойной щелчок мыши.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> -<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Ввод документа Запланированное взаимодействие</h3> -<ul><li>Нажмите <strong>Создать</strong>. Заполните необходимые поля.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании запланированного взаимодействия</h3> +<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Ввод документа Запланированное взаимодействие</h3> +<ul><li>Нажмите <strong>Создать</strong>. Заполните необходимые поля.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании запланированного взаимодействия</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужный документ. Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -27,7 +27,7 @@ <div><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li> <li> -<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> +<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> </li> <li> <div><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Написать электронное письмо</a>;</div> diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html index 41218960a..4f0881556 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html @@ -5,15 +5,15 @@ <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff3b3910c647">Какие взаимодействия можно создать на основании запланированного взаимодействия?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#2">Как просмотреть взаимодействия, созданные на основании данного документа?</a></p><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff3ac11444df"> <p style="MARGIN-LEFT: 0px"></p></a><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a92456">Заполните необходимые поля:</a><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff3ac11444df"></a> -<ul style="MARGIN-LEFT: 40px"><li><b>Предмет</b> - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы приложения, а также <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета выступает текущий документ (т.е. такой документ начинает цепочку взаимодействий). -<ul><li>Для заполнения поля нажмите <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong>, выберите тип данных, затем из соответствующего списка выберите конкретный документ.</li></ul></li> +<ul style="MARGIN-LEFT: 40px"><li><b>Предмет</b> - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы приложения, а также <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета выступает текущий документ (т.е. такой документ начинает цепочку взаимодействий). +<ul><li>Для заполнения поля нажмите <img src="StdPicture.InputFieldSelect" width="12" height="12"></img><strong>Выбрать</strong>, выберите тип данных, затем из соответствующего списка выберите конкретный документ.</li></ul></li> <li><b>Тема</b> - краткое описание того, чему будет посвящено запланированное взаимодействие. </li> -<li><b>Ответственный</b> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию для большинства документов взаимодействия приложение указывает в качестве ответственного текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. +<li><b>Ответственный</b> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию для большинства документов взаимодействия приложение указывает в качестве ответственного текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. </li> -<li><strong>Рассмотрено</strong> - признак того, что данное взаимодействие рассмотрено и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение. Использовать флажок <strong>Рассмотрено</strong> рекомендуется при коллективной работе с документами взаимодействия. +<li><strong>Рассмотрено</strong> - признак того, что данное взаимодействие рассмотрено и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение. Использовать флажок <strong>Рассмотрено</strong> рекомендуется при коллективной работе с документами взаимодействия. </li> -<li><b>Рассмотреть после</b> - необходимо заполнить дату и время, если рассмотрение данного взаимодействия планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar" width="12" height="12"></img>. +<li><b>Рассмотреть после</b> - необходимо заполнить дату и время, если рассмотрение данного взаимодействия планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar" width="12" height="12"></img>. </li> <li><strong>Важность</strong> - признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения <strong>Низкая</strong>, <strong>Обычная</strong>, <strong>Высокая</strong>. </li> @@ -21,28 +21,28 @@ </li> <li><b>Комментарий</b> - произвольный текстовый комментарий. Располагается на специальной вкладке. </li> -<li><strong>Создано</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. +<li><strong>Создано</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. </li> -<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> -<table border="4"><tbody><tr><td>Реквизиты <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff394a79a4e0"> +<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> +<table border="4"><tbody><tr><td>Реквизиты <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff394a79a4e0"> <h3 style="MARGIN-LEFT: 0px">Участники</h3></a> -<p style="MARGIN-LEFT: 0px">Для фиксирования контактов, которые будут участвовать в мероприятии, используется список <strong>Участники</strong>. Перейдите на соответствующую вкладку. Информация об участниках вводится в табличную часть документа. Нажмите <strong>Добавить</strong>. В списке указывается имя предполагаемого участника и информация о том, как связаться с участником. Список является обязательным - хотя бы один участник должен быть указан. </p> +<p style="MARGIN-LEFT: 0px">Для фиксирования контактов, которые будут участвовать в мероприятии, используется список <strong>Участники</strong>. Перейдите на соответствующую вкладку. Информация об участниках вводится в табличную часть документа. Нажмите <strong>Добавить</strong>. В списке указывается имя предполагаемого участника и информация о том, как связаться с участником. Список является обязательным - хотя бы один участник должен быть указан. </p> <ul style="MARGIN-LEFT: 40px"><li>Список состоит из колонок: <ul><li> -<div style="MARGIN-LEFT: 0px"><strong>Представление контакта</strong> - полное наименование контакта;</div> +<div style="MARGIN-LEFT: 0px"><strong>Представление контакта</strong> - полное наименование контакта;</div> </li> <li> <div style="MARGIN-LEFT: 0px"> <div style="MARGIN-LEFT: 0px"><strong>Как связаться</strong> - контактная информация (телефон, адрес электронной почты и т.п.);</div></div></li></ul><ul><li> <div style="MARGIN-LEFT: 0px"><strong>Контакт</strong> - поле выбора участника.</div></li></ul></li> <li> -<div style="MARGIN-LEFT: 0px">Если участник уже зарегистрирован в приложении, то информация о нем указывается в поле <b>Контакт</b>. С помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> найдите контакт в окне <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. Поля <b>Представление контакта</b> и <b>Как связаться будут</b> заполнены автоматически.</div> +<div style="MARGIN-LEFT: 0px">Если участник уже зарегистрирован в приложении, то информация о нем указывается в поле <b>Контакт</b>. С помощью кнопки <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать</strong> найдите контакт в окне <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. Поля <b>Представление контакта</b> и <b>Как связаться будут</b> заполнены автоматически.</div> </li> <li> -<div style="MARGIN-LEFT: 0px">Если информацию о участнике встречи не планируется хранить, то достаточно указать <b>Представление контакта</b> и заполнить поле <b>Как связаться</b>. В этом случае в документе появляется информационное сообщение <strong>Не все контакты подобраны</strong>. </div> +<div style="MARGIN-LEFT: 0px">Если информацию о участнике встречи не планируется хранить, то достаточно указать <b>Представление контакта</b> и заполнить поле <b>Как связаться</b>. В этом случае в документе появляется информационное сообщение <strong>Не все контакты подобраны</strong>. </div> </li> -<li>Если это новый участник, зарегистрировать контакт можно после сохранения документа, нажав <b>Создать контакт</b>. Для выбора предлагаются списки приложения. Заполните необходимые поля.</li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff3b3910c647"> -<h3 style="MARGIN-LEFT: 0px">Создание документов взаимодействий на основании запланированного взаимодействия</h3></a> +<li>Если это новый участник, зарегистрировать контакт можно после сохранения документа, нажав <b>Создать контакт</b>. Для выбора предлагаются списки приложения. Заполните необходимые поля.</li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff3b3910c647"> +<h3 style="MARGIN-LEFT: 0px">Создание документов взаимодействий на основании запланированного взаимодействия</h3></a> <ul><li> <div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -60,5 +60,5 @@ <li> <div style="MARGIN-LEFT: 0px"><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>. </div></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="2">Просмотр взаимодействий, созданных на основании запланированного взаимодействия</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого запланированного взаимодействия.</div></li></ul><h3>См. также:</h3> +<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого запланированного взаимодействия.</div></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html index e78ce7d9c..23e88624b 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html @@ -1,4 +1,4 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16553"></meta></head><body> <h1>Запланированное взаимодействие</h1> <p style="MARGIN-LEFT: 0px">Документ предназначен для планирования взаимодействия с одним или несколькими контактами. Документ вводится в том случае, если необходимо запланировать взаимодействие, однако как именно будет производиться взаимодействие (телефонный звонок, встреча, электронное письмо, сообщение SMS), еще не известно. </p> -<p> </p></body></html> \ No newline at end of file +<p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Help/ru.html index eb7bd9c78..e9373fbee 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Help/ru.html @@ -1,8 +1,8 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body> <p>Предназначен для выбора документа <a href="Document.НазначениеОпросов.Form.ФормаДокумента/Help">Назначение опросов</a>.</p> -<p>Открывается по кнопке выбора из отчетов <a href="Report.АнализОпроса/Help">Анализ опроса</a> и <a href="Report.АналитическийОтчетПоАнкетированию/Help">Аналитический отчет по анкетированию</a> раздела <strong>Анкетирование</strong>.</p> +<p>Открывается по кнопке выбора из отчетов <a href="Report.АнализОпроса/Help">Анализ опроса</a> и <a href="Report.АналитическийОтчетПоАнкетированию/Help">Аналитический отчет по анкетированию</a> раздела <strong>Анкетирование</strong>.</p> <p>В списке выводится:</p> -<ul><li><strong>Номер</strong> - автоматически присваивается приложением; +<ul><li><strong>Номер</strong> - автоматически присваивается приложением; </li> <li><strong>Дата</strong> - дата и время создания документа <strong>Назначение опроса</strong>; </li> diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Help/ru.html index 050213768..623be0dea 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Help/ru.html @@ -3,9 +3,9 @@ <p>Для того чтобы респондент приступил к заполнению <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a> по составленному шаблону, необходимо выполнить ряд подготовительных действий. Сначала необходимо организовать проведение опроса, в рамках которого определить сроки его проведения, состав респондентов и <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблон анкеты</a>, на основании которого будут сформированы <a href="Document.Анкета.Form.ФормаСписка/Help">анкеты</a> респондентов.</p> <h3>Назначение опроса</h3> <p>Заполните следующие поля:</p> -<ul><li><strong>Номер</strong> - проставляется приложением автоматически. +<ul><li><strong>Номер</strong> - проставляется приложением автоматически. </li> -<li><strong>Дата</strong> - дата и время создания документа, проставляется приложением автоматически, при необходимости можно изменить. +<li><strong>Дата</strong> - дата и время создания документа, проставляется приложением автоматически, при необходимости можно изменить. </li> <li>В поле <strong>Наименование</strong> укажите заголовок опроса, под которым данная анкета появится в списке доступных анкет у респондентов. Поле является обязательным. </li> @@ -13,9 +13,9 @@ </li> <li>В поле <strong>Шаблон анкеты</strong> указывается ранее подготовленный шаблон анкеты для этого опроса (выбирается из списка <a href="Catalog.ШаблоныАнкет/Help">Шаблоны анкет</a>). Поле обязательно для заполнения. </li> -<li>Выберите <strong>Тип респондентов</strong>. Респонденты - это <a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a> приложения, которые связаны с объектами приложения, например, со списком партнеров. В поле <strong>Тип респондентов</strong> необходимо указать, для какого типа внешних пользователей приложения предназначен опрос. Для этого выберите один из списков приложения. +<li>Выберите <strong>Тип респондентов</strong>. Респонденты - это <a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a> приложения, которые связаны с объектами приложения, например, со списком партнеров. В поле <strong>Тип респондентов</strong> необходимо указать, для какого типа внешних пользователей приложения предназначен опрос. Для этого выберите один из списков приложения. </li> -<li>Затем в список <strong>Респонденты</strong> необходимо добавить из выбранного списка конкретных внешних пользователей, для которых предназначен опрос. +<li>Затем в список <strong>Респонденты</strong> необходимо добавить из выбранного списка конкретных внешних пользователей, для которых предназначен опрос. </li> <li>Если в опросе участвуют все респонденты указанного типа, например, все партнеры, то необходимо установить флажок <strong>Свободный опрос</strong>. В этом случае список <strong>Респонденты</strong> недоступен для редактирования. </li> @@ -23,7 +23,7 @@ </li> <li>Установите флажок <strong>Показывать в архиве анкет</strong>, такая анкета будет доступна респонденту в <a href="DataProcessor.ДоступныеАнкеты.Form.АрхивАнкет/Help">списке архивных анкет</a>. Все свои ранее заполненные анкеты с установленным флажком респондент может посмотреть по команде <strong>Архив анкет</strong>. </li> -<li>Установив флажок <strong>Предварительное сохранение</strong>, можно разрешить респонденту заполнять анкету в несколько подходов. Если флажок установлен, то респондент сможет сохранить частично заполненную анкету с помощью команды <strong>Записать</strong>. Респондент может вернуться к заполнению анкеты в любое время. При этом анкета не будет считаться окончательно заполненной до тех пор, пока респондент не воспользуется командой <strong>Завершить и закрыть</strong>. Если флажок <strong>Предварительное сохранение</strong> не установлен, то респонденту нужно будет заполнить анкету за один подход. В этом случае в анкете для записи будет доступна только одна команда <strong>Завершить и закрыть</strong>. +<li>Установив флажок <strong>Предварительное сохранение</strong>, можно разрешить респонденту заполнять анкету в несколько подходов. Если флажок установлен, то респондент сможет сохранить частично заполненную анкету с помощью команды <strong>Записать</strong>. Респондент может вернуться к заполнению анкеты в любое время. При этом анкета не будет считаться окончательно заполненной до тех пор, пока респондент не воспользуется командой <strong>Завершить и закрыть</strong>. Если флажок <strong>Предварительное сохранение</strong> не установлен, то респонденту нужно будет заполнить анкету за один подход. В этом случае в анкете для записи будет доступна только одна команда <strong>Завершить и закрыть</strong>. </li> <li>По команде <strong>Провести</strong> (или <strong>Провести и закрыть</strong>) с учетом установленных параметров создается новый опрос. У респондентов появляется возможность заполнить анкеты по данному опросу.</li></ul><h3>См. также:</h3> <ul><li> diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Help/ru.html index 8d7539701..9bec93657 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Help/ru.html +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Help/ru.html @@ -1,8 +1,8 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> -<p>Предназначена для подбора респондентов из выбранного списка приложения.</p> +<p>Предназначена для подбора респондентов из выбранного списка приложения.</p> <p>Открывается по кнопке <strong>Подобрать</strong> из документа <a href="Document.НазначениеОпросов.Form.ФормаДокумента/Help">Назначение опросов</a>.</p> <h3>Выбор респондентов</h3> -<ul><li>Выделите один или несколько элементов списка, нажмите <strong>Выбрать</strong>. +<ul><li>Выделите один или несколько элементов списка, нажмите <strong>Выбрать</strong>. </li> <li>Для выбора одного элемента также можно воспользоваться двойным щелчком мыши.</li></ul><h3>См. также:</h3> <ul><li> diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Help/ru.html index daaa7941b..09ad28d92 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Help/ru.html @@ -3,7 +3,7 @@ <p>Для того чтобы респондент приступил к заполнению анкеты по составленному <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблону</a>, необходимо выполнить ряд подготовительных действий. Сначала необходимо организовать проведение опроса, в рамках которого определить сроки его проведения, состав респондентов и шаблон анкеты, на основании которого будут сформированы <a href="Document.Анкета.Form.ФормаСписка/Help">анкеты</a> респондентов.</p> <p>Открывается по команде <strong>Назначения опросов</strong> раздела <strong>Анкетирование</strong>.</p> <p>В списке выводится:</p> -<ul><li><strong>Номер</strong> - автоматически присваивается приложением; +<ul><li><strong>Номер</strong> - автоматически присваивается приложением; </li> <li><strong>Дата</strong> - дата и время создания документа <strong>Назначение опроса</strong>; </li> @@ -15,8 +15,8 @@ </li> <li><strong>Дата окончания</strong> - дата окончания действия опроса.</li></ul><h3>Назначение нового опроса</h3> <ul><li>Нажмите <strong>Создать</strong>, заполните необходимые <a href="Document.НазначениеОпросов.Form.ФормаДокумента/Help">поля</a>.</li></ul><h3>Создание нового опроса</h3> -<ul><li>По команде <strong>Еще </strong><strong>- </strong><strong>Провести</strong> создается новый опрос с учетом установленных параметров. У респондентов появляется возможность заполнить <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a> по данному опросу.</li></ul><h3>Отмена проведения</h3> +<ul><li>По команде <strong>Еще </strong><strong>- </strong><strong>Провести</strong> создается новый опрос с учетом установленных параметров. У респондентов появляется возможность заполнить <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a> по данному опросу.</li></ul><h3>Отмена проведения</h3> <ul><li>Выполните команду <strong>Еще </strong><strong>- Отмена проведения</strong>, для того чтобы отменить опрос. После этого респонденты не увидят анкету по данному опросу.</li></ul><h3>Отбор по периоду</h3> -<ul><li>Выполните команду<strong>Еще</strong> <strong>- Установить интервал дат</strong>, выберите нужный период для просмотра документов.</li></ul><h3>См. также:</h3> +<ul><li>Выполните команду<strong>Еще</strong> <strong>- Установить интервал дат</strong>, выберите нужный период для просмотра документов.</li></ul><h3>См. также:</h3> <ul><li> <div><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index cd644a82e..6394fbbb5 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -971,6 +971,21 @@ <types>AnyRef</types> </valueType> </parameters> + <parameters> + <name>ДатаСогласия</name> + <valueType> + <types>Date</types> + <dateQualifiers> + <dateFractions>Date</dateFractions> + </dateQualifiers> + </valueType> + </parameters> + <parameters> + <name>Организация</name> + <valueType> + <types>CatalogRef</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index 1a6732baa..8bb97018a 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -14,11 +14,13 @@ Если Параметры.Ключ.Пустая() Тогда // Заполняем значениями по умолчанию. Объект.Ответственный = Пользователи.ТекущийПользователь(); - Если Не Параметры.Свойство("ДатаСогласия", Объект.ДатаОтзыва) Тогда + Объект.ДатаОтзыва = Параметры.ДатаСогласия; + Если Не ЗначениеЗаполнено(Объект.ДатаОтзыва) Тогда Объект.ДатаОтзыва = ТекущаяДатаСеанса(); КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Организация) Тогда - Если Не Параметры.Свойство("Организация", Объект.Организация) Тогда + Объект.Организация = Параметры.Организация; + Если Не ЗначениеЗаполнено(Объект.Организация) Тогда Объект.Организация = ЗащитаПерсональныхДанных.ОрганизацияПоУмолчанию(); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html index ce1d68056..d7a2dbfe6 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -11,7 +11,7 @@ <ul><li>Приложение выводит предупреждение о наличии согласия на обработку персональных данных. </li> <li>Нажав на ссылку, можно перейти к просмотру согласия.</li></ul><h3>Проведение документа</h3> -<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>. После этого отзыв будет учтен приложением, и можно будет вводить новое согласие на обработку персональных данных.</li></ul><h3>См. также:</h3> +<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>. После этого отзыв будет учтен приложением, и можно будет вводить новое согласие на обработку персональных данных.</li></ul><h3>См. также:</h3> <ul><li><a href="DocumentJournal.СогласияНаОбработкуПерсональныхДанных/Help">Список Согласия на обработку ПДн</a>; </li> <li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form index 3e98be113..c0cd07005 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Form.form @@ -1363,6 +1363,21 @@ <name>Субъект</name> <valueType/> </parameters> + <parameters> + <name>ДатаСогласия</name> + <valueType> + <types>Date</types> + <dateQualifiers> + <dateFractions>Date</dateFractions> + </dateQualifiers> + </valueType> + </parameters> + <parameters> + <name>Организация</name> + <valueType> + <types>CatalogRef</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl index 2b6f66dfb..47f85876f 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Forms/ФормаДокумента/Module.bsl @@ -14,11 +14,13 @@ Если Параметры.Ключ.Пустая() Тогда // Заполняем значениями по умолчанию. Объект.Ответственный = Пользователи.ТекущийПользователь(); - Если Не Параметры.Свойство("ДатаСогласия", Объект.ДатаПолучения) Тогда + Объект.ДатаПолучения = Параметры.ДатаСогласия; + Если Не ЗначениеЗаполнено(Объект.ДатаПолучения) Тогда Объект.ДатаПолучения = ТекущаяДатаСеанса(); КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Организация) Тогда - Если Не Параметры.Свойство("Организация", Объект.Организация) Тогда + Объект.Организация = Параметры.Организация; + Если Не ЗначениеЗаполнено(Объект.Организация) Тогда Объект.Организация = ЗащитаПерсональныхДанных.ОрганизацияПоУмолчанию(); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html index ba8cd7d69..8de81854a 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html @@ -1,11 +1,11 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18315"></meta></head><body> <p>Вводится при получении согласия на обработку персональных данных.</p> -<p>С помощью приложения можно проводить проверку персональных данных, например, при приеме на работу сотрудника:</p> +<p>С помощью приложения можно проводить проверку персональных данных, например, при приеме на работу сотрудника:</p> <ul><li>Проверяется наличие зарегистрированных физических лиц; </li> <li>Если физическое лицо было обнаружено, выполняется проверка наличия действующего согласия на обработку ПДн; </li> -<li>Если согласия на обработку ПДн не обнаружено, предлагается его ввести.</li></ul><p>Предусмотрен ввод согласия на обработку ПДн из списков приложения, в которых хранятся персональные данные, по соответствующей кнопке. Также можно ввести документ из списка <a href="DocumentJournal.СогласияНаОбработкуПерсональныхДанных/Help">Согласия на обработку ПДн</a>.</p> +<li>Если согласия на обработку ПДн не обнаружено, предлагается его ввести.</li></ul><p>Предусмотрен ввод согласия на обработку ПДн из списков приложения, в которых хранятся персональные данные, по соответствующей кнопке. Также можно ввести документ из списка <a href="DocumentJournal.СогласияНаОбработкуПерсональныхДанных/Help">Согласия на обработку ПДн</a>.</p> <p>Укажите <strong>Дату</strong> согласия.</p> <h3>Оператор персональных данных</h3> <ul><li>Выберите <strong>Организацию</strong> из списка;</li> @@ -14,7 +14,7 @@ <li><a name="СтандартныеПодсистемы.Пользователи">Выберите из </a><a href="Catalog.Пользователи/Help">списка пользователей</a> <strong>Ответственного за обработку персональных данных</strong>.</li></ul><h3>Субъект персональных данных </h3> <ul><li>Персональные данные субъектов выбираются из нескольких списков; </li> -<li>Рекомендуется заносить все данные субъектов в соответствующий список, а не только в окне согласия, т.к. этим облегчается последующая работа. Если согласие формируется из списка, данные выбранного субъекта заполняются автоматически; +<li>Рекомендуется заносить все данные субъектов в соответствующий список, а не только в окне согласия, т.к. этим облегчается последующая работа. Если согласие формируется из списка, данные выбранного субъекта заполняются автоматически; </li> <li>В поле <strong>Субъект</strong> сначала выберите список, затем выберите субъекта персональных данных из соответствующего списка; </li> @@ -27,11 +27,11 @@ </li> <li>В поле <strong>Комментарий</strong> можно написать дополнительную информацию. <a name="СтандартныеПодсистемы.Пользователи"> </a></li> -<li><a name="СтандартныеПодсистемы.Пользователи">В поле <strong>Ответственный</strong> приложение автоматически проставляет текущего </a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</li></ul><h3>Печать</h3> -<ul><li>С помощью кнопки <strong>Печать</strong> можно распечатать выделенные согласия. Печать возможна в виде табличных документов формата MXL (для печати в этом формате не требуется специальных приложений); +<li><a name="СтандартныеПодсистемы.Пользователи">В поле <strong>Ответственный</strong> приложение автоматически проставляет текущего </a><a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>.</li></ul><h3>Печать</h3> +<ul><li>С помощью кнопки <strong>Печать</strong> можно распечатать выделенные согласия. Печать возможна в виде табличных документов формата MXL (для печати в этом формате не требуется специальных приложений); </li> -<li>В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие приложения, установленные на компьютере.</li></ul><h3>Предупреждение</h3> -<ul><li>При выборе субъекта приложение проводит поиск зарегистрированных согласий на обработку ПДн. +<li>В виде офисных документов в форматах Microsoft Word и OpenOffice.org, для этого требуются соответствующие приложения, установленные на компьютере.</li></ul><h3>Предупреждение</h3> +<ul><li>При выборе субъекта приложение проводит поиск зарегистрированных согласий на обработку ПДн. </li> <li>Если уже имеется действующее согласие этого субъекта в той же организации, выводится предупреждение. </li> @@ -42,7 +42,7 @@ <li>С помощью ссылки, имеющейся в предупреждении, можно просмотреть согласие, зарегистрированное ранее. </li> <li>Если необходимо ввести новое <strong>Согласие на обработку персональных данных</strong> (данные субъекта изменились и т.д.) то сначала нужно отозвать ранее полученное согласие. Нажмите кнопку <strong>Создать на основании</strong>, выберите <a href="Document.ОтзывСогласияНаОбработкуПерсональныхДанных/Help">Отзыв согласия на обработку ПДн</a>.</li></ul><h3>Проведение документа</h3> -<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>, для того чтобы зарегистрировать в приложении согласие на обработку ПДн. +<ul><li>Нажмите кнопку <strong>Провести и закрыть</strong>, для того чтобы зарегистрировать в приложении согласие на обработку ПДн. </li> <li>Второе такое же согласие на обработку персональных данных провести (т.е. зарегистрировать) невозможно. Приложение выводит сообщение об ошибке.</li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index eda0ac83f..f172ddc27 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -332,8 +332,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с макетами офисных документов. +#Область РаботаСМакетамиОфисныхДокументов Процедура ПроверитьВозможностьОформленияСогласия(СубъектПДн) Экспорт @@ -345,4 +344,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html index 06161d4ea..f0e063cdd 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html @@ -1,6 +1,6 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body> <p>Документ предназначен для отправки сообщения SMS одному или нескольким адресатам, проведения SMS-рассылки и последующего отражения факта отправки сообщений.</p> -<p>Документ позволяет создавать, редактировать и отправлять сообщения SMS, помимо их документирования и хранения. Возможна отправка нескольких сообщений с одинаковым текстом разным адресатам посредством одного документа. При этом отслеживается как состояние документа в целом, так и состояния отдельного сообщения каждому из различных адресатов в рамках документа.</p> +<p>Документ позволяет создавать, редактировать и отправлять сообщения SMS, помимо их документирования и хранения. Возможна отправка нескольких сообщений с одинаковым текстом разным адресатам посредством одного документа. При этом отслеживается как состояние документа в целом, так и состояния отдельного сообщения каждому из различных адресатов в рамках документа.</p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cbf">Какие реквизиты можно указать в документе?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cc2">Как указать адресатов сообщения?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#1">Как отправить сообщения?</a></p> @@ -8,15 +8,15 @@ <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cc5">Какие взаимодействия можно создать на основании сообщения SMS?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#2">Как просмотреть взаимодействия, созданные на основании сообщения SMS?</a></p><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cbf"> <p style="MARGIN-LEFT: 0px">Заполните необходимые поля:</p></a> -<ul style="MARGIN-LEFT: 40px"><li><b>Предмет</b> - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы приложения, а также документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета выступает текущий документ (т.е. такой документ начинает цепочку взаимодействий). +<ul style="MARGIN-LEFT: 40px"><li><b>Предмет</b> - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы приложения, а также документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета выступает текущий документ (т.е. такой документ начинает цепочку взаимодействий). </li> -<li>Для заполнения поля нажмите <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>, выберите тип данных, затем из соответствующего списка выберите конкретный документ. +<li>Для заполнения поля нажмите <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать</strong>, выберите тип данных, затем из соответствующего списка выберите конкретный документ. </li> -<li><b>Ответственный</b> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. +<li><b>Ответственный</b> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. </li> -<li><b>На контроле</b> - признак того, что данное сообщение потребует дальнейшего внимания и после отправки. Например, требуется проконтролировать, что сообщение доставлено адресату. В <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списке взаимодействий</a> такое сообщение SMS выделяется жирным шрифтом. +<li><b>На контроле</b> - признак того, что данное сообщение потребует дальнейшего внимания и после отправки. Например, требуется проконтролировать, что сообщение доставлено адресату. В <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списке взаимодействий</a> такое сообщение SMS выделяется жирным шрифтом. </li> -<li><b>Рассмотреть после</b> - необходимо заполнить, если контроль данного сообщения планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. Доступно, если установлен флажок <b>На контроле</b>. +<li><b>Рассмотреть после</b> - необходимо заполнить, если контроль данного сообщения планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. Доступно, если установлен флажок <b>На контроле</b>. </li> <li><b>Преобразовать кириллические символы в латинские</b> - признак того, что сообщение необходимо отправить в транслите. </li> @@ -24,34 +24,34 @@ </li> <li><b>Комментарий</b> - произвольный текстовый комментарий. Располагается на специальной вкладке. </li> -<li><strong>Создано</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. +<li><strong>Создано</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. </li> -<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> -<table border="4"><tbody><tr><td>Поля <b>На контроле</b> и <b>Рассмотреть после</b> доступны для заполнения, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cc2"> +<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> +<table border="4"><tbody><tr><td>Поля <b>На контроле</b> и <b>Рассмотреть после</b> доступны для заполнения, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cc2"> <h3 style="MARGIN-LEFT: 0px">Адресаты</h3></a> -<ul style="MARGIN-LEFT: 40px"><li>Информация об адресатах сообщения вводится в список <strong>Адресаты</strong>. +<ul style="MARGIN-LEFT: 40px"><li>Информация об адресатах сообщения вводится в список <strong>Адресаты</strong>. </li> <li>С помощью кнопки <strong>Добавить</strong> можно указать один или несколько контактов. </li> <li>Контакты являются обязательным для заполнения элементом. </li> -<li>Если адресат уже зарегистрирован в информационной базе, то информация о нем указывается в поле <b>Контакт</b>. Укажите контакт, используя список <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. В этом случае после выбора контакта остальные поля заполняются автоматически. +<li>Если адресат уже зарегистрирован в информационной базе, то информация о нем указывается в поле <b>Контакт</b>. Укажите контакт, используя список <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. В этом случае после выбора контакта остальные поля заполняются автоматически. </li> -<li>Если информацию об адресате сообщения не планируется хранить, то достаточно указать <b>Представление контакта</b> (его полное наименование) и <b>Номер телефона</b>. В этом случае в правой части документа выводится сообщение <strong>Не все контакты подобраны</strong>. +<li>Если информацию об адресате сообщения не планируется хранить, то достаточно указать <b>Представление контакта</b> (его полное наименование) и <b>Номер телефона</b>. В этом случае в правой части документа выводится сообщение <strong>Не все контакты подобраны</strong>. </li> <li>Номер телефона должен быть указан в формате <b>+xx (xxx) xxxxxxx</b>. Является обязательным для заполнения. </li> -<li>Если это новый адресат, то непосредственно из окна документа его можно зарегистрировать, нажав <b>Создать контакт</b>. Выберите соответствующий список и внесите в него данные нового адресата.</li></ul><h3><a name="1">Отправка сообщений</a></h3> +<li>Если это новый адресат, то непосредственно из окна документа его можно зарегистрировать, нажав <b>Создать контакт</b>. Выберите соответствующий список и внесите в него данные нового адресата.</li></ul><h3><a name="1">Отправка сообщений</a></h3> <ul><li>С помощью кнопки <strong>Отправить</strong> можно разослать сообщения SMS всем перечисленным контактам. </li> <li>Действие кнопки: <ul><li>В файловом режиме пользователь выполняет непосредственную отправку; </li> <li>В клиент-серверном режиме пользователь инициирует отправку, сообщение переходит в состояние <strong>Исходящее</strong>. Непосредственная отправка выполняется в фоне <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентноеЗадание/Help">регламентным заданием</a> "Отправка SMS".</li></ul></li></ul><p style="MARGIN-LEFT: 20px"></p><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5f98ffe116"> -<h3 style="MARGIN-LEFT: 0px">Проверка текущего состояния сообщения SMS</h3></a> -<ul><li>Состояние доставки сообщений проверяется автоматически, в соответствии с расписанием, настроенным администратором приложения. +<h3 style="MARGIN-LEFT: 0px">Проверка текущего состояния сообщения SMS</h3></a> +<ul><li>Состояние доставки сообщений проверяется автоматически, в соответствии с расписанием, настроенным администратором приложения. </li> -<li>Состояние доставки сообщений документа можно также проверить из окна документа, воспользовавшись командой <strong>Проверить состояние доставки</strong>. +<li>Состояние доставки сообщений документа можно также проверить из окна документа, воспользовавшись командой <strong>Проверить состояние доставки</strong>. </li> <li>Состояние SMS-сообщений отражается внизу документа и в таблице адресатов в колонке <strong>Состояние сообщения</strong> по каждому контакту отдельно. </li> @@ -60,7 +60,7 @@ </li> <li><b>Исходящее</b> - пользователь уже отправил сообщение, но оно еще не передавалось провайдеру. </li> -<li><b>Не удалось передать провайдеру</b> - приложение пыталась передать сообщение провайдеру, но не смогла этого сделать. Например, возникли технические проблемы на стороне провайдера. +<li><b>Не удалось передать провайдеру</b> - приложение пыталась передать сообщение провайдеру, но не смогла этого сделать. Например, возникли технические проблемы на стороне провайдера. </li> <li><b>Не отправлено провайдером</b> - сообщение успешно передано провайдеру, но еще не было им обработано. </li> @@ -75,7 +75,7 @@ <li><b>Не опознано провайдером</b> - провайдер не опознал, что когда то принимал данное сообщение к доставке. </li> <li><b>Ошибка получения статуса у провайдера</b> - не удалось связаться с провайдером при попытке получения состояния сообщения.</li></ul></li> -<li>Состояние документа в целом отображается в нижней левой части окна документа. Может принимать одно из следующих значений. +<li>Состояние документа в целом отображается в нижней левой части окна документа. Может принимать одно из следующих значений. <ul><li><b>Черновик</b> - сообщение ещё не отправлялось и доступно для редактирования. </li> <li><b>Исходящее</b> - пользователь уже отправил сообщение, но оно еще не передавалось провайдеру. @@ -87,7 +87,7 @@ <li><b>Частично доставлено</b> - доставка сообщений прекращено, часть сообщений доставлены адресатам, часть нет. </li> <li><strong>Не доставлено</strong>.</li></ul></li> -<li>Проверка состояния доставки осуществляется регламентным заданием "Обновление статусов доставки SMS". Также можно вручную проверить, воспользовавшись командой <strong>Еще</strong> - <strong>Проверить состояние дос</strong><strong>тавки</strong> на вкладке <strong>Адресаты</strong> (команда становится активной после отправки сообщений).</li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cc5">Создание документов взаимодействий на основании сообщения SMS<br></a></h3> +<li>Проверка состояния доставки осуществляется регламентным заданием "Обновление статусов доставки SMS". Также можно вручную проверить, воспользовавшись командой <strong>Еще</strong> - <strong>Проверить состояние дос</strong><strong>тавки</strong> на вкладке <strong>Адресаты</strong> (команда становится активной после отправки сообщений).</li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff5bac459cc5">Создание документов взаимодействий на основании сообщения SMS<br></a></h3> <ul><li> <div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -105,5 +105,5 @@ <li> <div style="MARGIN-LEFT: 0px"><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>. </div></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="2">Просмотр взаимодействий, созданных на основании сообщения SMS</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого сообщения SMS.</div></li></ul><h3>См. также:</h3> +<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого сообщения SMS.</div></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/СообщениеSMS/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Help/ru.html index 5f8f022bd..9df2d7e83 100644 --- a/SSL/src/Documents/СообщениеSMS/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Help/ru.html @@ -1,15 +1,15 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> <p>Предназначен для выбора документа <a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Сообщение SMS</a>. Документ используется для отправки сообщения SMS одному или нескольким адресатам. </p> -<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Сообщение SMS</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> +<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Сообщение SMS</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> <p>В списке выводится:</p> -<ul><li><strong>Дата </strong>- дата создания документа; +<ul><li><strong>Дата </strong>- дата создания документа; </li><li><strong>Номер</strong> - номер присваивается автоматически.</li></ul><h3>Выбор документа</h3> <ul><li> <div>Выделите документ, нажмите <strong>Выбрать</strong>.</div> </li><li> <div>Также можно использовать двойной щелчок мыши.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> -<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Ввод документа Сообщение SMS</h3> -<ul><li>Нажмите <strong>Создать</strong>. Заполните нужные поля.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании сообщения SMS</h3> +<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Ввод документа Сообщение SMS</h3> +<ul><li>Нажмите <strong>Создать</strong>. Заполните нужные поля.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании сообщения SMS</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужный документ <strong>Сообщение SMS</strong>. Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -17,7 +17,7 @@ </li><li> <div><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li><li> -<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> +<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> </li><li> <div><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Написать электронное письмо</a>;</div> </li><li> diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html index d4136c146..a23689c3e 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html @@ -5,19 +5,19 @@ <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e93">Какие взаимодействия можно создать на основании телефонного звонка?</a></p> <p style="MARGIN-BOTTOM: 5px; MARGIN-TOP: 0px; MARGIN-LEFT: 20px"><a href="#2">Как просмотреть взаимодействия, созданные на основании телефонного звонка?</a></p><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e8d"> <p style="MARGIN-LEFT: 0px"></p></a><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff4c16a92456">Заполните необходимые поля:</a><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e8d"></a> -<ul style="MARGIN-LEFT: 40px"><li><b>Предмет</b> - то, чему посвящен телефонный звонок, например, претензии клиента. Предметом могут быть документы приложения и документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий. При выполнении команды <strong>Взаимодействия</strong> из документа предметом взаимодействия во вновь созданном документе будет предмет, указанный в исходном документе, при этом основные поля будут также скопированы. +<ul style="MARGIN-LEFT: 40px"><li><b>Предмет</b> - то, чему посвящен телефонный звонок, например, претензии клиента. Предметом могут быть документы приложения и документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий. При выполнении команды <strong>Взаимодействия</strong> из документа предметом взаимодействия во вновь созданном документе будет предмет, указанный в исходном документе, при этом основные поля будут также скопированы. </li> -<li>Для заполнения поля нажмите <img src="StdPicture.InputFieldSelect" width="12" height="12"></img> <strong>Выбрать</strong>, выберите тип данных, затем из соответствующего списка выберите конкретный документ. +<li>Для заполнения поля нажмите <img src="StdPicture.InputFieldSelect" width="12" height="12"></img><strong>Выбрать</strong>, выберите тип данных, затем из соответствующего списка выберите конкретный документ. </li> <li>Включите флажок, для того чтобы указать, что телефонный звонок <strong>Входящий</strong>. Если флажок не установлен, то <b>Исходящий</b>. </li> -<li><b>Важность</b> - признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения <strong>Низкая</strong>, <strong>Обычная</strong> (значение по умолчанию), <strong>Высокая</strong>. Отображается в <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списке взаимодействий</a> специальными значками. +<li><b>Важность</b> - признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения <strong>Низкая</strong>, <strong>Обычная</strong> (значение по умолчанию), <strong>Высокая</strong>. Отображается в <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списке взаимодействий</a> специальными значками. </li> -<li><b>Ответственный</b> - выберите ответственного за данный звонок из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. +<li><b>Ответственный</b> - выберите ответственного за данный звонок из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>. </li> -<li><b>Рассмотреть после</b> - необходимо заполнить, если рассмотрение телефонного звонка планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. +<li><b>Рассмотреть после</b> - необходимо заполнить, если рассмотрение телефонного звонка планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. </li> -<li><b>Рассмотрено</b> - признак того, что телефонный звонок рассмотрен и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение. Использовать флажок <strong>Рассмотрено</strong> рекомендуется при коллективной работе с документами взаимодействий. +<li><b>Рассмотрено</b> - признак того, что телефонный звонок рассмотрен и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение. Использовать флажок <strong>Рассмотрено</strong> рекомендуется при коллективной работе с документами взаимодействий. </li> <li><b>Тема</b> - краткое описание того, чему был посвящен телефонный звонок. </li> @@ -25,17 +25,17 @@ </li> <li><b>Комментарий</b> - произвольный текстовый комментарий, дополнительная информация о телефонном звонке. </li> -<li><strong>Создан</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. +<li><strong>Создан</strong> - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле недоступно для редактирования. </li> -<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> -<table border="4"><tbody><tr><td>Реквизиты <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e90"> +<li><strong>Автор</strong> - пользователь, который создал документ. Указывается приложением автоматически. Поле недоступно для редактирования.</li></ul><p style="MARGIN-LEFT: 20px"></p> +<table border="4"><tbody><tr><td>Реквизиты <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <strong>Администрирование - Органайзер</strong>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e90"> <h3 style="MARGIN-LEFT: 0px">Абонент</h3></a> -<ul style="MARGIN-LEFT: 40px"><li>Если абонент уже зарегистрирован в приложении, то информация о нем указывается в поле <b>Контакт</b>. Нажмите <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>, для того чтобы найти контакт в списке <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. После выбора контакта автоматически заполняются поля <strong>Абонент</strong> и <strong>Как связаться</strong>. +<ul style="MARGIN-LEFT: 40px"><li>Если абонент уже зарегистрирован в приложении, то информация о нем указывается в поле <b>Контакт</b>. Нажмите <img src="StdPicture.InputFieldSelect"></img><strong>Выбрать</strong>, для того чтобы найти контакт в списке <a href="CommonForm.ВыборКонтакта/Help">Выбор контакта</a>. После выбора контакта автоматически заполняются поля <strong>Абонент</strong> и <strong>Как связаться</strong>. </li> -<li>Если информацию об абоненте не планируется хранить (например, поступил телефонный звонок от нового контрагента, и вы еще не решили, будете ли вы с ним работать), то достаточно заполнить поле <b>Как связаться</b> и текстовое представление в поле <b>Абонент</b>. При этом рядом с полем <strong>Контакт</strong> приложение выводит предупреждение <strong>Контакт не подобран</strong>. +<li>Если информацию об абоненте не планируется хранить (например, поступил телефонный звонок от нового контрагента, и вы еще не решили, будете ли вы с ним работать), то достаточно заполнить поле <b>Как связаться</b> и текстовое представление в поле <b>Абонент</b>. При этом рядом с полем <strong>Контакт</strong> приложение выводит предупреждение <strong>Контакт не подобран</strong>. </li> -<li>Зарегистрировать контакт можно непосредственно из окна телефонного звонка, воспользовавшись командой <strong>Еще</strong> - <b>Создать контакт</b>. Выберите соответствующий список, нажмите <strong>ОК</strong>, затем введите данные контакта и дозаполните документ.</li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e93"> -<h3 style="MARGIN-LEFT: 0px">Создание документов взаимодействий на основании телефонного звонка</h3></a> +<li>Зарегистрировать контакт можно непосредственно из окна телефонного звонка, воспользовавшись командой <strong>Еще</strong> - <b>Создать контакт</b>. Выберите соответствующий список, нажмите <strong>ОК</strong>, затем введите данные контакта и дозаполните документ.</li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e93"> +<h3 style="MARGIN-LEFT: 0px">Создание документов взаимодействий на основании телефонного звонка</h3></a> <ul><li> <div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -53,5 +53,5 @@ <li> <div style="MARGIN-LEFT: 0px"><strong>Позвонить</strong>. </div></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="2">Просмотр взаимодействий, созданных на основании телефонного звонка</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого телефонного звонка.</div></li></ul><h3>См. также:</h3> +<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого телефонного звонка.</div></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Help/ru.html index 8daa9e8d5..10c335604 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Help/ru.html @@ -1,34 +1,34 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> <p>Предназначен для выбора документа <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Входящее электронное письмо</a>. Этот документ можно только получить, ввести его невозможно.</p> -<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Входящее электронное письмо</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> +<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Входящее электронное письмо</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> <p>В списке выводится:</p> -<ul><li><strong>Отправлено</strong> - дата отправки письма; +<ul><li><strong>Отправлено</strong> - дата отправки письма; </li> <li><strong>Номер</strong> - номер присваивается автоматически; </li> -<li><strong>Тема</strong> - поле заполняется отправителем; +<li><strong>Тема</strong> - поле заполняется отправителем; </li> -<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например, претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ взаимодействия начинает цепочку взаимодействий; +<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например, претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ взаимодействия начинает цепочку взаимодействий; </li> -<li><strong>Отправитель</strong> - адрес электронной почты отправителя входящего письма.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> -<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Выбор документа</h3> +<li><strong>Отправитель</strong> - адрес электронной почты отправителя входящего письма.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> +<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3>Выбор документа</h3> <ul><li> <div>Выделите документ, нажмите <strong>Выбрать</strong>.</div> </li> <li> -<div>Также можно использовать двойной щелчок мыши.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание исходящего электронного письма на основании входящего электронного письма</h3> +<div>Также можно использовать двойной щелчок мыши.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание исходящего электронного письма на основании входящего электронного письма</h3> <ul><li> <div style="MARGIN-LEFT: 20px">Воспользуйтесь одной из кнопок или командами меню <strong>Еще</strong>:</div> <ul><li><b>Ответить</b> - в созданном <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящем письме</a> в качестве получателя будет указан отправитель письма. Исходящее письмо при этом входит в цепочку взаимодействий. </li> -<li><b><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем" width="16" height="16"></img> Ответить всем</b> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). +<li><b><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем" width="16" height="16"></img> Ответить всем</b> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). </li> -<li><b><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</b> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма.</li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> +<li><b><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</b> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма.</li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> <ul><li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="StdPicture.Print"></img> <strong>Печать</strong>; </div> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="StdPicture.Print"></img><strong>Печать</strong>; </div> </li> <li> -<div style="MARGIN-LEFT: 20px">в окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании входящего электронного письма</h3> +<div style="MARGIN-LEFT: 20px">в окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании входящего электронного письма</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужный документ. Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -38,7 +38,7 @@ <div><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li> <li> -<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> +<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> </li> <li> <div><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>.</div></li></ul></li></ul><h3>См. также:</h3> diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html index 368522f3e..4e0981d05 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html @@ -26,13 +26,13 @@ </li> <li><b>Важность</b> - признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения <strong>Низкая</strong>, <strong>Обычная</strong>, <strong>Высокая</strong>. Проставляется отправителем письма. </li> -<li><b>Номер</b> - номер, под которым данное письмо зарегистрировано в приложении. +<li><b>Номер</b> - номер, под которым данное письмо зарегистрировано в приложении. </li> <li><b>Отравлено</b> - дата и время отправки письма. </li></ul><h3>Просмотр картинок в письме</h3> <div> -<ul><li>Входящие письма могут содержать небезопасные элементы (загружаемые из интернета картинки или встроенные скрипты). В целях безопасности по умолчанию они отключены.  +<ul><li>Входящие письма могут содержать небезопасные элементы (загружаемые из интернета картинки или встроенные скрипты). В целях безопасности по умолчанию они отключены. </li> -<li>Если в приложении разрешено включение таких элементов, то при их наличии выводится предупреждение со ссылкой, по которой можно <b>Отобразить небезопасное содержимое</b>. +<li>Если в приложении разрешено включение таких элементов, то при их наличии выводится предупреждение со ссылкой, по которой можно <b>Отобразить небезопасное содержимое</b>. </li> <li>С помощью ссылки <b>Отобразить небезопасное содержимое</b> будут включены картинки, загружаемые из Интернета. Остальные небезопасные элементы письма включены не будут.</li></ul></div> <p></p> @@ -42,55 +42,55 @@ <ul><li>Для заполнения поля выберите из списка тип данных, затем из соответствующего списка выберите конкретный документ.</li></ul></li> <li><b>Ответственный</b> - выберите ответственного за данное взаимодействие из <a href="Catalog.Пользователи/Help">списка пользователей</a>. По умолчанию для входящих писем указывается ответственный за почту. </li> -<li><b>Рассмотрено</b> - признак того, что данное взаимодействие рассмотрено и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение в <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списке взаимодействий</a>. При соответствующих <a href="DocumentJournal.Взаимодействия.Form.НастройкиРаботыСПочтой/Help">настройках</a> после установки флажка отправителю будет отправлено уведомление о прочтении. +<li><b>Рассмотрено</b> - признак того, что данное взаимодействие рассмотрено и не требует дальнейшего внимания. С рассмотренных документов приложение снимает выделение в <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списке взаимодействий</a>. При соответствующих <a href="DocumentJournal.Взаимодействия.Form.НастройкиРаботыСПочтой/Help">настройках</a> после установки флажка отправителю будет отправлено уведомление о прочтении. </li> -<li><strong>Рассмотреть после</strong> - необходимо заполнить, если рассмотрение данного взаимодействия планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. +<li><strong>Рассмотреть после</strong> - необходимо заполнить, если рассмотрение данного взаимодействия планируется отложить до определенной даты. Выберите из списка нужное значение: <strong>Через 15 мин</strong>, <strong>Через 30 мин</strong>, <strong>Через 1 час,</strong> <strong>Через 3 часа</strong>, <strong>Завтра</strong>. Помимо этих значений можно указать произвольную дату и время с помощью кнопки <img src="StdPicture.InputFieldCalendar"></img>. </li> <li><b>Комментарий</b> - дополнительная информация о входящем письме.</li></ul><p style="MARGIN-LEFT: 20px"></p> -<table border="4"><tbody><tr><td>Поля <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <b>Администрирование - Органайзер</b>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba86958fb"> -<h3 style="MARGIN-LEFT: 0px">Создание исходящего электронного письма на основании входящего электронного письма</h3></a> +<table border="4"><tbody><tr><td>Поля <b>Рассмотрено </b>и <b>Рассмотреть после</b> доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе <b>Администрирование - Органайзер</b>.</td></tr></tbody></table><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba86958fb"> +<h3 style="MARGIN-LEFT: 0px">Создание исходящего электронного письма на основании входящего электронного письма</h3></a> <ul><li> <div style="MARGIN-LEFT: 20px">Воспользуйтесь одной из кнопок или командами меню <strong>Еще</strong>:</div> <ul><li><b>Ответить</b> - в созданном <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящем письме</a> в качестве получателя будет указан отправитель письма. Исходящее письмо при этом входит в цепочку взаимодействий. </li> -<li><b><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем"></img> Ответить всем</b> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). +<li><b><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем"></img> Ответить всем</b> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). </li> -<li><b><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</b> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма.</li></ul></li></ul><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba86958ff"> +<li><b><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</b> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма.</li></ul></li></ul><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba86958ff"> <h3 style="MARGIN-LEFT: 0px">Ссылка Сохранить адреса в контакты</h3></a> <ul><li> <div style="MARGIN-LEFT: 0px">Приложение позволяет в качестве участников взаимодействий указывать элементы списков. Например, клиентов или поставщиков. </div> </li> <li> -<div style="MARGIN-LEFT: 0px">При получении письма анализируются адреса отправителя и получателей письма. Если находится однозначное соответствие адреса отправителя и клиента, то приложение в письме сопоставляет отправителя и клиента. Это позволяет в дальнейшем получить информацию обо всех взаимодействиях с клиентом. </div> +<div style="MARGIN-LEFT: 0px">При получении письма анализируются адреса отправителя и получателей письма. Если находится однозначное соответствие адреса отправителя и клиента, то приложение в письме сопоставляет отправителя и клиента. Это позволяет в дальнейшем получить информацию обо всех взаимодействиях с клиентом. </div> </li> <li> <div style="MARGIN-LEFT: 0px">Если однозначное соответствие найти не удалось, например, адрес не найден или указан у нескольких клиентов, то эти данные необходимо указать вручную. </div> </li> <li> -<div style="MARGIN-LEFT: 0px">Если хотя бы один получатель или отправитель не сопоставлен, в письме отображается ссылка <b>Сохранить адреса в контакты</b>. Перейдите по ссылке, для того чтобы сопоставить и обновить адреса электронной почты, содержащиеся в письме, с контактами и их текущей контактной информацией в приложении в окне <a href="CommonForm.УточнениеКонтактов/Help">Сохранение адресов в контактах</a>. </div> +<div style="MARGIN-LEFT: 0px">Если хотя бы один получатель или отправитель не сопоставлен, в письме отображается ссылка <b>Сохранить адреса в контакты</b>. Перейдите по ссылке, для того чтобы сопоставить и обновить адреса электронной почты, содержащиеся в письме, с контактами и их текущей контактной информацией в приложении в окне <a href="CommonForm.УточнениеКонтактов/Help">Сохранение адресов в контактах</a>. </div> <ul><li> <div style="MARGIN-LEFT: 0px">Если адрес был ранее сопоставлен с контактом, то он будет отображен в списке. Если адрес не был ранее сопоставлен с контактом, или если необходимо сопоставить адрес с другим контактом, или записать адрес в другое поле контактной информации, то в поле <strong>Контакт</strong> можно выбрать контакт, в который будет записан новый адрес электронной почты. В поле <strong>Вид эл. почты контакта</strong> можно уточнить, в какое именно поле будет записан электронный адрес контакта.</div></li></ul></li> <li> -<div style="MARGIN-LEFT: 0px">Если у контакта в приложении указан адрес электронной почты, то при получении письма от такого контакта сопоставление контакта с адресом произойдет автоматически.</div> +<div style="MARGIN-LEFT: 0px">Если у контакта в приложении указан адрес электронной почты, то при получении письма от такого контакта сопоставление контакта с адресом произойдет автоматически.</div> </li> <li> -<div style="MARGIN-LEFT: 0px">Если все контакты сопоставлены, то данная ссылка не отображается, открыть окно сопоставления контактов возможно по команде <strong>Еще</strong><strong> - Сохранить адреса в контакты</strong>.</div></li></ul><p style="MARGIN-LEFT: 20px"></p> +<div style="MARGIN-LEFT: 0px">Если все контакты сопоставлены, то данная ссылка не отображается, открыть окно сопоставления контактов возможно по команде <strong>Еще</strong><strong> - Сохранить адреса в контакты</strong>.</div></li></ul><p style="MARGIN-LEFT: 20px"></p> <p></p><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba8695901"> <h3 style="MARGIN-LEFT: 0px">Параметры письма. Изменение папки электронного письма</h3></a> <ul><li> <div style="MARGIN-LEFT: 20px"><a href="DocumentJournal.Взаимодействия.Form.ПараметрыЭлектронногоПисьма/Help">Дополнительную информацию</a> о письме можно узнать, выполнив команду <strong>Еще</strong><strong> - Параметры письма</strong>. </div> </li> <li> -<div style="MARGIN-LEFT: 20px">Для того чтобы изменить папку входящего письма, выполните команду <strong>Еще</strong><strong> - Параметры письма</strong>, в открывшемся окне измените поле <strong>Папка</strong>.</div></li></ul><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba86958fd"> +<div style="MARGIN-LEFT: 20px">Для того чтобы изменить папку входящего письма, выполните команду <strong>Еще</strong><strong> - Параметры письма</strong>, в открывшемся окне измените поле <strong>Папка</strong>.</div></li></ul><a name="70a6370b13ca43baa611bed9691c46111905adcce61f135f174b11e275eba86958fd"> <h3 style="MARGIN-LEFT: 0px">Изменение кодировки письма</h3></a> <ul><li> <div style="MARGIN-LEFT: 20px">Выполните команду <strong>Еще</strong><strong> - Изменить кодировку</strong>. </div> </li> <li> <div style="MARGIN-LEFT: 20px">Выберите из списка нужную кодировку, нажмите <strong>ОК</strong>.</div></li></ul><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ffff6ed7e7bb"> -<h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании входящего письма</h3></a> +<h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании входящего письма</h3></a> <ul><li> -<div style="MARGIN-LEFT: 20px">Нажмите кнопку <strong>Взаимодействия</strong>, для того чтобы:</div> +<div style="MARGIN-LEFT: 20px">Нажмите кнопку <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> <div style="MARGIN-LEFT: 0px"><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li> @@ -103,16 +103,16 @@ <li> <div style="MARGIN-LEFT: 0px"><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e"></a></div></li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="2">Просмотр взаимодействий, созданных на основании письма</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого входящего письма.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> +<div style="MARGIN-LEFT: 0px">Нажмите <strong>Взаимодействия</strong> на панели навигации для перехода к <a href="DocumentJournal.Взаимодействия.Form.ФормаСпискаПараметрическая/Help">списку взаимодействий</a>, созданных на основании этого входящего письма.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> <ul><li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="StdPicture.Print"></img> <strong>Печать</strong>; </div> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="StdPicture.Print"></img><strong>Печать</strong>; </div> </li> <li> <div style="MARGIN-LEFT: 20px">в окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3><a name="1">Работа со списком вложений</a></h3> <ul><li>Если в письме имеются вложения, то с помощью кнопок под таблицей вложений или контекстного меню по правой кнопке мыши можно: -<ul><li><strong><img src="CommonPicture.ОткрытьВыбранныйФайл"></img> Открыть</strong> - открыть файл-вложение с помощью соответствующего внешнего приложения. +<ul><li><strong><img src="CommonPicture.ОткрытьВыбранныйФайл"></img> Открыть</strong> - открыть файл-вложение с помощью соответствующего внешнего приложения. </li> -<li><strong><img src="CommonPicture.СохранитьФайлКак"></img> Сохранить как</strong> - сохранить файл в папку на компьютере. Выберите папку на компьютере, нажмите <strong>Сохранить</strong>. Приложение выводит сообщение об успешном сохранении файла. +<li><strong><img src="CommonPicture.СохранитьФайлКак"></img> Сохранить как</strong> - сохранить файл в папку на компьютере. Выберите папку на компьютере, нажмите <strong>Сохранить</strong>. Приложение выводит сообщение об успешном сохранении файла. </li> <li><strong><img src="StdPicture.Change"></img>Свойства</strong> - просмотр карточки присоединенного файла.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e2ff457d115e93"> </a></li></ul></li></ul><h3><a name="5">Сохранение входящего письма в папку на компьютере</a></h3> <ul><li>Выполните команду <strong>Еще - Сохранить письмо на компьютер</strong>. diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Help/ru.html index fa6f16ebb..231ac1b6a 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Help/ru.html @@ -1,19 +1,19 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> -<p>Предназначен для работы с документами <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Входящее электронное письмо</a>. Этот документ можно только получить, ввести его невозможно.</p> +<p>Предназначен для работы с документами <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">Входящее электронное письмо</a>. Этот документ можно только получить, ввести его невозможно.</p> <p>В списке выводится:</p> -<ul><li><strong>Отправлено</strong> - дата отправки письма; -</li><li><strong>Отправитель</strong> - адрес электронной почты отправителя входящего письма.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a> -</li><li><strong>Тема</strong> - поле заполняется отправителем; </li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> -<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание исходящего электронного письма на основании входящего электронного письма</h3> +<ul><li><strong>Отправлено</strong> - дата отправки письма; +</li><li><strong>Отправитель</strong> - адрес электронной почты отправителя входящего письма.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a> +</li><li><strong>Тема</strong> - поле заполняется отправителем; </li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> +<ul style="MARGIN-LEFT: 40px"><li>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</li></ul><h3 style="MARGIN-LEFT: 0px">Создание исходящего электронного письма на основании входящего электронного письма</h3> <ul><li> <div style="MARGIN-LEFT: 20px">Воспользуйтесь одной из кнопок или командами меню <strong>Еще</strong>:</div> <ul><li><b>Ответить</b> - в созданном <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящем письме</a> в качестве получателя будет указан отправитель письма. Исходящее письмо при этом входит в цепочку взаимодействий. -</li><li><b><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем"></img> Ответить всем</b> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). -</li><li><b><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</b> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма.</li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> +</li><li><b><img src="CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем"></img> Ответить всем</b> - в созданном исходящем письме в качестве получателей будут указаны отправитель и все получатели данного письма (в полях <strong>Кому</strong> и <strong>Копии</strong>). +</li><li><b><img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img> Переслать</b> - получатели не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения входящего письма.</li></ul></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> <ul><li> -<div style="MARGIN-LEFT: 20px">Нажмите <img src="StdPicture.Print"></img> <strong>Печать</strong>; </div> +<div style="MARGIN-LEFT: 20px">Нажмите <img src="StdPicture.Print"></img><strong>Печать</strong>; </div> </li><li> -<div style="MARGIN-LEFT: 20px">в окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании входящего электронного письма</h3> +<div style="MARGIN-LEFT: 20px">в окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании входящего электронного письма</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужный документ. Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -21,7 +21,7 @@ </li><li> <div><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li><li> -<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> +<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> </li><li> <div><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>.</div></li></ul></li></ul><h3>См. также:</h3> <ul><li> diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Help/ru.html index c968c1469..e0570015f 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Help/ru.html @@ -1,16 +1,16 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17126"></meta></head><body> -<p>Предназначен для выбора документа <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Исходящее</a><u> </u><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">электронное письмо</a>. </p> -<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Исходящее электронное письмо</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> +<p>Предназначен для выбора документа <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">Исходящее</a><u> </u><a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">электронное письмо</a>. </p> +<p>Открывается по кнопке <img src="StdPicture.InputFieldSelect"></img> после выбора типа данных <strong>Исходящее электронное письмо</strong> (например, при заполнении поля <strong>Предмет</strong> в каком-либо документе взаимодействий).</p> <p>В списке выводится:</p> -<ul><li><strong>Создано</strong> - дата создания документа; +<ul><li><strong>Создано</strong> - дата создания документа; </li> <li><strong>Номер</strong> - номер присваивается автоматически; </li> -<li><strong>Тема</strong> - краткое описание содержания письма; +<li><strong>Тема</strong> - краткое описание содержания письма; </li> -<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например, претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ взаимодействия начинает цепочку взаимодействий; +<li><strong>Предмет</strong> - то, чему посвящен документ взаимодействий, например, претензии клиента. Предметом могут быть документы приложения и <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">документы взаимодействий</a>. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ взаимодействия начинает цепочку взаимодействий; </li> -<li><strong>Получатели</strong> - контакты, которые указаны в качестве адресатов письма.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a></li></ul><h3>Выбор документа</h3> +<li><strong>Получатели</strong> - контакты, которые указаны в качестве адресатов письма.<a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e30345a0cffc84"> </a></li></ul><h3>Выбор документа</h3> <ul><li> <div>Выделите документ, нажмите <strong>Выбрать</strong>.</div> </li> @@ -21,14 +21,14 @@ <div style="MARGIN-LEFT: 0px">Выделите нужное письмо.</div> </li> <li> -<div style="MARGIN-LEFT: 0px">Нажмите <img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img><strong> Переслать</strong>. В этом случае получатели автоматически не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения выбранного исходящего письма.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> +<div style="MARGIN-LEFT: 0px">Нажмите <img src="CommonPicture.ПереслатьЭлектронноеПисьмо"></img><strong> Переслать</strong>. В этом случае получатели автоматически не заполняются. Будет сформировано исходящее письмо, включающее в себя текст и вложения выбранного исходящего письма.</div></li></ul><h3 style="MARGIN-LEFT: 0px"><a name="#70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e3002e26a1ec7e">Распечатка письма</a></h3> <ul><li> -<div style="MARGIN-LEFT: 0px">Нажмите <img src="StdPicture.Print"></img> <strong>Печать</strong>; </div> +<div style="MARGIN-LEFT: 0px">Нажмите <img src="StdPicture.Print"></img><strong>Печать</strong>; </div> </li> <li> -<div style="MARGIN-LEFT: 0px">В окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> +<div style="MARGIN-LEFT: 0px">В окне <strong>Печать</strong> укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Отбор по периоду</h3> <ul><li> -<div>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании исходящего электронного письма</h3> +<div>С помощью соответствующей команды меню <strong>Еще</strong> можно <strong>Установить интервал дат</strong>.</div></li></ul><h3 style="MARGIN-LEFT: 0px">Создание взаимодействий на основании исходящего электронного письма</h3> <ul><li> <div style="MARGIN-LEFT: 0px">Выделите нужный документ. Нажмите <strong>Взаимодействия</strong>, для того чтобы:</div> <ul><li> @@ -38,7 +38,7 @@ <div><a href="Document.ЗапланированноеВзаимодействие.Form.ФормаДокумента/Help">Запланировать взаимодействие</a>;</div> </li> <li> -<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> +<div><a href="Document.СообщениеSMS.Form.ФормаДокумента/Help">Написать SMS</a>;</div> </li> <li> <div><a href="Document.ТелефонныйЗвонок.Form.ФормаДокумента/Help">Позвонить</a>.</div></li></ul></li></ul><h3>См. также:</h3> diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index ee65847ee..1af2ccb36 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -1142,6 +1142,10 @@ <items xsi:type="form:FormField"> <name>Тема</name> <id>29</id> + <title> + <key>ru</key> + <value>Тема</value> + true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html index b89f9edf1..2f9b3b508 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html @@ -9,17 +9,17 @@

                                                    Как сделать так, чтобы к письму при ответе или пересылке был приложен текст исходного письма?

                                                    Как указать что необходимо уведомление о доставке и/или прочтении письма?

                                                    Как указать, что письмо нужно отправить в определенной кодировке?

                                                    -

                                                    В каких случаях в документе появляется ссылка Сохранить адреса в контакты?

                                                    +

                                                    В каких случаях в документе появляется ссылка Сохранить адреса в контакты?

                                                    Как изменить папку электронного письма?

                                                    Как отправить письмо?

                                                    Какие взаимодействия можно создать на основании исходящего письма?

                                                    Как просмотреть взаимодействия, созданные на основании исходящего письма?

                                                    Как распечатать письмо?

                                                    Какие статусы присваиваются исходящим письмам?

                                                    -

                                                    Как вставить в письмо ссылку на объект информационной базы?

                                                    +

                                                    Как вставить в письмо ссылку на объект информационной базы?

                                                    Как сохранить письмо на компьютер?

                                                    Почта в письме по умолчанию

                                                    -
                                                    • В поле От (электронный адрес отправителя) приложением автоматически проставляется: +
                                                      • В поле От (электронный адрес отправителя) приложением автоматически проставляется:
                                                        • Почта письма-основания, если данное письмо создается на основании другого письма. Например, как ответ на входящее письмо;
                                                        • Первая из доступных настроек почты, если письмо создается не на основании другого письма.
                                                      • @@ -30,84 +30,84 @@
                                                      • Копии - дополнительные адресаты письма. В это поле обычно помещают тех, кто не участвует непосредственно в переписке, но должен быть проинформирован о ее содержании.
                                                      • Скрытые - указанные в данном поле адресаты получат письмо, но остальные адресаты письма не будут знать об этом.
                                                    • -
                                                    • Если в приложении имеются нужные контакты, то указать адресата можно двумя способами: -
                                                      • Вводом по строке - начните вводить имя адресата или адрес его электронной почты, и приложение предложит вам адресата по найденным совпадениям. Будет выполнена его подстановка в письмо. Вводить можно как наименование контакта, так и адрес его электронной почты. Ввести можно несколько адресов через точку с запятой; +
                                                      • Если в приложении имеются нужные контакты, то указать адресата можно двумя способами: +
                                                        • Вводом по строке - начните вводить имя адресата или адрес его электронной почты, и приложение предложит вам адресата по найденным совпадениям. Будет выполнена его подстановка в письмо. Вводить можно как наименование контакта, так и адрес его электронной почты. Ввести можно несколько адресов через точку с запятой;
                                                        • -
                                                        • С помощью подбора адресата - нажмите  Выбрать в поле с адресатом. Откроется Адресная книга, с помощью которой можно подобрать адресатов.
                                                      • -
                                                      • Если контактов нет в приложении, можно заполнить поля с адресатами письма вручную. После отправки письма становится доступной команда Уточнить контакты, с помощью которой можно вызвать Адресную книгу.
                                                      +
                                                    • С помощью подбора адресата - нажмите Выбрать в поле с адресатом. Откроется Адресная книга, с помощью которой можно подобрать адресатов.
                                                    +
                                                  • Если контактов нет в приложении, можно заполнить поля с адресатами письма вручную. После отправки письма становится доступной команда Уточнить контакты, с помощью которой можно вызвать Адресную книгу.

                                                  Заполните необходимые поля:

                                                  • Тема - краткое описание того, чему посвящено письмо.
                                                  • -
                                                  • Письмо - собственно текст письма, располагается на специальной вкладке. +
                                                  • Письмо - собственно текст письма, располагается на специальной вкладке.
                                                  • Комментарий - произвольный текстовый комментарий, дополнительная информация о письме. Располагается на специальной вкладке.
                                                  • -
                                                  • Список вложений - к письму можно прикрепить различные файлы с помощью команд панели навигации. +
                                                  • Список вложений - к письму можно прикрепить различные файлы с помощью команд панели навигации.
                                                  • -
                                                  • Предмет - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы приложения и документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ взаимодействия начинает цепочку взаимодействий. При выполнении команды Взаимодействия из документа предметом взаимодействия во вновь созданном документе будет предмет, указанный в исходном документе, при этом основные поля будут также скопированы. -
                                                    • Для заполнения поля нажмите  Выбрать, выберите тип данных, затем из соответствующего списка выберите конкретный документ.
                                                  • -
                                                  • Ответственный - выберите ответственного за данное взаимодействие из списка пользователей. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего пользователя. +
                                                  • Предмет - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы приложения и документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ взаимодействия начинает цепочку взаимодействий. При выполнении команды Взаимодействия из документа предметом взаимодействия во вновь созданном документе будет предмет, указанный в исходном документе, при этом основные поля будут также скопированы. +
                                                    • Для заполнения поля нажмите Выбрать, выберите тип данных, затем из соответствующего списка выберите конкретный документ.
                                                  • +
                                                  • Ответственный - выберите ответственного за данное взаимодействие из списка пользователей. По умолчанию приложение указывает в качестве ответственного для большинства документов взаимодействия текущего пользователя.
                                                  • -
                                                  • На контроле - признак того, что данное письмо потребует внимания в дальнейшем. В списке взаимодействий выделяется жирным шрифтом. Использовать флажок рекомендуется при коллективной работе с документами взаимодействия. +
                                                  • На контроле - признак того, что данное письмо потребует внимания в дальнейшем. В списке взаимодействий выделяется жирным шрифтом. Использовать флажок рекомендуется при коллективной работе с документами взаимодействия.
                                                  • -
                                                  • Рассмотреть после - необходимо заполнить, если контроль данного письма планируется отложить до определенной даты. Выберите из списка нужное значение: Через 15 мин, Через 30 мин, Через 1 час, Через 3 часа, Завтра. Помимо этих значений можно указать произвольную дату и время с помощью кнопки . +
                                                  • Рассмотреть после - необходимо заполнить, если контроль данного письма планируется отложить до определенной даты. Выберите из списка нужное значение: Через 15 мин, Через 30 мин, Через 1 час, Через 3 часа, Завтра. Помимо этих значений можно указать произвольную дату и время с помощью кнопки .
                                                  • -
                                                  • Важность - признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения Низкая, Обычная (значение по умолчанию), Высокая. Отображается в списке взаимодействий специальными значками. +
                                                  • Важность - признак необходимости акцентировать внимание на данном взаимодействии, или наоборот, признак несущественности. Может принимать значения Низкая, Обычная (значение по умолчанию), Высокая. Отображается в списке взаимодействий специальными значками.
                                                  • -
                                                  • Создано - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле нельзя отредактировать. +
                                                  • Создано - дата и время создания документа. По умолчанию в этом поле приложением автоматически проставляется текущая дата и время записи документа. Поле нельзя отредактировать.
                                                  • -
                                                  • Автор - пользователь, который создал документ. Указывается приложением автоматически. Поле нельзя отредактировать.

                                                  -
                                                  Реквизиты На контроле и Рассмотреть после доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе Администрирование - Органайзер.
                                                  +
                                                • Автор - пользователь, который создал документ. Указывается приложением автоматически. Поле нельзя отредактировать.

                                                +
                                                Реквизиты На контроле и Рассмотреть после доступны для указания, если это предусмотрено настройками приложения. Изменить данные настройки можно в разделе Администрирование - Органайзер.

                                                Редактирование письма в формате HTML

                                                • -
                                                  Редактирование письма в формате HTML доступно, если это предусмотрено настройками приложения. Данную настройку можно изменить в разделе Администрирование - Органайзер, отредактировав значение флажка Исходящие письма в формате HTML.
                                                  +
                                                  Редактирование письма в формате HTML доступно, если это предусмотрено настройками приложения. Данную настройку можно изменить в разделе Администрирование - Органайзер, отредактировав значение флажка Исходящие письма в формате HTML.
                                                • -
                                                  Формат письма по умолчанию определяется согласно формату предыдущего письма, написанного пользователем.
                                                  +
                                                  Формат письма по умолчанию определяется согласно формату предыдущего письма, написанного пользователем.
                                                • Изменить формат редактирования можно при помощи команды меню Еще во время ввода письма.
                                                  • Доступно два формата редактирования письма:
                                                    • -
                                                      Обычный текст - при переключении письма в обычный текст будут утеряны все элементы оформления, картинки и прочие вставленные элементы. Приложение выводит об этом предупреждение. На вопрос приложения для подтверждения действия нажмите Да, для отмены Нет.
                                                      +
                                                      Обычный текст - при переключении письма в обычный текст будут утеряны все элементы оформления, картинки и прочие вставленные элементы. Приложение выводит об этом предупреждение. На вопрос приложения для подтверждения действия нажмите Да, для отмены Нет.
                                                    • -
                                                      HTML - доступно форматирование текста и возможность вставлять в него картинки и ссылки с помощью стандартных команд.
                                                      +
                                                      HTML - доступно форматирование текста и возможность вставлять в него картинки и ссылки с помощью стандартных команд.
                                                      • Стандартные кнопки форматирования размещены над текстом письма, также можно найти команды форматирования текста в меню Еще.
                                                      • С помощью команды меню Еще можно вставить картинку в текст письма. Изменить размер картинки можно дважды кликнув по ней мышью. После этого появляется меню с вводом новых размеров графического изображения. Напишите нужный размер.
                                                • -
                                                   После сохранения введенного письма изменение формата письма становится недоступным.

                                                +
                                                После сохранения введенного письма изменение формата письма становится недоступным.

                                              Добавление вложений

                                              • Список вложений располагается в правой части письма над полем Предмет.
                                              • -
                                                Воспользуйтесь кнопкой Добавить вложение списка вложений.
                                              +
                                              Воспользуйтесь кнопкой Добавить вложение списка вложений.

                                            Добавление письма в качестве вложения

                                            • -
                                              Нажмите кнопку  Добавить письмо как вложение, аналогичную команду можно найти в контекстном меню списка вложений по правой кнопке мыши. Выберите письмо из предлагаемого списка, для добавления дважды щелкните по письму левой кнопкой мыши. Письма добавляются в формате EML.
                                            -

                                            Работа с вложениями

                                            -

                                            Если в письме имеются вложения, то в списке вложений с помощью кнопок или контекстного меню по правой кнопке мыши можно:

                                            -
                                            •  Открыть вложение - открыть файл с помощью соответствующего внешнего приложения. +
                                              Нажмите кнопку Добавить письмо как вложение, аналогичную команду можно найти в контекстном меню списка вложений по правой кнопке мыши. Выберите письмо из предлагаемого списка, для добавления дважды щелкните по письму левой кнопкой мыши. Письма добавляются в формате EML.
                                            +

                                            Работа с вложениями

                                            +

                                            Если в письме имеются вложения, то в списке вложений с помощью кнопок или контекстного меню по правой кнопке мыши можно:

                                            +
                                            • Открыть вложение - открыть файл с помощью соответствующего внешнего приложения.
                                            • -
                                            •  Свойства вложения - просмотр карточки присоединенного файла. С помощью команд панели навигации в карточке можно также подписать вложение электронной цифровой подписью или зашифровать.
                                            • -
                                            • Удалить вложение можно с помощью кнопки Del.
                                            -

                                            Включение текста исходного письма при ответе или пересылке

                                            +
                                          • Свойства вложения - просмотр карточки присоединенного файла. С помощью команд панели навигации в карточке можно также подписать вложение электронной цифровой подписью или зашифровать.
                                          • +
                                          • Удалить вложение можно с помощью кнопки Del.
                                          +

                                          Включение текста исходного письма при ответе или пересылке

                                          • -
                                            Выполните команду Еще - Параметры письма, включите флажок Включать тело исходного письма.
                                            +
                                            Выполните команду Еще - Параметры письма, включите флажок Включать тело исходного письма.
                                          • По умолчанию данное значение заполняется из персональных настроек, которые можно изменить из списка взаимодействий.

                                          Уведомление о доставке и/или прочтении письма

                                          • -
                                            Выполните команду Еще - Параметры письма, включите флажки Уведомить о доставке и Уведомить о прочтении. По умолчанию данные значения заполняются из персональных настроек, которые можно изменить из списка взаимодействий.
                                            +
                                            Выполните команду Еще - Параметры письма, включите флажки Уведомить о доставке и Уведомить о прочтении. По умолчанию данные значения заполняются из персональных настроек, которые можно изменить из списка взаимодействий.
                                          • Отображаются также другие параметры письма и служебная информация.

                                          Выбор кодировки письма

                                          • -
                                            Выполните команду Еще - Изменить кодировку и выберите из списка нужную кодировку.
                                          +
                                          Выполните команду Еще - Изменить кодировку и выберите из списка нужную кодировку.

                                        Ссылка Сохранить адреса в контакты

                                        • Приложение позволяет в качестве участников взаимодействий указывать элементы списков. Например, клиентов или поставщиков. Это позволяет в дальнейшем получить информацию обо всех взаимодействиях с клиентом. Если при создании письма хотя бы один адресат не будет сопоставлен контакту, в письме будет отображаться ссылка Сохранить адреса в контакты. По ссылке открывается Адресная книга, в которой можно будет выполнить сопоставление.
                                          @@ -116,10 +116,10 @@
                                          Если все контакты сопоставлены, то данная ссылка не отображается, можно открыть адресную книгу и произвести сопоставление контактов по команде Еще - Адресная книга.

                                        Изменение папки электронного письма

                                        • -
                                          Выполните команду Еще - Параметры письма, в открывшемся окне выберите другую папку.
                                        +

                                      Отправка письма

                                      • -
                                        Для отправки письма (в файловом варианте) используется кнопка Отправить. В клиент-серверном варианте регламентным заданием осуществляется отправка и получение писем всех пользователей.
                                      +

                                    Создание документов взаимодействий на основании исходящего письма

                                    • Нажмите Взаимодействия, для того чтобы:
                                      @@ -135,13 +135,13 @@

                                  Просмотр взаимодействий, созданных на основании письма

                                  • -
                                    Нажмите Взаимодействия на панели навигации для перехода к списку взаимодействий, созданных на основании этого исходящего письма.
                                  +

                                Распечатка письма

                                • -
                                  Нажмите  Печать.
                                  +
                                  Нажмите Печать.
                                • -
                                  В окне Печать укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.

                                Статусы исходящего письма

                                +
                                В окне Печать укажите необходимые настройки для принтера - количество копий, размер бумаги и т.п.

                              Статусы исходящего письма

                              Исходящим письмам присваиваются следующие статусы:

                              • Если письмо еще не отправлено, то оно имеет статус Черновик. Его можно редактировать и записывать изменения. С помощью соответствующей кнопки можно Отправить письмо (для файлового варианта) и оно перейдет в другой статус.
                              • @@ -149,8 +149,8 @@
                              • После отправки исходящего письма его статус меняется на статус Отправлено. Редактирование такого письма также невозможно.
                              • -
                              • В зависимости от статуса письмо помещается в ту или иную папку. Для размещения писем в папки также можно настроить правила обработки писем.

                              Вставка в письмо ссылок на объекты информационной базы

                              -
                              • С помощью соответствующей команды меню Еще можно Вставить внешнюю ссылку на объект информационной базы. Адрес, по которому информационная база доступна внешнему пользователю, заполняется автоматически. Для получения внутренней ссылки на объект откройте нужный объект, нажмите Ctrl+F11 и вставьте ссылку в соответствующее поле. Нажмите Вставить, в письме будет проставлена необходимая ссылка.

                              Сохранение письма на компьютер

                              +
                            • В зависимости от статуса письмо помещается в ту или иную папку. Для размещения писем в папки также можно настроить правила обработки писем.

                            Вставка в письмо ссылок на объекты информационной базы

                            +
                            • С помощью соответствующей команды меню Еще можно Вставить внешнюю ссылку на объект информационной базы. Адрес, по которому информационная база доступна внешнему пользователю, заполняется автоматически. Для получения внутренней ссылки на объект откройте нужный объект, нажмите Ctrl+F11 и вставьте ссылку в соответствующее поле. Нажмите Вставить, в письме будет проставлена необходимая ссылка.

                            Сохранение письма на компьютер

                            • Выполните команду меню Еще - Сохранить письмо на компьютер.
                            • diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 892916316..f1ae24eee 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -1215,8 +1215,7 @@ КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////// -// Управление доступностью элементов формы. +#Область УправлениеДоступностьюЭлементовФормы &НаКлиенте Процедура УправлениеДоступностью() @@ -1306,6 +1305,8 @@ КонецПроцедуры +#КонецОбласти + #Область РаботаСВложениями &НаСервере @@ -2568,13 +2569,19 @@ Попытка РезультатОтправки = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(ПисьмоОбъект.УчетнаяЗапись, Письмо); Исключение - ТекстОшибки = РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки( - ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка()); + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если Не РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ЭтоОшибкаРаботыИнтернетПочты(ИнформацияОбОшибке) Тогда + ВызватьИсключение; + КонецЕсли; + + ТекстОшибки = РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки( + ИнформацияОбОшибке, ОбщегоНазначения.КодОсновногоЯзыка()); ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , ПисьмоОбъект.Ссылка, ТекстОшибки); - Результат.ТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.ТекстСообщения = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); Результат.ОшибкаПодключения = Истина; Возврат Результат; КонецПопытки; @@ -3180,4 +3187,4 @@ КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Enums/РежимыИспользованияПрограммыЭлектроннойПодписи/РежимыИспользованияПрограммыЭлектроннойПодписи.mdo b/SSL/src/Enums/РежимыИспользованияПрограммыЭлектроннойПодписи/РежимыИспользованияПрограммыЭлектроннойПодписи.mdo index 1b966b576..b7457d577 100644 --- a/SSL/src/Enums/РежимыИспользованияПрограммыЭлектроннойПодписи/РежимыИспользованияПрограммыЭлектроннойПодписи.mdo +++ b/SSL/src/Enums/РежимыИспользованияПрограммыЭлектроннойПодписи/РежимыИспользованияПрограммыЭлектроннойПодписи.mdo @@ -29,10 +29,10 @@ true QuickChoice - Настроена + Настроено ru - Настроена вручную + Настроено вручную diff --git a/SSL/src/Enums/ФорматыВыгрузкиОбъектов/ФорматыВыгрузкиОбъектов.mdo b/SSL/src/Enums/ФорматыВыгрузкиОбъектов/ФорматыВыгрузкиОбъектов.mdo new file mode 100644 index 000000000..f945e9d2e --- /dev/null +++ b/SSL/src/Enums/ФорматыВыгрузкиОбъектов/ФорматыВыгрузкиОбъектов.mdo @@ -0,0 +1,103 @@ + + + + + + + + ФорматыВыгрузкиОбъектов + + ru + Форматы выгрузки объектов + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + XML + + ru + XML (.xml) + + АПК:58 в имени используется сокращение + + + DBF + + ru + DBF (.dbf) + + АПК:58 в имени используется сокращение + + + JSON + + ru + JSON (.json) + + АПК:58 в имени используется сокращение + + + XLS + + ru + Лист Microsoft Excel 97-2003 (.xls) + + АПК:58 в имени используется сокращение + + + XLSX + + ru + Лист Microsoft Excel 2007 (.xlsx) + + АПК:58 в имени используется сокращение + + + TXT + + ru + Текстовый документ UTF-8 (.txt) + + АПК:58 в имени используется сокращение + + + ANSITXT + + ru + Текстовый документ ANSI (.txt) + + АПК:58 в имени используется сокращение + + + HTML5 + + ru + Веб-страница версии 5 (.html) + + АПК:58 в имени используется сокращение + + + MXL + + ru + Табличный документ (.mxl) + + АПК:58 в имени используется сокращение + + diff --git a/SSL/src/Enums/ФорматыСканированногоИзображения/ФорматыСканированногоИзображения.mdo b/SSL/src/Enums/ФорматыСканированногоИзображения/ФорматыСканированногоИзображения.mdo index 80e6d143b..e3350dac9 100644 --- a/SSL/src/Enums/ФорматыСканированногоИзображения/ФорматыСканированногоИзображения.mdo +++ b/SSL/src/Enums/ФорматыСканированногоИзображения/ФорматыСканированногоИзображения.mdo @@ -28,13 +28,6 @@ true BothWays - - PNG - - ru - PNG - - JPG @@ -42,13 +35,6 @@ JPG - - TIF - - ru - TIF - - GIF @@ -56,4 +42,18 @@ GIF + + PNG + + ru + PNG + + + + TIF + + ru + TIF + + diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index 69330f2cf..600db00b9 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -20,6 +20,7 @@ ConstantValueManager.ПараметрыЦентраМониторинга ConstantValueManager.КаталогСообщенийОбменаДаннымиДляLinux ConstantValueManager.СоздаватьПодкаталогиСИменамиВладельцев + ConstantValueManager.КоличествоМесяцевМинимальногоПериодаРассчитанныхИтогов ConstantValueManager.КлассификаторОшибокКриптографии ConstantValueManager.ОсновнойЯзык ConstantValueManager.ИспользоватьПолнотекстовыйПоиск diff --git a/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo b/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo index 361504879..7fe2ac55e 100644 --- a/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo +++ b/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанных/ОтключитьАвтоматическуюСинхронизациюДанных.mdo @@ -7,7 +7,7 @@ Проверяет необходимость отключения автоматической синхронизации данных - InformationRegisterRecordSet.УдалитьНастройкиТранспортаОбмена + CatalogObject.НастройкиТранспортаСообщенийОбмена OnWrite CommonModule.ОбменДаннымиСобытия.ОтключитьАвтоматическуюСинхронизациюДанныхПриЗаписи diff --git a/SSL/src/EventSubscriptions/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи.mdo b/SSL/src/EventSubscriptions/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи.mdo index f85866d64..e8bc6fa85 100644 --- a/SSL/src/EventSubscriptions/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи.mdo +++ b/SSL/src/EventSubscriptions/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи/ПроверитьБезопасныйРежимПередЗаписьюНабораЗаписи.mdo @@ -5,8 +5,9 @@ ru Проверить безопасный режим перед записью набора записи + // АПК:1371 - InformationRegisterRecordSet.НастройкиТранспортаОбменаДанными + InformationRegisterRecordSet.УдалитьНастройкиТранспортаОбменаДанными InformationRegisterRecordSet.ПравилаДляОбменаДанными InformationRegisterRecordSet.ИспользуемыеВидыДоступа InformationRegisterRecordSet.СубъектыДляСкрытияПерсональныхДанных @@ -16,7 +17,6 @@ InformationRegisterRecordSet.НастройкиСинхронизацииФайлов InformationRegisterRecordSet.СообщенияОбменаДаннымиОбластейДанных InformationRegisterRecordSet.ЗначенияГруппДоступаПоУмолчанию - InformationRegisterRecordSet.БезопасноеХранилищеДанныхОбластейДанных InformationRegisterRecordSet.ВерсииПодсистем InformationRegisterRecordSet.ДанныеОбработанныеВЦентральномУзлеРИБ InformationRegisterRecordSet.СоответствияОбъектовИнформационныхБаз @@ -50,6 +50,7 @@ InformationRegisterRecordSet.УничтоженныеПерсональныеДанные InformationRegisterRecordSet.НастройкиТранспортаОбменаОбластейДанных InformationRegisterRecordSet.СогласияНаОбработкуПерсональныхДанных + InformationRegisterRecordSet.БезопасноеХранилищеДанныхОбластейДанных InformationRegisterRecordSet.ПараметрыРаботыВерсийРасширений InformationRegisterRecordSet.ОбластиПерсональныхДанных InformationRegisterRecordSet.ОтправленныеСерверныеОповещения diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index 9b2df115d..04e339aaa 100644 --- a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -16,6 +16,13 @@ ExchangePlan.ОбновлениеИнформационнойБазы.StandardAttribute.Description ExchangePlan.ОбновлениеИнформационнойБазы.StandardAttribute.Code DontUse + + Use + ExchangeDate + + + + Use ThisNode @@ -270,6 +277,9 @@ InformationRegister.УровниСокращенийАдресныхСведений + + Constant.РазрешитьДоступКИнтернетСервисам + InformationRegister.СостоянияОригиналовПервичныхДокументов @@ -420,6 +430,9 @@ Catalog.ОбщиеВнешниеКомпоненты + + Constant.РазрешитьДоступКИнтернетСервисамЭлектроннойПодписи + Constant.СписокЗапрещенныхРасширенийОбластиДанных @@ -477,6 +490,9 @@ Constant.СписокРасширенийТекстовыхФайлов + + InformationRegister.БезопасноеХранилищеДанныхОбластейДанных + InformationRegister.ЗагруженныеВерсииАдресныхСведений @@ -537,6 +553,9 @@ InformationRegister.ЗначенияГруппДоступаПоУмолчанию + + InformationRegister.ОсновныеПечатныеФормыКонтрагентов + Constant.РазрешенныеНеаккредитованныеУЦ @@ -667,7 +686,7 @@ InformationRegister.ДополнительныеАдресныеСведения - InformationRegister.НастройкиТранспортаОбменаДанными + InformationRegister.УдалитьНастройкиТранспортаОбменаДанными Constant.СтатусОбновленияКонфигурации @@ -700,7 +719,7 @@ InformationRegister.ПользовательскиеМакетыПечати - InformationRegister.БезопасноеХранилищеДанныхОбластейДанных + InformationRegister.УдалитьБезопасноеХранилищеДанныхОбластейДанных InformationRegister.МуниципальнаяИерархия @@ -945,6 +964,9 @@ Catalog.ГруппыИсполнителейЗадач + + Catalog.НастройкиТранспортаСообщенийОбмена + Catalog.ЗначенияСвойствОбъектов @@ -999,6 +1021,9 @@ Catalog.ХранилищеДвоичныхДанных + + InformationRegister.ОсновныеПечатныеФормыОбъектов + InformationRegister.НастройкиТранспортаОбменаОбластиДанных diff --git a/SSL/src/FunctionalOptions/ИспользоватьНастройкиПодключенияВМоделиСервиса/ИспользоватьНастройкиПодключенияВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/ИспользоватьНастройкиПодключенияВМоделиСервиса/ИспользоватьНастройкиПодключенияВМоделиСервиса.mdo index 9f48ec72b..5b995f104 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьНастройкиПодключенияВМоделиСервиса/ИспользоватьНастройкиПодключенияВМоделиСервиса.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьНастройкиПодключенияВМоделиСервиса/ИспользоватьНастройкиПодключенияВМоделиСервиса.mdo @@ -7,5 +7,4 @@ InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.ИспользоватьНастройкиПодключенияВМоделиСервиса true - CommonCommand.НастройкиПодключения diff --git a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВМоделиСервиса/ИспользоватьСинхронизациюДанныхВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВМоделиСервиса/ИспользоватьСинхронизациюДанныхВМоделиСервиса.mdo index c7f1bfd5d..84226d2e0 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВМоделиСервиса/ИспользоватьСинхронизациюДанныхВМоделиСервиса.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюДанныхВМоделиСервиса/ИспользоватьСинхронизациюДанныхВМоделиСервиса.mdo @@ -10,4 +10,5 @@ CommonForm.МониторСинхронизацииДанныхВМоделиСервиса Catalog.СценарииОбменовДанными CommonCommand.ПомощникПереходаНаИнтернетВнутренняяПубликация + CommonCommand.ПолучитьНастройкиСинхронизацииДляДругойПрограммы diff --git a/SSL/src/FunctionalOptions/РазрешитьДоступКИнтернетСервисам/РазрешитьДоступКИнтернетСервисам.mdo b/SSL/src/FunctionalOptions/РазрешитьДоступКИнтернетСервисам/РазрешитьДоступКИнтернетСервисам.mdo new file mode 100644 index 000000000..c3cd05d35 --- /dev/null +++ b/SSL/src/FunctionalOptions/РазрешитьДоступКИнтернетСервисам/РазрешитьДоступКИнтернетСервисам.mdo @@ -0,0 +1,10 @@ + + + РазрешитьДоступКИнтернетСервисам + + ru + Разрешить доступ к Интернет-сервисам + + Constant.РазрешитьДоступКИнтернетСервисам + true + diff --git a/SSL/src/HTTPServices/exchange_dsl_1_0_0_1/Module.bsl b/SSL/src/HTTPServices/exchange_dsl_1_0_0_1/Module.bsl new file mode 100644 index 000000000..19be2fcdb --- /dev/null +++ b/SSL/src/HTTPServices/exchange_dsl_1_0_0_1/Module.bsl @@ -0,0 +1,359 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Функция ВерсияИнтерфейса() + + Возврат 1; + +КонецФункции + +Функция ПолучитьВерсию_GET(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + Ответ.УстановитьТелоИзСтроки(ВерсияИнтерфейса()); + Возврат Ответ; + +КонецФункции + +Функция ПолучитьПараметрыИБ_GET(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИмяПланаОбмена = Запрос.ПараметрыЗапроса.Получить("ExchangePlanName"); + КодУзла = Запрос.ПараметрыЗапроса.Получить("NodeCode"); + ЭтоПланОбменаXDTO = Запрос.ПараметрыЗапроса.Получить("IsXDTOExchangePlan"); + + ДополнительныеПараметры = Новый Структура; + Если ЗначениеЗаполнено(ЭтоПланОбменаXDTO) Тогда + ДополнительныеПараметры.Вставить("ЭтоПланОбменаXDTO", Истина); + КонецЕсли; + + СообщениеОбОшибке = ""; + + Попытка + + Параметры = ОбменДаннымиСервер.ПараметрыИнформационнойБазы_20(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке, ДополнительныеПараметры); + + Исключение + + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + Возврат ОтветОшибка(СообщениеОбОшибке); + + КонецПопытки; + + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Параметры); + + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8"); + + Возврат Ответ; + +КонецФункции + +Функция СоздатьУзелОбмена_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ПроверитьИспользованиеОбменаДанными(Истина); + + МодульПомощникНастройки = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными(); + + Попытка + + ТелоКакСтрока = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); + НастройкиПодключенияИзЗапроса = ТранспортСообщенийОбмена.НастройкиПодключенияИзJSON(ТелоКакСтрока); + НастройкиПодключенияИзЗапроса.Вставить("ИдентификаторТранспорта", "ПассивныйРежим"); + НастройкиПодключенияИзЗапроса.Вставить("НастройкиТранспорта", Новый Структура); + + НастройкиПодключения = ТранспортСообщенийОбменаКлиентСервер.СтруктураНастроекПодключения(); + НастройкиПодключения.ИмяПланаОбмена = НастройкиПодключенияИзЗапроса.ИмяПланаОбмена; + + ТранспортСообщенийОбмена.ПроверитьИЗаполнитьНастройкиПодключенияXML(НастройкиПодключения, НастройкиПодключенияИзЗапроса); + + МодульПомощникНастройки.ВыполнитьДействияПоНастройкеОбменаДанными(НастройкиПодключения); + + Исключение + + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииСозданиеОбменаДанными(), + УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + Возврат ОтветОшибка(СообщениеОбОшибке); + + КонецПопытки; + + Возврат Ответ; + +КонецФункции + +Функция ПоместитьФайлДляСопоставления_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИмяПланаОбмена = Запрос.ПараметрыЗапроса.Получить("ExchangePlanName"); + КодУзла = Запрос.ПараметрыЗапроса.Получить("NodeCode"); + ИдентификаторФайла = Запрос.ПараметрыЗапроса.Получить("FileID"); + + Попытка + + ОбменДаннымиОперацииВебСервисов.ПоместитьСообщениеДляСопоставленияДанных( + ИмяПланаОбмена, КодУзла, ИдентификаторФайла); + + Исключение + + Возврат ОтветОшибка(ИнформацияОбОшибке()); + + КонецПопытки; + + Возврат Ответ; + +КонецФункции + +Функция ПоместитьЧастьФайла_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИдентификаторСессии = Новый УникальныйИдентификатор(Запрос.ПараметрыЗапроса.Получить("SessionID")); + НомерЧасти = Число(Запрос.ПараметрыЗапроса.Получить("PartNumber")); + + ДанныеЧасти = Запрос.ПолучитьТелоКакДвоичныеДанные(); + + Попытка + + ОбменДаннымиОперацииВебСервисов.ПоместитьЧастьФайла(ИдентификаторСессии, НомерЧасти, ДанныеЧасти); + + Исключение + + Возврат ОтветОшибка(ИнформацияОбОшибке()); + + КонецПопытки; + + Возврат Ответ; + +КонецФункции + +Функция СобратьФайлИзЧастей_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИдентификаторСессии = Новый УникальныйИдентификатор(Запрос.ПараметрыЗапроса.Получить("SessionID")); + КоличествоЧастей = Число(Запрос.ПараметрыЗапроса.Получить("PartCount")); + ИдентификаторФайла = Неопределено; + + Попытка + ОбменДаннымиОперацииВебСервисов.СобратьФайлИзЧастей(ИдентификаторСессии, КоличествоЧастей, ИдентификаторФайла); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Тело = Новый Структура("FileID", Строка(ИдентификаторФайла)); + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Тело); + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + + Возврат Ответ; + +КонецФункции + +Функция ВыполнитьЗагрузкуДанных_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИмяПланаОбмена = Запрос.ПараметрыЗапроса.Получить("ExchangePlanName"); + КодУзла = Запрос.ПараметрыЗапроса.Получить("NodeCode"); + ИдентификаторФайла = Запрос.ПараметрыЗапроса.Получить("FileID"); + ДлительнаяОперацияРазрешена = Запрос.ПараметрыЗапроса.Получить("TimeConsumingOperationAllowed"); + + ДлительнаяОперация = Неопределено; + ИдентификаторОперации = Неопределено; + + Попытка + ОбменДаннымиОперацииВебСервисов.ВыполнитьЗагрузкуДанных(ИмяПланаОбмена, КодУзла, ИдентификаторФайла, + ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Тело = Новый Структура; + Тело.Вставить("TimeConsumingOperation", ДлительнаяОперация); + Тело.Вставить("OperationID", ИдентификаторОперации); + + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Тело); + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + + Возврат Ответ; + +КонецФункции + +Функция ПолучитьСостояниеДлительнойОперации_GET(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИдентификаторОперации = Запрос.ПараметрыЗапроса.Получить("OperationID"); + СтрокаСообщенияОбОшибке = Неопределено; + + Состояние = ОбменДаннымиОперацииВебСервисов.ПолучитьСостояниеДлительнойОперации(ИдентификаторОперации, СтрокаСообщенияОбОшибке); + + Если ЗначениеЗаполнено(СтрокаСообщенияОбОшибке) Тогда + Возврат ОтветОшибка(СтрокаСообщенияОбОшибке); + КонецЕсли; + + Тело = Новый Структура; + Тело.Вставить("ActionState", Состояние); + Тело.Вставить("Message", СтрокаСообщенияОбОшибке); + + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Тело); + + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + + Возврат Ответ; + +КонецФункции + +Функция ВыполнитьВыгрузкуДанных_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИмяПланаОбмена = Запрос.ПараметрыЗапроса.Получить("ExchangePlanName"); + КодУзла = Запрос.ПараметрыЗапроса.Получить("NodeCode"); + ДлительнаяОперацияРазрешена = Запрос.ПараметрыЗапроса.Получить("TimeConsumingOperationAllowed"); + + ИдентификаторФайла = Неопределено; + ДлительнаяОперация = Неопределено; + ИдентификаторОперации = Неопределено; + + Попытка + ОбменДаннымиОперацииВебСервисов.ВыполнитьВыгрузкуДанных(ИмяПланаОбмена, КодУзла, + ИдентификаторФайла, ДлительнаяОперация, ИдентификаторОперации, ДлительнаяОперацияРазрешена); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Тело = Новый Структура; + Тело.Вставить("TimeConsumingOperation", ДлительнаяОперация); + Тело.Вставить("OperationID", ИдентификаторОперации); + Тело.Вставить("FileID", ИдентификаторФайла); + + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Тело); + + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + + Возврат Ответ; + +КонецФункции + +Функция ПодготовитьФайлДляПолучения_POST(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИдентификаторФайла = Запрос.ПараметрыЗапроса.Получить("FileID"); + РазмерЧасти = Число(Запрос.ПараметрыЗапроса.Получить("BlockSize")); + + ИдентификаторСессии = Неопределено; + КоличествоЧастей = Неопределено; + + Попытка + ОбменДаннымиОперацииВебСервисов.ПодготовитьФайлДляПолучения(ИдентификаторФайла, РазмерЧасти, ИдентификаторСессии, КоличествоЧастей); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Тело = Новый Структура; + Тело.Вставить("SessionID", Строка(ИдентификаторСессии)); + Тело.Вставить("PartCount", КоличествоЧастей); + + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Тело); + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + + Возврат Ответ; + +КонецФункции + +Функция ПолучитьЧастьФайла_GET(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИдентификаторСессии = Новый УникальныйИдентификатор(Запрос.ПараметрыЗапроса.Получить("SessionID")); + НомерЧасти = Число(Запрос.ПараметрыЗапроса.Получить("PartNumber")); + ДанныеЧасти = Неопределено; + + Попытка + ОбменДаннымиОперацииВебСервисов.ПолучитьЧастьФайла(ИдентификаторСессии, НомерЧасти, ДанныеЧасти); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Ответ.УстановитьТелоИзДвоичныхДанных(ДанныеЧасти); + + Возврат Ответ; + +КонецФункции + +Функция УдалитьФайлы_DELETE(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИдентификаторСессии = Новый УникальныйИдентификатор(Запрос.ПараметрыЗапроса.Получить("SessionID")); + + Попытка + ОбменДаннымиОперацииВебСервисов.УдалитьСообщениеОбмена(ИдентификаторСессии); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Возврат Ответ; + +КонецФункции + +Функция УдалитьУзелОбмена_DELETE(Запрос) + + Ответ = Новый HTTPСервисОтвет(200); + + ИмяПланаОбмена = Запрос.ПараметрыЗапроса.Получить("ExchangePlanName"); + КодУзла = Запрос.ПараметрыЗапроса.Получить("NodeCode"); + + Попытка + ОбменДаннымиОперацииВебСервисов.УдалитьУзелОбменаДанными(ИмяПланаОбмена, КодУзла); + Исключение + Возврат ОтветОшибка(ИнформацияОбОшибке()); + КонецПопытки; + + Возврат Ответ; + +КонецФункции + +Функция ОтветОшибка(ИнформацияОбОшибке = "") + + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + СообщениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецЕсли; + + Тело = Новый Структура("Message", СообщениеОбОшибке); + ТелоКакСтрока = ТранспортСообщенийОбмена.ЗначениеВJSON(Тело); + + Ответ = Новый HTTPСервисОтвет(400); + Ответ.УстановитьТелоИзСтроки(ТелоКакСтрока); + + КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Транспорт сообщений обмена'", ОбщегоНазначения.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации( + КлючСообщенияЖурналаРегистрации, + УровеньЖурналаРегистрации.Ошибка,,, + СообщениеОбОшибке); + Возврат Ответ; + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/HTTPServices/exchange_dsl_1_0_0_1/exchange_dsl_1_0_0_1.mdo b/SSL/src/HTTPServices/exchange_dsl_1_0_0_1/exchange_dsl_1_0_0_1.mdo new file mode 100644 index 000000000..e658ac1d3 --- /dev/null +++ b/SSL/src/HTTPServices/exchange_dsl_1_0_0_1/exchange_dsl_1_0_0_1.mdo @@ -0,0 +1,228 @@ + + + exchange_dsl_1_0_0_1 + + ru + Exchange DSL 1.0.0.1 + + exchange_dsl_1_0_0_1 + AutoUse + 20 + + Версия + + ru + Версия + + + + get + + ru + Get + + ПолучитьВерсию_GET + + + + ПараметрыИБ + + ru + Параметры ИБ + + + + get + + ru + Get + + ПолучитьПараметрыИБ_GET + + + + СоздатьУзелОбмена + + ru + Создать узел обмена + + + + post + + ru + Post + + POST + СоздатьУзелОбмена_POST + + + + ПоместитьФайлДляСопоставления + + ru + Поместить файл для сопоставления + + + + post + + ru + Post + + POST + ПоместитьФайлДляСопоставления_POST + + + + ПоместитьЧастьФайла + + ru + Поместить часть файла + + + + post + + ru + Post + + POST + ПоместитьЧастьФайла_POST + + + + СобратьФайлИзЧастей + + ru + Собрать файл из частей + + + + post + + ru + Post + + POST + СобратьФайлИзЧастей_POST + + + + ВыполнитьЗагрузкуДанных + + ru + Выполнить загрузку данных + + + + post + + ru + Post + + POST + ВыполнитьЗагрузкуДанных_POST + + + + ПолучитьСостояниеДлительнойОперации + + ru + Получить состояние длительной операции + + + + get + + ru + Get + + ПолучитьСостояниеДлительнойОперации_GET + + + + ВыполнитьВыгрузкуДанных + + ru + Выполнить выгрузку данных + + + + post + + ru + Post + + POST + ВыполнитьВыгрузкуДанных_POST + + + + ПодготовитьФайлДляПолучения + + ru + Подготовить файл для получения + + + + post + + ru + Post + + POST + ПодготовитьФайлДляПолучения_POST + + + + ПолучитьЧастьФайла + + ru + Получить часть файла + + + + get + + ru + Get + + ПолучитьЧастьФайла_GET + + + + УдалитьФайлы + + ru + Удалить файлы + + + + delete + + ru + Delete + + DELETE + УдалитьФайлы_DELETE + + + + УдалитьУзелОбмена + + ru + Удалить узел обмена + + + + delete + + ru + Delete + + DELETE + УдалитьУзелОбмена_DELETE + + + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html index 29afd8172..99d9f6391 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html @@ -1,16 +1,16 @@

                              В адресном классификаторе хранятся адресные сведения, необходимые для работы в приложении.

                              -

                              Использование адресного классификатора помогает заполнять адреса правильно и быстро. Без этого невозможна сдача отчетности. Например, при сдаче отчетности по работникам в налоговую инспекцию, в пенсионный фонд необходимо заполнить адреса по стандарту, иначе отчетность не будет принята. Кроме того, адреса могут меняться и не всегда можно уследить за этими изменениями самостоятельно. Приложение позволяет управлять адресами и поддерживать их в актуальном состоянии.

                              -

                              Для всех регионов РФ имеется возможность загрузки адресных сведений с сайта поддержки пользователей приложения 1С:Предприятие фирмы "1С", а также из файлов, распространяемых ФНС РФ.

                              -

                              Окно для работы с адресным классификатором открывается по команде Загрузить классификатор раздела Администрирование - Интернет-поддержка и сервисы - Адресный классификатор.

                              +

                              Использование адресного классификатора помогает заполнять адреса правильно и быстро. Без этого невозможна сдача отчетности. Например, при сдаче отчетности по работникам в налоговую инспекцию, в пенсионный фонд необходимо заполнить адреса по стандарту, иначе отчетность не будет принята. Кроме того, адреса могут меняться и не всегда можно уследить за этими изменениями самостоятельно. Приложение позволяет управлять адресами и поддерживать их в актуальном состоянии.

                              +

                              Для всех регионов РФ имеется возможность загрузки адресных сведений с сайта поддержки пользователей приложения 1С:Предприятие фирмы "1С", а также из файлов, распространяемых ФНС РФ.

                              +

                              Окно для работы с адресным классификатором открывается по команде Загрузить классификатор раздела Администрирование - Интернет-поддержка и сервисы - Адресный классификатор.

                              Загрузка адресного классификатора

                              -
                              • При загрузке классификатора можно выбрать один, несколько или все регионы России, по которым необходимо загрузить адресные сведения. Это удобно, т.к. можно не загружать адреса тех регионов, которые заведомо не будут использоваться в работе. Включите флажки рядом с наименованиями нужных регионов. Для того чтобы выбрать все регионы для загрузки, нажмите , для того чтобы отменить выбор, нажмите кнопку . Для поиска регионов в списке используйте кнопку Найти. В нижней части списка идет подсчет количества выбранных регионов. +
                                • При загрузке классификатора можно выбрать один, несколько или все регионы России, по которым необходимо загрузить адресные сведения. Это удобно, т.к. можно не загружать адреса тех регионов, которые заведомо не будут использоваться в работе. Включите флажки рядом с наименованиями нужных регионов. Для того чтобы выбрать все регионы для загрузки, нажмите , для того чтобы отменить выбор, нажмите кнопку . Для поиска регионов в списке используйте кнопку Найти. В нижней части списка идет подсчет количества выбранных регионов.
                                • С помощью переключателя выберите Вариант загрузки:
                                  • С портала 1С:ИТС; -
                                    • Для загрузки необходимо заполнить данные авторизации для подключения к Интернет-поддержке пользователей. 
                                  • -
                                  • Из папки на компьютере.
                                  • -
                                    •  укажите путь к папке (также можно нажать клавишу F4). Скачать адресные сведения для загрузки можно на сайте 1С:ИТС - по ссылке;
                                • +
                                  • Для загрузки необходимо заполнить данные авторизации для подключения к Интернет-поддержке пользователей.
                                  +
                                • Из папки на компьютере.
                                • +
                                  • укажите путь к папке (также можно нажать клавишу F4). Скачать адресные сведения для загрузки можно на сайте 1С:ИТС - по ссылке;
                              • После указания всех параметров нажмите Загрузить адресные сведения.
                              • Во время загрузки приложением выводится сообщение о состоянии загрузки:
                                • количество загружаемых регионов; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index e117eaaa9..71ec9db3f 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -544,8 +544,7 @@ УстановитьРазрешениеЗагрузки(ВыбраноРегионовДляЗагрузки); КонецПроцедуры -////////////////////////////////////////////////////////////////////////////////////////// -// Загрузка адресного классификатор +#Область ЗагрузкаАдресногоКлассификатор // Продолжение загрузки с сайта // @@ -573,7 +572,7 @@ Оповещение.ДополнительныеПараметры.Вставить("КодИсточникаЗагрузки", КодИсточника); Оповещение.ДополнительныеПараметры.Вставить("АдресЗагрузки", АдресИсточника); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры @@ -1099,4 +1098,6 @@ Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтыСтиля.ВажнаяНадписьШрифт); КонецПроцедуры +#КонецОбласти + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html index 1eb63f82b..9f1cc46d9 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html @@ -1,12 +1,12 @@

                                  Предназначена для удаления адресных данных (например, ошибочно загруженных).

                                  -

                                  Открывается по команде Очистка адресных сведений в разделе Администрирование - Интернет-поддержка и сервисы - Классификаторы, курсы валют.

                                  +

                                  Открывается по команде Очистка адресных сведений в разделе Администрирование - Интернет-поддержка и сервисы - Классификаторы, курсы валют.

                                  Очистка адресного классификатора

                                  • Включите флажки рядом с наименованиями нужных регионов.
                                  • Включите флажок Показывать только загруженные регионы, это облегчает выбор.
                                  • -
                                  • Для того чтобы выбрать для очистки все регионы, нажмите , для того чтобы отменить выбор, нажмите . +
                                  • Для того чтобы выбрать для очистки все регионы, нажмите , для того чтобы отменить выбор, нажмите .
                                  • В нижней части списка идет подсчет количества выбранных регионов.
                                  • diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index 57237ef76..c526c790a 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -270,11 +270,8 @@ &НаКлиенте Процедура ПрогрессВыполнения(Результат, ДополнительныеПараметры) Экспорт - Если Результат.Статус = "Выполняется" Тогда - Прогресс = ПрочитатьПрогресс(Результат.ИдентификаторЗадания); - Если Прогресс <> Неопределено Тогда - ТекстСостоянияОчистки = Прогресс.Текст; - КонецЕсли; + Если Результат.Статус = "Выполняется" И Результат.Прогресс <> Неопределено Тогда + ТекстСостоянияОчистки = Результат.Прогресс.Текст; КонецЕсли; КонецПроцедуры @@ -287,11 +284,6 @@ КонецФункции -&НаСервереБезКонтекста -Функция ПрочитатьПрогресс(ИдентификаторЗадания) - Возврат ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания); -КонецФункции - &НаСервереБезКонтекста Функция ЗапуститьФоновуюОчисткуНаСервере(Знач КодыРегионов, Знач УникальныйИдентификатор) diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl index 1c7d4f721..d568c8f29 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/СведенияОбАдресномКлассификаторе/Module.bsl @@ -10,153 +10,9 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - СформироватьОтчет(); + + Отчет = АдресныйКлассификаторСлужебный.ИнформацияДляПоддержки(Параметры.Адрес, Параметры.СведенияОбАдресе); + КонецПроцедуры #КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервере -Процедура СформироватьОтчет() - - СистемнаяИнформация = Новый СистемнаяИнформация; - СведенияОЗагрузкеСубъектовРФ = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ(); - КлассификаторДоступен = СведенияОЗагрузкеСубъектовРФ.Получить("КлассификаторДоступен"); - ИспользоватьЗагруженные = СведенияОЗагрузкеСубъектовРФ.Получить("ИспользоватьЗагруженные"); - - Сведения = Новый Массив; - - Если ЗначениеЗаполнено(Параметры.Адрес) Тогда - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес: %1'"), Параметры.Адрес)); - Сведения.Добавить(""); - КонецЕсли; - - Если ТипЗнч(Параметры.СведенияОбАдресе) = Тип("Структура") Тогда - - Поля = Новый Соответствие; - Поля.Вставить("ИдентификаторАдресногоОбъекта", Истина); - Поля.Вставить("ИдентификаторДома", Истина); - Поля.Вставить("ИдентификаторЗемельногоУчастка", Истина); - Поля.Вставить("Идентификаторы", Истина); - Поля.Вставить("ДополнительныеКоды", Истина); - Поля.Вставить("КодРегиона", Истина); - - Сведения.Добавить(НСтр("ru = 'Коды и идентификаторы адреса:'")); - - Для Каждого Элемент Из Параметры.СведенияОбАдресе Цикл - Если Поля[Элемент.Ключ] <> Истина Тогда - Продолжить; - КонецЕсли; - - Если ТипЗнч(Элемент.Значение)=Тип("Структура") Тогда - Сведения.Добавить(""); - Сведения.Добавить(Элемент.Ключ + ": "); - Для Каждого ЭлементВложенный Из Элемент.Значение Цикл - Если СтрЗаканчиваетсяНа(ЭлементВложенный.Ключ, "Идентификатор") - Или ПустаяСтрока(ЭлементВложенный.Значение) Тогда - Продолжить; - КонецЕсли; - Сведения.Добавить(ЭлементВложенный.Ключ + ": " + ЭлементВложенный.Значение); - КонецЦикла; - Иначе - Сведения.Добавить(Элемент.Ключ + ": " + Элемент.Значение); - КонецЕсли; - КонецЦикла; - - Сведения.Добавить(""); - - КонецЕсли; - - Если Не ИспользоватьЗагруженные Тогда - Сведения.Добавить(НСтр("ru = 'В адресном классификаторе отсутствуют загруженные адресные сведения.'")); - Иначе - Сведения.Добавить(НСтр("ru = 'Автоподбор адреса выполняется по загруженным данным для регионов:'")); - КонецЕсли; - - СведенияОРегионах = Новый СписокЗначений; - - Для Каждого СведенияОЗагрузкеСубъектаРФ Из СведенияОЗагрузкеСубъектовРФ Цикл - - Значение = СведенияОЗагрузкеСубъектаРФ.Значение; - Если ТипЗнч(Значение) = Тип("Структура") И Значение.ИспользоватьЗагруженные Тогда - СведенияОРегионах.Добавить(Формат(СведенияОЗагрузкеСубъектаРФ.Ключ,"ЧЦ=2; ЧВН="), НСтр("ru = 'Загружен'") + " - " + Строка(Значение.ДатаЗагрузки)); - КонецЕсли; - - КонецЦикла; - - СведенияОРегионах.СортироватьПоЗначению(); - - Для Каждого Регион Из СведенияОРегионах Цикл - ИмяРегиона = АдресныйКлассификатор.НаименованиеРегионаПоКоду(Регион.Значение); - СтрокаОтчета = Отчет +Регион.Значение + ", " + ИмяРегиона + ": " + Регион.Представление; - Сведения.Добавить(СтрокаОтчета); - КонецЦикла; - - Сведения.Добавить(""); - - ИПППодключена = Ложь; - Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда - МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); - ИПППодключена = МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); - Если ИПППодключена Тогда - Сведения.Добавить(НСтр("ru = 'Подключен к Интернет-поддержке пользователей: Да.'")); - Иначе - Сведения.Добавить(НСтр("ru = 'Подключен к Интернет-поддержке пользователей: Нет.'")); - КонецЕсли; - Сведения.Добавить(""); - КонецЕсли; - - Если ИПППодключена Тогда - - Если Не АдресныйКлассификаторПовтИсп.ИспользоватьТолькоЗагруженныеДанные() Тогда - - ОписаниеСервиса = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(10); - ИнформацияОСервисе = ОписаниеСервиса.СервисКлассификатора; - СсылкаНаВебСервис = ИнформацияОСервисе.Сервер + ":" + ИнформацияОСервисе.Порт + "/"+ АдресныйКлассификаторСлужебный.ПрефиксВерсииЗапроса(); - Если КлассификаторДоступен Тогда - - Шаблон = НСтр("ru = 'Веб-сервис доступен. - |URL подключения: %1'"); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, СсылкаНаВебСервис)); - - Иначе - - Сведения.Добавить(НСтр("ru = 'Веб-сервис недоступен.'")); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - - МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета"); - Результат = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(СсылкаНаВебСервис,,Ложь); - Сведения.Добавить(Результат.ЖурналДиагностики); - - КонецЕсли; - - КонецЕсли; - Иначе - Сведения.Добавить(НСтр("ru = 'Использование веб-сервиса отключено.'")); - КонецЕсли; - - КонецЕсли; - - Сведения.Добавить(""); - - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Конфигурация: %1'"), Метаданные.Представление())); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия конфигурации: %1'"), Метаданные.Версия)); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия Библиотеки стандартных подсистем: %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки())); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Платформа 1С:Предприятие: %1 (%2)'"), СистемнаяИнформация.ВерсияПриложения, СистемнаяИнформация.ТипПлатформы)); - - Сведения.Добавить(""); - - Сведения.Добавить(НСтр("ru = 'Системная информация'")); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия ОС: %1'"), СистемнаяИнформация.ВерсияОС)); - Сведения.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Оперативная память: %1'"), СистемнаяИнформация.ОперативнаяПамять)); - - Сведения.Добавить(""); - Сведения.Добавить(НСтр("ru = 'Отчет создан'") + ": " + ТекущаяДатаСеанса()); - - Отчет = СтрСоединить(Сведения, Символы.ПС); - -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АрхивСообщенийОбменов/ManagerModule.bsl b/SSL/src/InformationRegisters/АрхивСообщенийОбменов/ManagerModule.bsl index 2f7fea15b..1d3710ef1 100644 --- a/SSL/src/InformationRegisters/АрхивСообщенийОбменов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/АрхивСообщенийОбменов/ManagerModule.bsl @@ -16,6 +16,11 @@ Возврат; КонецЕсли; + ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + Если ПланыОбменаБСП.Найти(УзелИнформационнойБазы.Метаданные().Имя) = Неопределено Тогда + Возврат; + КонецЕсли; + Настройки = РегистрыСведений.НастройкиАрхиваСообщенийОбменов.ПолучитьНастройки(УзелИнформационнойБазы); Если Настройки = Неопределено Или Настройки.КоличествоФайлов = 0 Тогда @@ -38,6 +43,14 @@ ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПомещениеСообщенияВАрхив(), УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + ТекстПричины = НСтр("ru ='Файл не был помещен в архив.'") + Символы.ПС + СообщениеОбОшибке; + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + ПараметрыЗаписи.Вставить("Причина", ТекстПричины); + ПараметрыЗаписи.Вставить("ТипПроблемы", Перечисления.ТипыПроблемОбменаДанными.СообщениеОбменаНеПомещеноВАрхив); + РегистрыСведений.РезультатыОбменаДанными.ДобавитьЗаписьОРезультатахОбмена(ПараметрыЗаписи); + КонецПопытки; КонецПроцедуры @@ -139,18 +152,14 @@ НовыйАрхив.ФайлБольше100Мб = Истина; Причина = НСтр("ru = 'Сообщение обмена больше 100 Мб. Файл не был помещен в архив.'"); - ПараметрыЗаписи = Новый Структура; ПараметрыЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); ПараметрыЗаписи.Вставить("Причина", Причина); ПараметрыЗаписи.Вставить("ТипПроблемы", Перечисления.ТипыПроблемОбменаДанными.СообщениеОбменаНеПомещеноВАрхив); - РегистрыСведений.РезультатыОбменаДанными.ДобавитьЗаписьОРезультатахОбмена(ПараметрыЗаписи); Иначе - - НовыйАрхив.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла)); - + НовыйАрхив.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайла), Новый СжатиеДанных(9)); КонецЕсли; КонецЕсли; @@ -158,9 +167,9 @@ Если УдалитьФайлПослеПомещения Тогда УдалитьФайлы(ИмяФайла); КонецЕсли; - + Набор.Записать(); - + КонецПроцедуры Функция СобытиеЖурналаРегистрацииПомещениеСообщенияВАрхив() diff --git a/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo b/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo index 1df402051..1d58e0210 100644 --- a/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/БезопасноеХранилищеДанныхОбластейДанных/БезопасноеХранилищеДанныхОбластейДанных.mdo @@ -1,13 +1,13 @@ - + - - - - - - - + + + + + + + БезопасноеХранилищеДанныхОбластейДанных @@ -49,7 +49,7 @@ Managed - + Данные ru @@ -64,12 +64,13 @@ Use - + Владелец ru Владелец + АПК:1329, АПК:1330 Универсальный составной тип, т.к. возможна работа с произвольным, заранее неизвестным составом типов. String ExchangePlanRef diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html index eced869e9..e6a27e06b 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html @@ -1,21 +1,21 @@

                                    Предназначен для просмотра истории изменений объекта и выбора хранимых версий. История версий позволяет быстро ответить на вопросы: "Кто изменил объект?", "Когда произошли изменения?" и "Что было изменено в объекте?".

                                    -

                                    С помощью списка можно вести историю изменений документов и списков, просматривать любую версию объекта или сравнивать любые версии объекта между собой.

                                    +

                                    С помощью списка можно вести историю изменений документов и списков, просматривать любую версию объекта или сравнивать любые версии объекта между собой.

                                    Для работы с историей изменений объектов необходимо выполнить предварительную настройку их версионирования. Настройку и просмотр истории версий выполняет администратор приложения.

                                    Для того чтобы посмотреть историю версий того или иного списка или документа, можно воспользоваться командой История изменений в его панели навигации. Команда доступна только администратору приложения и только для тех объектов, у которых настроено версионирование.

                                    В списке выводится:

                                    -
                                    • № - порядковый номер версии, версии перечисляются по убыванию номеров, самая первая версия находится внизу списка; +
                                      • № - порядковый номер версии, версии перечисляются по убыванию номеров, самая первая версия находится внизу списка;
                                      • Автор изменений - пользователь, который редактировал объект;
                                      • Дата - дата и время редактирования;
                                      • -
                                      • Комментарий - напишите подробную информацию по поводу этой версии (возможность доступна пользователю с полными правами). Это может быть полезно, например, при анализе изменений какого-либо документа. Приложение автоматически заполняет это поле, например, при переходе на другую версию указывается, на какую версию и когда был выполнен переход.

                                      Отбор версий

                                      +
                                    • Комментарий - напишите подробную информацию по поводу этой версии (возможность доступна пользователю с полными правами). Это может быть полезно, например, при анализе изменений какого-либо документа. Приложение автоматически заполняет это поле, например, при переходе на другую версию указывается, на какую версию и когда был выполнен переход.

                                    Отбор версий

                                    • -
                                      С помощью отбора Изменения в реквизитах можно отражать изменения определенных реквизитов. Для этого с помощью кнопки  Выбрать откройте список реквизитов, выберите с помощью флажков реквизиты, изменения по которым необходимо отражать в списке версий.

                                    Просмотр событий изменения объекта

                                    +
                                    С помощью отбора Изменения в реквизитах можно отражать изменения определенных реквизитов. Для этого с помощью кнопки Выбрать откройте список реквизитов, выберите с помощью флажков реквизиты, изменения по которым необходимо отражать в списке версий.

                                  Просмотр событий изменения объекта

                                  • По ссылке Технические сведения об изменении объекта сразу после внесения и записи изменений можно просмотреть журнал регистрации, отфильтрованный по событиям, связанным с этим объектом.

                                  Просмотр версии

                                  • Нажав на кнопку Открыть версию, можно просмотреть отчет о состоянии объекта на интересующий момент времени.

                                  Сравнение версий

                                  -
                                  • Для того чтобы просмотреть отчет по изменению состояния объекта, выделите две или более версии в списке версий, нажмите Сравнить версии.

                                  Возвращение к предыдущей версии

                                  -
                                  • Для того чтобы вернуться к одной из предыдущих версий объекта, выделите нужную строку с версией объекта, нажмите Перейти на версию. Изменения, внесенные после сохранения этой версии, будут отменены.

                                  См. также:

                                  +
                                  • Для того чтобы просмотреть отчет по изменению состояния объекта, выделите две или более версии в списке версий, нажмите Сравнить версии.

                                  Возвращение к предыдущей версии

                                  +
                                  • Для того чтобы вернуться к одной из предыдущих версий объекта, выделите нужную строку с версией объекта, нажмите Перейти на версию. Изменения, внесенные после сохранения этой версии, будут отменены.

                                  См. также:

                                  \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl index 219cb4e5d..98be3303e 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl @@ -16,6 +16,10 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; + Для Каждого Запись Из ЭтотОбъект Цикл Запись.РазмерДанных = ВерсионированиеОбъектов.РазмерДанных(Запись.ВерсияОбъекта); diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index 45c6039ca..c7da4f0e6 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -14,6 +14,7 @@ ru Версии объектов + // АПК:1330 Используется универсальный составной тип, так как возможна работа с любыми типами данных. Use Active diff --git a/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..ab9ef7ee0 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/Forms/ФормаСписка/Form.form @@ -0,0 +1,423 @@ + + + + <key>ru</key> + <value>Версии подсистем областей данных</value> + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>User settings group</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ИмяПодсистемы + 16 + true + true + + true + + + Список.ИмяПодсистемы + + true + + ИмяПодсистемыРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ИмяПодсистемыКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Версия + 19 + true + true + + true + + + Список.Версия + + + ВерсияРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВыполненаРегистрацияОтложенныхОбработчиков + 22 + true + true + + true + + + Список.ВыполненаРегистрацияОтложенныхОбработчиков + + + ВыполненаРегистрацияОтложенныхОбработчиковРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ВыполненаРегистрацияОтложенныхОбработчиковКонтекстноеМеню + 23 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЭтоОсновнаяКонфигурация + 25 + true + true + + true + + + Список.ЭтоОсновнаяКонфигурация + + + ЭтоОсновнаяКонфигурацияРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ЭтоОсновнаяКонфигурацияКонтекстноеМеню + 26 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
                                  true
                                  + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + true + AsFileRef + + Список.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
                                  + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 28 + + <key>ru</key> + <value>Включить возможность редактирования</value> + + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
                                  true
                                  + + InformationRegister.ВерсииПодсистемОбластейДанных + true + true + true + true + +
                                  + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + 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..4a3063946 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,30 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo index ae5890827..3e55f4c8a 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo @@ -16,6 +16,7 @@ Версии библиотек этого приложения InDialog + InformationRegister.ВерсииПодсистемОбластейДанных.Form.ФормаСписка Use Active @@ -134,4 +135,13 @@ true + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 8caada955..8086a079a 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -192,8 +192,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -210,8 +209,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции // Удаляет строки, которых не должно быть, если они добавлены каким-либо способом. Процедура УдалитьЛишниеЗаписи(ЕстьИзменения = Неопределено) @@ -449,7 +449,7 @@ НаборЗаписей.Отбор.ЗначениеДоступа.Установить(Выборка.ЗначениеДоступа); НаборЗаписей.Отбор.ГруппаЗначенийДоступа.Установить(Выборка.ГруппаЗначенийДоступа); НаборЗаписей.Отбор.ГруппаДанных.Установить(Выборка.ГруппаДанных); - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); ЕстьИзменения = Истина; КонецЦикла; КонецЕсли; @@ -780,7 +780,7 @@ НаборЗаписей.Отбор.ГруппаДанных.Установить(0); НаборЗаписей.Отбор.ЗначениеДоступа.Установить(Выборка.ЗначениеДоступа); НаборЗаписей.Отбор.ГруппаЗначенийДоступа.Установить(Выборка.ГруппаЗначенийДоступа); - НаборЗаписей.Записать(); // Удаление лишних записей о связях. + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); // Удаление лишних записей о связях. ТипЗначения = ТипЗнч(Выборка.ЗначениеДоступа); ТипОбработан = ОбработанныеТипы.Получить(ТипЗначения); @@ -803,7 +803,7 @@ НаборЗаписей.Отбор.ГруппаЗначенийДоступа.Установить(Выборка.ГруппаЗначенийДоступа); НаборЗаписей.Отбор.ГруппаДанных.Установить(0); ЗаполнитьЗначенияСвойств(Запись, Выборка); - НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); // Добавление недостающих записей о связях. ТипЗначения = ТипЗнч(Выборка.ЗначениеДоступа); ТипОбработан = ОбработанныеТипы.Получить(ТипЗначения); @@ -1172,7 +1172,7 @@ НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда НаборЗаписей.Очистить(); - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); ЕстьИзменения = Истина; КонецЕсли; Возврат; @@ -1416,4 +1416,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html index 95e04ac41..1256e53b1 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html @@ -2,16 +2,16 @@

                                  В этом списке выводятся бизнес-процессы, в которых автором является текущий пользователь.

                                  Открывается по команде Мои бизнес-процессы в разделе Бизнес-процессы и задачи.

                                  В списке выводится:

                                  -
                                  • Номер - присваивается автоматически. Рядом с номером приложение автоматически проставляет один из значков , обозначающий состояние бизнес-процесса; +
                                    • Номер - присваивается автоматически. Рядом с номером приложение автоматически проставляет один из значков , обозначающий состояние бизнес-процесса;
                                    • Наименование - полное наименование бизнес-процесса;
                                    • Дата - дата и время создания бизнес-процесса;
                                    • -
                                    • Завершен - приложение автоматически указывает дату и время выполнения бизнес-процесса.

                                    Включение в список завершенных бизнес-процессов

                                    -
                                    • Установив соответствующий флажок в нижней части окна, можно вывести в списке также завершенные бизнес-процессы (по умолчанию снят).

                                    Работа с бизнес-процессом

                                    +
                                  • Завершен - приложение автоматически указывает дату и время выполнения бизнес-процесса.

                                  Включение в список завершенных бизнес-процессов

                                  +
                                  • Установив соответствующий флажок в нижней части окна, можно вывести в списке также завершенные бизнес-процессы (по умолчанию снят).

                                  Работа с бизнес-процессом

                                  • -
                                    Выделите бизнес-процесс (например, Задание) в списке, нажмите Изменить.

                                  Просмотр карты маршрута бизнес-процесса

                                  +
                                  Выделите бизнес-процесс (например, Задание) в списке, нажмите Изменить.

                                Просмотр карты маршрута бизнес-процесса

                                См. также

                                • Задания. diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl index bef1f0c0a..22ec80713 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/ManagerModule.bsl @@ -26,8 +26,7 @@ // Конец СтандартныеПодсистемы.УправлениеДоступом -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления. +#Область ОбработчикиОбновления Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -167,4 +166,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl index f16b14d47..ed2a39009 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl @@ -24,7 +24,7 @@ Возврат; КонецЕсли; - Если Количество() > 0 + Если Количество() > 0 И Не ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) И (Не ЗначениеЗаполнено(ПараметрыСеанса.ПараметрыОбработчикаОбновления.ОчередьОтложеннойОбработки) Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Или (ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo index 5a7b7abe3..1b858fc76 100644 --- a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo @@ -108,6 +108,7 @@ ru Данные + // АПК:1330 предполагается работа с любыми данными BusinessProcessRef DocumentRef diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index a5f4d5048..d80ad90d4 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -354,8 +354,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Одинаковые обработчики событий форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета. +#Область ОдинаковыеОбработчикиСобытийФормДатыЗапретаИзмененияИРедактированиеДатыЗапрета &НаКлиенте Процедура ОписаниеДатыЗапретаПриИзменении(Элемент) @@ -439,6 +438,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыПользователи &НаКлиенте @@ -623,8 +624,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ПолноеПредставление таблицы формы Пользователи. +#Область ОбработчикиСобытийЭлементаПолноеПредставлениеТаблицыФормыПользователи &НаКлиенте Процедура ПользователиПолноеПредставлениеПриИзменении(Элемент) @@ -706,8 +706,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента Комментарий таблицы формы Пользователи. +#КонецОбласти + +#Область ОбработчикиСобытийЭлементаКомментарийТаблицыФормыПользователи &НаКлиенте Процедура ПользователиКомментарийПриИзменении(Элемент) @@ -728,6 +729,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиСобытийЭлементовТаблицыФормыДатыЗапрета &НаКлиенте @@ -1034,8 +1037,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ПолноеПредставление таблицы формы ДатыЗапрета. +#Область ОбработчикиСобытийЭлементаПолноеПредставлениеТаблицыФормыДатыЗапрета &НаКлиенте Процедура ДатыЗапретаПолноеПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -1122,8 +1124,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий элемента ДатаЗапрета таблицы формы ДатыЗапрета. +#КонецОбласти + +#Область ОбработчикиСобытийЭлементаДатаЗапретаТаблицыФормыДатыЗапрета &НаКлиенте Процедура ДатыЗапретаДатаЗапретаПриИзменении(Элемент) @@ -1136,6 +1139,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -3903,8 +3908,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные функции строк интерфейса пользователя. +#Область ВспомогательныеФункцииСтрокИнтерфейсаПользователя &НаКлиентеНаСервереБезКонтекста Функция ТекстПредставленияДляВсехПользователей(Форма) @@ -3992,3 +3996,5 @@ КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl index 0059d7cc9..abe9bb501 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Module.bsl @@ -96,8 +96,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Одинаковые обработчики событий форм ДатыЗапретаИзменения и РедактированиеДатыЗапрета. +#Область ОдинаковыеОбработчикиСобытийФормДатыЗапретаИзмененияИРедактированиеДатыЗапрета &НаКлиенте Процедура ОписаниеДатыЗапретаПриИзменении(Элемент) @@ -186,6 +185,8 @@ #КонецОбласти +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -217,4 +218,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index 318e2dcea..bd6cd1470 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html @@ -1,56 +1,56 @@

                                  Предназначена для установки даты запрета изменения (загрузки) данных.

                                  -

                                  Запреты загрузки данных могут не использоваться. В этом случае доступно только окно настройки дат запрета изменения данных.

                                  -

                                  Установка даты запрета изменения данных и различные настройки, связанные с ней, выполняются по соответствующей команде в разделе Администрирование - Настройки пользователей и прав - Даты запрета изменения.

                                  +

                                  Запреты загрузки данных могут не использоваться. В этом случае доступно только окно настройки дат запрета изменения данных.

                                  +

                                  Установка даты запрета изменения данных и различные настройки, связанные с ней, выполняются по соответствующей команде в разделе Администрирование - Настройки пользователей и прав - Даты запрета изменения.

                                  Установка даты запрета загрузки данных выполняется по соответствующей команде в разделе Синхронизация данных.

                                  -

                                  О запрете изменения (загрузки) данных

                                  -
                                  • Иногда при работе с приложением требуется установить запрет изменения каких-либо данных до определенной даты. Например, после сдачи квартальной бухгалтерской отчетности в налоговую инспекцию обычно устанавливается запрет изменения тех данных, которые использовались для формирования этой отчетности, то есть данных по последний день отчетного периода. +

                                    О запрете изменения (загрузки) данных

                                    +
                                    • Иногда при работе с приложением требуется установить запрет изменения каких-либо данных до определенной даты. Например, после сдачи квартальной бухгалтерской отчетности в налоговую инспекцию обычно устанавливается запрет изменения тех данных, которые использовались для формирования этой отчетности, то есть данных по последний день отчетного периода.
                                    • -
                                    • Запрет загрузки, в отличие от запрета изменения, может быть установлен для данных, которые должны редактироваться только в одном узле информационной базы, а также по правилам, которые следуют из требований синхронизации данных, а не из типовых бизнес-процессов организации. Например, решение редактировать данные по некоторым организациям только в центральном офисе (в корневом узле), для того чтобы технически обеспечить закрепление ответственности за эти данные за конкретным сотрудником центрального офиса, является основанием запрета загрузки данных из других узлов.

                                    Проявление установленного запрета

                                    -
                                    • Если дата запрета изменения данных установлена, то при попытке внести изменения в приложение до даты запрета изменения выводится сообщение о невозможности изменения данных. -
                                      • Если в закрытом периоде есть объекты, помеченные на удаление, то их удаление будет невозможно. +
                                      • Запрет загрузки, в отличие от запрета изменения, может быть установлен для данных, которые должны редактироваться только в одном узле информационной базы, а также по правилам, которые следуют из требований синхронизации данных, а не из типовых бизнес-процессов организации. Например, решение редактировать данные по некоторым организациям только в центральном офисе (в корневом узле), для того чтобы технически обеспечить закрепление ответственности за эти данные за конкретным сотрудником центрального офиса, является основанием запрета загрузки данных из других узлов.

                                      Проявление установленного запрета

                                      +
                                      • Если дата запрета изменения данных установлена, то при попытке внести изменения в приложение до даты запрета изменения выводится сообщение о невозможности изменения данных. +
                                        • Если в закрытом периоде есть объекты, помеченные на удаление, то их удаление будет невозможно.
                                        • Если дата запрета изменения не установлена, то ограничения не действуют.
                                      • -
                                      • Если дата запрета загрузки данных установлена, то при попытке получить данные в приложение до даты запрета загрузки все запрещенные для получения данные будут пропущены, сведения о них будут записаны в журнал регистрации, а разрешенные данные будут получены.

                                      Установка даты запрета

                                      +
                                    • Если дата запрета загрузки данных установлена, то при попытке получить данные в приложение до даты запрета загрузки все запрещенные для получения данные будут пропущены, сведения о них будут записаны в журнал регистрации, а разрешенные данные будут получены.

                                    Установка даты запрета

                                    • -
                                      В приложении предусмотрена возможность установить или отключить дату запрета изменений (дату запрета загрузки данных). Для этого с помощью кнопки выберите соответствующее значение:
                                      -
                                      • Не установлены - в этом случае отключаются все установленные ранее даты запрета. +
                                        В приложении предусмотрена возможность установить или отключить дату запрета изменений (дату запрета загрузки данных). Для этого с помощью кнопки выберите соответствующее значение:
                                        +
                                        • Не установлены - в этом случае отключаются все установленные ранее даты запрета.
                                        • Для всех пользователей (Для всех информационных баз). -
                                          • При этом становится доступным поле Дата запрета, В нижней части окна становится доступным раздел Другие способы указания даты запрета.
                                        • -
                                        • По пользователям (По информационным базам). Эту возможность можно использовать, если дату запрета необходимо установить для конкретного пользователя или группы пользователей (для конкретной информационной базы), или разным пользователям (информационным базам) необходимо установить разные значения даты запрета. -
                                          • При этом становится доступным список, в который можно добавлять пользователей/группы пользователей(информационные базы) и настраивать для каждого из них свое значение даты запрета. +
                                            • При этом становится доступным поле Дата запрета, В нижней части окна становится доступным раздел Другие способы указания даты запрета.
                                          • +
                                          • По пользователям (По информационным базам). Эту возможность можно использовать, если дату запрета необходимо установить для конкретного пользователя или группы пользователей (для конкретной информационной базы), или разным пользователям (информационным базам) необходимо установить разные значения даты запрета. +
                                            • При этом становится доступным список, в который можно добавлять пользователей/группы пользователей(информационные базы) и настраивать для каждого из них свое значение даты запрета.
                                            • Список состоит из колонок:

                                              • Пользователь, группа пользователей (Приложение: информационная база - наименование приложения и информационной базы для этого приложения).
                                              • -
                                              • Комментарий - напишите дополнительную информацию о пользователе (об информационной базе).
                                            • +
                                            • Комментарий - напишите дополнительную информацию о пользователе (об информационной базе).
                                          • В списке по умолчанию всегда присутствует элемент <Для всех пользователей> (<Для всех информационных баз>). Элемент нельзя удалить или изменить. Настройки даты запрета, выполненные для этого элемента, будут использоваться для всех пользователей (информационных баз), кроме тех, которые содержатся в списке.
                                          • -
                                          • При необходимости добавьте в список нужных пользователей /группу пользователей (информационные базы): -
                                            • Нажмите Подобрать, для того чтобы выбрать из списка несколько пользователей (информационных баз). -
                                              • Если в приложении разрешены внешние пользователи, то предлагается выбрать тип пользователей для установки даты запрета. 
                                            • -
                                            • Нажмите Еще - Добавить над списком, для того чтобы Выбрать пользователя/группу пользователей (приложение и информационную базу для этого приложения. Для каждого приложения можно также выбрать элемент <Все информационные базы>).
                                          • -
                                          • Для того чтобы выполнить настройку даты запрета, необходимо выделить в списке нужного пользователя/группу пользователей (информационную базу) или элемент <Для всех пользователей> (<Для всех информационных баз>), а сами настройки выполнить ниже в полях Способ указания даты запрета и Дата запрета.

                                      Способы указания даты запрета

                                      -

                                      Для настройки перейдите в раздел Другие способы указания даты запрета изменений, в поле Указывать дату запрета укажите нужное значение:

                                      +
                                    • При необходимости добавьте в список нужных пользователей /группу пользователей (информационные базы): +
                                      • Нажмите Подобрать, для того чтобы выбрать из списка несколько пользователей (информационных баз). +
                                        • Если в приложении разрешены внешние пользователи, то предлагается выбрать тип пользователей для установки даты запрета.
                                      • +
                                      • Нажмите Еще - Добавить над списком, для того чтобыВыбрать пользователя/группу пользователей (приложение и информационную базу для этого приложения. Для каждого приложения можно также выбрать элемент <Все информационные базы>).
                                    • +
                                    • Для того чтобы выполнить настройку даты запрета, необходимо выделить в списке нужного пользователя/группу пользователей (информационную базу) или элемент <Для всех пользователей> (<Для всех информационных баз>), а сами настройки выполнить ниже в полях Способ указания даты запрета и Дата запрета.

                                Способы указания даты запрета

                                +

                                Для настройки перейдите в раздел Другие способы указания даты запрета изменений, в поле Указывать дату запрета укажите нужное значение:

                                • Общая дата – при этом способе одна дата запрета задается для всех элементов данных приложения.
                                • По разделам – для каждого раздела приложения устанавливается своя дата запрета.
                                  • Когда дата запрета задается по разделам, становится доступным список, в который можно добавлять Разделы (соответствующей командой) и указывать для каждого раздела свое значение даты запрета. Список состоит из колонок: -
                                    • Раздел, объект - в данном случае в колонке перечисляются разделы приложения; +
                                      • Раздел, объект - в данном случае в колонке перечисляются разделы приложения;
                                      • Дата запрета - выберите из списка тип значения даты запрета (можно выбрать произвольную дату или одну из относительных дат);
                                      • -
                                      • Действует по - для произвольной даты напишите или  выберите значение, для относительной даты значение проставляется приложением автоматически.
                                    • -
                                    • В списке по умолчанию присутствует элемент <Общая дата>. Значение даты запрета для этого элемента будет использоваться для всех разделов по умолчанию, кроме тех, которые уже содержатся в списке.
                                  • -
                                  • По объектам – даты запрета задаются в разрезе объектов приложения. Для каждого объекта устанавливается своя дата запрета. Если выбрано это значение, то становится доступным список, в который можно добавлять объекты (соответствующей командой) и указывать для каждого объекта свое значение даты запрета. Так же, как и в предыдущем способе, в списке для аналогичных целей содержится элемент <Общая дата>. +
                                  • Действует по - для произвольной даты напишите или выберите значение, для относительной даты значение проставляется приложением автоматически.
                                • +
                                • В списке по умолчанию присутствует элемент <Общая дата>. Значение даты запрета для этого элемента будет использоваться для всех разделов по умолчанию, кроме тех, которые уже содержатся в списке.
                              • +
                              • По объектам – даты запрета задаются в разрезе объектов приложения. Для каждого объекта устанавливается своя дата запрета. Если выбрано это значение, то становится доступным список, в который можно добавлять объекты (соответствующей командой) и указывать для каждого объекта свое значение даты запрета. Так же, как и в предыдущем способе, в списке для аналогичных целей содержится элемент <Общая дата>.
                              • -
                              • По разделам и объектам – даты запрета задаются и в разрезе разделов, и в разрезе объектов. -
                                • При этом становится доступным список, в котором перечислены разделы и объекты. Можно указать для каждого раздела и каждого объекта свое значение даты запрета. Так же, как и в предыдущих способах, в списке содержится элемент <Общая дата> для аналогичных целей. +
                                • По разделам и объектам – даты запрета задаются и в разрезе разделов, и в разрезе объектов. +
                                  • При этом становится доступным список, в котором перечислены разделы и объекты. Можно указать для каждого раздела и каждого объекта свое значение даты запрета. Так же, как и в предыдущих способах, в списке содержится элемент <Общая дата> для аналогичных целей.
                                    • Для выбора нескольких объектов в выделенном разделе выполните команду Подобрать.
                                    • -
                                    • Также в нужном разделе можно выполнить команду Добавить контекстного меню по правой кнопки мыши, затем указать объект с помощью кнопки  Выбрать. Также можно воспользоваться аналогичной командой меню Еще.

                                Для того чтобы установить дату запрета изменения нужного раздела (объекта) или изменить общую дату, в нужной строке в колонке Дата запрета выполните команду Изменить контекстного меню по правой кнопке мыши или дважды щелкните по ней мышью. Для задания даты запрета нажмите кнопку Выбрать. После выбора даты для возврата к дальнейшим настройкам нажмите кнопку ОК.

                                +
                              • Также в нужном разделе можно выполнить команду Добавить контекстного меню по правой кнопки мыши, затем указать объект с помощью кнопки Выбрать. Также можно воспользоваться аналогичной командой меню Еще.

                          Для того чтобы установить дату запрета изменения нужного раздела (объекта) или изменить общую дату, в нужной строке в колонке Дата запрета выполните команду Изменить контекстного меню по правой кнопке мыши или дважды щелкните по ней мышью. Для задания даты запрета нажмите кнопку Выбрать. После выбора даты для возврата к дальнейшим настройкам нажмите кнопку ОК.

                          Для отмены даты запрета нажмите кнопку Отключить.

                          Дата запрета

                          • При установке даты запрета можно задавать не только произвольную дату (в этом случае дату можно написать или выбрать из календаря, нажав ), но и относительную. @@ -68,21 +68,21 @@
                          • Предыдущий день.
                        • -
                          Для относительных дат (кроме значения Предыдущий день) можно задать количество дней «отсрочки» до установки даты запрета, в течение которых изменение данных все еще будет разрешено.
                          +
                          Для относительных дат (кроме значения Предыдущий день) можно задать количество дней «отсрочки» до установки даты запрета, в течение которых изменение данных все еще будет разрешено.
                          • -
                            Для этого необходимо включить флажок Разрешить изменение данных до даты запрета. Затем задайте количество дней "отсрочки", например, в течение 10 дней после даты запрета.

                        Отчеты по датам запрета

                        +
                        Для этого необходимо включить флажок Разрешить изменение данных до даты запрета. Затем задайте количество дней "отсрочки", например, в течение 10 дней после даты запрета.

                    Отчеты по датам запрета

                    Отчеты доступны по соответствующей команде. В отчетах возможна группировка данных:

                    -
                    • по разделам/объектам: выберите отчет Даты запрета по разделам и объектам для пользователей (Даты запрета по разделам и объектам для информационных баз); +
                      • по разделам/объектам: выберите отчет Даты запрета по разделам и объектам для пользователей (Даты запрета по разделам и объектам для информационных баз);
                      • -
                      • по пользователям (по информационным базам): выберите отчет Даты запрета по пользователям (Даты запрета по информационным базам).

                      Отчеты позволяют увидеть результирующие даты запрета, установленные для пользователей/групп пользователей (информационных баз) с учетом приоритетов.

                      +
                    • по пользователям (по информационным базам): выберите отчет Даты запрета по пользователям (Даты запрета по информационным базам).

                    Отчеты позволяют увидеть результирующие даты запрета, установленные для пользователей/групп пользователей (информационных баз) с учетом приоритетов.

                    Работа дат запрета изменения

                    -

                    Для конкретного вида документов (Заказ, Реализация и т. д.) может быть определена проверка даты запрета в трёх вариантах:

                    +

                    Для конкретного вида документов (Заказ, Реализация и т. д.) может быть определена проверка даты запрета в трёх вариантах:

                    • по дате документа (без учета раздела и объекта);
                    • по дате документа и разделу;
                    • -
                    • по дате документа, разделу и объекту раздела (например, организации).

                    При проверке даты запрета приложение производит поиск даты запрета, назначенной с максимальной подробностью, которая определена для проверки документа (максимальная подробность: Раздел, Объект).

                    +
                  • по дате документа, разделу и объекту раздела (например, организации).

                  При проверке даты запрета приложение производит поиск даты запрета, назначенной с максимальной подробностью, которая определена для проверки документа (максимальная подробность: Раздел, Объект).

                  Сначала выбирается один вариант из сделанных настроек по порядку:

                  1. Для текущего пользователя.
                  2. -
                  3. Для группы пользователей (последней по порядку в интерфейсе, в которую входит текущий пользователь).
                  4. +
                  5. Для группы пользователей (последней по порядку в интерфейсе, в которую входит текущий пользователь).
                  6. Для всех пользователей.

                  Далее поиск даты запрета выполняется в пределах выбранной настройки по порядку:

                  1. Для раздела, объекта.
                  2. Для раздела, любого объекта.
                  3. diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl index 36f0f080e..caa53bbbb 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/RecordSetModule.bsl @@ -8,12 +8,18 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + +Перем СтарыеЗаписи; // Заполняется ПередЗаписью для использования ПриЗаписи. + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. - ЗаписатьИзмененийВЖурналРегистрации(ЭтотОбъект, Замещение); + ПодготовитьЗаписьИзмененийВЖурналРегистрации(ЭтотОбъект, Замещение, СтарыеЗаписи); // АПК:75-вкл Если ОбменДанными.Загрузка Тогда @@ -30,12 +36,19 @@ Процедура ПриЗаписи(Отказ, Замещение) + // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал. + ЗаписатьИзмененияВЖурналРегистрации(ЭтотОбъект, Замещение, СтарыеЗаписи); + // В режиме ОбменДанными.Загрузка необходимо обновлять УИД в константе ВерсияДатЗапретаИзменения, // который позволять сеансам определить, что нужно обновить кэш дат запрета изменения в памяти. + Если ОбменДанными.Загрузка + И Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда + + ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(ЭтотОбъект); + КонецЕсли; + // АПК:75-вкл + Если ОбменДанными.Загрузка Тогда - Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда - ДатыЗапретаИзмененияСлужебный.ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных(ЭтотОбъект); - КонецЕсли; Возврат; КонецЕсли; @@ -49,28 +62,40 @@ #Область СлужебныеПроцедурыИФункции -Процедура ЗаписатьИзмененийВЖурналРегистрации(ЭтотОбъект, Замещение) +Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - Таблица = Выгрузить(); - Таблица.Колонки.Добавить("ВидИзмененияСтроки", Новый ОписаниеТипов("Число")); - Таблица.ЗаполнитьЗначения(1, "ВидИзмененияСтроки"); + МетаданныеРегистра = Метаданные.РегистрыСведений.ДатыЗапретаИзменения; - Если Замещение Тогда - СтарыеЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); - Для Каждого ЭлементОтбора Из Отбор Цикл - Если ЭлементОтбора.Использование Тогда - СтарыеЗаписи.Отбор[ЭлементОтбора.Имя].Установить(ЭлементОтбора.Значение); - КонецЕсли; - КонецЦикла; - СтарыеЗаписи.Прочитать(); - Для Каждого СтараяЗапись Из СтарыеЗаписи Цикл - НоваяСтрока = Таблица.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтараяЗапись); - НоваяСтрока.ВидИзмененияСтроки = -1; - КонецЦикла; + Поля = Новый Массив; + Поля.Добавить(МетаданныеРегистра.Измерения.Раздел.Имя); + Поля.Добавить(МетаданныеРегистра.Измерения.Объект.Имя); + Поля.Добавить(МетаданныеРегистра.Измерения.Пользователь.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.ДатаЗапрета.Имя); + Поля.Добавить(МетаданныеРегистра.Реквизиты.ОписаниеДатыЗапрета.Имя); + Поля.Добавить(МетаданныеРегистра.Реквизиты.Комментарий.Имя); + + СписокПолей = СтрСоединить(Поля, ","); + + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(НаборЗаписей, Замещение, СписокПолей); + +КонецПроцедуры + +Процедура ЗаписатьИзмененияВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) + + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); + + Таблица = ОбщегоНазначения.ИзменениеЗаписейНабора(СтарыеЗаписи, НаборЗаписей, Замещение); + + ДобавленныеСтроки = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", 1)); + УдаленныеСтроки = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", -1)); + + Если Не ЗначениеЗаполнено(ДобавленныеСтроки) + И Не ЗначениеЗаполнено(УдаленныеСтроки) Тогда + Возврат; КонецЕсли; МетаданныеРегистра = Метаданные.РегистрыСведений.ДатыЗапретаИзменения; @@ -84,17 +109,6 @@ ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Реквизиты.ОписаниеДатыЗапрета, 22); ДобавитьПоле(Поля, ШиринаКолонок, МетаданныеРегистра.Реквизиты.Комментарий, 20); - СписокПолей = СтрСоединить(Поля.ВыгрузитьЗначения(), ","); - Таблица.Свернуть(СписокПолей, "ВидИзмененияСтроки"); - - ДобавленныеСтроки = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", 1)); - УдаленныеСтроки = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", -1)); - - Если Не ЗначениеЗаполнено(ДобавленныеСтроки) - И Не ЗначениеЗаполнено(УдаленныеСтроки) Тогда - Возврат; - КонецЕсли; - Заголовок = Новый Массив; Заголовок.Добавить(""); Для Каждого Поле Из Поля Цикл diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html index 41afa8d0a..9cf7e17d8 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html @@ -1,5 +1,5 @@ -

                    Для некоторых объектов конфигурации можно указать дополнительные сведения, состав и тип которых настраивается администратором.

                    +

                    Для некоторых объектов конфигурации можно указать дополнительные сведения, состав и тип которых настраивается администратором.

                    См. также:

                    \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl index c64f34a78..2edbb99fb 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl @@ -32,8 +32,12 @@ УстановитьПривилегированныйРежим(Истина); Для Каждого Ссылка Из ИзмененныеОбъекты Цикл - ВсеЗаписи = Выгрузить(); - ЗаписиОбъекта = ВсеЗаписи.НайтиСтроки(Новый Структура("Объект", Ссылка)); + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + ЗаписиОбъекта = Новый Массив; + Иначе + ВсеЗаписи = Выгрузить(); + ЗаписиОбъекта = ВсеЗаписи.НайтиСтроки(Новый Структура("Объект", Ссылка)); + КонецЕсли; ИзмененныйОбъект = Ссылка.ПолучитьОбъект(); Если ИзмененныйОбъект <> Неопределено Тогда diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo b/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo index 2183eb560..9b4653059 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo @@ -88,6 +88,7 @@ ru Объект + // АПК:1330 возможно хранение любых данных BusinessProcessRef DocumentRef diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html index 820448def..199fe652e 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html +++ b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html @@ -1,5 +1,5 @@ -

                    Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы приложения.

                    +

                    Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы приложения.

                    Открыть список можно по команде Замеры времени на панели навигации ключевой операции.

                    В списке выводятся:

                    • Ключевая операция - полное наименование ключевой операции; @@ -18,6 +18,6 @@
                    • Пользователь - полное имя пользователя;
                    • -
                    • Дата записи локальная.

                    Данные о замерах приложение заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

                    +
                  4. Дата записи локальная.

                Данные о замерах приложение заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl index 8fc3c63c2..eb5e1a7f4 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -277,9 +277,8 @@ КонецЦикла; - // @query-part-1 // АПК:1297-выкл локализация текста запроса не требуется. - ТекстЗапроса = "ВЫБОР " + ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + " Иначе 0 Конец" + ?(СИменем, " КАК ExecutionTime, ", ","); + ТекстЗапроса = "ВЫБОР " + ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + " Иначе 0 Конец" + ?(СИменем, " КАК ExecutionTime, ", ","); // @query-part-1 // АПК:1297-вкл Возврат ТекстЗапроса; diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html index 58b4a8639..2d4db3177 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html @@ -1,5 +1,5 @@ -

                Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы приложения.

                +

                Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы приложения.

                Открыть список можно по команде Замеры времени на панели навигации ключевой операции.

                В списке выводятся:

                • Ключевая операция - полное наименование ключевой операции; @@ -23,6 +23,6 @@
                • Минимально допустимый уровень - выводится из списка ключевых операций;
                • -
                • Целевое время - выводится из списка ключевых операций.

                Данные о замерах приложение заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

                +
              • Целевое время - выводится из списка ключевых операций.

              Данные о замерах приложение заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl index df2ec137e..f551da973 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -276,9 +276,8 @@ КонецЦикла; - // @query-part-1 // АПК:1297-выкл локализация текста запроса не требуется. - ТекстЗапроса = "ВЫБОР " + ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + " Иначе 0 Конец" + ?(СИменем, " КАК ExecutionTime, ", ","); + ТекстЗапроса = "ВЫБОР " + ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", Символы.ПС) + " Иначе 0 Конец" + ?(СИменем, " КАК ExecutionTime, ", ","); // @query-part-1 // АПК:1297-вкл Возврат ТекстЗапроса; diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl index b2b2ddcf5..d1a55dd5d 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl @@ -21,29 +21,27 @@ Для Каждого Запись Из ЭтотОбъект Цикл Если Запись.БезопасныйРежим <> ТекущийБезопасныйРежим Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Безопасный режим %1 отличается от текущего %2'"), + НСтр("ru = 'Безопасный режим %1 отличается от текущего %2.'"), Запись.БезопасныйРежим, ТекущийБезопасныйРежим); - + КонецЕсли; + + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Продолжить; КонецЕсли; ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( Запись.ТипВладельца, Запись.ИдентификаторПрограммногоМодуля); - - Если ПрограммныйМодуль <> Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда - - БезопасныйРежимПрограммногоМодуля = РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля( - ПрограммныйМодуль); - - Если Запись.БезопасныйРежим <> БезопасныйРежимПрограммногоМодуля Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для программного модуля %1 не может быть выполнен запрос разрешений из безопасного режима %2'"), - Строка(ПрограммныйМодуль), Запись.БезопасныйРежим); - - КонецЕсли; + Если ПрограммныйМодуль = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда + Продолжить; + КонецЕсли; + БезопасныйРежимПрограммногоМодуля = РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля( + ПрограммныйМодуль); + Если Запись.БезопасныйРежим <> БезопасныйРежимПрограммногоМодуля Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для программного модуля %1 не может быть выполнен запрос разрешений из безопасного режима %2.'"), + Строка(ПрограммныйМодуль), Запись.БезопасныйРежим); КонецЕсли; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаЗаписи/Form.form index bfaf1aaeb..f7491f437 100644 --- a/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаЗаписи/Form.form @@ -394,6 +394,94 @@ Normal
              + + ПредставлениеТарифа + 31 + + <key>ru</key> + <value>Тариф</value> + + true + true + + true + + + Запись.ПредставлениеТарифа + + + ПредставлениеТарифаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ПредставлениеТарифаКонтекстноеМеню + 32 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ОписаниеТарифа + 34 + true + true + + true + + + Запись.ОписаниеТарифа + + + ОписаниеТарифаРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ОписаниеТарифаКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 diff --git a/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаСписка/Form.form index b3bf40623..256c4418e 100644 --- a/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/Forms/ФормаСписка/Form.form @@ -411,6 +411,82 @@ true + + ПредставлениеТарифа + 46 + + <key>ru</key> + <value>Тариф</value> + + true + true + + true + + + Список.ПредставлениеТарифа + + + ПредставлениеТарифаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ПредставлениеТарифаКонтекстноеМеню + 47 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ОписаниеТарифа + 49 + true + true + + true + + + Список.ОписаниеТарифа + + + ОписаниеТарифаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ОписаниеТарифаКонтекстноеМеню + 50 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель diff --git a/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/ЗаявленияНаВыпускСертификата.mdo b/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/ЗаявленияНаВыпускСертификата.mdo index 7fd8a675d..5784ebb67 100644 --- a/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/ЗаявленияНаВыпускСертификата.mdo +++ b/SSL/src/InformationRegisters/ЗаявленияНаВыпускСертификата/ЗаявленияНаВыпускСертификата.mdo @@ -173,6 +173,75 @@ Use + + КодТарифа + + ru + Код тарифа + + + String + + 100 + + + + + Use + Use + + + + ОписаниеТарифа + + ru + Описание тарифа + + + String + + + + + Use + Use + + + + ПредставлениеТарифа + + ru + Представление тарифа + + + String + + + + + Use + Use + + + + СертификатОснование + + ru + Сертификат основание + + + CatalogRef.СертификатыКлючейЭлектроннойПодписиИШифрования + + + ru + Сертификат, данные которого использовались при заполнении данных заявления + + + + Use + Use + + СодержаниеЗаявления @@ -208,25 +277,6 @@ Use - - СертификатОснование - - ru - Сертификат основание - - - CatalogRef.СертификатыКлючейЭлектроннойПодписиИШифрования - - - ru - Сертификат, данные которого использовались при заполнении данных заявления - - - - Use - Use - - Сертификат diff --git a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl index e9e0cae44..079647d25 100644 --- a/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗначенияГруппДоступа/ManagerModule.bsl @@ -141,8 +141,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#Область ВспомогательныеПроцедурыИФункции Процедура ОбновитьРазрешенныеЗначения(ИспользуемыеВидыДоступа, ГруппыДоступа, ЕстьИзменения, ПрофильАдминистратор) @@ -780,4 +779,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html index f65e96818..0ac105d7f 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html @@ -1,5 +1,5 @@ -

              В этом списке содержится актуальная (текущая) информация о соответствии пользователей роли и объектам адресации, которая используется механизмом бизнес-процессов для доставки задач конкретным пользователям.

              +

              В этом списке содержится актуальная (текущая) информация о соответствии пользователей роли и объектам адресации, которая используется механизмом бизнес-процессов для доставки задач конкретным пользователям.

              В зависимости от специфики бизнес-процессов задачи могут быть адресованы исполнителю или группе исполнителей как персонально (персональная адресация), так и для некоторых бизнес процессов с использованием ролей бизнес-процесса (ролевая адресация). В случае ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу).

              Ввод исполнителя роли

              • Нажмите Создать, заполните необходимые поля.

              См. также:

              diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html index 29e879f3c..53ccfbf05 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html @@ -1,12 +1,12 @@ -

              Предназначен для назначения пользователей на роль исполнителя.

              -

              Открывается по команде Назначить исполнителей на роль из списка Роли и исполнители задач.

              +

              Предназначен для назначения пользователей на роль исполнителя.

              +

              Открывается по команде Назначить исполнителей на роль из списка Роли и исполнители задач.

              В нижней части списка ведется подсчет назначенных исполнителей.

              Добавление исполнителя

              • Исполнителями некоторых бизнес-процессов могут быть и внешние пользователи (например, партнеры или контактные лица партнеров). -
              • Для выбора одного исполнителя нажмите Добавить. +
              • Для выбора одного исполнителя нажмите Добавить.
              • С помощью кнопки выберите тип списка - Внешние пользователи или Пользователи. -
              • Выберите исполнителя из соответствующего списка.

              Подбор исполнителей

              +
            • Выберите исполнителя из соответствующего списка.

            Подбор исполнителей

            • Для подбора одного или нескольких исполнителей нажмите Подобрать, выберите нужных пользователей из списка.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html index 081872a94..c4c8f30a5 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html @@ -1,20 +1,20 @@

            В списке содержится актуальная (текущая) информация о соответствии пользователей ролям исполнителей.

            Перед началом работы с бизнес-процессами и задачами рекомендуется заполнить список.

            -

            Для того чтобы назначить исполнителей ролей, которые участвуют в бизнес-процессах без объектов адресации, выполните команду Роли и исполнители задач в разделе Администрирование - Органайзер - Бизнес-процессы и задачи.

            -

            Для того чтобы назначить исполнителей на роли, которые участвуют в бизнес-процессах с объектами адресации, необходимо воспользоваться командой Роли и исполнители задач на панели навигации этих объектов, например, на панели навигации Организации.

            +

            Для того чтобы назначить исполнителей ролей, которые участвуют в бизнес-процессах без объектов адресации, выполните команду Роли и исполнители задач в разделе Администрирование - Органайзер - Бизнес-процессы и задачи.

            +

            Для того чтобы назначить исполнителей на роли, которые участвуют в бизнес-процессах с объектами адресации, необходимо воспользоваться командой Роли и исполнители задач на панели навигации этих объектов, например, на панели навигации Организации.

            В списке выводится:

            -
            • Роль - наименование роли. Роли, на которые не назначено ни одного исполнителя, отмечены значком Внимание. Такая ситуация может приводить к возникновению зависших задач (т.е. задач, у которых не существует реального исполнителя). Для контроля зависших задач предназначен Отчет по зависшим задачам, для получения уведомлений по зависшим задачам - предопределенная роль Координатор выполнения задач. +

              Назначение исполнителей на роль

              -

              Назначение исполнителей на роль

              +
              • Выделите роль, нажмите Назначить исполнителей на роль, подберите исполнителей из списка пользователей.
              • Также можно воспользоваться двойным щелчком мыши.

              Предопределенные роли

              В составе приложения поставляются следующие роли:

              -
              Роль Краткое описание
              Координатор выполнения задачПредопределенная роль, используется для получения уведомлений о просроченных и зависших задачах. Сотрудники, назначенные на роль, получают уведомление по всем таким задачам, адресованным любым исполнителям.

              См. также:

              +Предопределенная роль, используется для получения уведомлений о просроченных и зависших задачах. Сотрудники, назначенные на роль, получают уведомление по всем таким задачам, адресованным любым исполнителям.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html index f4cf3386d..269389545 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html @@ -4,8 +4,8 @@

              Ввод исполнителя роли

                -
              • С помощью кнопки выберите тип списка - Внешние пользователи или Пользователи.
              • -
              • Выберите Исполнителя роли из соответствующего списка. +
              • С помощью кнопки выберите тип списка - Внешние пользователи или Пользователи.
              • +
              • Выберите Исполнителя роли из соответствующего списка.
              • В поле Выполняет роль выберите роль исполнителя задач из списка (может быть выбрано приложением по умолчанию).
              • diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html index 44d6a9399..7a6897557 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html @@ -1,5 +1,5 @@ -

                В этом списке содержится актуальная (текущая) информация о соответствии пользователей ролям и объектам адресации, которая используется механизмом бизнес-процессов для доставки задач конкретным исполнителям.

                +

                В этом списке содержится актуальная (текущая) информация о соответствии пользователей ролям и объектам адресации, которая используется механизмом бизнес-процессов для доставки задач конкретным исполнителям.

                В зависимости от специфики бизнес-процессов задачи могут быть адресованы исполнителю или группе исполнителей как персонально (персональная адресация), так и для некоторых бизнес процессов с использованием ролей бизнес-процесса (ролевая адресация). В случае ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, Старший по залу).

                Особенности взаимодействия с внешними пользователями

                • @@ -17,7 +17,7 @@ Иванов И. Задачи, назначенные на роль Старший по залу, попадут в список задач Иванова И.Старший по залу Федоров К. -Задачи, назначенные на роль Старший по залу, попадут в список задач Федорова К.Руководитель +Задачи, назначенные на роль Старший по залу, попадут в список задач Федорова К.Руководитель Петров А. Поручения, выданные роли Руководителя, попадут в список поручений Петрова А.

                  В определенных случаях роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный объекты адресации. Например:

                  diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 4434b14fa..31c78a263 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -11,8 +11,7 @@ #Область ОписаниеПеременных // СтандартныеПодсистемы.УправлениеДоступом -Перем ИзмененныеГруппыИсполнителей; // Массив из СправочникСсылка.ГруппыИсполнителейЗадач - - // группы исполнителей, состав которых был изменен. +Перем СтарыеЗаписи; // Массив из СправочникСсылка.ГруппыИсполнителейЗадач - состав группы исполнителей до изменения. // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти @@ -25,7 +24,7 @@ Возврат; КонецЕсли; - Если Количество() > 0 Тогда + Если Количество() > 0 И Не ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда НовыеИсполнителиЗадач = Выгрузить(); УстановитьПривилегированныйРежим(Истина); ГруппыИсполнителейЗадач = БизнесПроцессыИЗадачиСервер.ГруппыИсполнителейЗадач(НовыеИсполнителиЗадач); @@ -39,13 +38,14 @@ // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - ИзмененныеГруппыИсполнителей = ИзмененныеГруппыИсполнителейЗадач(); + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(ЭтотОбъект, Замещение, СписокПолей()); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры // СтандартныеПодсистемы.УправлениеДоступом + Процедура ПриЗаписи(Отказ, Замещение) Если ОбменДанными.Загрузка Тогда @@ -53,18 +53,41 @@ КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + ИзмененныеЗаписи = ОбщегоНазначения.ИзменениеЗаписейНабора(СтарыеЗаписи, ЭтотОбъект, Замещение, Истина); + ИзмененныеЗаписи.Свернуть("ГруппаИсполнителейЗадач"); + ИзмененныеГруппыИсполнителей = ИзмененныеЗаписи.ВыгрузитьКолонку("ГруппаИсполнителейЗадач"); + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ОбновитьПользователейГруппИсполнителей(ИзмененныеГруппыИсполнителей); + КонецЕсли; КонецПроцедуры + // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #Область СлужебныеПроцедурыИФункции +Функция СписокПолей() + + МетаданныеРегистра = Метаданные(); + + Поля = Новый Массив; + Поля.Добавить(МетаданныеРегистра.Измерения.РольИсполнителя.Имя); + Поля.Добавить(МетаданныеРегистра.Измерения.Исполнитель.Имя); + Поля.Добавить(МетаданныеРегистра.Измерения.ОсновнойОбъектАдресации.Имя); + Поля.Добавить(МетаданныеРегистра.Измерения.ДополнительныйОбъектАдресации.Имя); + Поля.Добавить(МетаданныеРегистра.Реквизиты.ГруппаИсполнителейЗадач.Имя); + + Возврат СтрСоединить(Поля, ","); + +КонецФункции + // СтандартныеПодсистемы.УправлениеДоступом + Функция ИзмененныеГруппыИсполнителейЗадач() Экспорт Запрос = Новый Запрос; @@ -137,6 +160,7 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ГруппаИсполнителейЗадач"); КонецФункции + // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти diff --git a/SSL/src/InformationRegisters/ИспользуемыеВидыДоступа/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИспользуемыеВидыДоступа/RecordSetModule.bsl index 4c1c28e6c..552fb1a02 100644 --- a/SSL/src/InformationRegisters/ИспользуемыеВидыДоступа/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИспользуемыеВидыДоступа/RecordSetModule.bsl @@ -48,26 +48,19 @@ #Область СлужебныеПроцедурыИФункции -Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(ЭтотОбъект, Замещение, СтарыеЗаписи) +Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) - НаборЗаписей = РегистрыСведений.ИспользуемыеВидыДоступа.СоздатьНаборЗаписей(); - - Если Замещение Тогда - Для Каждого ЭлементОтбора Из Отбор Цикл - Если ЭлементОтбора.Использование Тогда - НаборЗаписей.Отбор[ЭлементОтбора.Имя].Установить(ЭлементОтбора.Значение); - КонецЕсли; - КонецЦикла; - НаборЗаписей.Прочитать(); - КонецЕсли; - - СтарыеЗаписи = НаборЗаписей.Выгрузить(); + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(НаборЗаписей, Замещение, СписокПолей()); КонецПроцедуры Процедура ЗаписатьИзмененияВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) - Таблица = Выгрузить(); + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Таблица = НаборЗаписей.Выгрузить(Новый Массив, СписокПолей()); + Иначе + Таблица = НаборЗаписей.Выгрузить(, СписокПолей()); + КонецЕсли; Таблица.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Строка")); Таблица.ЗаполнитьЗначения("Добавлено", "ВидИзменения"); @@ -111,6 +104,19 @@ КонецПроцедуры +// Для процедур ПодготовитьЗаписьИзмененийВЖурналРегистрации, ЗаписатьИзмененияВЖурналРегистрации. +Функция СписокПолей() + + МетаданныеРегистра = Метаданные(); + + Поля = Новый Массив; + Поля.Добавить(МетаданныеРегистра.Измерения.ТипЗначенийДоступа.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.Используется.Имя); + + Возврат СтрСоединить(Поля, ","); + +КонецФункции + #КонецОбласти #Иначе diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl b/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl index 7b1441d27..064ca6f01 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/ManagerModule.bsl @@ -104,7 +104,7 @@ Проблемных = Проблемных + 1; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при обработке записей регистра с отбором %1 по причине: + НСтр("ru = 'Невозможно обработать записи регистра с отбором %1 по причине: |%2'"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ПредставлениеОтбора, diff --git a/SSL/src/InformationRegisters/КлассификаторыМЧД/ManagerModule.bsl b/SSL/src/InformationRegisters/КлассификаторыМЧД/ManagerModule.bsl index e50de3eb0..c89278fc2 100644 --- a/SSL/src/InformationRegisters/КлассификаторыМЧД/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КлассификаторыМЧД/ManagerModule.bsl @@ -23,7 +23,7 @@ Если Не ОбщегоНазначения.РазделениеВключено() Тогда Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "3.1.10.419"; + Обработчик.Версия = "3.1.11.52"; Обработчик.Процедура = "РегистрыСведений.КлассификаторыМЧД.ОчиститьКэшЗагруженныхФайлов"; Обработчик.РежимВыполнения = "Оперативно"; КонецЕсли; diff --git a/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo index e2086dc56..aa2c4aa58 100644 --- a/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo +++ b/SSL/src/InformationRegisters/КлючиДоступаКРегиструРезультатыПроверкиУчета/КлючиДоступаКРегиструРезультатыПроверкиУчета.mdo @@ -104,6 +104,7 @@ ru Поле 1 + АПК:1330 универсальный составной тип, т.к. возможна работа с любыми данными ExchangePlanRef BusinessProcessRef @@ -131,6 +132,7 @@ ru Поле 2 + АПК:1330 универсальный составной тип, т.к. возможна работа с любыми данными EnumRef.ДополнительныеЗначенияДоступа diff --git a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl index 4f726a97a..73bfc2e73 100644 --- a/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КонтактыВзаимодействий/RecordSetModule.bsl @@ -20,17 +20,9 @@ Возврат; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | КонтактыВзаимодействий.Контакт - |ИЗ - | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - |ГДЕ - | КонтактыВзаимодействий.Взаимодействие = &Взаимодействие"; + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(ЭтотОбъект, Замещение, "Контакт"); - Запрос.УстановитьПараметр("Взаимодействие", Отбор.Взаимодействие.Значение); - ДополнительныеСвойства.Вставить("ТаблицаЗаписи", Запрос.Выполнить().Выгрузить()); + ДополнительныеСвойства.Вставить("ТаблицаЗаписи", СтарыеЗаписи); КонецПроцедуры @@ -44,6 +36,12 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + НовыеЗаписи = Выгрузить(Новый Массив, "Контакт"); + Иначе + НовыеЗаписи = Выгрузить(, "Контакт"); + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ @@ -55,12 +53,10 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | КонтактыВзаимодействий.Контакт КАК Контакт + | НовыйНабор.Контакт КАК Контакт |ПОМЕСТИТЬ НовыйНабор |ИЗ - | РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий - |ГДЕ - | КонтактыВзаимодействий.Взаимодействие = &Взаимодействие + | &НовыйНабор КАК НовыйНабор | |ИНДЕКСИРОВАТЬ ПО | Контакт @@ -80,8 +76,8 @@ | СтарыйНабор КАК СтарыйНабор"; Запрос.УстановитьПараметр("СтарыйНабор", ДополнительныеСвойства.ТаблицаЗаписи); - Запрос.УстановитьПараметр("Взаимодействие", Отбор.Взаимодействие.Значение); - Взаимодействия.РассчитатьРассмотреноПоКонтактам(Запрос.Выполнить().Выгрузить()); + Запрос.УстановитьПараметр("НовыйНабор", НовыеЗаписи); + Взаимодействия.РассчитатьРассмотреноПоКонтактам(Запрос.Выполнить().Выгрузить()) КонецПроцедуры diff --git a/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Form.form index 8c11955b6..068f8f19f 100644 --- a/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Form.form @@ -418,6 +418,37 @@ UserCmds Auto + + ФормаОчиститьКонтур + 33 + + <key>ru</key> + <value>Очистить контур</value> + + true + true + + true + + + ФормаОчиститьКонтурРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Command.ОчиститьКонтур + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true @@ -612,6 +643,28 @@ Auto Auto + + ОчиститьКонтур + + <key>ru</key> + <value>Очистить контур</value> + + 3 + + ru + Очистить контур + + + true + + + + ОчиститьКонтур + + + Auto + Auto + diff --git a/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Module.bsl index 37b0abcbe..406e48e51 100644 --- a/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КонтурСинхронизации/Forms/ФормаСписка/Module.bsl @@ -35,6 +35,21 @@ КонецПроцедуры +&НаСервере +Процедура ОчиститьКонтурНаСервере() + + Набор = РегистрыСведений.КонтурСинхронизации.СоздатьНаборЗаписей(); + Набор.Записать(); + + ОбновитьКонтур(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьКонтур(Команда) + ОчиститьКонтурНаСервере(); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаСписка/Module.bsl index f5fa8890f..03b200082 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/Forms/ФормаСписка/Module.bsl @@ -38,11 +38,7 @@ &НаСервереБезКонтекста Функция ВыполняетсяЗагрузкаКурсов(Валюта) - ВалютыЗагружаемыеИзИнтернета = Новый Массив; - Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда - ВалютыЗагружаемыеИзИнтернета = Обработки["ЗагрузкаКурсовВалют"].ВалютыЗагружаемыеИзИнтернета(); - КонецЕсли; - + ВалютыЗагружаемыеИзИнтернета = Справочники.Валюты.ВалютыЗагружаемыеИзИнтернета(); Если ВалютыЗагружаемыеИзИнтернета.Найти(Валюта) = Неопределено Тогда Возврат Ложь; КонецЕсли; diff --git a/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html b/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html index 5efe1ed83..3c5cf6067 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html +++ b/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html @@ -1,6 +1,6 @@

                  Предназначен для хранения и просмотра курсов валют.

                  -

                  Курсы валют можно загружать с портала 1С:ИТС, автоматически (с помощью регламентного задания) или вручную (см. загрузка курсов валют).

                  +

                  Курсы валют можно загружать с портала 1С:ИТС, автоматически (с помощью регламентного задания) или вручную (см. загрузка курсов валют).

                  Открывается по соответствующей команде в панели навигации валюты.

                  Если нет возможности загружать курсы с портала 1С:ИТС, их можно ввести вручную.

                  В списке выводится:

                  @@ -12,13 +12,13 @@
                • Кратность.

                Ввод курса валюты вручную

                • -
                  Нажмите Создать, 
                  +
                  Нажмите Создать,
                • -
                  выберите из списка Валюту (соответствует списку Валюты).
                  +
                  выберите из списка Валюту (соответствует списку Валюты).
                • -
                  введите Дату курса или выберите с помощью календаря, 
                  +
                  введите Дату курса или выберите с помощью календаря,
                • введите Курс,
                  diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index edb2e1e27..52977e783 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -28,13 +28,13 @@ Если ДополнительныеСвойства.Свойство("ОтключитьКонтрольПодчиненныхВалют") Тогда Возврат; КонецЕсли; - + ДополнительныеСвойства.Вставить("ЗависимыеВалюты", Новый Соответствие); - Если Количество() > 0 Тогда + Если Количество() > 0 И Не ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда ОбновитьКурсыПодчиненныхВалют(); Иначе - УдалитьКурсыПодчиненныхВалют(); + УдалитьКурсыЗависимыхВалют(Замещение); КонецЕсли; КонецПроцедуры @@ -152,23 +152,63 @@ // Очищает курсы зависимых валют. // -Процедура УдалитьКурсыПодчиненныхВалют() +Процедура УдалитьКурсыЗависимыхВалют(Знач РежимЗамещенияУдаление) + + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(РежимЗамещенияУдаление) Тогда + УдалитьКурсыПоНаборуЗаписей(РежимЗамещенияУдаление); + Иначе + УдалитьКурсыПоОтбору(); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьКурсыПоОтбору() ВалютаВладелец = Отбор.Валюта.Значение; Период = Отбор.Период.Значение; - ЗависимаяВалюта = Неопределено; - Если ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты", ЗависимаяВалюта) Тогда - ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта, Период); - УдалитьКурсыВалюты(ЗависимаяВалюта, Период); + Если ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты") Тогда + ЗависимыеВалюты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДополнительныеСвойства.ОбновитьКурсЗависимойВалюты); Иначе - ЗависимыеВалюты = РаботаСКурсамиВалют.СписокЗависимыхВалют(ВалютаВладелец, ДополнительныеСвойства); + ЗависимыеВалюты = РаботаСКурсамиВалют.СписокЗависимыхВалют(ВалютаВладелец, ДополнительныеСвойства).ВыгрузитьКолонку("Ссылка"); + КонецЕсли; + + Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл + ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта, Период); + УдалитьКурсыВалюты(ЗависимаяВалюта, Период); + КонецЦикла; + +КонецПроцедуры + +Процедура УдалитьКурсыПоНаборуЗаписей(Знач РежимЗамещенияУдаление) + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + Блокировка = Новый БлокировкаДанных; + + Для Каждого Запись Из ЭтотОбъект Цикл + Если ДополнительныеСвойства.Свойство("ОбновитьКурсЗависимойВалюты") Тогда + ЗависимыеВалюты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДополнительныеСвойства.ОбновитьКурсЗависимойВалюты); + Иначе + ЗависимыеВалюты = РаботаСКурсамиВалют.СписокЗависимыхВалют(Запись.Валюта, ДополнительныеСвойства).ВыгрузитьКолонку("Ссылка"); + КонецЕсли; + Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл - ЗаблокироватьКурсЗависимойВалюты(ЗависимаяВалюта.Ссылка, Период); - КонецЦикла; - Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл - УдалитьКурсыВалюты(ЗависимаяВалюта.Ссылка, Период); + Для Каждого ЗависимаяВалюта Из ЗависимыеВалюты Цикл + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КурсыВалют"); + ЭлементБлокировки.УстановитьЗначение("Валюта", ЗависимаяВалюта); + ЭлементБлокировки.УстановитьЗначение("Период", Запись.Период); + КонецЦикла; + + УдаляемаяЗапись = НаборЗаписей.Добавить(); + УдаляемаяЗапись.Валюта = ЗависимаяВалюта; + УдаляемаяЗапись.Период = Запись.Период; КонецЦикла; + КонецЦикла; + + Если НаборЗаписей.Количество() > 0 Тогда + Блокировка.Заблокировать(); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); + НаборЗаписей.Записать(РежимЗамещенияУдаление); КонецЕсли; КонецПроцедуры @@ -180,9 +220,12 @@ НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); НаборЗаписей.Записать(); КонецПроцедуры - + Функция КурсВалютыПоФормуле(Валюта, Формула, Период) + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Расчет курса валюты ""%1"" по формуле ""%2"" за период ""%3""не выполнен:'", + ОбщегоНазначения.КодОсновногоЯзыка()), Валюта, Формула, Период); + Попытка Результат = Справочники.Валюты.КурсВалютыПоФормуле(Формула, Период, КодыВалют()); Исключение @@ -193,9 +236,6 @@ ОшибкаРасчетаКурсаПоФормуле.Вставить(Валюта, Истина); ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Расчет курса валюты ""%1"" по формуле ""%2"" за период ""%3""не выполнен:'", - ОбщегоНазначения.КодОсновногоЯзыка()), Валюта, Формула, Период); - ОбщегоНазначения.СообщитьПользователю(ТекстОшибки + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Валюта, "Объект.ФормулаРасчетаКурса"); diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl index 8137f933b..39dafa17d 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/Forms/ФормаЗаписи/Module.bsl @@ -40,7 +40,7 @@ Если ТекущийОбъект.ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ВерсииИнтерфейса Тогда Данные = ОбщегоНазначения.ЗначениеИзСтрокиXML(Тело); - ТекущийОбъект.Данные = Новый ХранилищеЗначения(Данные); + ТекущийОбъект.Данные = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9)); ИначеЕсли ТекущийОбъект.ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса Тогда @@ -51,7 +51,7 @@ ТекстовыйДокумент.Записать(ВременныйФайл); ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл); - ТекущийОбъект.Данные = Новый ХранилищеЗначения(ДвоичныеДанные); + ТекущийОбъект.Данные = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); УдалитьФайлы(ВременныйФайл); diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl index f128c4182..68ee07141 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl @@ -84,7 +84,7 @@ Для Каждого Строка Из ДанныеДляЗаписи Цикл Данные = РегистрыСведений.КэшПрограммныхИнтерфейсов.ПодготовитьДанныеКэшаВерсий(Строка.ТипДанных, ПараметрыПолучения); - Строка.Данные = Новый ХранилищеЗначения(Данные); + Строка.Данные = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9)); КонецЦикла; diff --git a/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/ManagerModule.bsl b/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/ManagerModule.bsl index b55521d20..1de657592 100644 --- a/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/ManagerModule.bsl @@ -113,17 +113,17 @@ Если ДоверенностьДляПроверки.Зарегистрировать Тогда ДоверенностьДляПроверки.ЗапросСтатусаТранзакции = Ложь; ДоверенностьДляПроверки.ЗапросСтатусаДоверенности = Ложь; - УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(ДоверенностьДляПроверки.ФайлДоверенности); + ПодписиОбъекта = ЭлектроннаяПодпись.ПодписиОбъекта(ДоверенностьДляПроверки.ФайлДоверенности); СвойстваФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИДвоичныеДанные( ДоверенностьДляПроверки.ФайлДоверенности,, Новый УникальныйИдентификатор); - Если УстановленныеПодписи.Количество() = 0 Тогда + Если ПодписиОбъекта.Количество() = 0 Тогда Возврат; КонецЕсли; ДанныеПодписей = Новый Массив; - Для Каждого УстановленнаяПодпись Из УстановленныеПодписи Цикл + Для Каждого УстановленнаяПодпись Из ПодписиОбъекта Цикл ДанныеПодписей.Добавить(УстановленнаяПодпись.Подпись); КонецЦикла; @@ -269,7 +269,8 @@ НаборЗаписей.Отбор.МашиночитаемаяДоверенность.Установить(МашиночитаемаяДоверенность); ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), ДоверенностьДляПроверки); НаборЗаписей[0].МашиночитаемаяДоверенность = МашиночитаемаяДоверенность; - НаборЗаписей[0].ДанныеОшибкиЗапросаСтатуса = Новый ХранилищеЗначения(ДоверенностьДляПроверки.ДанныеОшибкиЗапросаСтатуса); + НаборЗаписей[0].ДанныеОшибкиЗапросаСтатуса = Новый ХранилищеЗначения(ДоверенностьДляПроверки.ДанныеОшибкиЗапросаСтатуса, + Новый СжатиеДанных(9)); НаборЗаписей.Записать(); Если ДоверенностьДляПроверки.ЗаписыватьВДокумент = Истина Тогда diff --git a/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/RecordSetModule.bsl b/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/RecordSetModule.bsl index 383d13921..c06b7cf70 100644 --- a/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/МашиночитаемыеДоверенностиСтатусы/RecordSetModule.bsl @@ -8,6 +8,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + +Перем СтарыеЗаписи; // Заполняется ПередЗаписью для использования ПриЗаписи. + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -16,31 +22,41 @@ Возврат; КонецЕсли; - ОтборПоДоверенности = Отбор.Найти("МашиночитаемаяДоверенность"); - ДополнительныеСвойства.Вставить("ТаблицаЗаписи", ПрочитатьСтатус(ОтборПоДоверенности.Значение)); - + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; + + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(ЭтотОбъект, Замещение, "МашиночитаемаяДоверенность,ТехническийСтатус,Подписана"); + КонецПроцедуры Процедура ПриЗаписи(Отказ, Замещение) + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - - ТаблицаЗаписи = ДополнительныеСвойства.ТаблицаЗаписи; + + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; ИзменившиесяСтатусы = Новый Соответствие; Для каждого Запись Из ЭтотОбъект Цикл Статусы = Новый Структура; Статусы.Вставить("НовыйСтатус", Запись.ТехническийСтатус); + Статусы.Вставить("Подписана", Запись.Подписана); - ЗаписьДоИзменения = ТаблицаЗаписи.Найти(Запись.МашиночитаемаяДоверенность, "МашиночитаемаяДоверенность"); + ЗаписьДоИзменения = СтарыеЗаписи.Найти(Запись.МашиночитаемаяДоверенность, "МашиночитаемаяДоверенность"); Если ЗаписьДоИзменения <> Неопределено Тогда Статусы.Вставить("СтатусДоИзменения", ЗаписьДоИзменения.ТехническийСтатус); Иначе Статусы.Вставить("СтатусДоИзменения", Перечисления.ТехническиеСтатусыМЧД.ПустаяСсылка()); КонецЕсли; - ИзменившиесяСтатусы.Вставить(Запись.МашиночитаемаяДоверенность, Статусы); + Если ЗаписьДоИзменения = Неопределено Или ЗаписьДоИзменения.Подписана <> Статусы.Подписана + Или Статусы.СтатусДоИзменения <> Статусы.НовыйСтатус Тогда + ИзменившиесяСтатусы.Вставить(Запись.МашиночитаемаяДоверенность, Статусы); + КонецЕсли; КонецЦикла; Если ИзменившиесяСтатусы.Количество() > 0 Тогда @@ -51,26 +67,6 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции - -Функция ПрочитатьСтатус(МашиночитаемаяДоверенность) - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ТекущиеЗаписи.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность, - | ТекущиеЗаписи.ТехническийСтатус КАК ТехническийСтатус - |ИЗ - | РегистрСведений.МашиночитаемыеДоверенностиСтатусы КАК ТекущиеЗаписи - |ГДЕ - | ТекущиеЗаписи.МашиночитаемаяДоверенность = &МашиночитаемаяДоверенность"; - - Запрос.УстановитьПараметр("МашиночитаемаяДоверенность", МашиночитаемаяДоверенность); - - Результат = Запрос.Выполнить(); - Возврат Результат.Выгрузить(); -КонецФункции - -#КонецОбласти - #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли diff --git a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo index fc1fdec9f..8599b7ff4 100644 --- a/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo +++ b/SSL/src/InformationRegisters/НазначениеДополнительныхОбработок/НазначениеДополнительныхОбработок.mdo @@ -111,6 +111,7 @@ Объект назначения + CatalogRef.ИдентификаторыОбъектовРасширений CatalogRef.ИдентификаторыОбъектовМетаданных diff --git a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl index 3b94f26ea..27cbcd9ca 100644 --- a/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаличиеФайлов/ManagerModule.bsl @@ -120,14 +120,13 @@ // Выборка данных для многопоточного обновления. ОбрабатываемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры); - ПолноеИмяРегистра = "РегистрСведений.НаличиеФайлов"; - Если ОбрабатываемыеДанные.Количество() = 0 Тогда - Параметры.ОбработкаЗавершена = НЕ ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, - ПолноеИмяРегистра); + Параметры.ОбработкаЗавершена = Истина; Возврат; КонецЕсли; + ПолноеИмяРегистра = "РегистрСведений.НаличиеФайлов"; + ДопПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); ДопПараметры.ЭтоНезависимыйРегистрСведений = Истина; ДопПараметры.ПолноеИмяРегистра = ПолноеИмяРегистра; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ВсеНапоминания/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ВсеНапоминания/Form.form index a3d335bba..d551479c2 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ВсеНапоминания/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ВсеНапоминания/Form.form @@ -41,6 +41,10 @@ Список 3 + + <key>ru</key> + <value>Список</value> + true true @@ -564,6 +568,10 @@ true Список + + <key>ru</key> + <value>Список</value> + 1 DynamicList diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html index 9aa0d2c8d..5b56f3989 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html @@ -5,7 +5,7 @@
                • Описание - текст напоминания;
                • -
                • Время события - время, на которое было назначено напоминание в момент его создания, или время в предмете напоминания, если Срок напоминания относительный; +
                • Время события - время, на которое было назначено напоминание в момент его создания, или время в предмете напоминания, если Срок напоминания относительный;
                • Источник - ссылка на объект приложения, с которым это напоминание связано. Для того, чтобы просмотреть объект приложения, перейдите по ссылке.

                Ввод напоминания

                • Можно ввести напоминание по поводу какого-либо персонального события или дела, не связанного ни с каким конкретным объектом приложения. @@ -14,7 +14,7 @@
                • В колонке Источник у таких напоминаний в списке указано Не задан.

                Просмотр напоминания

                • -
                  Для того чтобы просмотреть или отредактировать напоминание, выделите нужную строку в списке, нажмите Изменить.

                Отмена напоминания

                +
                Для того чтобы просмотреть или отредактировать напоминание, выделите нужную строку в списке, нажмите Изменить.

              Отмена напоминания

              • Выделите нужную строку в списке, нажмите Удалить.
              • diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html index 15c0cb7ec..27c448a29 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html @@ -2,7 +2,7 @@

                В приложении можно вводить напоминания, указав время и предмет, по поводу которого в приложении в указанное время будет выведен список напоминаний.

                Напоминания предоставляют возможность пользователю самому себе устанавливать напоминания о необходимости вернуться к определенному предмету.

                Предметом напоминаний могут быть различные справочники, документы и другие объекты приложения. Например, напоминание можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.

                -

                Открывается по кнопке  Органайзер - Напомнить из различных объектов приложения. При этом можно ввести только одно напоминание для одного объекта.

                +

                Открывается по кнопке Органайзер - Напомнить из различных объектов приложения. При этом можно ввести только одно напоминание для одного объекта.

                Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке Мои напоминания по команде Создать. Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения.

                Ввод напоминания

                • Откорректируйте или напишите текст напоминания. @@ -14,12 +14,12 @@
                • Через определенный интервал. Для этого выберите значение из списка для задания интервала, через который напоминание сработает. Также можно с помощью клавиатуры указать произвольное количество часов, например, через 10 часов. Приложение автоматически высчитывает дату и время срабатывания напоминания и выводит ее в скобках рядом с полем Напомнить.
                • -
                • Относительно предмета - для указания времени напоминания относительно даты в предмете напоминания, например, относительно срока исполнения в задаче. Это значение поля Напомнить отображается и предлагается приложением по умолчанию, когда у предмета существует по меньшей мере одно поле с датой в будущем времени. Выберите из списка, за сколько времени до Срока необходимо вывести напоминание. Если такая дата в предмете меняется, автоматически меняется и срок напоминания. Если дата в предмете по какой-то причине будет сброшена, то срок напоминания будет считаться подошедшим и напоминание будет выведено досрочно. +
                • Относительно предмета - для указания времени напоминания относительно даты в предмете напоминания, например, относительно срока исполнения в задаче. Это значение поля Напомнить отображается и предлагается приложением по умолчанию, когда у предмета существует по меньшей мере одно поле с датой в будущем времени. Выберите из списка, за сколько времени до Срока необходимо вывести напоминание. Если такая дата в предмете меняется, автоматически меняется и срок напоминания. Если дата в предмете по какой-то причине будет сброшена, то срок напоминания будет считаться подошедшим и напоминание будет выведено досрочно.
                • -
                • Периодически - для периодических напоминаний, например, можно выбрать из списка значение по понедельникам в 9-00, или ввести другое расписание. Для ввода своего расписания выберите из списка значение по заданному расписанию и произведите необходимые настройки.

              Отмена напоминания

              +
            • Периодически - для периодических напоминаний, например, можно выбрать из списка значение по понедельникам в 9-00, или ввести другое расписание. Для ввода своего расписания выберите из списка значение по заданному расписанию и произведите необходимые настройки.

            Отмена напоминания

            • Для того чтобы отменить напоминание, нажмите Удалить.
            • -
              Приложение выводит сообщение, в котором требует подтверждения. Для подтверждения нажмите Удалить. Для отмены своего действия нажмите Не удалять.

            См. также:

            +
            Приложение выводит сообщение, в котором требует подтверждения. Для подтверждения нажмите Удалить. Для отмены своего действия нажмите Не удалять.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html index e36968f75..618d351fe 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html @@ -2,9 +2,9 @@

            Предназначена для вывода сработавших напоминаний.

            В указанное в напоминании время в приложении открывается список Напоминания. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания.

            По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета, например, со сроком по задаче, то в напоминании указывается, сколько времени осталось до этого события. В списке можно:

            -
            • Перейти к элементу справочника или другому объекту приложения, с которым связано напоминание (с помощью кнопки Открыть или двойному щелчку мыши). Если напоминание не связано с объектом приложения, то открывается само напоминание. +
              • Перейти к элементу справочника или другому объекту приложения, с которым связано напоминание (с помощью кнопки Открыть или двойному щелчку мыши). Если напоминание не связано с объектом приложения, то открывается само напоминание.
              • С помощью кнопки Прекратить отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку Прекратить продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в списке Мои напоминания.
              • -
              • С помощью кнопки Отложить все напоминания в списке отложить на время, указанное в поле Напомнить через. Для заполнения поля выберите значение из списка, или с помощью клавиатуры, указав произвольное значение времени.

              См. также:

              +
            • С помощью кнопки Отложить все напоминания в списке отложить на время, указанное в поле Напомнить через. Для заполнения поля выберите значение из списка, или с помощью клавиатуры, указав произвольное значение времени.

            См. также:

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html index 90eaa5da8..93e7d90b4 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html @@ -2,14 +2,14 @@

            В приложении можно вводить напоминания, указав время и предмет, по поводу которого в приложении в указанное время будет выведен список напоминаний.

            Напоминания предоставляют возможность пользователю самому себе устанавливать напоминания о необходимости вернуться к определенному предмету.

            Предметом напоминаний могут быть различные справочники, документы и другие объекты приложения. Например, напоминание можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.

            -

            Открывается по кнопке  Органайзер - Напомнить из различных объектов приложения. При этом можно ввести только одно напоминание для одного объекта.

            +

            Открывается по кнопке Органайзер - Напомнить из различных объектов приложения. При этом можно ввести только одно напоминание для одного объекта.

            Также можно ввести напоминание, связанное с каким-либо персональным событием или делом, в списке Мои напоминания по команде Создать. Такое напоминание может быть полезно, например, для того чтобы не забыть вовремя поздравить коллегу с днем рождения. Совместно с заметками напоминания хорошо подходят как электронная замена "стикеров на краях монитора".

            -

            Список напоминаний

            -
            • В указанное в напоминании время в приложении открывается список Напоминания. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания. По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета (например, со сроком по задаче), то в напоминании указывается, сколько времени осталось до этого события. +

              Список напоминаний

              +
              • В указанное в напоминании время в приложении открывается список Напоминания. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания. По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета (например, со сроком по задаче), то в напоминании указывается, сколько времени осталось до этого события.
              • Из списка можно перейти к элементу справочника или документу, с которым связано напоминание (по команде Открыть или двойному щелчку мыши). Если напоминание не связано с объектом приложения, то открывается само напоминание.
              • -
              • С помощью кнопки Прекратить можно отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку Прекратить продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в списке Мои напоминания. +
              • С помощью кнопки Прекратить можно отменить выделенные в списке напоминания, удалив их из списка. Периодическое напоминание после нажатия на кнопку Прекратить продолжает действовать согласно настроенному расписанию. Полностью прекратить такое напоминание можно в списке Мои напоминания.
              • По команде Отложить все напоминания в списке можно отложить на время, указанное в поле Напомнить через. Поле Напомнить через можно заполнить, выбрав значение из списка, или с помощью клавиатуры, указав произвольное значение времени.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl index 9732ce91d..3a67f06e0 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl @@ -62,7 +62,7 @@ КонецФункции -Процедура ОтправитьОповещениеКлиенту(СтарыеЗаписи, НовыеЗаписи, Отказ, Замещение) +Процедура ОтправитьОповещениеКлиенту(СтарыеЗаписи, НаборЗаписей, Отказ, Замещение) Если Отказ Или Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда @@ -70,17 +70,10 @@ КонецЕсли; СписокПолей = "Пользователь, ВремяСобытия, Источник, СрокНапоминания, Описание, Идентификатор"; - Если Замещение Тогда - ИзмененныеЗаписи = ИзмененныеЗаписи(СтарыеЗаписи, НовыеЗаписи, СписокПолей); - Иначе - ИзмененныеЗаписи = ЭтотОбъект; - КонецЕсли; + ИзмененныеЗаписи = ИзмененныеЗаписи(СтарыеЗаписи, НаборЗаписей, Замещение, СписокПолей); НапоминанияПользователей = Новый Соответствие; Для Каждого Запись Из ИзмененныеЗаписи Цикл - Если Запись.СрокНапоминания > ГраницаСрокаНапоминания Тогда - Продолжить; - КонецЕсли; Напоминания = НапоминанияПользователей.Получить(Запись.Пользователь); Если Напоминания = Неопределено Тогда Напоминания = НапоминанияПользователяСлужебный.НовыеИзмененныеНапоминания(); @@ -90,7 +83,7 @@ ЗаполнитьЗначенияСвойств(Свойства, Запись); Свойства.Вставить("ИндексКартинки", 2); Свойства.Вставить("НавигационнаяСсылка", НапоминанияПользователяСлужебный.НавигационнаяСсылкаНапоминания(Свойства)); - Если Не Замещение Или Запись.ВидИзмененияСтроки = 1 Тогда + Если Запись.ВидИзмененияСтроки = 1 Тогда Напоминания.Добавленные.Добавить(Свойства); Иначе Напоминания.Удаленные.Добавить(Свойства); @@ -122,7 +115,6 @@ Функция СтарыеЗаписи(НаборЗаписей, Отказ, Замещение) Если Отказ - Или Не Замещение Или Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда Возврат Неопределено; КонецЕсли; @@ -145,22 +137,21 @@ Запрос.УстановитьПараметр("ГраницаСрокаНапоминания", ГраницаСрокаНапоминания); - УсловиеОтбора = "ИСТИНА"; - Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл - Если Не ЭлементОтбора.Использование Тогда - Продолжить; - КонецЕсли; - УсловиеОтбора = УсловиеОтбора + " - | И " + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; - Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); - КонецЦикла; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", УсловиеОтбора); + Параметры = ОбщегоНазначения.НовыеПараметрыОтбораЗаписейНабораИзБазыДанных(); + Параметры.ПсевдонимТаблицы = "Напоминания."; + ОбщегоНазначения.ОтборЗаписейНабораИзБазыДанных(НаборЗаписей, Замещение, Запрос, Параметры); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции -Функция ИзмененныеЗаписи(СтарыеЗаписи, НовыеЗаписи, СписокПолей) +Функция ИзмененныеЗаписи(СтарыеЗаписи, НаборЗаписей, Замещение, СписокПолей) + + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + НовыеЗаписи = НаборЗаписей.Выгрузить(Новый Массив); + Иначе + НовыеЗаписи = НаборЗаписей.Выгрузить(); + КонецЕсли; Для Каждого Запись Из НовыеЗаписи Цикл Если Запись.СрокНапоминания > ГраницаСрокаНапоминания Тогда diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 39c88cd5a..a7d0743c5 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -96,10 +96,11 @@ + Символы.ПС; Если ВозможныеПрава.ПоТипам.Получить(ТипВладельца) = Неопределено Тогда - ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для типа ""%1"" |не настроено использование настроек прав объектов.'"), Строка(ТипВладельца)); + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ВозможныеПрава.ПоТипамСсылок.Получить(ТипВладельца) = Неопределено Тогда diff --git a/SSL/src/InformationRegisters/НастройкиАрхиваСообщенийОбменов/НастройкиАрхиваСообщенийОбменов.mdo b/SSL/src/InformationRegisters/НастройкиАрхиваСообщенийОбменов/НастройкиАрхиваСообщенийОбменов.mdo index 378a966a1..0ad610626 100644 --- a/SSL/src/InformationRegisters/НастройкиАрхиваСообщенийОбменов/НастройкиАрхиваСообщенийОбменов.mdo +++ b/SSL/src/InformationRegisters/НастройкиАрхиваСообщенийОбменов/НастройкиАрхиваСообщенийОбменов.mdo @@ -105,26 +105,6 @@ Use - - ПолныйПутьLinux - - ru - Полный путь linux - - - String - - - - ru - Полный путь в Linux - - - - Use - Use - - СжиматьФайлы diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index b8d1de762..e1c9e142f 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -129,8 +129,7 @@ КонецЦикла; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики чтения / записи настроек доступности варианта отчета. +#Область ОбработчикиЧтенияЗаписиНастроекДоступностиВариантаОтчета Процедура ПрочитатьНастройкиДоступностиВариантаОтчета(ВариантОтчета, ПользователиВарианта, ИспользоватьГруппыПользователей = Неопределено, ИспользоватьВнешнихПользователей = Неопределено) Экспорт @@ -385,19 +384,19 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | НЕОПРЕДЕЛЕНО КАК Пользователь |ИЗ - | Справочник.ВариантыОтчетов КАК Отчеты + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов - | ПО РазмещениеОтчетов.Ссылка = Отчеты.Ссылка + | ПО РазмещениеОтчетов.Ссылка = ВариантыОтчетов.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ОтчетыКонфигурации - | ПО ОтчетыКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ПО ОтчетыКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации - | ПО РазмещениеОтчетовКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ПО РазмещениеОтчетовКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ОтчетыРасширений - | ПО ОтчетыРасширений.Ссылка = Отчеты.ПредопределенныйВариант + | ПО ОтчетыРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений - | ПО РазмещениеОтчетовРасширений.Ссылка = Отчеты.ПредопределенныйВариант + | ПО РазмещениеОтчетовРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант |ГДЕ - | Отчеты.Ссылка = &ВариантОтчета + | ВариантыОтчетов.Ссылка = &ВариантОтчета | И ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, | ЕСТЬNULL(РазмещениеОтчетовКонфигурации.Подсистема, РазмещениеОтчетовРасширений.Подсистема)) ЕСТЬ NULL @@ -508,16 +507,18 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики оповещения пользователей варианта отчета. +#КонецОбласти + +#Область ОбработчикиОповещенияПользователейВариантаОтчета // Создает сообщение в контексте варианта отчета, уведомляющее пользователей, // которым предоставлены права на данный вариант отчета. // // Параметры: -// Записи - РегистрСведенийНаборЗаписей.НастройкиВариантовОтчетов +// Записи - РегистрСведенийНаборЗаписей.НастройкиВариантовОтчетов +// Замещение - РежимЗамещения, Булево // -Процедура ОповеститьПользователейВариантаОтчета(Записи) Экспорт +Процедура ОповеститьПользователейВариантаОтчета(Записи, Замещение) Экспорт Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Обсуждения") Тогда Возврат; @@ -535,38 +536,39 @@ УстановитьПривилегированныйРежим(Истина); Получатели = Новый Массив; - ЭлементОтбора = Записи.Отбор.Найти("Вариант"); - ПользователиВарианта = ПользователиВариантаОтчета(ЭлементОтбора.Значение); - - Пока ПользователиВарианта.Следующий() Цикл - Получатели.Добавить(ПользователиВарианта.Ссылка); - КонецЦикла; - - Если Получатели.Количество() = 0 Тогда - Возврат; + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(Записи, Замещение, "Вариант"); + Если СтарыеЗаписи.Количество() = 0 Тогда + ЭлементОтбора = Записи.Отбор.Найти("Вариант"); + Варианты = ЭлементОтбора.Значение; + Иначе + Варианты = СтарыеЗаписи.ВыгрузитьКолонку("Вариант"); КонецЕсли; + ПользователиВарианта = ПользователиВариантаОтчета(Варианты); - ВариантОтчета = Записи[0].Вариант; - Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Пока ПользователиВарианта.Следующий() Цикл + + ВариантОтчета = ПользователиВарианта.Вариант; + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Настроен отчет %1'"), ПолучитьНавигационнуюСсылку(ВариантОтчета)); - - Сообщение = МодульОбсуждения.ОписаниеСообщения(Текст); - Попытка - МодульОбсуждения.ОтправитьСообщение(Пользователи.ТекущийПользователь(), Получатели, - Сообщение, ВариантОтчета); - Исключение - КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); - ПредставлениеВариантаОтчета = Строка(ВариантОтчета); - ЗаписьЖурналаРегистрации( + Сообщение = МодульОбсуждения.ОписаниеСообщения(Текст); + Попытка + МодульОбсуждения.ОтправитьСообщение(Пользователи.ТекущийПользователь(), ПользователиВарианта.Ссылка, + Сообщение, ВариантОтчета); + Исключение + + КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); + ПредставлениеВариантаОтчета = Строка(ВариантОтчета); + ЗаписьЖурналаРегистрации( НСтр("ru = 'Варианты отчетов'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка,, ПредставлениеВариантаОтчета, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; + + КонецПопытки; + КонецЦикла; КонецПроцедуры @@ -575,7 +577,8 @@ Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Составы.Пользователь КАК Ссылка, - | Пользователи.ИдентификаторПользователяИБ КАК Идентификатор + | Пользователи.ИдентификаторПользователяИБ КАК Идентификатор, + | Настройки.Вариант КАК Вариант |ИЗ | РегистрСведений.НастройкиВариантовОтчетов КАК Настройки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК Составы @@ -585,7 +588,7 @@ | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи | ПО Пользователи.Ссылка = Составы.Пользователь |ГДЕ - | Настройки.Вариант = &ВариантОтчета + | Настройки.Вариант В (&ВариантОтчета) | И Настройки.Подсистема = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) | И НЕ ТИПЗНАЧЕНИЯ(Настройки.Пользователь) В ( | ТИП(Справочник.ВнешниеПользователи), @@ -606,8 +609,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления. +#КонецОбласти + +#Область ОбработчикиОбновления // Регистрирует данные к обновлению в плане обмена ОбновлениеИнформационнойБазы // см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления. @@ -619,29 +623,29 @@ Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | Отчеты.Ссылка КАК Вариант, + | ВариантыОтчетов.Ссылка КАК Вариант, | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) КАК Подсистема, | НЕОПРЕДЕЛЕНО КАК Пользователь, | ВЫБОР - | КОГДА Отчеты.ВидимостьПоУмолчаниюПереопределена + | КОГДА ВариантыОтчетов.ВидимостьПоУмолчаниюПереопределена | ИЛИ ЕСТЬNULL(ОтчетыКонфигурации.ВидимостьПоУмолчанию, ОтчетыРасширений.ВидимостьПоУмолчанию) ЕСТЬ NULL - | ТОГДА Отчеты.ВидимостьПоУмолчанию + | ТОГДА ВариантыОтчетов.ВидимостьПоУмолчанию | ИНАЧЕ ЕСТЬNULL(ОтчетыКонфигурации.ВидимостьПоУмолчанию, ОтчетыРасширений.ВидимостьПоУмолчанию) | КОНЕЦ КАК Видимость, | ЛОЖЬ КАК БыстрыйДоступ |ПОМЕСТИТЬ Настройки |ИЗ - | Справочник.ВариантыОтчетов КАК Отчеты + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК РазмещениеОтчетов - | ПО РазмещениеОтчетов.Ссылка = Отчеты.Ссылка + | ПО РазмещениеОтчетов.Ссылка = ВариантыОтчетов.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ОтчетыКонфигурации - | ПО ОтчетыКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ПО ОтчетыКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеОтчетовКонфигурации - | ПО РазмещениеОтчетовКонфигурации.Ссылка = Отчеты.ПредопределенныйВариант + | ПО РазмещениеОтчетовКонфигурации.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ОтчетыРасширений - | ПО ОтчетыРасширений.Ссылка = Отчеты.ПредопределенныйВариант + | ПО ОтчетыРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеОтчетовРасширений - | ПО РазмещениеОтчетовРасширений.Ссылка = Отчеты.ПредопределенныйВариант + | ПО РазмещениеОтчетовРасширений.Ссылка = ВариантыОтчетов.ПредопределенныйВариант |ГДЕ | ЕСТЬNULL(РазмещениеОтчетов.Использование, ИСТИНА) | И НЕ ЕСТЬNULL(РазмещениеОтчетов.Подсистема, @@ -780,4 +784,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/RecordSetModule.bsl index e6d59699a..47d4cfb81 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/RecordSetModule.bsl @@ -16,7 +16,11 @@ Возврат; КонецЕсли; - РегистрыСведений.НастройкиВариантовОтчетов.ОповеститьПользователейВариантаОтчета(ЭтотОбъект); + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; + + РегистрыСведений.НастройкиВариантовОтчетов.ОповеститьПользователейВариантаОтчета(ЭтотОбъект, Замещение); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html index 0f5a9916f..439976fc0 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html @@ -1,31 +1,31 @@ -

              Предназначен для настройки истории изменения объектов.

              -

              Для ведения истории изменений объектов необходимо включить флажок Хранить историю изменений (по умолчанию включен) в разделе Администрирование - Общие настройки - История изменений.

              +

              Предназначен для настройки истории изменения объектов.

              +

              Для ведения истории изменений объектов необходимо включить флажок Хранить историю изменений (по умолчанию включен) в разделе Администрирование - Общие настройки - История изменений.

              После этого становится доступной команда Настройки хранения, по которой можно произвести необходимые настройки.

              В списке выводится:

              -
              • Объект - список объектов приложения в виде дерева с группировкой по типам объектов. +
                • Объект - список объектов приложения в виде дерева с группировкой по типам объектов.
                • -
                • Когда сохранять версии - выбранный вариант хранения версий; +
                • Когда сохранять версии - выбранный вариант хранения версий;
                • Срок хранения версий - выбранный срок хранения версий.

                Выбор варианта хранения истории изменений объектов

                -
                • Выберите один или несколько объектов, затем нажмите кнопку Установить когда сохранять версии, из выпадающего списка выберите нужный вариант хранения версий для каждого типа документов и справочников (также можно найти команду в меню Еще или в контекстном меню по правой кнопке мыши): -
                  • Никогда - история версий объекта не ведется; +
                    • Выберите один или несколько объектов, затем нажмите кнопку Установить когда сохранять версии, из выпадающего списка выберите нужный вариант хранения версий для каждого типа документов и справочников (также можно найти команду в меню Еще или в контекстном меню по правой кнопке мыши): +
                      • Никогда - история версий объекта не ведется;
                      • -
                      • При записи - новая запись заносится в историю версий каждый раз при изменении (или создании нового) справочника или документа; +
                      • При записи - новая запись заносится в историю версий каждый раз при изменении (или создании нового) справочника или документа;
                      • -
                      • При проведении (для документов) - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение; +
                      • При проведении (для документов) - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение;
                      • -
                      • При старте (для бизнес-процессов) - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов; +
                      • При старте (для бизнес-процессов) - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов;
                      • -
                      • По умолчанию - установить рекомендуемые настройки (для справочников - никогда (не создавать версии), для документов - создавать версии при проведении, для бизнес-процессов - создавать версии при старте).
                    • +
                    • По умолчанию - установить рекомендуемые настройки (для справочников - никогда (не создавать версии), для документов - создавать версии при проведении, для бизнес-процессов - создавать версии при старте).
                  • -
                    Также возможна настройка хранения версий сразу для группы объектов приложения, например, можно выбрать все документы или справочники.

                  Выбор срока хранения версий

                  +
                  Также возможна настройка хранения версий сразу для группы объектов приложения, например, можно выбрать все документы или справочники.

                Выбор срока хранения версий

                • -
                  Нажмите кнопку Установить срок хранения версий, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить За последнюю неделю, За последний месяц, За последние три месяца, За последние шесть месяцев, За последний год и Бессрочно.

                Просмотр отчета "Количество и объем хранимых версий объектов"

                +
                Нажмите кнопку Установить срок хранения версий, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить За последнюю неделю, За последний месяц, За последние три месяца, За последние шесть месяцев, За последний год и Бессрочно.

              Просмотр отчета "Количество и объем хранимых версий объектов"

              • По соответствующей ссылке можно перейти к просмотру отчета Количество и объем хранимых версий объектов.

              Очистка устаревших версий

              • -
                В поле Всего устаревших версий выдается информация о количестве и объеме устаревших версий в приложении.
                +
                В поле Всего устаревших версий выдается информация о количестве и объеме устаревших версий в приложении.
              • Нажмите Очистить, для того чтобы удалить устаревшие версии. Кнопка становится доступной, если в приложении имеются устаревшие версии.
                @@ -34,15 +34,15 @@
                Для того чтобы Автоматически удалять устаревшие версии, включите соответствующий флажок.
              • -
                Перейдите по соответствующей ссылке, для того чтобы Настроить расписание. Настроенное расписание выводится в нижней части окна.

              Применение хранения версий объектов

              -
              • В начале внедрения приложения, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), хранение версий может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе. +
                Перейдите по соответствующей ссылке, для того чтобы Настроить расписание. Настроенное расписание выводится в нижней части окна.

              Применение хранения версий объектов

              +
              • В начале внедрения приложения, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), хранение версий может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе.
              • -
              • Благодаря хранению версий объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния. +
              • Благодаря хранению версий объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния.
              • -
              • В дальнейшем, когда объемы информации в приложении возрастают, можно постепенно отказываться от хранения версий некоторых объектов вообще или вести историю версий только в важные моменты, например, при проведении документов. +
              • В дальнейшем, когда объемы информации в приложении возрастают, можно постепенно отказываться от хранения версий некоторых объектов вообще или вести историю версий только в важные моменты, например, при проведении документов.
              • -
                Хранение версий большого количества объектов может привести к увеличению объема хранимой в приложении информации из-за хранения их версий, что может существенно замедлить работу приложения. Поэтому рекомендуется использовать эту возможность избирательно.

              Особенности режима "При проведении"

              +
              Хранение версий большого количества объектов может привести к увеличению объема хранимой в приложении информации из-за хранения их версий, что может существенно замедлить работу приложения. Поэтому рекомендуется использовать эту возможность избирательно.

            Особенности режима "При проведении"

            • Если у документа установлен режим При проведении, то первая версия документа будет записана в историю только после первого проведения документа. Впоследствии версии документа будут записываться при каждой записи проведенного документа. Режим позволяет не создавать версии новых и не заполненных окончательно документов, для того чтобы не увеличивать объем хранимой в приложении информации. Рекомендуется применять эту настройку для всех документов.

            Особенности режима "При старте"

            • diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl index 63f925052..6a61cb6d8 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl @@ -16,6 +16,10 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; + Для Каждого Строка Из ЭтотОбъект Цикл Строка.Использовать = Строка.Вариант <> Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; КонецЦикла; diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form index 7e07b61be..ae6802402 100644 --- a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/Forms/ФормаЗаписи/Form.form @@ -358,7 +358,7 @@ <key>ru</key> - <value>Объекты формата в этой программе</value> + <value>Объекты формата в этом приложении</value> СтраницаНастройкиРасширеннаяПодсказка diff --git a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl index d2b470f9a..297f0ced2 100644 --- a/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОбменаДаннымиXDTO/ManagerModule.bsl @@ -225,7 +225,7 @@ КонецПроцедуры -Процедура ОбновитьНастройкиОбменаДаннымиXDTOКорреспондента(УзелИнформационнойБазы) Экспорт +Процедура ОбновитьНастройкиОбменаДаннымиXDTOКорреспондента(УзелИнформационнойБазы) НачатьТранзакцию(); Попытка diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html index b135a5472..e464df46b 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html @@ -1,24 +1,24 @@

              Предназначена для настройки правила очистки файлов для каждого владельца (документа, папки и других объектов приложения).

              -

              Открывается из окна Настройки очистки файлов по ссылке Изменить в колонке Правило для каждого владельца.

              +

              Открывается из окна Настройки очистки файлов по ссылке Изменить в колонке Правило для каждого владельца.

              Новый отбор

              -
              • Введите новый отбор: нажмите кнопку Добавить, выберите Добавить новый элемент. Также можно использовать клавишу Ins. +
                • Введите новый отбор: нажмите кнопку Добавить, выберите Добавить новый элемент. Также можно использовать клавишу Ins.
                  • В колонке Поле из списка полей выберите нужное.
                  • Выберите Вид сравнения.
                  • -
                  • Выберите или напишите Значение.

                Условие по дате

                +
              • Выберите или напишите Значение.

            Условие по дате

            • -
              Для быстрой настройки отборов предусмотрено стандартное условие с использованием какой-либо даты, связанной с объектом - владельцем файла.
              +
              Для быстрой настройки отборов предусмотрено стандартное условие с использованием какой-либо даты, связанной с объектом - владельцем файла.
            • Нажмите кнопку Добавить, выберите Добавить условие по дате.
            • -
              Проставьте количество дней относительно нужной даты, после которых файлы будут очищаться.
              +
              Проставьте количество дней относительно нужной даты, после которых файлы будут очищаться.
            • -
              Выберите нужную Дату из списка (одну из дат, указанную в объекте - владельце файлов), например, дата отправки документа и т.п.

            Группировка отборов

            +
            Выберите нужную Дату из списка (одну из дат, указанную в объекте - владельце файлов), например, дата отправки документа и т.п.

            Группировка отборов

            • Выделите несколько отборов, нажмите Группировать условия. Выберите условие группировки - И, Или, Не.
            • diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl index 5e768df58..93bf53c7a 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl @@ -64,7 +64,7 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - ТекущийОбъект.ПравилоОтбора = Новый ХранилищеЗначения(Правило.ПолучитьНастройки()); + ТекущийОбъект.ПравилоОтбора = Новый ХранилищеЗначения(Правило.ПолучитьНастройки(), Новый СжатиеДанных(9)); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl index 4146bf903..27969c802 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl @@ -912,7 +912,6 @@ МенеджерЗаписи = РегистрыСведений.НастройкиОчисткиФайлов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ВладелецФайла = НастройкаДляУдаления.ВладелецФайла; МенеджерЗаписи.ТипВладельцаФайла = НастройкаДляУдаления.ТипВладельцаФайла; - МенеджерЗаписи.Прочитать(); МенеджерЗаписи.Удалить(); РодительЭлементаНастроек = НастройкаДляУдаления.ПолучитьРодителя(); @@ -1067,7 +1066,7 @@ &НаСервере Процедура НастроитьРежимыОчисткиФайлов() - ИспользоватьТома = РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске(); + ИспользоватьТома = РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомах(); Элементы.ОбъемУдаленныхФайлов.Видимость = ИспользоватьТома; Элементы.РежимОчисткиФайлов.Видимость = ИспользоватьТома; Элементы.АвтоматическиОчищатьНенужныеФайлы.Заголовок = ?(ИспользоватьТома, diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html index 34f0fe7b1..677dec565 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html @@ -1,6 +1,6 @@

              Предназначен для очистки места на устройстве, занимаемого "ненужными" файлами (устаревшими, добавленными по ошибке), а также удаленными.

              -

              Приложение позволяет сократить объем данных, занимаемый "ненужными" или удаленными файлами. 

              +

              Приложение позволяет сократить объем данных, занимаемый "ненужными" или удаленными файлами.

              Под ненужными понимаются файлы, потерявшие свою актуальность (например, по истечении определенного времени).

              Удаленные файлы - это файлы, сведения о которых удалены из информационной базы, но данные файлов остались на устройстве. Посмотреть объем удаленных файлов можно только в разрезе конкретного тома, перейдя в его карточку. Из настройки очистки файлов нажать на ссылку Удаляемые файлы, дальше нажать на кнопку Проверить целостность.

              В приложении предусмотрен механизм, который позволяет настраивать правила удаления "ненужных" или удаленных файлов по свойствам самих файлов и свойствам, типам их владельцев, а также удалять эти файлы регламентным заданием.

              @@ -12,7 +12,7 @@
            • С помощью кнопки Настройка очистки можно Добавить или Удалить настройки, например, можно добавить настройки очистки файлов для новой папки файлов.
            • -
            • С помощью соответствующей кнопки можно Установить действие приложения с ненужными файлами: +
            • С помощью соответствующей кнопки можно Установить действие приложения с ненужными файлами:
              • Очистить файлы и версии;
              • Очистить файлы; @@ -27,25 +27,25 @@
              • Старше года.
            • Имеется также возможность разработать свои правила очистки файлов. Для этого в колонке Период очистки выберите значение По правилу. -
              • В колонке Правило становится доступной кнопка  Изменить. Нажав ее, можно задать более точное правило отбора "ненужных" файлов. +
                • В колонке Правило становится доступной кнопка Изменить. Нажав ее, можно задать более точное правило отбора "ненужных" файлов.
                  • Например, для папки Счета можно настроить очистку файлов и их версий, которые были созданы до начала этого года.
                  • -
                  • В окне Настройка очистки файлов для соответствующего владельца введите новый отбор с помощью кнопки Добавить. +
                  • В окне Настройка очистки файлов для соответствующего владельца введите новый отбор с помощью кнопки Добавить.
                  • Если у объекта есть реквизит с типом Дата, в этом случае появляется возможность настройки правила очистки относительно этого реквизита. В этом случае по кнопке Добавить выберите команду Добавить условие по дате, введите дату для отбора.
                • После подтверждения выбора становится активной ссылка Изменить, с помощью которой можно менять введенные условия отбора.

              Ссылки на отчеты по объему удаляемых и ненужных файлов

              • В зависимости от варианта хранения файлов в нижнем углу таблицы настроек доступны ссылки:
              • -
                • Удаляемые файлы - открывается список Тома хранения файлов для просмотра удаляемых файлов в томах. В томе можно нажать кнопку Проверить целостность. Посмотреть объем удаленных файлов можно только в разрезе конкретного тома.
                • -
                • Ненужные файлы - с помощью кнопки панели навигации Отчеты - Объем ненужных файлов по владельцам или с помощью ссылки можно сформировать отчет Объем ненужных файлов по владельцам. 

              Очистка файлов вручную

              +
              • Удаляемые файлы - открывается список Тома хранения файлов для просмотра удаляемых файлов в томах. В томе можно нажать кнопку Проверить целостность. Посмотреть объем удаленных файлов можно только в разрезе конкретного тома.
              • +
              • Ненужные файлы - с помощью кнопки панели навигации Отчеты - Объем ненужных файлов по владельцам или с помощью ссылки можно сформировать отчет Объем ненужных файлов по владельцам.

            Очистка файлов вручную

            • С помощью кнопки Очистить можно в любой момент времени вручную удалить "ненужные" файлы с учетом настроенных правил очистки.

            Настройка автоматической очистки файлов

              -
            • С помощью ссылки в нижней части окна можно Автоматически очищать ненужные файлы по расписанию - с помощью регламентного задания.
            • +
            • С помощью ссылки в нижней части окна можно Автоматически очищать ненужные файлы по расписанию - с помощью регламентного задания.
            • Выбор настроек зависит от варианта хранения файлов:
              • При хранении файлов только в информационной базе с помощью переключателя можно выбрать:
                • Не очищать;
                • Очищать ненужные.
              • При хранении файлов в томах можно выбрать:
                • Не очищать;
                • Очищать удаленные;
                • -
                • Очищать удаленные и ненужные.
            • После выбора варианта становится активной ссылка Настроить расписание. Настройте расписание регламентного задания. 
            \ No newline at end of file +
          • Очищать удаленные и ненужные.
          • После выбора варианта становится активной ссылка Настроить расписание. Настройте расписание регламентного задания.
          • \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 0d8fe1838..6b21d69ea 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -135,7 +135,7 @@ "СсылкаНаОбъект", Строка(СсылкаНаОбъект), СсылкаНаОбъект.Метаданные().ПолноеИмя()); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; НастройкиПрав = Новый Структура; @@ -239,7 +239,7 @@ Строка.Право, "НастройкиПравОбъектов", Строка(СсылкаНаОбъект)); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Настройка.НаследованиеРазрешено = Настройка.НаследованиеРазрешено ИЛИ Строка.НаследованиеРазрешено; Настройка[Строка.Право] = НЕ Строка.ПравоЗапрещено; @@ -291,7 +291,7 @@ "СсылкаНаОбъект", Строка(СсылкаНаОбъект), СсылкаНаОбъект.Метаданные().ПолноеИмя()); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; НачатьТранзакцию(); @@ -470,7 +470,7 @@ "НастройкиПравОбъектов", ТипВладельцаПрав, "Объект"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Отбор.Вставить("ВладелецПрав", ПустыеСсылкиВладелецПрав.Получить(ТипВладельцаПрав)); @@ -717,8 +717,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт @@ -735,8 +734,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции Процедура ДобавитьОбъектыИерархии(Ссылка, МассивОбъектов) @@ -841,9 +841,9 @@ Если ОбъектМетаданныхВладельца = Неопределено Тогда ТекстОшибки = ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден владелец прав ""%1"".'"), + НСтр("ru = 'Несуществующий владелец прав ""%1"".'"), ВозможноеПраво.ВладелецПрав); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ДополнительныеПараметры.ВладелецПрав = ВозможноеПраво.ВладелецПрав; @@ -870,7 +870,7 @@ |не указан в определяемом типе %2.'"), Строка(ТипСсылки), "ВладелецНастроекПрав"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ОпределяемыйТипЗначенийДоступа.Получить(ТипСсылки) = Неопределено Тогда @@ -898,7 +898,7 @@ "ЗаписатьНаборыЗначенийДоступа" + "*", "ЗначениеДоступа", "НаборыЗначенийДоступа"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; КонецЕсли; @@ -910,7 +910,7 @@ |но обнаружен в описании вида доступа ""%2"".'"), Строка(ТипСсылки), СвойстваВидаДоступа.Имя); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если СвойстваВидовДоступа.ПоТипамГруппИЗначений.Получить(ТипСсылки) <> Неопределено Тогда @@ -920,7 +920,7 @@ |но обнаружен в описании вида доступа ""%2"".'"), Строка(ТипСсылки), СвойстваВидаДоступа.Имя); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Если ТипыПодпискиОбновитьГруппыВладельцевНастроекПрав.Получить(ТипОбъекта) = Неопределено Тогда @@ -928,7 +928,7 @@ НСтр("ru = 'Тип владельца прав ""%1"" |не указан в определяемом типе %2.'"), Строка(ТипОбъекта), "ВладелецНастроекПравОбъект"); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; СвойстваВладельца = Новый Структура; @@ -955,7 +955,7 @@ |повторно определено право ""%2"".'"), ВозможноеПраво.ВладелецПрав, ВозможноеПраво.Имя); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; Для Каждого ТребуемоеПраво Из ВозможноеПраво.ТребуемыеПрава Цикл @@ -968,7 +968,7 @@ ВозможноеПраво.Имя, ВозможноеПраво.ВладелецПрав, ТребуемоеПраво); - ВызватьИсключение ТекстОшибки; + ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЦикла; ИндексПрава = ИндексыПравВладельцев[ВозможноеПраво.ВладелецПрав]; @@ -1315,4 +1315,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl index 19423f99e..943e948d4 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl @@ -841,7 +841,6 @@ МенеджерЗаписи.ТипВладельцаФайла = НастройкаДляУдаления.ТипВладельцаФайла; МенеджерЗаписи.УчетнаяЗапись = НастройкаДляУдаления.УчетнаяЗапись; МенеджерЗаписи.ЭтоФайл = НастройкаДляУдаления.ЭтоФайл; - МенеджерЗаписи.Прочитать(); МенеджерЗаписи.Удалить(); РодительЭлементаНастроек = НастройкаДляУдаления.ПолучитьРодителя(); diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html index 70efb225d..d87c70a8c 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html @@ -1,10 +1,10 @@ -

            Предназначена для настройки синхронизации файлов для каждого владельца (документа, папки и других объектов приложения).

            -

            Открывается из списка Присоединенные файлы объектов приложения по команде Еще - Синхронизация с облаком.

            +

            Предназначена для настройки синхронизации файлов для каждого владельца (документа, папки и других объектов приложения).

            +

            Открывается из списка Присоединенные файлы объектов приложения по команде Еще - Синхронизация с облаком.

            Настройка синхронизации файлов

            • Включите флажок Синхронизировать файлы с облачным сервисом.
            • Выберите из списка учетную запись облачного сервиса, с которым будет производиться синхронизация файлов. Если в списке нет нужной учетной записи, ее можно создать.
            • Для подтверждения нажмите Записать и закрыть.

            См. также:

            -

             

            \ No newline at end of file +

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Help/ru.html index 656b34fba..b1116c863 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Help/ru.html @@ -3,31 +3,31 @@

            Открывается из списка Настройки синхронизации файлов по соответствующей ссылке.

            • По умолчанию включен флажок Синхронизировать файлы с облачным сервисом.
            • -
            • В поле ниже выберите из списка учетную запись облачного сервиса, с которым будет производиться синхронизация файлов. Если в списке нет нужной учетной записи, можно ввести новую.

            Что синхронизировать

            +
          • В поле ниже выберите из списка учетную запись облачного сервиса, с которым будет производиться синхронизация файлов. Если в списке нет нужной учетной записи, можно ввести новую.
          • Что синхронизировать

            • В разделе Что синхронизировать можно выбрать одно из значений:
              • Все файлы, присоединенные к (можно выбрать объект приложения) - в этом случае условия отбора не требуются;
              • Файлы (указывается выбранный список) по заданным правилам синхронизации - выбрано по умолчанию:
                • заполнять условия отбора файлов не требуется, если необходимо синхронизировать все файлы.
                • -
                • При необходимости введите новый отбор: нажмите кнопку Добавить, выберите Добавить новый элемент. Также можно использовать клавишу Ins. +
                • При необходимости введите новый отбор: нажмите кнопку Добавить, выберите Добавить новый элемент. Также можно использовать клавишу Ins.
                  • В колонке Поле из списка полей выберите нужное.
                  • Выберите Вид сравнения.
                  • -
                  • Выберите или напишите Значение.
            • -
            • Напишите Краткое описание правила.

            Условие по дате

            +
          • Выберите или напишите Значение.
          • +
          • Напишите Краткое описание правила.
          • Условие по дате

            • -
              Для быстрой настройки отборов предусмотрено стандартное условие с использованием какой-либо даты, связанной с объектом - владельцем файла.
              +
              Для быстрой настройки отборов предусмотрено стандартное условие с использованием какой-либо даты, связанной с объектом - владельцем файла.
            • Нажмите кнопку Добавить, выберите Добавить условие по дате.
            • -
              Проставьте количество дней относительно нужной даты, после которых файлы будут очищаться.
              +
              Проставьте количество дней относительно нужной даты, после которых файлы будут очищаться.
            • -
              Выберите нужную Дату из списка (одну из дат, указанную в объекте - владельце файлов), например, дата отправки документа и т.п.

            Группировка отборов

            +
            Выберите нужную Дату из списка (одну из дат, указанную в объекте - владельце файлов), например, дата отправки документа и т.п.

            Группировка отборов

            • Выделите несколько отборов, нажмите Группировать условия. Выберите условие группировки - И, Или, Не.
            • diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Module.bsl index d67716751..622f80115 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписи/Module.bsl @@ -132,7 +132,7 @@ ТекущийОбъект.Наименование = ""; КонецЕсли; - ТекущийОбъект.ПравилоОтбора = Новый ХранилищеЗначения(ПравилоОтбора); + ТекущийОбъект.ПравилоОтбора = Новый ХранилищеЗначения(ПравилоОтбора, Новый СжатиеДанных(9)); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Help/ru.html index 7488e28f7..865ead92d 100644 --- a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Help/ru.html @@ -6,10 +6,10 @@

              Приложение позволяет видеть свои файлы в своей папке проводника или на своем устройстве, там же и редактировать, а также синхронизировать их.

              Список облачных сервисов


              -
              Список облачных сервисов не ограничен приложением, однако используемый сервис должен соответствовать требованиям протокола WEBDAV. 
              +
              Список облачных сервисов не ограничен приложением, однако используемый сервис должен соответствовать требованиям протокола WEBDAV.
              В приложении доступны готовые настройки синхронизации с:
              • Яндекс.Диск;
              • -
              • Dropbox (через платный сервис dropdav);
              • +
              • Dropbox (через платный сервис dropdav);
              • или любым другим сервисом с которым возможна работа по протоколу WEBDAV.

              Принципы синхронизации файлов

              • Синхронизировать можно только одну папку в одном плане обмена.
              • @@ -25,9 +25,9 @@
              • Не поддерживается режим RLS (возможность ограничивать права доступа на уровне записей).

              Настройка синхронизации файлов

              • -
                В списке имеются колонки:
                +
                В списке имеются колонки:
                • -
                  Владелец файла - перечислены объекты приложения-владельцы файлов. С помощью флажков можно указать, файлы каких владельцев необходимо синхронизировать;
                  +
                  Владелец файла - перечислены объекты приложения-владельцы файлов. С помощью флажков можно указать, файлы каких владельцев необходимо синхронизировать;
                • Учетная запись - указывается учетная запись облачного сервиса. Для разных владельцев файлов могут быть указаны разные учетные записи;
                  @@ -42,7 +42,7 @@
                  Включите флажок Автоматически синхронизировать файлы.
                • -
                  Перейдите по ссылке Настроить расписание, которая становится доступной. Настройте расписание.
                  +
                  Перейдите по ссылке Настроить расписание, которая становится доступной. Настройте расписание.
                • После подтверждения расписания оно отражается под флажком.
                  diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Form.form deleted file mode 100644 index c265f14e8..000000000 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Form.form +++ /dev/null @@ -1,2836 +0,0 @@ - - - - ВидТранспортаСообщенийОбменаПоУмолчанию - 1 - - <key>ru</key> - <value>Подключение по умолчанию</value> - - true - true - - true - - - Запись.ВидТранспортаСообщенийОбменаПоУмолчанию - - - ВидТранспортаСообщенийОбменаПоУмолчаниюExtendedTooltip - 121 - Label - true - true - - Left - - - - ВидТранспортаСообщенийОбменаПоУмолчаниюКонтекстноеМеню - 2 - true - - InputField - Enter - true - Left - true - - 50 - true - true - false - true - true - true - true - true - Normal - - - - СтраницыВидовТранспорта - 47 - - НастройкиТранспортаCOM - 48 - - COMВариантРаботыИнформационнойБазы - 61 - true - true - - true - - - Запись.COMВариантРаботыИнформационнойБазы - - None - - OnChange - COMВариантРаботыИнформационнойБазыПриИзменении - - - COMВариантРаботыИнформационнойБазыExtendedTooltip - 124 - Label - true - true - - Left - - - - COMВариантРаботыИнформационнойБазыКонтекстноеМеню - 62 - true - - RadioButtonField - Enter - true - Left - true - - 1 - - - ru - Файловая база-корреспондент - - - 0 - - - - - ru - Клиент-серверная база-корреспондент - - - 1 - - - Vertical - - - - ВариантыРаботыИнформационнойБазы - 63 - - СтраницаВариантРаботыФайловый - 64 - - COMКаталогИнформационнойБазы - 57 - true - true - - true - - - Запись.COMКаталогИнформационнойБазы - - - COMКаталогИнформационнойБазыExtendedTooltip - 127 - Label - true - true - - Left - - - - COMКаталогИнформационнойБазыКонтекстноеМеню - 58 - true - - InputField - Enter - true - Left - true - - - StartChoice - COMКаталогИнформационнойБазыНачалоВыбора - - - Opening - COMКаталогИнформационнойБазыОткрытие - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Страница вариант работы файловый</value> - - - СтраницаВариантРаботыФайловыйExtendedTooltip - 126 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - СтраницаВариантРаботыКлиентСерверный - 65 - - COMИмяСервера1СПредприятия - 55 - - <key>ru</key> - <value>Имя сервера</value> - - true - true - - true - - - Запись.COMИмяСервера1СПредприятия - - - COMИмяСервера1СПредприятияExtendedTooltip - 129 - Label - true - true - - Left - - - - COMИмяСервера1СПредприятияКонтекстноеМеню - 56 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - COMИмяИнформационнойБазыНаСервере1СПредприятия - 51 - - <key>ru</key> - <value>Имя информационной базы на сервере</value> - - true - true - - true - - - Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия - - - COMИмяИнформационнойБазыНаСервере1СПредприятияExtendedTooltip - 130 - Label - true - true - - Left - - - - COMИмяИнформационнойБазыНаСервере1СПредприятияКонтекстноеМеню - 52 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Страница вариант работы клиент серверный</value> - - - СтраницаВариантРаботыКлиентСерверныйExtendedTooltip - 128 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Варианты работы информационной базы</value> - - - ВариантыРаботыИнформационнойБазыExtendedTooltip - 125 - Label - true - true - - Left - - - Pages - - Auto - - - - COMАутентификацияОперационнойСистемы - 49 - true - true - - true - - - Запись.COMАутентификацияОперационнойСистемы - - Right - - OnChange - COMАутентификацияОперационнойСистемыПриИзменении - - - COMАутентификацияОперационнойСистемыExtendedTooltip - 131 - Label - true - true - - Left - - - - COMАутентификацияОперационнойСистемыКонтекстноеМеню - 50 - true - - CheckBoxField - Enter - true - Left - true - - - - COMГруппаПользовательПароль - 66 - - COMИмяПользователя - 53 - true - true - - true - - - Запись.COMИмяПользователя - - - COMИмяПользователяExtendedTooltip - 133 - Label - true - true - - Left - - - - COMИмяПользователяКонтекстноеМеню - 54 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - COMПарольПользователя - 59 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - COMПарольПользователя - - - OnChange - COMПарольПользователяПриИзменении - - - COMПарольПользователяExtendedTooltip - 134 - Label - true - true - - Left - - - - COMПарольПользователяКонтекстноеМеню - 60 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>COM группа пользователь пароль</value> - - - COMГруппаПользовательПарольExtendedTooltip - 132 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - ПроверитьПодключениеCOM - 67 - - <key>ru</key> - <value>Проверить подключение</value> - - true - true - - true - - - ПроверитьПодключениеCOMExtendedTooltip - 136 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеCOM - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Прямое подключение</value> - - - НастройкиТранспортаCOMExtendedTooltip - 123 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НастройкиТранспортаWS - 89 - - WSURLВебСервиса - 90 - true - true - - true - - - Запись.WSURLВебСервиса - - - WSURLВебСервисаExtendedTooltip - 139 - Label - true - true - - Left - - - - WSURLВебСервисаКонтекстноеМеню - 91 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ПользовательИПарольWS - 112 - - WSИмяПользователя - 92 - true - true - - true - - - Запись.WSИмяПользователя - - - WSИмяПользователяExtendedTooltip - 141 - Label - true - true - - Left - - - - WSИмяПользователяКонтекстноеМеню - 93 - true - - InputField - Enter - true - Left - true - - 30 - true - true - false - true - true - true - true - Normal - - - - ПарольWS - 111 - - WSПароль - 94 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - WSПароль - - - OnChange - WSПарольПриИзменении - - - WSПарольExtendedTooltip - 143 - Label - true - true - - Left - - - - WSПарольКонтекстноеМеню - 95 - true - - InputField - Enter - true - Left - true - - 30 - true - true - false - true - true - true - true - true - Normal - - - - WSЗапомнитьПароль - 109 - true - true - - true - - - Запись.WSЗапомнитьПароль - - Right - - WSЗапомнитьПарольExtendedTooltip - 144 - Label - true - true - - Left - - - - WSЗапомнитьПарольКонтекстноеМеню - 110 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Пароль WS</value> - - - ПарольWSРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Пользователь и пароль WS</value> - - - ПользовательИПарольWSРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - UsualGroup - - Vertical - true - true - Auto - Auto - - - - WSКонечнаяТочкаКорреспондента - 210 - - <key>ru</key> - <value>Конечная точка</value> - - true - true - - true - - - WSКонечнаяТочкаКорреспондента - - - WSКонечнаяТочкаКорреспондентаРасширеннаяПодсказка - 212 - Label - true - true - - Left - - - - WSКонечнаяТочкаКорреспондентаКонтекстноеМеню - 211 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - WSОбластьДанныхКорреспондента - 207 - - <key>ru</key> - <value>Область данных</value> - - true - true - - true - - - Запись.WSОбластьДанныхКорреспондента - - - WSОбластьДанныхКорреспондентаРасширеннаяПодсказка - 209 - Label - true - true - - Left - - - - WSОбластьДанныхКорреспондентаКонтекстноеМеню - 208 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ПараметрыДоступаВИнтернет - 119 - - <key>ru</key> - <value>Параметры доступа в Интернет</value> - - true - true - - true - - - ПараметрыДоступаВИнтернетExtendedTooltip - 145 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - - ПроверитьПодключениеWS - 96 - - <key>ru</key> - <value>Проверить подключение</value> - - true - true - - true - - - ПроверитьПодключениеWSExtendedTooltip - 146 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеWS - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Интернет</value> - - - НастройкиТранспортаWSExtendedTooltip - 138 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НастройкиТранспортаFILE - 5 - - FILEКаталогОбменаИнформацией - 8 - true - true - - true - - - Запись.FILEКаталогОбменаИнформацией - - - FILEКаталогОбменаИнформациейExtendedTooltip - 149 - Label - true - true - - Left - - - - FILEКаталогОбменаИнформациейКонтекстноеМеню - 9 - true - - InputField - Enter - true - Left - true - - - StartChoice - FILEКаталогОбменаИнформациейНачалоВыбора - - - Opening - FILEКаталогОбменаИнформациейОткрытие - - true - true - true - true - true - true - true - Normal - - - - АрхивFile - 100 - - FILEСжиматьФайлИсходящегоСообщения - 10 - true - true - - true - - - Запись.FILEСжиматьФайлИсходящегоСообщения - - Right - - FILEСжиматьФайлИсходящегоСообщенияExtendedTooltip - 152 - Label - true - true - - Left - - - - FILEСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 11 - true - - CheckBoxField - Enter - true - Left - true - - - - ПарольАрхиваСообщенияОбмена1 - 101 - - <key>ru</key> - <value>Пароль архива</value> - - true - true - - true - - - ПарольАрхиваСообщенияОбмена - - - OnChange - ПарольАрхиваСообщенияОбмена1ПриИзменении - - - ПарольАрхиваСообщенияОбмена1ExtendedTooltip - 153 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена1КонтекстноеМеню - 102 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Архив file</value> - - - АрхивFileРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - UsualGroup - - Vertical - NormalSeparation - true - true - Auto - Auto - - - - FILEПриводитьКЛатинскимСимволамИменаФайловСообщенийОбмена - 190 - true - true - - true - - - Запись.FILEТранслитерироватьИменаФайловСообщенийОбмена - - Right - Button - - FILEПриводитьКЛатинскимСимволамИменаФайловСообщенийОбменаРасширеннаяПодсказка - 192 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - FILEПриводитьКЛатинскимСимволамИменаФайловСообщенийОбменаКонтекстноеМеню - 191 - true - - CheckBoxField - Enter - true - Left - true - - - - ПроверитьПодключениеFILE - 42 - - <key>ru</key> - <value>Проверить подключение</value> - - true - true - - true - - false - - ПроверитьПодключениеFILEExtendedTooltip - 150 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеFILE - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Сетевой каталог</value> - - - НастройкиТранспортаFILEExtendedTooltip - 148 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НастройкиТранспортаFTP - 6 - - ГруппаСерверПорт - 37 - - FTPСоединениеПуть - 14 - true - true - - true - - - Запись.FTPСоединениеПуть - - - FTPСоединениеПутьExtendedTooltip - 156 - Label - true - true - - Left - - - - FTPСоединениеПутьКонтекстноеМеню - 15 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - FTPСоединениеПорт - 16 - true - true - - true - - - Запись.FTPСоединениеПорт - - - FTPСоединениеПортExtendedTooltip - 157 - Label - true - true - - Left - - - - FTPСоединениеПортКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - - true - true - true - - ru - ЧГ=0 - - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Сервер порт</value> - - - ГруппаСерверПортExtendedTooltip - 155 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - ГруппаПользовательПароль - 38 - - FTPСоединениеПользователь - 18 - true - true - - true - - - Запись.FTPСоединениеПользователь - - - FTPСоединениеПользовательExtendedTooltip - 159 - Label - true - true - - Left - - - - FTPСоединениеПользовательКонтекстноеМеню - 19 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - FTPСоединениеПароль - 22 - - <key>ru</key> - <value>Пароль</value> - - true - true - - true - - - FTPСоединениеПароль - - - OnChange - FTPСоединениеПарольПриИзменении - - - FTPСоединениеПарольExtendedTooltip - 160 - Label - true - true - - Left - - - - FTPСоединениеПарольКонтекстноеМеню - 23 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Пользователь пароль</value> - - - ГруппаПользовательПарольExtendedTooltip - 158 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - FTPРазмерФайла - 113 - - FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - 39 - true - true - - true - - - Запись.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - - - FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияExtendedTooltip - 162 - Label - true - true - - Left - - - - FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияКонтекстноеМеню - 40 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - Декорация1 - 114 - - <key>ru</key> - <value>КБ (0 – нет ограничений)</value> - - true - true - - true - - - Декорация1ExtendedTooltip - 163 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 115 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>FTP размер файла</value> - - - FTPРазмерФайлаРасширеннаяПодсказка - 161 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - FTPСоединениеПассивноеСоединение - 20 - true - true - - true - - - Запись.FTPСоединениеПассивноеСоединение - - Right - - FTPСоединениеПассивноеСоединениеExtendedTooltip - 164 - Label - true - true - - Left - - - - FTPСоединениеПассивноеСоединениеКонтекстноеМеню - 21 - true - - CheckBoxField - Enter - true - Left - true - - - - ПараметрыДоступаВИнтернетFTP - 120 - - <key>ru</key> - <value>Параметры доступа в Интернет</value> - - true - true - - true - - - ПараметрыДоступаВИнтернетFTPРасширеннаяПодсказка - 165 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПараметрыДоступаВИнтернет - Normal - Auto - true - true - UserCmds - Auto - - - FTPАрхив - 103 - - FTPСжиматьФайлИсходящегоСообщения - 12 - true - true - - true - - - Запись.FTPСжиматьФайлИсходящегоСообщения - - Right - - FTPСжиматьФайлИсходящегоСообщенияExtendedTooltip - 168 - Label - true - true - - Left - - - - FTPСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 13 - true - - CheckBoxField - Enter - true - Left - true - - - - ПарольАрхиваСообщенияОбмена - 34 - - <key>ru</key> - <value>Пароль архива</value> - - true - true - - true - - - ПарольАрхиваСообщенияОбмена - - - OnChange - ПарольАрхиваСообщенияОбменаПриИзменении - - - ПарольАрхиваСообщенияОбменаExtendedTooltip - 169 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбменаКонтекстноеМеню - 35 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>FTP архив</value> - - - FTPАрхивРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - UsualGroup - - Vertical - NormalSeparation - true - true - Auto - Auto - - - - FTPПриводитьКЛатинскимСимволамИменаФайловСообщенийОбмена - 193 - true - true - - true - - - Запись.FTPТранслитерироватьИменаФайловСообщенийОбмена - - Right - Button - - FTPПриводитьКЛатинскимСимволамИменаФайловСообщенийОбменаРасширеннаяПодсказка - 195 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - FTPПриводитьКЛатинскимСимволамИменаФайловСообщенийОбменаКонтекстноеМеню - 194 - true - - CheckBoxField - Enter - true - Left - true - - - - ПроверитьПодключениеFTP - 41 - - <key>ru</key> - <value>Проверить подключение</value> - - true - true - - true - - false - - ПроверитьПодключениеFTPExtendedTooltip - 166 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеFTP - Normal - Auto - true - true - Bottom - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>FTP-ресурс</value> - - - ru - Настройки транспорта FILE - - - НастройкиТранспортаFTPExtendedTooltip - 154 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НастройкиТранспортаEMAIL - 7 - - EMAILУчетнаяЗапись - 30 - true - true - - true - - - Запись.EMAILУчетнаяЗапись - - - EMAILУчетнаяЗаписьExtendedTooltip - 171 - Label - true - true - - Left - - - - EMAILУчетнаяЗаписьКонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - EMAILРазмерФайла - 116 - - EMAILМаксимальныйДопустимыйРазмерСообщения - 26 - true - true - - true - - - Запись.EMAILМаксимальныйДопустимыйРазмерСообщения - - - EMAILМаксимальныйДопустимыйРазмерСообщенияExtendedTooltip - 173 - Label - true - true - - Left - - - - EMAILМаксимальныйДопустимыйРазмерСообщенияКонтекстноеМеню - 27 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal - - - - Декорация2 - 117 - - <key>ru</key> - <value>КБ (0 – нет ограничений)</value> - - true - true - - true - - - Декорация2ExtendedTooltip - 174 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 118 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>EMAIL размер файла</value> - - - EMAILРазмерФайлаРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - UsualGroup - - HorizontalIfPossible - true - true - Auto - Auto - - - - EMAILАрхив - 104 - - EMAILСжиматьФайлИсходящегоСообщения - 28 - true - true - - true - - - Запись.EMAILСжиматьФайлИсходящегоСообщения - - Right - - EMAILСжиматьФайлИсходящегоСообщенияExtendedTooltip - 177 - Label - true - true - - Left - - - - EMAILСжиматьФайлИсходящегоСообщенияКонтекстноеМеню - 29 - true - - CheckBoxField - Enter - true - Left - true - - - - ПарольАрхиваСообщенияОбмена2 - 105 - - <key>ru</key> - <value>Пароль архива</value> - - true - true - - true - - - ПарольАрхиваСообщенияОбмена - - - OnChange - ПарольАрхиваСообщенияОбмена2ПриИзменении - - - ПарольАрхиваСообщенияОбмена2ExtendedTooltip - 178 - Label - true - true - - Left - - - - ПарольАрхиваСообщенияОбмена2КонтекстноеМеню - 106 - true - - InputField - Enter - true - Left - true - - 20 - true - true - false - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>EMAIL архив</value> - - - EMAILАрхивРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - UsualGroup - - Vertical - NormalSeparation - true - true - Auto - Auto - - - - EMAILПриводитьКЛатинскимСимволамИменаФайловСообщенийОбмена - 196 - true - true - - true - - - Запись.EMAILТранслитерироватьИменаФайловСообщенийОбмена - - Right - Button - - EMAILПриводитьКЛатинскимСимволамИменаФайловСообщенийОбменаРасширеннаяПодсказка - 198 - - <key>ru</key> - <value>Рекомендуется применять в случае, если при обмене возникают ошибки, связанные с различными кодировками файлов. -Настройку не следует использовать, в случае, если такая же настройка не поддерживается на стороне корреспондента.</value> - - Label - true - true - - Left - - - - EMAILПриводитьКЛатинскимСимволамИменаФайловСообщенийОбменаКонтекстноеМеню - 197 - true - - CheckBoxField - Enter - true - Left - true - - - - ПроверитьПодключениеEMAIL - 43 - - <key>ru</key> - <value>Проверить подключение</value> - - true - true - - true - - false - - ПроверитьПодключениеEMAILExtendedTooltip - 175 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьПодключениеEMAIL - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Почтовые сообщения</value> - - - ru - Настройки транспорта FILE - - - НастройкиТранспортаEMAILExtendedTooltip - 170 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - - НастройкиТранспортаWSПассивныйРежим - 199 - - Декорация3 - 201 - - <key>ru</key> - <value>Для данного вида подключения настроек в этой программе не требуется.</value> - - true - true - - true - - - Декорация3РасширеннаяПодсказка - 203 - Label - true - true - - Left - - - - Декорация3КонтекстноеМеню - 202 - true - - Label - true - - Left - - - true - true - - true - - - <key>ru</key> - <value>Интернет (пассивный режим)</value> - - - НастройкиТранспортаWSПассивныйРежимРасширеннаяПодсказка - 200 - Label - true - true - - Left - - - Page - - Vertical - auto - false - - - true - true - - true - - - <key>ru</key> - <value>Страницы видов транспорта</value> - - - СтраницыВидовТранспортаExtendedTooltip - 122 - Label - true - true - - Left - - - Pages - - TabsOnLeftHorizontal - Auto - - - - ФормаКоманднаяПанель - -1 - - ФормаЗаписатьИЗакрыть - 184 - - <key>ru</key> - <value>Записать и закрыть</value> - - true - true - - true - - - ФормаЗаписатьИЗакрытьРасширеннаяПодсказка - 185 - Label - true - true - - Left - - - Form.Command.ЗаписатьИЗакрыть - Auto - true - true - true - UserCmds - Auto - - - ФормаЗаписать - 186 - true - true - - true - - - ФормаЗаписатьРасширеннаяПодсказка - 187 - Label - true - true - - Left - - - Form.StandardCommand.Write - Normal - Auto - true - true - UserCmds - Auto - - - ФормаПеречитать - 188 - true - true - - true - - - ФормаПеречитатьРасширеннаяПодсказка - 189 - Label - true - true - - Left - - - Form.StandardCommand.Reread - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - Left - true - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - Copy - Delete - WriteAndClose - LockOwner - true - true - true - Vertical - true - true - true - auto - true - - Запись - 1 - - InformationRegisterRecordManager.НастройкиТранспортаОбменаДанными - - - true - - - true - -
                  true
                  - true -
                  - - СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису - 2 - - String - - - - true - - - true - - - - COMПарольПользователя - - <key>ru</key> - <value>Пароль пользователя</value> - - 3 - - String - - 50 - - - - true - - - true - - - - WSПароль - - <key>ru</key> - <value>Пароль</value> - - 4 - - String - - 50 - - - - true - - - true - - - - FTPСоединениеПароль - - <key>ru</key> - <value>Пароль</value> - - 5 - - String - - 50 - - - - true - - - true - - - - ПарольАрхиваСообщенияОбмена - - <key>ru</key> - <value>Пароль архива</value> - - 6 - - String - - 50 - - - - true - - - true - - - - WSПарольИзменен - 7 - - Boolean - - - true - - - true - - - - FTPСоединениеПарольИзменен - 8 - - Boolean - - - true - - - true - - - - COMПарольПользователяИзменен - 9 - - Boolean - - - true - - - true - - - - ПарольАрхиваСообщенияОбменаИзменен - 10 - - Boolean - - - true - - - true - - - - ДоступныеВидыТранспорта - 11 - - ValueTable - - - true - - - true - - - ВидТранспорта - 1 - - EnumRef.ВидыТранспортаСообщенийОбмена - - - true - - - true - - - - ИмяСтраницы - 2 - - String - - - - true - - - true - - - - - WSКонечнаяТочкаКорреспондента - - <key>ru</key> - <value>Конечная точка</value> - - 12 - - String - - - - true - - - true - - - - ПроверитьПодключениеFTP - - <key>ru</key> - <value>Проверить подключение</value> - - 1 - - ru - Проверить подключение через FTP ресурс - - - true - - - - ПроверитьПодключениеFTP - - - DontUse - Auto - - - ПроверитьПодключениеFILE - - <key>ru</key> - <value>Проверить подключение</value> - - 2 - - ru - Проверить подключение по сетевому каталогу - - - true - - - - ПроверитьПодключениеFILE - - - DontUse - Auto - - - ПроверитьПодключениеEMAIL - - <key>ru</key> - <value>Проверить подключение</value> - - 3 - - ru - Проверить подключение по электронной почте - - - true - - - - ПроверитьПодключениеEMAIL - - - DontUse - Auto - - - ПроверитьПодключениеCOM - - <key>ru</key> - <value>Проверить подключение</value> - - 4 - - ru - Проверить подключение к информационной базе-корреспонденту - - - true - - - - ПроверитьПодключениеCOM - - - DontUse - Auto - - - ПроверитьПодключениеWS - - <key>ru</key> - <value>Проверить подключение</value> - - 6 - - ru - Проверить подключение к информационной базе-корреспонденту - - - true - - - - ПроверитьПодключениеWS - - - DontUse - Auto - - - ПараметрыДоступаВИнтернет - - <key>ru</key> - <value>Параметры доступа в Интернет</value> - - 7 - - ru - Параметры доступа в Интернет - - - true - - - - ПараметрыДоступаВИнтернет - - - DontUse - Auto - - - ЗаписатьИЗакрыть - - <key>ru</key> - <value>Записать и закрыть</value> - - 8 - - ru - Записать и закрыть - - - true - - - StdPicture.WriteAndClose - - - - ЗаписатьИЗакрыть - - - Text - DontUse - Auto - - - - - - - - AfterWrite - ПослеЗаписи - - - BeforeWrite - ПередЗаписью - - - OnWriteAtServer - ПриЗаписиНаСервере - - -
                  diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl deleted file mode 100644 index 02c23503a..000000000 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Forms/ФормаЗаписи/Module.bsl +++ /dev/null @@ -1,631 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗаполнитьДоступныеВидыТранспорта(); - - СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису = - ОбменДаннымиВебСервис.СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - Элементы.ПараметрыДоступаВИнтернет.Видимость = Истина; - Элементы.ПараметрыДоступаВИнтернетFTP.Видимость = Истина; - Иначе - Элементы.ПараметрыДоступаВИнтернет.Видимость = Ложь; - Элементы.ПараметрыДоступаВИнтернетFTP.Видимость = Ложь; - КонецЕсли; - - Если ЗначениеЗаполнено(Запись.Корреспондент) Тогда - ПаролиФормы = "COMПарольПользователя,FTPСоединениеПароль,WSПароль,ПарольАрхиваСообщенияОбмена"; - - УстановитьПривилегированныйРежим(Истина); - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, ПаролиФормы); - УстановитьПривилегированныйРежим(Ложь); - - Для Каждого ПарольФормы Из СтрРазделить(ПаролиФормы, ",", Ложь) Цикл - ЭтотОбъект[ПарольФормы] = ?(ЗначениеЗаполнено(Пароли[ПарольФормы]), ЭтотОбъект.УникальныйИдентификатор, ""); - КонецЦикла; - КонецЕсли; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - - Если ЗначениеЗаполнено(Запись.WSКонечнаяТочкаКорреспондента) Тогда - Элементы.WSURLВебСервиса.Видимость = Ложь; - Элементы.ПользовательИПарольWS.Видимость = Ложь; - Элементы.ПараметрыДоступаВИнтернет.Видимость = Ложь; - - УстановитьПривилегированныйРежим(Истина); - WSКонечнаяТочкаКорреспондента = Строка(Запись.WSКонечнаяТочкаКорреспондента); - УстановитьПривилегированныйРежим(Истина); - Иначе - Элементы.WSКонечнаяТочкаКорреспондента.Видимость = Ложь; - Элементы.WSОбластьДанныхКорреспондента.Видимость = Ложь; - КонецЕсли; - - Элементы.ПроверитьПодключениеWS.Видимость = Ложь; - Элементы.WSОбластьДанныхКорреспондента.ТолькоПросмотр = Не Пользователи.ЭтоПолноправныйПользователь(, Истина); - - Иначе - - Элементы.WSКонечнаяТочкаКорреспондента.Видимость = Ложь; - Элементы.WSОбластьДанныхКорреспондента.Видимость = Ложь; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьОтображениеВкладокВидовТранспорта(); - - ВариантРаботыИнформационнойБазыПриИзменении(); - - АутентификацияОперационнойСистемыПриИзменении(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - - Если ПараметрыЗаписи.Свойство("ВнешниеРесурсыРазрешены") Тогда - Возврат; - КонецЕсли; - - Отказ = Истина; - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьВнешнийРесурсЗавершение", ЭтотОбъект, ПараметрыЗаписи); - Если СтандартныеПодсистемыКлиент.ЗапускПрограммыЗавершен() - И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Истина, Истина, Истина, Истина); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПослеЗаписи(ПараметрыЗаписи) - - Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда - Закрыть(); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - УстановитьПривилегированныйРежим(Истина); - Если COMПарольПользователяИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, COMПарольПользователя, "COMПарольПользователя") - КонецЕсли; - Если FTPСоединениеПарольИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, FTPСоединениеПароль, "FTPСоединениеПароль") - КонецЕсли; - Если WSПарольИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, WSПароль, "WSПароль") - КонецЕсли; - Если ПарольАрхиваСообщенияОбменаИзменен Тогда - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Корреспондент, ПарольАрхиваСообщенияОбмена, "ПарольАрхиваСообщенияОбмена") - КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Запись, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура FILEКаталогОбменаИнформациейОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "FILEКаталогОбменаИнформацией", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайловогоКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) - -ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) - -КонецПроцедуры - -&НаКлиенте -Процедура COMВариантРаботыИнформационнойБазыПриИзменении(Элемент) - - ВариантРаботыИнформационнойБазыПриИзменении(); - -КонецПроцедуры - -&НаКлиенте -Процедура COMАутентификацияОперационнойСистемыПриИзменении(Элемент) - - АутентификацияОперационнойСистемыПриИзменении(); - -КонецПроцедуры - -&НаКлиенте -Процедура WSПарольПриИзменении(Элемент) - WSПарольИзменен = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура ПарольАрхиваСообщенияОбмена1ПриИзменении(Элемент) - ПарольАрхиваСообщенияОбменаИзменен = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура FTPСоединениеПарольПриИзменении(Элемент) - FTPСоединениеПарольИзменен = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура ПарольАрхиваСообщенияОбменаПриИзменении(Элемент) - ПарольАрхиваСообщенияОбменаИзменен = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура ПарольАрхиваСообщенияОбмена2ПриИзменении(Элемент) - ПарольАрхиваСообщенияОбменаИзменен = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура COMПарольПользователяПриИзменении(Элемент) - COMПарольПользователяИзменен = Истина; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура ПроверитьПодключениеCOM(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеCOMЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Истина, Ложь, Ложь, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеWS(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеWSЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Ложь, Ложь, Истина, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFILE(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFILEЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Ложь, Истина, Ложь, Ложь); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFTP(Команда) - - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеFTPЗавершение", ЭтотОбъект); - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Запись, Ложь, Ложь, Ложь, Истина); - МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент"); - МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); - Иначе - ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, КодВозвратаДиалога.ОК); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеEMAIL(Команда) - - ПроверитьПодключение("EMAIL"); - -КонецПроцедуры - -&НаКлиенте -Процедура ПараметрыДоступаВИнтернет(Команда) - - ОбменДаннымиКлиент.ОткрытьФормуПараметровПроксиСервера(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) - - ПараметрыЗаписи = Новый Структура; - ПараметрыЗаписи.Вставить("ЗаписатьИЗакрыть"); - Записать(ПараметрыЗаписи); - -КонецПроцедуры - - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура ПроверитьПодключение(ВидТранспортаСтрокой, НовыйПароль = Неопределено) - - Отказ = Ложь; - - ОчиститьСообщения(); - - ПроверитьПодключениеНаСервере(Отказ, ВидТранспортаСтрокой, НовыйПароль); - - ОповеститьПользователяОРезультатахПодключения(Отказ); - -КонецПроцедуры - -&НаСервере -Процедура ПроверитьПодключениеНаСервере(Отказ, ВидТранспортаСтрокой, НовыйПароль) - - СообщениеОбОшибке = ""; - - ПаролиДляПроверки = Неопределено; - - ДобавитьПарольДляПроверки(ПаролиДляПроверки, "COMПарольПользователя", COMПарольПользователяИзменен); - ДобавитьПарольДляПроверки(ПаролиДляПроверки, "FTPСоединениеПароль", FTPСоединениеПарольИзменен); - ДобавитьПарольДляПроверки(ПаролиДляПроверки, "WSПароль", WSПарольИзменен); - ДобавитьПарольДляПроверки(ПаролиДляПроверки, "ПарольАрхиваСообщенияОбмена", ПарольАрхиваСообщенияОбменаИзменен); - - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Запись, - Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], СообщениеОбОшибке, ПаролиДляПроверки); - - Если Отказ Тогда - ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке, , , , Отказ); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьПарольДляПроверки(Пароли, ВидПароля, ПарольИзменен) - - Если ПарольИзменен Тогда - Если Пароли = Неопределено Тогда - Пароли = Новый Структура; - КонецЕсли; - - Пароли.Вставить(ВидПароля, ЭтотОбъект[ВидПароля]); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ) - - ПараметрыСоединения = Новый Структура; - ПараметрыСоединения.Вставить("COMВариантРаботыИнформационнойБазы", Запись.COMВариантРаботыИнформационнойБазы); - ПараметрыСоединения.Вставить("COMАутентификацияОперационнойСистемы", Запись.COMАутентификацияОперационнойСистемы); - ПараметрыСоединения.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия", - Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия); - ПараметрыСоединения.Вставить("COMИмяПользователя", Запись.COMИмяПользователя); - ПараметрыСоединения.Вставить("COMИмяСервера1СПредприятия", Запись.COMИмяСервера1СПредприятия); - ПараметрыСоединения.Вставить("COMКаталогИнформационнойБазы", Запись.COMКаталогИнформационнойБазы); - - Если Не COMПарольПользователяИзменен Тогда - - УстановитьПривилегированныйРежим(Истина); - ПараметрыСоединения.Вставить("COMПарольПользователя", - ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "COMПарольПользователя")); - УстановитьПривилегированныйРежим(Ложь); - - Иначе - - ПараметрыСоединения.Вставить("COMПарольПользователя", COMПарольПользователя); - - КонецЕсли; - - // Выполняем попытку установки внешнего соединения. - Результат = ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыСоединения); - // Выводим сообщение об ошибке. - Если Результат.Соединение = Неопределено Тогда - ОбщегоНазначения.СообщитьПользователю(Результат.КраткоеОписаниеОшибки, , , , Отказ); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ВыполнитьПроверкуУстановкиПодключенияWS(Отказ) - - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); - - Если Не WSПарольИзменен Тогда - - УстановитьПривилегированныйРежим(Истина); - ПараметрыПодключения.WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Корреспондент, "WSПароль"); - УстановитьПривилегированныйРежим(Ложь); - - Иначе - - ПараметрыПодключения.WSПароль = WSПароль; - - КонецЕсли; - - СообщениеПользователю = ""; - Если Не ОбменДаннымиВебСервис.ЕстьПодключениеККорреспонденту(Запись.Корреспондент, ПараметрыПодключения, СообщениеПользователю) Тогда - ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю,,,, Отказ); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьДоступныеВидыТранспорта() - - ДоступныеВидыТранспорта.Очистить(); - Элементы.ВидТранспортаСообщенийОбменаПоУмолчанию.СписокВыбора.Очистить(); - - ИспользуемыеТранспорты = Новый Массив; - - Если ОбщегоНазначения.РазделениеВключено() Тогда - - Если Запись.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WS - Или Запись.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда - - ИспользуемыеТранспорты.Добавить(Запись.ВидТранспортаСообщенийОбменаПоУмолчанию); - - Иначе - - ТекстИсключения = НСтр("ru ='Настройка транспорта сообщений в режиме сервиса актуальна только для синхронизаций использующих ВЕБ-сервисы'"); - ВызватьИсключение ТекстИсключения; - - КонецЕсли; - - ИначеЕсли ЗначениеЗаполнено(Запись.Корреспондент) Тогда - - ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(Запись.Корреспондент); - - Если ЗначениеЗаполнено(Запись.ВидТранспортаСообщенийОбменаПоУмолчанию) - И ИспользуемыеТранспорты.Найти(Запись.ВидТранспортаСообщенийОбменаПоУмолчанию) = Неопределено Тогда - ИспользуемыеТранспорты.Добавить(Запись.ВидТранспортаСообщенийОбменаПоУмолчанию); - КонецЕсли; - - КонецЕсли; - - ВидыТранспортаИЭлементыФормы = Новый Соответствие(); - ВидыТранспортаИЭлементыФормы.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL, Элементы.НастройкиТранспортаEMAIL.имя); - ВидыТранспортаИЭлементыФормы.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE, Элементы.НастройкиТранспортаFILE.Имя); - ВидыТранспортаИЭлементыФормы.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP, Элементы.НастройкиТранспортаFTP.Имя); - ВидыТранспортаИЭлементыФормы.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.WS, Элементы.НастройкиТранспортаWS.Имя); - ВидыТранспортаИЭлементыФормы.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.COM, Элементы.НастройкиТранспортаCOM.Имя); - ВидыТранспортаИЭлементыФормы.Вставить(Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим, Элементы.НастройкиТранспортаWSПассивныйРежим.Имя); - - Для Каждого Элемент Из ИспользуемыеТранспорты Цикл - - СтрокаДоступныеВидыТранспорта = ДоступныеВидыТранспорта.Добавить(); - СтрокаДоступныеВидыТранспорта.ВидТранспорта = Элемент; - СтрокаДоступныеВидыТранспорта.ИмяСтраницы = ВидыТранспортаИЭлементыФормы.Получить(Элемент); - - Элементы.ВидТранспортаСообщенийОбменаПоУмолчанию.СписокВыбора.Добавить(Элемент, Строка(Элемент)); - - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьОтображениеВкладокВидовТранспорта() - - ИмяСвойстваЭлемента = "Видимость"; -#Если ВебКлиент Тогда - ИмяСвойстваЭлемента = "Доступность"; -#КонецЕсли - - Для Каждого СтраницаВидаТранспорта Из Элементы.СтраницыВидовТранспорта.ПодчиненныеЭлементы Цикл - - СтраницаВидаТранспорта[ИмяСвойстваЭлемента] = Ложь; - - КонецЦикла; - - Для Каждого СтрокаДоступныеВидыТранспорта Из ДоступныеВидыТранспорта Цикл - - ЭлементВкладка = Элементы[СтрокаДоступныеВидыТранспорта.ИмяСтраницы]; - ЭлементВкладка[ИмяСвойстваЭлемента] = Истина; - - Если Запись.ВидТранспортаСообщенийОбменаПоУмолчанию = СтрокаДоступныеВидыТранспорта.ВидТранспорта Тогда - Элементы.СтраницыВидовТранспорта.ТекущаяСтраница = ЭлементВкладка; - КонецЕсли; - - КонецЦикла; - - Если ДоступныеВидыТранспорта.Количество() = 1 Тогда - - Элементы.СтраницыВидовТранспорта.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОповеститьПользователяОРезультатахПодключения(Знач ОшибкаПодключения) - - ТекстПредупреждения = ?(ОшибкаПодключения, НСтр("ru = 'Не удалось установить подключение.'"), - НСтр("ru = 'Подключение успешно установлено.'")); - ПоказатьПредупреждение(, ТекстПредупреждения); - -КонецПроцедуры - -&НаКлиенте -Процедура ВариантРаботыИнформационнойБазыПриИзменении() - - ТекущаяСтраница = ?(Запись.COMВариантРаботыИнформационнойБазы = 0, Элементы.СтраницаВариантРаботыФайловый, Элементы.СтраницаВариантРаботыКлиентСерверный); - - Элементы.ВариантыРаботыИнформационнойБазы.ТекущаяСтраница = ТекущаяСтраница; - -КонецПроцедуры - -&НаКлиенте -Процедура АутентификацияОперационнойСистемыПриИзменении() - - Элементы.COMИмяПользователя.Доступность = Не Запись.COMАутентификацияОперационнойСистемы; - Элементы.COMПарольПользователя.Доступность = Не Запись.COMАутентификацияОперационнойСистемы; - -КонецПроцедуры - -&НаКлиенте -Процедура РазрешитьВнешнийРесурсЗавершение(Результат, ПараметрыЗаписи) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда - ПодключитьОбработчикОжидания("ЗаписатьИЗакрытьПослеЗапросаРазрешенияВнешнихРесурсов", 0.1, Истина); - Иначе - ПодключитьОбработчикОжидания("ЗаписатьПослеЗапросаРазрешенияВнешнихРесурсов", 0.1, Истина); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаписатьИЗакрытьПослеЗапросаРазрешенияВнешнихРесурсов() - - ПараметрыЗаписи = Новый Структура; - ПараметрыЗаписи.Вставить("ВнешниеРесурсыРазрешены"); - ПараметрыЗаписи.Вставить("ЗаписатьИЗакрыть"); - - Записать(ПараметрыЗаписи); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаписатьПослеЗапросаРазрешенияВнешнихРесурсов() - - ПараметрыЗаписи = Новый Структура; - ПараметрыЗаписи.Вставить("ВнешниеРесурсыРазрешены"); - - Записать(ПараметрыЗаписи); - -КонецПроцедуры - -&НаСервереБезКонтекста -Функция СоздатьЗапросНаИспользованиеВнешнихРесурсов(Знач Запись, ЗапрашиватьCOM, - ЗапрашиватьFILE, ЗапрашиватьWS, ЗапрашиватьFTP) - - ЗапросыРазрешений = Новый Массив; - - ПараметрыЗапроса = РегистрыСведений.НастройкиТранспортаОбменаДанными.ПараметрыЗапросаНаИспользованиеВнешнихРесурсов(); - ПараметрыЗапроса.ЗапрашиватьCOM = ЗапрашиватьCOM; - ПараметрыЗапроса.ЗапрашиватьFILE = ЗапрашиватьFILE; - ПараметрыЗапроса.ЗапрашиватьWS = ЗапрашиватьWS; - ПараметрыЗапроса.ЗапрашиватьFTP = ЗапрашиватьFTP; - - РегистрыСведений.НастройкиТранспортаОбменаДанными.ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, - Запись, ПараметрыЗапроса); - - Возврат ЗапросыРазрешений; - -КонецФункции - -&НаКлиенте -Процедура ПроверитьПодключениеFILEЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ПроверитьПодключение("FILE"); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеFTPЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ПроверитьПодключение("FTP", ?(FTPСоединениеПарольИзменен, FTPСоединениеПароль, Неопределено)); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеWSЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - Отказ = Ложь; - - ОчиститьСообщения(); - - ВыполнитьПроверкуУстановкиПодключенияWS(Отказ); - - ОповеститьПользователяОРезультатахПодключения(Отказ); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеCOMЗавершение(Результат, ДополнительныеПараметры) Экспорт - - Если Результат = КодВозвратаДиалога.ОК Тогда - - ОчиститьСообщения(); - - Если ОбщегоНазначенияКлиент.ИнформационнаяБазаФайловая() Тогда - Оповещение = Новый ОписаниеОповещения("ПроверитьПодключениеCOMЗавершениеПослеПроверкиCOMСоединителя", ЭтотОбъект); - ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь, Оповещение); - Иначе - ПроверитьПодключениеCOMЗавершениеПослеПроверкиCOMСоединителя(Истина, Неопределено); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПроверитьПодключениеCOMЗавершениеПослеПроверкиCOMСоединителя(Зарегистрировано, Контекст) Экспорт - - Если Зарегистрировано Тогда - - Отказ = Ложь; - - ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ); - ОповеститьПользователяОРезультатахПодключения(Отказ) - - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl deleted file mode 100644 index 44c0a90ec..000000000 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/ManagerModule.bsl +++ /dev/null @@ -1,658 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область СлужебныйПрограммныйИнтерфейс - -// Процедура добавляет запись в регистр по переданным значениям структуры. -// -// Параметры: -// СтруктураЗаписи - Структура - Структура, содержащая ключи регистра НастройкиТранспортаОбменаДанными -// -Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт - - НачатьТранзакцию(); - Попытка - ОбменДаннымиСлужебный.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбменаДанными"); - - ЗаписатьПароль("COMПарольПользователя", "COMПарольПользователя", СтруктураЗаписи); - ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПароль", СтруктураЗаписи); - ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбмена", СтруктураЗаписи); - - WSЗапомнитьПароль = Неопределено; - Если СтруктураЗаписи.Свойство("WSЗапомнитьПароль", WSЗапомнитьПароль) - И WSЗапомнитьПароль = Истина Тогда - ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Процедура обновляет запись в регистре по переданным значениям структуры. -// -// Параметры: -// СтруктураЗаписи - Структура - Структура, содержащая ключи регистра НастройкиТранспортаОбменаДанными -// -Процедура ОбновитьЗапись(СтруктураЗаписи) Экспорт - - НачатьТранзакцию(); - Попытка - ОбменДаннымиСлужебный.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиТранспортаОбменаДанными"); - - ЗаписатьПароль("COMПарольПользователя", "COMПарольПользователя", СтруктураЗаписи); - ЗаписатьПароль("FTPСоединениеПароль", "FTPСоединениеПароль", СтруктураЗаписи); - ЗаписатьПароль("WSПароль", "WSПароль", СтруктураЗаписи); - ЗаписатьПароль("ПарольАрхиваСообщенияОбмена", "ПарольАрхиваСообщенияОбмена", СтруктураЗаписи); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Для внутреннего использования. -// -// Параметры: -// Корреспондент - ПланОбменаСсылка - Ссылка на узел корреспондента -// ПараметрыАутентификации - Неопределено, Структура - Параметры аутентификации -// -// Возвращаемое значение: -// Структура - Настройки транспорта WS: -// * ИдентификаторИнформационнойБазыИсточника - Строка -// * WSПароль - Строка -Пароль пользователя из безопасного хранилища -// - Неопределено - Если пароль не задан или не вводился -// -Функция НастройкиТранспортаWS(Корреспондент, ПараметрыАутентификации = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СтруктураНастроек = СоставНастроекТранспортаОбмена("WS"); - Результат = ПолучитьДанныеРегистраПоСтруктуре(Корреспондент, СтруктураНастроек); - - Результат.Вставить("ИдентификаторИнформационнойБазыИсточника", ""); - - Если ЗначениеЗаполнено(Результат.WSКонечнаяТочкаКорреспондента) Тогда - - МодульНастройкиТранспортаОбменаСообщениями = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаСообщениями"); - Настройки = МодульНастройкиТранспортаОбменаСообщениями.НастройкиТранспортаWS(Результат.WSКонечнаяТочкаКорреспондента); - - Результат.Вставить("WSПароль"); - ЗаполнитьЗначенияСвойств(Результат, Настройки); - Возврат Результат; - - КонецЕсли; - - WSПароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, "WSПароль"); - УстановитьПривилегированныйРежим(Ложь); - - Если ТипЗнч(WSПароль) = Тип("Строка") - Или WSПароль = Неопределено Тогда - - Результат.Вставить("WSПароль", WSПароль); - Иначе - ВызватьИсключение НСтр("ru = 'Ошибка при извлечении пароля из безопасного хранилища.'"); - КонецЕсли; - - Если ТипЗнч(ПараметрыАутентификации) = Тип("Структура") Тогда // Инициация обмена пользователем с клиента. - - Если ПараметрыАутентификации.ИспользоватьТекущегоПользователя Тогда - - Результат.WSИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; - - КонецЕсли; - - Пароль = Неопределено; - - Если ПараметрыАутентификации.Свойство("Пароль", Пароль) - И Пароль <> Неопределено Тогда // Ввели пароль на клиенте - - Результат.WSПароль = Пароль; - - Иначе // Пароль на клиенте не вводили. - - Пароль = ОбменДаннымиСервер.ПарольСинхронизацииДанных(Корреспондент); - - Результат.WSПароль = ?(Пароль = Неопределено, "", Пароль); - - КонецЕсли; - - ИначеЕсли ТипЗнч(ПараметрыАутентификации) = Тип("Строка") Тогда - Результат.WSПароль = ПараметрыАутентификации; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция НастройкиТранспортаВнешнейСистемы(Корреспондент) Экспорт - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | НастройкиТранспортаОбменаДанными.ПараметрыПодключенияВнешнейСистемы КАК ПараметрыПодключенияВнешнейСистемы - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспортаОбменаДанными - |ГДЕ - | НастройкиТранспортаОбменаДанными.Корреспондент = &Корреспондент - | И НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию = &ВидТранспортаСообщенийОбменаПоУмолчанию"); - Запрос.УстановитьПараметр("Корреспондент", Корреспондент); - Запрос.УстановитьПараметр("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема); - - УстановитьПривилегированныйРежим(Истина); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - Возврат Выборка.ПараметрыПодключенияВнешнейСистемы.Получить(); - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -Процедура СохранитьНастройкиТранспортаВнешнейСистемы(Корреспондент, ПараметрыПодключения) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Корреспондент = Корреспондент; - МенеджерЗаписи.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.ВнешняяСистема; - МенеджерЗаписи.ПараметрыПодключенияВнешнейСистемы = Новый ХранилищеЗначения(ПараметрыПодключения, Новый СжатиеДанных(9)); - - МенеджерЗаписи.Записать(Истина); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам -// -// Параметры: -// ЗапросыРазрешений - Массив из см. РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов -// -Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт - - НастройкиТранспорта = СохраненныеНастройкиТранспорта(); - - Пока НастройкиТранспорта.Следующий() Цикл - - ПараметрыЗапроса = ПараметрыЗапросаНаИспользованиеВнешнихРесурсов(); - ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, НастройкиТранспорта, ПараметрыЗапроса); - - КонецЦикла; - -КонецПроцедуры - -Функция СохраненныеНастройкиТранспорта() - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НастройкиТранспорта.Корреспондент КАК Корреспондент, - | НастройкиТранспорта.FTPСоединениеПуть, - | НастройкиТранспорта.FILEКаталогОбменаИнформацией, - | НастройкиТранспорта.WSURLВебСервиса, - | НастройкиТранспорта.COMКаталогИнформационнойБазы, - | НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия, - | НастройкиТранспорта.FTPСоединениеПуть КАК FTPСоединениеПуть, - | НастройкиТранспорта.FTPСоединениеПорт КАК FTPСоединениеПорт, - | НастройкиТранспорта.WSURLВебСервиса КАК WSURLВебСервиса, - | НастройкиТранспорта.FILEКаталогОбменаИнформацией КАК FILEКаталогОбменаИнформацией - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта"; - - РезультатЗапроса = Запрос.Выполнить(); - - Возврат РезультатЗапроса.Выбрать(); - -КонецФункции - -Функция ПараметрыЗапросаНаИспользованиеВнешнихРесурсов() Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("ЗапрашиватьCOM", Истина); - Параметры.Вставить("ЗапрашиватьFILE", Истина); - Параметры.Вставить("ЗапрашиватьWS", Истина); - Параметры.Вставить("ЗапрашиватьFTP", Истина); - - Возврат Параметры; - -КонецФункции - -Процедура ЗапросНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений, Запись, ПараметрыЗапроса) Экспорт - - Разрешения = Новый Массив; - - МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме"); - - Если ПараметрыЗапроса.ЗапрашиватьFTP И Не ПустаяСтрока(Запись.FTPСоединениеПуть) Тогда - - СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Запись.FTPСоединениеПуть); - Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( - СтруктураАдреса.Схема, СтруктураАдреса.Хост, Запись.FTPСоединениеПорт)); - - КонецЕсли; - - Если ПараметрыЗапроса.ЗапрашиватьFILE И Не ПустаяСтрока(Запись.FILEКаталогОбменаИнформацией) Тогда - - Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы( - Запись.FILEКаталогОбменаИнформацией, Истина, Истина)); - - КонецЕсли; - - Если ПараметрыЗапроса.ЗапрашиватьWS И Не ПустаяСтрока(Запись.WSURLВебСервиса) Тогда - - СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(Запись.WSURLВебСервиса); - Если ЗначениеЗаполнено(СтруктураАдреса.Схема) Тогда - Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( - СтруктураАдреса.Схема, СтруктураАдреса.Хост, СтруктураАдреса.Порт)); - КонецЕсли; - - КонецЕсли; - - Если ПараметрыЗапроса.ЗапрашиватьCOM И (Не ПустаяСтрока(Запись.COMКаталогИнформационнойБазы) - Или Не ПустаяСтрока(Запись.COMИмяИнформационнойБазыНаСервере1СПредприятия)) Тогда - - ИмяCOMСоединителя = ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя(); - Разрешения.Добавить(МодульРаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса( - ИмяCOMСоединителя, ОбщегоНазначения.ИдентификаторCOMСоединителя(ИмяCOMСоединителя))); - - КонецЕсли; - - // Разрешения для обмена через почту запрашиваются в подсистеме Работе с почтовыми сообщениями. - - Если Разрешения.Количество() > 0 Тогда - - ЗапросыРазрешений.Добавить( - МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения, Запись.Корреспондент)); - - КонецЕсли; - -КонецПроцедуры - -Процедура ЗаписатьПароль(ИмяПароляВСтруктуре, ИмяПароляПриЗаписи, СтруктураЗаписи) - - Если СтруктураЗаписи.Свойство(ИмяПароляВСтруктуре) Тогда - УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СтруктураЗаписи.Корреспондент, СтруктураЗаписи[ИмяПароляВСтруктуре], ИмяПароляПриЗаписи); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Функции получения значений настроек для узла плана обмена. - -// Получает значения настроек транспорта определенного вида. -// Если вид транспорта не указан (ВидТранспортаОбмена = Неопределено), -// то получает настройки всех видов транспорта, заведенных в системе. -// -// Параметры: -// Корреспондент - ПланОбменаСсылка - Ссылка на узел корреспондента -// ВидТранспортаОбмена - Неопределено, ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - Вид транспорта обмена -// -// Возвращаемое значение: -// см. НастройкиТранспортаОбмена -// -Функция НастройкиТранспорта(Знач Корреспондент, Знач ВидТранспортаОбмена = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Корреспондент = Корреспондент; - МенеджерЗаписи.Прочитать(); - - Если МенеджерЗаписи.Выбран() Тогда - Возврат НастройкиТранспортаОбмена(Корреспондент, ВидТранспортаОбмена); - ИначеЕсли ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - - МодульНастройкиТранспортаОбменаОбластиДанных = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаОбластиДанных"); - Возврат МодульНастройкиТранспортаОбменаОбластиДанных.НастройкиТранспорта(Корреспондент); - - КонецЕсли; - - Возврат НастройкиТранспортаОбмена(Корреспондент, ВидТранспортаОбмена); - -КонецФункции - -Функция ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Возвращаемое значение функции. - ВидТранспортаСообщений = Неопределено; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта - |ГДЕ - | НастройкиТранспорта.Корреспондент = &Корреспондент"); - Запрос.УстановитьПараметр("Корреспондент", Корреспондент); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ВидТранспортаСообщений = Выборка.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонецЕсли; - - Если ВидТранспортаСообщений = Неопределено - И ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда - - МодульНастройкиТранспортаОбменаОбластейДанных = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиТранспортаОбменаОбластейДанных"); - ВидТранспортаСообщений = МодульНастройкиТранспортаОбменаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент); - - КонецЕсли; - - Возврат ВидТранспортаСообщений; - -КонецФункции - -Функция ИмяКаталогаОбменаИнформацией(ВидТранспортаСообщенийОбмена, УзелИнформационнойБазы) Экспорт - - // Возвращаемое значение функции. - Результат = ""; - - Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE Тогда - - НастройкиТранспорта = НастройкиТранспорта(УзелИнформационнойБазы); - - Результат = НастройкиТранспорта["FILEКаталогОбменаИнформацией"]; - - ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - НастройкиТранспорта = НастройкиТранспорта(УзелИнформационнойБазы); - - Результат = НастройкиТранспорта["FTPСоединениеПуть"]; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция НастроенныеВидыТранспорта(УзелИнформационнойБазы) Экспорт - - Результат = Новый Массив; - - НастройкиТранспорта = НастройкиТранспорта(УзелИнформационнойБазы); - - Если ОбщегоНазначения.РазделениеВключено() - И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - - Если Не НастройкиТранспорта = Неопределено Тогда - Если ЗначениеЗаполнено(НастройкиТранспорта.FILEКаталогОбменаИнформацией) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.FTPСоединениеПуть) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - КонецЕсли; - КонецЕсли; - - Иначе - Если ЗначениеЗаполнено(НастройкиТранспорта.COMКаталогИнформационнойБазы) - Или ЗначениеЗаполнено(НастройкиТранспорта.COMИмяИнформационнойБазыНаСервере1СПредприятия) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.COM); - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.EMAILУчетнаяЗапись) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.EMAIL); - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.FILEКаталогОбменаИнформацией) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE); - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.FTPСоединениеПуть) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP); - КонецЕсли; - - Если ЗначениеЗаполнено(НастройкиТранспорта.WSURLВебСервиса) Тогда - Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.WS); - КонецЕсли; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - -// Получает значения настроек транспорта определенного вида. -// Если вид транспорта не указан (ВидТранспортаОбмена = Неопределено), -// то получает настройки всех видов транспорта, заведенных в системе. -// -// Параметры: -// Корреспондент - ПланОбменаСсылка - Ссылка на узел корреспондента -// ВидТранспортаОбмена - Неопределено, ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена - Вид транспорта обмена -// -// Возвращаемое значение: -// Структура - Настройки транспорта обмена: -// * ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений - Булево -// * ИдентификаторИнформационнойБазыИсточника - Строка -// -Функция НастройкиТранспортаОбмена(Корреспондент, ВидТранспортаОбмена) - - СтруктураНастроек = Новый Структура; - - // Общие настройки для всех видов транспорта. - СтруктураНастроек.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию"); - СписокПаролей = "ПарольАрхиваСообщенияОбмена"; - - Если ВидТранспортаОбмена = Неопределено Тогда - СписокПаролей = СписокПаролей + ",FTPСоединениеПароль,WSПароль,COMПарольПользователя"; - Для Каждого ВидТранспорта Из Перечисления.ВидыТранспортаСообщенийОбмена Цикл - - СтруктураНастроекТранспорта = СоставНастроекТранспортаОбмена(ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспорта)); - - СтруктураНастроек = ОбъединитьКоллекции(СтруктураНастроек, СтруктураНастроекТранспорта); - - КонецЦикла; - - Иначе - - СтруктураНастроекТранспорта = СоставНастроекТранспортаОбмена(ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспортаОбмена)); - СтруктураНастроек = ОбъединитьКоллекции(СтруктураНастроек, СтруктураНастроекТранспорта); - - Если ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда - СписокПаролей = СписокПаролей + ",COMПарольПользователя"; - ИначеЕсли ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда - СписокПаролей = СписокПаролей + ",WSПароль"; - ИначеЕсли ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - СписокПаролей = СписокПаролей + ",FTPСоединениеПароль"; - КонецЕсли; - КонецЕсли; - - Результат = ПолучитьДанныеРегистраПоСтруктуре(Корреспондент, СтруктураНастроек); - Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Истина); - - УстановитьПривилегированныйРежим(Истина); - Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Корреспондент, СписокПаролей); - УстановитьПривилегированныйРежим(Ложь); - - Если ТипЗнч(Пароли) = Тип("Структура") Тогда - Для каждого КлючИЗначение Из Пароли Цикл - Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - Иначе - Результат.Вставить(СписокПаролей, Пароли); - КонецЕсли; - - Результат.Вставить("ИдентификаторИнформационнойБазыИсточника", ""); - - Возврат Результат; -КонецФункции - -Функция ПолучитьДанныеРегистраПоСтруктуре(Корреспондент, СтруктураНастроек) - - Если Не ЗначениеЗаполнено(Корреспондент) Тогда - Возврат СтруктураНастроек; - КонецЕсли; - - Если СтруктураНастроек.Количество() = 0 Тогда - Возврат СтруктураНастроек; - КонецЕсли; - - // Формируем текст запроса только по необходимым полям - - // параметрам для указанного вида транспорта. - ВыбираемыеПоля = ""; - Для Каждого ЭлементНастройки Из СтруктураНастроек Цикл - - ВыбираемыеПоля = ВыбираемыеПоля + ЭлементНастройки.Ключ + ", "; - - КонецЦикла; - - // Убираем последний символ ", ". - СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ВыбираемыеПоля, 2); - - ШаблонТекстаЗапроса = - "ВЫБРАТЬ - | &ВыбираемыеПоля - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаДанными КАК НастройкиТранспорта - |ГДЕ - | НастройкиТранспорта.Корреспондент = &Корреспондент"; - - ТекстЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "&ВыбираемыеПоля", ВыбираемыеПоля); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Корреспондент", Корреспондент); - Выборка = Запрос.Выполнить().Выбрать(); - - // Если есть данные для узла, то заполняем структуру. - Если Выборка.Следующий() Тогда - - Для Каждого ЭлементНастройки Из СтруктураНастроек Цикл - - СтруктураНастроек[ЭлементНастройки.Ключ] = Выборка[ЭлементНастройки.Ключ]; - - КонецЦикла; - - КонецЕсли; - - Возврат СтруктураНастроек; - -КонецФункции - -Функция СоставНастроекТранспортаОбмена(ПодстрокаПоиска) - - СтруктураНастроекТранспорта = Новый Структура; - - НаборЗаписей = СоздатьНаборЗаписей(); - Запись = НаборЗаписей.Добавить(); // Для значений по умолчанию. - - Для Каждого Ресурс Из НаборЗаписей.Метаданные().Ресурсы Цикл - - Если СтрНайти(Ресурс.Имя, ПодстрокаПоиска) <> 0 Тогда - - СтруктураНастроекТранспорта.Вставить(Ресурс.Имя, Запись[Ресурс.Имя]); - - КонецЕсли; - - КонецЦикла; - - Возврат СтруктураНастроекТранспорта; - -КонецФункции - -Функция ОбъединитьКоллекции(Структура1, Структура2) - - СтруктураРезультат = Новый Структура; - - ДополнитьКоллекцию(Структура1, СтруктураРезультат); - ДополнитьКоллекцию(Структура2, СтруктураРезультат); - - Возврат СтруктураРезультат; -КонецФункции - -Процедура ДополнитьКоллекцию(Источник, Приемник) - - Для Каждого Элемент Из Источник Цикл - - Приемник.Вставить(Элемент.Ключ, Элемент.Значение); - - КонецЦикла; - -КонецПроцедуры - -#Область ОбработчикиОбновления - -Процедура ПеренестиНастройкиТранспортаОбменаДаннымиКорреспондента(УзелИнформационнойБазы) Экспорт - - Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; - КонецЕсли; - - Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - НаборЗаписей = РегистрыСведений.УдалитьНастройкиТранспортаОбмена.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); - - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей); - Возврат; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.УдалитьНастройкиТранспортаОбмена"); - ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", УзелИнформационнойБазы); - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиТранспортаОбменаДанными"); - ЭлементБлокировки.УстановитьЗначение("Корреспондент", УзелИнформационнойБазы); - - Блокировка.Заблокировать(); - - НаборЗаписейСтарый = РегистрыСведений.УдалитьНастройкиТранспортаОбмена.СоздатьНаборЗаписей(); - НаборЗаписейСтарый.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); - - НаборЗаписейСтарый.Прочитать(); - - Если НаборЗаписейСтарый.Количество() = 0 Тогда - ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписейСтарый); - Иначе - НаборЗаписейНовый = СоздатьНаборЗаписей(); - НаборЗаписейНовый.Отбор.Корреспондент.Установить(УзелИнформационнойБазы); - - ЗаписьНовый = НаборЗаписейНовый.Добавить(); - ЗаполнитьЗначенияСвойств(ЗаписьНовый, НаборЗаписейСтарый[0]); - ЗаписьНовый.Корреспондент = УзелИнформационнойБазы; - - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписейНовый); - - НаборЗаписейСтарый.Очистить(); - ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписейСтарый); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl deleted file mode 100644 index 73acfa1a3..000000000 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/RecordSetModule.bsl +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 2024, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область ОбработчикиСобытий - -Процедура ПередЗаписью(Отказ, Замещение) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Для Каждого СтрокаНабора Из ЭтотОбъект Цикл - - // Удаляем незначащие символы (пробелы) слева и справа для строковых параметров. - СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); - СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяПользователя"); - СокрЛПЗначениеПоля(СтрокаНабора, "COMИмяСервера1СПредприятия"); - СокрЛПЗначениеПоля(СтрокаНабора, "COMКаталогИнформационнойБазы"); - СокрЛПЗначениеПоля(СтрокаНабора, "FILEКаталогОбменаИнформацией"); - СокрЛПЗначениеПоля(СтрокаНабора, "FTPСоединениеПользователь"); - СокрЛПЗначениеПоля(СтрокаНабора, "FTPСоединениеПуть"); - СокрЛПЗначениеПоля(СтрокаНабора, "WSURLВебСервиса"); - СокрЛПЗначениеПоля(СтрокаНабора, "WSИмяПользователя"); - - КонецЦикла; - -КонецПроцедуры - -Процедура ПриЗаписи(Отказ, Замещение) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - // Обновляем кэш платформы для зачитывания актуальных настроек транспорта - // сообщений обмена процедурой ОбменДаннымиПовтИсп.НастройкиОбменаДанными. - ОбновитьПовторноИспользуемыеЗначения(); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -Процедура СокрЛПЗначениеПоля(Запись, Знач Поле) - - Запись[Поле] = СокрЛП(Запись[Поле]); - -КонецПроцедуры - -#КонецОбласти - -#Иначе -ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form index 1597374d2..33d5a0c75 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Form.form @@ -16,7 +16,7 @@ Запись.ВидТранспортаСообщенийОбменаПоУмолчанию - ВидТранспортаСообщенийОбменаПоУмолчаниюРасширеннаяПодсказка + ВидТранспортаСообщенийОбменаПоУмолчаниюExtendedTooltip 104 Label true @@ -66,7 +66,7 @@ Запись.FILEКаталогОбменаИнформацией - FILEКаталогОбменаИнформациейРасширеннаяПодсказка + FILEКаталогОбменаИнформациейExtendedTooltip 107 Label true @@ -119,7 +119,7 @@ false - ПроверитьПодключениеFILEРасширеннаяПодсказка + ПроверитьПодключениеFILEExtendedTooltip 108 Label true @@ -153,7 +153,7 @@ Right - FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + FILEСжиматьФайлИсходящегоСообщенияExtendedTooltip 110 Label true @@ -194,7 +194,7 @@ ПарольАрхиваСообщенияОбмена1ПриИзменении - ПарольАрхиваСообщенияОбмена1РасширеннаяПодсказка + ПарольАрхиваСообщенияОбмена1ExtendedTooltip 111 Label true @@ -236,7 +236,7 @@ Группа - Группа1РасширеннаяПодсказка + Группа1ExtendedTooltip 109 Label true @@ -265,7 +265,7 @@ Обмен через сетевой каталог - НастройкиТранспортаFILEРасширеннаяПодсказка + НастройкиТранспортаFILEExtendedTooltip 106 Label true @@ -299,7 +299,7 @@ Запись.FTPСоединениеПуть - FTPСоединениеПутьРасширеннаяПодсказка + FTPСоединениеПутьExtendedTooltip 114 Label true @@ -340,7 +340,7 @@ Запись.FTPСоединениеПорт - FTPСоединениеПортРасширеннаяПодсказка + FTPСоединениеПортExtendedTooltip 115 Label true @@ -383,7 +383,7 @@ Сервер порт - ГруппаСерверПортРасширеннаяПодсказка + ГруппаСерверПортExtendedTooltip 113 Label true @@ -415,7 +415,7 @@ Запись.FTPСоединениеПользователь - FTPСоединениеПользовательРасширеннаяПодсказка + FTPСоединениеПользовательExtendedTooltip 117 Label true @@ -464,7 +464,7 @@ FTPСоединениеПарольПриИзменении - FTPСоединениеПарольРасширеннаяПодсказка + FTPСоединениеПарольExtendedTooltip 118 Label true @@ -504,7 +504,7 @@ Пользователь пароль - ГруппаПользовательПарольРасширеннаяПодсказка + ГруппаПользовательПарольExtendedTooltip 116 Label true @@ -536,7 +536,7 @@ Запись.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения - FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка + FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияExtendedTooltip 119 Label true @@ -640,7 +640,7 @@ Right - FTPСоединениеПассивноеСоединениеРасширеннаяПодсказка + FTPСоединениеПассивноеСоединениеExtendedTooltip 120 Label true @@ -675,7 +675,7 @@ false - ПроверитьПодключениеFTPРасширеннаяПодсказка + ПроверитьПодключениеFTPExtendedTooltip 121 Label true @@ -709,7 +709,7 @@ Right - FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка + FTPСжиматьФайлИсходящегоСообщенияExtendedTooltip 123 Label true @@ -750,7 +750,7 @@ ПарольАрхиваСообщенияОбменаПриИзменении - ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка + ПарольАрхиваСообщенияОбменаExtendedTooltip 124 Label true @@ -792,7 +792,7 @@ Группа - Группа3РасширеннаяПодсказка + Группа3ExtendedTooltip 122 Label true @@ -825,7 +825,7 @@ Настройки транспорта FILE - НастройкиТранспортаFTPРасширеннаяПодсказка + НастройкиТранспортаFTPExtendedTooltip 112 Label true @@ -851,7 +851,7 @@ Страницы видов транспорта - СтраницыВидовТранспортаРасширеннаяПодсказка + СтраницыВидовТранспортаExtendedTooltip 105 Label true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl index 9bff1b3ed..ed2a74fe0 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/Forms/ФормаЗаписи/Module.bsl @@ -128,7 +128,7 @@ ПаролиДляПроверки = Новый Структура("FTPСоединениеПароль", FTPСоединениеПароль); КонецЕсли; - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена( + ТранспортСообщенийОбмена.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена( Отказ, Запись, Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой], , ПаролиДляПроверки); КонецПроцедуры @@ -148,6 +148,8 @@ КонецЦикла; + Элементы.ПроверитьПодключениеFTP.Видимость = Ложь; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl index eaeccb832..858ba1e67 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластейДанных/ManagerModule.bsl @@ -21,20 +21,20 @@ Функция НастройкиТранспорта(Знач КонечнаяТочкаКорреспондента) Экспорт ТекстЗапроса = - "ВЫБРАТЬ - | НастройкиТранспорта.FILEКаталогОбменаИнформацией КАК FILEКаталогОбменаИнформацией, - | НастройкиТранспорта.FILEСжиматьФайлИсходящегоСообщения КАК FILEСжиматьФайлИсходящегоСообщения, - | НастройкиТранспорта.FTPСжиматьФайлИсходящегоСообщения КАК FTPСжиматьФайлИсходящегоСообщения, - | НастройкиТранспорта.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения КАК FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, - | НастройкиТранспорта.FTPСоединениеПассивноеСоединение КАК FTPСоединениеПассивноеСоединение, - | НастройкиТранспорта.FTPСоединениеПользователь КАК FTPСоединениеПользователь, - | НастройкиТранспорта.FTPСоединениеПорт КАК FTPСоединениеПорт, - | НастройкиТранспорта.FTPСоединениеПуть КАК FTPСоединениеПуть, - | НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспорта - |ГДЕ - | НастройкиТранспорта.КонечнаяТочкаКорреспондента = &КонечнаяТочкаКорреспондента"; + "ВЫБРАТЬ + | НастройкиТранспорта.FILEКаталогОбменаИнформацией КАК FILEКаталогОбменаИнформацией, + | НастройкиТранспорта.FILEСжиматьФайлИсходящегоСообщения КАК FILEСжиматьФайлИсходящегоСообщения, + | НастройкиТранспорта.FTPСжиматьФайлИсходящегоСообщения КАК FTPСжиматьФайлИсходящегоСообщения, + | НастройкиТранспорта.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения КАК FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, + | НастройкиТранспорта.FTPСоединениеПассивноеСоединение КАК FTPСоединениеПассивноеСоединение, + | НастройкиТранспорта.FTPСоединениеПользователь КАК FTPСоединениеПользователь, + | НастройкиТранспорта.FTPСоединениеПорт КАК FTPСоединениеПорт, + | НастройкиТранспорта.FTPСоединениеПуть КАК FTPСоединениеПуть, + | НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспорта + |ГДЕ + | НастройкиТранспорта.КонечнаяТочкаКорреспондента = &КонечнаяТочкаКорреспондента"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента); @@ -56,9 +56,7 @@ Результат.Вставить("FTPСоединениеПароль", Пароли.FTPСоединениеПарольОбластейДанных); Если Результат.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - ПараметрыFTP = ОбменДаннымиСервер.FTPИмяСервераИПуть(Результат.FTPСоединениеПуть); - + ПараметрыFTP = ТранспортСообщенийОбмена.FTPИмяСервераИПуть(Результат.FTPСоединениеПуть); Результат.Вставить("FTPСервер", ПараметрыFTP.Сервер); Результат.Вставить("FTPПуть", ПараметрыFTP.Путь); Иначе @@ -72,29 +70,6 @@ КонецФункции -Функция ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент) Экспорт - - ВидТранспортаСообщений = Неопределено; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | НастройкиТранспортаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию КАК ВидТранспортаСообщенийОбменаПоУмолчанию - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаОбластиДанных КАК НастройкиТранспортаОбластиДанных - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспортаОбластейДанных - | ПО (НастройкиТранспортаОбластейДанных.КонечнаяТочкаКорреспондента = НастройкиТранспортаОбластиДанных.КонечнаяТочкаКорреспондента) - |ГДЕ - | НастройкиТранспортаОбластиДанных.Корреспондент = &Корреспондент"); - Запрос.УстановитьПараметр("Корреспондент", Корреспондент); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ВидТранспортаСообщений = Выборка.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонецЕсли; - - Возврат ВидТранспортаСообщений; - -КонецФункции #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl index 410ceb0d1..64811ae6d 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбменаОбластиДанных/ManagerModule.bsl @@ -19,32 +19,33 @@ ИмяРегистраНастроекТранспортаОбменаСообщениями = "НастройкиТранспортаОбменаСообщениями"; ТекстЗапроса = - "ВЫБРАТЬ - | """" КАК FILEКаталогОбменаИнформацией, - | """" КАК FTPСоединениеПуть, - | НастройкиТранспортаОбластиДанных.КаталогОбменаИнформацией КАК ОтносительныйКаталогОбменаИнформацией, - | НастройкиТранспортаОбластейДанных.FILEКаталогОбменаИнформацией КАК FILEОбщийКаталогОбменаИнформацией, - | НастройкиТранспортаОбластейДанных.FILEСжиматьФайлИсходящегоСообщения, - | НастройкиТранспортаОбластейДанных.FTPСоединениеПуть КАК FTPОбщийКаталогОбменаИнформацией, - | НастройкиТранспортаОбластейДанных.FTPСжиматьФайлИсходящегоСообщения, - | НастройкиТранспортаОбластейДанных.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, - | НастройкиТранспортаОбластейДанных.FTPСоединениеПассивноеСоединение, - | НастройкиТранспортаОбластейДанных.FTPСоединениеПользователь, - | НастройкиТранспортаОбластейДанных.FTPСоединениеПорт, - | НастройкиТранспортаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию, - | НастройкиТранспортаОбластейДанных.КонечнаяТочкаКорреспондента, - | НастройкиТранспорта.АдресВебСервиса КАК WSURLВебСервиса, - | НастройкиТранспорта.ИмяПользователя КАК WSИмяПользователя, - | """" КАК WSОбластьДанныхКорреспондента, - | """" КАК WSКонечнаяТочкаКорреспондента - |ИЗ - | РегистрСведений.НастройкиТранспортаОбменаОбластиДанных КАК НастройкиТранспортаОбластиДанных - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспортаОбластейДанных - | ПО (НастройкиТранспортаОбластейДанных.КонечнаяТочкаКорреспондента = НастройкиТранспортаОбластиДанных.КонечнаяТочкаКорреспондента) - | ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаНастройкиТранспорта КАК НастройкиТранспорта - | ПО (НастройкиТранспорта.КонечнаяТочка = НастройкиТранспортаОбластиДанных.КонечнаяТочкаКорреспондента) - |ГДЕ - | НастройкиТранспортаОбластиДанных.Корреспондент = &Корреспондент"; + "ВЫБРАТЬ + | """" КАК FILEКаталогОбменаИнформацией, + | """" КАК FTPСоединениеПуть, + | НастройкиТранспортаОбластиДанных.КаталогОбменаИнформацией КАК ОтносительныйКаталогОбменаИнформацией, + | НастройкиТранспортаОбластейДанных.FILEКаталогОбменаИнформацией КАК FILEОбщийКаталогОбменаИнформацией, + | НастройкиТранспортаОбластейДанных.FILEСжиматьФайлИсходящегоСообщения, + | НастройкиТранспортаОбластейДанных.FTPСоединениеПуть КАК FTPОбщийКаталогОбменаИнформацией, + | НастройкиТранспортаОбластейДанных.FTPСжиматьФайлИсходящегоСообщения, + | НастройкиТранспортаОбластейДанных.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, + | НастройкиТранспортаОбластейДанных.FTPСоединениеПассивноеСоединение, + | НастройкиТранспортаОбластейДанных.FTPСоединениеПользователь, + | НастройкиТранспортаОбластейДанных.FTPСоединениеПорт, + | НастройкиТранспортаОбластейДанных.ВидТранспортаСообщенийОбменаПоУмолчанию, + | НастройкиТранспортаОбластейДанных.КонечнаяТочкаКорреспондента, + | НастройкиТранспорта.АдресВебСервиса КАК WSURLВебСервиса, + | НастройкиТранспорта.ИмяПользователя КАК WSИмяПользователя, + | """" КАК WSОбластьДанныхКорреспондента, + | """" КАК WSКонечнаяТочкаКорреспондента + |ИЗ + | РегистрСведений.НастройкиТранспортаОбменаОбластиДанных КАК НастройкиТранспортаОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиТранспортаОбменаОбластейДанных КАК НастройкиТранспортаОбластейДанных + | ПО (НастройкиТранспортаОбластейДанных.КонечнаяТочкаКорреспондента = НастройкиТранспортаОбластиДанных.КонечнаяТочкаКорреспондента) + | ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаНастройкиТранспорта КАК НастройкиТранспорта + | ПО (НастройкиТранспорта.КонечнаяТочка = НастройкиТранспортаОбластиДанных.КонечнаяТочкаКорреспондента) + |ГДЕ + | НастройкиТранспортаОбластиДанных.Корреспондент = &Корреспондент"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаНастройкиТранспорта", "РегистрСведений." + ИмяРегистраНастроекТранспортаОбменаСообщениями); Запрос = Новый Запрос(ТекстЗапроса); @@ -80,12 +81,9 @@ Результат.Вставить("ИспользоватьВременныйКаталогДляОтправкиИПриемаСообщений", Истина); Если Результат.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.FTP Тогда - - ПараметрыFTP = ОбменДаннымиСервер.FTPИмяСервераИПуть(Результат.FTPСоединениеПуть); - + ПараметрыFTP = ТранспортСообщенийОбмена.FTPИмяСервераИПуть(Результат.FTPСоединениеПуть); Результат.Вставить("FTPСервер", ПараметрыFTP.Сервер); Результат.Вставить("FTPПуть", ПараметрыFTP.Путь); - Иначе Результат.Вставить("FTPСервер", ""); Результат.Вставить("FTPПуть", ""); diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html index 345dccb79..490eec631 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html @@ -1,26 +1,26 @@

                  Предназначена для настройки электронной почты.

                  Открывается по команде Настройки на панели навигации настройки почты.

                  -

                  Настройка использования почты во встроенном почтовом клиенте.

                  +

                  Настройка использования почты во встроенном почтовом клиенте.

                  Коллективная почта.

                  Использование коллективной почты.

                  Флажок Удалять письма после отправки.

                  Флажок Помещать письма в папку письма основания.

                  -

                  Флажок В представление включать имя пользователя.

                  +

                  Флажок В представление включать имя пользователя.

                  Использование другого почтового клиента для обработки писем.

                  -

                  Настройка подписей к письму.

                  +

                  Настройка подписей к письму.

                  Настройка использования почты во встроенном почтовом клиенте

                  • Настройки производятся на вкладке Основное с помощью переключателя Во встроенном почтовом клиенте: -
                    • Выберите значение Получать, сохранять и отправлять письма с этой почты, если с данной электронной почты планируется переписка. +
                      • Выберите значение Получать, сохранять и отправлять письма с этой почты, если с данной электронной почты планируется переписка.
                      • -
                      • Если использование во внутреннем почтовом клиенте не предполагается (например, эта электронная почта используется для обменов с другими приложениями), то выберите значение Не использовать.

                    Включение имени пользователя, указанного в почте, в представление отправителя письма

                    +
                  • Если использование во внутреннем почтовом клиенте не предполагается (например, эта электронная почта используется для обменов с другими приложениями), то выберите значение Не использовать.

                Включение имени пользователя, указанного в почте, в представление отправителя письма

                • -
                  Установите флажок В представление включать имя пользователя на вкладке Основное.

                Назначение флажка Удалять письма после отправки

                +
                Установите флажок В представление включать имя пользователя на вкладке Основное.

              Назначение флажка Удалять письма после отправки

              • Настройка производится на вкладке Основное.
              • -
                Если нет необходимости хранить исходящие письма, успешно отправленные с данной почты, то этот флажок должен быть включен.
                +
                Если нет необходимости хранить исходящие письма, успешно отправленные с данной почты, то этот флажок должен быть включен.
              • В этом случае после отправки письма будут удалены.

              Коллективная почта

              @@ -30,12 +30,12 @@
              Выберите Ответственного за обработку писем из списка пользователей. Поле является обязательным для заполнения.
            • -
              Выберите Ответственного за ведение папок из списка пользователей. Поле является обязательным для заполнения.

            Пример использования коллективной почты

            +
            Выберите Ответственного за ведение папок из списка пользователей. Поле является обязательным для заполнения.

            Пример использования коллективной почты

            • Крупная компания имеет большое количество клиентов по всей стране.
            • -
              У компании есть единый почтовый адрес, на который клиенты шлют претензии.
              +
              У компании есть единый почтовый адрес, на который клиенты шлют претензии.
            • Состав и порядок папок почты определяет руководитель службы, которая отвечает за обработку претензий.
              @@ -64,13 +64,13 @@
              В этом случае выполняется синхронизация признака Рассмотрено в приложении с признаком прочтения на почтовом сервере.
            • -
              Синхронизация выполняется в одностороннем порядке. На почтовый клиент приложения получаются и устанавливаются признаки прочтения с сервера. С клиента на сервер изменения признака прочтения не передается. 
              +
              Синхронизация выполняется в одностороннем порядке. На почтовый клиент приложения получаются и устанавливаются признаки прочтения с сервера. С клиента на сервер изменения признака прочтения не передается.
            • При получении писем признак Рассмотрено всегда соответствует состоянию письма на почтовом сервере.
          • -
            В этом почтовом клиенте - разбор корреспонденции происходит в приложении. В этом случае все входящие письма загружаются в приложение не рассмотренными.
          • -

            Настройка подписи к письму

            +
            В этом почтовом клиенте - разбор корреспонденции происходит в приложении. В этом случае все входящие письма загружаются в приложение не рассмотренными.
            +

            Настройка подписи к письму

            • Можно создать подпись двух видов:
              • @@ -81,7 +81,7 @@
                Установите флажок Включить для нужного вида подписи.
              • -
                Выберите из списка формат подписи:
                +
                Выберите из списка формат подписи:
                • Обычный текст;
                • @@ -91,13 +91,13 @@
                  Для того чтобы размещать подписи, включите флажки Включать подпись для новых писем (Включать подпись при ответе или пересылке).
                • -
                  Напишите подпись в соответствующем поле. При выборе формата HTML можно форматировать текст различными способами, вставлять картинки и гиперссылки. Текст можно форматировать с помощью кнопок панели навигации, а также команд меню Еще.
                  +
                  Напишите подпись в соответствующем поле. При выборе формата HTML можно форматировать текст различными способами, вставлять картинки и гиперссылки. Текст можно форматировать с помощью кнопок панели навигации, а также команд меню Еще.
                • -
                  Необходимо учитывать, что при переключении ранее введенной подписи из формата HTML в Обычный текст часть информации (например, картинки, гиперссылки и другие элементы, которые существуют только в формате HTML), удаляется безвозвратно. Приложение выводит об этом предупреждение. Для подтверждения нажмите Да.
                  +
                  Необходимо учитывать, что при переключении ранее введенной подписи из формата HTML в Обычный текст часть информации (например, картинки, гиперссылки и другие элементы, которые существуют только в формате HTML), удаляется безвозвратно. Приложение выводит об этом предупреждение. Для подтверждения нажмите Да.
                • -
                  Также подписи можно настроить по команде Еще - Персональные настройки из списка взаимодействий.

                +
                Также подписи можно настроить по команде Еще - Персональные настройки из списка взаимодействий.

              -

              Важно. Создание подписей в формате HTML доступно, если это предусмотрено настройками приложения. Данную настройку можно изменить в разделе Администрирование - Органайзер, включив флажок Исходящие письма в формате HTML.

              См. также:

              +

              Важно. Создание подписей в формате HTML доступно, если это предусмотрено настройками приложения. Данную настройку можно изменить в разделе Администрирование - Органайзер, включив флажок Исходящие письма в формате HTML.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НеудаленныеОбъекты/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НеудаленныеОбъекты/Forms/ФормаСписка/Form.form index 14827ce6a..1a765e7b0 100644 --- a/SSL/src/InformationRegisters/НеудаленныеОбъекты/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НеудаленныеОбъекты/Forms/ФормаСписка/Form.form @@ -37,6 +37,10 @@ Список 3 + + <key>ru</key> + <value>Список</value> + true true diff --git a/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl b/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl index b7f4c7e99..a7fa99107 100644 --- a/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НеудаленныеОбъекты/RecordSetModule.bsl @@ -15,7 +15,7 @@ Возврат; КонецЕсли; - Если Количество() = 0 Тогда + Если Количество() = 0 Или ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда Возврат; КонецЕсли; diff --git a/SSL/src/InformationRegisters/НеудаленныеОбъекты/НеудаленныеОбъекты.mdo b/SSL/src/InformationRegisters/НеудаленныеОбъекты/НеудаленныеОбъекты.mdo index fd8145688..8c98d4175 100644 --- a/SSL/src/InformationRegisters/НеудаленныеОбъекты/НеудаленныеОбъекты.mdo +++ b/SSL/src/InformationRegisters/НеудаленныеОбъекты/НеудаленныеОбъекты.mdo @@ -90,6 +90,7 @@ ru Объект + АПК:1330 универсальный составной тип, т.к. возможна работа с любыми данными ExchangePlanRef BusinessProcessRef diff --git a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html index 764b3a956..caafd0712 100644 --- a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html +++ b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html @@ -1,13 +1,13 @@

              Предназначен для просмотра нумерации отсканированных документов и их владельцев.

              -

              Список можно просмотреть по команде Настройка сканирования - Открыть номера отсканированных файлов на закладке Работа с файлами в персональных настройках приложения.

              +

              Список можно просмотреть по команде Настройка сканирования - Открыть номера отсканированных файлов на закладке Работа с файлами в персональных настройках приложения.

              Приложение автоматически присваивает номер отсканированным файлам. В списке можно отследить движение файлов, увидеть, какие файлы были удалены.

              В списке выводится:

              -
              • Владелец - объект приложения. Если номер был использован в нескольких объектах приложения, то это можно увидеть в списке; +
                • Владелец - объект приложения. Если номер был использован в нескольких объектах приложения, то это можно увидеть в списке;
                • Номер - номер отсканированного файла.

                Обнуление номеров отсканированных файлов

                -
                • Во время работы со сканированием может потребоваться сбросить (начать с нуля) нумерацию отсканированных файлов у какого-то владельца файлов (папки файлов или элемента списка), например, если несколько изображений было отсканировано в тестовых целях, и после тестирования необходимо сканировать уже в рабочих целях - с правильными номерами. +
                  • Во время работы со сканированием может потребоваться сбросить (начать с нуля) нумерацию отсканированных файлов у какого-то владельца файлов (папки файлов или элемента списка), например, если несколько изображений было отсканировано в тестовых целях, и после тестирования необходимо сканировать уже в рабочих целях - с правильными номерами.
                  • -
                  • Для этого надо найти нужного владельца файлов и поставить значение номера в 0.

                  См. также:

                  +
                • Для этого надо найти нужного владельца файлов и поставить значение номера в 0.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html index b289196c8..496d468db 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Help/ru.html @@ -1,54 +1,54 @@ Предназначена для наблюдения за обновлением доступа на уровне записей. -
                Наблюдение за ходом обновления выполняется по ссылке Обновление доступа на уровне записей в разделе Администрирование - Настройки пользователей и прав - Группы доступа. 
                +
                Наблюдение за ходом обновления выполняется по ссылке Обновление доступа на уровне записей в разделе Администрирование - Настройки пользователей и прав - Группы доступа.

                -
                Ссылка становится доступной, если включен вариант работы Производительный (в разделе Администрирование - Настройки пользователей и прав - Группы доступа). После включения производительного варианта работы продолжает работать стандартное ограничение доступа до тех пор, пока обновление доступа не завершится первый раз. После этого происходит автоматическое переключение в режим повышенной производительности (в качестве признака используется константа Первое обновление доступа завершилось).
                -

                Запуск обновления доступа на уровне записей

                +
                Ссылка становится доступной, если включен вариант работы Производительный (в разделе Администрирование - Настройки пользователей и прав - Группы доступа). После включения производительного варианта работы продолжает работать стандартное ограничение доступа до тех пор, пока обновление доступа не завершится первый раз. После этого происходит автоматическое переключение в режим повышенной производительности (в качестве признака используется константа Первое обновление доступа завершилось).
                +

                Запуск обновления доступа на уровне записей

                -
                Если регламентные задания заблокированы, тогда нужно нажать Запустить -сейчас и дождаться завершения. Перед этим рекомендуется указать количество +
                Если регламентные задания заблокированы, тогда нужно нажать Запустить +сейчас и дождаться завершения. Перед этим рекомендуется указать количество потоков обновления доступа:
                -

                См. также ограничение 12 ядер +на сервер для версии ПРОФ платформы 1С:Предприятие и "Какие ядра процессора следует считать — реальные или виртуальные?".

                После изменения количества потоков с 1 на 2 или более или обратно на 1 поток -нужно остановить обновление (нажать Отменить) и продолжить -(нажать Запустить сейчас). В остальных случаях текущее количество фоновых +нужно остановить обновление (нажать Отменить) и продолжить +(нажать Запустить сейчас). В остальных случаях текущее количество фоновых заданий изменится без перезапуска.

                Регламентное задание выполняется по две минуты с паузой 15 сек до завершения -обновления. При нажатии Запустить сейчас, обновление выполняется +обновления. При нажатии Запустить сейчас, обновление выполняется непрерывно до конца. Когда обновление завершено, регламентное задание автоматически выключается при очередном запуске (но не ранее 15 сек после -завершения), а при планировании обновления автоматически включается. Сообщение, -например, "(завершено в 09:05:03 за -1 мин 5 сек)" означает момент завершения последнего запуска с выполнением +завершения), а при планировании обновления автоматически включается. Сообщение, +например, "(завершено в 09:05:03 за +1 мин 5 сек)" означает момент завершения последнего запуска с выполнением заданий. Запуск с пустым списком заданий не меняет это -сообщение.

                -

                Обновление прогресса

                -
                Для обновления информации о прогрессе включен флажок Автообновление с периодом 3 сек. Если фактическое время обновления превысит указанный период, что обычно происходит на больших базах, тогда период будет автоматически увеличен до фактического времени обновления. При необходимости, период можно уменьшить до требуемого значения. С помощью ссылки можно Обновить прогресс или Отменить обновление прогресса в текущий момент. 
                -

                Прогресс обновления по отдельным спискам

                -
                С помощью кнопки Подробно можно увидеть прогресс обновления по отдельным спискам.
                -
                Включите флажок, для того чтобы Рассчитывать прогресс по количеству данных. С помощью ссылки Настройки отображения можно изменить вид списка обработанных данных, включив нужные флажки:
                +сообщение.

                +

                Обновление прогресса

                +
                Для обновления информации о прогрессе включен флажок Автообновление с периодом 3 сек. Если фактическое время обновления превысит указанный период, что обычно происходит на больших базах, тогда период будет автоматически увеличен до фактического времени обновления. При необходимости, период можно уменьшить до требуемого значения. С помощью ссылки можно Обновить прогресс или Отменить обновление прогресса в текущий момент.
                +

                Прогресс обновления по отдельным спискам

                +
                С помощью кнопки Подробно можно увидеть прогресс обновления по отдельным спискам.
                +
                Включите флажок, для того чтобы Рассчитывать прогресс по количеству данных. С помощью ссылки Настройки отображения можно изменить вид списка обработанных данных, включив нужные флажки:
                • Показывать количество элементов;
                • Показывать количество ключей доступа;
                • Показывать задержку обработки;
                • Показывать имя таблицы;
                • Показывать обработанные списки.

                -

                Ручное управление

                -
                Может возникнуть ситуация, при которой обновление доступа завершено, но доступ отличается от ожидаемого. Для решения такой нештатной ситуации можно воспользоваться командой меню Еще - Ручное управление, в открывшемся списке произвести настройки.
                +

                Ручное управление

                +
                Может возникнуть ситуация, при которой обновление доступа завершено, но доступ отличается от ожидаемого. Для решения такой нештатной ситуации можно воспользоваться командой меню Еще - Ручное управление, в открывшемся списке произвести настройки.

                -
                После того как закрыто окно ручного управления, можно закрыть окно и нажать Запустить сейчас, чтобы не ждать запуск регламентного задания Обновление доступа на уровне записей.
                -

                Остановка обновления доступа

                +
                После того как закрыто окно ручного управления, можно закрыть окно и нажать Запустить сейчас, чтобы не ждать запуск регламентного задания Обновление доступа на уровне записей.
                +

                Остановка обновления доступа

                -
                • При необходимости можно Остановить и запретить обновление доступа с помощью команды меню Еще.
                • -
                • Если обновление доступа запрещено, то в окне появляется предупреждение и ссылка Разрешить. 
                • -
                • При попытке запустить регламентное задание, когда обновление запрещено. возникнет ошибка его запуска. Для того чтобы обновление с помощью регламентного задания выполнялось, нужно нажать ссылку Разрешить. При нажатии на ссылку Запустить сейчас запрещенное обновление разрешается.
                • -
                • Если обновление разрешено, состав заданий для обновления доступа не пустой, а регламентное задание отключено (например, через управление списком регламентных заданий), тогда в окне появляется предупреждение Задание отключено и ссылка Включить. При нажатии на кнопку Запустить сейчас регламентное задание не включается.
                +
                • При необходимости можно Остановить и запретить обновление доступа с помощью команды меню Еще.
                • +
                • Если обновление доступа запрещено, то в окне появляется предупреждение и ссылка Разрешить.
                • +
                • При попытке запустить регламентное задание, когда обновление запрещено. возникнет ошибка его запуска. Для того чтобы обновление с помощью регламентного задания выполнялось, нужно нажать ссылку Разрешить. При нажатии на ссылку Запустить сейчас запрещенное обновление разрешается.
                • +
                • Если обновление разрешено, состав заданий для обновления доступа не пустой, а регламентное задание отключено (например, через управление списком регламентных заданий), тогда в окне появляется предупреждение Задание отключено и ссылка Включить. При нажатии на кнопку Запустить сейчас регламентное задание не включается.
                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl index 581556ef1..1d6509ab1 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаНаУровнеЗаписей/Module.bsl @@ -10,7 +10,8 @@ &НаКлиенте Перем АдресРезультата, АдресХранимыхДанных, ИдентификаторЗаданияОбновленияПрогресса, - ТекстОшибкиОбновленияДоступа, ПрогрессОбновленПослеКомандыЗапуститьСейчас; + ТекстОшибкиОбновленияДоступа, ПрогрессОбновленПослеКомандыЗапуститьСейчас, + ОбновитьПрогрессПриАктивизацииФормы, ДатаИзмененияПланаОбновленияДоступа; #КонецОбласти @@ -80,6 +81,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + ОбновитьПрогрессПриАктивизацииФормы = Ложь; ПрогрессОбновленПослеКомандыЗапуститьСейчас = Истина; ОбновитьЗаголовокГруппыКоличествоПотоковОбновленияДоступа(); @@ -91,9 +93,8 @@ Процедура ПриПовторномОткрытии() ОбновитьСостояниеЗаданияОбновленияДоступа(, Истина); - ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды(); - НачатьОбновлениеПрогресса(Истина); + НачатьОбновлениеПрогресса(Истина, Истина); КонецПроцедуры @@ -404,6 +405,12 @@ &НаКлиенте Процедура ОбновитьСостояниеЗаданияОбновленияДоступа(Состояние = Неопределено, ПриОткрытии = Ложь) + Если Не ПриОткрытии И Не ФормаАктивна() Тогда + ОтключитьОбработчикОжидания("ОбновитьСостояниеЗаданияОбновленияДоступаОбработчикОжидания"); + ПодключитьОбработчикОжидания("ОбновитьСостояниеЗаданияОбновленияДоступаОбработчикОжидания", 1); + Возврат; + КонецЕсли; + ОбновитьВидимостьНастроекОтображения(); Если Состояние = Неопределено Тогда @@ -486,9 +493,10 @@ ВыполнениеЗаданияЗавершено = ЗначениеЗаполнено(Состояние.ПоследнееЗавершениеОбновленияДоступа) И ПоследнееЗавершениеОбновленияДоступа <> Состояние.ПоследнееЗавершениеОбновленияДоступа; - ПоследнееЗавершениеОбновленияДоступа = Состояние.ПоследнееЗавершениеОбновленияДоступа; + СостояниеВыполненияЗаданияИзменилось = Состояние.ОбновлениеДоступаВыполняется + <> Элементы.ОбновлениеДоступаВыполняется.Видимость; Элементы.ОбновлениеДоступаВыполняется.Видимость = Состояние.ОбновлениеДоступаВыполняется; Элементы.ОбновлениеДоступаНеВыполняется.Видимость = Не Состояние.ОбновлениеДоступаВыполняется; @@ -498,30 +506,42 @@ Элементы.КартинкаФоновоеЗаданиеВыполняется.Видимость = Состояние.ФоновоеЗаданиеВыполняется; Элементы.КартинкаФоновоеЗаданиеОжидаетВыполнения.Видимость = Не Состояние.ФоновоеЗаданиеВыполняется; + ПланыОбновленияИзменились = Не Состояние.ОбновлениеДоступаВыполняется + И ДатаИзмененияПланаОбновленияДоступа <> Состояние.ДатаИзмененияПланаОбновления; + ДатаИзмененияПланаОбновленияДоступа = Состояние.ДатаИзмененияПланаОбновления; + Если Не Состояние.ОбновлениеДоступаВыполняется Тогда Элементы.ВремяВыполненияФоновогоЗадания1.Заголовок = ""; Элементы.ВремяВыполненияФоновогоЗадания2.Заголовок = ""; - Если Не ПриОткрытии - И Не АвтообновлениеПрогресса - И (ВыполнениеЗаданияЗавершено - Или ПрогрессОбновленПослеКомандыЗапуститьСейчас <> Истина) Тогда - НачатьОбновлениеПрогресса(Истина); - ПрогрессОбновленПослеКомандыЗапуститьСейчас = Истина; - КонецЕсли; - Возврат; + Иначе + ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется %1'"), + ВремяВыполненияСтрокой(Состояние.ВыполняетсяСекунд)); + + Элементы.ВремяВыполненияФоновогоЗадания1.Заголовок = ТекстЗаголовка; + Элементы.ВремяВыполненияФоновогоЗадания2.Заголовок = ТекстЗаголовка; + + ВидимостьПервого = Элементы.ВремяВыполненияФоновогоЗадания1.Видимость; + ВидимостьПервого = Не ВидимостьПервого; + + Элементы.ВремяВыполненияФоновогоЗадания1.Видимость = ВидимостьПервого; + Элементы.ВремяВыполненияФоновогоЗадания2.Видимость = Не ВидимостьПервого; КонецЕсли; - ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется %1'"), - ВремяВыполненияСтрокой(Состояние.ВыполняетсяСекунд)); + Если ОбновитьПрогрессПриАктивизацииФормы = Истина Тогда + НачатьОбновлениеПрогресса(Истина, Истина); + ОбновитьПрогрессПриАктивизацииФормы = Ложь; + + ИначеЕсли Не ПриОткрытии + И Не АвтообновлениеПрогресса + И (ВыполнениеЗаданияЗавершено + Или ПрогрессОбновленПослеКомандыЗапуститьСейчас <> Истина + Или СостояниеВыполненияЗаданияИзменилось + Или ПланыОбновленияИзменились) Тогда + + НачатьОбновлениеПрогресса(Истина); + КонецЕсли; - Элементы.ВремяВыполненияФоновогоЗадания1.Заголовок = ТекстЗаголовка; - Элементы.ВремяВыполненияФоновогоЗадания2.Заголовок = ТекстЗаголовка; - - ВидимостьПервого = Элементы.ВремяВыполненияФоновогоЗадания1.Видимость; - ВидимостьПервого = Не ВидимостьПервого; - - Элементы.ВремяВыполненияФоновогоЗадания1.Видимость = ВидимостьПервого; - Элементы.ВремяВыполненияФоновогоЗадания2.Видимость = Не ВидимостьПервого; + ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды(); КонецПроцедуры @@ -611,25 +631,44 @@ КонецЕсли; Состояние.Вставить("РегламентноеЗаданиеОтключено", Ложь); + Состояние.Вставить("ДатаИзмененияПланаОбновления", '00010101'); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина + | ОбновлениеКлючейДоступаКДанным.ДатаИзмененияЗаписиРегистра КАК ДатаИзменения |ИЗ | РегистрСведений.ОбновлениеКлючейДоступаКДанным КАК ОбновлениеКлючейДоступаКДанным | - |ОБЪЕДИНИТЬ ВСЕ + |УПОРЯДОЧИТЬ ПО + | ОбновлениеКлючейДоступаКДанным.ДатаИзмененияЗаписиРегистра УБЫВ + |; | + |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА + | ОбновлениеКлючейДоступаПользователей.ДатаИзмененияЗаписиРегистра КАК ДатаИзменения |ИЗ - | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаПользователей"; + | РегистрСведений.ОбновлениеКлючейДоступаПользователей КАК ОбновлениеКлючейДоступаПользователей + | + |УПОРЯДОЧИТЬ ПО + | ОбновлениеКлючейДоступаПользователей.ДатаИзмененияЗаписиРегистра УБЫВ"; - Если Запрос.Выполнить().Пустой() Тогда + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если РезультатыЗапроса[0].Пустой() И РезультатыЗапроса[1].Пустой() Тогда Возврат Состояние; КонецЕсли; + Если Не РезультатыЗапроса[0].Пустой() Тогда + Состояние.ДатаИзмененияПланаОбновления = РезультатыЗапроса[0].Выгрузить()[0].ДатаИзменения; + КонецЕсли; + Если Не РезультатыЗапроса[1].Пустой() Тогда + ДатаИзменения = РезультатыЗапроса[1].Выгрузить()[0].ДатаИзменения; + Если ДатаИзменения > Состояние.ДатаИзмененияПланаОбновления Тогда + Состояние.ДатаИзмененияПланаОбновления = ДатаИзменения; + КонецЕсли; + КонецЕсли; + Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей); Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); Включено = Ложь; @@ -703,7 +742,14 @@ КонецФункции &НаКлиенте -Процедура НачатьОбновлениеПрогресса(ЗапускВручную = Ложь) +Функция ФормаАктивна() + + Возврат АктивноеОкно() = Окно; + +КонецФункции + +&НаКлиенте +Процедура НачатьОбновлениеПрогресса(ЗапускВручную = Ложь, ПриАктивизацииФормы = Ложь) Если ЗапускВручную И ЗначениеЗаполнено(ИдентификаторЗаданияОбновленияПрогресса) Тогда ОтменитьОбновлениеПрогрессаНаСервере(ИдентификаторЗаданияОбновленияПрогресса); @@ -714,6 +760,11 @@ Возврат; КонецЕсли; + Если Не ПриАктивизацииФормы И Не ФормаАктивна() Тогда + ОбновитьПрогрессПриАктивизацииФормы = Истина; + Возврат; + КонецЕсли; + ПодключитьОбработчикОжидания("ОбновитьПрогрессОбработчикОжидания", 0.1, Истина); ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды(); @@ -722,6 +773,8 @@ Элементы.КартинкаОбновлениеПрогресса.Видимость = Истина; Элементы.КартинкаОжиданиеОбновленияПрогресса.Видимость = Ложь; + ПрогрессОбновленПослеКомандыЗапуститьСейчас = Истина; + КонецПроцедуры &НаКлиенте @@ -872,7 +925,6 @@ КонецЕсли; ОбновитьСостояниеЗаданияОбновленияДоступа(Контекст.СостояниеЗаданияОбновленияДоступа); - ОбновитьСостояниеЗаданияОбновленияДоступаЧерезТриСекунды(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html index 337bd4dd7..ce3ca5f70 100644 --- a/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html +++ b/SSL/src/InformationRegisters/ОбновлениеКлючейДоступаКДанным/Forms/ОбновлениеДоступаРучноеУправление/Help/ru.html @@ -3,9 +3,9 @@

                Предназначена для планирование обновления доступа на уровне записей.
                -
                Может возникнуть ситуация, при которой обновление доступа завершено, но доступ отличается от ожидаемого. Для решения такой нештатной ситуации можно воспользоваться командой меню Еще - Ручное управление и сделать следующее.
                +
                Может возникнуть ситуация, при которой обновление доступа завершено, но доступ отличается от ожидаемого. Для решения такой нештатной ситуации можно воспользоваться командой меню Еще - Ручное управление и сделать следующее.

                Обновление доступа к объекту

                -
                Если проблема возникла с конкретным объектов (документом, элементом справочника и др.), тогда можно выбрать его и нажать Обновить доступ. При этом будет выполнено обновление и выведено сообщение о результате: был ли доступ обновлен или же обновление не требуется (рассчитанные права актуальны).
                +
                Если проблема возникла с конкретным объектов (документом, элементом справочника и др.), тогда можно выбрать его и нажать Обновить доступ. При этом будет выполнено обновление и выведено сообщение о результате: был ли доступ обновлен или же обновление не требуется (рассчитанные права актуальны).

                Обновление доступа ко всем элементам списков

                Если проблема возникла с множеством объектов или записей регистров, тогда следует запланировать обновление для списка в целом.

                @@ -16,9 +16,9 @@
              • Удалить устаревшие служебные данные.
              Если нет понимания, в какой части требуется обновление, тогда следует делать обновление во всех трех частях.
              При открытии отмечены все списки к обновлению. Такое обновление может занять длительное время, особенно в части обновления прав на ключи доступа. Поэтому следует отметить только требуемые списки.
              -
              После этого нужно нажать кнопку Запланировать обновление. Обновление будет выполняться в том же порядке, как и в случае автоматического планирования обновления. 
              +
              После этого нужно нажать кнопку Запланировать обновление. Обновление будет выполняться в том же порядке, как и в случае автоматического планирования обновления.

              -
              См. также:
              +
              См. также:
              diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index 6dd9d3ada..3f084b8a9 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -657,7 +657,7 @@ КонецПроцедуры -Процедура ОбновитьОбщиеНастройкиКорреспондента(УзелИнформационнойБазы) Экспорт +Процедура ОбновитьОбщиеНастройкиКорреспондента(УзелИнформационнойБазы) Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда НаборЗаписей = СоздатьНаборЗаписей(); diff --git a/SSL/src/InformationRegisters/ОповещенияПользователейСертификатов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ОповещенияПользователейСертификатов/RecordSetModule.bsl index 4ddff199d..12bde1aaa 100644 --- a/SSL/src/InformationRegisters/ОповещенияПользователейСертификатов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ОповещенияПользователейСертификатов/RecordSetModule.bsl @@ -14,6 +14,10 @@ Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; Если Не ДополнительныеСвойства.Свойство("ИдентификаторНапоминания") Тогда Возврат; diff --git a/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/ManagerModule.bsl b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/ManagerModule.bsl new file mode 100644 index 000000000..d4f7745d8 --- /dev/null +++ b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/ManagerModule.bsl @@ -0,0 +1,109 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ИдентификаторКоманды(Документ, Организация, Получатель) Экспорт + + ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Документ)); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОсновныеПечатныеФормыКонтрагентов.Идентификатор + |ИЗ + | РегистрСведений.ОсновныеПечатныеФормыКонтрагентов КАК ОсновныеПечатныеФормыКонтрагентов + |ГДЕ + | ОсновныеПечатныеФормыКонтрагентов.Организация = &Организация + | И ОсновныеПечатныеФормыКонтрагентов.Получатель = &Получатель + | И ОсновныеПечатныеФормыКонтрагентов.ТипОбъекта = &ТипОбъекта + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ОсновныеПечатныеФормыКонтрагентов.Идентификатор + |ИЗ + | РегистрСведений.ОсновныеПечатныеФормыКонтрагентов КАК ОсновныеПечатныеФормыКонтрагентов + |ГДЕ + | ОсновныеПечатныеФормыКонтрагентов.Организация = &Организация + | И ОсновныеПечатныеФормыКонтрагентов.ТипОбъекта = &ТипОбъекта"; + + Запрос.УстановитьПараметр("Организация", Организация); + Запрос.УстановитьПараметр("Получатель", Получатель); + Запрос.УстановитьПараметр("ТипОбъекта", ТипОбъекта); + + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + Выборка = РезультатЗапроса.Выбрать(); + + Если Выборка.Следующий() Тогда + Результат = Выборка.Идентификатор; + Иначе + Результат = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ЗаписатьИдентификаторПечатнойФормы(Ссылка, Идентификатор) Экспорт + + КлючевыеРеквизиты = КлючевыеРеквизиты(); + + УправлениеПечатьюПереопределяемый.ПриОпределенииКлючевыхРеквизитовОсновныхПечатныхФорм( + Ссылка, КлючевыеРеквизиты); + + Организация = КлючевыеРеквизиты.Организация; + Получатель = КлючевыеРеквизиты.Получатель; + ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Ссылка.Метаданные()); + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Организация.Установить(Организация); + НаборЗаписей.Отбор.Получатель.Установить(Получатель); + НаборЗаписей.Отбор.ТипОбъекта.Установить(ТипОбъекта); + УстановитьПривилегированныйРежим(Истина); + НаборЗаписей.Прочитать(); + УстановитьПривилегированныйРежим(Ложь); + + ИдентификаторБезСпецСимволов = УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(Идентификатор); + + Если НаборЗаписей.Количество() = 1 Тогда + Если НаборЗаписей[0].Идентификатор = ИдентификаторБезСпецСимволов Тогда + Возврат; + Иначе + НаборЗаписей[0].Идентификатор = ИдентификаторБезСпецСимволов; + КонецЕсли; + Иначе + НаборЗаписей.Добавить(); + НаборЗаписей[0].Организация = Организация; + НаборЗаписей[0].Получатель = Получатель; + НаборЗаписей[0].ТипОбъекта = ТипОбъекта; + НаборЗаписей[0].Идентификатор = ИдентификаторБезСпецСимволов; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + НаборЗаписей.Записать(); + УстановитьПривилегированныйРежим(Ложь); +КонецПроцедуры + +Функция КлючевыеРеквизиты() Экспорт + + Структура = Новый Структура; + Структура.Вставить("Организация", Неопределено); + Структура.Вставить("Получатель", Неопределено); + + Возврат Структура; + +КонецФункции + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/RecordSetModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/ОсновныеПечатныеФормыКонтрагентов.mdo b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/ОсновныеПечатныеФормыКонтрагентов.mdo new file mode 100644 index 000000000..d7f88e1de --- /dev/null +++ b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыКонтрагентов/ОсновныеПечатныеФормыКонтрагентов.mdo @@ -0,0 +1,122 @@ + + + + + + + + + + + + ОсновныеПечатныеФормыКонтрагентов + + ru + Основные печатные формы контрагентов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Идентификатор + + ru + Идентификатор + + + String + + 100 + + + + + Use + Use + + + + Организация + + ru + Организация + + + DefinedType.Организация + + + + Use + Use + true + + true + true + + + Получатель + + ru + Получатель + + + DefinedType.ПолучательПечатныхФорм + + + + Use + Use + true + + true + true + + + ТипОбъекта + + ru + Тип объекта + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/ManagerModule.bsl new file mode 100644 index 000000000..f3f64cbe5 --- /dev/null +++ b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/ManagerModule.bsl @@ -0,0 +1,160 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ИдентификаторКоманды(Объект) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОсновныеПечатныеФормыОбъектов.Идентификатор + |ИЗ + | РегистрСведений.ОсновныеПечатныеФормыОбъектов КАК ОсновныеПечатныеФормыОбъектов + |ГДЕ + | ОсновныеПечатныеФормыОбъектов.Объект = &Объект"; + + Запрос.УстановитьПараметр("Объект", Объект); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + Если Выборка.Следующий() Тогда + Результат = Выборка.Идентификатор; + Иначе + Результат = ""; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ИдентификаторыКоманд(Объекты) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОсновныеПечатныеФормыОбъектов.Объект КАК Объект, + | ОсновныеПечатныеФормыОбъектов.Идентификатор КАК Идентификатор + |ИЗ + | РегистрСведений.ОсновныеПечатныеФормыОбъектов КАК ОсновныеПечатныеФормыОбъектов + |ГДЕ + | ОсновныеПечатныеФормыОбъектов.Объект В (&Объекты) + |ИТОГИ + |ПО + | Идентификатор"; + + Запрос.УстановитьПараметр("Объекты", Объекты); + + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + ВыборкаИдентификаторы = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + + Результат = Новый Структура; + + Пока ВыборкаИдентификаторы.Следующий() Цикл + Выборка = ВыборкаИдентификаторы.Выбрать(); + + Ссылки = Новый Массив; + Пока Выборка.Следующий() Цикл + Ссылки.Добавить(Выборка.Объект); + КонецЦикла; + Результат.Вставить(ВыборкаИдентификаторы.Идентификатор, Ссылки); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура СохранитьНаименованиеОсновнойПечатнойФормы(Ссылки, НаименованиеПечатнойФормы, Идентификатор) Экспорт + + Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда + МассивСсылок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Ссылки); + Иначе + МассивСсылок = ОбщегоНазначения.СкопироватьРекурсивно(Ссылки); + КонецЕсли; + + Пользователь = Пользователи.ТекущийПользователь(); + Дата = ТекущаяДатаСеанса(); + + Для Каждого СсылкаНаОбъект Из МассивСсылок Цикл + + Запись = СоздатьМенеджерЗаписи(); + Запись.Объект = СсылкаНаОбъект; + Запись.Идентификатор = УправлениеПечатьюКлиентСервер.ИдентификаторБезСпецСимволов(Идентификатор); + Запись.Пользователь = Пользователь; + Запись.Дата = Дата; + Запись.НаименованиеПечатнойФормы = НаименованиеПечатнойФормы; + УстановитьПривилегированныйРежим(Истина); + Запись.Записать(Истина); + УстановитьПривилегированныйРежим(Ложь); + + КонецЦикла; + +КонецПроцедуры + +Функция НаименованияПечатныхФорм(Ссылки) Экспорт + + Результат = Новый Соответствие; + Для Каждого Ссылка Из Ссылки Цикл + Результат.Вставить(Ссылка, Неопределено); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОсновныеПечатныеФормыОбъектов.Объект КАК Объект, + | ОсновныеПечатныеФормыОбъектов.НаименованиеПечатнойФормы КАК НаименованиеПечатнойФормы + |ИЗ + | РегистрСведений.ОсновныеПечатныеФормыОбъектов КАК ОсновныеПечатныеФормыОбъектов + |ГДЕ + | ОсновныеПечатныеФормыОбъектов.Объект В (&Ссылки)"; + + Запрос.УстановитьПараметр("Ссылки", Ссылки); + + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Результат[Выборка.Объект] = Выборка.НаименованиеПечатнойФормы; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция СохраненныеНаименования(Объекты) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОсновныеПечатныеФормыОбъектов.НаименованиеПечатнойФормы КАК НаименованиеПечатнойФормы, + | ОсновныеПечатныеФормыОбъектов.Идентификатор, + | ОсновныеПечатныеФормыОбъектов.Пользователь, + | ОсновныеПечатныеФормыОбъектов.Дата + |ИЗ + | РегистрСведений.ОсновныеПечатныеФормыОбъектов КАК ОсновныеПечатныеФормыОбъектов + |ГДЕ + | ОсновныеПечатныеФормыОбъектов.Объект В (&Объекты)"; + + Запрос.УстановитьПараметр("Объекты", Объекты); + УстановитьПривилегированныйРежим(Истина); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + УстановитьПривилегированныйРежим(Ложь); + + Возврат ОбщегоНазначения.ТаблицаЗначенийВМассив(РезультатЗапроса); + +КонецФункции +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/RecordSetModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/ОсновныеПечатныеФормыОбъектов.mdo b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/ОсновныеПечатныеФормыОбъектов.mdo new file mode 100644 index 000000000..3452b3f64 --- /dev/null +++ b/SSL/src/InformationRegisters/ОсновныеПечатныеФормыОбъектов/ОсновныеПечатныеФормыОбъектов.mdo @@ -0,0 +1,137 @@ + + + + + + + + + + + + ОсновныеПечатныеФормыОбъектов + + ru + Основные печатные формы объектов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Идентификатор + + ru + Идентификатор + + + String + + 100 + + + + + Use + Use + + + + НаименованиеПечатнойФормы + + ru + Наименование печатной формы + + + String + + 100 + + + + + Use + Use + + + + Пользователь + + ru + Пользователь + + + DefinedType.Пользователь + + + + Use + Use + + + + Дата + + ru + Дата + + + Date + + + + + Use + Use + + + + Объект + + ru + Объект + + + DefinedType.ОбъектСОсновнымиПечатнымиФормами + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl index e1c120634..6ef0a0ce5 100644 --- a/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыОграниченияДоступа/ManagerModule.bsl @@ -142,8 +142,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#Область ОбновлениеИнформационнойБазы // Обновляет версию текстов ограничений доступа. // @@ -544,4 +543,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl index 39bfe0f10..b90fba379 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыВерсийРасширений/ManagerModule.bsl @@ -154,7 +154,7 @@ НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.ВерсияРасширений = ВерсияРасширений; НоваяЗапись.ИмяПараметра = ИмяПараметра; - НоваяЗапись.ХранилищеПараметра = Новый ХранилищеЗначения(Содержимое); + НоваяЗапись.ХранилищеПараметра = Новый ХранилищеЗначения(Содержимое, Новый СжатиеДанных(9)); НаборЗаписей.Записать(); diff --git a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl index c6e339cda..79ff2f2b9 100644 --- a/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПараметрыРаботыПрограммы/ManagerModule.bsl @@ -411,10 +411,9 @@ |может быть выполнено только в фоновом задании без расширений приложения. | |В файловой информационной базе фоновое задание невозможно запустить - |из другого фонового задания, а также из COM-Соединения. + |из другого фонового задания, а также из COM-соединения. | - |Для выполнения обновления необходимо, либо делать обновление интерактивно - |через запуск 1С:Предприятия, либо временно отключать расширения приложения.'"); + |Необходимо запустить обновление в сеансе 1С:Предприятия или временно отключать расширения приложения.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -640,8 +639,7 @@ Если ЗначениеЗаполнено(ПараметрыСеанса.ПодключенныеРасширения) Тогда ТекстОшибки = - НСтр("ru = 'Не удалось обновить параметры работы приложения по причине: - |Найдены подключенные расширения приложения.'"); + НСтр("ru = 'Не удалось обновить параметры работы приложения, т.к. подключены расширения.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; @@ -1176,7 +1174,7 @@ НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.ИмяПараметра = ИмяПараметра; - НоваяЗапись.ХранилищеПараметра = Новый ХранилищеЗначения(ХранимыеДанные); + НоваяЗапись.ХранилищеПараметра = Новый ХранилищеЗначения(ХранимыеДанные, Новый СжатиеДанных(9)); НаборЗаписей.Записать(); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html index 63ebdafb0..3b5ece3b3 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html @@ -5,13 +5,13 @@
            • использовать двойной щелчок левой кнопкой мыши;
            • -
            • нажать  Изменить.

            Варианты открытия макета:

            -

            С помощью переключателя выберите режим открытия макета по двойному щелчку мыши (клавише Enter):

            -
            • Только для просмотра - макет не будет помечен как занятый Вами для редактирования и откроется внешним приложением в режиме "только просмотр". +
            • нажать Изменить.

            Варианты открытия макета:

            +

            С помощью переключателя выберите режим открытия макета по двойному щелчку мыши (клавише Enter):

            +
            • Только для просмотра - макет не будет помечен как занятый Вами для редактирования и откроется внешним приложением в режиме "только просмотр".
            • -
            • Для просмотра и редактирования - макет будет помечен как занятый Вами для редактирования и откроется внешним приложением с возможностью внесения и сохранения изменений.

            Прекращение вывода сообщения

            +
          • Для просмотра и редактирования - макет будет помечен как занятый Вами для редактирования и откроется внешним приложением с возможностью внесения и сохранения изменений.
          • Прекращение вывода сообщения

            • Для того чтобы больше не выводить это сообщение, включите флажок Больше не спрашивать.
            • -
            • Поменять эту настройку затем можно из персональных настроек, вкладка Главное, ссылка Задать действие при выборе макета печатной формы.

            См. также:

            +
          • Поменять эту настройку затем можно из персональных настроек, вкладка Главное, ссылка Задать действие при выборе макета печатной формы.
          • См. также:

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index 95b227dd1..20649a098 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -3,6 +3,54 @@ ГруппаОтборы 46 + + ГруппировкаПоРазделам + 256 + + <key>ru</key> + <value>Группировка по разделам</value> + + true + true + + true + + + ГруппировкаПоРазделам + + None + + OnChange + ГруппировкаПоРазделамПриИзменении + + + ГруппировкаПоРазделамРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + + ГруппировкаПоРазделамКонтекстноеМеню + 257 + true + + CheckBoxField + Enter + true + Left + true + + Tumbler + + ru + БЛ='По объектам'; БИ='По подсистемам' + + + ОтборПоИспользованиюМакета 52 @@ -539,6 +587,130 @@ AsFileRef + + ГруппаФорматСохранения + 243 + + МакетыИндексКартинкиФорматаСохранения + 245 + + <key>ru</key> + <value>Индекс картинки формата сохранения</value> + + true + true + + true + + + Макеты.ИндексКартинкиФорматаСохранения + + + МакетыИндексКартинкиФорматаСохраненияРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + МакетыИндексКартинкиФорматаСохраненияКонтекстноеМеню + 246 + true + + PictureField + Enter + Left + true + + true + true + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + + 1 + + AsFileRef + + + + МакетыФорматСохраненияВыгрузки + 248 + + <key>ru</key> + <value>Формат сохранения</value> + + true + true + + true + + + Макеты.ФорматСохраненияВыгрузки + + + МакетыФорматСохраненияВыгрузкиРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + МакетыФорматСохраненияВыгрузкиКонтекстноеМеню + 249 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Формат сохранения</value> + + + ГруппаФорматСохраненияРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + МакетыКнопкаНастройкиДоступности 182 @@ -851,6 +1023,36 @@ UserCmds Auto + + МакетыДобавитьМакетВыгрузки + 254 + + <key>ru</key> + <value>Создать макет выгрузки</value> + + true + true + + true + + + МакетыДобавитьМакетВыгрузкиРасширеннаяПодсказка + 255 + Label + true + true + + Left + + + Form.Command.ДобавитьМакетВыгрузки + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1487,6 +1689,10 @@ BeforeClose ПередЗакрытием + + URLGetProcessing + ОбработкаПолученияНавигационнойСсылки + OnLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере @@ -1989,6 +2195,85 @@ true + + МакетДляВыгрузкиОбъекта + 50 + + Boolean + + + true + + + true + + + + ФорматСохраненияВыгрузки + + <key>ru</key> + <value>Формат сохранения выгрузки</value> + + 47 + + EnumRef.ФорматыВыгрузкиОбъектов + + + true + + + true + + + + ИндексКартинкиФорматаСохранения + + <key>ru</key> + <value>Индекс картинки формата сохранения</value> + + 48 + + Number + + 10 + + + + true + + + true + + + + ОсновнаяПечатнаяФорма + 45 + + Boolean + + + true + + + true + + + + НаименованиеПечатнойФормы + 46 + + String + + 100 + + + + true + + + true + + ПоказыватьИзмененные @@ -2102,6 +2387,49 @@ true + + МакетыВыгрузки + 44 + + Boolean + + + true + + + true + + + + ИзмененСпособГруппировки + 45 + + Boolean + + + true + + + true + + + + ГруппировкаПоРазделам + + <key>ru</key> + <value>Группировка по разделам</value> + + 49 + + Boolean + + + true + + + true + + ИспользоватьИзмененныйМакет @@ -2328,6 +2656,28 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ДобавитьМакетВыгрузки</name> + <title> + <key>ru</key> + <value>Добавить макет выгрузки</value> + + 3 + + ru + Добавить макет выгрузки + + + true + + + + ДобавитьМакетВыгрузки + + + Auto + Auto + ПутьКМакету @@ -2335,6 +2685,20 @@ + + МакетыВыгрузки + + Boolean + + true + + + Владелец + + String + + + diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html index 6adb18e56..64c7666d8 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html @@ -1,79 +1,90 @@ -

            Предназначен для управления макетами печати. В списке перечислены макеты (бланки) всех печатных форм, имеющихся в приложении.

            -

            Открыть список можно с помощью команды Макеты печатных форм раздела Администрирование - Печатные формы, отчеты и обработки.

            +

            Предназначен для управления макетами печатных форм и макетами файлов выгрузки.

            +

            Открыть список макетов можно с помощью соответствующих команд раздела Администрирование - Печатные формы, отчеты и обработки. Список макетов доступен в двух режимах: по подсистемам (по разделам интерфейса) и по объектам (видам объектов).

            +

            Макеты печатных форм

            В списке выводится:

            -
            • Макет печатной формы - полное наименование печатной формы, указывается также и приложение, в которой сделан макет. Значок рядом с наименованием указывает, в каком приложении сделан макет. Список макетов построен в виде дерева, поэтому наглядно видно, к какому документу или списку относится данный макет.
            • -
            •  - использование. С помощью флажка в этой колонке можно включить или выключить соответствующую команду печати в подменю Печать.
            • -
            •  - проставляется значок, если в макет внесены изменения. Показывает макеты, созданные или измененные пользователем. Значок серого цвета указывает на то, что есть изменения по отношению к стандартному макету, но они отключены, используется стандартный макет;
            • -
            •  - доступен перевод. Наличие значка означает, что имеется возможность перевода макета на другие языки.
            • -
            • Доп. языки - в этой колонке перечислены доп. языки, на которые переведен макет.

            Отборы

            -
            • -
              Если макетов много, то можно воспользоваться предусмотренными в приложении средствами для отбора нужных макетов.
              -
            • -
            • -
              Найти необходимый макет можно по наименованию или части наименования. Для этого напишите поисковое выражение в поле слева.
              -
            • -
            • -
              Макеты можно отобрать по определенному признаку с помощью поля Показывать:
              -
              • Все макеты, -
              • -
              • Стандартные макеты (без изменений), -
              • -
              • Используемые макеты с внесенными изменениями, -
              • -
              • Неиспользуемые макеты с внесенными изменениями, -
              • -
              • Все макеты с внесенными изменениями.
            • -
            • Макеты на нужном языке можно отобрать с помощью поля Язык (если включены дополнительные языки). 

            Создание макета

            +
            • Макет печатной формы - полное наименование печатной формы. Значок рядом с наименованием указывает, в каком приложении сделан макет. Список макетов построен в виде дерева, поэтому наглядно видно, к какому документу или списку относится данный макет.
            • +
            • - использование. С помощью флажка в этой колонке можно включить или выключить соответствующую команду печати в подменю Печать.
            • +
            • - проставляется значок, если в макет внесены изменения. Показывает макеты, созданные или измененные пользователем. Значок серого цвета указывает на то, что есть изменения по отношению к стандартному макету, но они отключены, используется стандартный макет;
            • +
            • - условия видимости. С помощью кнопки можно ограничить доступность соответствующей команды печати в зависимости от значений реквизитов. Видимость команд печати нужна для того, чтобы печатная форма могла быть сформирована только для подходящего документа.
            • +
            • - доступен перевод. Наличие значка означает, что имеется возможность перевода макета на другие языки.
            • +
            • Доп. языки - в этой колонке перечислены доп. языки, на которые переведен макет.

            Создание макета печатных форм

            • Нажмите кнопку Создать. Также можно создать новую печатную форму с помощью кнопки Копировать.
            • -
            • Напишите Наименование. После ввода наименования нажмите ОК. 
            • +
            • Напишите Наименование. После ввода наименования нажмите ОК.
            • Изменить наименование впоследствии можно с помощью команды меню Еще.
            • -
            • Используя команды панели навигации, список полей и операторов, можно создать макет печати.
            • +
            • Используя команды панели навигации, список полей и операторов, можно создать макет.
            • После окончания редактирования макета нажмите кнопку Записать и закрыть.
            -

            Редактирование макета

            +

            Редактирование макета печатных форм

            • Печатные формы формируются на основе макетов, поставляемых в составе приложения. В то же время, поставляемые макеты могут быть отредактированы.
            • -
            • Для перехода к редактированию макета нажмите  Изменить. Также можно это сделать с помощью двойного щелчка мыши, затем при необходимости выбрать режим открытия макета. +
            • Для перехода к редактированию макета нажмите Изменить. Также можно это сделать с помощью двойного щелчка мыши, затем при необходимости выбрать режим открытия макета.
            • -
            • Макеты в виде табличного документа редактируются в самом приложении, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные приложения. +
            • Макеты в виде табличного документа редактируются в самом приложении, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные приложения.
            • -
            • Перед началом редактирования приложение напоминает об этом в сообщении, в котором размещена ссылка для перехода на страницы соответствующих приложений для их установки. Нажмите кнопку Продолжить. +
            • Перед началом редактирования приложение напоминает об этом в сообщении, в котором размещена ссылка для перехода на страницы соответствующих приложений для их установки. Нажмите кнопку Продолжить.
            • Для работы в веб-клиенте могут потребоваться дополнительные настройки.
            • Если соответствующая офисное приложение имеется на компьютере, макет будет открыт для редактирования.
            • -
            • После внесения изменений сохраните макет, закройте офисное приложение. Для окончания редактирования и сохранения макета в приложении нажмите кнопку Завершить изменение. +
            • После внесения изменений сохраните макет, закройте офисное приложение. Для окончания редактирования и сохранения макета в приложении нажмите кнопку Записать и закрыть.
            • -
            • После сохранения у измененного макета в списке устанавливается значок , т.е. по умолчанию отредактированный макет теперь будет использоваться при печати.

            Переключение между стандартными и пользовательскими макетами

            +
          • После сохранения у измененного макета в списке устанавливается значок , т.е. по умолчанию отредактированный макет теперь будет использоваться при печати.
          • Предупреждение

            +
            • Некоторые изменения макета могут привести к тому, что печатная форма перестанет выводиться. Как правило, такую неполадку вызывает удаление, переименование областей и параметров макета.
            • +
            • Если печатная форма после изменения макета перестала формироваться, можно попытаться исправить макет, откатив ошибочные правки.
            • +
            • Если исправить макет не удается, необходимо Удалить макет. Вместо такого макета будет вновь использоваться стандартный.

            Макеты файлов выгрузки

            +

            Справочники и документы в приложении можно выгрузить в виде файла в различных форматах: DBF, XML, JSON, HTML, TXT (в кодировках ANSI и UTF-8), XLS, XLSX, MXL.

            +

            +
            • Макет файла выгрузки - полное наименование файла выгрузки.
            • +
            • - использование. С помощью флажка в этой колонке можно включить или выключить соответствующую команду выгрузки в подменю Выгрузить в файл.
            • +
            • Формат сохранения - выводится в списке для каждого макета. Доступно создание произвольного количества макетов выгрузки одного формата (DBF, XML, JSON, HTML, TXT, XLS, XLSX, MXL).
            • +
            • - условия видимости. С помощью кнопки можно ограничить доступность соответствующей команды выгрузки в зависимости от значений реквизитов.
            • +
            • - доступен перевод. Наличие значка означает, что имеется возможность перевода макета на другие языки.
            • +
            • Доп. языки - в этой колонке перечислены доп. языки, на которые переведен макет.

            Создание макета файла выгрузки

            +
            +
            • Нажмите кнопку Создать. Также можно создать новый файл выгрузки с помощью кнопки Копировать.
            • +
            • Напишите Наименование. После ввода наименования нажмите ОК.
            • +
            • Изменить наименование впоследствии можно с помощью команды меню Еще.
            • +
            • Используя команды панели навигации, список полей и операторов, можно создать макет.
            • +
            • После окончания редактирования макета нажмите кнопку Записать и закрыть.
            +
            +

            Редактирование макета файла выгрузки

            +
            • Для перехода к редактированию макета нажмите Изменить. Также можно это сделать с помощью двойного щелчка мыши, затем при необходимости выбрать режим открытия макета.
            • +
            • Макеты в виде табличного документа редактируются в самом приложении.
            • +
            • Для окончания редактирования и сохранения макета в приложении нажмите кнопку Записать и закрыть.
            +

            Отборы

            +
            • Если макетов много, то можно воспользоваться предусмотренными в приложении средствами для отбора нужных макетов.
            • +
            • Найти необходимый макет можно по наименованию или части наименования. Для этого напишите поисковое выражение в поле слева.
            • +
            • +
              Макеты можно отобрать по определенному признаку с помощью поля Показывать:
              +
              • Все макеты,
              • +
              • Стандартные макеты (без изменений),
              • +
              • Используемые макеты с внесенными изменениями,
              • +
              • Неиспользуемые макеты с внесенными изменениями,
              • +
              • Все макеты с внесенными изменениями.
            • +
            • Макеты на нужном языке можно отобрать с помощью поля Язык (если включены дополнительные языки).

            Переключение между стандартными и пользовательскими макетами

            • Макеты печатных форм могут быть отредактированы, при этом имеется возможность последующего переключения между отредактированным вариантом макета и стандартным.
            • -
            • Переключение осуществляется, соответственно, кнопками -
              •  Использовать измененный макет (пользовательский); +
              • Переключение осуществляется, соответственно, кнопками: +
                • Использовать измененный макет (пользовательский);
                • -
                •  Использовать стандартный макет. При этом значок  становится неактивным, показывая, что имеется и пользовательский макет.

              Предупреждение

              -
              • Некоторые изменения макета могут привести к тому, что печатная форма перестанет выводиться. Как правило, такую неполадку вызывает удаление, переименование областей и параметров макета. -
              • -
              • Если печатная форма после изменения макета перестала формироваться, можно попытаться исправить макет, откатив ошибочные правки. -
              • -
              • Если исправить макет не удается, необходимо  Удалить измененный макет. Вместо такого макета будет вновь использоваться стандартный.

              Действие при выборе печатной формы

              -
              • Для того чтобы указать, какое действие должно выполняться при двойном щелчке мыши по макету, нажмите Еще - Задать действие при выборе макета печатной формы. Укажите, как открыть макет. При необходимости нажмите соответствующий флажок, для того чтобы приложение больше не выводило этот вопрос.

              Перевод макета на другой язык

              -

              Приложение позволяет формировать печатные формы на других языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.

              +
            • Использовать стандартный макет. При этом значок становится неактивным, показывая, что имеется и пользовательский макет.

            Перевод макета на другой язык

            +

            Приложение позволяет формировать печатные формы и файлы выгрузки на других языках. Это может быть полезно, например, если необходимо предоставить какие-либо документы иностранному контрагенту: прайс-лист, счет на оплату и т.д.

            Для этого необходимо:

              -
            • выбрать дополнительные языки печатных форм.
            • -
            • Ввести на дополнительном языке наименования, выводимые в печатной форме - элементы различных списков приложения. После специальных настроек можно использовать автоматический перевод.
            • -
            • добавить перевод макета печатной формы на дополнительный язык.
            • +
            • выбрать дополнительные языки.
            • +
            • ввести на дополнительном языке наименования, выводимые в печатной форме или в файле выгрузки - элементы различных списков приложения. После специальных настроек можно использовать автоматический перевод.
            • +
            • добавить перевод макета печатной формы или файла выгрузки на дополнительный язык.
              • После добавления других языков при редактировании макета появляется кнопка выбора языка.
              • Откройте на редактирование нужный макет, переключите на дополнительный язык и выполните перевод.
              • В макете следует переводить только статический текст, например заголовки, подписи и т.д.
              • -
              • Не нужно переводить имена областей и параметры. Параметры в печатной форме отображаются в угловых скобках, например, <Наименование>. Параметры могут находиться внутри шаблонов текста, в этом случае они отображаются в квадратных скобках, например, <Счет на оплату №[Номер]от[Дата]>, в этом случае переводить следует только текст шаблона за скобками.
              • -
              • Кнопка позволяет рядом расположить оригинал и переводимую печатную форму для удобства перевода и его проверки.
            После сохранения макета в колонке Доступные языки добавляется язык, на который был выполнен перевод. +
          • Не нужно переводить имена областей и параметры. Параметры в печатной форме или в файле выгрузки отображаются в угловых скобках, например, <Наименование>. Параметры могут находиться внутри шаблонов текста, в этом случае они отображаются в квадратных скобках, например, <Счет на оплату №[Номер]от[Дата]>, в этом случае переводить следует только текст шаблона за скобками.
          • +
          • Кнопка позволяет рядом расположить оригинал и переводимую печатную форму или файл выгрузки для удобства перевода и его проверки.
          • После сохранения макета в колонке Доступные языки добавляется язык, на который был выполнен перевод.

            diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl index 13ba37fbc..d4e38ffa6 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -20,8 +20,16 @@ УстановитьУсловноеОформление(); + МакетыВыгрузки = Параметры.МакетыВыгрузки; + ЗагрузитьНастройкиСпособГруппировкиОбъектов(); + ЗаполнитьОбъектыСКомандамиПечати(); - ЗаполнитьСписокМакетовПоРазделам(); + + Если ГруппировкаПоРазделам Тогда + ЗаполнитьСписокМакетовПоРазделам(); + Иначе + ЗаполнитьСписокМакетовПоОбъектам(); + КонецЕсли; Если Параметры.Свойство("ПоказыватьТолькоПользовательскиеИзмененные") Тогда ОтборПоИспользованиюМакета = "ИспользуемыеИзмененные"; @@ -58,9 +66,23 @@ Элементы.ОтборПоЯзыку.Видимость = ЕстьДополнительныеЯзыки; Элементы.МакетыДоступныеЯзыки.Видимость = ЕстьДополнительныеЯзыки; Элементы.МакетыДоступенПеревод.Видимость = ЕстьДополнительныеЯзыки; + Элементы.МакетыФорматСохраненияВыгрузки.Видимость = МакетыВыгрузки; + Элементы.МакетыДобавитьМакет.Видимость = НЕ МакетыВыгрузки; + Элементы.МакетыДобавитьМакетOfficeOpenXML.Видимость = НЕ МакетыВыгрузки; + Элементы.МакетыДобавитьМакетВыгрузки.Видимость = МакетыВыгрузки; + Если МакетыВыгрузки Тогда + + АвтоЗаголовок = Ложь; + Заголовок = НСтр("ru = 'Макеты файлов выгрузки'"); + Элементы.МакетыУсловияДоступности.Заголовок = Нстр("ru = 'Видимость в подменю ""Выгрузить в файл""...'"); + + ТекстПодсказки = НСтр("ru = 'Показывать в подменю ""Выгрузить в файл""'"); + Элементы.МакетыИспользуется.Подсказка = ТекстПодсказки; + + КонецЕсли; РежимОткрытияМакетаПросмотр = Ложь; - + Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда РежимОткрытияМакетаПросмотр = Истина; Элементы.ГруппаОтборы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; @@ -74,6 +96,13 @@ Если ЗначениеЗаполнено(ПозицияВДереве) Тогда ПерейтиКЭлементу(ПозицияВДереве); КонецЕсли; + ИначеЕсли ЗначениеЗаполнено(Параметры.Владелец) Тогда + + ПозицияВДереве = ПозицияВладельцаВДереве(Параметры.Владелец); + Если ЗначениеЗаполнено(ПозицияВДереве) Тогда + ПерейтиКЭлементу(ПозицияВДереве); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -81,7 +110,8 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Не ЗначениеЗаполнено(Параметры.ПутьКМакету) Тогда + Если Не ЗначениеЗаполнено(Параметры.ПутьКМакету) + И Не ЗначениеЗаполнено(Параметры.Владелец) Тогда ПерейтиКЭлементу(ПозицияВДереве); КонецЕсли; @@ -92,7 +122,15 @@ Если (ИмяСобытия = "Запись_ТабличныйДокумент" Или ИмяСобытия = "Запись_ОфисныйДокумент" Или ИмяСобытия = "Запись_ПользовательскиеМакетыПечати") Тогда - Если Не ТолькоПросмотр Тогда + + ИсточникСоответствуетПриемнику = Истина; + Если Параметр.МакетДляВыгрузкиОбъекта Тогда + ИсточникСоответствуетПриемнику = (МакетыВыгрузки = Параметр.МакетДляВыгрузкиОбъекта); + КонецЕсли; + + Если Не ТолькоПросмотр + И ИсточникСоответствуетПриемнику Тогда + ИдентификаторыИзмененныхСтрок = ОбновитьОтображениеМакета(Параметр); Если Элементы.Макеты.ТекущиеДанные <> Неопределено И Элементы.Макеты.ТекущиеДанные.ЭтоГруппа Тогда Элементы.Макеты.ТекущаяСтрока = ИдентификаторыИзмененныхСтрок[Элементы.Макеты.ТекущиеДанные.ПолучитьИдентификатор()]; @@ -133,6 +171,15 @@ КонецЕсли; КонецЦикла; + СоответствиеФорматаВыгрузкиРасширению = Новый Соответствие; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + СоответствиеФорматаВыгрузкиРасширению = + МодульВыгрузкаОбъектовВФайлы.СоответствиеФорматаВыгрузкиФорматуСохранения(); + + КонецЕсли; + Для Каждого ИсточникДанных Из ИсточникиДанных Цикл ВеткиВладельцаМакетов = НайтиВеткиВладельцаМакетов(ИсточникДанных, Макеты); Для Каждого Ветка Из ВеткиВладельцаМакетов Цикл @@ -160,8 +207,15 @@ Если Макет.Изменен Тогда Макет.КартинкаИспользования = Число(Макет.Изменен) + Число(Макет.ИспользуетсяИзмененный); КонецЕсли; - Если Параметр.Свойство("Представление") Тогда - Макет.Представление = Параметр.Представление; + Макет.Представление = Параметр.Представление; + Если МакетыВыгрузки Тогда + + ФорматСохраненияВыгрузки = Параметр.ФорматСохраненияВыгрузки; + Расширение = СоответствиеФорматаВыгрузкиРасширению[ФорматСохраненияВыгрузки]; + Макет.ИндексКартинкиФорматаСохранения = + РегистрыСведений.ПользовательскиеМакетыПечати.ИндексПиктограммыФайла(Расширение); + Макет.ФорматСохраненияВыгрузки = ФорматСохраненияВыгрузки; + КонецЕсли; КонецЦикла; @@ -185,6 +239,10 @@ Отказ = Истина; КонецЕсли; + Если НЕ Отказ Тогда + СохранитьНастройкиСпособГруппировкиОбъектов(ГруппировкаПоРазделам); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -194,6 +252,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаПолученияНавигационнойСсылки(Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ПараметрМакетыВыгрузки = Новый Структура("МакетыВыгрузки", МакетыВыгрузки); + НавигационнаяСсылка = НавигационнаяСсылкаПоПараметру(Представление, ПараметрМакетыВыгрузки); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -253,7 +320,21 @@ КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура ГруппировкаПоРазделамПриИзменении(Элемент) + Если ГруппировкаПоРазделам Тогда + ЗаполнитьСписокМакетовПоРазделам(); + Иначе + ЗаполнитьСписокМакетовПоОбъектам(); + КонецЕсли; + + ИзмененСпособГруппировки = Истина; + УстановитьОтборМакетов(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыМакеты @@ -390,7 +471,10 @@ &НаКлиенте Процедура ДобавитьМакет(Команда) - ПараметрыОповещения = Новый Структура("Копирование, ТипМакета", Ложь, "MXL"); + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("Копирование", Ложь); + ПараметрыОповещения.Вставить("ТипМакета", "MXL"); + ПараметрыОповещения.Вставить("МакетДляВыгрузкиОбъекта", Ложь); ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект, ПараметрыОповещения); УникальноеНаименование = ПолучитьУникальноеНаименование(НСтр("ru = 'Новая печатная форма'"), Ложь); ПоказатьВводСтроки(ОписаниеОповещения, УникальноеНаименование, НСтр("ru = 'Введите наименование макета'"), 100, Ложь) @@ -405,7 +489,10 @@ &НаКлиенте Процедура ДобавитьМакетOfficeOpenXML(Команда) - ПараметрыОповещения = Новый Структура("Копирование, ТипМакета", Ложь, "DOCX"); + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("Копирование", Ложь); + ПараметрыОповещения.Вставить("ТипМакета", "DOCX"); + ПараметрыОповещения.Вставить("МакетДляВыгрузкиОбъекта", Ложь); ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект, ПараметрыОповещения); УникальноеНаименование = ПолучитьУникальноеНаименование(НСтр("ru = 'Новая печатная форма'"), Ложь); ПоказатьВводСтроки(ОписаниеОповещения, УникальноеНаименование, НСтр("ru = 'Введите наименование макета'"), 100, Ложь) @@ -425,12 +512,29 @@ Возврат; КонецЕсли; - ПараметрыОткрытия = Новый Структура("Ключ", ТекущиеДанные.Ссылка); + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Ключ", ТекущиеДанные.Ссылка); + ПараметрыОткрытия.Вставить("ЭтоМакетВыгрузки", МакетыВыгрузки); + ПараметрыОткрытия.Вставить("ПредставлениеМакетаВыгрузки", ТекущиеДанные.Представление); ОткрытьФорму("Справочник.МакетыПечатныхФорм.Форма.УсловияВидимостиВПодменюПечать", ПараметрыОткрытия, ЭтотОбъект); КонецПроцедуры +&НаКлиенте +Процедура ДобавитьМакетВыгрузки(Команда) + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("Копирование", Ложь); + ПараметрыОповещения.Вставить("ТипМакета", "MXL"); + ПараметрыОповещения.Вставить("МакетДляВыгрузкиОбъекта", Истина); + ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект, ПараметрыОповещения); + УникальноеНаименование = ПолучитьУникальноеНаименование(НСтр("ru = 'Новая форма выгрузки'"), Ложь); + Подсказка = НСтр("ru = 'Введите наименование макета'"); + ПоказатьВводСтроки(ОписаниеОповещения, УникальноеНаименование, Подсказка, 100, Ложь); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -557,7 +661,11 @@ ПараметрыОткрытия.Вставить("ИсточникДанных", ТекущиеДанные.Владелец); ПараметрыОткрытия.Вставить("ИсточникиДанных", ТекущиеДанные.ИсточникиДанных); ПараметрыОткрытия.Вставить("ЭтоПечатнаяФорма", ТекущиеДанные.ЭтоПечатнаяФорма); + ПараметрыОткрытия.Вставить("ОсновнаяПечатнаяФорма", ТекущиеДанные.ОсновнаяПечатнаяФорма); + ПараметрыОткрытия.Вставить("НаименованиеПечатнойФормы", ТекущиеДанные.НаименованиеПечатнойФормы); ПараметрыОткрытия.Вставить("ДоступноНазначение", Не ТекущиеДанные.Поставляемый); + ПараметрыОткрытия.Вставить("МакетДляВыгрузкиОбъекта", ТекущиеДанные.МакетДляВыгрузкиОбъекта); + ПараметрыОткрытия.Вставить("ФорматСохраненияВыгрузки", ТекущиеДанные.ФорматСохраненияВыгрузки); Если ТекущиеДанные.ТипМакета = "MXL" Тогда ПараметрыФормы = СтандартныеПодсистемыКлиент.ПараметрыРедактораТабличногоДокумента(); @@ -698,13 +806,29 @@ Элементы.МакетыДобавитьМакетOfficeOpenXML.Доступность = ТекущийМакетВыбран И ТекущийМакет.ДоступноСоздание; Элементы.МакетыИзменитьМакет.Доступность = ТекущийМакетВыбран И Не ТекущийМакет.ЭтоГруппа; Элементы.ФормаПоказатьВСписке.Доступность = ДоступноОтображениеВСписке; + Элементы.МакетыДобавитьМакетВыгрузки.Доступность = ТекущийМакетВыбран И ТекущийМакет.ДоступноСоздание; КонецПроцедуры &НаКлиенте Процедура Скопировать(Команда) - ПараметрыОповещения = Новый Структура("Копирование, ТипМакета", Истина); + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("Копирование", Истина); + ПараметрыОповещения.Вставить("ТипМакета"); + + ТекущийМакет = Элементы.Макеты.ТекущиеДанные; + Если ТекущийМакет.МакетДляВыгрузкиОбъекта Тогда + + ПараметрыОповещения.Вставить("МакетДляВыгрузкиОбъекта", Истина); + ПараметрыОповещения.Вставить("ФорматСохраненияВыгрузки", ТекущийМакет.ФорматСохраненияВыгрузки); + + Иначе + + ПараметрыОповещения.Вставить("МакетДляВыгрузкиОбъекта", Ложь); + ПараметрыОповещения.Вставить("ФорматСохраненияВыгрузки"); + + КонецЕсли; ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект, ПараметрыОповещения); ТекущийМакет = Элементы.Макеты.ТекущиеДанные; НаименованиеКопии = ПолучитьУникальноеНаименование(ТекущийМакет.Представление); @@ -761,6 +885,16 @@ ПараметрыОткрытия.Вставить("ИсточникДанных", ТекущиеДанные.Владелец); ПараметрыОткрытия.Вставить("ЭтоПечатнаяФорма", Истина); ПараметрыОткрытия.Вставить("ДоступноНазначение", Истина); + ПараметрыОткрытия.Вставить("МакетДляВыгрузкиОбъекта", Ложь); + + Если ПараметрыОповещения.МакетДляВыгрузкиОбъекта Тогда + + ПараметрыОткрытия.МакетДляВыгрузкиОбъекта = Истина; + Если Копирование Тогда + ПараметрыОткрытия.Вставить("ФорматСохраненияВыгрузки", ТекущиеДанные.ФорматСохраненияВыгрузки); + КонецЕсли; + + КонецЕсли; Если ТипМакета = "MXL" Тогда ПараметрыФормы = СтандартныеПодсистемыКлиент.ПараметрыРедактораТабличногоДокумента(); @@ -855,6 +989,10 @@ Возврат; КонецЕсли; + Родитель = ТекущиеДанные.ПолучитьРодителя(); + ИмяОбъектаМетаданных = Родитель.Идентификатор; + ОчиститьКэш(ИмяОбъектаМетаданных, ОбъектыСКомандамиПечати); + ИдентификаторМакета = ТекущиеДанные.Идентификатор; УдалитьМакетНаСервере(ИдентификаторМакета); НайденныеМакеты = НайтиМакеты(ИдентификаторМакета, Макеты); @@ -976,6 +1114,20 @@ ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + // + + ЭлементОформления = УсловноеОформление.Элементы.Добавить(); + + ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(Элементы.МакетыИндексКартинкиФорматаСохранения.Имя); + + ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Макеты.ФорматСохраненияВыгрузки"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + КонецПроцедуры &НаСервере @@ -987,9 +1139,22 @@ КонецПроцедуры +&НаСервере +Процедура ЗаполнитьСписокМакетовПоОбъектам() + + Макеты.ПолучитьЭлементы().Очистить(); + ДеревоОбъектовМетаданныхЗаполнить(); + ЗаполнитьТаблицуМакетовПечатныхФорм(Макеты); + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьТаблицуМакетовПечатныхФорм(Ветка) + Если МакетыВыгрузки Тогда + Возврат; + КонецЕсли; + ОбъектыСМакетами = Новый Соответствие; Для Каждого ОписаниеМакета Из УправлениеПечатью.МакетыПечатныхФорм(Истина) Цикл ОбъектыСМакетами.Вставить(ОписаниеМакета.Значение, Истина); @@ -1213,7 +1378,10 @@ НайденныйЭлемент.Представление = ОбщегоНазначения.ЗначениеВСтрокуXML(МакетыОбъекта); КонецЕсли; - Возврат МакетыОбъекта; + Отбор = Новый Структура; + Отбор.Вставить("МакетДляВыгрузкиОбъекта", МакетыВыгрузки); + + Возврат МакетыОбъекта.НайтиСтроки(Отбор); КонецФункции @@ -1382,8 +1550,19 @@ &НаСервере Процедура ЗаполнитьОбъектыСКомандамиПечати() + МетаданныеДляВыгрузки = Новый Массив; // Массив Из Строка + МетаданныеДляВыгрузки.Добавить("Справочники"); + МетаданныеДляВыгрузки.Добавить("Документы"); + Для Каждого ОбъектМетаданных Из УправлениеПечатью.ИсточникиКомандПечати() Цикл + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); + Если МакетыВыгрузки + И МетаданныеДляВыгрузки.Найти(ИмяБазовогоТипа) = Неопределено Тогда + Продолжить; + КонецЕсли; ОбъектыСКомандамиПечати.Добавить(ОбъектМетаданных.ПолноеИмя()); + КонецЦикла; ОбъектыСМакетами = Новый Соответствие; @@ -1391,11 +1570,19 @@ ОбъектыСМакетами.Вставить(ОписаниеМакета.Значение, Истина); КонецЦикла; - ОбъектыМетаданных = Новый Массив; Для Каждого Объект Из ОбъектыСМакетами Цикл + Если Объект.Ключ <> Метаданные.ОбщиеМакеты Тогда + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(Объект.Ключ); + Если МакетыВыгрузки + И МетаданныеДляВыгрузки.Найти(ИмяБазовогоТипа) = Неопределено Тогда + Продолжить; + КонецЕсли; ОбъектыСКомандамиПечати.Добавить(Объект.Ключ.ПолноеИмя()); + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -1477,10 +1664,13 @@ &НаКлиенте Процедура ЗагрузитьСписокМакетов() - Если ВыполняетсяЗагрузкаДанных Или Не ЕстьОбъектыБезКэша() Тогда + Если (ВыполняетсяЗагрузкаДанных + Или Не ЕстьОбъектыБезКэша()) + И НЕ ИзмененСпособГруппировки Тогда Возврат; КонецЕсли; + ИзмененСпособГруппировки = Ложь; ВыполняетсяЗагрузкаДанных = Истина; Элементы.ВыполняетсяПоиск.Видимость = Истина; @@ -1663,4 +1853,209 @@ КонецФункции +&НаСервере +Функция ПозицияВладельцаВДереве(Знач ИдентификаторВладельца) + + ВладелецМакета = НайтиЭлементВДеревеМакетов(ИдентификаторВладельца); + + Если ВладелецМакета <> Неопределено Тогда + Результат = ПутьКЭлементуВДереве(ВладелецМакета); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ЗагрузитьНастройкиСпособГруппировкиОбъектов() + + ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкаОткрытияМакетовСпособГруппировкиОбъектов", + "ГруппировкаПоРазделам"); + Если ЗначениеНастроек <> Неопределено Тогда + ГруппировкаПоРазделам = ЗначениеНастроек; + Иначе + ГруппировкаПоРазделам = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция НавигационнаяСсылкаПоПараметру(Знач Представление, Знач ПараметрМакетыВыгрузки) + + Возврат ПолучитьНавигационнуюСсылку( + Метаданные.РегистрыСведений.ПользовательскиеМакетыПечати, + Представление, + ПараметрМакетыВыгрузки); + +КонецФункции + +&НаСервере +Процедура ДеревоОбъектовМетаданныхЗаполнить() + + ОбъектыМетаданных = Новый ТаблицаЗначений; + ОбъектыМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ОбъектыМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка")); + ОбъектыМетаданных.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + ОбъектыМетаданных.Колонки.Добавить("Выводить", Новый ОписаниеТипов("Булево")); + + ВыводитьКоллекцию = НЕ МакетыВыгрузки; + + ИмяМетаданных = НСтр("ru = 'Справочники'"); + НоваяСтрокаКоллекции( + "Справочники", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеСправочники, + Истина, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Документы'"); + НоваяСтрокаКоллекции( + "Документы", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеДокументы, + Истина, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Журналы документов'"); + НоваяСтрокаКоллекции( + "ЖурналыДокументов", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеЖурналыДокументов, + ВыводитьКоллекцию, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Планы видов характеристик'"); + НоваяСтрокаКоллекции( + "ПланыВидовХарактеристик", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеПланыВидовХарактеристик, + ВыводитьКоллекцию, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Планы счетов'"); + НоваяСтрокаКоллекции( + "ПланыСчетов", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеПланыСчетов, + ВыводитьКоллекцию, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Планы видов расчета'"); + НоваяСтрокаКоллекции( + "ПланыВидовРасчета", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеПланыВидовРасчета, + ВыводитьКоллекцию, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Бизнес-процессы'"); + НоваяСтрокаКоллекции( + "БизнесПроцессы", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеБизнесПроцессы, + ВыводитьКоллекцию, + ОбъектыМетаданных); + + ИмяМетаданных = НСтр("ru = 'Задачи'"); + НоваяСтрокаКоллекции( + "Задачи", + ИмяМетаданных, + БиблиотекаКартинок.МетаданныеЗадачи, + ВыводитьКоллекцию, + ОбъектыМетаданных); + + КоллекцииВыбираемыхОбъектовМетаданных = Новый СписокЗначений; + Если ОбъектыСКомандамиПечати.Количество() > 0 Тогда + + Для Каждого ОбъектМетаданныхПолноеИмя Из ОбъектыСКомандамиПечати Цикл + + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ОбъектМетаданныхПолноеИмя.Значение); + + Если ОбъектМетаданных <> Неопределено Тогда + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); + + Если КоллекцииВыбираемыхОбъектовМетаданных.НайтиПоЗначению(ИмяБазовогоТипа) = Неопределено Тогда + КоллекцииВыбираемыхОбъектовМетаданных.Добавить(ИмяБазовогоТипа); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл + + Если НЕ ОбъектМетаданных.Выводить Тогда + Продолжить; + КонецЕсли; + + Если КоллекцииВыбираемыхОбъектовМетаданных.НайтиПоЗначению(ОбъектМетаданных.Имя) <> Неопределено Тогда + + ДобавитьЭлементДереваОбъектовМетаданных(ОбъектМетаданных); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьЭлементДереваОбъектовМетаданных(ПараметрыЭлемента) + + НоваяВетка = Макеты.ПолучитьЭлементы().Добавить(); + НоваяВетка.Представление = ПараметрыЭлемента.Имя; + НоваяВетка.КартинкаГруппы = ПараметрыЭлемента.Картинка; + НоваяВетка.Идентификатор = ПараметрыЭлемента.Имя; + НоваяВетка.КартинкаИспользования = -1; + НоваяВетка.ЭтоГруппа = Истина; + НоваяВетка.Используется = Истина; + НоваяВетка.СтрокаПоиска = НРег(НоваяВетка.Представление); + + НоваяВетка.Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(НоваяВетка.Идентификатор, Ложь); + НоваяВетка.ДоступноСоздание = Ложь; + + МассивКоллекции = Новый Массив; // Массив Из Метаданные + Для Каждого ОбъектМетаданныхПолноеИмя Из ОбъектыСКомандамиПечати Цикл + + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ОбъектМетаданныхПолноеИмя.Значение); + + Если ОбъектМетаданных <> Неопределено Тогда + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); + Если ПараметрыЭлемента.Имя = ИмяБазовогоТипа Тогда + МассивКоллекции.Добавить(ОбъектМетаданных); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ВывестиКоллекцию(НоваяВетка, МассивКоллекции); + +КонецПроцедуры + +&НаСервере +Процедура НоваяСтрокаКоллекции(Знач Имя, Знач Синоним, Знач Картинка, Знач ВыводитьКоллекцию, Таблица) + + НоваяСтрока = Таблица.Добавить(); + НоваяСтрока.Имя = Имя; + НоваяСтрока.Синоним = Синоним; + НоваяСтрока.Картинка = Картинка; + НоваяСтрока.Выводить = ВыводитьКоллекцию; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура СохранитьНастройкиСпособГруппировкиОбъектов(Знач ГруппировкаПоРазделам) + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкаОткрытияМакетовСпособГруппировкиОбъектов", + "ГруппировкаПоРазделам", + ГруппировкаПоРазделам); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html index a063e981a..77d15196b 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html @@ -1,15 +1,15 @@

            -

            Макеты в виде табличного документа редактируются в самом приложении, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные приложения.

            +

            Макеты в виде табличного документа редактируются в самом приложении, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные приложения.

            Как правило, никаких специальных действий для запуска нужного приложения выполнять не требуется, достаточно кликнуть по файлу макета, и нужное приложение запустится автоматически (при условии, что она установлена).

            Для редактирования макета в веб-клиенте могут потребоваться дополнительные настройки.

            -

            Если приложение уже установлена, нажмите Продолжить.

            -

            Приложение, с помощью которой можно отредактировать макет, определяется типом (форматом) макета:

            +

            Если приложение уже установлена, нажмите Продолжить.

            +

            Приложение, с помощью которой можно отредактировать макет, определяется типом (форматом) макета:

            -
            Тип макета

            Приложение

            .mxl 1С:Предприятие - Работа с файлами
            .doc Microsoft Word
            .odtOpenOffice Writer

             

            -

             

            -

             

            \ No newline at end of file +OpenOffice Writer

            +

            +

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl index 6d83afcc2..c2c493da9 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Module.bsl @@ -83,9 +83,9 @@ ИмяСобытия = "Запись_ПользовательскиеМакетыПечати"; КонецЕсли; - ПараметрыОповещения = Новый Структура; - ПараметрыОповещения.Вставить("ИмяОбъектаМетаданныхМакета", ИмяОбъектаМетаданныхМакета); - ПараметрыОповещения.Вставить("ИсточникиДанных", ИсточникиДанных.ВыгрузитьЗначения()); + ПараметрыОповещения = СтандартныеПодсистемыКлиент.НовыйПараметрОповещенияЗаписиТабличногоДокумента(); + ПараметрыОповещения.ИмяОбъектаМетаданныхМакета = ИмяОбъектаМетаданныхМакета; + ПараметрыОповещения.ИсточникиДанных = ИсточникиДанных.ВыгрузитьЗначения(); Оповестить(ИмяСобытия, ПараметрыОповещения, ЭтотОбъект); diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html index 6e07fa5c4..3b3f64a9a 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html @@ -1,19 +1,19 @@ -

            Многие документы, справочники и другие объекты приложения имеют свои печатные формы. Печатные формы могут формироваться в виде табличных документов или офисных документов в форматах Microsoft Word, OpenOffice.org Writer, Adobe PDF, HTML, Microsoft Excel, а также в формате табличного документа 1С:Предприятие (.mxl). При этом не требуется, чтобы сами эти приложения были установлены на компьютере.

            -

            В то же время, для формирования печатных форм, которые сразу выводятся в форматах Microsoft Word и OpenOffice.org Writer, необходимо, чтобы на компьютере были установлены соответствующие офисные приложения.

            +

            Многие документы, справочники и другие объекты приложения имеют свои печатные формы. Печатные формы могут формироваться в виде табличных документов или офисных документов в форматах Microsoft Word, OpenOffice.org Writer, Adobe PDF, HTML, Microsoft Excel, а также в формате табличного документа 1С:Предприятие (.mxl). При этом не требуется, чтобы сами эти приложения были установлены на компьютере.

            +

            В то же время, для формирования печатных форм, которые сразу выводятся в форматах Microsoft Word и OpenOffice.org Writer, необходимо, чтобы на компьютере были установлены соответствующие офисные приложения.

            Особенности формирования печатных форм в веб-клиенте

            -

            При работе в Интернете для формирования печатных форм в веб-клиенте необходимы дополнительные настройки браузера. Необходимо отменить блокирование всплывающих окон для веб-сайта приложения.

            +

            При работе в Интернете для формирования печатных форм в веб-клиенте необходимы дополнительные настройки браузера. Необходимо отменить блокирование всплывающих окон для веб-сайта приложения.

            • При работе в браузере Internet Explorer выберите команду Сервис - блокирование всплывающих окон - Параметры блокирования всплывающих окон.
            • -
            • Введите адрес веб-сайта приложения в поле Адрес веб-узла, получающего разрешение, нажмите кнопку Добавить, название сайта появится в поле Веб-узлы, имеющие разрешение. Далее нажмите Закрыть. Для получения более подробной информации см. документацию к веб-браузеру.

            Также при работе в Internet Explorer, если включена фильтрация активного содержимого, то нужно нажать на значок Состояние фильтрации активного содержимого и отключить фильтрацию Axtivex только для этого сайта.

            +
          • Введите адрес веб-сайта приложения в поле Адрес веб-узла, получающего разрешение, нажмите кнопку Добавить, название сайта появится в поле Веб-узлы, имеющие разрешение. Далее нажмите Закрыть. Для получения более подробной информации см. документацию к веб-браузеру.
          • Также при работе в Internet Explorer, если включена фильтрация активного содержимого, то нужно нажать на значок Состояние фильтрации активного содержимого и отключить фильтрацию Axtivex только для этого сайта.

            Печать в формате PDF

            -
            • При печати в веб-клиенте печатные формы выводятся в формате PDF (по умолчанию), который можно сразу отправить на принтер или сохранить в файл на компьютер. Поэтому необходимо, чтобы на компьютере была установлено приложение просмотра документов PDF, например, Adobe Reader. +
              • При печати в веб-клиенте печатные формы выводятся в формате PDF (по умолчанию), который можно сразу отправить на принтер или сохранить в файл на компьютер. Поэтому необходимо, чтобы на компьютере была установлено приложение просмотра документов PDF, например, Adobe Reader.
              • -
              • Если не установлена приложение просмотра документов PDF или не проведены настройки, указанные выше, при попытке печати в веб-клиенте в формате PDF будет выведено информационное сообщение. Если на компьютере имеется приложение Adobe Reader, но не выполнены настройки веб-браузера, в нижнем окне Открыть или сохранить выберите Открыть, затем нажмите Печать или ОК. После распечатки закройте окно печати, нажмите на кнопку Закрыть для возврата в приложение.

              Печать в формате HTML

              -
              • Если приложение Adobe Reader на компьютере не установлена, и нет возможности ее установить, или этот способ печати не устраивает по каким-либо причинам, можно выбрать способ печати HTML. +
              • Если не установлена приложение просмотра документов PDF или не проведены настройки, указанные выше, при попытке печати в веб-клиенте в формате PDF будет выведено информационное сообщение. Если на компьютере имеется приложение Adobe Reader, но не выполнены настройки веб-браузера, в нижнем окне Открыть или сохранить выберите Открыть, затем нажмите Печать или ОК. После распечатки закройте окно печати, нажмите на кнопку Закрыть для возврата в приложение.

              Печать в формате HTML

              +
              • Если приложение Adobe Reader на компьютере не установлена, и нет возможности ее установить, или этот способ печати не устраивает по каким-либо причинам, можно выбрать способ печати HTML.
              • -
              • Для этого нажмите кнопку Главное меню, выберите команду Сервис - Параметры, включите Способ печати в виде HTML, нажмите OK.

              Печатные формы в виде документов Microsoft Word или OpenOffice.org Writer

              -
              • Для печати необходимо, чтобы на компьютере были установлены офисные приложения Microsoft Word (не ниже 2003) и OpenOffice.org Writer (версия не ниже 3.2). Кроме того, при работе через Интернет необходим веб-браузер Internet Explorer версии 6.0 и выше, для которого следует предварительно выполнить дополнительную настройку. +
              • Для этого нажмите кнопку Главное меню, выберите команду Сервис - Параметры, включите Способ печати в виде HTML, нажмите OK.

              Печатные формы в виде документов Microsoft Word или OpenOffice.org Writer

              +
              • Для печати необходимо, чтобы на компьютере были установлены офисные приложения Microsoft Word (не ниже 2003) и OpenOffice.org Writer (версия не ниже 3.2). Кроме того, при работе через Интернет необходим веб-браузер Internet Explorer версии 6.0 и выше, для которого следует предварительно выполнить дополнительную настройку.
              • Для настройки Internet Explorer выберите команду Сервис - Свойства обозревателя. На вкладке Безопасность нажмите кнопку Другой и настройте уровень безопасности для работы веб-клиента:
                • отключите блокирование всплывающих окон; @@ -26,18 +26,18 @@
                • Подробнее о настройках браузера см. Руководство пользователя, глава 13 "Работа с веб-клиентом" и Руководство администратора, глава 8 "Настройка веб-браузеров для работы в веб-клиенте".
                • При первой попытке печати без установки расширения работы с файлами выводится предложение установить его. Нажмите Установить, затем Продолжить для начала установки. -
                  • Для начала установки расширения работы с файлами нажмите Продолжить. +
                    • Для начала установки расширения работы с файлами нажмите Продолжить.
                    • -
                    • В зависимости от настроек системы безопасности компьютера может потребоваться подтвердить установку приложения на компьютер. Проверьте издателя приложения (1С) и нажмите Установить для подтверждения. +
                    • В зависимости от настроек системы безопасности компьютера может потребоваться подтвердить установку приложения на компьютер. Проверьте издателя приложения (1С) и нажмите Установить для подтверждения.
                    • После успешного окончания установки нажмите ОК. В следующий раз это сообщение выводиться уже не будет.
                  • -
                  • При первой попытке печати документа приложение предлагает создать рабочий каталог для хранения временных файлов печати. Выберите папку, нажмите ОК. Это сообщение приложение также выводит однократно. Также для изменения рабочего каталога печати можно воспользоваться командой в персональных настройках приложения (вкладка Печать). На вкладке Печать нажмите Настройка рабочего каталога печати, выберите папку на компьютере. +
                  • При первой попытке печати документа приложение предлагает создать рабочий каталог для хранения временных файлов печати. Выберите папку, нажмите ОК. Это сообщение приложение также выводит однократно. Также для изменения рабочего каталога печати можно воспользоваться командой в персональных настройках приложения (вкладка Печать). На вкладке Печать нажмите Настройка рабочего каталога печати, выберите папку на компьютере.
                  • -
                  • Затем приложение предлагает получить файл макета, необходимый для формирования печатной формы. Нажмите ОК для продолжения. Через некоторое время сформированная печатная форма будет открыта в приложении Microsoft Word. +
                  • Затем приложение предлагает получить файл макета, необходимый для формирования печатной формы. Нажмите ОК для продолжения. Через некоторое время сформированная печатная форма будет открыта в приложении Microsoft Word.
                  • Если какие-либо настройки были пропущены или сделаны неправильно, после выполнения команды Печать выводится сообщение об ошибке. В этом случае необходимо еще раз проверить настройки.

                  Редактирование макетов печатных форм в веб-клиенте

                  -
                  • Для изменения и просмотра макетов в виде табличных документов, если на компьютере не установлено приложение 1С:Предприятие, приложению предлагается установить дополнительное приложение 1С:Предприятие 8.2 - Работа с файлами. Его можно скачать, пройдя по ссылке Перейти на страницу приложения "1С:Предприятие - Работа с файлами" для установки, или с сайта фирмы "1С": http://v8.1c.ru/metod/fileworkshopdownload.htm. +
                    • Для изменения и просмотра макетов в виде табличных документов, если на компьютере не установлено приложение 1С:Предприятие, приложению предлагается установить дополнительное приложение 1С:Предприятие 8.2 - Работа с файлами. Его можно скачать, пройдя по ссылке Перейти на страницу приложения "1С:Предприятие - Работа с файлами" для установки, или с сайта фирмы "1С": http://v8.1c.ru/metod/fileworkshopdownload.htm.
                    • -
                    • Для просмотра макета в веб-клиенте подтвердите загрузку файла на компьютер с помощью кнопки Продолжить. При открытии макета печатной формы в виде табличного документа браузером выводится предложение открыть или сохранить файл макета на компьютер. Выберите папку для сохранения макета. Затем можно открыть приложение 1С:Предприятия 8.2 - Работа с файлами для изменения макета. +
                    • Для просмотра макета в веб-клиенте подтвердите загрузку файла на компьютер с помощью кнопки Продолжить. При открытии макета печатной формы в виде табличного документа браузером выводится предложение открыть или сохранить файл макета на компьютер. Выберите папку для сохранения макета. Затем можно открыть приложение 1С:Предприятия 8.2 - Работа с файлами для изменения макета.
                    • -
                    • Сохраните изменения, закройте файл макета, затем переключитесь обратно в приложение, нажмите кнопку Завершить изменение. Для помещения измененного макета в приложение укажите путь к файлу макета с помощью кнопки Обзор, нажмите ОК. Аналогично проходит работа с макетами печатных форм в форматах Microsoft Word и OpenOffice.org Writer.
                    \ No newline at end of file +
                  • Сохраните изменения, закройте файл макета, затем переключитесь обратно в приложение, нажмите кнопку Завершить изменение. Для помещения измененного макета в приложение укажите путь к файлу макета с помощью кнопки Обзор, нажмите ОК. Аналогично проходит работа с макетами печатных форм в форматах Microsoft Word и OpenOffice.org Writer.
                  \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl index 2293e0694..93d06fc83 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/ManagerModule.bsl @@ -268,8 +268,13 @@ СписокМакетов.Колонки.Добавить("ДоступнаНастройкаВидимости"); СписокМакетов.Колонки.Добавить("Поставляемый"); СписокМакетов.Колонки.Добавить("ЭтоПечатнаяФорма"); + СписокМакетов.Колонки.Добавить("ОсновнаяПечатнаяФорма"); + СписокМакетов.Колонки.Добавить("НаименованиеПечатнойФормы"); СписокМакетов.Колонки.Добавить("ДоступноСоздание"); СписокМакетов.Колонки.Добавить("ИмяОбъектаМетаданныхМакета"); + СписокМакетов.Колонки.Добавить("МакетДляВыгрузкиОбъекта", Новый ОписаниеТипов("Булево")); + СписокМакетов.Колонки.Добавить("ФорматСохраненияВыгрузки"); + СписокМакетов.Колонки.Добавить("ИндексКартинкиФорматаСохранения", Новый ОписаниеТипов("Число")); СписокМакетов.Индексы.Добавить("Владелец"); @@ -475,6 +480,15 @@ Идентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); КонецЕсли; + СоответствиеФорматаВыгрузкиРасширению = Новый Соответствие; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда + + МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы"); + СоответствиеФорматаВыгрузкиРасширению = + МодульВыгрузкаОбъектовВФайлы.СоответствиеФорматаВыгрузкиФорматуСохранения(); + + КонецЕсли; + ТекстЗапроса = "ВЫБРАТЬ | МакетыПечатныхФорм.Ссылка, @@ -482,6 +496,10 @@ | МакетыПечатныхФорм.Используется, | МакетыПечатныхФорм.ТипМакета, | МакетыПечатныхФорм.Идентификатор, + | МакетыПечатныхФорм.ОсновнаяПечатнаяФорма КАК ОсновнаяПечатнаяФорма, + | МакетыПечатныхФорм.НаименованиеПечатнойФормы КАК НаименованиеПечатнойФормы, + | МакетыПечатныхФорм.МакетДляВыгрузкиОбъекта КАК МакетДляВыгрузкиОбъекта, + | МакетыПечатныхФорм.ФорматСохраненияОбъекта КАК ФорматСохраненияВыгрузки, | МакетыПечатныхФормИсточникиДанных.ИсточникДанных КАК Владелец |ИЗ | Справочник.МакетыПечатныхФорм.ИсточникиДанных КАК МакетыПечатныхФормИсточникиДанных @@ -506,6 +524,8 @@ ТаблицаМакетов = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаМакетов Цикл + + МакетДляВыгрузкиОбъекта = СтрокаТаблицы.МакетДляВыгрузкиОбъекта; Макет = СписокМакетов.Добавить(); ЗаполнитьЗначенияСвойств(Макет, СтрокаТаблицы); @@ -536,7 +556,7 @@ Макет.ДоступныеЯзыки = ДоступныеЯзыкиМакета(Макет.Идентификатор); Макет.Картинка = ИндексКартинки(Макет.ТипМакета); - Макет.КартинкаГруппы = КартинкаМакета(Макет.ТипМакета); + Макет.КартинкаГруппы = КартинкаМакета(Макет.ТипМакета, МакетДляВыгрузкиОбъекта); Макет.КартинкаИспользования = -1; Если Макет.Изменен Тогда @@ -547,6 +567,15 @@ ОбъектМетаданныхВладелецМакета = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Макет.Владелец); Макет.ДоступноСоздание = ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ОбъектМетаданныхВладелецМакета); КонецЕсли; + Макет.МакетДляВыгрузкиОбъекта = МакетДляВыгрузкиОбъекта; + Макет.ФорматСохраненияВыгрузки = СтрокаТаблицы.ФорматСохраненияВыгрузки; + Если МакетДляВыгрузкиОбъекта Тогда + + Расширение = СоответствиеФорматаВыгрузкиРасширению[Макет.ФорматСохраненияВыгрузки]; + Макет.ИндексКартинкиФорматаСохранения = ИндексПиктограммыФайла(Расширение); + + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -606,18 +635,37 @@ КонецФункции -Функция КартинкаМакета(Знач ТипМакета) +Функция КартинкаМакета(Знач ТипМакета, МакетДляВыгрузки = Ложь) - ТипыМакетов = Новый Соответствие; - ТипыМакетов.Вставить("DOC", БиблиотекаКартинок.ФорматWord); - ТипыМакетов.Вставить("DOCX", БиблиотекаКартинок.ФорматWord2007); - ТипыМакетов.Вставить("ODT", БиблиотекаКартинок.ФорматOpenOfficeCalc); - ТипыМакетов.Вставить("MXL", БиблиотекаКартинок.ФорматMXL); - - Результат = ТипыМакетов[ВРег(ТипМакета)]; + Если МакетДляВыгрузки Тогда + + Результат = БиблиотекаКартинок.СохранитьФайлКак; + + Иначе + + ТипыМакетов = Новый Соответствие; + ТипыМакетов.Вставить("DOC", БиблиотекаКартинок.ФорматWord); + ТипыМакетов.Вставить("DOCX", БиблиотекаКартинок.ФорматWord2007); + ТипыМакетов.Вставить("ODT", БиблиотекаКартинок.ФорматOpenOfficeCalc); + ТипыМакетов.Вставить("MXL", БиблиотекаКартинок.ФорматMXL); + + Результат = ТипыМакетов[ВРег(ТипМакета)]; + + КонецЕсли; Возврат ?(Результат = Неопределено, Новый Картинка, Результат); -КонецФункции +КонецФункции + +Функция ИндексПиктограммыФайла(Расширение) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебныйКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйКлиентСервер"); + Возврат МодульРаботаСФайламиСлужебныйКлиентСервер.ИндексПиктограммыФайла(Расширение); + КонецЕсли; + + Возврат 0; + +КонецФункции #КонецОбласти diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index 15980011a..ec07c2ac6 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -43,8 +43,8 @@ И ЕстьРолиМодифицированныеРасширениями() Тогда ТекстОшибки = - НСтр("ru = 'Не удалось обновить права ролей конфигурации по причине: - |Найдены подключенные расширения конфигурации, изменяющие роли конфигурации.'"); + НСтр("ru = 'Не удалось обновить права ролей приложения по причине: + |Подключены расширения, изменяющие права ролей.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html index c6a7f928e..a1ec5bccb 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html @@ -1,11 +1,11 @@

                  Предназначена для контроля и замены комплекта правил для синхронизации данных.

                  Открывается по кнопке Загрузить комплект правил из настройки синхронизации данных.

                  -

                  Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

                  -

                  Правила конвертации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила конвертации объектов. Правила конвертации данных используются при синхронизации данных двух приложений. 

                  +

                  Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

                  +

                  Правила конвертации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила конвертации объектов. Правила конвертации данных используются при синхронизации данных двух приложений.

                  Правила регистрации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила регистрации объектов.

                  Источник правил

                  -
                  • Для стандартной синхронизации данных между типовыми приложениями используются типовые правила Из конфигурации.Однако в ряде случаев необходимо использовать правила Из файла на компьютере (например, если синхронизация ведется между базами с нетиповыми приложениями). +
                    • Для стандартной синхронизации данных между типовыми приложениями используются типовые правила Из конфигурации.Однако в ряде случаев необходимо использовать правила Из файла на компьютере (например, если синхронизация ведется между базами с нетиповыми приложениями).
                    • С помощью переключателя можно установить, откуда брать правила регистрации объектов:
                      • Из конфигурации (выбраны по умолчанию). @@ -13,7 +13,7 @@
                      • Из файла на компьютере.
                    • -
                      Нажмите Загрузить, укажите путь к файлу. Использование правил, загруженных из файла, может привести к ошибкам при переходе на новую версию приложения.
                      +
                      Нажмите Загрузить, укажите путь к файлу. Использование правил, загруженных из файла, может привести к ошибкам при переходе на новую версию приложения.
                    • Ниже выводится наименование правил, которые в данный момент используются.

                    Информация о комплекте правил

                    @@ -22,21 +22,21 @@
                    Предупреждение о возможности возникновения ошибок при использовании правил из внешнего файла;
                  • -
                    Правила регистрации объектов этой информационной базы - указывается версия и дата создания правил;
                    +
                    Правила регистрации объектов этой информационной базы - указывается версия и дата создания правил;
                  • -
                    Правила конвертации объектов этой информационной базы - указывается версия и дата создания правил;
                    +
                    Правила конвертации объектов этой информационной базы - указывается версия и дата создания правил;
            -
          • Правила конвертации корреспондента - указывается версия и дата создания правил.
          • Режим отладки

            +
          • Правила конвертации корреспондента - указывается версия и дата создания правил.
          • Режим отладки

            • -
              Если переключатель установлен в положение Из файла на компьютере, становится доступным режим отладки. 
              +
              Если переключатель установлен в положение Из файла на компьютере, становится доступным режим отладки.
            • -
              Нажмите ссылку Настройка режима отладки. 
              +
              Нажмите ссылку Настройка режима отладки.
            • -
              Установите флажок Включить режим отладки. После этого становятся доступными следующие настройки:
              +
              Установите флажок Включить режим отладки. После этого становятся доступными следующие настройки:
              • Подключить внешнюю обработку для отладки выгрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков выгрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере.
              • @@ -44,10 +44,10 @@
                Подключить внешнюю обработку для отладки загрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков загрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере.
              • -
                Режим протоколирования обмена данными – если включено, то в процессе обмена данными возникающие события и ошибки будут записываться в указанный файл. Если файл не задан, то сообщения будут выводиться в Журнал регистрации.
                +
                Режим протоколирования обмена данными – если включено, то в процессе обмена данными возникающие события и ошибки будут записываться в указанный файл. Если файл не задан, то сообщения будут выводиться в Журнал регистрации.
              • -
                Не останавливать выполнение обмена данными при возникновении ошибки – если установлено, то выполнение синхронизации данных не будет остановлено при возникновении какой-либо ошибки. Обмен данными завершится до конца с выводом отладочных сообщений в файл протокола обмена или журнал регистрации.

            Загрузка правил

            +
            Не останавливать выполнение обмена данными при возникновении ошибки – если установлено, то выполнение синхронизации данных не будет остановлено при возникновении какой-либо ошибки. Обмен данными завершится до конца с выводом отладочных сообщений в файл протокола обмена или журнал регистрации.

            Загрузка правил

            • Установите переключатель в положение Из файла на компьютере.
            • @@ -62,9 +62,9 @@
              При необходимости правила регистрации можно выгрузить в файл.
            • -
              Для этого нажмите Еще - Сохранить правила в файл. Выберите путь к файлу устройстве, наименование проставляется приложением по умолчанию. Нажмите Сохранить.

            Замена типовых правил конвертации объектов правилами из внешнего файла

            -
            • Установите значение переключателя в положение Из файла на компьютере и по кнопке Загрузить выберите файл правил на компьютере или в сетевой папке. +
              Для этого нажмите Еще - Сохранить правила в файл. Выберите путь к файлу устройстве, наименование проставляется приложением по умолчанию. Нажмите Сохранить.

            Замена типовых правил конвертации объектов правилами из внешнего файла

            +
            • Установите значение переключателя в положение Из файла на компьютере и по кнопке Загрузить выберите файл правил на компьютере или в сетевой папке.
            • -
            • Обратите внимание, что загружены корректные правила, подходящие для используемых версий приложения-источника и приложения-приемника.Для этого выводится Информация о комплекте правил, где указано, от какой даты эти правила. +
            • Обратите внимание, что загружены корректные правила, подходящие для используемых версий приложения-источника и приложения-приемника.Для этого выводится Информация о комплекте правил, где указано, от какой даты эти правила.
            • -
            • Нажмите на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.

            Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено две синхронизации данных "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в приложении настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

            \ No newline at end of file +
          • Нажмите на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.
          • Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено две синхронизации данных "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в приложении настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl index 78615bd7f..ca61a379f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -74,7 +74,7 @@ ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение для работы с 1С:Предприятием.'"); Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); - ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Оповещение, ТекстПредложения); + ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботы1СПредприятия(Оповещение, ТекстПредложения); Иначе УстановитьЗаголовокИнформацииОПолучении(ДополнительныеПараметры); КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form index f31d088b5..e3f4b2bd8 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form @@ -12,7 +12,7 @@ 1 <key>ru</key> - <value>Синхронизация с программой</value> + <value>Синхронизация с приложением</value> true true @@ -532,7 +532,7 @@
            <key>ru</key> - <value>Правила конвертации для программы "%1":</value> + <value>Правила конвертации для приложения "%1":</value> ГруппаОсновнаяExtendedTooltip diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html index 3c94ae8b7..082208298 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html @@ -1,18 +1,18 @@ -

            Предназначена для контроля и замены правил конвертации данных. Правила конвертации данных используются при синхронизации данных двух приложений. 

            -

            Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

            -

            Правила конвертации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила конвертации объектов.

            +

            Предназначена для контроля и замены правил конвертации данных. Правила конвертации данных используются при синхронизации данных двух приложений.

            +

            Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

            +

            Правила конвертации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила конвертации объектов.

            Источник правил

            -
            • Для стандартной синхронизации данных между типовыми приложениями используются типовые правила из конфигурации (имя макета правил конвертации, из которого были получены типовые правила, указывается).Однако в ряде случаев необходимо использовать правила из файла (например, если синхронизация ведется между базами с нетиповыми приложениями). +
              • Для стандартной синхронизации данных между типовыми приложениями используются типовые правила из конфигурации (имя макета правил конвертации, из которого были получены типовые правила, указывается).Однако в ряде случаев необходимо использовать правила из файла (например, если синхронизация ведется между базами с нетиповыми приложениями).
              • -

                С помощью переключателя можно установить, откуда брать правила регистрации объектов:

                +

                С помощью переключателя можно установить, откуда брать правила регистрации объектов:

              • Использовать типовые правила (по умолчанию).
              • -
                Загрузить из файла на компьютере. Использование правил, загруженных из файла, может привести к ошибкам при переходе на новую версию приложения.
                +
                Загрузить из файла на компьютере. Использование правил, загруженных из файла, может привести к ошибкам при переходе на новую версию приложения.
              • Ниже выводится наименование правил, которые в данный момент используются.

              Информация о правилах

              @@ -22,14 +22,14 @@
              Предупреждение о возможности возникновения ошибок при использовании правил из внешнего файла;
            • -
              Правила конвертации этой информационной базы - указывается версия правил конвертации объектов и дата создания правил;
              +
              Правила конвертации этой информационной базы - указывается версия правил конвертации объектов и дата создания правил;
            • Правила конвертации корреспондента - указывается версия правил конвертации объектов и дата создания правил.

            Режим отладки

            • Если переключатель установлен в положение Загрузить из файла на компьютере, то можно использовать режим отладки.
            • -
              Для работы в этом режиме воспользуйтесь ссылкой Настройка режима отладки,
              +
              Для работы в этом режиме воспользуйтесь ссылкой Настройка режима отладки,
            • Установите флажок Включить режим отладки.
              @@ -43,10 +43,10 @@
              Подключить внешнюю обработку для отладки загрузки – указывается файл внешней обработки, содержащей отладочный модуль обработчиков загрузки, сформированный в конфигурации "Конвертация данных". В клиент-серверном режиме работы указывается путь на сервере.
            • -
              Режим протоколирования синхронизации данных – если включено, то в процессе обмена данными возникающие события и ошибки будут записываться в указанный файл. Если файл не задан, то сообщения будут выводиться в Журнал регистрации.
              +
              Режим протоколирования синхронизации данных – если включено, то в процессе обмена данными возникающие события и ошибки будут записываться в указанный файл. Если файл не задан, то сообщения будут выводиться в Журнал регистрации.
            • -
              Не останавливать выполнение обмена данными при возникновении ошибки – если установлено, то выполнение синхронизации данных не будет остановлено при возникновении какой-либо ошибки. Обмен данными завершится до конца с выводом отладочных сообщений в файл протокола обмена или журнал регистрации.

            Загрузка правил

            +
            Не останавливать выполнение обмена данными при возникновении ошибки – если установлено, то выполнение синхронизации данных не будет остановлено при возникновении какой-либо ошибки. Обмен данными завершится до конца с выводом отладочных сообщений в файл протокола обмена или журнал регистрации.

            Загрузка правил

            • Установите переключатель в положение Загрузить из файла на компьютере.
            • @@ -58,13 +58,13 @@
              При необходимости укажите путь к файлу с правилами.

            Выгрузка правил

            • -
              При необходимости правила регистрации можно выгрузить в файл. Для этого нажмите Сохранить правила конвертации в файл.
              +
              При необходимости правила регистрации можно выгрузить в файл. Для этого нажмите Сохранить правила конвертации в файл.
            • -
            • Выберите путь к файлу на устройстве, наименование проставляется приложением по умолчанию. Нажмите Сохранить.

            Замена типовых правил конвертации объектов правилами из внешнего файла

            -
            • Установите переключатель в положение Загрузить из файла на компьютере и по кнопке Загрузить выберите файл правил на компьютере или в сетевой папке. +
            • Выберите путь к файлу на устройстве, наименование проставляется приложением по умолчанию. Нажмите Сохранить.

            Замена типовых правил конвертации объектов правилами из внешнего файла

            +
            • Установите переключатель в положение Загрузить из файла на компьютере и по кнопке Загрузить выберите файл правил на компьютере или в сетевой папке.
            • -
            • Обратите внимание, что загружены корректные правила, подходящие для используемых версий приложения-источника и приложения-приемника.Для этого выводится Информация о правилах, где указано, от какой даты эти правила. +
            • Обратите внимание, что загружены корректные правила, подходящие для используемых версий приложения-источника и приложения-приемника.Для этого выводится Информация о правилах, где указано, от какой даты эти правила.
            • -
            • Нажмите на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.

            Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено две синхронизации данных "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в приложении настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

            +
          • Нажмите на кнопку Записать и закрыть. Загруженные правила будут применены немедленно.
          • Примечание: правила конвертации объектов и правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полный настроено две синхронизации данных "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в приложении настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

            См. также:

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form index b46c2b520..82eecc0cf 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form @@ -12,7 +12,7 @@ 1 <key>ru</key> - <value>Синхронизация с программой</value> + <value>Синхронизация с приложением</value> true true @@ -933,7 +933,7 @@ <key>ru</key> - <value>Правила регистрации для программы "%1":</value> + <value>Правила регистрации для приложения "%1":</value> ГруппаОсновнаяExtendedTooltip diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html index c2daecaf0..1256db2d6 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html @@ -1,19 +1,19 @@ -

            Предназначена для контроля и замены правил регистрации данных. Правила регистрации данных предусмотрены для всех видов синхронизации данных. 

            -

            Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

            -

            Правила регистрации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила регистрации объектов.

            +

            Предназначена для контроля и замены правил регистрации данных. Правила регистрации данных предусмотрены для всех видов синхронизации данных.

            +

            Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Правила обмена состоят из правил конвертации объектов и правил регистрации объектов.

            +

            Правила регистрации объектов можно открыть из настройки синхронизации данных по команде Еще - Загрузить правила регистрации объектов.

            Источник правил

            • С помощью переключателя можно установить, откуда брать правила регистрации объектов:
              • -
                Использовать типовые правила (выбраны по умолчанию).
                +
                Использовать типовые правила (выбраны по умолчанию).
              • -
                Загрузить из файла на компьютере (только для целей отладки).
            • +
              Загрузить из файла на компьютере (только для целей отладки).
          • Ниже выводится наименование правил, которые в данный момент используются.
          • Информация о правилах

            • -
              Для контроля выводится информация о правилах: полное наименование правил, версия приложения, дата создания правил.

            Загрузка правил

            +
            Для контроля выводится информация о правилах: полное наименование правил, версия приложения, дата создания правил.

            Загрузка правил

            • Установите переключатель в положение Загрузить из файла на компьютере.
            • @@ -38,17 +38,17 @@
            • В архиве .zip.
          • -
            Выберите путь к файлу на устройстве, наименование проставляется приложением по умолчанию. Нажмите Сохранить.
          • Замена типовых правил регистрации объектов правилами из внешнего файла

            +
            Выберите путь к файлу на устройстве, наименование проставляется приложением по умолчанию. Нажмите Сохранить.

            Замена типовых правил регистрации объектов правилами из внешнего файла

            • -
              Установите значение переключателя в положение Загрузить из файла на компьютере и по кнопке Загрузить выберите файл правил на компьютере или в сетевой папке.
              +
              Установите значение переключателя в положение Загрузить из файла на компьютере и по кнопке Загрузить выберите файл правил на компьютере или в сетевой папке.
            • Обратите внимание, что загружены корректные правила, подходящие для используемых версий конфигурации-источника и конфигурации-приемника. В поле Информация о правилах выводится дата создания правил и другая необходимая информация.
            • -
              Нажмите Записать и закрыть. Загруженные правила будут применены немедленно.
            -

            Примечание: правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полная синхронизация настроено два обмена "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в приложении настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

            +
            Нажмите Записать и закрыть. Загруженные правила будут применены немедленно.
            +

            Примечание: правила регистрации объектов используются для всех однотипных синхронизаций данных (которые основываются на одном плане обмена; например: на базе плана обмена Полная синхронизация настроено два обмена "Синхронизация с филиалом в Краснодаре" и "Синхронизация с представительством в Киеве"). Поэтому если в приложении настроено несколько однотипных синхронизаций, то замену правил достаточно выполнить однократно (выбрав любую из настроенных синхронизаций данных).

            См. также:

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form index 72b3ce80b..bc8ebf46f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПроверкаСинхронизацииДанных/Form.form @@ -43,7 +43,7 @@ 12 <key>ru</key> - <value>Для синхронизации данных с другими программами используются нетиповые правила + <value>Для синхронизации данных с другими приложениями используются нетиповые правила конвертации или регистрации, которые были загружены из внешнего файла. Рекомендуется проверить работоспособность синхронизации данных и при необходимости обновить правила.</value> @@ -219,7 +219,7 @@ 1 ru - Не выводить больше это сообщение до следующего обновления программы. + Не выводить больше это сообщение до следующего обновления приложения. true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form index f798dc52a..e2613ea9d 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -50,7 +50,7 @@ 21 <key>ru</key> - <value>При выполнении правил регистрации для программы + <value>При выполнении правил регистрации для приложения <b>%1</b> возникла ошибка: %2</value> @@ -177,7 +177,7 @@ <id>41</id> <title> <key>ru</key> - <value>Для программы "%1" + <value>Для приложения "%1" используются устаревшие правила %2, загруженные из файла. Рекомендуется использовать правила из конфигурации или загрузить новые правила из файла.</value> diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form index b297ddac4..e33b8cf6f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form @@ -85,7 +85,7 @@ true - ФормаОбновитьВсеТиповыеПравилаРасширеннаяПодсказка + ФормаОбновитьВсеТиповыеПравилаExtendedTooltip 27 Label true @@ -113,7 +113,7 @@ Форма группа 3 - ФормаГруппа3РасширеннаяПодсказка + ФормаГруппа3ExtendedTooltip 26 Label true @@ -136,7 +136,7 @@ true - ФормаНайтиРасширеннаяПодсказка + ФормаНайтиExtendedTooltip 29 Label true @@ -163,7 +163,7 @@ true - ФормаОтменитьПоискРасширеннаяПодсказка + ФормаОтменитьПоискExtendedTooltip 30 Label true @@ -191,7 +191,7 @@ Форма группа 1 - ФормаГруппа1РасширеннаяПодсказка + ФормаГруппа1ExtendedTooltip 28 Label true @@ -214,7 +214,7 @@ true - ФормаОбновитьРасширеннаяПодсказка + ФормаОбновитьExtendedTooltip 32 Label true @@ -240,7 +240,7 @@ true - ФормаНастройкаСпискаРасширеннаяПодсказка + ФормаНастройкаСпискаExtendedTooltip 33 Label true @@ -266,7 +266,7 @@ true - ФормаВывестиСписокРасширеннаяПодсказка + ФормаВывестиСписокExtendedTooltip 34 Label true @@ -292,7 +292,7 @@ true - ФормаКопироватьВБуферОбменаРасширеннаяПодсказка + ФормаКопироватьВБуферОбменаExtendedTooltip 35 Label true @@ -320,7 +320,7 @@ Форма группа 2 - ФормаГруппа2РасширеннаяПодсказка + ФормаГруппа2ExtendedTooltip 31 Label true @@ -380,7 +380,7 @@ 4 <key>ru</key> - <value>Программа</value> + <value>Приложение</value> true true @@ -392,7 +392,7 @@ true - ИмяПланаОбменаРасширеннаяПодсказка + ИмяПланаОбменаExtendedTooltip 37 Label true @@ -429,7 +429,7 @@ true - ВидПравилРасширеннаяПодсказка + ВидПравилExtendedTooltip 38 Label true @@ -466,7 +466,7 @@ true - ИсточникПравилРасширеннаяПодсказка + ИсточникПравилExtendedTooltip 39 Label true @@ -599,7 +599,7 @@ - СписокРасширеннаяПодсказка + СписокExtendedTooltip 36 Label true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html index 45211a741..49f065f51 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html @@ -1,6 +1,6 @@

            Настройка синхронизации данных по умолчанию производится в соответствии с так называемыми Типовыми правилами обмена. Если эти правила устарели, то выполнение синхронизации данных приведет к очень серьезным ошибкам, порче информации. Поэтому при настройке новой синхронизации данных, а также при выходе очередного обновления любого из приложения, участвующего в синхронизации данных, необходимо контролировать актуальность используемых типовых правил обмена.

            -

            Типовые правила обмена состоят из правил конвертации объектов и правил регистрации объектов. Правила конвертации данных используются при синхронизации данных двух приложений. Правила регистрации предусмотрены для всех видов синхронизации данных. Комплект актуальных правил обмена публикуется на сайте технической поддержки http://users.v8.1c.ru. Исправительные версии правил обмена также публикуются на данном сайте.

            +

            Типовые правила обмена состоят из правил конвертации объектов и правил регистрации объектов. Правила конвертации данных используются при синхронизации данных двух приложений. Правила регистрации предусмотрены для всех видов синхронизации данных. Комплект актуальных правил обмена публикуется на сайте технической поддержки http://users.v8.1c.ru. Исправительные версии правил обмена также публикуются на данном сайте.

            Контроль актуальности правил синхронизации

            • При проверке актуальности правил необходимо обратить внимание на следующие контролируемые параметры:
              @@ -31,13 +31,13 @@
              Откройте созданную настройку синхронизации данных.
            • -
              В меню Еще настройки синхронизации данных выполните команду Загрузить правила конвертации объектов.
              +
              В меню Еще настройки синхронизации данных выполните команду Загрузить правила конвертации объектов.
            • Проконтролируйте информацию о правилах конвертации данных.
            • -
              Затем выполните команду Еще - Загрузить правила регистрации объектов.
              +
              Затем выполните команду Еще - Загрузить правила регистрации объектов.
            • Проконтролируйте информацию о правилах регистрации объектов.
              @@ -46,9 +46,9 @@
              Аналогичным образом можно произвести анализ контролируемых параметров, которые загружены в приложениеи для уже существующей настройки синхронизации данных. Например, для проверки правил регистрации объектов в существующей настройке синхронизации данных в подчиненном узле необходимо использовать команду Загрузить правила регистрации объектов.
            • -
              Для проверки правил синхронизации данных двух приложений данные действия следует производить последовательно для приложения-источника и для приложения-приемника.

            Контроль правил, входящих в поставку приложения

            +
            Для проверки правил синхронизации данных двух приложений данные действия следует производить последовательно для приложения-источника и для приложения-приемника.

            Контроль правил, входящих в поставку приложения

            • -
              В окне Правила конвертации данных (Правила регистрации данных) с помощью переключателя выберите Из файла на компьютере. Выполните команду Загрузить.
              +
              В окне Правила конвертации данных (Правила регистрации данных) с помощью переключателя выберите Из файла на компьютере. Выполните команду Загрузить.
            • Выберите файл правил конвертации из комплекта поставки приложения.
              @@ -62,12 +62,12 @@
            • Данные действия также следует производить последовательно для двух приложений, которые участвуют в синхронизации данных.

            Контроль правил из внешнего файла

            • -
              Необходимо посмотреть информацию об этих правилах, затем сохранить копию используемых правил в файл с помощью кнопки Сохранить правила конвертации (регистрации) в файл.
              +
              Необходимо посмотреть информацию об этих правилах, затем сохранить копию используемых правил в файл с помощью кнопки Сохранить правила конвертации (регистрации) в файл.
            • Установить переключатель в положение Использовать типовые правила.
            • -
            • Посмотреть представленную информацию о правилах.

            Принятие решений по результатам проверки 

            +
          • Посмотреть представленную информацию о правилах.
          • Принятие решений по результатам проверки

            • В результате проверки правил выбирается более новая версия и принимается одно из решений:
            • @@ -82,4 +82,4 @@
            • Использовать вместо правил из внешнего источника типовые, встроенные в конфигурацию правила конвертации и правила регистрации объектов.
              • -
                Для этого необходимо выбрать команду Еще - Загрузить правила конвертации объектов (правила регистрации объектов). Далее необходимо установить переключатель в положение Использовать типовые правила.
            \ No newline at end of file +
            Для этого необходимо выбрать команду Еще - Загрузить правила конвертации объектов (правила регистрации объектов). Далее необходимо установить переключатель в положение Использовать типовые правила.
            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 4afb2a65b..45868aacc 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -965,8 +965,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Профили безопасности +#Область ПрофилиБезопасности // См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам. Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт @@ -1157,5 +1156,6 @@ #КонецОбласти -#КонецЕсли +#КонецОбласти +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl index 519106bd9..84e2c4eda 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/RecordSetModule.bsl @@ -16,7 +16,9 @@ Возврат; КонецЕсли; - ДополнительныеСвойства.Вставить("СтруктураЗаписи", СтруктураЗаписи()); // Используется потребителями. + СтарыйНабор = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(ЭтотОбъект, Замещение, ПоляДляАнализа()); + + ДополнительныеСвойства.Вставить("СтарыйНабор", СтарыйНабор); КонецПроцедуры @@ -30,8 +32,17 @@ Возврат; КонецЕсли; - СтараяЗапись = ДополнительныеСвойства.СтруктураЗаписи; - НоваяЗапись = СтруктураЗаписи(); + СтарыйНабор = ДополнительныеСвойства.СтарыйНабор; + + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + НовыйНабор = Выгрузить(Новый Массив, ПоляДляАнализа()); + Иначе + НовыйНабор = Выгрузить(, ПоляДляАнализа()); + КонецЕсли; + + СтараяЗапись = СтруктураЗаписи(СтарыйНабор); + НоваяЗапись = СтруктураЗаписи(НовыйНабор); + ДанныеДляРасчета = Новый Структура("НоваяЗапись, СтараяЗапись", НоваяЗапись, СтараяЗапись); Если НоваяЗапись.Рассмотрено <> СтараяЗапись.Рассмотрено Тогда @@ -40,7 +51,7 @@ Взаимодействия.РассчитатьРассмотреноПоПредметам(Взаимодействия.ТаблицаДанныхДляРасчетаРассмотрено(ДанныеДляРасчета, "Предмет")); Возврат; - + КонецЕсли; Если НоваяЗапись.Папка <> СтараяЗапись.Папка Тогда @@ -64,38 +75,37 @@ #Область СлужебныеПроцедурыИФункции -Функция СтруктураЗаписи() +Функция ПоляДляАнализа() + + МетаданныеРегистра = Метаданные(); + + ПоляДляАнализа = Новый Массив; + ПоляДляАнализа.Добавить(МетаданныеРегистра.Ресурсы.Предмет.Имя); + ПоляДляАнализа.Добавить(МетаданныеРегистра.Ресурсы.ПапкаЭлектронногоПисьма.Имя); + ПоляДляАнализа.Добавить(МетаданныеРегистра.Ресурсы.Рассмотрено.Имя); + + Возврат СтрСоединить(ПоляДляАнализа, ","); + +КонецФункции - СтруктураВозврата = Новый Структура; - СтруктураВозврата.Вставить("Предмет", Неопределено); - СтруктураВозврата.Вставить("Папка", Справочники.ПапкиЭлектронныхПисем.ПустаяСсылка()); - СтруктураВозврата.Вставить("Рассмотрено", Неопределено); +Функция СтруктураЗаписи(НаборЗаписей) + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Предмет", Неопределено); + СтруктураЗаписи.Вставить("Папка", Справочники.ПапкиЭлектронныхПисем.ПустаяСсылка()); + СтруктураЗаписи.Вставить("Рассмотрено", Неопределено); - Если Отбор.Количество() = 0 Тогда - Возврат Неопределено; + Если НаборЗаписей.Количество() = 0 Тогда + Возврат СтруктураЗаписи; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПредметыПапкиВзаимодействий.Предмет, - | ПредметыПапкиВзаимодействий.ПапкаЭлектронногоПисьма КАК Папка, - | ПредметыПапкиВзаимодействий.Рассмотрено - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий - |ГДЕ - | ПредметыПапкиВзаимодействий.Взаимодействие = &Взаимодействие"; + ЗаписьНабора = НаборЗаписей[0]; - Запрос.УстановитьПараметр("Взаимодействие", Отбор.Взаимодействие.Значение); + СтруктураЗаписи.Предмет = ЗаписьНабора.Предмет; + СтруктураЗаписи.Папка = ЗаписьНабора.ПапкаЭлектронногоПисьма; + СтруктураЗаписи.Рассмотрено = ЗаписьНабора.Рассмотрено; - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат СтруктураВозврата; - КонецЕсли; - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ЗаполнитьЗначенияСвойств(СтруктураВозврата, Выборка); - Возврат СтруктураВозврата; + Возврат СтруктураЗаписи; КонецФункции diff --git a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Help/ru.html b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Help/ru.html index b624be3c2..259fb270b 100644 --- a/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Help/ru.html +++ b/SSL/src/InformationRegisters/ПроцессыДляЗапуска/Forms/НастройкаОтложенногоСтартаПроцесса/Help/ru.html @@ -30,7 +30,7 @@ OL {

            -

            Флажок Отложенный старт задания отвечает за запуск и отключение отложенного старта.

            +

            Флажок Отложенный старт задания отвечает за запуск и отключение отложенного старта.

            • Если флажок недоступен, значит процесс уже запущен или завершен и вы не сможете отложить его старт. -
            • Чтобы отменить отложенный старт процесса, достаточно снять флажок Отложенный старт задания.

             

            +
          • Чтобы отменить отложенный старт процесса, достаточно снять флажок Отложенный старт задания.
            1. \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/RecordSetModule.bsl index 4aa59bdf1..59fde3dc1 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/RecordSetModule.bsl @@ -29,6 +29,6 @@ #КонецОбласти -#КонецЕсли - - +#Иначе +ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl index 131f89bae..73883e56a 100644 --- a/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПутиКПрограммамЭлектроннойПодписиИШифрованияНаСерверахLinux/Forms/ФормаСписка/Module.bsl @@ -17,7 +17,8 @@ Программа = Параметры.Отбор.Программа; АвтоЗаголовок = Ложь; - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пути к программе %1 на серверах Linux'"), Программа); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пути к приложению %1 на серверах Linux'"), Программа); Элементы.СписокПрограмма.Видимость = Ложь; КонецЕсли; diff --git a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl index 1120c6239..3e6d1069c 100644 --- a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl @@ -16,44 +16,50 @@ Возврат; КонецЕсли; - Если Количество() = 1 Тогда - Папка = Получить(0).Папка; - Путь = Получить(0).Путь; - - Если ПустаяСтрока(Путь) Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПапкиФайлов.Ссылка, - | ПапкиФайлов.Наименование - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Родитель = &Ссылка"; - - Запрос.УстановитьПараметр("Ссылка", Папка); - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - - РабочийКаталог = Путь; - // Добавляем слэш в конце, если его нет - того же типа, что уже был - т.к. он нужен на клиенте, - // а ПередЗаписью исполняется на сервере. - РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог); - - РабочийКаталог = РабочийКаталог + Выборка.Наименование; - РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог); - - РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки( - Выборка.Ссылка, РабочийКаталог); - КонецЦикла; - + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; КонецЕсли; + Если Количество() = 1 Тогда + РабочийКаталогФайла = Получить(0); + Папка = РабочийКаталогФайла.Папка; + Путь = РабочийКаталогФайла.Путь; + УстановитьРабочийКаталог(Папка, Путь); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура УстановитьРабочийКаталог(Знач Папка, Знач ПутьРабочегоКаталога) + + Если ПустаяСтрока(ПутьРабочегоКаталога) Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПапкиФайлов.Ссылка, + | ПапкиФайлов.Наименование + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Родитель = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Папка); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьРабочегоКаталога) + + Выборка.Наименование; + РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог); + РаботаСФайламиСлужебный.СохранитьРабочийКаталогПапки(Выборка.Ссылка, РабочийКаталог); + КонецЦикла; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl index 761e09a4a..8d460fbf8 100644 --- a/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РазрешенияНаИспользованиеВнешнихРесурсов/RecordSetModule.bsl @@ -5,7 +5,6 @@ // Текст лицензии доступен по ссылке: // https://creativecommons.org/licenses/by/4.0/legalcode /////////////////////////////////////////////////////////////////////////////////////////////////////// - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий @@ -15,27 +14,29 @@ // ОбменДанными.Загрузка не требуется. // Запись служебных данных в безопасном режиме запрещена. РаботаВБезопасномРежимеСлужебный.ПриЗаписиСлужебныхДанных(ЭтотОбъект); - + Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - - Для Каждого Запись Из ЭтотОбъект Цикл - - ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( - Запись.ТипПрограммногоМодуля, Запись.ИдентификаторПрограммногоМодуля); - Запись.ПредставлениеПрограммногоМодуля = Строка(ПрограммныйМодуль); - - Владелец = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( - Запись.ТипВладельца, Запись.ИдентификаторВладельца); - Запись.ПредставлениеВладельца = Строка(Владелец); - - КонецЦикла; - + + Если Не ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Для Каждого Запись Из ЭтотОбъект Цикл + + ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( + Запись.ТипПрограммногоМодуля, Запись.ИдентификаторПрограммногоМодуля); + Запись.ПредставлениеПрограммногоМодуля = Строка(ПрограммныйМодуль); + + Владелец = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( + Запись.ТипВладельца, Запись.ИдентификаторВладельца); + Запись.ПредставлениеВладельца = Строка(Владелец); + + КонецЦикла; + КонецЕсли; + КонецПроцедуры #КонецОбласти #Иначе -ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); + ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийКоллизии/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийКоллизии/Form.form index d434157cd..0ac9f9307 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийКоллизии/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийКоллизии/Form.form @@ -104,7 +104,7 @@ 39 <key>ru</key> - <value>Версия из другой программы</value> + <value>Версия из другого приложения</value> true true @@ -147,7 +147,7 @@ 42 <key>ru</key> - <value>Версия этой программы</value> + <value>Версия этого приложения</value> true true @@ -807,7 +807,7 @@ ВерсияИзДругойПрограммы <key>ru</key> - <value>Версия из другой программы</value> + <value>Версия из другого приложения</value> 5 @@ -828,7 +828,7 @@ ВерсияЭтойПрограммы <key>ru</key> - <value>Версия этой программы</value> + <value>Версия этого приложения</value> 6 @@ -905,7 +905,7 @@ 3 ru - Показать отличия между версиями в этой и в другой программе + Показать отличия между версиями в этом и в другом приложении true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийПоДатеЗапретаЗагрузки/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийПоДатеЗапретаЗагрузки/Form.form index a2dac2dec..bbe4f0858 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийПоДатеЗапретаЗагрузки/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийПоДатеЗапретаЗагрузки/Form.form @@ -104,7 +104,7 @@ 39 <key>ru</key> - <value>Версия из другой программы</value> + <value>Версия из другого приложения</value> true true @@ -147,7 +147,7 @@ 42 <key>ru</key> - <value>Версия этой программы</value> + <value>Версия этого приложения</value> true true @@ -746,7 +746,7 @@ ВерсияИзДругойПрограммы <key>ru</key> - <value>Версия из другой программы</value> + <value>Версия из другого приложения</value> 5 @@ -767,7 +767,7 @@ ВерсияЭтойПрограммы <key>ru</key> - <value>Версия этой программы</value> + <value>Версия этого приложения</value> 6 @@ -844,7 +844,7 @@ 3 ru - Показать отличия между версиями в этой и в другой программе + Показать отличия между версиями в этом и в другом приложении true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеОКоллизии/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеОКоллизии/Form.form index b2a9b43e1..141367256 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеОКоллизии/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеОКоллизии/Form.form @@ -18,7 +18,7 @@ 3 <key>ru</key> - <value>Данные были одновременно изменены в этой и в другой программе, в результате чего появилось две версии + <value>Данные были одновременно изменены в этом и в другом приложении, в результате чего появилось две версии одного объекта (справочник, документ) и возник конфликт, который был разрешен автоматически. Если конфликт разрешен верно или предупреждение потеряло свою актуальность воспользуйтесь командой "Скрыть из списка"</value> Label @@ -242,7 +242,7 @@ 26 <key>ru</key> - <value>Показать версию в этой программе</value> + <value>Показать версию в этом приложении</value> true true @@ -272,7 +272,7 @@ 24 <key>ru</key> - <value>Показать версию из другой программы</value> + <value>Показать версию из другого приложения</value> true true @@ -831,7 +831,7 @@ ОткрытьВерсиюДругойПрограммы <key>ru</key> - <value>Показать версию из другой программы</value> + <value>Показать версию из другого приложения</value> 2 @@ -857,12 +857,12 @@ ОткрытьВерсиюВЭтойПрограмме <key>ru</key> - <value>Показать версию в этой программе</value> + <value>Показать версию в этом приложении</value> 3 ru - Открыть версию в этой программе + Открыть версию в этом приложении true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеПоДатеЗапретаЗагрузки/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеПоДатеЗапретаЗагрузки/Form.form index ffd41aff2..7f9c353e7 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеПоДатеЗапретаЗагрузки/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеПоДатеЗапретаЗагрузки/Form.form @@ -241,7 +241,7 @@ 26 <key>ru</key> - <value>Показать версию этой программы</value> + <value>Показать версию этого приложения</value> true true @@ -843,12 +843,12 @@ ОткрытьВерсиюЭтойПрограммы <key>ru</key> - <value>Показать версию этой программы</value> + <value>Показать версию этого приложения</value> 3 ru - Открыть версию этой программы + Открыть версию этого приложения true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияОбработчиковОтправкиПолучения/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияОбработчиковОтправкиПолучения/Form.form index 3f5d71cd4..62e46dc17 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияОбработчиковОтправкиПолучения/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияОбработчиковОтправкиПолучения/Form.form @@ -18,7 +18,7 @@ 3 <key>ru</key> - <value>При отправке данных в другую программу обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию программы, либо связаться с обслуживающей организацией. Так же ошибка может быть связана с использованием неактуальных правил конвертации. Если предупреждение потеряло свою актуальность воспользуйтесь командой "Скрыть из списка"</value> + <value>При отправке данных в другое приложение обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию приложения, либо связаться с обслуживающей организацией. Так же ошибка может быть связана с использованием неактуальных правил конвертации. Если предупреждение потеряло свою актуальность воспользуйтесь командой "Скрыть из списка"</value> Label true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Form.form index 0b88404a7..ac7d2e8b8 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Form.form @@ -521,7 +521,7 @@ 187 <key>ru</key> - <value>Версия из другой программы</value> + <value>Версия из другого приложения</value> true true @@ -559,7 +559,7 @@ 190 <key>ru</key> - <value>Версия этой программы</value> + <value>Версия этого приложения</value> true true @@ -794,10 +794,6 @@ ru Показать, скрыть предупреждение - - ru - Список группа актуальность предупреждений - СписокГруппаАктуальностьПредупрежденийРасширеннаяПодсказка 109 @@ -1122,10 +1118,6 @@ ru Исправление - - ru - Список группа типовых команд - СписокГруппаТиповыхКомандРасширеннаяПодсказка 93 @@ -1243,10 +1235,6 @@ ru Группа дополнительные команды - - ru - Список группа дополнительные команды - СписокГруппаДополнительныеКомандыРасширеннаяПодсказка 229 @@ -1972,7 +1960,7 @@ ТОГДА &ТехническаяОшибкаПолучение КОНЕЦ КАК ПредставлениеТипаПредупреждения, РегистрСведенийРезультатыОбменаДаннымиПереопределяемый.ДатаВозникновения КАК ДатаВозникновения, - ВЫРАЗИТЬ(РегистрСведенийРезультатыОбменаДаннымиПереопределяемый.Причина КАК СТРОКА(1000)) КАК Описание, + РегистрСведенийРезультатыОбменаДаннымиПереопределяемый.Причина КАК Описание, РегистрСведенийРезультатыОбменаДаннымиПереопределяемый.КлючУникальности КАК КлючУникальности, РегистрСведенийРезультатыОбменаДаннымиПереопределяемый.Пропущена КАК СкрытьПредупреждение, ВЫБОР diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Module.bsl index d533114e9..9d9a70cbd 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупрежденияСинхронизаций/Module.bsl @@ -43,7 +43,12 @@ МассивПолей.Добавить("ПроблемныйОбъект"); МассивПолей.Добавить("Описание"); - Список.УстановитьОграниченияИспользованияВПорядке(МассивПолей); + Для Каждого ИзменяемоеПоле Из МассивПолей Цикл + Поле = Список.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + Поле.Поле = ИзменяемоеПоле; + Поле.ОграничениеИспользования.Порядок = Истина; + Поле.ОграничениеИспользованияРеквизитов.Порядок = Истина; + КонецЦикла; Список.Параметры.УстановитьЗначениеПараметра("НепроведенныйДокумент", НСтр("ru ='Непроведенный документ'", ОбщегоНазначения.КодОсновногоЯзыка())); Список.Параметры.УстановитьЗначениеПараметра("ПустыеРеквизиты", НСтр("ru ='Пустые реквизиты'", ОбщегоНазначения.КодОсновногоЯзыка())); @@ -373,7 +378,8 @@ ПараметрыОткрытия.Вставить("ТолькоСкрытыеЗаписи", Истина); ОписаниеОповещения = Новый ОписаниеОповещения("ПослеУдаленияУстаревшихЗаписей", ЭтотОбъект); - ОткрытьФорму("РегистрСведений.РезультатыОбменаДанными.Форма.УдалениеУстаревшихПредупреждений", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения); + + ОбменДаннымиКлиент.ОткрытьФормуУдаленияПредупрежденийСинхронизации(ПараметрыОткрытия, ОписаниеОповещения); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/УдалениеУстаревшихПредупреждений/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/УдалениеУстаревшихПредупреждений/Module.bsl index 6f389300e..b926ff7c3 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/УдалениеУстаревшихПредупреждений/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/УдалениеУстаревшихПредупреждений/Module.bsl @@ -11,7 +11,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - КэшЗначений = Новый Структура("МассивУзловПланаОбмена, ОтборПоДатеВозникновения, ОтборУзловПланаОбмена, ОтборТипыПредупреждений"); + КэшЗначений = Новый Структура; + КэшЗначений.Вставить("МассивУзловПланаОбмена"); + КэшЗначений.Вставить("ОтборПоДатеВозникновения"); + КэшЗначений.Вставить("ОтборУзловПланаОбмена"); + КэшЗначений.Вставить("ОтборТипыПредупреждений"); ОтборыПоПереданнымПараметрам(); diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index 025b597d2..fe4040157 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -241,7 +241,7 @@ 596 <key>ru</key> - <value>При отправке данных в другую программу обнаружены объекты информационной базы, которые зарегистрированы к обмену, но не могут быть выгружены по различным причинам. Необходимо открыть проблемный объект и устранить причины, мешающие его отправке в другую программу. При последующей отправке в другую программу список проблем будет актуализирован.</value> + <value>При отправке данных в другое приложение обнаружены объекты информационной базы, которые зарегистрированы к обмену, но не могут быть выгружены по различным причинам. Необходимо открыть проблемный объект и устранить причины, мешающие его отправке в другое приложение. При последующей отправке в другое приложение, список проблем будет актуализирован.</value> true true @@ -1216,7 +1216,7 @@ ru - Список объектов зарегистрированных к отправке в другую программу, но имеют проблемы из-за которых не могут быть выгружены. + Список объектов зарегистрированных к отправке в другое приложение, но имеют проблемы из-за которых не могут быть выгружены. СтраницаОшибкиXDTOРасширеннаяПодсказка @@ -1246,7 +1246,7 @@ 57 <key>ru</key> - <value>Документы, полученные при синхронизации данных с другой программой, не удалось провести автоматически. + <value>Документы, полученные при синхронизации данных с другим приложением, не удалось провести автоматически. Рекомендуется открыть документ и устранить проблемы, мешающие его проведению.</value> true @@ -2444,7 +2444,7 @@ 59 <key>ru</key> - <value>При синхронизации с другой программой были получены данные, которые не удалось корректно записать, т.к. один или несколько + <value>При синхронизации с другим приложением были получены данные, которые не удалось корректно записать, т.к. один или несколько реквизитов не были корректно заполнены. Рекомендуется открыть элемент справочника и заполнить эти реквизиты.</value> true @@ -3491,7 +3491,7 @@ 176 <key>ru</key> - <value>Данные были одновременно изменены в этой и в другой программе, в результате чего появилось две версии + <value>Данные были одновременно изменены в этом и в другом приложении, в результате чего появилось две версии одного элемента справочника (документа) и возник конфликт, который был разрешен автоматически.</value> true @@ -3676,7 +3676,7 @@ 291 <key>ru</key> - <value>Данные получены из программы</value> + <value>Данные получены из приложения</value> true true @@ -3732,7 +3732,7 @@ ru - Статус версии, полученной из другой программы + Статус версии, полученной из другого приложения КоллизииДругаяВерсияПринятаExtendedTooltip @@ -4797,7 +4797,7 @@ 247 <key>ru</key> - <value>Данные получены из программы</value> + <value>Данные получены из приложения</value> true true @@ -5477,7 +5477,7 @@ 339 <key>ru</key> - <value>Показать версию в этой программе</value> + <value>Показать версию в этом приложении</value> true true @@ -5714,7 +5714,7 @@ 761 <key>ru</key> - <value>При отправке данных в другую программу обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию программы, либо связаться с обслуживающей организацией.</value> + <value>При отправке данных в другое приложение обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию приложения, либо связаться с обслуживающей организацией.</value> true true @@ -6181,7 +6181,7 @@ 764 <key>ru</key> - <value>При получении данных из другой программы обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию программы, или связаться с обслуживающей организацией.</value> + <value>При получении данных из другого приложения обнаружены ошибки в коде правил конвертации объектов. Необходимо обновится на актуальную версию приложения, или связаться с обслуживающей организацией.</value> true true @@ -8179,7 +8179,7 @@ 20 ru - Показать отличия между версиями в этой и в другой программе + Показать отличия между версиями в этом и в другом приложении true @@ -8363,12 +8363,12 @@ ОткрытьВерсиюНепринятыеВЭтойПрограмме <key>ru</key> - <value>Показать версию в этой программе</value> + <value>Показать версию в этом приложении</value> 21 ru - Открыть версию в этой программе + Открыть версию в этом приложении true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Help/ru.html b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Help/ru.html index 58007a98b..8dbd44fe1 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Help/ru.html +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Help/ru.html @@ -1,48 +1,48 @@ -

              Предназначен для просмотра статистики по результатам синхронизации данных.

              -

              Результаты синхронизации данных в виде ссылки можно увидеть в списке Синхронизации данных, например, на рабочем столе приложения. В зависимости от результатов ссылка принимает значения Предупреждений нет (в случае успешной синхронизации данных) или  Предупреждения (при этом в скобках указывается количество предупреждений). Для открытия списка результатов синхронизации данных пройдите по ссылке. 

              -

              При выполнении синхронизации данных возможно возникновение проблемных ситуаций, требующих вмешательства пользователя. В колонках списка выводится необходимая информация о данных, по которым возникли проблемы и причина, по которой они не были приняты. Причина кратко указывается в специальной колонке, при этом по выделенной строке в нижней части списка выводится подробная формулировка, с указанием проблемных полей списков или документов.

              -

              Отборы

              +

              Предназначен для просмотра статистики по результатам синхронизации данных.

              +

              Результаты синхронизации данных в виде ссылки можно увидеть в списке Синхронизации данных, например, на рабочем столе приложения. В зависимости от результатов ссылка принимает значения Предупреждений нет (в случае успешной синхронизации данных) или Предупреждения (при этом в скобках указывается количество предупреждений). Для открытия списка результатов синхронизации данных пройдите по ссылке.

              +

              При выполнении синхронизации данных возможно возникновение проблемных ситуаций, требующих вмешательства пользователя. В колонках списка выводится необходимая информация о данных, по которым возникли проблемы и причина, по которой они не были приняты. Причина кратко указывается в специальной колонке, при этом по выделенной строке в нижней части списка выводится подробная формулировка, с указанием проблемных полей списков или документов.

              +

              Отборы

              Для удобства просмотра предусмотрены отборы:

              -
              •  Выберите Период, за который выдавать данные; 
              • -
              • В поле Отправитель  Выберите из списка информационную базу, которая вас интересует; 
              • -
              • В поле Причина напишите причину ошибки (данный отбор невозможен для вкладки Конфликты). 

              Проблемные ситуации можно условно разделить на следующие категории, которые в списке находятся на отдельных вкладках. В заголовке каждой вкладки в скобках указывается количество проблемных ситуаций:

              -

              Проблемы при отправке

              +
              • Выберите Период, за который выдавать данные;
              • +
              • В поле Отправитель Выберите из списка информационную базу, которая вас интересует;
              • +
              • В поле Причина напишите причину ошибки (данный отбор невозможен для вкладки Конфликты).

              Проблемные ситуации можно условно разделить на следующие категории, которые в списке находятся на отдельных вкладках. В заголовке каждой вкладки в скобках указывается количество проблемных ситуаций:

              +

              Проблемы при отправке

              • Сообщения об ошибках при отправке записываются в журнал регистрации, но эти сведения предназначены для разработчиков и не всегда понятны. На данной вкладке можно посмотреть ошибки отправки в более наглядном виде.
              • -
              • Для того чтобы попытаться исправить ошибки, выделите их, нажмите кнопку Изменить выделенные объекты.
              • -
              • Для скрытия ошибки из списка без устранения проблемы нажмите кнопку Игнорировать ошибку.
              • -
              • Для того чтобы изменить вид списка, нажмите Настроить список.
              • -
              • Для того, чтобы открыть подробное описание ошибки, нажмите Еще - Изменить;
              • -
              • Увидеть скрытые из списка ошибки можно с помощью команды Показывать проигнорированные меню Еще;
              • -
              • Для возвращения проигнорированного документа в список выполните команду Еще - Не игнорировать.

              Непроведенные документы

              -
              • В этом списке показываются документы, которые не удалось провести по каким-либо причинам. Для решения проблемы с проведением документа рекомендуется открыть документ и устранить недочеты, мешающие его проведению (это может быть, например, недостаточный остаток по товару). Внизу списка отражается причина невозможности автоматического проведения.
              • -
              • Для того чтобы попытаться исправить ошибки в выбранных документах, нажмите Изменить выделенные. 
              • -
              • После устранения ошибок можно Провести документ. 
              • -
              • Для того чтобы открыть документ, нажмите Еще - Изменить. 
              • -
              • Для скрытия документа из этого списка без устранения проблемы с проведением нажмите Игнорировать. 
              • -
              • Для того, чтобы увидеть скрытые из списка документы, нажмите Еще - Показывать проигнорированные. 
              • -
              • Для возвращения проигнорированного документа в список нажмите Еще - Не игнорировать.

              Незаполненные реквизиты

              -
              • Содержит список незаполненных реквизитов элементов справочников. Для исправления необходимо открыть элемент справочника (это можно сделать по двойному клику мыши на нем) и заполнить обязательные для заполнения поля. После чего необходимо записать элемент. 
              • -
              • Для того чтобы попытаться заполнить реквизиты в выбранных элементах, нажмите Изменить выделенные. 
              • -
              • Для того чтобы открыть элемент, нажмите Еще - Изменить. 
              • -
              • Для удаления элемента справочника из этого списка без устранения заполнения обязательных реквизитов нажмите Игнорировать. 
              • -
              • Для того, чтобы показать скрытые из списка элементы, нажмите Еще - Показывать проигнорированные. 
              • -
              • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

              Конфликты

              -
              • При настроенной синхронизации данных между двумя приложениями возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обоих приложениях. Это приводит к возникновению двух различающихся версий одинаковых данных в этих приложениях. Такая ситуация называется конфликтом изменения данных.
                Конфликты изменения данных разрешаются (выбирается одна из версий) автоматически, однако можно изменить результат автоматического разрешения конфликта. Для этого выделите элемент списка. 
              • -
              • В строке внизу списка выводится метод решения конфликта, который был выбран приложением. 
              • -
              • Для выявления отличий между двумя версиями нажмите Показать отличия. 
              • -
              • Для принятия решения, какую версию принять, можно просмотреть обе версии. Для этого нажмите Еще - Показать версию, созданную в этой информационной базеили Еще - Показать версию, полученную из другой информационной базы. 
              • -
              • Для просмотра элемента списка нажмите Еще - Изменить данные. 
              • -
              • После принятия решения о версии, которая должна быть сохранена, нажмите Подтвердить для сохранения результата автоматического разрешения конфликта или Пересмотреть для изменения результата рассмотрения конфликта на противоположный. После этого элемент становится неактивным, ему присваивается признак Рассмотрено и по умолчанию он скрывается из списка. 
              • -
              • По умолчанию рассмотренные конфликты скрываются из списка. Для того чтобы показывать их тоже, нажмите Еще - Показывать рассмотренные конфликты. 
              • -
              • Для того чтобы заново проверить рассмотренные конфликты и что-либо изменить, нажмите Еще - Снять признак "Рассмотрено".

              Непринятые по дате запрета

              -
              • В этом списке отображаются данные, которые были отклонены из-за установленного запрета на загрузку данных прошлых периодов. 
              • -
              • Для сравнения отклоненных данных с текущими данными в приложении нажмите Показать отличия (при наличии данных в текущем приложении). 
              • -
              • Для того чтобы открыть элемент, нажмите Еще - Изменить. 
              • -
              • Для просмотра другой версии нажмите Еще - Показать непринятую версию. 
              • -
              • Для получения данных, несмотря на установленный запрет загрузки данных, нажмите Принять версию. 
              • -
              • Для удаления строки из списка без принятия решения нажмите Игнорировать. 
              • -
              • Для того, чтобы показать скрытые из списка элементы, нажмите Еще - Показывать проигнорированные. 
              • -
              • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

              См. также:

              +
            2. Для того чтобы попытаться исправить ошибки, выделите их, нажмите кнопку Изменить выделенные объекты.
            3. +
            4. Для скрытия ошибки из списка без устранения проблемы нажмите кнопку Игнорировать ошибку.
            5. +
            6. Для того чтобы изменить вид списка, нажмите Настроить список.
            7. +
            8. Для того, чтобы открыть подробное описание ошибки, нажмите Еще - Изменить;
            9. +
            10. Увидеть скрытые из списка ошибки можно с помощью команды Показывать проигнорированные меню Еще;
            11. +
            12. Для возвращения проигнорированного документа в список выполните команду Еще - Не игнорировать.
            13. Непроведенные документы

              +
              • В этом списке показываются документы, которые не удалось провести по каким-либо причинам. Для решения проблемы с проведением документа рекомендуется открыть документ и устранить недочеты, мешающие его проведению (это может быть, например, недостаточный остаток по товару). Внизу списка отражается причина невозможности автоматического проведения.
              • +
              • Для того чтобы попытаться исправить ошибки в выбранных документах, нажмите Изменить выделенные.
              • +
              • После устранения ошибок можно Провести документ.
              • +
              • Для того чтобы открыть документ, нажмите Еще - Изменить.
              • +
              • Для скрытия документа из этого списка без устранения проблемы с проведением нажмите Игнорировать.
              • +
              • Для того, чтобы увидеть скрытые из списка документы, нажмите Еще - Показывать проигнорированные.
              • +
              • Для возвращения проигнорированного документа в список нажмите Еще - Не игнорировать.

              Незаполненные реквизиты

              +
              • Содержит список незаполненных реквизитов элементов справочников. Для исправления необходимо открыть элемент справочника (это можно сделать по двойному клику мыши на нем) и заполнить обязательные для заполнения поля. После чего необходимо записать элемент.
              • +
              • Для того чтобы попытаться заполнить реквизиты в выбранных элементах, нажмите Изменить выделенные.
              • +
              • Для того чтобы открыть элемент, нажмите Еще - Изменить.
              • +
              • Для удаления элемента справочника из этого списка без устранения заполнения обязательных реквизитов нажмите Игнорировать.
              • +
              • Для того, чтобы показать скрытые из списка элементы, нажмите Еще - Показывать проигнорированные.
              • +
              • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

              Конфликты

              +
              • При настроенной синхронизации данных между двумя приложениями возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обоих приложениях. Это приводит к возникновению двух различающихся версий одинаковых данных в этих приложениях. Такая ситуация называется конфликтом изменения данных.
                Конфликты изменения данных разрешаются (выбирается одна из версий) автоматически, однако можно изменить результат автоматического разрешения конфликта. Для этого выделите элемент списка.
              • +
              • В строке внизу списка выводится метод решения конфликта, который был выбран приложением.
              • +
              • Для выявления отличий между двумя версиями нажмите Показать отличия.
              • +
              • Для принятия решения, какую версию принять, можно просмотреть обе версии. Для этого нажмите Еще - Показать версию, созданную в этой информационной базеили Еще - Показать версию, полученную из другой информационной базы.
              • +
              • Для просмотра элемента списка нажмите Еще - Изменить данные.
              • +
              • После принятия решения о версии, которая должна быть сохранена, нажмите Подтвердить для сохранения результата автоматического разрешения конфликта или Пересмотреть для изменения результата рассмотрения конфликта на противоположный. После этого элемент становится неактивным, ему присваивается признак Рассмотрено и по умолчанию он скрывается из списка.
              • +
              • По умолчанию рассмотренные конфликты скрываются из списка. Для того чтобы показывать их тоже, нажмите Еще - Показывать рассмотренные конфликты.
              • +
              • Для того чтобы заново проверить рассмотренные конфликты и что-либо изменить, нажмите Еще - Снять признак "Рассмотрено".

              Непринятые по дате запрета

              +
              • В этом списке отображаются данные, которые были отклонены из-за установленного запрета на загрузку данных прошлых периодов.
              • +
              • Для сравнения отклоненных данных с текущими данными в приложении нажмите Показать отличия (при наличии данных в текущем приложении).
              • +
              • Для того чтобы открыть элемент, нажмите Еще - Изменить.
              • +
              • Для просмотра другой версии нажмите Еще - Показать непринятую версию.
              • +
              • Для получения данных, несмотря на установленный запрет загрузки данных, нажмите Принять версию.
              • +
              • Для удаления строки из списка без принятия решения нажмите Игнорировать.
              • +
              • Для того, чтобы показать скрытые из списка элементы, нажмите Еще - Показывать проигнорированные.
              • +
              • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html index d8248cb3f..1f60813de 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html @@ -1,7 +1,7 @@

              Предназначен для просмотра информации о предупреждениях и связанных с ними объектах приложения.

              При выполнении синхронизации данных возможно возникновение проблемных ситуаций, требующих вмешательства пользователя.

              -

              Приложение предоставляет возможность:

              +

              Приложение предоставляет возможность:

              • расследовать проблемы в обмене данными;
              • исправлять ошибки в исходных данных, препятствующие выгрузке;
              • @@ -22,7 +22,7 @@

                • Показать скрытые в списке - включить видимость ранее скрытых предупреждений;
                • Показать в списке - с помощью этой команды скрытые предупреждения становятся активными, с ними можно работать;
                • -
                • Журнал регистрации в указанное время - показывает весь журнал регистрации без отборов относительно поля Дата возникновения предупреждения + - 1 секунда от события, можно просмотреть и те процессы, которые происходили параллельно синхронизации. Это позволит проанализировать причины возникновения предупреждения. 
                • +
                • Журнал регистрации в указанное время - показывает весь журнал регистрации без отборов относительно поля Дата возникновения предупреждения + - 1 секунда от события, можно просмотреть и те процессы, которые происходили параллельно синхронизации. Это позволит проанализировать причины возникновения предупреждения.
                • С помощью ссылки в нижней части списка можно Перейти в журнал регистрации с отбором по текущей дате.

                Отборы

                Для удобства просмотра предупреждений предусмотрены отборы:

                @@ -32,29 +32,29 @@
              • Тип - выберите нужные типы с помощью флажков:

              Ошибки проверки перед отправкой (XDTO)

              -
              • Ошибки проверки сконвертированного объекта дополнительно дублируются в журнале регистрации и говорят о том, что при попытке отправить данные приложение обнаружило пустые сведения, которые обязательно должны быть заполнены. 
              • +
                • Ошибки проверки сконвертированного объекта дополнительно дублируются в журнале регистрации и говорят о том, что при попытке отправить данные приложение обнаружило пустые сведения, которые обязательно должны быть заполнены.
                • Можно перейти в объект приложения с помощью кнопки панели навигации списка или ссылки в предупреждении и заполнить недостающие реквизиты. Иногда объект может не отображаться по умолчанию. В этом случае следует обратиться к администратору приложения.

                Непроведенные документы

                -
                • Для решения проблемы с проведением документа откройте карточку предупреждения, перейдите в документ по ссылке. 
                • +
                  • Для решения проблемы с проведением документа откройте карточку предупреждения, перейдите в документ по ссылке.
                  • Необходимо устранить недочеты, мешающие его проведению (это может быть, например, недостаточный остаток по товару), а после этого провести. При проведении предупреждение будет удалено из списка.

                  Незаполненные реквизиты

                  Необходимо открыть объект приложения (с помощью кнопки панели навигации списка или по ссылке из карточки предупреждения), заполнить обязательные для заполнения поля, затем сохранить изменения. При записи исправлений предупреждение будет автоматически удалено.

                  Коллизии

                  -
                  • При настроенной синхронизации данных между двумя приложениями возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обоих приложениях. Это приводит к возникновению двух различающихся версий одинаковых данных в этих приложениях. Такая ситуация называется конфликтом изменения данных.
                  • +
                    • При настроенной синхронизации данных между двумя приложениями возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обоих приложениях. Это приводит к возникновению двух различающихся версий одинаковых данных в этих приложениях. Такая ситуация называется конфликтом изменения данных.
                    • Такие конфликты разрешаются автоматически (приложение выбирает одну из версий), однако можно изменить результат автоматического решения конфликта.
                    • В карточке предупреждения подробно описывается суть проблемы, выводится ссылка на объект приложения, по которому произошла коллизия. Можно перейти по ссылке и проконтролировать правильность заполнения реквизитов после автоматического разрешения конфликта.
                    • С помощью кнопок в карточке предупреждения можно:
                    • Сравнить две версии данных с помощью кнопки Показать отличия;
                    • -
                    • Для принятия решения, какую версию оставить, можно просмотреть обе версии. Для этого предусмотрены кнопки Показать версию в этом приложении или Показать версию из другого приложения.
                    • +
                    • Для принятия решения, какую версию оставить, можно просмотреть обе версии. Для этого предусмотрены кнопки Показать версию в этом приложении или Показать версию из другого приложения.
                    • После принятия решения о версии, которая должна быть сохранена, нажмите кнопку Скрыть из списка для сохранения результата автоматического разрешения конфликта или кнопку Пересмотреть результат для изменения конфликта на противоположный.

                    Непринятые по дате запрета

                    • В этих предупреждениях выводятся сведения о данных, которые были отклонены из-за установленного запрета на загрузку данных прошлых периодов.
                    • -
                    • По ссылке или с помощью кнопки панели навигации можно открыть объект приложения и посмотреть, правильно ли заполнены реквизиты в результате автоматического решения проблемы. 
                    • +
                    • По ссылке или с помощью кнопки панели навигации можно открыть объект приложения и посмотреть, правильно ли заполнены реквизиты в результате автоматического решения проблемы.
                    • Для сравнения отклоненных данных с текущими данными в приложении нажмите кнопку Показать отличия (при наличии данных в текущей приложении).
                    • -
                    • Просмотреть версии данных для сравнения можно с помощью кнопок Показать версию этого приложения или Показать непринятую версию.
                    • +
                    • Просмотреть версии данных для сравнения можно с помощью кнопок Показать версию этого приложения или Показать непринятую версию.
                    • Для получения данных несмотря на установленный запрет загрузки данных можно нажать кнопку Принять отклоненную версию.

                    Ошибки кода обработчиков при отправке (получении)

                    @@ -68,8 +68,8 @@
                      • Период;
                      • Синхронизация;
                      • -
                      • Тип.
                    • С помощью флажка Только скрытые записи, которые удовлетворяют условиям выше можно дополнить отбор и удалить те предупреждения, которые были помечены как скрытые. Внимание! 
                    • -
                      • Команда Скрыть из списка только отключает видимость предупреждений, а команда Удаление устаревших предупреждений физически удаляет предупреждения без возможности их восстановить.
                    • Поэтому рекомендуется использовать эту команду ответственно, потому что удаление большей части предупреждений происходит автоматически при решении проблемы, а удаление предупреждений, связанных с коллизиями и датой запрета загрузки, приведет к удалению версий объектов.
                    +
                  • Тип.
                • С помощью флажка Только скрытые записи, которые удовлетворяют условиям выше можно дополнить отбор и удалить те предупреждения, которые были помечены как скрытые. Внимание!
                • +
                  • Команда Скрыть из списка только отключает видимость предупреждений, а команда Удаление устаревших предупреждений физически удаляет предупреждения без возможности их восстановить.
                • Поэтому рекомендуется использовать эту команду ответственно, потому что удаление большей части предупреждений происходит автоматически при решении проблемы, а удаление предупреждений, связанных с коллизиями и датой запрета загрузки, приведет к удалению версий объектов.

                См. также:

                • diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl index 1a4daafbb..fb81a7f3b 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/ManagerModule.bsl @@ -128,7 +128,7 @@ НаборЗаписейКонфликта.Отбор.ТипПроблемы.Установить(ТипПроблемы); НаборЗаписейКонфликта.Отбор.УзелИнформационнойБазы.Установить(УзелИнформационнойБазы); НаборЗаписейКонфликта.Отбор.ОбъектМетаданных.Установить(ИдентификаторОбъектаМетаданных); - НаборЗаписейКонфликта.Отбор.ПроблемныйОбъект.Установить(ПроблемныйОбъект); + НаборЗаписейКонфликта.Отбор.ПроблемныйОбъект.Установить(Ссылка); СериализованныеЗначенияОтборов = Неопределено; Если ЗначенияОтборовНезависимогоРегистра <> Неопределено Тогда diff --git a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo index bd7f25942..2df2d3ffc 100644 --- a/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo +++ b/SSL/src/InformationRegisters/РезультатыПроверкиУчета/РезультатыПроверкиУчета.mdo @@ -192,6 +192,7 @@ ru Проблемный объект + АПК:1330 универсальный составной тип, т.к. возможна работа с любыми данными ExchangePlanRef BusinessProcessRef diff --git a/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl b/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl index 15211a87a..4784d078e 100644 --- a/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОПользователях/RecordSetModule.bsl @@ -44,20 +44,12 @@ #Область СлужебныеПроцедурыИФункции -Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(ЭтотОбъект, Замещение, СтарыеЗаписи) +Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) - НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + УстановитьОтключениеБезопасногоРежима(Истина); + УстановитьПривилегированныйРежим(Истина); - Если Замещение Тогда - Для Каждого ЭлементОтбора Из Отбор Цикл - Если ЭлементОтбора.Использование Тогда - НаборЗаписей.Отбор[ЭлементОтбора.Имя].Установить(ЭлементОтбора.Значение); - КонецЕсли; - КонецЦикла; - НаборЗаписей.Прочитать(); - КонецЕсли; - - СтарыеЗаписи = НаборЗаписей.Выгрузить(); + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(НаборЗаписей, Замещение, СписокПолей()); КонецПроцедуры @@ -66,28 +58,18 @@ УстановитьОтключениеБезопасногоРежима(Истина); УстановитьПривилегированныйРежим(Истина); - СписокПолей = "Пользователь, - |ПотребоватьСменуПароляПриВходе, - |СрокДействияНеОграничен, - |СрокДействия, - |ПросрочкаРаботыВПрограммеДоЗапрещенияВхода"; - - НовыеЗаписи = Выгрузить(); - Таблица = НовыеЗаписи.Скопировать(, СписокПолей); - Таблица.Колонки.Добавить("ВидИзмененияСтроки", Новый ОписаниеТипов("Число")); - Таблица.ЗаполнитьЗначения(1, "ВидИзмененияСтроки"); - - Для Каждого НоваяЗапись Из Таблица Цикл + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + НовыеЗаписи = НаборЗаписей.Выгрузить(Новый Массив, СписокПолей()); + Иначе + НовыеЗаписи = НаборЗаписей.Выгрузить(, СписокПолей()); + КонецЕсли; + Для Каждого НоваяЗапись Из НовыеЗаписи Цикл Если СтарыеЗаписи.Найти(НоваяЗапись.Пользователь, "Пользователь") = Неопределено Тогда СтарыеЗаписи.Добавить().Пользователь = НоваяЗапись.Пользователь; КонецЕсли; КонецЦикла; - Для Каждого СтараяЗапись Из СтарыеЗаписи Цикл - НоваяСтрока = Таблица.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, СтараяЗапись); - НоваяСтрока.ВидИзмененияСтроки = -1; - КонецЦикла; + Таблица = ОбщегоНазначения.ИзменениеЗаписейНабора(СтарыеЗаписи, НаборЗаписей, Замещение); Если НаборЗаписей.ДополнительныеСвойства.Свойство("СвойстваПользователя") И ТипЗнч(НаборЗаписей.ДополнительныеСвойства.СвойстваПользователя) = Тип("Структура") Тогда @@ -97,7 +79,6 @@ СвойстваПользователя = Новый Структура; КонецЕсли; - Таблица.Свернуть(СписокПолей, "ВидИзмененияСтроки"); СтрокиБезИзменений = Таблица.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", 0)); Если Таблица.Количество() = СтрокиБезИзменений.Количество() И Не СвойстваПользователя.Свойство("ЗаписатьИзмененияВЖурнал") Тогда @@ -252,6 +233,22 @@ КонецПроцедуры +// Для процедур ПодготовитьЗаписьИзмененийВЖурналРегистрации, ЗаписатьИзмененияВЖурналРегистрации. +Функция СписокПолей() + + МетаданныеРегистра = Метаданные(); + + Поля = Новый Массив; + Поля.Добавить(МетаданныеРегистра.Измерения.Пользователь.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.ПотребоватьСменуПароляПриВходе.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.СрокДействияНеОграничен.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.СрокДействия.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода.Имя); + + Возврат СтрСоединить(Поля, ","); + +КонецФункции + // См. ПользователиСлужебный.СериализованнаяСсылка Функция СериализованнаяСсылка(Ссылка) Возврат ПользователиСлужебный.СериализованнаяСсылка(Ссылка); diff --git a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl index e443ea883..895df08c5 100644 --- a/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СведенияОФайлах/ManagerModule.bsl @@ -110,7 +110,7 @@ ОтменитьТранзакцию(); ПроблемныхОбъектов = ПроблемныхОбъектов + 1; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при обработке сведений о файле %1 по причине: + НСтр("ru = 'Невозможно обработать сведения о файле %1 по причине: |%2'"), ПредставлениеСсылки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); diff --git a/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl b/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl index 8271bfdd2..8aed1bb60 100644 --- a/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СессииОбменаСообщениямиСистемы/ManagerModule.bsl @@ -11,6 +11,9 @@ #Область СлужебныеПроцедурыИФункции // Создает новую сессию обмена сообщениями и возвращает ее идентификатор +// +// Возвращаемое значение: +// УникальныйИдентификатор // Функция НоваяСессия() Экспорт @@ -24,6 +27,12 @@ КонецФункции // Получает статус сессии: Выполняется, Успешно, Ошибка. +// +// Параметры: +// Сессия - УникальныйИдентификатор - идентификатор сессии обмена +// +// Возвращаемое значение: +// Строка - статус сессии строкой // Функция СтатусСессии(Знач Сессия) Экспорт @@ -87,6 +96,12 @@ КонецПроцедуры // Получает данные сессии и удаляет сессию из информационной базы +// +// Параметры: +// Сессия - УникальныйИдентификатор - идентификатор сессии обмена +// +// Возвращаемое значение: +// ХранилищеЗначения - данные сессии обмена // Функция ПолучитьДанныеСессии(Знач Сессия) Экспорт @@ -122,6 +137,12 @@ КонецФункции // Получает описание ошибки сессии. +// +// Параметры: +// Сессия - УникальныйИдентификатор - идентификатор сессии обмена +// +// Возвращаемое значение: +// Строка - описание ошибки по сессии // Функция ОписаниеОшибкиСессии(Знач Сессия) Экспорт diff --git a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаЗаписи/Module.bsl index 60242b516..6df87e8ea 100644 --- a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаЗаписи/Module.bsl @@ -39,8 +39,7 @@ Если ТипЗнч(РезультатОтчета) = Тип("ТабличныйДокумент") Тогда ТабДокумент.Вывести(РезультатОтчета); Иначе - ОбщегоНазначения.СообщитьПользователю(НСтр( - "ru = 'Ошибка при чтении снимка отчета - некорректные данные.'"), , , , Отказ); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Некорректный снимок отчета.'"), , , , Отказ); КонецЕсли; Если Не Отказ Тогда diff --git a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаПросмотраОтчетов/Module.bsl b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаПросмотраОтчетов/Module.bsl index 34a88bb87..c268b42d2 100644 --- a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаПросмотраОтчетов/Module.bsl +++ b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаПросмотраОтчетов/Module.bsl @@ -144,8 +144,7 @@ МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда Если МенеджерЗаписи.ОшибкаОбновленияОтчета Тогда - ОбщегоНазначения.СообщитьПользователю(НСтр( - "ru = 'Снимок отчета был записан с ошибкой - необходимо его перезаписать'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Некорректный снимок отчета, необходимо его перезаписать.'")); Иначе РезультатОтчета = МенеджерЗаписи.РезультатОтчета.Получить(); Если ТипЗнч(РезультатОтчета) = Тип("ТабличныйДокумент") Тогда @@ -153,13 +152,12 @@ МенеджерЗаписи.ДатаПоследнегоПросмотра = ТекущаяДатаСеанса(); МенеджерЗаписи.Записать(); Иначе - ОбщегоНазначения.СообщитьПользователю(НСтр( - "ru = 'Ошибка при чтении снимка отчета - некорректные данные'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Некорректный снимок отчета.'")); КонецЕсли; КонецЕсли; ДатаАктуальности = МенеджерЗаписи.ДатаАктуальности; Иначе - ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Ошибка при чтении снимка отчета - отчет был удален'")); + ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Несуществующий снимок отчета (отчет был удален).'")); КонецЕсли; ЗафиксироватьТранзакцию(); Исключение diff --git a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Form.form index a06b5906e..7d7b804eb 100644 --- a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Form.form @@ -20,7 +20,7 @@ true - СнимкиОтчетов + СписокСнимковОтчетов None Add @@ -53,7 +53,7 @@ true - СнимкиОтчетов.Пометка + СписокСнимковОтчетов.Пометка None @@ -90,7 +90,7 @@ true - СнимкиОтчетов.НаименованиеВарианта + СписокСнимковОтчетов.НаименованиеВарианта None @@ -137,7 +137,7 @@ true - СнимкиОтчетов.ДатаАктуальности + СписокСнимковОтчетов.ДатаАктуальности None @@ -184,7 +184,7 @@ true - СнимкиОтчетов.Пользователь + СписокСнимковОтчетов.Пользователь None @@ -1087,10 +1087,10 @@ auto true - СнимкиОтчетов + СписокСнимковОтчетов <key>ru</key> - <value>Снимки отчетов</value> + <value>Список снимков отчетов</value> 1 diff --git a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Module.bsl index 2e7ea8b64..869d5a632 100644 --- a/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/СнимкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -65,7 +65,7 @@ &НаКлиенте Процедура ОтметитьВсе(Команда) - Для Каждого СтрокаОтчет Из СнимкиОтчетов Цикл + Для Каждого СтрокаОтчет Из СписокСнимковОтчетов Цикл СтрокаОтчет.Пометка = Истина; КонецЦикла; @@ -74,7 +74,7 @@ &НаКлиенте Процедура СнятьВсе(Команда) - Для Каждого СтрокаОтчет Из СнимкиОтчетов Цикл + Для Каждого СтрокаОтчет Из СписокСнимковОтчетов Цикл СтрокаОтчет.Пометка = Ложь; КонецЦикла; @@ -84,7 +84,7 @@ Процедура ОбновитьСнимкиОтчетов(Команда) ИдентификаторыСтрок = Новый Массив; - Для Каждого СтрокаОтчет Из СнимкиОтчетов Цикл + Для Каждого СтрокаОтчет Из СписокСнимковОтчетов Цикл Если СтрокаОтчет.Пометка Тогда ИдентификаторыСтрок.Добавить(СтрокаОтчет.ПолучитьИдентификатор()); КонецЕсли; @@ -120,10 +120,10 @@ ПараметрыЗаполнения.Вставить("Пользователь", Пользователь); ПараметрыЗаполнения.Вставить("ИмяСправочникаВариантыОтчетов", ИмяСправочникаВариантыОтчетов); - СнимкиОтчетовПользователя = СнимкиОтчетов.Выгрузить(, "Пользователь, Отчет, Вариант, ХешПользовательскойНастройки"); + СнимкиОтчетовПользователя = СписокСнимковОтчетов.Выгрузить(, "Пользователь, Отчет, Вариант, ХешПользовательскойНастройки"); СнимкиОтчетовПользователя.Очистить(); Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл - СтрокаОтчет = СнимкиОтчетов.НайтиПоИдентификатору(ИдентификаторСтроки); + СтрокаОтчет = СписокСнимковОтчетов.НайтиПоИдентификатору(ИдентификаторСтроки); НоваяСтрока = СнимкиОтчетовПользователя.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОтчет); КонецЦикла; @@ -174,7 +174,7 @@ Процедура УдалитьСнимкиОтчетов(Команда) ИдентификаторыСтрок = Новый Массив; - Для Каждого СтрокаОтчет Из СнимкиОтчетов Цикл + Для Каждого СтрокаОтчет Из СписокСнимковОтчетов Цикл Если СтрокаОтчет.Пометка Тогда ИдентификаторыСтрок.Добавить(СтрокаОтчет.ПолучитьИдентификатор()); КонецЕсли; @@ -189,6 +189,9 @@ &НаСервере Процедура УдалитьСнимкиОтчетовНаСервере(ИдентификаторыСтрок) + РежимУдаления = ОбщегоНазначения.РежимУдаленияНабораЗаписей(); + ПакетныйРежим = РежимУдаления <> Неопределено; + Блокировка = Новый БлокировкаДанных(); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СнимкиОтчетов"); ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); @@ -196,18 +199,27 @@ НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); - - Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл - СтрокаОтчет = СнимкиОтчетов.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ПакетныйРежим Тогда УдаляемыеЗаписи = РегистрыСведений.СнимкиОтчетов.СоздатьНаборЗаписей(); - УдаляемыеЗаписи.Отбор.Пользователь.Установить(СтрокаОтчет.Пользователь); - УдаляемыеЗаписи.Отбор.Отчет.Установить(СтрокаОтчет.Отчет); - УдаляемыеЗаписи.Отбор.Вариант.Установить(СтрокаОтчет.Вариант); - УдаляемыеЗаписи.Отбор.ХешПользовательскойНастройки.Установить(СтрокаОтчет.ХешПользовательскойНастройки); - УдаляемыеЗаписи.Записать(); - КонецЦикла; - + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + СтрокаОтчет = СписокСнимковОтчетов.НайтиПоИдентификатору(ИдентификаторСтроки); + УдаляемаяЗапись = УдаляемыеЗаписи.Добавить(); + ЗаполнитьЗначенияСвойств(УдаляемаяЗапись, СтрокаОтчет); + КонецЦикла; + УдаляемыеЗаписи.Записать(РежимУдаления); + Иначе + Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл + СтрокаОтчет = СписокСнимковОтчетов.НайтиПоИдентификатору(ИдентификаторСтроки); + + УдаляемыеЗаписи = РегистрыСведений.СнимкиОтчетов.СоздатьНаборЗаписей(); + УдаляемыеЗаписи.Отбор.Пользователь.Установить(СтрокаОтчет.Пользователь); + УдаляемыеЗаписи.Отбор.Отчет.Установить(СтрокаОтчет.Отчет); + УдаляемыеЗаписи.Отбор.Вариант.Установить(СтрокаОтчет.Вариант); + УдаляемыеЗаписи.Отбор.ХешПользовательскойНастройки.Установить(СтрокаОтчет.ХешПользовательскойНастройки); + УдаляемыеЗаписи.Записать(); + КонецЦикла; + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -260,7 +272,7 @@ СтандартнаяОбработка = Ложь; - СтрокаОтчет = СнимкиОтчетов.НайтиПоИдентификатору(ВыбраннаяСтрока); + СтрокаОтчет = СписокСнимковОтчетов.НайтиПоИдентификатору(ВыбраннаяСтрока); СтрокаОтчет.Пометка = Не СтрокаОтчет.Пометка; КонецПроцедуры @@ -303,7 +315,7 @@ &НаСервере Процедура ЗаполнитьСнимкиОтчетов() - СнимкиОтчетов.Загрузить(РегистрыСведений.СнимкиОтчетов.СнимкиОтчетовПользователя( + СписокСнимковОтчетов.Загрузить(РегистрыСведений.СнимкиОтчетов.СнимкиОтчетовПользователя( ?(ПоказатьВсеСнимкиОтчетов, Неопределено, Пользователь), ИмяСправочникаВариантыОтчетов)); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/СнимкиОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СнимкиОтчетов/ManagerModule.bsl index ba3f1fa23..b0e6ec72c 100644 --- a/SSL/src/InformationRegisters/СнимкиОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СнимкиОтчетов/ManagerModule.bsl @@ -30,9 +30,11 @@ МенеджерЗаписи.ХешПользовательскойНастройки = ОбщегоНазначения.КонтрольнаяСуммаСтрокой( НастройкиОтчета.СвойстваРезультата.КомпоновщикНастроек.ПользовательскиеНастройки); - МенеджерЗаписи.ПользовательскаяНастройка = Новый ХранилищеЗначения(НастройкиОтчета.СвойстваРезультата.КомпоновщикНастроек.ПользовательскиеНастройки); + МенеджерЗаписи.ПользовательскаяНастройка = Новый ХранилищеЗначения( + НастройкиОтчета.СвойстваРезультата.КомпоновщикНастроек.ПользовательскиеНастройки, + Новый СжатиеДанных(9)); - МенеджерЗаписи.РезультатОтчета = Новый ХранилищеЗначения(РезультатОтчета); + МенеджерЗаписи.РезультатОтчета = Новый ХранилищеЗначения(РезультатОтчета, Новый СжатиеДанных(9)); МенеджерЗаписи.ДатаАктуальности = ТекущаяДатаСеанса(); МенеджерЗаписи.ДатаПоследнегоПросмотра = ТекущаяДатаСеанса(); @@ -74,7 +76,7 @@ Запрос.Текст = "ВЫБРАТЬ | СнимкиОтчетов.Пользователь КАК Пользователь, - | СнимкиОтчетов.Отчет КАК Отчет, + | СнимкиОтчетов.Отчет КАК СсылкаОтчета, | СнимкиОтчетов.Вариант КАК Вариант, | СнимкиОтчетов.ХешПользовательскойНастройки КАК ХешПользовательскойНастройки |ПОМЕСТИТЬ СохраненныеСнимкиОтчетов @@ -91,7 +93,8 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СнимкиОтчетов.Пользователь КАК Пользователь, - | СнимкиОтчетов.Отчет КАК Отчет, + | СнимкиОтчетов.Отчет КАК СсылкаОтчета, + | &ИмяОтчета КАК ИмяОтчета, | СнимкиОтчетов.Вариант КАК Вариант, | СнимкиОтчетов.Вариант.КлючВарианта КАК КлючВарианта, | СнимкиОтчетов.ХешПользовательскойНастройки КАК ХешПользовательскойНастройки, @@ -100,7 +103,7 @@ | РегистрСведений.СнимкиОтчетов КАК СнимкиОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СохраненныеСнимкиОтчетов КАК СохраненныеСнимкиОтчетов | ПО СнимкиОтчетов.Пользователь = СохраненныеСнимкиОтчетов.Пользователь - | И СнимкиОтчетов.Отчет = СохраненныеСнимкиОтчетов.Отчет + | И СнимкиОтчетов.Отчет = СохраненныеСнимкиОтчетов.СсылкаОтчета | И СнимкиОтчетов.Вариант = СохраненныеСнимкиОтчетов.Вариант | И СнимкиОтчетов.ХешПользовательскойНастройки = СохраненныеСнимкиОтчетов.ХешПользовательскойНастройки |ГДЕ @@ -110,7 +113,8 @@ Запрос.Текст = "ВЫБРАТЬ | СнимкиОтчетов.Пользователь КАК Пользователь, - | СнимкиОтчетов.Отчет КАК Отчет, + | СнимкиОтчетов.Отчет КАК СсылкаОтчета, + | &ИмяОтчета КАК ИмяОтчета, | СнимкиОтчетов.Вариант КАК Вариант, | СнимкиОтчетов.Вариант.КлючВарианта КАК КлючВарианта, | СнимкиОтчетов.ХешПользовательскойНастройки КАК ХешПользовательскойНастройки, @@ -125,23 +129,49 @@ Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВариантыОтчетов", ИмяСправочникаВариантыОтчетов); КонецЕсли; + ИмяОтчета = "ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(СнимкиОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА ВЫРАЗИТЬ(СнимкиОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя + | КОГДА ТИПЗНАЧЕНИЯ(СнимкиОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | ТОГДА ВЫРАЗИТЬ(СнимкиОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя + | ИНАЧЕ СнимкиОтчетов.Отчет + | КОНЕЦ"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + ИмяТаблицыДополнительныеОтчеты = МодульДополнительныеОтчетыИОбработки.ИмяТаблицыДополнительныеОтчеты(); + + ИмяОтчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(СнимкиОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА ВЫРАЗИТЬ(СнимкиОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя + | КОГДА ТИПЗНАЧЕНИЯ(СнимкиОтчетов.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений) + | ТОГДА ВЫРАЗИТЬ(СнимкиОтчетов.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя + | КОГДА ТИПЗНАЧЕНИЯ(СнимкиОтчетов.Отчет) = ТИП(%1) + | ТОГДА ВЫРАЗИТЬ(СнимкиОтчетов.Отчет КАК %1).ИмяОбъекта + | ИНАЧЕ СнимкиОтчетов.Отчет + | КОНЕЦ", ИмяТаблицыДополнительныеОтчеты); + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяОтчета", ИмяОтчета); + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МенеджерЗаписи = РегистрыСведений.СнимкиОтчетов.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка, "Пользователь, Отчет, Вариант, ХешПользовательскойНастройки"); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка, "Пользователь, Вариант, ХешПользовательскойНастройки"); + МенеджерЗаписи.Отчет = Выборка.СсылкаОтчета; ПараметрыФормированияОтчета = ВариантыОтчетов.ПараметрыФормированияОтчета(); ПараметрыФормированияОтчета.СсылкаВарианта = Выборка.Вариант; - ПараметрыФормированияОтчета.СсылкаОтчета = Выборка.Отчет; + ПараметрыФормированияОтчета.СсылкаОтчета = Выборка.СсылкаОтчета; ПараметрыФормированияОтчета.КлючВарианта = Выборка.КлючВарианта; ПараметрыФормированияОтчета.ПользовательскиеНастройкиКД = Выборка.ПользовательскаяНастройка.Получить(); Если Не ПустаяСтрока(ИмяСправочникаВариантыОтчетов) Тогда - КлючВарианта = Выборка.Отчет.Имя; + КлючВарианта = Выборка.ИмяОтчета; ПараметрыФормированияОтчета.КлючВарианта = КлючВарианта; - ПараметрыФормированияОтчета.СсылкаВарианта = ВариантыОтчетов.ВариантОтчета(Выборка.Отчет, КлючВарианта); + ПараметрыФормированияОтчета.СсылкаВарианта = ВариантыОтчетов.ВариантОтчета(Выборка.СсылкаОтчета, КлючВарианта); КонецЕсли; Формирование = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормированияОтчета, Истина, Ложь); @@ -149,12 +179,12 @@ Если Не Формирование.Успех Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление снимков отчетов'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, - ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Выборка.Отчет), + ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Выборка.СсылкаОтчета), Выборка.Вариант, Формирование.ТекстОшибки); КонецЕсли; - МенеджерЗаписи.РезультатОтчета = Новый ХранилищеЗначения(Формирование.ТабличныйДокумент, Новый СжатиеДанных); + МенеджерЗаписи.РезультатОтчета = Новый ХранилищеЗначения(Формирование.ТабличныйДокумент, Новый СжатиеДанных(9)); МенеджерЗаписи.ПользовательскаяНастройка = Выборка.ПользовательскаяНастройка; МенеджерЗаписи.ДатаАктуальности = ТекущаяДатаСеанса(); МенеджерЗаписи.ДатаПоследнегоПросмотра = ТекущаяДатаСеанса(); @@ -193,7 +223,7 @@ Запрос.Текст = "ВЫБРАТЬ | СнимкиОтчетов.Пользователь КАК Пользователь, - | СнимкиОтчетов.Отчет КАК Отчет, + | СнимкиОтчетов.Отчет КАК СсылкаОтчета, | СнимкиОтчетов.Вариант КАК Вариант, | СнимкиОтчетов.Вариант.Наименование КАК НаименованиеВарианта, | СнимкиОтчетов.ХешПользовательскойНастройки КАК ХешПользовательскойНастройки, @@ -215,8 +245,11 @@ Если Не ПустаяСтрока(ИмяСправочникаВариантыОтчетов) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВариантыОтчетов", ИмяСправочникаВариантыОтчетов); КонецЕсли; + + СнимкиОтчетовПользователя = Запрос.Выполнить().Выгрузить(); + СнимкиОтчетовПользователя.Колонки.СсылкаОтчета.Имя = "Отчет"; - Возврат Запрос.Выполнить().Выгрузить(); + Возврат СнимкиОтчетовПользователя; КонецФункции diff --git a/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl b/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl index 6e1e8e890..a17bb4a06 100644 --- a/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СогласияНаОбработкуПерсональныхДанных/RecordSetModule.bsl @@ -8,6 +8,12 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + +Перем СтарыеЗаписи; // Заполняется ПередЗаписью для использования ПриЗаписи. + +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -16,9 +22,9 @@ Возврат; КонецЕсли; - СписокСубъектов = Новый Массив; - ДополнитьСписокСубъектамиПрежнегоНабора(СписокСубъектов); - ДополнительныеСвойства.Вставить("СписокСубъектов", СписокСубъектов); + Если ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(ЭтотОбъект, Замещение, "Субъект"); + КонецЕсли; КонецПроцедуры @@ -28,52 +34,27 @@ Возврат; КонецЕсли; - СписокСубъектов = ДополнительныеСвойства["СписокСубъектов"]; - ДополнитьСписокСубъектамиТекущегоНабора(СписокСубъектов); + Если Не ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда + Возврат; + КонецЕсли; + + ДатаСобытия = ТекущаяДатаСеанса(); + + Если Не ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) И Количество() > 0 Тогда + ДатаСобытия = ЭтотОбъект[0].Период; + Для Каждого Запись Из ЭтотОбъект Цикл + СтарыеЗаписи.Добавить().Субъект = Запись.Субъект; + КонецЦикла; + СтарыеЗаписи.Свернуть("Субъект"); + КонецЕсли; + СписокСубъектов = СтарыеЗаписи.ВыгрузитьКолонку("Субъект"); - ДатаСобытия = ?(Количество() > 0, ЭтотОбъект[0].Период, ТекущаяДатаСеанса()); ЗащитаПерсональныхДанных.ДобавитьСубъектыДляРасчетаСроковХранения(СписокСубъектов, ДатаСобытия); КонецПроцедуры #КонецОбласти -#Область СлужебныеПроцедурыИФункции - -Процедура ДополнитьСписокСубъектамиПрежнегоНабора(СписокСубъектов) - - Если Не ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Регистратор", Отбор.Регистратор.Значение); - Запрос.Текст = - "ВЫБРАТЬ - | Согласия.Субъект КАК Субъект - |ИЗ - | РегистрСведений.СогласияНаОбработкуПерсональныхДанных КАК Согласия - |ГДЕ - | Согласия.Регистратор = &Регистратор"; - - Субъекты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Субъект"); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокСубъектов, Субъекты); - -КонецПроцедуры - -Процедура ДополнитьСписокСубъектамиТекущегоНабора(СписокСубъектов) - - Если Не ЗащитаПерсональныхДанных.ИспользоватьУничтожениеПерсональныхДанныхСубъектов() Тогда - Возврат; - КонецЕсли; - - Субъекты = ВыгрузитьКолонку("Субъект"); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СписокСубъектов, Субъекты); - -КонецПроцедуры - -#КонецОбласти - #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl index d3f8aed23..8cf0108a5 100644 --- a/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоставыГруппПользователей/RecordSetModule.bsl @@ -48,34 +48,27 @@ #Область СлужебныеПроцедурыИФункции -Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(Объект, Замещение, СтарыеЗаписи) +Процедура ПодготовитьЗаписьИзмененийВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) - Если Объект.ДополнительныеСвойства.Свойство("ЭтоСтандартноеОбновлениеРегистра") Тогда + Если НаборЗаписей.ДополнительныеСвойства.Свойство("ЭтоСтандартноеОбновлениеРегистра") Тогда Возврат; КонецЕсли; - НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); - - Если Замещение Тогда - Для Каждого ЭлементОтбора Из Отбор Цикл - Если ЭлементОтбора.Использование Тогда - НаборЗаписей.Отбор[ЭлементОтбора.Имя].Установить(ЭлементОтбора.Значение); - КонецЕсли; - КонецЦикла; - НаборЗаписей.Прочитать(); - КонецЕсли; - - СтарыеЗаписи = НаборЗаписей.Выгрузить(); + СтарыеЗаписи = ОбщегоНазначения.ЗаписиНабораИзБазыДанных(НаборЗаписей, Замещение, СписокПолей()); КонецПроцедуры -Процедура ЗаписатьИзмененияВЖурналРегистрации(Объект, Замещение, СтарыеЗаписи) +Процедура ЗаписатьИзмененияВЖурналРегистрации(НаборЗаписей, Замещение, СтарыеЗаписи) - Если Объект.ДополнительныеСвойства.Свойство("ЭтоСтандартноеОбновлениеРегистра") Тогда + Если НаборЗаписей.ДополнительныеСвойства.Свойство("ЭтоСтандартноеОбновлениеРегистра") Тогда Возврат; КонецЕсли; - Таблица = Выгрузить(); + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Таблица = НаборЗаписей.Выгрузить(Новый Массив, СписокПолей()); + Иначе + Таблица = НаборЗаписей.Выгрузить(, СписокПолей()); + КонецЕсли; Таблица.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Строка")); Таблица.ЗаполнитьЗначения("Добавлено", "ВидИзменения"); ОтборСтрок = Новый Структура("ГруппаПользователей, Пользователь"); @@ -113,6 +106,20 @@ КонецПроцедуры +// Для процедур ПодготовитьЗаписьИзмененийВЖурналРегистрации, ЗаписатьИзмененияВЖурналРегистрации. +Функция СписокПолей() + + МетаданныеРегистра = Метаданные(); + + Поля = Новый Массив; + Поля.Добавить(МетаданныеРегистра.Измерения.ГруппаПользователей.Имя); + Поля.Добавить(МетаданныеРегистра.Измерения.Пользователь.Имя); + Поля.Добавить(МетаданныеРегистра.Ресурсы.Используется.Имя); + + Возврат СтрСоединить(Поля, ","); + +КонецФункции + #КонецОбласти #Иначе diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form index 064162514..35e079e54 100644 --- a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Form.form @@ -39,7 +39,7 @@ Center - StdPicture.DialogInformation + StdPicture.Information AutoSize AsFileRef @@ -521,6 +521,7 @@ КомплектПечатныхФорм + 12 true false @@ -699,7 +700,7 @@ UsualGroup - HorizontalIfPossible + AlwaysHorizontal Single true true @@ -849,132 +850,25 @@ true - - КомплектПечатныхФормГруппаСостояние - 166 - - ОригиналПолученКартинка - 138 - - <key>ru</key> - <value>Оригинал получен картинка</value> - - 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 - - CommonPicture.СостояниеОригиналаПервичногоДокументаОригиналПолучен - - Left - true - - - ChoiceProcessing - КомплектПечатныхФормСостояниеОбработкаВыбора - - true - true - true - true - true - true - Normal - 5 - - + + ОригиналПолученКартинка + 138 + + <key>ru</key> + <value>Оригинал получен картинка</value> + true true true - - <key>ru</key> - <value>Состояние</value> - + + КомплектПечатныхФорм.ОригиналПолученКартинка + + None - КомплектПечатныхФормГруппаСостояниеРасширеннаяПодсказка - 167 + ОригиналПолученКартинкаРасширеннаяПодсказка + 140 Label true true @@ -982,11 +876,86 @@ Left - ColumnGroup - - InCell - auto - true + + ОригиналПолученКартинкаКонтекстноеМеню + 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 @@ -1371,7 +1340,8 @@ OnCreateAtServer ПриСозданииНаСервере - 55 + 62 + 25 LockOwner true true diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Help/ru.html b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Help/ru.html index 00a8063c6..078696899 100644 --- a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Help/ru.html +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Help/ru.html @@ -1,6 +1,6 @@ Предназначена для контроля и изменения состояний печатных форм.
                  -
                  Открывается по команде Уточнить по печатным формам выпадающего меню выбора состояний в списках документов. Выпадающее меню открывается по ссылке в колонке Состояние оригинала в списках документов. 
                  +
                  Открывается по команде Уточнить по печатным формам выпадающего меню выбора состояний в списках документов. Выпадающее меню открывается по ссылке в колонке Состояние оригинала в списках документов.
                  В некоторых случаях требуется отслеживать состояния только по определенным печатным формам документа. Например, у документа Отпуск есть 4 печатных формы, но только в одной требуется подпись сотрудника и, соответственно, только по ней требуется отслеживать состояние оригинала. Наименования нужных форм указываются разработчиком.

                  При работе в списках документов и распечатке печатных форм для отправки клиентам (поставщикам) предусмотрена возможность автоматического изменения состояния оригинала первичного документа. При получении оригиналов документов с подписью и печатями требуется изменить состояние оригинала. Существует несколько способов его изменения. У документа может быть несколько печатных форм, в этом случае общее состояние документа будет зависеть от состояний каждой печатной формы. В списке печатных форм можно посмотреть, все ли они были напечатаны, проконтролировать или изменить состояние каждой печатной формы.
                  В окне предусмотрены колонки:
                  @@ -10,21 +10,21 @@
                • Дата последнего изменения;
                • Автор изменения.

                Состояние оригинала

                -
                В колонке Состояние оригинала выводится состояние печатной формы.
                +
                В колонке Состояние оригинала выводится состояние печатной формы.
                С помощью кнопки Состояние оригинала можно открыть выпадающее меню, в котором можно:
                • Выбрать новое состояние для выделенной печатной формы;
                • С помощью команды Настроить перейти к списку состояний оригиналов первичных документов, в котором можно при необходимости ввести новое состояние.
                • Если изменилось состояние первичного документа, в колонке Дата последнего изменения устанавливается значение <только что>, в колонке Автор изменения - текущий пользователь.

                Установка состояния Оригинал получен

                -
                • С помощью кнопки  можно быстро установить для выделенных печатных форм состояние Оригинал получен.
                • -
                • Для отдельной печатной формы можно также установить состояние Оригинал получен, нажав мышью по значку в колонке .
                • +
                  • С помощью кнопки можно быстро установить для выделенных печатных форм состояние Оригинал получен.
                  • +
                  • Для отдельной печатной формы можно также установить состояние Оригинал получен, нажав мышью по значку в колонке .

                  Добавление своей печатной формы

                  -
                  • С помощью ссылки в панели навигации можно Добавить свою печатную форму (актуально для входящих документов). 
                  • -
                  • Напишите наименование, нажмите кнопку Добавить. Наименование печатной формы запоминается и будет храниться в приложении. При этом она обозначается значком со знаком вопроса, показывающим, что ее нет в списке печатных форм документов приложения.

                  Показать печатные формы

                  +
                  • С помощью ссылки в панели навигации можно Добавить свою печатную форму (актуально для входящих документов).
                  • +
                  • Напишите наименование, нажмите кнопку Добавить. Наименование печатной формы запоминается и будет храниться в приложении. При этом она обозначается значком со знаком вопроса, показывающим, что ее нет в списке печатных форм документов приложения.

                  Показать печатные формы

                  • С помощью кнопки можно изменить количество печатных форм в списке, показать не только печатные формы этого документа (отслеживаемые), но и все существующие.

                  Открыть документ

                  diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl index dcede4acc..2d93ed807 100644 --- a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Forms/ИзменениеСостоянийОригиналовПервичныхДокументов/Module.bsl @@ -34,7 +34,12 @@ ВосстановитьНастройки(ВосстанавливатьФильтр); УстановитьСсылкуНаОригинал(); - УстановитьФильтрПечатныхФорм(); + УстановитьФильтрПечатныхФорм(); + + НастройкиПодсистемы = УчетОригиналовПервичныхДокументов.НастройкиПодсистемы(); + Если Не НастройкиПодсистемы.ОтображатьПодсказкуВФормеИзмененияСостояний Тогда + Элементы.ГруппаДекорацияПредупреждение.Видимость = Ложь; + КонецЕсли; ЭлементОформления = УсловноеОформление.Элементы.Добавить(); @@ -43,7 +48,7 @@ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; ЭлементОтбора.Использование = Истина; - ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.СеребристоСерый); + ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); ЭлементОформления.Использование = Истина; ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); @@ -56,10 +61,12 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов - Если ИмяСобытия = "ДобавлениеУдалениеСостоянияОригиналаПервичногоДокумента" Тогда + Если ИмяСобытия = "Запись_СостоянияОригиналовПервичныхДокументов" Тогда Подключаемый_ОбновитьКомандыСостоянияОригинала(); ОбновитьОтображениеДанных(); - ИначеЕсли ИмяСобытия = "ИзменениеСостоянияОригиналаПервичногоДокумента" + ИначеЕсли (ИмяСобытия = "Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов" + И ((Источник <> Неопределено И ТипЗнч(Источник) = Тип("Массив") И Источник.Найти(Запись.Владелец) <> Неопределено) + Или Источник = Запись.Владелец)) Или ИмяСобытия = "ТабличныеДокументыНапечатаны" Тогда КомплектПечатныхФорм.Очистить(); @@ -92,7 +99,7 @@ Процедура КомплектПечатныхФормВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если Поле.Имя = "ОригиналПолученКартинка" Тогда - УстановитьСостояниеОригинала("УстановитьОригиналПолучен"); + УстановитьСостояниеОригинала("УстановкаСостоянияОригиналПолучен"); КонецЕсли; КонецПроцедуры @@ -165,9 +172,10 @@ Если КомплектПечатныхФорм.Количество()<> 0 Тогда ЗаписатьСостоянияОригиналовПервичныхДокументов(); - Оповестить("ИзменениеСостоянияОригиналаПервичногоДокумента"); + Оповестить("Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов",, Запись.Владелец); Закрыть(); - УчетОригиналовПервичныхДокументовКлиент.ОповеститьПользователяОбУстановкеСостояний(1, Запись.Владелец); + УчетОригиналовПервичныхДокументовКлиент.ОповеститьПользователяОбУстановкеСостояний(1, Запись.Владелец, + Запись.Состояние); ИначеЕсли КомплектПечатныхФорм.Количество() = 0 Тогда Закрыть(); КонецЕсли; @@ -196,21 +204,19 @@ КонецПроцедуры &НаКлиенте -Процедура УстановитьСостояниеОригинала(Команда) - +Процедура УстановитьСостояниеОригинала(ИмяКоманды) + ОригиналПолучен = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен"); - НайденноеСостояние = Элементы.Найти(Команда); - Если НайденноеСостояние <> Неопределено Тогда - ИмяСостояния = НайденноеСостояние.Заголовок; - ИначеЕсли Команда = "УстановитьОригиналПолучен" Тогда - ИмяСостояния = ОригиналПолучен; - Иначе - Возврат; + + Если ИмяКоманды = "УстановкаСостоянияОригиналПолучен" Тогда + СостояниеОригинала = ОригиналПолучен; + Иначе + СостояниеОригинала = УчетОригиналовПервичныхДокументовВызовСервера.СостояниеОригиналаПервичногоДокументаПоИмениКоманды(ИмяКоманды); КонецЕсли; Для Каждого СтрокаСписка Из Элементы.КомплектПечатныхФорм.ВыделенныеСтроки Цикл ДанныеСтроки = Элементы.КомплектПечатныхФорм.ДанныеСтроки(СтрокаСписка); - ДанныеСтроки.Состояние = НайтиСостояниеВСправочнике(ИмяСостояния); + ДанныеСтроки.Состояние = СостояниеОригинала; ДанныеСтроки.ОригиналПолученКартинка = ?(ДанныеСтроки.Состояние = ОригиналПолучен, 1, 0); ДанныеСтроки.АвторИзменения = ПользователиКлиент.ТекущийПользователь(); ДанныеСтроки.ДатаПоследнегоИзменения = НСтр("ru = '<только что>'"); @@ -296,12 +302,9 @@ Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда Возврат; КонецЕсли; + МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); - - // Для отключения проверки конфигурации. - СвойстваЗаписи = Новый Структура("Ссылка", Запись.Владелец); - - ОбъектМетаданных = СвойстваЗаписи.Ссылка.Метаданные(); + ОбъектМетаданных = Запись.Владелец.Метаданные(); СписокОбъектов = Новый Массив; СписокОбъектов.Добавить(ОбъектМетаданных); @@ -319,35 +322,22 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - ЗапросТаблицаКоманд = МодульДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам( - Перечисления["ВидыДополнительныхОтчетовИОбработок"].ПечатнаяФорма, ПолноеИмяОМД, Истина); - ТаблицаКоманд = ЗапросТаблицаКоманд.Выполнить().Выгрузить(); + ТаблицаКоманд = МодульДополнительныеОтчетыИОбработки.ДополнительныеКомандыПечати(ПолноеИмяОМД, Истина); КонецЕсли; - МодульФизическиеЛицаКлиентСервер = Неопределено; ТабличнаяЧасть = УчетОригиналовПервичныхДокументов.ТабличнаяЧастьССотрудниками(Запись.Владелец); Если ТабличнаяЧасть <> "" Тогда - - // Локализация - МодульФизическиеЛицаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ФизическиеЛицаКлиентСервер"); - // Конец Локализация - МассивСотрудников = Запись.Владелец[ТабличнаяЧасть].ВыгрузитьКолонку("Сотрудник"); - НаименованияСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивСотрудников, "Наименование"); Для Каждого Сотрудник Из МассивСотрудников Цикл НаименованиеСотрудника = НаименованияСотрудников.Получить(Сотрудник); - Если МодульФизическиеЛицаКлиентСервер <> Неопределено Тогда - ФИО = МодульФизическиеЛицаКлиентСервер.ФамилияИнициалы(НаименованиеСотрудника); - Иначе - ФИО = НаименованиеСотрудника; - КонецЕсли; + ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(НаименованиеСотрудника); Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл - Значения = Новый Структура("Представление, ФИО", ТекСтрока.Представление, ФИО); НоваяСтрока = КомплектПечатныхФорм.Добавить(); НоваяСтрока.ИмяМакета = ТекСтрока.Значение; - НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru='[Представление] [ФИО]'"), Значения); + НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2'"), ТекСтрока.Представление, ФИО); НоваяСтрока.Картинка = 1; НоваяСтрока.ОригиналПолученКартинка = 0; НоваяСтрока.Сотрудник = Сотрудник; @@ -356,17 +346,13 @@ Если ТаблицаКоманд.Количество() > 0 Тогда Для Каждого Сотрудник Из МассивСотрудников Цикл НаименованиеСотрудника = НаименованияСотрудников.Получить(Сотрудник); - Если МодульФизическиеЛицаКлиентСервер <> Неопределено Тогда - ФИО = МодульФизическиеЛицаКлиентСервер.ФамилияИнициалы(НаименованиеСотрудника); - Иначе - ФИО = НаименованиеСотрудника; - КонецЕсли; + ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(НаименованиеСотрудника); Для Каждого ТекСтрока Из ТаблицаКоманд Цикл - Значения = Новый Структура("Представление, ФИО", ТекСтрока.Представление, ФИО); Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда НоваяСтрока = КомплектПечатныхФорм.Добавить(); - НоваяСтрока.ИмяМакета = ТекСтрока.Значение; - НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтр("ru='[Представление] [ФИО]'"), Значения); + НоваяСтрока.ИмяМакета = ТекСтрока.Идентификатор; + НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2'"), ТекСтрока.Представление, ФИО); НоваяСтрока.Картинка = 1; НоваяСтрока.ОригиналПолученКартинка = 0; НоваяСтрока.Сотрудник = Сотрудник; @@ -389,8 +375,7 @@ Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда НоваяСтрока = КомплектПечатныхФорм.Добавить(); - Идентификатор = ТекСтрока.Значение; - НоваяСтрока.ИмяМакета = Идентификатор; + НоваяСтрока.ИмяМакета = ТекСтрока.Идентификатор; НоваяСтрока.Представление = ТекСтрока.Представление; НоваяСтрока.Картинка = 1; НоваяСтрока.ОригиналПолученКартинка = 0; @@ -400,12 +385,14 @@ КонецЕсли; КонецЕсли; - НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление", НСтр("ru='Комплект документов на принтер'"))); + НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки( + Новый Структура("Представление", НСтр("ru='Комплект документов на принтер'"))); Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл КомплектПечатныхФорм.Удалить(НеНужнаяСтрока); КонецЦикла; - НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("Представление", НСтр("ru='Комплект документов с настройкой...'"))); + НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки( + Новый Структура("Представление", НСтр("ru='Комплект документов с настройкой...'"))); Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл КомплектПечатныхФорм.Удалить(НеНужнаяСтрока); КонецЦикла; @@ -572,6 +559,7 @@ ОчиститьНеОтслеживаемые(); ЗаполнитьСписокПечатныхФормПоСсылке(); УдалитьДубликатыФорм(); + КонецПроцедуры &НаСервере @@ -604,24 +592,18 @@ КонецЕсли; Если ЗначениеЗаполнено(НомерНаПечать) И ЗначениеЗаполнено(СведенияОДокументе.Дата) Тогда - СсылкаНаДокумент = СтрШаблон(НСтр("ru='%1 № %2 от %3'"), ТипДокумента, НомерНаПечать, - Формат(СведенияОДокументе.Дата, НСтр("ru='ДЛФ=DD'"))); + СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 № %2 от %3'"), + ТипДокумента, НомерНаПечать, Формат(СведенияОДокументе.Дата, НСтр("ru='ДЛФ=DD'"))); ИначеЕсли ЗначениеЗаполнено(НомерНаПечать) И Не ЗначениеЗаполнено(СведенияОДокументе.Дата) Тогда - СсылкаНаДокумент = СтрШаблон(НСтр("ru='%1 № %2'"), ТипДокумента, НомерНаПечать); + СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 № %2'"), ТипДокумента, + НомерНаПечать); Иначе - СсылкаНаДокумент = СтрШаблон(НСтр("ru='%1 от %2'"), ТипДокумента, Формат(СведенияОДокументе.Дата, НСтр("ru='ДЛФ=DD'"))); + СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 от %2'"), + ТипДокумента, Формат(СведенияОДокументе.Дата, НСтр("ru='ДЛФ=DD'"))); КонецЕсли; КонецПроцедуры -&НаСервере -Функция НайтиСостояниеВСправочнике(Знач ИмяСостояния) - - Возврат ?(ТипЗнч(ИмяСостояния) = Тип("Строка"), - Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(ИмяСостояния), ИмяСостояния); - -КонецФункции - &НаКлиенте Процедура УстановитьОбщееСостояние() @@ -670,25 +652,25 @@ Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда - Если ИмяТабличнойЧасти = "" Тогда + Если ИмяТабличнойЧасти <> "" Тогда НаборЗаписей.Отбор.Сотрудник.Установить(ПечатнаяФорма.Сотрудник); КонецЕсли; НаборЗаписей.Отбор.ПервичныйДокумент.Установить(ПечатнаяФорма.ИмяМакета); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда Если НаборЗаписей[0].Состояние <> ПечатнаяФорма.Состояние Тогда - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Владелец, + УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Владелец, ПечатнаяФорма.ИмяМакета, ПечатнаяФорма.Представление, ПечатнаяФорма.Состояние, ПечатнаяФорма.Извне, ПечатнаяФорма.Сотрудник); КонецЕсли; Иначе - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Владелец, + УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Владелец, ПечатнаяФорма.ИмяМакета, ПечатнаяФорма.Представление, ПечатнаяФорма.Состояние, ПечатнаяФорма.Извне, ПечатнаяФорма.Сотрудник); КонецЕсли; КонецЕсли; КонецЦикла; - РегистрыСведений.СостоянияОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Владелец, + УчетОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Владелец, Запись.Состояние); ЗафиксироватьТранзакцию(); diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Help/ru.html b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Help/ru.html index ca17d5b5d..8d4c54b8f 100644 --- a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Help/ru.html +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/Help/ru.html @@ -1,7 +1,7 @@ Предназначен для контроля и изменения состояний оригиналов первичных документов. -
                  В приложении будет фиксироваться наличие подписанных оригиналов как исходящих, так и входящих первичных документов.
                  -
                  Каждый из документов в приложении может иметь несколько печатных форм. 
                  -
                  Признак наличия оригинала документа будет храниться как для каждой печатной формы, так и одним общим состоянием для документа. При этом общее состояние для документа складывается из суммы состояний печатных форм и устанавливается приложением автоматически.
                  +
                  В приложении будет фиксироваться наличие подписанных оригиналов как исходящих, так и входящих первичных документов.
                  +
                  Каждый из документов в приложении может иметь несколько печатных форм.
                  +
                  Признак наличия оригинала документа будет храниться как для каждой печатной формы, так и одним общим состоянием для документа. При этом общее состояние для документа складывается из суммы состояний печатных форм и устанавливается приложением автоматически.

                  Просмотр всех документов

                  • по которым получены и не получены подписанные оригиналы документов;
                  • @@ -9,19 +9,19 @@
                  • предусмотрены различные отборы для поиска документов;
                  • имеется возможность изменения состояния первичного документа.

                  Особенности работы с табличными документами

                  -
                  • В приложении может быть предусмотрена поддержка учета оригиналов табличных документов (для этого необходимы настройки разработчика), например Отпуск сотрудников, Отпуск без сохранения списком. В таких документах требуется подпись нескольких сотрудников, поэтому каждой подписи соответствует отдельная печатная форма. 
                  • +
                    • В приложении может быть предусмотрена поддержка учета оригиналов табличных документов (для этого необходимы настройки разработчика), например Отпуск сотрудников, Отпуск без сохранения списком. В таких документах требуется подпись нескольких сотрудников, поэтому каждой подписи соответствует отдельная печатная форма.
                    • Такие документы в окне Изменение состояний оригинала документа выводятся в Такие первичные документы выводятся в виде "представление первичного документа + ФИО сотрудника".

                  Состояния оригиналов первичных документов

                  -
                  При работе в списках документов и распечатке печатных форм для отправки клиентам (поставщикам) предусмотрена возможность автоматического изменения состояния оригинала первичного документа. 
                  +
                  При работе в списках документов и распечатке печатных форм для отправки клиентам (поставщикам) предусмотрена возможность автоматического изменения состояния оригинала первичного документа.
                  • При создании документа автоматически устанавливается состояние оригинала Состояние оригинала неизвестно.
                  • После нажатия кнопки Печать в печатной форме документа состояние оригинала автоматически меняется на Форма напечатана - для каждой печатной формы.
                  • -
                  • При получении подписанного оригинала первичного документа для печатной формы нужно установить состояние Оригинал получен. 

                  Способы изменения состояния документа

                  Для каждого документа:
                  • С помощью ссылки в колонке Состояние оригинала или в нижней части документа уточнить состояние оригинала, открыть выпадающее меню, по команде Уточнить состояние оригинала перейти к контролю печатных форм.
                  • -
                  • Если в приложении используется подключаемое оборудование, можно отсканировать штрих-код полученного бумажного документа с подписями и печатью и оригинал документа сразу примет конечное состояние Оригинал получен.
                  • -
                  • С помощью нажатия на пиктограмму в колонке  Оригинал получен, в этом случае общее состояние документа примет конечное значение Оригинал получен.
                  Для множественного изменения состояний разных документов отобрать их, выделить, затем изменить состояние:
                  +
                • При получении подписанного оригинала первичного документа для печатной формы нужно установить состояние Оригинал получен.

                Способы изменения состояния документа

                Для каждого документа:
                • С помощью ссылки в колонке Состояние оригинала или в нижней части документа уточнить состояние оригинала, открыть выпадающее меню, по команде Уточнить состояние оригинала перейти к контролю печатных форм.
                • +
                • Если в приложении используется подключаемое оборудование, можно отсканировать штрих-код полученного бумажного документа с подписями и печатью и оригинал документа сразу примет конечное состояние Оригинал получен.
                • +
                • С помощью нажатия на пиктограмму в колонке Оригинал получен, в этом случае общее состояние документа примет конечное значение Оригинал получен.
                Для множественного изменения состояний разных документов отобрать их, выделить, затем изменить состояние:
                -
                • С помощью кнопки  Состояние оригинала можно установить любое состояние оригинала, выбрав его из списка;
                • -
                • С помощью кнопки  Оригинал получен можно быстро установить конечное состояние Оригинал получен.

                См. также:

                +
                • С помощью кнопки Состояние оригинала можно установить любое состояние оригинала, выбрав его из списка;
                • +
                • С помощью кнопки Оригинал получен можно быстро установить конечное состояние Оригинал получен.

                См. также:


                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl index 97d0c4cc5..bebd6ab9b 100644 --- a/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОригиналовПервичныхДокументов/ManagerModule.bsl @@ -10,6 +10,9 @@ #Область ПрограммныйИнтерфейс +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать УчетОригиналовПервичныхДокументов.ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы. // Делает записи состояний оригиналов печатных форм регистр, после печати формы. // // Параметры: @@ -19,6 +22,9 @@ // Процедура ЗаписатьСостоянияОригиналовДокументаПослеПечатиФормы(ОбъектыПечати, ПечатныеФормы, Записано = Ложь) Экспорт + ИнтеграцияПодсистемБСП.ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, ПечатныеФормы); + УчетОригиналовПервичныхДокументовПереопределяемый.ПередЗаписьюСостоянийОригиналовПослеПечати(ОбъектыПечати, ПечатныеФормы); + Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана"); Если Не ЗначениеЗаполнено(ОбъектыПечати) Тогда Возврат; @@ -43,17 +49,17 @@ Если ТЧ <> "" Тогда Для Каждого Сотрудник Из Документ.Значение[ТЧ] Цикл Для Каждого Форма Из ПечатныеФормы Цикл - ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, + УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, Форма.Значение, Форма.Представление, Состояние, Ложь, Сотрудник.Сотрудник); КонецЦикла; КонецЦикла; Иначе Для Каждого Форма Из ПечатныеФормы Цикл - ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, Форма.Значение, - Форма.Представление, Состояние, Ложь); + УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Документ.Значение, + Форма.Значение, Форма.Представление, Состояние, Ложь); КонецЦикла; КонецЕсли; - ЗаписатьОбщееСостояниеОригиналаДокумента(Документ.Значение, Состояние); + УчетОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Документ.Значение, Состояние); Записано = Истина; КонецЕсли; КонецЦикла; @@ -68,14 +74,14 @@ КонецПроцедуры +// Устарела. Следует использовать УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам. // Делает запись состояния оригинала печатной формы в регистр, после печати формы. // // Параметры: // Документ - ДокументСсылка - ссылка на документ. // ПечатнаяФорма - Строка - имя макета печатной формы. // Представление - Строка - наименование печатной формы. -// Состояние - Строка - наименование состояния оригинала печатной формы -// - СправочникСсылка - ссылка на состояние оригинала печатной формы. +// Состояние - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на состояние оригинала печатной формы. // Извне - Булево - признак, показывающий принадлежит ли форма системе 1С. // Сотрудник - СправочникСсылка - ссылка на сотрудника, если в оригинале документа есть сведения о сотрудниках. // @@ -88,15 +94,7 @@ ЗаписьСостоянияОригинала.Владелец = Документ; ЗаписьСостоянияОригинала.ПервичныйДокумент = ПечатнаяФорма; Если ЗначениеЗаполнено(Сотрудник) Тогда - ФИО = Сотрудник.Наименование; - // Локализация - МодульФизическиеЛицаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ФизическиеЛицаКлиентСервер"); - Если МодульФизическиеЛицаКлиентСервер <> Неопределено Тогда - ФИО = МодульФизическиеЛицаКлиентСервер.ФамилияИнициалы(Сотрудник.Наименование); - Иначе - ФИО = Сотрудник.Наименование; - КонецЕсли; - // Конец Локализация + ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(Сотрудник.Наименование); Значения = Новый Структура("Представление, ФИО", Представление, ФИО); ПредставлениеСотрудник = СтрНайти(Представление, ФИО); Если ПредставлениеСотрудник = 0 Тогда @@ -107,8 +105,12 @@ КонецЕсли; Иначе ЗаписьСостоянияОригинала.ПервичныйДокументПредставление = Представление; + КонецЕсли; + Если ТипЗнч(Состояние) = Тип("Строка") Тогда + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + Иначе + ЗаписьСостоянияОригинала.Состояние = Состояние; КонецЕсли; - ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); ЗаписьСостоянияОригинала.ОбщееСостояние = Ложь; ЗаписьСостоянияОригинала.ФормаИзвне = Извне; @@ -118,13 +120,20 @@ КонецПроцедуры +// Устарела. Следует использовать УчетОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента. // Делает запись общего состояния оригинала документа в регистр. // // Параметры: // Документ - ДокументСсылка - ссылка на документ. -// Состояние - Строка - наименование состояния оригинала. +// Состояние - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - ссылка на состояние оригинала. // Процедура ЗаписатьОбщееСостояниеОригиналаДокумента(Документ, Состояние) Экспорт + + Если ТипЗнч(Состояние) = Тип("Строка") Тогда + СостояниеОригинала = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + Иначе + СостояниеОригинала = Состояние; + КонецЕсли; УстановитьПривилегированныйРежим(Истина); @@ -133,7 +142,7 @@ ЗаписьСостоянияОригинала.ПервичныйДокумент = ""; ПроверкаЗаписьСостоянияОригинала = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей(); - ПроверкаЗаписьСостоянияОригинала.Отбор.Владелец.Установить(Документ.Ссылка); + ПроверкаЗаписьСостоянияОригинала.Отбор.Владелец.Установить(Документ); ПроверкаЗаписьСостоянияОригинала.Отбор.ОбщееСостояние.Установить(Ложь); ПроверкаЗаписьСостоянияОригинала.Прочитать(); Если ПроверкаЗаписьСостоянияОригинала.Количество() Тогда @@ -144,23 +153,27 @@ ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); КонецЕсли; КонецЦикла; - Если УчетОригиналовПервичныхДокументов.СостояниеПечатныхФормОдинаково(Документ, Состояние) Тогда - ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); + Если УчетОригиналовПервичныхДокументов.СостояниеПечатныхФормОдинаково(Документ, СостояниеОригинала) Тогда + ЗаписьСостоянияОригинала.Состояние = СостояниеОригинала; Иначе - ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе; + ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе; КонецЕсли; Иначе - ЗаписьСостоянияОригинала.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.НайтиПоНаименованию(Состояние); - ЗаписьСостоянияОригинала.АвторИзменения = Пользователи.ТекущийПользователь(); + ЗаписьСостоянияОригинала.Состояние = СостояниеОригинала; КонецЕсли; ЗаписьСостоянияОригинала.ОбщееСостояние = Истина; ЗаписьСостоянияОригинала.ДатаПоследнегоИзменения = ТекущаяДатаСеанса(); ЗаписьСостоянияОригинала.Записать(); - + + ИнтеграцияПодсистемБСП.ПриИзмененииОбщегоСостоянияОригинала(Документ, Состояние); + УчетОригиналовПервичныхДокументовПереопределяемый.ПриИзмененииОбщегоСостоянияОригинала(Документ, Состояние); + КонецПроцедуры #КонецОбласти +#КонецОбласти + #КонецЕсли diff --git a/SSL/src/InformationRegisters/СпискиОтзываСертификатов/RecordSetModule.bsl b/SSL/src/InformationRegisters/СпискиОтзываСертификатов/RecordSetModule.bsl index c58a1d724..99c85ed46 100644 --- a/SSL/src/InformationRegisters/СпискиОтзываСертификатов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СпискиОтзываСертификатов/RecordSetModule.bsl @@ -16,6 +16,10 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; + Для Каждого Запись Из ЭтотОбъект Цикл ДанныеСпискаОтзыва = Запись.СписокОтзыва.Получить(); Если ДанныеСпискаОтзыва = Неопределено Тогда diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl index 556c702ff..fc25cc3cc 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ManagerModule.bsl @@ -80,12 +80,15 @@ ЗапросПустыхЗаписей = Новый Запрос; ЗапросПустыхЗаписей.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина + "ВЫБРАТЬ + | ТаблицыГруппДоступа.Таблица КАК Таблица |ИЗ | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа |ГДЕ - | ТаблицыГруппДоступа.Таблица = ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка) + | ТаблицыГруппДоступа.Таблица В ( + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка), + | ЗНАЧЕНИЕ(Справочник.ИдентификаторыОбъектовРасширений.ПустаяСсылка), + | НЕОПРЕДЕЛЕНО) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -154,7 +157,6 @@ | Справочник.ГруппыДоступа КАК ГруппыДоступа | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа | ПО ГруппыДоступа.Профиль = ПрофилиГруппДоступа.Ссылка - | И (ГруппыДоступа.Профиль <> &ПрофильАдминистратор) | И (НЕ ГруппыДоступа.ПометкаУдаления) | И (НЕ ПрофилиГруппДоступа.ПометкаУдаления) | И (&УсловиеОтбораГруппДоступа1) @@ -259,7 +261,6 @@ Поля.Добавить(Новый Структура("ТипТаблицы")); Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПрофильАдминистратор", УправлениеДоступом.ПрофильАдминистратор()); Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений()); Запрос.Текст = УправлениеДоступомСлужебный.ТекстЗапросаВыбораИзменений( ТекстЗапроса, Поля, "РегистрСведений.ТаблицыГруппДоступа", ТекстЗапросовВременныхТаблиц); @@ -289,15 +290,18 @@ Блокировка.Заблокировать(); Результаты = ЗапросПустыхЗаписей.ВыполнитьПакет(); Если Не Результаты[0].Пустой() Тогда - НаборЗаписей = СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Таблица.Установить(Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); - НаборЗаписей.Записать(); + Выборка = Результаты[0].Выбрать(); + Пока Выборка.Следующий() Цикл + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Таблица.Установить(Выборка.Таблица); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); + КонецЦикла; ЕстьИзменения = Истина; КонецЕсли; Если Не Результаты[1].Пустой() Тогда НаборЗаписей = СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ГруппаДоступа.Установить(Справочники.ГруппыДоступа.ПустаяСсылка()); - НаборЗаписей.Записать(); + ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); ЕстьИзменения = Истина; КонецЕсли; diff --git a/SSL/src/InformationRegisters/УдалитьБезопасноеХранилищеДанныхОбластейДанных/УдалитьБезопасноеХранилищеДанныхОбластейДанных.mdo b/SSL/src/InformationRegisters/УдалитьБезопасноеХранилищеДанныхОбластейДанных/УдалитьБезопасноеХранилищеДанныхОбластейДанных.mdo new file mode 100644 index 000000000..6b3e37652 --- /dev/null +++ b/SSL/src/InformationRegisters/УдалитьБезопасноеХранилищеДанныхОбластейДанных/УдалитьБезопасноеХранилищеДанныхОбластейДанных.mdo @@ -0,0 +1,90 @@ + + + + + + + + + + + + УдалитьБезопасноеХранилищеДанныхОбластейДанных + + ru + (Не используется) Безопасное хранилище данных областей данных + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Данные + + ru + Данные + + + ValueStorage + + + + Use + Use + + + + Владелец + + ru + Владелец + + АПК:1329, АПК:1330 Универсальный составной тип, т.к. возможна работа с произвольным, заранее неизвестным составом типов. + + String + ExchangePlanRef + CatalogRef + + 128 + + + + + Index + Use + true + + true + + diff --git a/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html index 642f751e1..1c42bd54f 100644 --- a/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html +++ b/SSL/src/InformationRegisters/УдалитьЗамерыВремени3/Help/ru.html @@ -1,5 +1,5 @@ -

                Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы приложения.

                +

                Предназначен для просмотра замеров времени, которые производятся для оценки производительности работы приложения.

                Открыть список можно по команде Замеры времени на панели навигации ключевой операции.

                В списке выводятся:

                • Ключевая операция - полное наименование ключевой операции; @@ -18,6 +18,6 @@
                • Пользователь - полное имя пользователя;
                • -
                • Дата записи локальная.

                Данные о замерах приложение заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

                +
              • Дата записи локальная.

              Данные о замерах приложение заполняет автоматически при выполнении ключевых операций. Однако при необходимости можно ввести данные о замере времени вручную. Эту возможность можно использовать для отладки, например. Нажмите Создать, заполните необходимые поля.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/Help/ru.html similarity index 64% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Help/ru.html rename to SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/Help/ru.html index b7f99e5d4..e9e5acb9f 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/Help/ru.html @@ -1,17 +1,17 @@ -

              Позволяет указать параметры подключения к другому приложению для синхронизации данных, а также проверить правильность задания этих параметров.
              На закладках задаются параметры различных видов подключения.

              +

              Позволяет указать параметры подключения к другому приложению для синхронизации данных, а также проверить правильность задания этих параметров.
              На закладках задаются параметры различных видов подключения.

              Параметры подключения также указываются во время настройки синхронизации данных в Помощнике создания синхронизации данных. Эти настройки выводятся по умолчанию. Их можно изменить.

              Перейти к настройке Параметров подключения можно по соответствующей команде из настройки синхронизации данных.

              Общими для всех являются следующие параметры:

              -
              • Подключение по умолчанию - выберите подключение, которое будет использоваться по умолчанию при выполнении автоматической и интерактивной синхронизации данных. +
                • Подключение по умолчанию - выберите подключение, которое будет использоваться по умолчанию при выполнении автоматической и интерактивной синхронизации данных.
                • -
                • Проверить подключение - нажмите, для того чтобы приложение произвела проверку указанных настроек и попыталась подключиться к другому приложению. +
                • Проверить подключение - нажмите, для того чтобы приложение произвела проверку указанных настроек и попыталась подключиться к другому приложению.
                • -
                • Сжимать отправляемые данные в архив - включите флажок, для того чтобы ограничить размер отправляемого сообщения. Флажок не предусмотрен для настройки прямого подключения к информационной базе. -
                  • Пароль архива - введите пароль для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложений.

                Прямое подключение:

                +
              • Сжимать отправляемые данные в архив - включите флажок, для того чтобы ограничить размер отправляемого сообщения. Флажок не предусмотрен для настройки прямого подключения к информационной базе. +
                • Пароль архива - введите пароль для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в приложении-источнике и пароль распаковки в приложении-приемнике должны быть одинаковыми для пары обменивающихся приложений.

              Прямое подключение:

              • С помощью переключателя выберите вариант информационной базы:
                • Файловая база корреспондент -
                  •  Выберите Каталог информационной базы.
                • +
                  • Выберите Каталог информационной базы.
                • Клиент серверная база-корреспондент
                  • Введите Имя сервера;
                  • @@ -21,20 +21,20 @@
                  • Введите Имя пользователя;
                  • Введите Пароль.

                  Интернет

                  -
                  • Введите Адрес приложения в интернете. +
                    • Введите Адрес приложения в интернете.
                    • -
                    • Введите имя Пользователя и Пароль. +
                    • Введите имя Пользователя и Пароль.
                    • При необходимости включите флажок Запомнить пароль.
                    • -
                    • Перейдите по ссылке Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.

                    Сетевой каталог

                    -

                    В поле Каталог  Выберите путь к локальному или сетевому каталогу.

                    +
                  • Перейдите по ссылке Параметры доступа в Интернет, для того чтобы настроить параметры прокси-сервера.

                  Сетевой каталог

                  +

                  В поле Каталог Выберите путь к локальному или сетевому каталогу.

                  FTP-ресурс

                  • Введите Путь к каталогу и Порт компьютера для передачи данных.
                  • -
                  • Введите имя Пользователя (логин) и Пароль. +
                  • Введите имя Пользователя (логин) и Пароль.
                  • -
                  • Укажите Максимальный размер файла, для того чтобы ограничить объем пересылаемого сообщения. +
                  • Укажите Максимальный размер файла, для того чтобы ограничить объем пересылаемого сообщения.
                  • При необходимости включите флажок Пассивное соединение.
                  • diff --git a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/ManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/RecordSetModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/УдалитьНастройкиТранспортаОбменаДанными.mdo similarity index 93% rename from SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo rename to SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/УдалитьНастройкиТранспортаОбменаДанными.mdo index ed141d2ab..cd0931be6 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбменаДанными/НастройкиТранспортаОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/УдалитьНастройкиТранспортаОбменаДанными/УдалитьНастройкиТранспортаОбменаДанными.mdo @@ -9,14 +9,12 @@ - НастройкиТранспортаОбменаДанными + УдалитьНастройкиТранспортаОбменаДанными ru - Настройки транспорта обмена данными + (не используется) Настройки транспорта обмена данными InDialog - InformationRegister.НастройкиТранспортаОбменаДанными.Form.ФормаЗаписи - InformationRegister.НастройкиТранспортаОбменаДанными.Form.ФормаСписка Use Active @@ -672,40 +670,4 @@ true true - - ФормаЗаписи - - ru - Форма записи - - PersonalComputer - MobileDevice - - - НастройкаПодключенияКСервису - - ru - Настройка подключения к сервису - - PersonalComputer - MobileDevice - - - ПовторнаяСинхронизацияДанныхПередЗапуском - - ru - Повторная синхронизация данных перед запуском - - PersonalComputer - MobileDevice - - - ФормаСписка - - ru - Форма списка - - PersonalComputer - MobileDevice - diff --git a/SSL/src/InformationRegisters/УдалитьРезультатыОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/УдалитьРезультатыОбменаДанными/Help/ru.html index ac3b17831..da77f72c7 100644 --- a/SSL/src/InformationRegisters/УдалитьРезультатыОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/УдалитьРезультатыОбменаДанными/Help/ru.html @@ -1,70 +1,70 @@ -

                    Предназначен для просмотра статистики по результатам синхронизации данных.

                    -

                    Результаты синхронизации данных в виде ссылки можно увидеть в списке Синхронизации данных, например, на рабочем столе приложения. В зависимости от результатов ссылка принимает значения Предупреждений нет (в случае успешной синхронизации данных) или  Предупреждения (при этом в скобках указывается количество предупреждений). Для открытия списка результатов синхронизации данных пройдите по ссылке.

                    +

                    Предназначен для просмотра статистики по результатам синхронизации данных.

                    +

                    Результаты синхронизации данных в виде ссылки можно увидеть в списке Синхронизации данных, например, на рабочем столе приложения. В зависимости от результатов ссылка принимает значения Предупреждений нет (в случае успешной синхронизации данных) или Предупреждения (при этом в скобках указывается количество предупреждений). Для открытия списка результатов синхронизации данных пройдите по ссылке.

                    При выполнении синхронизации данных возможно возникновение проблемных ситуаций, требующих вмешательства пользователя. В колонках списка выводится необходимая информация о данных, по которым возникли проблемы и причина, по которой они не были приняты. Причина кратко указывается в специальной колонке, при этом по выделенной строке в нижней части списка выводится подробная формулировка, с указанием проблемных полей списков или документов.

                    Отборы

                    Для удобства просмотра предусмотрены отборы:

                    -
                    •  Выберите Период, за который выдавать данные; +
                      • Выберите Период, за который выдавать данные;
                      • -
                      • В поле Отправитель  Выберите из списка информационную базу, которая вас интересует; +
                      • В поле Отправитель Выберите из списка информационную базу, которая вас интересует;
                      • -
                      • В поле Причина напишите причину ошибки (данный отбор невозможен для вкладки Конфликты).

                      Проблемные ситуации можно условно разделить на следующие категории, которые в списке находятся на отдельных вкладках. В заголовке каждой вкладки в скобках указывается количество соответствующих проблемных ситуаций:

                      +
                    • В поле Причина напишите причину ошибки (данный отбор невозможен для вкладки Конфликты).

                    Проблемные ситуации можно условно разделить на следующие категории, которые в списке находятся на отдельных вкладках. В заголовке каждой вкладки в скобках указывается количество соответствующих проблемных ситуаций:

                    • Непроведенные документы

                    • -
                    • В этом списке показываются документы, которые не удалось провести по каким-либо причинам. Для решения проблемы с проведением документа рекомендуется открыть документ и устранить недочеты,  мешающие его проведению (это может быть, например, недостаточный остаток по товару). Внизу списка отражается причина невозможности автоматического проведения. +
                    • В этом списке показываются документы, которые не удалось провести по каким-либо причинам. Для решения проблемы с проведением документа рекомендуется открыть документ и устранить недочеты, мешающие его проведению (это может быть, например, недостаточный остаток по товару). Внизу списка отражается причина невозможности автоматического проведения.
                    • -
                    • Для того чтобы попытаться исправить ошибки в выбранных документах, нажмите Изменить выделенные.  +
                    • Для того чтобы попытаться исправить ошибки в выбранных документах, нажмите Изменить выделенные.
                    • -
                    • После устранения ошибок можно Провести документ.  +
                    • После устранения ошибок можно Провести документ.
                    • -
                    • Для того чтобы открыть документ, нажмите Еще - Изменить. +
                    • Для того чтобы открыть документ, нажмите Еще - Изменить.
                    • -
                    • Для скрытия документа из этого списка без устранения проблемы с проведением нажмите Игнорировать. +
                    • Для скрытия документа из этого списка без устранения проблемы с проведением нажмите Игнорировать.
                    • Для того, чтобы показать проигнорированные документы, нажмите Еще - Показывать проигнорированные.
                    • -
                    • Для возвращения проигнорированного документа в список нажмите Еще - Не игнорировать.

                    Незаполненные реквизиты

                    -
                    • Содержит список незаполненных реквизитов элементов справочников. Для исправления необходимо открыть элемент справочника (это можно сделать по двойному клику мыши на нем) и заполнить обязательные для заполнения поля. После чего необходимо записать элемент. +
                    • Для возвращения проигнорированного документа в список нажмите Еще - Не игнорировать.

                    Незаполненные реквизиты

                    +
                    • Содержит список незаполненных реквизитов элементов справочников. Для исправления необходимо открыть элемент справочника (это можно сделать по двойному клику мыши на нем) и заполнить обязательные для заполнения поля. После чего необходимо записать элемент.
                    • -
                    • Для того чтобы попытаться заполнить реквизиты в выбранных элементах, нажмите Изменить выделенные. +
                    • Для того чтобы попытаться заполнить реквизиты в выбранных элементах, нажмите Изменить выделенные.
                    • -
                    • Для того чтобы открыть элемент, нажмите Еще - Изменить. +
                    • Для того чтобы открыть элемент, нажмите Еще - Изменить.
                    • -
                    • Для удаления элемента справочника из этого списка без устранения заполнения обязательных реквизитов нажмите Игнорировать.  +
                    • Для удаления элемента справочника из этого списка без устранения заполнения обязательных реквизитов нажмите Игнорировать.
                    • -
                    • Для того, чтобы показать проигнорированные элементы, нажмите Еще - Показывать проигнорированные. +
                    • Для того, чтобы показать проигнорированные элементы, нажмите Еще - Показывать проигнорированные.
                    • -
                    • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

                    Конфликты

                    -
                    • При настроенной синхронизации данных между двумя приложениями возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обоих приложениях. Это приводит к возникновению двух различающихся версий одинаковых данных в этих приложениях. Такая ситуация называется конфликтом изменения данных.
                      Конфликты изменения данных разрешаются (выбирается одна из версий) автоматически, однако можно изменить результат автоматического разрешения конфликта. Для этого выделите элемент списка. +
                    • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

                    Конфликты

                    +
                    • При настроенной синхронизации данных между двумя приложениями возникают ситуации, когда одни и те же данные изменяются одновременно (в промежуток между выполнением сеанса синхронизации данных) в обоих приложениях. Это приводит к возникновению двух различающихся версий одинаковых данных в этих приложениях. Такая ситуация называется конфликтом изменения данных.
                      Конфликты изменения данных разрешаются (выбирается одна из версий) автоматически, однако можно изменить результат автоматического разрешения конфликта. Для этого выделите элемент списка.
                    • -
                    • В строке внизу списка выводится метод решения конфликта, который был выбран приложением. +
                    • В строке внизу списка выводится метод решения конфликта, который был выбран приложением.
                    • Для выявления отличий между двумя версиями нажмите Показать отличия.
                    • -
                    • Для принятия решения, какую версию принять, можно просмотреть обе версии. Для этого нажмите Еще - Показать версию, созданную в этой информационной базе или Еще - Показать версию, полученную из другой информационной базы. +
                    • Для принятия решения, какую версию принять, можно просмотреть обе версии. Для этого нажмите Еще - Показать версию, созданную в этой информационной базе или Еще - Показать версию, полученную из другой информационной базы.
                    • -
                    • Для просмотра элемента списка нажмите Еще - Изменить данные. +
                    • Для просмотра элемента списка нажмите Еще - Изменить данные.
                    • -
                    • После принятия решения о версии, которая должна быть сохранена, нажмите Подтвердить для сохранения результата автоматического разрешения конфликта или Пересмотреть для изменения результата рассмотрения конфликта на противоположный. После этого элемент становится неактивным, ему присваивается признак Рассмотрено и по умолчанию он скрывается из списка.  +
                    • После принятия решения о версии, которая должна быть сохранена, нажмите Подтвердить для сохранения результата автоматического разрешения конфликта или Пересмотреть для изменения результата рассмотрения конфликта на противоположный. После этого элемент становится неактивным, ему присваивается признак Рассмотрено и по умолчанию он скрывается из списка.
                    • -
                    • По умолчанию рассмотренные конфликты скрываются из списка. Для того чтобы показывать их тоже, нажмите Еще - Показывать рассмотренные конфликты. +
                    • По умолчанию рассмотренные конфликты скрываются из списка. Для того чтобы показывать их тоже, нажмите Еще - Показывать рассмотренные конфликты.
                    • -
                    • Для того чтобы заново проверить рассмотренные конфликты и что-либо изменить, нажмите Еще - Снять признак "Рассмотрено".

                    Непринятые по дате запрета

                    +
                  • Для того чтобы заново проверить рассмотренные конфликты и что-либо изменить, нажмите Еще - Снять признак "Рассмотрено".

                  Непринятые по дате запрета

                  • В этом списке отображаются данные, которые были отклонены из-за установленного запрета на загрузку данных прошлых периодов.
                  • -
                  • Для сравнения отклоненных данных с текущими данными в приложении нажмите Показать отличия (при наличии данных в текущем приложении). +
                  • Для сравнения отклоненных данных с текущими данными в приложении нажмите Показать отличия (при наличии данных в текущем приложении).
                  • -
                  • Для того чтобы открыть элемент, нажмите Еще - Изменить. +
                  • Для того чтобы открыть элемент, нажмите Еще - Изменить.
                  • Для просмотра другой версии нажмите Еще - Показать непринятую версию.
                  • -
                  • Для получения данных, несмотря на установленный запрет загрузки данных, нажмите Принять версию. +
                  • Для получения данных, несмотря на установленный запрет загрузки данных, нажмите Принять версию.
                  • -
                  • Для удаления строки из списка без принятия решения нажмите Игнорировать.  +
                  • Для удаления строки из списка без принятия решения нажмите Игнорировать.
                  • -
                  • Для того, чтобы показать проигнорированные элементы, нажмите Еще - Показывать проигнорированные. +
                  • Для того, чтобы показать проигнорированные элементы, нажмите Еще - Показывать проигнорированные.
                  • -
                  • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

                  См. также:

                  +
                • Для возвращения проигнорированного элемента в список нажмите Еще - Не игнорировать.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl b/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl index 32f5f20a9..797db4353 100644 --- a/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/УдаляемыеОбъекты/RecordSetModule.bsl @@ -15,6 +15,10 @@ Возврат; КонецЕсли; + Если ОбщегоНазначения.ЭтоУдалениеНабораЗаписей(Замещение) Тогда + Возврат; + КонецЕсли; + // Не поддерживаются ссылки на объекты расширений Для Сч = -(Количество() - 1) По 0 Цикл Если ЭтотОбъект[-Сч].Объект = Неопределено Тогда diff --git a/SSL/src/InformationRegisters/УдаляемыеОбъекты/УдаляемыеОбъекты.mdo b/SSL/src/InformationRegisters/УдаляемыеОбъекты/УдаляемыеОбъекты.mdo index a71215d8c..5d69a691d 100644 --- a/SSL/src/InformationRegisters/УдаляемыеОбъекты/УдаляемыеОбъекты.mdo +++ b/SSL/src/InformationRegisters/УдаляемыеОбъекты/УдаляемыеОбъекты.mdo @@ -55,6 +55,7 @@ ru Объект + АПК:1330 универсальный составной тип, т.к. возможна работа с любыми данными ExchangePlanRef BusinessProcessRef diff --git a/SSL/src/InformationRegisters/ХранилищеФайлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ХранилищеФайлов/ManagerModule.bsl index 2b465f552..a2b7b9d6a 100644 --- a/SSL/src/InformationRegisters/ХранилищеФайлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ХранилищеФайлов/ManagerModule.bsl @@ -74,19 +74,20 @@ Процедура УдалитьДвоичныеДанные(Файл) Экспорт + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Файл", Файл); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ХранилищеФайлов.ХранилищеДвоичныхДанных КАК ХранилищеДвоичныхДанных, + | ХранилищеФайлов.ХранилищеДвоичныхДанных.Хеш КАК Хеш + |ИЗ + | РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов + |ГДЕ + | ХранилищеФайлов.Файл = &Файл"; + НачатьТранзакцию(); Попытка - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Файл", Файл); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ХранилищеФайлов.ХранилищеДвоичныхДанных КАК ХранилищеДвоичныхДанных, - | ХранилищеФайлов.ХранилищеДвоичныхДанных.Хеш КАК Хеш - |ИЗ - | РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов - |ГДЕ - | ХранилищеФайлов.Файл = &Файл"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Блокировка = Новый БлокировкаДанных; @@ -94,9 +95,9 @@ ЭлементБлокировки.УстановитьЗначение("Хеш", Выборка.Хеш); Блокировка.Заблокировать(); - Запись = СоздатьМенеджерЗаписи(); - Запись.Файл = Файл; - Запись.Удалить(); + ХранилищеФайла = СоздатьМенеджерЗаписи(); + ХранилищеФайла.Файл = Файл; + ХранилищеФайла.Удалить(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ХранилищеДвоичныхДанных", Выборка.ХранилищеДвоичныхДанных); @@ -108,16 +109,16 @@ |ГДЕ | ХранилищеФайлов.ХранилищеДвоичныхДанных = &ХранилищеДвоичныхДанных"; Если Запрос.Выполнить().Пустой() Тогда - СпрОбъект = Выборка.ХранилищеДвоичныхДанных.ПолучитьОбъект(); - СпрОбъект.ОбменДанными.Загрузка = Истина; - СпрОбъект.Удалить(); + ХранилищеДанных = Выборка.ХранилищеДвоичныхДанных.ПолучитьОбъект(); + ХранилищеДанных.ОбменДанными.Загрузка = Истина; + ХранилищеДанных.Удалить(); КонецЕсли; КонецЕсли; Если Не РаботаСФайламиСлужебныйПовтИсп.ДедупликацияВыполнена() Тогда - Запись = РегистрыСведений.УдалитьДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); - Запись.Файл = Файл; - Запись.Удалить(); + ХранилищеФайла = РегистрыСведений.УдалитьДвоичныеДанныеФайлов.СоздатьМенеджерЗаписи(); + ХранилищеФайла.Файл = Файл; + ХранилищеФайла.Удалить(); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -251,8 +252,7 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики обновления. +#Область ОбработчикиОбновления // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, // для которых необходимо обновить записи в регистре. @@ -314,6 +314,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ПеренестиДвоичныеДанныеФайловВРегистрСведенийХранилищеФайлов(Выборка) @@ -477,4 +479,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЭлектронныеПодписи/ManagerModule.bsl b/SSL/src/InformationRegisters/ЭлектронныеПодписи/ManagerModule.bsl index 0d99b4fe4..9bf4fd44c 100644 --- a/SSL/src/InformationRegisters/ЭлектронныеПодписи/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЭлектронныеПодписи/ManagerModule.bsl @@ -23,9 +23,7 @@ |ИЗ | РегистрСведений.ЭлектронныеПодписи КАК ЭлектронныеПодписи |ГДЕ - | (ЭлектронныеПодписи.ИмяФайлаПодписи ПОДОБНО ""%\%"" СПЕЦСИМВОЛ ""~"" - | ИЛИ ЭлектронныеПодписи.ИмяФайлаПодписи ПОДОБНО ""%/%"" СПЕЦСИМВОЛ ""~"") - | ИЛИ ЭлектронныеПодписи.ИдентификаторПодписи = &ПустойУникальныйИдентификатор"; + | ЭлектронныеПодписи.ИдентификаторПодписи = &ПустойУникальныйИдентификатор"; Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); @@ -65,20 +63,11 @@ НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда Запись = НаборЗаписей[0]; - ИмяФайлаПодписиБезПути = Неопределено; - ЧастиИмени = СтрРазделить(Запись.ИмяФайлаПодписи, "\/", Ложь); - Если ЧастиИмени.Количество() > 0 Тогда - ИмяФайлаПодписиБезПути = ЧастиИмени[ЧастиИмени.ВГраница()]; - КонецЕсли; ЗаписатьНабор = Ложь; Если Не ЗначениеЗаполнено(Запись.ИдентификаторПодписи) Тогда Запись.ИдентификаторПодписи = Новый УникальныйИдентификатор; ЗаписатьНабор = Истина; КонецЕсли; - Если ИмяФайлаПодписиБезПути <> Неопределено И Запись.ИмяФайлаПодписи <> ИмяФайлаПодписиБезПути Тогда - Запись.ИмяФайлаПодписи = ИмяФайлаПодписиБезПути; - ЗаписатьНабор = Истина; - КонецЕсли; Если ЗаписатьНабор Тогда ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); КонецЕсли; diff --git a/SSL/src/InformationRegisters/ЭлектронныеПодписи/ЭлектронныеПодписи.mdo b/SSL/src/InformationRegisters/ЭлектронныеПодписи/ЭлектронныеПодписи.mdo index 2e09da884..bd0f8a6c2 100644 --- a/SSL/src/InformationRegisters/ЭлектронныеПодписи/ЭлектронныеПодписи.mdo +++ b/SSL/src/InformationRegisters/ЭлектронныеПодписи/ЭлектронныеПодписи.mdo @@ -129,28 +129,6 @@ Use - - ИмяФайлаПодписи - - ru - Имя файла подписи - - - String - - 260 - - - - ru - Имя файла подписи (служебное поле) - - - - Use - Use - - Комментарий @@ -250,25 +228,6 @@ Use - - Сертификат - - ru - Сертификат - - - ValueStorage - - - ru - Двоичные данные сертификата (служебное поле) - - - - Use - Use - - ДатаПодписи diff --git a/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html b/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html index 87938ae55..f48928f55 100644 --- a/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html +++ b/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html @@ -1,14 +1,14 @@ -

                Предназначен для получения статистики по хранимым версиям объектов приложения.

                -

                Открывается по команде Количество и объем хранимых версий объектов из настроек версионирования.

                -

                Если ограничен размер устройства, предназначенного для хранения данных приложения, с помощью отчета можно контролировать объем хранимых версий объектов в сравнении и принять решение о сокращении числа хранимых версий.

                +

                Предназначен для получения статистики по хранимым версиям объектов приложения.

                +

                Открывается по команде Количество и объем хранимых версий объектов из настроек версионирования.

                +

                Если ограничен размер устройства, предназначенного для хранения данных приложения, с помощью отчета можно контролировать объем хранимых версий объектов в сравнении и принять решение о сокращении числа хранимых версий.

                В отчете выводится:

                • Диаграмма Объем хранимых версий по типам объектов;
                • Диаграмма Количество хранимых версий по типам объектов;
                • Таблица Количество и объем хранимых версий объектов - числовые данные по количеству и объему хранимых версий объектов. Состоит из колонок: -
                  • Тип объекта - объект приложения; +
                    • Тип объекта - объект приложения;
                    • Количество - количество версий объекта;
                    • diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form index 13c5e64e2..4bf543e09 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form @@ -290,6 +290,10 @@ + + РасшифровкаИзОтчета + + diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html index 17ea93284..8348bc949 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html @@ -1,6 +1,6 @@

                      Предназначен для просмотра статистических данных по выбранному регламентному заданию.

                      -

                      Открывается с помощью двойного щелчка мыши по наименованию регламентного задания из отчета Анализ журнала регистрации - Продолжительность регламентных заданий.

                      +

                      Открывается с помощью двойного щелчка мыши по наименованию регламентного задания из отчета Анализ журнала регистрации - Продолжительность регламентных заданий.

                      В отчете выводится:

                      • Общая продолжительность;
                      • Количество запусков; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl index 52c399ebd..ab41aa654 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl @@ -11,7 +11,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - РасшифровкаИзОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "РасшифровкаИзОтчета"); + РасшифровкаИзОтчета = Параметры.РасшифровкаИзОтчета; // Массив Если РасшифровкаИзОтчета <> Неопределено Тогда Отчет = Отчеты.АнализЖурналаРегистрации.РасшифровкаРегламентногоЗадания(РасшифровкаИзОтчета).Отчет; @@ -62,7 +62,8 @@ ДатаОкончания = Расшифровка.Получить(1); СеансРегламентногоЗадания.Очистить(); СеансРегламентногоЗадания.Добавить(Расшифровка.Получить(2)); - ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); + ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", + СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ОтборЖурналаРегистрации); КонецПроцедуры @@ -75,12 +76,9 @@ Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) Если ЗначениеЗаполнено(ИдентификаторРегламентногоЗадания) Тогда - - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(ПолучитьРасписание()); - ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеРегламентногоЗаданияЗавершение", ЭтотОбъект); + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(ПолучитьРасписание()); Диалог.Показать(ОписаниеОповещения); - Иначе ПоказатьПредупреждение(,НСтр("ru = 'Невозможно изменить расписание регламентного задания: регламентное задание не существует в этой версии приложения.'")); КонецЕсли; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html index 4465319ad..a700b1799 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html @@ -1,7 +1,7 @@ -

                        Администратор приложения может контролировать работу приложения с помощью группы отчетов Контроль работы пользователей. Отчеты выводят различную статистическую информацию о работе приложения, об ошибках и предупреждениях во время его работы, о количестве активных пользователей и подразделений в различные периоды времени и времени выполнения регламентных заданий.

                        -

                        Группа отчетов открывается в разделе Администрирование по команде Отчеты администратора или из раздела Администрирование - Настройки пользователей и прав по команде Контроль работы пользователей.

                        -

                        Необходимо помнить, что эта статистическая информация предназначена только для диагностики работы приложения и загруженности сервера и не является средством для оценки эффективности работы сотрудников, расчета оплаты труда и т.д. 

                        +

                        Администратор приложения может контролировать работу приложения с помощью группы отчетов Контроль работы пользователей. Отчеты выводят различную статистическую информацию о работе приложения, об ошибках и предупреждениях во время его работы, о количестве активных пользователей и подразделений в различные периоды времени и времени выполнения регламентных заданий.

                        +

                        Группа отчетов открывается в разделе Администрирование по команде Отчеты администратора или из раздела Администрирование - Настройки пользователей и прав по команде Контроль работы пользователей.

                        +

                        Необходимо помнить, что эта статистическая информация предназначена только для диагностики работы приложения и загруженности сервера и не является средством для оценки эффективности работы сотрудников, расчета оплаты труда и т.д.

                        Варианты отчета

                        • Анализ активности пользователей
                          @@ -17,7 +17,7 @@
                        • Продолжительность работы регламентных заданий

                        Анализ активности пользователей

                        • -
                          Выводит статистическую информацию по активности пользователей (часы работы, количество подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя, максимальное количество одновременно работающих пользователей). Для наглядности часть статистики выводится в виде диаграмм.
                          +
                          Выводит статистическую информацию по активности пользователей (часы работы, количество подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя, максимальное количество одновременно работающих пользователей). Для наглядности часть статистики выводится в виде диаграмм.
                        • Настройки:
                          @@ -27,14 +27,14 @@
                        • Укажите Период.
                      • -

                        Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                        +

                        Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                        • -
                          С помощью флажков включите или выключите вывод информации по количеству введенных и измененных документов и справочников в виде диаграмм.
                          +
                          С помощью флажков включите или выключите вывод информации по количеству введенных и измененных документов и справочников в виде диаграмм.
                        • Выберите вид диаграммы из списка для вывода информации по количеству введенных и измененных документов и справочников.

                      Активность пользователя

                      • -
                        Выводится подробная статистика по активности выбранного пользователя (список созданных и измененных документов/справочников/бизнес-процессов/задач). Для наглядности часть статистики выводится в виде диаграмм. Может использоваться как расшифровка варианта отчета Анализ активности пользователей по конкретному пользователю.
                        +
                        Выводится подробная статистика по активности выбранного пользователя (список созданных и измененных документов/справочников/бизнес-процессов/задач). Для наглядности часть статистики выводится в виде диаграмм. Может использоваться как расшифровка варианта отчета Анализ активности пользователей по конкретному пользователю.
                      • Настройки:
                        @@ -44,30 +44,30 @@
                      • Укажите Период.
                    • -

                      Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                      +

                      Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                      • -
                        Включите соответствующие флажки, выберите значение Да, чтобы Выводить данные о бизнес-процессах, задачах, справочниках, документах, или Нет, чтобы не выводить. По умолчанию в отчете выводятся данные о справочниках и документах.

                    Анализ активности подразделений

                    +
                    Включите соответствующие флажки, выберите значение Да, чтобы Выводить данные о бизнес-процессах, задачах, справочниках, документах, или Нет, чтобы не выводить. По умолчанию в отчете выводятся данные о справочниках и документах.

                Анализ активности подразделений

                • -
                  Выводит статистическую информацию по активности подразделений (часы работы, количество подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя, максимальное количество одновременно работающих пользователей). Для наглядности часть статистики выводится в виде диаграмм.
                • +
                  Выводит статистическую информацию по активности подразделений (часы работы, количество подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя, максимальное количество одновременно работающих пользователей). Для наглядности часть статистики выводится в виде диаграмм.
                • Настройки:
                  • -
                    Выберите Подразделения из списка (можно выбрать все подразделения).
                  • +
                    Выберите Подразделения из списка (можно выбрать все подразделения).
                  • -
                    Укажите Период.
                • +
                  Укажите Период.
              • -

                Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                +

                Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                • -
                  С помощью флажков включите или выключите вывод информации по количеству введенных и измененных документов и справочников в виде диаграмм.
                • +
                  С помощью флажков включите или выключите вывод информации по количеству введенных и измененных документов и справочников в виде диаграмм.
                • Выберите вид диаграммы из списка для вывода информации по количеству введенных и измененных документов и справочников.

              Контроль журнала регистрации

              • -
                Представляет собой список критичных записей журнала регистрации (записи об ошибках и предупреждениях). Дает возможность контролировать проблемные ситуации в ходе эксплуатации приложения. Отчет позволяет быстро проанализировать часто возникающие проблемы и принять решения по их устранению, не прибегая к помощи журнала регистрации.
                +
                Представляет собой список критичных записей журнала регистрации (записи об ошибках и предупреждениях). Дает возможность контролировать проблемные ситуации в ходе эксплуатации приложения. Отчет позволяет быстро проанализировать часто возникающие проблемы и принять решения по их устранению, не прибегая к помощи журнала регистрации.
              • Настройки: Укажите Период.

              Продолжительность работы регламентных заданий

              • -
                Выводится время выполнения и продолжительность работы сеансов регламентных заданий в выбранный день. Позволяет провести анализ загруженности сервера регламентными заданиями, выявить интервалы с пиковыми нагрузками и разгрузить их.
                +
                Выводится время выполнения и продолжительность работы сеансов регламентных заданий в выбранный день. Позволяет провести анализ загруженности сервера регламентными заданиями, выявить интервалы с пиковыми нагрузками и разгрузить их.
              • С помощью двойного щелчка мыши по наименованию регламентного задания в отчете можно перейти к просмотру отчета Сведения о Регламентном задании и ознакомиться со статистической информацией о выбранном регламентном задании.
                @@ -78,9 +78,9 @@
                Выберите День, для того чтобы получить отчет за часть этого дня.
              • -
                Укажите Начало периода - время выбранного дня, с которого необходимо получить данные о работе регламентных заданий.
              +
              Укажите Начало периода - время выбранного дня, с которого необходимо получить данные о работе регламентных заданий.
            14. -

              Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

              +

              Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

              • Укажите Конец периода - время выбранного дня, до которого необходимо получить данные о работе регламентных заданий.
              • @@ -88,10 +88,10 @@
                Выберите Да, для того чтобы Отображать фоновые задания; выключите флажок или выберите Нет, чтобы не отображать.
              • -
                Укажите Минимальную продолжительность сеансов регламентных заданий (в секундах), по умолчанию равно 1.
                +
                Укажите Минимальную продолжительность сеансов регламентных заданий (в секундах), по умолчанию равно 1.
              • -
                Укажите Минимальное число одновременно работавших регламентных заданий за период, по умолчанию равно 2.
                +
                Укажите Минимальное число одновременно работавших регламентных заданий за период, по умолчанию равно 2.
              • Включите флажок, для того чтобы Скрыть регламентные задания.
            15. См. также:

              diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 9380352f1..84fe1aab7 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -550,8 +550,7 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Анализ активности пользователей. +#Область АнализАктивностиПользователей Процедура ЗаполнитьПользователейДляАнализа(ПользовательФильтр, ЗначениеОтбора) @@ -1064,8 +1063,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Продолжительность работы регламентных заданий. +#КонецОбласти + +#Область ПродолжительностьРаботыРегламентныхЗаданий // Функция формирует отчет по работе регламентных заданий. // @@ -1679,9 +1679,8 @@ ТаблицаСеансыРегламентныхЗаданий, КоличествоЗапусков); КонецФункции -// Функция формирования отчета по выбранному регламентному заданию. // Параметры: -// Расшифровка - расшифровка регламентного задания. +// Расшифровка - Массив - расшифровка регламентного задания. // Функция РасшифровкаРегламентногоЗадания(Расшифровка) Экспорт Результат = Новый Структура; @@ -1891,8 +1890,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Контроль журнала регистрации. +#КонецОбласти + +#Область КонтрольЖурналаРегистрации // Функция, формирующая отчет по зарегистрированным в журнале регистрации ошибкам. // @@ -2111,4 +2111,6 @@ #КонецОбласти +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form index 3ad84a3ab..f1ea77549 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Form.form @@ -387,6 +387,12 @@ DontUse Auto + + Опрос + + DocumentRef.НазначениеОпросов + + diff --git a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl index 07993a448..b7101d427 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/ФормаОтчета/Module.bsl @@ -12,8 +12,7 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ВидОтчета = "АнализОтветов"; - - Опрос = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Опрос"); + Опрос = Параметры.Опрос; КонецПроцедуры diff --git a/SSL/src/Reports/АнализОпроса/Help/ru.html b/SSL/src/Reports/АнализОпроса/Help/ru.html index b4fa219c2..a3f6f3cef 100644 --- a/SSL/src/Reports/АнализОпроса/Help/ru.html +++ b/SSL/src/Reports/АнализОпроса/Help/ru.html @@ -1,5 +1,5 @@ -

              Предназначен для выдачи статистических данных по результатам анкетирования.

              +

              Предназначен для выдачи статистических данных по результатам анкетирования.

              Открывается по команде Анализ опроса в разделе Анкетирование.

              При помощи этого отчета по интересующему опросу (необходимо выбрать его из списка в поле Опрос) можно получить итоговую информацию по количеству ответов в различных разрезах.

            16. Нажмите кнопку Сформировать.

            17. Анализ ответов

              • -
                Если ответы числовые, то по таким ответам может быть дополнительно выведена различная статистическая информация: минимальное, максимальное, среднее значение, а также сумма (выделяется значком ). Сумма выводится для вопросов с включенным флажком Агрегировать сумму в отчетах.
                +
                Если ответы числовые, то по таким ответам может быть дополнительно выведена различная статистическая информация: минимальное, максимальное, среднее значение, а также сумма (выделяется значком ). Сумма выводится для вопросов с включенным флажком Агрегировать сумму в отчетах.
              • Первое число - это количество респондентов, ответивших на вопрос.
              • @@ -18,11 +18,11 @@
                • Для того чтобы получить расшифровку по вопросу, дважды щелкните мышью по соответствующей строке отчета.
                • -
                  Выберите Вариант отчета:
                  +
                  Выберите Вариант отчета:
                  • С группировкой по респонденту (по умолчанию);
                  • С группировкой по ответам.

              Анализ ответивших

              -
              • При помощи отчета Анализ опроса можно получить информацию о ходе анкетирования в разрезе участвующих в нем респондентов. Информация в отчете сгруппирована по респондентам, которые еще не заполнили или уже заполнили свои анкеты.

              См. также:

              +
              • При помощи отчета Анализ опроса можно получить информацию о ходе анкетирования в разрезе участвующих в нем респондентов. Информация в отчете сгруппирована по респондентам, которые еще не заполнили или уже заполнили свои анкеты.

              См. также:

              \ No newline at end of file diff --git a/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Attributes/Источник/ExtInfo/ListSettings.dcss b/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Attributes/Источник/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Attributes/Источник/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Form.form b/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Form.form new file mode 100644 index 000000000..8d8500f78 --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Form.form @@ -0,0 +1,332 @@ + + + + ГруппаПользовательскихНастроек + 25 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + ГруппаПользовательскихНастроекРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualGroup + + Vertical + WeakSeparation + true + true + Auto + Auto + + + + Источник + 5 + + <key>ru</key> + <value>Источник</value> + + true + true + + true + + + Источник + + None + + СтандартнаяКартинка + 22 + true + true + + true + + + Источник.DefaultPicture + + + СтандартнаяКартинкаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + СтандартнаяКартинкаКонтекстноеМеню + 23 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + + + 1 + + AsFileRef + + + + ИсточникКоманднаяПанель + 7 + + ФормаИзменитьФорму + 18 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 20 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + ИсточникСтрокаПоиска + 9 + + ИсточникСтрокаПоискаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ИсточникСтрокаПоискаКонтекстноеМеню + 10 + true + + Источник + + true + + + + ИсточникСостояниеПросмотра + 12 + + ИсточникСостояниеПросмотраРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + + ИсточникСостояниеПросмотраКонтекстноеМеню + 13 + true + + ViewStatusAddition + Источник + + true + + + + ИсточникУправлениеПоиском + 15 + + ИсточникУправлениеПоискомРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ИсточникУправлениеПоискомКонтекстноеМеню + 16 + true + + SearchControlAddition + Источник + + true + + + + ИсточникРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + + ИсточникКонтекстноеМеню + 6 + true + + HierarchicalList + true + true + true + true + true + true + true +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + AsFileRef + + Источник.DefaultPicture + + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
              + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Источник + + <key>ru</key> + <value>Источник</value> + + 1 + + DynamicList + + + true + + + true + +
              true
              + + ВЫБРАТЬ + ИСТИНА КАК ЗначениеИстина +ИЗ + РегистрСведений.СоставыГруппПользователей КАК РегистрПереопределяемый + InformationRegister.СоставыГруппПользователей + true + true + true + true + +
              + + ТипЭлементаДанных + + true + + + + + + +
              diff --git a/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Module.bsl b/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Module.bsl new file mode 100644 index 000000000..dc4000e46 --- /dev/null +++ b/SSL/src/Reports/АнализПравДоступа/Forms/ВыборСтрокиРегистра/Module.bsl @@ -0,0 +1,182 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2024, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если ТипЗнч(Параметры.ТипЭлементаДанных) = Тип("Тип") Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(Параметры.ТипЭлементаДанных); + Иначе + Параметры.ТипЭлементаДанных = ТипЗнч(Параметры.ТипЭлементаДанных); + КонецЕсли; + + Если ОбъектМетаданных = Неопределено + Или Не ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда + + ТекстОшибки = НСтр("ru = 'Для открытия формы нужно указать параметр'"); + ДляАдминистратора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для открытия формы %1 нужно передать тип ключа записи регистра + |в параметре формы %2, а передан тип ""%3"".'"), + "ВыборСтрокиРегистра", + "ТипЭлементаДанных", + Параметры.ТипЭлементаДанных); + + ВызватьИсключение(ТекстОшибки,,, ДляАдминистратора); + КонецЕсли; + + ВыполнитьПроверкуПравДоступа("Просмотр", ОбъектМетаданных); + + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, ПолноеИмя,, Ложь); + + Источник.ПроизвольныйЗапрос = Ложь; + + СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); + СвойстваСписка.ТекстЗапроса = ""; + СвойстваСписка.ОсновнаяТаблица = ПолноеИмя; + СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; + ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Источник, СвойстваСписка); + + Источник.АвтоЗаполнениеДоступныхПолей = Истина; + Источник.ПолучениеПредставленийДляНевидимыхПолей = Истина; + + СписокПолей = Новый СписокЗначений; + Для Каждого ОписаниеПоля Из Источник.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл + ИмяПоля = Строка(ОписаниеПоля.Поле); + Если ИмяПоля = "МоментВремени" + Или ИмяПоля = "Активность" + Или ИмяПоля = "ВидДвижения" + Или ОписаниеПоля.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Продолжить; + КонецЕсли; + СписокПолей.Добавить(ИмяПоля); + КонецЦикла; + + УпорядочитьПоляРегистра(ОбъектМетаданных, СписокПолей); + + Для Каждого ЭлементСписка Из СписокПолей Цикл + ИмяПоля = ЭлементСписка.Значение; + НовыйЭлемент = Элементы.Добавить("Источник" + ИмяПоля, Тип("ПолеФормы"), Элементы.Источник); + НовыйЭлемент.ПутьКДанным = "Источник." + ИмяПоля; + НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи; + КонецЦикла; + + Элементы.СтандартнаяКартинка.Видимость = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УпорядочитьПоляРегистра(ОбъектМетаданных, СписокПолей) + + ЭтоРегистрСведений = ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных); + ЭтоРегистрБухгалтерии = ОбщегоНазначения.ЭтоРегистрБухгалтерии(ОбъектМетаданных); + ЭтоРегистрРасчета = ОбщегоНазначения.ЭтоРегистрРасчета(ОбъектМетаданных); + + Индекс = 0; + + Если ЭтоРегистрРасчета Тогда + СдвинутьЭлемент("ПериодРегистрации", СписокПолей, Индекс, 1); + Иначе + СдвинутьЭлемент("Период", СписокПолей, Индекс, 1); + КонецЕсли; + + Если Не ЭтоРегистрСведений + Или ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + + СдвинутьЭлемент("Регистратор", СписокПолей, Индекс, 1); + СдвинутьЭлемент("НомерСтроки", СписокПолей, Индекс, 1); + КонецЕсли; + + Если ЭтоРегистрРасчета Тогда + СдвинутьЭлемент("ВидРасчета", СписокПолей, Индекс, 1); + СдвинутьЭлемент("ПериодДействия", СписокПолей, Индекс, 1); + СдвинутьЭлемент("ПериодДействияНачало", СписокПолей, Индекс, 1); + СдвинутьЭлемент("ПериодДействияКонец", СписокПолей, Индекс, 1); + СдвинутьЭлемент("БазовыйПериодНачало", СписокПолей, Индекс, 1); + СдвинутьЭлемент("БазовыйПериодКонец", СписокПолей, Индекс, 1); + СдвинутьЭлемент("Сторно", СписокПолей, Индекс, 1); + КонецЕсли; + + СдвинутьЭлементыКоллекции(ОбъектМетаданных.СтандартныеРеквизиты, СписокПолей, Индекс,, 1); + Если ЭтоРегистрБухгалтерии Тогда + СдвинутьЭлементыКоллекции(ОбъектМетаданных.СтандартныеРеквизиты, СписокПолей, Индекс, Истина, 1); + КонецЕсли; + + Индекс = СписокПолей.Количество() - 1; + + СдвинутьЭлементыКоллекции(ОбъектМетаданных.Реквизиты, СписокПолей, Индекс); + + СдвинутьЭлементыКоллекции(ОбъектМетаданных.Ресурсы, СписокПолей, Индекс); + Если ЭтоРегистрБухгалтерии Тогда + СдвинутьЭлементыКоллекции(ОбъектМетаданных.Ресурсы, СписокПолей, Индекс, Истина); + КонецЕсли; + + Если ЭтоРегистрБухгалтерии Тогда + СдвинутьЭлементыКоллекции(ОбъектМетаданных.Измерения, СписокПолей, Индекс, Истина); + КонецЕсли; + СдвинутьЭлементыКоллекции(ОбъектМетаданных.Измерения, СписокПолей, Индекс); + +КонецПроцедуры + +&НаСервере +Процедура СдвинутьЭлементыКоллекции(КоллекцияПолей, СписокПолей, ОбщийИндекс, + ЕстьПризнакБалансовый = Ложь, СдвигИндекса = -1) + + Если СдвигИндекса = -1 Тогда + Индекс = КоллекцияПолей.Количество() - 1; + Пока Индекс >= 0 Цикл + СдвинутьЭлементКоллекции(КоллекцияПолей.Получить(Индекс), + СписокПолей, ОбщийИндекс, ЕстьПризнакБалансовый, СдвигИндекса); + Индекс = Индекс - 1; + КонецЦикла; + Иначе + Для Каждого ПолеКоллекции Из КоллекцияПолей Цикл + СдвинутьЭлементКоллекции(ПолеКоллекции, + СписокПолей, ОбщийИндекс, ЕстьПризнакБалансовый, СдвигИндекса); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СдвинутьЭлементКоллекции(ПолеКоллекции, СписокПолей, ОбщийИндекс, ЕстьПризнакБалансовый, СдвигИндекса) + + Если ЕстьПризнакБалансовый Тогда + СдвинутьЭлемент(ПолеКоллекции.Имя + "Дт", СписокПолей, ОбщийИндекс, СдвигИндекса); + СдвинутьЭлемент(ПолеКоллекции.Имя + "Кт", СписокПолей, ОбщийИндекс, СдвигИндекса); + Иначе + СдвинутьЭлемент(ПолеКоллекции.Имя, СписокПолей, ОбщийИндекс, СдвигИндекса); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СдвинутьЭлемент(ИмяПоля, СписокПолей, Индекс, СдвигИндекса = -1) + + ЭлементСписка = СписокПолей.НайтиПоЗначению(ИмяПоля); + + Если ЭлементСписка = Неопределено Или ЭлементСписка.Пометка Тогда + Возврат; + КонецЕсли; + + Сдвиг = Индекс - СписокПолей.Индекс(ЭлементСписка); + + СписокПолей.Сдвинуть(ЭлементСписка, Сдвиг); + ЭлементСписка.Пометка = Истина; + + Индекс = Индекс + СдвигИндекса; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Reports/АнализПравДоступа/Help/ru.html b/SSL/src/Reports/АнализПравДоступа/Help/ru.html index e7a608c7e..2fa6175d9 100644 --- a/SSL/src/Reports/АнализПравДоступа/Help/ru.html +++ b/SSL/src/Reports/АнализПравДоступа/Help/ru.html @@ -4,19 +4,22 @@
            18. Какие данные доступны конкретному пользователю? Может ли он их изменить?
            19. Кто имеет доступ к отчетам?
            20. Какие данные выводит тот или иной отчет?
            21. Открывается с помощью ссылки в разделе Администрирование - Настройка пользователей и прав - Пользователи. -
              Также можно открыть отчет (в данном случае отчет будет выдан без возможности выбора таблиц)
              • из списка Пользователи с помощью команды Еще - Отчеты - Права пользователя;
              • +
                Также можно открыть отчет (в данном случае отчет будет выдан без возможности выбора таблиц)
                • из списка Пользователи с помощью команды Еще - Отчеты - Права пользователей;
                • из карточки пользователя - с помощью кнопки Отчеты - Права пользователя;
                • из всех списков и других отчетов (показываются только встроенные отчеты и отчеты, добавленные в расширениях. Не показывает дополнительные отчеты.) с помощью команды Еще - Отчеты - Права пользователей.

                Работа с отчетом

                -
                • Отчет выдается по всем таблицам и пользователям. Нажав мышью на нужную ячейку, можно вывести расшифровку прав конкретного пользователя на выбранную таблицу.
                • +
                  • Отчет выдается по всем таблицам и пользователям. Нажав мышью на нужную ячейку или с помощью контекстного меню, можно вывести расшифровку прав конкретного пользователя на выбранную таблицу.
                  • Выдается сводная и подробная информация об уровне доступа пользователей к отчетам и таблицам информационной базы:
                  • -
                    • Какие именно пользователи имеют права на просмотр, редактирование или создание тех или иных справочников, документов и т.д., с расшифровкой до групп доступа, посредством которых им предоставлены эти права.
                  • Можно сгруппировать таблицы по отчетам, в которых выводятся данные из этих таблиц.
                  • +
                    • Какие именно пользователи имеют права на просмотр, редактирование или создание тех или иных справочников, документов и т.д., с расшифровкой до групп доступа, посредством которых им предоставлены эти права.
                  • Можно дополнительно вывести информацию о доступных неинтерактивных правах, с помощью которых можно получить доступ к данным программно: с помощью расширений, внешних отчетов и обработок, через консоль запросов и т.д. Данные уточнения выводятся, если в ролях выключены соответствующие интерактивные права  просмотр и программное чтение, изменение (R - чтение, U - изменение, I - добавление). 
                  • +
                  • Можно сгруппировать таблицы по отчетам, в которых выводятся данные из этих таблиц.
                  • Можно уточнить отчет, указав в полях Таблица и Пользователь нужные значения, или выбрав ячейку в отчете.
                    • Можно выбрать пользователя из списка. В этом случае отчет выдается по конкретному пользователю;
                    • -
                    • Для расшифровки прав пользователя дважды щелкните по одной из ячеек в строке.
                  • Показывает разрешенные значения для ограничений на уровне записей (RLS). Нажав мышью на нужную ячейку, можно вывести расшифровку прав конкретного пользователя на выбранную таблицу. Признак RLS выводится, как примечание "Доступно не все". 
                  • -
                    • Расшифровка права: просмотр видов доступа и значений доступа (ограничений доступа - RLS). 
                    • +
                    • Для расшифровки прав пользователя дважды щелкните по одной из ячеек в строке.
                  • Показывает разрешенные значения для ограничений на уровне записей (RLS). Нажав мышью на нужную ячейку, можно вывести расшифровку прав конкретного пользователя на выбранную таблицу. Признак RLS выводится, как примечание "Есть ограничение".
                  • +
                    • Расшифровка права: просмотр видов доступа и значений доступа (ограничений доступа - RLS).
                    • Для каждой папки можно открыть права доступа пользователя к этой папке. Кроме расшифровки прав для каждой папки, выводится также расшифровка прав на эту таблицу для каждой группы доступа, в которую включен данный пользователь.
                    • Возможна расшифровка любого значения доступа: нажав на ячейку со значением доступа, можно просмотреть группу доступа с позиционированием на значение доступа.
                    • При расшифровке прав пользователя на таблицу, которая является владельцем настроек прав, дополнительно выводятся и сами настройки прав (на уровне записей).
                -

                См. также:

                +
                • В списках, в карточках документов, элементах справочниках доступны два контекстных отчета (Еще - Отчеты):
                • +
                  • Права пользователя на объект - можно посмотреть права на конкретный документ, элемент справочника или любой другой объект с учетом ограничений доступа на уровне записей (RLS). К отчету можно перейти с помощью команд Права на документ и Права на элемент справочника в меню Еще - Отчеты.
                  • +
                  • Права пользователей в разрезе разрешенного значения - отчет показывает для каких пользователей и какой доступ имеется к данным, связанным с выбранной организацией (складом, кассой и т.п.). Отчет открывается с помощью команды Права в разрезе значения в меню Еще - Отчеты.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl b/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl index 05fc119ec..89e4307e5 100644 --- a/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl +++ b/SSL/src/Reports/АнализПравДоступа/ManagerModule.bsl @@ -24,45 +24,14 @@ Возврат; КонецЕсли; - ПредставлениеВарианта = НСтр("ru = 'Права пользователей'"); - ТолькоВоВсехДействиях = Ложь; - ВажностьВарианта = ""; + ЭтоПользователи = Ложь; + ДобавитьКомандуПраваПользователей(КомандыОтчетов, Параметры, ЭтоПользователи); - Если Параметры.ИмяФормы = "Справочник.Пользователи.Форма.ФормаСписка" - Или Параметры.ИмяФормы = "Справочник.ВнешниеПользователи.Форма.ФормаСписка" Тогда - - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - Возврат; - КонецЕсли; - КлючВарианта = "ПраваПользователейНаТаблицы"; - - ИначеЕсли Параметры.ИмяФормы = "Справочник.Пользователи.Форма.ФормаЭлемента" - Или Параметры.ИмяФормы = "Справочник.ВнешниеПользователи.Форма.ФормаЭлемента" Тогда - - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда - Возврат; - КонецЕсли; - КлючВарианта = "ПраваПользователяНаТаблицы"; - ПредставлениеВарианта = НСтр("ru = 'Права пользователя'"); - - ИначеЕсли Не Пользователи.ЭтоПолноправныйПользователь() Тогда - КлючВарианта = "ПраваПользователяНаТаблицу"; - ПредставлениеВарианта = НСтр("ru = 'Права пользователя'"); - ТолькоВоВсехДействиях = Истина; - ВажностьВарианта = "СмТакже"; - Иначе - КлючВарианта = "ПраваПользователейНаТаблицу"; - ТолькоВоВсехДействиях = Истина; - ВажностьВарианта = "СмТакже"; + Если Не ЭтоПользователи И УправлениеДоступом.ПроизводительныйВариант() Тогда + ДобавитьКомандуПраваНаЭлементДанных(КомандыОтчетов, Параметры); КонецЕсли; - Команда = КомандыОтчетов.Добавить(); - Команда.КлючВарианта = КлючВарианта; - Команда.Представление = ПредставлениеВарианта; - Команда.ТолькоВоВсехДействиях = ТолькоВоВсехДействиях; - Команда.МножественныйВыбор = Истина; - Команда.Важность = ВажностьВарианта; - Команда.Менеджер = "Отчет.АнализПравДоступа"; + ДобавитьКомандуПраваВРазрезеЗначения(КомандыОтчетов, Параметры); КонецПроцедуры @@ -117,6 +86,14 @@ НастройкиВарианта.Описание = НСтр("ru = 'Показывает права отдельного пользователя на разные таблицы информационной базы, сгруппированные по отчетам.'"); НастройкиВарианта.Включен = Ложь; + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователейНаОбъект"); + НастройкиВарианта.Описание = НСтр("ru = 'Показывает рассчитанные права пользователей на объект информационной базы (документ, элемент справочника и др.).'"); + НастройкиВарианта.Включен = Ложь; + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваПользователейВРазрезеРазрешенногоЗначения"); + НастройкиВарианта.Описание = НСтр("ru = 'Показывает пользователей, которым открыт доступ по выбранному значению (организация, склад и др.) к объектам информационной базы (документам, элементам справочника и др.'"); + НастройкиВарианта.Включен = Ложь; + КонецПроцедуры #КонецОбласти @@ -125,6 +102,150 @@ #Область СлужебныеПроцедурыИФункции +// Скрывает всю доступность или восстанавливает исходную доступность +// указанных полей набора данных не нужных для соответствующего варианта отчета. +// +// Параметры: +// ИмяНабораДанных - Строка - имя набора данных, как он указан в СКД. +// ПутиКДанным - Строка - если "*" - все поля доступны. +// - Массив из Строка - доступны только указанные поля. +// - Соответствие из КлючИЗначение: +// * Ключ - Строка - имя недоступного поля. +// * Значение - Булево - например, Ложь. +// ИсходнаяСхема - СхемаКомпоновкиДанных - схема, из которой получается доступность для доступных полей. +// ТекущаяСхема - СхемаКомпоновкиДанных - схема, в которой настраивается доступность полей. +// +Процедура СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных, ПутиКДанным, ИсходнаяСхема, ТекущаяСхема) Экспорт + + Если ИмяНабораДанных = "*" Тогда + ПоляДанных = ТекущаяСхема.ВычисляемыеПоля; + ИсходныеПоляДанных = ИсходнаяСхема.ВычисляемыеПоля; + Иначе + ПоляДанных = ТекущаяСхема.НаборыДанных[ИмяНабораДанных].Поля; + ИсходныеПоляДанных = ИсходнаяСхема.НаборыДанных[ИмяНабораДанных].Поля; + КонецЕсли; + + Для Каждого ПолеДанных Из ПоляДанных Цикл + Если ПутиКДанным = "*" + Или ТипЗнч(ПутиКДанным) = Тип("Массив") + И ПутиКДанным.Найти(ПолеДанных.ПутьКДанным) <> Неопределено + Или ТипЗнч(ПутиКДанным) = Тип("Соответствие") + И ПутиКДанным.Получить(ПолеДанных.ПутьКДанным) = Неопределено Тогда + + ИсходноеПолеДанных = ИсходныеПоляДанных.Найти(ПолеДанных.ПутьКДанным); + Если ИсходноеПолеДанных = Неопределено Тогда + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ПолеДанных.ОграничениеИспользования, + ИсходноеПолеДанных.ОграничениеИспользования); + Если ТипЗнч(ПолеДанных) <> Тип("ВычисляемоеПолеСхемыКомпоновкиДанных") Тогда + ЗаполнитьЗначенияСвойств(ПолеДанных.ОграничениеИспользованияРеквизитов, + ИсходноеПолеДанных.ОграничениеИспользованияРеквизитов); + КонецЕсли; + Продолжить; + КонецЕсли; + + ПолеДанных.ОграничениеИспользования.Поле = Истина; + ПолеДанных.ОграничениеИспользования.Условие = Истина; + ПолеДанных.ОграничениеИспользования.Группировка = Истина; + ПолеДанных.ОграничениеИспользования.Порядок = Истина; + Если ТипЗнч(ПолеДанных) <> Тип("ВычисляемоеПолеСхемыКомпоновкиДанных") Тогда + ЗаполнитьЗначенияСвойств(ПолеДанных.ОграничениеИспользованияРеквизитов, + ПолеДанных.ОграничениеИспользования); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура УстановитьИспользованиеГруппировки(ИмяГруппировки, Использование, + НастройкиКД, ПользовательскиеНастройкиКД) Экспорт + + Элемент = НайтиЭлементГруппировкиПоИмени(НастройкиКД.Структура, ИмяГруппировки); + Если Элемент <> Неопределено Тогда + Настройка = ПользовательскиеНастройкиКД.Элементы.Найти(Элемент.ИдентификаторПользовательскойНастройки); + Если Настройка = Неопределено Тогда + Элемент.Использование = Использование; + Иначе + Настройка.Использование = Использование; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для функции ГруппировкаПоОтчетамВключена +Функция НайтиЭлементГруппировкиПоИмени(КоллекцияЭлементов, Имя) + + Результат = Неопределено; + + Для Каждого Элемент Из КоллекцияЭлементов Цикл + Если ТипЗнч(Элемент) <> Тип("ГруппировкаКомпоновкиДанных") + И ТипЗнч(Элемент) <> Тип("ГруппировкаТаблицыКомпоновкиДанных") + И ТипЗнч(Элемент) <> Тип("ТаблицаКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + Если Элемент.Имя = Имя Тогда + Результат = Элемент; + ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда + Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Строки, Имя); + Если Результат = Неопределено Тогда + Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Колонки, Имя); + КонецЕсли; + Иначе + Результат = НайтиЭлементГруппировкиПоИмени(Элемент.Структура, Имя); + КонецЕсли; + Если Результат <> Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращаемое значение: +// ОписаниеТипов +// +Функция ОписаниеТиповГруппИЗначенийВидовДоступа(ВсеТипы = Неопределено) Экспорт + + ИспользуемыеВидыДоступа = УправлениеДоступомСлужебный.ИспользуемыеВидыДоступа(); + + Типы = Новый Массив; + ТаблицаЗначений = УправлениеДоступомСлужебныйПовтИсп.ТипыГруппИЗначенийВидовДоступа(); + Для Каждого СтрокаТЗ Из ТаблицаЗначений Цикл + Если ТипЗнч(СтрокаТЗ.ВидДоступа) = Тип("СправочникСсылка.Пользователи") + Или ТипЗнч(СтрокаТЗ.ВидДоступа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Продолжить; + КонецЕсли; + Тип = ТипЗнч(СтрокаТЗ.ТипГруппИЗначений); + Если ВсеТипы <> Неопределено Тогда + ВсеТипы.Добавить(Тип); + КонецЕсли; + Если ИспользуемыеВидыДоступа.Получить(СтрокаТЗ.ВидДоступа) <> Неопределено Тогда + Типы.Добавить(Тип); + КонецЕсли; + КонецЦикла; + + Типы.Добавить(Тип("СправочникСсылка.Пользователи")); + Типы.Добавить(Тип("СправочникСсылка.ГруппыПользователей")); + Если ВсеТипы <> Неопределено Тогда + ВсеТипы.Добавить(Тип("СправочникСсылка.Пользователи")); + ВсеТипы.Добавить(Тип("СправочникСсылка.ГруппыПользователей")); + КонецЕсли; + + Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда + Типы.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + Типы.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + Если ВсеТипы <> Неопределено Тогда + ВсеТипы.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + ВсеТипы.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + КонецЕсли; + КонецЕсли; + + Возврат Новый ОписаниеТипов(Типы); + +КонецФункции + // Параметры: // АдресДанныхРасшифровки - Строка - адрес временного хранилища данных расшифровки отчета. // Расшифровка - ИдентификаторРасшифровкиКомпоновкиДанных - элемент расшифровки. @@ -135,6 +256,7 @@ // * СписокПолей - Соответствие из КлючИЗначение: // ** Ключ - Строка // ** Значение - Произвольный +// * ДоступенОтчетПраваРолей - Булево // Функция ПараметрыРасшифровки(АдресДанныхРасшифровки, Расшифровка) Экспорт @@ -153,10 +275,50 @@ Результат = Новый Структура; Результат.Вставить("ИмяПоляРасшифровки", ИмяПоляРасшифровки); Результат.Вставить("СписокПолей", СписокПолей); + Результат.Вставить("ДоступенОтчетПраваРолей", + ПравоДоступа("Просмотр", Метаданные.Отчеты.ПраваРолей)); ПараметрФорматИмени = Новый ПараметрКомпоновкиДанных("ФорматИмени"); - Если ДанныеРасшифровки.Настройки.ПараметрыДанных.Элементы.Найти(ПараметрФорматИмени) <> Неопределено Тогда - // Отчет.ПраваРолей + ЭтоОтчетПраваРолей = ДанныеРасшифровки.Настройки.ПараметрыДанных.Элементы.Найти(ПараметрФорматИмени) <> Неопределено; + + ЗначениеРасшифровки = СписокПолей.Получить(ИмяПоляРасшифровки); + ПолноеИмяОбъекта = СписокПолей.Получить("ПолноеИмяОбъекта"); + + Если (ИмяПоляРасшифровки = "ОбъектМетаданныхЗаголовкаОтчета" + Или ИмяПоляРасшифровки = "ОбъектМетаданных" + Или ИмяПоляРасшифровки = "ОтчетЗаголовок" + Или ИмяПоляРасшифровки = "Отчет") + И ЗначениеЗаполнено(ЗначениеРасшифровки) + Или ЭтоОтчетПраваРолей + И ЗначениеЗаполнено(ПолноеИмяОбъекта) + И СписокПолей.Получить("ИмяРоли") = Неопределено Тогда + + Если ЭтоОтчетПраваРолей Тогда + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ПолноеИмяОбъекта); + Иначе + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ЗначениеРасшифровки, Ложь); + КонецЕсли; + Если ТипЗнч(ОбъектМетаданных) = Тип("ОбъектМетаданных") Тогда + Попытка + НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ОбъектМетаданных); + Исключение + Если Метаданные.ОбщиеФормы.Содержит(ОбъектМетаданных) Тогда + НавигационнаяСсылка = "e1cib/app/" + ОбъектМетаданных.ПолноеИмя(); + Иначе + НавигационнаяСсылка = ""; // Навигационной ссылки может не быть. + КонецЕсли; + КонецПопытки; + Если (СтрНайти(НавигационнаяСсылка, "/command/") > 0 + Или СтрНачинаетсяС(НавигационнаяСсылка, "e1cib/list/") + Или СтрНачинаетсяС(НавигационнаяСсылка, "e1cib/app/")) + И ПравоДоступа("Просмотр", ОбъектМетаданных) Тогда + СписокПолей.Вставить("ОбъектМетаданныхНавигационнаяСсылка", НавигационнаяСсылка); + КонецЕсли; + СписокПолей.Вставить("ОбъектМетаданныхПолноеИмя", ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + КонецЕсли; + + Если ЭтоОтчетПраваРолей Тогда Возврат Результат; КонецЕсли; @@ -178,19 +340,6 @@ КонецЕсли; КонецЕсли; - ЗначениеРасшифровки = СписокПолей.Получить(ИмяПоляРасшифровки); - - Если ИмяПоляРасшифровки = "ОбъектМетаданныхЗаголовкаОтчета" Тогда - Если ЗначениеЗаполнено(ЗначениеРасшифровки) Тогда - ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ЗначениеРасшифровки, Ложь); - Если ТипЗнч(ОбъектМетаданных) = Тип("ОбъектМетаданных") - И ПравоДоступа("Просмотр", ОбъектМетаданных) Тогда - СписокПолей.Вставить("ОбъектМетаданныхНавигационнаяСсылка", - ПолучитьНавигационнуюСсылку(ОбъектМетаданных)); - КонецЕсли; - КонецЕсли; - КонецЕсли; - МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРасшифровки)); Если МетаданныеЗначения = Неопределено Или Не ПравоДоступа("Просмотр", МетаданныеЗначения) @@ -239,14 +388,21 @@ // Если записи по праву нет, значит ограничений по праву нет. // // Параметры: -// ДляВнешнихПользователей - Булево - когда Истина вернуть ограничения для внешних пользователей. -// Учитывается только для универсального ограничения. -// -// ВидДоступаДляТаблицСОтключеннымИспользованием - Булево - если Истина, тогда для таблиц -// с отключенным использованием (только универсальное ограничение) добавить -// вид доступа "Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен". +// ДляВнешнихПользователей - Булево, Неопределено - когда Истина вернуть ограничения +// для внешних пользователей, Ложь - для пользователей, Неопределено для тех и других. // Учитывается только для универсального ограничения. // +// ДобавитьЭтоАвторизованныйПользователь - Булево - добавить +// вид доступа Пользователи или ВнешниеПользователи с признаком +// ЭтоАвторизованныйПользователь, если для таблицы есть проверка +// только с помощью функции ЭтоАвторизованныйПользователь. +// +// ВсеТаблицыСОграничением - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных +// - Массив из СправочникСсылка.ИдентификаторыОбъектовРасширений - возвращаемое значение. +// Если указан массив, тогда в него добавляются таблицы, +// для которых предусмотрен RLS с помощью подсистемы УправлениеДоступом. +// - Неопределено - не требуется. +// // Возвращаемое значение: // ТаблицаЗначений: // * ДляВнешнихПользователей - Булево - если Ложь, тогда ограничение для пользователей, @@ -254,12 +410,26 @@ // Колонка присутствует только для универсального ограничения. // * Таблица - СправочникСсылка.ИдентификаторыОбъектовМетаданных // - СправочникСсылка.ИдентификаторыОбъектовРасширений - идентификатор таблицы. -// * ВидДоступа - ЛюбаяСсылка - пустая ссылка основного типа значений вида доступа. +// * ВидДоступа - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа +// значений вида доступа или одно из следующих значений +// 1. Перечисление.ДополнительныеЗначенияДоступа.Неопределено <Ограничение без видов доступа>. +// В стандартном варианте это соответствует наличию одного из следующих ключевых слов +// в одном из параметров ВидДоступа стандартного шаблона ограничения доступа +// "Объект", "НастройкиПрав", "ПравоЧтения", "ПравоИзменения", +// "ПравоЧтенияПоИдентификатору", "ПравоИзмененияПоИдентификатору". +// В производительном варианте это соответствует наличию одной из следующих функций +// в ограничение доступа объекта +// ЧтениеОбъектаРазрешено, ИзменениеОбъектаРазрешено, ЧтениеСпискаРазрешено, +// ИзменениеСпискаРазрешено, ЭтоАвторизованныйПользователь, ПравоДоступа, РольДоступна. +// 2. Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен <Ограничение отключено>. +// 3. Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен <Доступ запрещен> (ограничение "ГДЕ ЛОЖЬ"). // * Представление - Строка - представление вида доступа. // * Право - Строка - "Чтение", "Изменение". +// * ЭтоАвторизованныйПользователь - Булево - может быть Истина, +// если включен параметр ДобавитьЭтоАвторизованныйПользователь. // -Функция ВидыОграниченийПрав(ДляВнешнихПользователей = Неопределено, - ВидДоступаДляТаблицСОтключеннымИспользованием = Ложь) Экспорт +Функция ВидыОграниченийПрав(ДляВнешнихПользователей = Неопределено, ДобавитьЭтоАвторизованныйПользователь = Ложь, + ВсеТаблицыСОграничением = Неопределено) Экспорт УниверсальноеОграничение = УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина, Истина); @@ -276,8 +446,8 @@ УправлениеДоступомСлужебныйПовтИсп.ТипыЗначенийВидовДоступаИВладельцевНастроекПрав().Получить(); // ТаблицаЗначений Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПостоянныеВидыОграничений", - УправлениеДоступомСлужебныйПовтИсп.ПостоянныеВидыОграниченийПравОбъектовМетаданных()); + ПостоянныеВидыОграничений = УправлениеДоступомСлужебныйПовтИсп.ПостоянныеВидыОграниченийПравОбъектовМетаданных(); + Запрос.УстановитьПараметр("ПостоянныеВидыОграничений", ПостоянныеВидыОграничений); Если УниверсальноеОграничение Тогда Запрос.Текст = @@ -286,12 +456,14 @@ | ПостоянныеВидыОграничений.ПолноеИмя КАК ПолноеИмя, | ПостоянныеВидыОграничений.Таблица КАК Таблица, | ПостоянныеВидыОграничений.Право КАК Право, - | ПостоянныеВидыОграничений.ВидДоступа КАК ВидДоступа + | ПостоянныеВидыОграничений.ВидДоступа КАК ВидДоступа, + | ПостоянныеВидыОграничений.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь |ПОМЕСТИТЬ ПостоянныеВидыОграничений |ИЗ | &ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений |ГДЕ | &ОтборДляВнешнихПользователей + | И &ОтборЭтоАвторизованныйПользователь |; | |//////////////////////////////////////////////////////////////////////////////// @@ -308,6 +480,7 @@ | ТаблицыСОтключеннымОграничением.ДляВнешнихПользователей КАК ДляВнешнихПользователей, | ТаблицыСОтключеннымОграничением.ПолноеИмя КАК ПолноеИмя, | ТаблицыСОтключеннымОграничением.Таблица КАК Таблица, + | ТаблицыСОтключеннымОграничением.Право КАК Право, | ТаблицыСОтключеннымОграничением.ВидДоступа КАК ВидДоступа, | ТаблицыСОтключеннымОграничением.Представление КАК Представление |ПОМЕСТИТЬ ТаблицыСОтключеннымОграничением @@ -321,14 +494,15 @@ | ВидыОграниченийПрав.Таблица КАК Таблица, | ВидыОграниченийПрав.Право КАК Право, | ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, - | ВидыОграниченийПрав.Представление КАК Представление + | ВидыОграниченийПрав.Представление КАК Представление, + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь |ИЗ | (ВЫБРАТЬ | ПостоянныеВидыОграничений.ДляВнешнихПользователей КАК ДляВнешнихПользователей, | ПостоянныеВидыОграничений.Таблица КАК Таблица, | ВЫБОР | КОГДА НЕ ТаблицыСОтключеннымОграничением.ПолноеИмя ЕСТЬ NULL - | ТОГДА """" + | ТОГДА ТаблицыСОтключеннымОграничением.Право | ИНАЧЕ ПостоянныеВидыОграничений.Право | КОНЕЦ КАК Право, | ВЫБОР @@ -340,12 +514,19 @@ | КОГДА НЕ ТаблицыСОтключеннымОграничением.ПолноеИмя ЕСТЬ NULL | ТОГДА ТаблицыСОтключеннымОграничением.Представление | ИНАЧЕ ЕСТЬNULL(ВидыДоступаСПредставлением.Представление, &ПредставлениеНеизвестногоВидаДоступа) - | КОНЕЦ КАК Представление + | КОНЕЦ КАК Представление, + | ВЫБОР + | КОГДА НЕ ТаблицыСОтключеннымОграничением.ПолноеИмя ЕСТЬ NULL + | ТОГДА ЛОЖЬ + | ИНАЧЕ ПостоянныеВидыОграничений.ЭтоАвторизованныйПользователь + | КОНЕЦ КАК ЭтоАвторизованныйПользователь | ИЗ | ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыСОтключеннымОграничением КАК ТаблицыСОтключеннымОграничением | ПО (ТаблицыСОтключеннымОграничением.ДляВнешнихПользователей = ПостоянныеВидыОграничений.ДляВнешнихПользователей) | И (ТаблицыСОтключеннымОграничением.ПолноеИмя = ПостоянныеВидыОграничений.ПолноеИмя) + | И (ТаблицыСОтключеннымОграничением.Право = ПостоянныеВидыОграничений.Право) + | И (ПостоянныеВидыОграничений.ЭтоАвторизованныйПользователь = ЛОЖЬ) | ЛЕВОЕ СОЕДИНЕНИЕ ВидыДоступаСПредставлением КАК ВидыДоступаСПредставлением | ПО (ВидыДоступаСПредставлением.ВидДоступа = ПостоянныеВидыОграничений.ВидДоступа) | ГДЕ @@ -356,9 +537,10 @@ | ВЫБРАТЬ | ТаблицыСОтключеннымОграничением.ДляВнешнихПользователей, | ТаблицыСОтключеннымОграничением.Таблица, - | """", + | ТаблицыСОтключеннымОграничением.Право, | ТаблицыСОтключеннымОграничением.ВидДоступа, - | ТаблицыСОтключеннымОграничением.Представление + | ТаблицыСОтключеннымОграничением.Представление, + | ЛОЖЬ | ИЗ | ТаблицыСОтключеннымОграничением КАК ТаблицыСОтключеннымОграничением | ЛЕВОЕ СОЕДИНЕНИЕ ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений @@ -379,9 +561,9 @@ ВидыДоступаСПредставлением(ТипыЗначенийВидовДоступа, Ложь)); Запрос.УстановитьПараметр("ПредставлениеНеизвестногоВидаДоступа", ПредставлениеНеизвестногоВидаДоступа()); - Запрос.УстановитьПараметр("ТаблицыСОтключеннымОграничением", - ТаблицыСОтключеннымОграничением(ДляВнешнихПользователей, - ВидДоступаДляТаблицСОтключеннымИспользованием)); + ТаблицыСОтключеннымОграничением = ТаблицыСОтключеннымОграничением(ДляВнешнихПользователей, + ПостоянныеВидыОграничений); + Запрос.УстановитьПараметр("ТаблицыСОтключеннымОграничением", ТаблицыСОтключеннымОграничением); Иначе Запрос.УстановитьПараметр("ТипыЗначенийВидовДоступа", ТипыЗначенийВидовДоступа); Запрос.УстановитьПараметр("ИспользуемыеВидыДоступа", @@ -393,10 +575,13 @@ | ПостоянныеВидыОграничений.Таблица КАК Таблица, | ПостоянныеВидыОграничений.Право КАК Право, | ПостоянныеВидыОграничений.ВидДоступа КАК ВидДоступа, - | ПостоянныеВидыОграничений.ТаблицаОбъекта КАК ТаблицаОбъекта + | ПостоянныеВидыОграничений.ТаблицаОбъекта КАК ТаблицаОбъекта, + | ПостоянныеВидыОграничений.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь |ПОМЕСТИТЬ ПостоянныеВидыОграничений |ИЗ | &ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений + |ГДЕ + | &ОтборЭтоАвторизованныйПользователь |; | |//////////////////////////////////////////////////////////////////////////////// @@ -456,20 +641,25 @@ |ВЫБРАТЬ | ПостоянныеВидыОграничений.Таблица КАК Таблица, | ПостоянныеВидыОграничений.Право КАК Право, - | ТипыЗначенийВидовДоступа.ВидДоступа КАК ВидДоступа + | ПостоянныеВидыОграничений.ВидДоступа КАК ВидДоступа, + | ПостоянныеВидыОграничений.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь |ПОМЕСТИТЬ ВсеВидыОграниченийПрав |ИЗ | ПостоянныеВидыОграничений КАК ПостоянныеВидыОграничений - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа | ПО ПостоянныеВидыОграничений.ВидДоступа = ТипыЗначенийВидовДоступа.ВидДоступа - | И (ПостоянныеВидыОграничений.ВидДоступа <> НЕОПРЕДЕЛЕНО) + |ГДЕ + | ПостоянныеВидыОграничений.ВидДоступа <> НЕОПРЕДЕЛЕНО + | И (НЕ ТипыЗначенийВидовДоступа.ВидДоступа ЕСТЬ NULL + | ИЛИ ТИПЗНАЧЕНИЯ(ПостоянныеВидыОграничений.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа)) | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | ПеременныеВидыОграничений.Таблица, | ПеременныеВидыОграничений.Право, - | ТипыЗначенийВидовДоступа.ВидДоступа + | ТипыЗначенийВидовДоступа.ВидДоступа, + | ЛОЖЬ |ИЗ | ПеременныеВидыОграничений КАК ПеременныеВидыОграничений | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТипыЗначенийВидовДоступа КАК ТипыЗначенийВидовДоступа @@ -481,14 +671,22 @@ | ВсеВидыОграниченийПрав.Таблица КАК Таблица, | ВсеВидыОграниченийПрав.Право КАК Право, | ВсеВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, - | ИспользуемыеВидыДоступа.Представление КАК Представление + | ВсеВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь, + | ЕСТЬNULL(ИспользуемыеВидыДоступа.Представление, """") КАК Представление |ИЗ | ВсеВидыОграниченийПрав КАК ВсеВидыОграниченийПрав - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа - | ПО ВсеВидыОграниченийПрав.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа"; + | ЛЕВОЕ СОЕДИНЕНИЕ ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа + | ПО ВсеВидыОграниченийПрав.ВидДоступа = ИспользуемыеВидыДоступа.ВидДоступа + |ГДЕ + | (НЕ ИспользуемыеВидыДоступа.ВидДоступа ЕСТЬ NULL + | ИЛИ ВсеВидыОграниченийПрав.ЭтоАвторизованныйПользователь)"; // АПК:96-вкл. КонецЕсли; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборЭтоАвторизованныйПользователь", + ?(ДобавитьЭтоАвторизованныйПользователь, "ИСТИНА", + "ПостоянныеВидыОграничений.ЭтоАвторизованныйПользователь = ЛОЖЬ")); + Выгрузка = Запрос.Выполнить().Выгрузить(); Если Не УниверсальноеОграничение Тогда @@ -496,6 +694,17 @@ Кэш.ДатаОбновления = ТекущаяДатаСеанса(); КонецЕсли; + Если ВсеТаблицыСОграничением <> Неопределено Тогда + ТаблицыСОграничением = ПостоянныеВидыОграничений.Скопировать(, "Таблица"); + Если УниверсальноеОграничение Тогда + Для Каждого СтрокаТЗ Из ТаблицыСОтключеннымОграничением Цикл + ТаблицыСОграничением.Добавить().Таблица = СтрокаТЗ.Таблица; + КонецЦикла; + КонецЕсли; + ТаблицыСОграничением.Свернуть("Таблица"); + ВсеТаблицыСОграничением = ТаблицыСОграничением.ВыгрузитьКолонку("Таблица"); + КонецЕсли; + Возврат Выгрузка; КонецФункции @@ -535,6 +744,10 @@ Индекс = Индекс - 1; КонецЦикла; + НоваяСтрока = ВидыДоступа.Добавить(); + НоваяСтрока.ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.Неопределено; + НоваяСтрока.Представление = ПредставлениеОграниченияБезВидовДоступа(); + Возврат ВидыДоступа; КонецФункции @@ -547,7 +760,7 @@ КонецФункции // Для функции ВидыОграниченийПрав. -Функция ТаблицыСОтключеннымОграничением(ДляВнешнихПользователей, Заполнять) +Функция ТаблицыСОтключеннымОграничением(ДляВнешнихПользователей, ПостоянныеВидыОграничений) ТипыИдентификаторов = Новый Массив; ТипыИдентификаторов.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); @@ -558,21 +771,18 @@ Результат.Колонки.Добавить("ПолноеИмя", Метаданные.Справочники.ИдентификаторыОбъектовМетаданных.Реквизиты.ПолноеИмя.Тип); Результат.Колонки.Добавить("Таблица", Новый ОписаниеТипов(ТипыИдентификаторов)); + Результат.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20))); Результат.Колонки.Добавить("ВидДоступа", УправлениеДоступомСлужебныйПовтИсп.ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150))); - Если Не Заполнять Тогда - Возврат Результат; - КонецЕсли; - ДействующиеПараметры = УправлениеДоступомСлужебный.ДействующиеПараметрыОграниченияДоступа( Неопределено, Неопределено, Ложь); Если ДляВнешнихПользователей <> Истина Тогда - ДобавитьТаблицыСОтключеннымОграничением(Результат, ДействующиеПараметры, Ложь); + ДобавитьТаблицыСОтключеннымОграничением(Результат, ДействующиеПараметры, ПостоянныеВидыОграничений, Ложь); КонецЕсли; Если ДляВнешнихПользователей <> Ложь Тогда - ДобавитьТаблицыСОтключеннымОграничением(Результат, ДействующиеПараметры, Истина); + ДобавитьТаблицыСОтключеннымОграничением(Результат, ДействующиеПараметры, ПостоянныеВидыОграничений, Истина); КонецЕсли; ПолныеИмена = Результат.ВыгрузитьКолонку("ПолноеИмя"); ИдентификаторыИмен = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ПолныеИмена, Ложь); @@ -586,7 +796,7 @@ // Для функции ТаблицыСОтключеннымОграничением. Процедура ДобавитьТаблицыСОтключеннымОграничением(ТаблицыСОтключеннымОграничением, - ДействующиеПараметры, ДляВнешнихПользователей) + ДействующиеПараметры, ПостоянныеВидыОграничений, ДляВнешнихПользователей) Если ДляВнешнихПользователей Тогда ДополнительныйКонтекст = ДействующиеПараметры.ДополнительныйКонтекст.ДляВнешнихПользователей; @@ -594,29 +804,211 @@ ДополнительныйКонтекст = ДействующиеПараметры.ДополнительныйКонтекст.ДляПользователей; КонецЕсли; - СпискиСОтключеннымОграничением = ДополнительныйКонтекст.СпискиСОтключеннымОграничением; - СвойстваОграниченияСписков = ДополнительныйКонтекст.СвойстваОграниченияСписков; + СпискиСОтключеннымОграничением = ДополнительныйКонтекст.СпискиСОтключеннымОграничением; + СпискиСОтключеннымОграничениемЧтения = ДополнительныйКонтекст.СпискиСОтключеннымОграничениемЧтения; + СвойстваОграниченияСписков = ДополнительныйКонтекст.СвойстваОграниченияСписков; Для Каждого КлючИЗначение Из СвойстваОграниченияСписков Цикл ПолноеИмя = КлючИЗначение.Ключ; - Если Не КлючИЗначение.Значение.ДоступЗапрещен - И СпискиСОтключеннымОграничением.Получить(ПолноеИмя) = Неопределено Тогда + Свойства = КлючИЗначение.Значение; + ВидДоступа = Неопределено; + Права = "Чтение,Изменение"; + + Если Свойства.ДоступЗапрещен Тогда + ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступЗапрещен; + Представление = "<" + НСтр("ru = 'Доступ запрещен'") + ">"; + + ИначеЕсли СпискиСОтключеннымОграничением.Получить(ПолноеИмя) <> Неопределено Тогда + ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступРазрешен; + Представление = "<" + НСтр("ru = 'Ограничение отключено'") + ">"; + Иначе + Если СпискиСОтключеннымОграничениемЧтения.Получить(ПолноеИмя) <> Неопределено Тогда + НоваяСтрока = ТаблицыСОтключеннымОграничением.Добавить(); + НоваяСтрока.ДляВнешнихПользователей = ДляВнешнихПользователей; + НоваяСтрока.ПолноеИмя = ПолноеИмя; + НоваяСтрока.Право = "Чтение"; + НоваяСтрока.ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступРазрешен; + НоваяСтрока.Представление = "<" + НСтр("ru = 'Ограничение чтения отключено'") + ">"; + Права = "Изменение"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Свойства.ИспользуемыеТипыЗначенийДоступа.Получить()) Тогда + Отбор = Новый Структура("ПолноеИмя, ДляВнешнихПользователей", ПолноеИмя, ДляВнешнихПользователей); + Если Права = "Изменение" Тогда + Отбор.Вставить("Право", "Изменение"); + КонецЕсли; + Если ПостоянныеВидыОграничений.НайтиСтроки(Отбор).Количество() > 0 Тогда + ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.Неопределено; + Представление = ПредставлениеОграниченияБезВидовДоступа(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ВидДоступа = Неопределено Тогда Продолжить; КонецЕсли; - НоваяСтрока = ТаблицыСОтключеннымОграничением.Добавить(); - НоваяСтрока.ДляВнешнихПользователей = ДляВнешнихПользователей; - НоваяСтрока.ПолноеИмя = ПолноеИмя; - Если КлючИЗначение.Значение.ДоступЗапрещен Тогда - НоваяСтрока.ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступЗапрещен; - НоваяСтрока.Представление = "<" + НСтр("ru = 'Доступ запрещен'") + ">"; - Иначе - НоваяСтрока.ВидДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступРазрешен; - НоваяСтрока.Представление = "<" + НСтр("ru = 'Ограничение отключено'") + ">"; - КонецЕсли; + + Для Каждого Право Из СтрРазделить(Права, ",") Цикл + НоваяСтрока = ТаблицыСОтключеннымОграничением.Добавить(); + НоваяСтрока.ДляВнешнихПользователей = ДляВнешнихПользователей; + НоваяСтрока.ПолноеИмя = ПолноеИмя; + НоваяСтрока.Право = Право; + НоваяСтрока.ВидДоступа = ВидДоступа; + НоваяСтрока.Представление = Представление; + КонецЦикла; КонецЦикла; КонецПроцедуры +Функция ПредставлениеОграниченияБезВидовДоступа() Экспорт + Возврат "<" + НСтр("ru = 'Ограничение без видов доступа'") + ">"; +КонецФункции + + +Процедура ДобавитьКомандуПраваПользователей(КомандыОтчетов, Параметры, ЭтоПользователи) + + ПредставлениеВарианта = НСтр("ru = 'Права пользователей'"); + ТолькоВоВсехДействиях = Ложь; + ВажностьВарианта = ""; + + Если Параметры.ИмяФормы = "Справочник.Пользователи.Форма.ФормаСписка" + Или Параметры.ИмяФормы = "Справочник.ВнешниеПользователи.Форма.ФормаСписка" Тогда + + ЭтоПользователи = Истина; + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат; + КонецЕсли; + КлючВарианта = "ПраваПользователейНаТаблицы"; + + ИначеЕсли Параметры.ИмяФормы = "Справочник.Пользователи.Форма.ФормаЭлемента" + Или Параметры.ИмяФормы = "Справочник.ВнешниеПользователи.Форма.ФормаЭлемента" Тогда + + ЭтоПользователи = Истина; + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат; + КонецЕсли; + КлючВарианта = "ПраваПользователяНаТаблицы"; + ПредставлениеВарианта = НСтр("ru = 'Права пользователя'"); + Иначе + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + КлючВарианта = "ПраваПользователяНаТаблицу"; + ПредставлениеВарианта = НСтр("ru = 'Права пользователя'"); + Иначе + КлючВарианта = "ПраваПользователейНаТаблицу"; + КонецЕсли; + ТолькоВоВсехДействиях = Истина; + ВажностьВарианта = "СмТакже"; + КонецЕсли; + + Команда = КомандыОтчетов.Добавить(); + Команда.КлючВарианта = КлючВарианта; + Команда.Представление = ПредставлениеВарианта; + Команда.ТолькоВоВсехДействиях = ТолькоВоВсехДействиях; + Команда.МножественныйВыбор = Истина; + Команда.Важность = ВажностьВарианта; + Команда.Менеджер = "Отчет.АнализПравДоступа"; + +КонецПроцедуры + +Процедура ДобавитьКомандуПраваНаЭлементДанных(КомандыОтчетов, Параметры) + + ДобавитьКоманду = Истина; + ПредставлениеВарианта = ПредставлениеВариантаПраваПользователейНаОбъект(Параметры, ДобавитьКоманду); + + Если Не ДобавитьКоманду Тогда + Возврат; + КонецЕсли; + + Команда = КомандыОтчетов.Добавить(); + Команда.КлючВарианта = "ПраваПользователейНаОбъект"; + Команда.Представление = ПредставлениеВарианта; + Команда.ТолькоВоВсехДействиях = Истина; + Команда.МножественныйВыбор = Ложь; + Команда.Важность = "СмТакже"; + Команда.Менеджер = "Отчет.АнализПравДоступа"; + Команда.ТипПараметра = УправлениеДоступомСлужебныйПовтИсп.ТипыЭлементовДанных(); + +КонецПроцедуры + +Процедура ДобавитьКомандуПраваВРазрезеЗначения(КомандыОтчетов, Параметры) + + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат; + КонецЕсли; + + ВсеТипы = Новый Массив; + ТипИспользуемыхЗначений = ОписаниеТиповГруппИЗначенийВидовДоступа(ВсеТипы); + + ДобавитьКоманду = Ложь; + Для Каждого Тип Из Параметры.ТипыИсточников Цикл + Если ТипИспользуемыхЗначений.СодержитТип(Тип) Тогда + ДобавитьКоманду = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ДобавитьКоманду Тогда + Возврат; + КонецЕсли; + + Команда = КомандыОтчетов.Добавить(); + Команда.КлючВарианта = "ПраваПользователейВРазрезеРазрешенногоЗначения"; + Команда.Представление = НСтр("ru = 'Права в разрезе значения'"); + Команда.ТолькоВоВсехДействиях = Истина; + Команда.МножественныйВыбор = Ложь; + Команда.Важность = "СмТакже"; + Команда.Менеджер = "Отчет.АнализПравДоступа"; + Команда.ТипПараметра = Новый ОписаниеТипов(ВсеТипы); + +КонецПроцедуры + +Функция ПредставлениеВариантаПраваПользователейНаОбъект(Параметры, ДобавитьКоманду) + + ВидОбъектаМетаданных = ВРег(СтрРазделить(Параметры.ИмяФормы, ".")[0]); + Результат = Null; + + Если ВРег(ВидОбъектаМетаданных) = ВРег("ПланОбмена") Тогда + Результат = НСтр("ru = 'Права на план обмена'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("Справочник") Тогда + Результат = НСтр("ru = 'Права на элемент справочника'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("Документ") + Или ВРег(ВидОбъектаМетаданных) = ВРег("ЖурналДокументов") Тогда + + Результат = НСтр("ru = 'Права на документ'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("ПланВидовХарактеристик") Тогда + Результат = НСтр("ru = 'Права на план видов характеристик'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("ПланСчетов") Тогда + Результат = НСтр("ru = 'Права на план счетов'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("ПланВидовРасчета") Тогда + Результат = НСтр("ru = 'Права на план видов расчета'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("РегистрСведений") + Или ВРег(ВидОбъектаМетаданных) = ВРег("РегистрНакопления") + Или ВРег(ВидОбъектаМетаданных) = ВРег("РегистрБухгалтерии") + Или ВРег(ВидОбъектаМетаданных) = ВРег("РегистрРасчета") Тогда + + Результат = НСтр("ru = 'Права на строку регистра'"); + ДобавитьКоманду = Ложь; + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("БизнесПроцесс") Тогда + Результат = НСтр("ru = 'Права на бизнес-процесс'"); + + ИначеЕсли ВРег(ВидОбъектаМетаданных) = ВРег("Задача") Тогда + Результат = НСтр("ru = 'Права на задачу'"); + КонецЕсли; + + Если Результат = Null Тогда + ДобавитьКоманду = Ложь; + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецЕсли diff --git a/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl b/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl index a9882187a..ff8ebbfbc 100644 --- a/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl +++ b/SSL/src/Reports/АнализПравДоступа/ObjectModule.bsl @@ -23,6 +23,7 @@ // Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + Настройки.ОтключитьСтандартноеКонтекстноеМеню = Истина; Если КлючВарианта = "ПраваПользователяНаТаблицу" Тогда Настройки.РазрешеноИзменятьСтруктуру = Ложь; КонецЕсли; @@ -41,6 +42,7 @@ КонецЕсли; Если Форма.КонтекстВарианта = Метаданные.Справочники.Пользователи.ПолноеИмя() + И Форма.Параметры.КлючВарианта <> "ПраваПользователейВРазрезеРазрешенногоЗначения" И Форма.Параметры.Свойство("ПараметрКоманды") Тогда Если Форма.Параметры.ПараметрКоманды.Количество() > 1 Тогда Форма.КлючТекущегоВарианта = "ПраваПользователейНаТаблицы"; @@ -82,49 +84,45 @@ // Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт + Вариант = ?(НовыеНастройкиКД = Неопределено, "", + НовыеНастройкиКД.ДополнительныеСвойства.КлючПредопределенногоВарианта); + + Если Вариант = "АнализПравДоступа" Тогда + НастроитьВариантАнализПравДоступа(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); + + ИначеЕсли Вариант = "ПраваПользователейНаОбъект" Тогда + НастроитьВариантПраваПользователейНаОбъект(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); + + ИначеЕсли Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда + НастроитьВариантПраваПользователейВРазрезеРазрешенногоЗначения(НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); + КонецЕсли; + Если НовыеНастройкиКД <> Неопределено Тогда + СкрытьЛишниеПоляДанных(Вариант, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); + УстановитьДоступныеЗначенияПоляВидДоступа(Вариант, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); + КонецЕсли; + Если КлючСхемы <> "1" Тогда КлючСхемы = "1"; Если ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения") И НовыеНастройкиКД <> Неопределено Тогда РеквизитыФормы = Новый Структура("КонтекстВарианта"); ЗаполнитьЗначенияСвойств(РеквизитыФормы, Контекст); - Вариант = НовыеНастройкиКД.ДополнительныеСвойства.КлючПредопределенногоВарианта; - Если ЗначениеЗаполнено(РеквизитыФормы.КонтекстВарианта) Тогда - Если Вариант = "ПраваПользователейНаТаблицу" - Или Вариант = "ПраваПользователяНаТаблицу" Тогда - ОбъектМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Контекст.КонтекстВарианта, Ложь); - Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НовыеНастройкиКД.Отбор, "ОбъектМетаданных", ОбъектМетаданных, - ВидСравненияКомпоновкиДанных.Равно, , Истина); - КонецЕсли; - ИначеЕсли Вариант = "ПраваПользователейНаТаблицы" Или Вариант = "ПраваПользователяНаТаблицы" Тогда - Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда - СписокПользователей = Новый СписокЗначений; - СписокПользователей.ЗагрузитьЗначения(Контекст.Параметры.ПараметрКоманды); - ПользователиСлужебный.УстановитьОтборДляПараметра("Пользователь", СписокПользователей, - НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); - КонецЕсли; - КонецЕсли; + НастроитьПараметрыКонтекстногоОткрытия(Контекст, + Вариант, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); КонецЕсли; КонецЕсли; КонецЕсли; - СхемаИзменена = Ложь; - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда СхемаКомпоновкиДанных.Параметры.Пользователь.ОграничениеИспользования = Истина; СхемаКомпоновкиДанных.Параметры.ВидПользователей.ОграничениеИспользования = Истина; - СхемаИзменена = Истина; КонецЕсли; Если Не Константы.ИспользоватьВнешнихПользователей.Получить() Тогда СхемаКомпоновкиДанных.Параметры.ВидПользователей.ОграничениеИспользования = Истина; - СхемаИзменена = Истина; КонецЕсли; - Если СхемаИзменена - И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда - + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер"); МодульОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); КонецЕсли; @@ -165,6 +163,11 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; + Если ВариантПравНаОбъект() И Не УправлениеДоступом.ПроизводительныйВариант() Тогда + ТекстОшибки = НСтр("ru = 'Вариант отчета ""Права пользователей на объект"" поддерживается только в производительном варианте ограничений доступа на уровне записей (RLS).'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + НастройкиКомпоновщика = КомпоновщикНастроек.ПолучитьНастройки(); ПараметрВидПользователей = НастройкиКомпоновщика.ПараметрыДанных.Элементы.Найти("ВидПользователей"); @@ -184,11 +187,6 @@ НастройкиПрав = НастройкиПравПоОбъектам(); - Если Не ЗначениеЗаполнено(НастройкиПрав.НастройкиПравЛегенда) Тогда - ОтключитьГруппировки(НастройкиКомпоновщика, - "НастройкиПрав,ЛегендаНастроекПрав,ДополнительныйЗаголовокТаблицы"); - КонецЕсли; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика, ДанныеРасшифровки); @@ -210,6 +208,10 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура ЗавершитьВывод(ДокументРезультат, ДанныеРасшифровки, НастройкиПрав) ГруппаДоступаЗаголовок = НСтр("ru = 'Группа доступа'"); @@ -218,7 +220,7 @@ КонецЕсли; // АПК:163-выкл - №598.1 Использование допустимо, так как влияет на смысл. - ТекстЕстьОграничение = НСтр("ru = 'Доступно не всё'"); + ТекстЕстьОграничение = ?(ВариантПравНаОбъект(), "", НСтр("ru = 'Есть ограничение'")); // АПК:163-вкл. ТекстПравоНеНазначено = НСтр("ru = '●'"); ТекстПравоРазрешено = НСтр("ru = '✔'"); @@ -315,9 +317,10 @@ РасшифровкиСтрок.Вставить(НомерСтроки, ЗначенияПолей); Если ШрифтПравоНеНазначено = Неопределено Тогда ШрифтПравоНеНазначено = Область.Шрифт; - //@skip-check new-font - Используется стандартный шрифт, увеличенный до 120% с наклоном. + // АПК:1345-выкл - Используется текущий шрифт, увеличенный до 120% с наклоном для выделения символов ✔ и ✘, но не ●. ШрифтПравоРазрешено = Новый Шрифт(ШрифтПравоНеНазначено,,, Истина,,,, 120); ШрифтПравоЗапрещено = ШрифтПравоРазрешено; + // АПК:1345-вкл КонецЕсли; Отступ = (ЗначенияПолей.Найти("Уровень").Значение - 1) * 2; ОбластьСтроки = ДокументРезультат.Область(НомерСтроки, , НомерСтроки); @@ -337,9 +340,270 @@ КонецПроцедуры -#КонецОбласти +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура СкрытьЛишниеПоляДанных(Вариант, НастройкиКД, ПользовательскиеНастройкиКД) + + ПраваПользователей = Новый Массив; + + Если Вариант = "ПраваПользователейНаОбъект" Тогда + ПраваПользователей.Добавить("ЭлементДанных"); + Иначе + ПраваПользователей.Добавить("ОбъектМетаданных"); + КонецЕсли; + ПраваПользователей.Добавить("Пользователь"); + ПраваПользователей.Добавить("ВходВПрограммуРазрешен"); + ПраваПользователей.Добавить("Право"); + ПраваПользователей.Добавить("ПравоБезОграничения"); + ПраваПользователей.Добавить("ПравоИнтерактивное"); + + Если Вариант = "АнализПравДоступа" + И ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, "ВыводитьГруппировку") = 1 + Или Вариант = "ПраваПользователейНаТаблицыОтчета" + Или Вариант = "ПраваПользователяНаТаблицыОтчета" + Или Вариант = "ПраваПользователяНаТаблицыОтчетов" Тогда + + ПраваПользователей.Добавить("Отчет"); + ПраваПользователей.Добавить("ПравоОтчета"); + КонецЕсли; + + Если Вариант = "ПраваПользователейНаТаблицу" + Или Вариант = "ПраваПользователяНаТаблицу" + Или Вариант = "ПраваПользователейНаОбъект" Тогда + + ПраваПользователей.Добавить("ПравоЧтение"); + ПраваПользователей.Добавить("ПравоИзменение"); + Если Вариант <> "ПраваПользователейНаОбъект" Тогда + ПраваПользователей.Добавить("ПравоДобавление"); + КонецЕсли; + ПраваПользователей.Добавить("ПравоЧтениеБезОграничения"); + ПраваПользователей.Добавить("ПравоИзменениеБезОграничения"); + Если Вариант <> "ПраваПользователейНаОбъект" Тогда + ПраваПользователей.Добавить("ПравоДобавлениеБезОграничения"); + КонецЕсли; + ПраваПользователей.Добавить("ПравоПросмотр"); + ПраваПользователей.Добавить("ПравоРедактирование"); + Если Вариант <> "ПраваПользователейНаОбъект" Тогда + ПраваПользователей.Добавить("ПравоИнтерактивноеДобавление"); + КонецЕсли; + КонецЕсли; + + Если Вариант = "ПраваПользователяНаТаблицу" Тогда + ПраваПользователей.Добавить("ВидДоступаПраво"); + ПраваПользователей.Добавить("ВидДоступаПравоБезОграничения"); + ПраваПользователей.Добавить("ВидДоступаПравоИнтерактивное"); + ПраваПользователей.Добавить("ВидДоступаПравоЧтение"); + ПраваПользователей.Добавить("ВидДоступаПравоИзменение"); + ПраваПользователей.Добавить("ВидДоступаПравоДобавление"); + ПраваПользователей.Добавить("ВидДоступаПравоЧтениеБезОграничения"); + ПраваПользователей.Добавить("ВидДоступаПравоИзменениеБезОграничения"); + ПраваПользователей.Добавить("ВидДоступаПравоДобавлениеБезОграничения"); + ПраваПользователей.Добавить("ВидДоступаПравоПросмотр"); + ПраваПользователей.Добавить("ВидДоступаПравоРедактирование"); + ПраваПользователей.Добавить("ВидДоступаПравоИнтерактивноеДобавление"); + КонецЕсли; + + Если Вариант = "ПраваПользователяНаТаблицы" + Или Вариант = "ПраваПользователяНаТаблицу" + Или Вариант = "ПраваПользователяНаТаблицыОтчета" + Или Вариант = "ПраваПользователяНаТаблицыОтчетов" + Или Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда + + ПраваПользователей.Добавить("ГруппаДоступа"); + КонецЕсли; + + Если Вариант = "ПраваПользователяНаТаблицу" + Или Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда + + ПраваПользователей.Добавить("ВидДоступа"); + Если Вариант = "ПраваПользователяНаТаблицу" Тогда + ПраваПользователей.Добавить("ВсеРазрешены"); + КонецЕсли; + ПраваПользователей.Добавить("ЗначениеДоступа"); + КонецЕсли; + + ИсходнаяСхема = ПолучитьМакет("Макет"); + ТекущаяСхема = СхемаКомпоновкиДанных; + + СкрытьПоляДанныхКромеУказанных("ПраваПользователей", ПраваПользователей, ИсходнаяСхема, ТекущаяСхема); + + НастройкиПрав = Новый Массив; + + Если Вариант = "ПраваПользователяНаТаблицу" Тогда + Если НастройкиПравПоТаблицеВОтборе(НастройкиКД, ПользовательскиеНастройкиКД) <> Неопределено Тогда + НастройкиПрав = "*"; + КонецЕсли; + Группировки = Новый Соответствие; + Группировки.Вставить("НастройкиПрав", НастройкиПрав = "*"); + Группировки.Вставить("ЛегендаНастроекПрав", НастройкиПрав = "*"); + Группировки.Вставить("ДополнительныйЗаголовокТаблицы", НастройкиПрав = "*"); + УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД); + КонецЕсли; + + СкрытьПоляДанныхКромеУказанных("НастройкиПравПоОбъектам", НастройкиПрав, ИсходнаяСхема, ТекущаяСхема); + СкрытьПоляДанныхКромеУказанных("НастройкиПравЛегенда", НастройкиПрав, ИсходнаяСхема, ТекущаяСхема); + СкрытьПоляДанныхКромеУказанных("НастройкиПравИерархия", НастройкиПрав, ИсходнаяСхема, ТекущаяСхема); + +КонецПроцедуры -#Область СлужебныеПроцедурыИФункции +// Для процедуры СкрытьЛишниеПоляДанных. +Процедура СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных, ПутиКДанным, ИсходнаяСхема, ТекущаяСхема) + + Отчеты.АнализПравДоступа.СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных, + ПутиКДанным, ИсходнаяСхема, ТекущаяСхема); + +КонецПроцедуры + +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура УстановитьДоступныеЗначенияПоляВидДоступа(Вариант, НастройкиКД, ПользовательскиеНастройкиКД) + + ПолеДанных = СхемаКомпоновкиДанных.НаборыДанных.ПраваПользователей.Поля.Найти("ВидДоступа"); + ЗначенияПоля = Новый СписокЗначений; + + Если Вариант = "ПраваПользователяНаТаблицу" Тогда + ПредставлениеВидовДоступа = УправлениеДоступомСлужебный.ПредставлениеВидовДоступа(); + Для Каждого КлючИЗначение Из ПредставлениеВидовДоступа Цикл + ЗначенияПоля.Добавить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + Иначе + ЗначенияПоля.Добавить(Неопределено); + КонецЕсли; + + ПолеДанных.УстановитьДоступныеЗначения(ЗначенияПоля); + +КонецПроцедуры + +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура НастроитьВариантАнализПравДоступа(НастройкиКД, ПользовательскиеНастройкиКД) + + ПараметрВыводить = СхемаКомпоновкиДанных.Параметры.ВыводитьГруппировку; + ПараметрВыводить.ОграничениеИспользования = Ложь; + + Значения = Новый СписокЗначений; + Значения.Добавить(0, НСтр("ru = 'Таблицы'")); + Значения.Добавить(1, НСтр("ru = 'Отчеты с таблицами'")); + ПараметрВыводить.УстановитьДоступныеЗначения(Значения); + ПараметрВыводить.Значение = 0; + + Значение = ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, ПараметрВыводить.Имя); + Если Значение <> Неопределено Тогда + Группировки = Новый Соответствие; + Группировки.Вставить("ГруппировкаПоТаблицам", Значение = 0); + Группировки.Вставить("ГруппировкаПоТаблицамОтчетов", Значение = 1); + УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД); + КонецЕсли; + +КонецПроцедуры + +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура НастроитьВариантПраваПользователейНаОбъект(НастройкиКД, ПользовательскиеНастройкиКД) + + ПолеДанных = СхемаКомпоновкиДанных.НаборыДанных.ПраваПользователей.Поля.Найти("Право"); + ЗначенияПоля = Новый СписокЗначений; + ЗначенияПоля.Добавить(1, НСтр("ru = 'Чтение'")); + ЗначенияПоля.Добавить(2, НСтр("ru = 'Изменение'")); + ПолеДанных.УстановитьДоступныеЗначения(ЗначенияПоля); + + ПолеДанных = СхемаКомпоновкиДанных.НаборыДанных.ПраваПользователей.Поля.Найти("ПравоИнтерактивное"); + ЗначенияПоля = Новый СписокЗначений; + ЗначенияПоля.Добавить(1, НСтр("ru = 'Просмотр'")); + ЗначенияПоля.Добавить(2, НСтр("ru = 'Редактирование'")); + ПолеДанных.УстановитьДоступныеЗначения(ЗначенияПоля); + + Параметр = СхемаКомпоновкиДанных.Параметры.ЭлементДанных; + Параметр.ОграничениеИспользования = Ложь; + Параметр.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда; + Параметр.ТипЗначения = УправлениеДоступомСлужебныйПовтИсп.ТипыЭлементовДанных(); + + СхемаКомпоновкиДанных.Параметры.Удалить(Параметр); + СхемаКомпоновкиДанных.Параметры.Вставить(0); + ЗаполнитьЗначенияСвойств(СхемаКомпоновкиДанных.Параметры[0], Параметр); + +КонецПроцедуры + +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура НастроитьВариантПраваПользователейВРазрезеРазрешенногоЗначения(НастройкиКД, ПользовательскиеНастройкиКД) + + Параметр = СхемаКомпоновкиДанных.Параметры.ЗначениеДоступа; + Параметр.ОграничениеИспользования = Ложь; + Параметр.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда; + Параметр.ТипЗначения = Отчеты.АнализПравДоступа.ОписаниеТиповГруппИЗначенийВидовДоступа(); + + СхемаКомпоновкиДанных.Параметры.Удалить(Параметр); + СхемаКомпоновкиДанных.Параметры.Вставить(1); + ЗаполнитьЗначенияСвойств(СхемаКомпоновкиДанных.Параметры[1], Параметр); + + ПараметрВыводить = СхемаКомпоновкиДанных.Параметры.ВыводитьГруппировку; + ПараметрВыводить.ОграничениеИспользования = Ложь; + + УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); + + Значения = Новый СписокЗначений; + Значения.Добавить(0, НСтр("ru = 'Таблицы с правами пользователей'")); + Значения.Добавить(1, НСтр("ru = 'Пользователей'")); + Значения.Добавить(2, ?(УпрощенныйИнтерфейс, + НСтр("ru = 'Пользователей с профилями'"), НСтр("ru = 'Пользователей с группами доступа'"))); + Значения.Добавить(3, ?(УпрощенныйИнтерфейс, + НСтр("ru = 'Профили с пользователями'"), НСтр("ru = 'Группы доступа с пользователями'"))); + Значения.Добавить(4, ?(УпрощенныйИнтерфейс, + НСтр("ru = 'Профили групп доступа'"), НСтр("ru = 'Группы доступа'"))); + Значения.Добавить(5, ?(УпрощенныйИнтерфейс, + НСтр("ru = 'Таблицы с правами профилей'"), НСтр("ru = 'Таблицы с правами групп доступа'"))); + ПараметрВыводить.УстановитьДоступныеЗначения(Значения); + ПараметрВыводить.Значение = 0; + + Значение = ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, ПараметрВыводить.Имя); + Если Значение <> Неопределено Тогда + Группировки = Новый Соответствие; + Группировки.Вставить("ТаблицыСПравамиПользователей", Значение = 0); + Группировки.Вставить("Пользователи", Значение = 1); + Группировки.Вставить("ПользователиСГруппамиДоступа", Значение = 2); + Группировки.Вставить("ГруппыДоступаСПользователями", Значение = 3); + Группировки.Вставить("ГруппыДоступа", Значение = 4); + Группировки.Вставить("ТаблицыСПравамиГруппДоступа", Значение = 5); + Группировки.Вставить("Легенда", Значение = 0 Или Значение = 5); + УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД); + КонецЕсли; + +КонецПроцедуры + +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура НастроитьПараметрыКонтекстногоОткрытия(Контекст, Вариант, НастройкиКД, ПользовательскиеНастройкиКД) + + Если Вариант = "ПраваПользователейНаТаблицу" + Или Вариант = "ПраваПользователяНаТаблицу" Тогда + + ОбъектМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Контекст.КонтекстВарианта, Ложь); + Если ЗначениеЗаполнено(ОбъектМетаданных) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(НастройкиКД.Отбор, "ОбъектМетаданных", ОбъектМетаданных, + ВидСравненияКомпоновкиДанных.Равно, , Истина); + КонецЕсли; + + ИначеЕсли Вариант = "ПраваПользователейНаТаблицы" Или Вариант = "ПраваПользователяНаТаблицы" Тогда + Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда + СписокПользователей = Новый СписокЗначений; + СписокПользователей.ЗагрузитьЗначения(Контекст.Параметры.ПараметрКоманды); + ПользователиСлужебный.УстановитьОтборДляПараметра("Пользователь", СписокПользователей, + НастройкиКД, ПользовательскиеНастройкиКД); + КонецЕсли; + + ИначеЕсли Вариант = "ПраваПользователейНаОбъект" Тогда + Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда + ПользователиСлужебный.УстановитьОтборДляПараметра("ЭлементДанных", + Контекст.Параметры.ПараметрКоманды, + НастройкиКД, + ПользовательскиеНастройкиКД); + КонецЕсли; + + ИначеЕсли Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения" Тогда + Если Контекст.Параметры.Свойство("ПараметрКоманды") Тогда + ПользователиСлужебный.УстановитьОтборДляПараметра("ЗначениеДоступа", + Контекст.Параметры.ПараметрКоманды, + НастройкиКД, + ПользовательскиеНастройкиКД); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры Функция ТаблицыОтчетов() @@ -537,28 +801,35 @@ КонецФункции -Функция ПраваПользователей() +Функция ТекстЗапросаОбщий() - ТекстЗапросаОбщий = + Возврат "ВЫБРАТЬ - | ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных, - | ПраваРолейРасширений.Роль КАК Роль, - | ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, - | ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, - | ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, - | ПраваРолейРасширений.ПравоПросмотр КАК ПравоПросмотр, - | ПраваРолейРасширений.ПравоРедактирование КАК ПравоРедактирование, - | ПраваРолейРасширений.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление, - | ПраваРолейРасширений.ВидИзмененияСтроки КАК ВидИзмененияСтроки + | ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных, + | ПраваРолей.Роль КАК Роль, + | ПраваРолей.ПравоИзменение КАК ПравоИзменение, + | ПраваРолей.ПравоДобавление КАК ПравоДобавление, + | ПраваРолей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, + | ПраваРолей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, + | ПраваРолей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, + | ПраваРолей.ПравоПросмотр КАК ПравоПросмотр, + | ПраваРолей.ПравоРедактирование КАК ПравоРедактирование, + | ПраваРолей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление, + | ПраваРолей.ВидИзмененияСтроки КАК ВидИзмененияСтроки |ПОМЕСТИТЬ ПраваРолейРасширений |ИЗ - | &ПраваРолейРасширений КАК ПраваРолейРасширений + | &ПраваРолейРасширений КАК ПраваРолей + |ГДЕ + | &ОтборПравПоТаблицам |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных, | ПраваРолейРасширений.Роль КАК Роль, + | ИСТИНА КАК ПравоЧтение, + | ПраваРолейРасширений.ПравоИзменение КАК ПравоИзменение, + | ПраваРолейРасширений.ПравоДобавление КАК ПравоДобавление, | ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, | ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, | ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, @@ -576,6 +847,9 @@ |ВЫБРАТЬ | ПраваРолей.ОбъектМетаданных, | ПраваРолей.Роль, + | ИСТИНА, + | ПраваРолей.ПравоИзменение, + | ПраваРолей.ПравоДобавление, | ПраваРолей.ПравоЧтениеБезОграничения, | ПраваРолей.ПравоИзменениеБезОграничения, | ПраваРолей.ПравоДобавлениеБезОграничения, @@ -589,6 +863,7 @@ | И ПраваРолей.Роль = ПраваРолейРасширений.Роль |ГДЕ | ПраваРолейРасширений.ОбъектМетаданных ЕСТЬ NULL + | И &ОтборПравПоТаблицам | |ИНДЕКСИРОВАТЬ ПО | Роль @@ -598,6 +873,9 @@ |ВЫБРАТЬ | ПрофилиГруппДоступаРоли.Ссылка КАК Профиль, | ПраваРолей.ОбъектМетаданных КАК Таблица, + | МАКСИМУМ(ПраваРолей.ПравоЧтение) КАК ПравоЧтение, + | МАКСИМУМ(ПраваРолей.ПравоИзменение) КАК ПравоИзменение, + | МАКСИМУМ(ПраваРолей.ПравоДобавление) КАК ПравоДобавление, | МАКСИМУМ(ПраваРолей.ПравоЧтениеБезОграничения) КАК ПравоЧтениеБезОграничения, | МАКСИМУМ(ПраваРолей.ПравоИзменениеБезОграничения) КАК ПравоИзменениеБезОграничения, | МАКСИМУМ(ПраваРолей.ПравоДобавлениеБезОграничения) КАК ПравоДобавлениеБезОграничения, @@ -610,20 +888,19 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли | ПО ПраваРолей.Роль = ПрофилиГруппДоступаРоли.Роль | И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления) - |ГДЕ - | &ОтборПравПоТаблицам | |СГРУППИРОВАТЬ ПО | ПрофилиГруппДоступаРоли.Ссылка, | ПраваРолей.ОбъектМетаданных | - |ИМЕЮЩИЕ - | МАКСИМУМ(ПраваРолей.ПравоПросмотр) = ИСТИНА - | |ИНДЕКСИРОВАТЬ ПО | Таблица"; - ТекстЗапросаБезГруппировкиПоОтчетам = +КонецФункции + +Функция ТекстЗапросаБезГруппировкиПоОтчетам() + + Возврат "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПраваПрофилей.Таблица КАК ОбъектМетаданных, | ВЫБОР @@ -631,28 +908,28 @@ | ТОГДА ГруппыДоступа.Профиль | ИНАЧЕ ГруппыДоступа.Ссылка | КОНЕЦ КАК ГруппаДоступа, + | ПраваПрофилей.ПравоЧтение КАК ПравоЧтение, + | ПраваПрофилей.ПравоИзменение КАК ПравоИзменение, + | ПраваПрофилей.ПравоДобавление КАК ПравоДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоДобавление + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменение + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, | ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, | ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, | ПраваПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, | ВЫБОР - | КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление - | ТОГДА ВЫБОР - | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения - | ТОГДА 3 - | ИНАЧЕ 0 - | КОНЕЦ - | КОГДА ПраваПрофилей.ПравоРедактирование - | ТОГДА ВЫБОР - | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения - | ТОГДА 2 - | ИНАЧЕ 0 - | КОНЕЦ - | КОГДА ПраваПрофилей.ПравоПросмотр - | ТОГДА ВЫБОР - | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК ПравоБезОграничения, | ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр, @@ -666,7 +943,7 @@ | КОГДА ПраваПрофилей.ПравоПросмотр | ТОГДА 1 | ИНАЧЕ 0 - | КОНЕЦ КАК Право, + | КОНЕЦ КАК ПравоИнтерактивное, | СоставыГруппПользователей.Пользователь КАК Пользователь, | ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен |ИЗ @@ -683,7 +960,79 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)"; - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало = +КонецФункции + +Функция ТекстЗапросаПравОбъекта() + + Возврат + "ВЫБРАТЬ + | ПраваНаЭлементДанных.ПользовательСПравом КАК Пользователь, + | ПраваНаЭлементДанных.ПравоИзменение КАК ПравоИзменение + |ПОМЕСТИТЬ ПраваНаЭлементДанных + |ИЗ + | &ПраваНаЭлементДанных КАК ПраваНаЭлементДанных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПраваПрофилей.Таблица КАК ОбъектМетаданных, + | ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка) КАК ГруппаДоступа, + | ПраваПрофилей.ПравоЧтение КАК ПравоЧтение, + | ПраваПрофилей.ПравоИзменение + | И ПраваНаЭлементДанных.ПравоИзменение КАК ПравоИзменение, + | ЛОЖЬ КАК ПравоДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоИзменение И ПраваНаЭлементДанных.ПравоИзменение + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, + | ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, + | ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, + | ЛОЖЬ КАК ПравоДобавлениеБезОграничения, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоБезОграничения, + | ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр, + | ПраваПрофилей.ПравоРедактирование + | И ПраваНаЭлементДанных.ПравоИзменение КАК ПравоРедактирование, + | ЛОЖЬ КАК ПравоИнтерактивноеДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоРедактирование + | И ПраваНаЭлементДанных.ПравоИзменение + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоПросмотр + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоИнтерактивное, + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен + |ИЗ + | ПраваПрофилейНаТаблицы КАК ПраваПрофилей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль) + | И (НЕ ГруппыДоступа.ПометкаУдаления) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь) + | И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА) + | И (&УсловиеОтбораПоПользователям) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПраваНаЭлементДанных КАК ПраваНаЭлементДанных + | ПО (ПраваНаЭлементДанных.Пользователь = СоставыГруппПользователей.Пользователь) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)"; + +КонецФункции + +Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало() + + Возврат "ВЫБРАТЬ | ГруппыДоступа.Профиль КАК Профиль, | ГруппыДоступа.Ссылка КАК ГруппаДоступа @@ -703,12 +1052,17 @@ | И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА) | И (&УсловиеОтбораПоПользователям)"; - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоСтарому = +КонецФункции + +Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоСтарому() + + Возврат "ВЫБРАТЬ | ВидыОграниченийПрав.Таблица КАК Таблица, + | ВидыОграниченийПрав.Право КАК Право, | ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, | ВидыОграниченийПрав.Представление КАК ВидДоступаПредставление, - | ВидыОграниченийПрав.Право КАК Право + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь |ПОМЕСТИТЬ ВидыОграниченийПравИсходные |ИЗ | &ВидыОграниченийПрав КАК ВидыОграниченийПрав @@ -719,6 +1073,7 @@ | ВидыОграниченийПрав.Таблица КАК Таблица, | ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, | ВидыОграниченийПрав.ВидДоступаПредставление КАК ВидДоступаПредставление, + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь, | МАКСИМУМ(ВидыОграниченийПрав.Право = ""Чтение"") КАК ПравоЧтение, | МАКСИМУМ(ВидыОграниченийПрав.Право = ""Изменение"") КАК ПравоИзменение |ПОМЕСТИТЬ ВидыОграниченийПравПреобразованные @@ -728,7 +1083,8 @@ |СГРУППИРОВАТЬ ПО | ВидыОграниченийПрав.Таблица, | ВидыОграниченийПрав.ВидДоступа, - | ВидыОграниченийПрав.ВидДоступаПредставление + | ВидыОграниченийПрав.ВидДоступаПредставление, + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь |; | |//////////////////////////////////////////////////////////////////////////////// @@ -737,6 +1093,7 @@ | ВидыОграниченийПрав.Таблица КАК Таблица, | ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, | ВидыОграниченийПрав.ВидДоступаПредставление КАК ВидДоступаПредставление, + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь, | ВидыОграниченийПрав.ПравоЧтение КАК ПравоЧтение, | ВидыОграниченийПрав.ПравоИзменение КАК ПравоИзменение |ПОМЕСТИТЬ ВидыОграниченийПрав @@ -752,6 +1109,7 @@ | ВидыОграниченийПрав.Таблица, | ВидыОграниченийПрав.ВидДоступа, | ВидыОграниченийПрав.ВидДоступаПредставление, + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь, | ВидыОграниченийПрав.ПравоЧтение, | ВидыОграниченийПрав.ПравоИзменение |ИЗ @@ -759,13 +1117,18 @@ |ГДЕ | ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) <> ТИП(Справочник.Пользователи)"; - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоНовому = +КонецФункции + +Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоНовому() + + Возврат "ВЫБРАТЬ | ВидыОграниченийПрав.ДляВнешнихПользователей КАК ДляВнешнихПользователей, | ВидыОграниченийПрав.Таблица КАК Таблица, + | ВидыОграниченийПрав.Право КАК Право, | ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, | ВидыОграниченийПрав.Представление КАК ВидДоступаПредставление, - | ВидыОграниченийПрав.Право КАК Право + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь |ПОМЕСТИТЬ ВидыОграниченийПравИсходные |ИЗ | &ВидыОграниченийПрав КАК ВидыОграниченийПрав @@ -777,20 +1140,9 @@ | ВидыОграниченийПрав.Таблица КАК Таблица, | ВидыОграниченийПрав.ВидДоступа КАК ВидДоступа, | ВидыОграниченийПрав.ВидДоступаПредставление КАК ВидДоступаПредставление, - | ВЫБОР - | КОГДА ВидыОграниченийПрав.ВидДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - | ТОГДА ЛОЖЬ - | КОГДА ВидыОграниченийПрав.ВидДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - | ТОГДА ИСТИНА - | ИНАЧЕ МАКСИМУМ(ВидыОграниченийПрав.Право = ""Чтение"") - | КОНЕЦ КАК ПравоЧтение, - | ВЫБОР - | КОГДА ВидыОграниченийПрав.ВидДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступРазрешен) - | ТОГДА ЛОЖЬ - | КОГДА ВидыОграниченийПрав.ВидДоступа = ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.ДоступЗапрещен) - | ТОГДА ИСТИНА - | ИНАЧЕ МАКСИМУМ(ВидыОграниченийПрав.Право = ""Изменение"") - | КОНЕЦ КАК ПравоИзменение + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь, + | МАКСИМУМ(ВидыОграниченийПрав.Право = ""Чтение"") КАК ПравоЧтение, + | МАКСИМУМ(ВидыОграниченийПрав.Право = ""Изменение"") КАК ПравоИзменение |ПОМЕСТИТЬ ВидыОграниченийПрав |ИЗ | ВидыОграниченийПравИсходные КАК ВидыОграниченийПрав @@ -799,9 +1151,14 @@ | ВидыОграниченийПрав.ДляВнешнихПользователей, | ВидыОграниченийПрав.Таблица, | ВидыОграниченийПрав.ВидДоступа, + | ВидыОграниченийПрав.ЭтоАвторизованныйПользователь, | ВидыОграниченийПрав.ВидДоступаПредставление"; - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаКонец = +КонецФункции + +Функция ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаКонец() + + Возврат "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВидыИЗначенияДоступа.ГруппаДоступа КАК ГруппаДоступа, | ВидыИЗначенияДоступа.ВидДоступа КАК ВидДоступа, @@ -837,7 +1194,17 @@ | ПО (ПрофилиГруппДоступаЗначенияДоступа.Ссылка = ПрофилиГруппДоступаВидыДоступа.Ссылка) | И (ПрофилиГруппДоступаЗначенияДоступа.ВидДоступа = ПрофилиГруппДоступаВидыДоступа.ВидДоступа) | ГДЕ - | ПрофилиГруппДоступаВидыДоступа.Предустановленный) КАК ВидыИЗначенияДоступа + | ПрофилиГруппДоступаВидыДоступа.Предустановленный + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ + | ГруппыДоступаПользователей.ГруппаДоступа, + | ЗНАЧЕНИЕ(Перечисление.ДополнительныеЗначенияДоступа.Неопределено), + | NULL, + | NULL + | ИЗ + | ГруппыДоступаПользователей КАК ГруппыДоступаПользователей) КАК ВидыИЗначенияДоступа |; | |//////////////////////////////////////////////////////////////////////////////// @@ -857,63 +1224,130 @@ | ТОГДА ГруппыДоступа.Профиль | ИНАЧЕ ГруппыДоступа.Ссылка | КОНЕЦ КАК ГруппаДоступа, + | ПраваПрофилей.ПравоЧтение КАК ПравоЧтение, + | ПраваПрофилей.ПравоИзменение КАК ПравоИзменение, + | ПраваПрофилей.ПравоДобавление КАК ПравоДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоДобавление + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменение + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, | ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, | ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, | ПраваПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоБезОграничения, | ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр, | ПраваПрофилей.ПравоРедактирование КАК ПравоРедактирование, | ПраваПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление, | ВЫБОР - | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения - | ТОГДА ИСТИНА - | КОГДА НЕ ПраваПрофилей.ПравоПросмотр - | ТОГДА ЛОЖЬ - | КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL - | ТОГДА НЕ ВидыОграниченийПрав.ПравоЧтение - | КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА НЕ ВидыОграниченийПравБезусловные.ПравоЧтение - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ВидДоступаПравоЧтениеБезОграничения, + | КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоРедактирование + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоПросмотр + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоИнтерактивное, + | ПраваПрофилей.ПравоЧтение + | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоЧтение, + | ПраваПрофилей.ПравоИзменение + | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоИзменение, + | ПраваПрофилей.ПравоДобавление + | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоДобавление, | ВЫБОР - | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения - | ТОГДА ИСТИНА - | КОГДА НЕ ПраваПрофилей.ПравоРедактирование - | ТОГДА ЛОЖЬ - | КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL - | ТОГДА НЕ ВидыОграниченийПрав.ПравоИзменение - | КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА НЕ ВидыОграниченийПравБезусловные.ПравоИзменение - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ВидДоступаПравоИзменениеБезОграничения, + | КОГДА ПраваПрофилей.ПравоДобавление + | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменение + | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ВидДоступаПраво, + | ЛОЖЬ КАК ВидДоступаПравоЧтениеБезОграничения, + | ЛОЖЬ КАК ВидДоступаПравоИзменениеБезОграничения, + | ЛОЖЬ КАК ВидДоступаПравоДобавлениеБезОграничения, + | 0 КАК ВидДоступаПравоБезОграничения, + | ПраваПрофилей.ПравоПросмотр + | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоПросмотр, + | ПраваПрофилей.ПравоРедактирование + | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоРедактирование, + | ПраваПрофилей.ПравоИнтерактивноеДобавление + | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) КАК ВидДоступаПравоИнтерактивноеДобавление, | ВЫБОР - | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения - | ТОГДА ИСТИНА - | КОГДА НЕ ПраваПрофилей.ПравоИнтерактивноеДобавление - | ТОГДА ЛОЖЬ - | КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL - | ТОГДА НЕ ВидыОграниченийПрав.ПравоИзменение - | КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА НЕ ВидыОграниченийПравБезусловные.ПравоИзменение - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ВидДоступаПравоДобавлениеБезОграничения, - | ВЫБОР - | КОГДА ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL - | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА ЛОЖЬ - | ИНАЧЕ ПраваПрофилей.ПравоПросмотр - | КОНЕЦ КАК ВидДоступаПравоПросмотр, - | ВЫБОР - | КОГДА ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL - | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА ЛОЖЬ - | ИНАЧЕ ПраваПрофилей.ПравоРедактирование - | КОНЕЦ КАК ВидДоступаПравоРедактирование, - | ВЫБОР - | КОГДА ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL - | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА ЛОЖЬ - | ИНАЧЕ ПраваПрофилей.ПравоИнтерактивноеДобавление - | КОНЕЦ КАК ВидДоступаПравоИнтерактивноеДобавление, + | КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление + | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоРедактирование + | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоИзменение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоИзменение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоПросмотр + | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения + | И (ЕСТЬNULL(ВидыОграниченийПрав.ПравоЧтение, ЛОЖЬ) + | ИЛИ ЕСТЬNULL(ВидыОграниченийПравБезусловные.ПравоЧтение, ЛОЖЬ) + | ИЛИ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | И ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL) + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ВидДоступаПравоИнтерактивное, | ВЫБОР | КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL | ТОГДА ВидыОграниченийПрав.ВидДоступа @@ -922,6 +1356,13 @@ | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК ВидДоступа, | ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоЧтение + | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения + | ИЛИ ПраваПрофилей.ПравоИзменение + | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения + | ИЛИ ПраваПрофилей.ПравоДобавление + | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения) + | ТОГДА &ТекстБезОграничения | КОГДА НЕ ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL | ТОГДА ВидыОграниченийПрав.ВидДоступаПредставление + ВЫБОР | КОГДА ВидыИЗначенияДоступа.ВсеРазрешены ЕСТЬ NULL @@ -940,24 +1381,18 @@ | ИНАЧЕ &ТекстЗапрещенные | КОНЕЦ | КОНЕЦ + | КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL + | ТОГДА ВидыОграниченийПравБезусловные.ВидДоступаПредставление | ИНАЧЕ ВЫБОР - | КОГДА ПраваПрофилей.ПравоПросмотр - | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения - | ИЛИ ПраваПрофилей.ПравоРедактирование - | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения - | ИЛИ ПраваПрофилей.ПравоИнтерактивноеДобавление - | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения - | ТОГДА ВЫБОР - | КОГДА НЕ ВидыОграниченийПравБезусловные.ВидДоступа ЕСТЬ NULL - | ТОГДА ВидыОграниченийПравБезусловные.ВидДоступаПредставление - | ИНАЧЕ &ТекстОграничениеБезВидовДоступа - | КОНЕЦ - | ИНАЧЕ &ТекстБезОграничения + | КОГДА ПраваПрофилей.Таблица В (&ВсеТаблицыСОграничением) + | ТОГДА &ОграничениеОтключено + | ИНАЧЕ &НестандартноеОграничение | КОНЕЦ | КОНЕЦ КАК ВидДоступаПредставление, | ЕСТЬNULL(ВидыИЗначенияДоступа.ВсеРазрешены, ЛОЖЬ) КАК ВсеРазрешены, | ВЫБОР | КОГДА ВидыОграниченийПрав.ВидДоступа ЕСТЬ NULL + | ИЛИ ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа) | ТОГДА """" | КОГДА НЕ ПустыеСсылкиЗначенийДоступа.Представление ЕСТЬ NULL | ТОГДА ПустыеСсылкиЗначенийДоступа.Представление @@ -992,13 +1427,13 @@ | ИЛИ ВидыОграниченийПрав.ДляВнешнихПользователей | И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ВнешниеПользователи) | ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей))) - | И (ПраваПрофилей.ПравоПросмотр + | И (ПраваПрофилей.ПравоЧтение | И НЕ ПраваПрофилей.ПравоЧтениеБезОграничения | И ВидыОграниченийПрав.ПравоЧтение - | ИЛИ ПраваПрофилей.ПравоРедактирование + | ИЛИ ПраваПрофилей.ПравоИзменение | И НЕ ПраваПрофилей.ПравоИзменениеБезОграничения | И ВидыОграниченийПрав.ПравоИзменение - | ИЛИ ПраваПрофилей.ПравоИнтерактивноеДобавление + | ИЛИ ПраваПрофилей.ПравоДобавление | И НЕ ПраваПрофилей.ПравоДобавлениеБезОграничения | И ВидыОграниченийПрав.ПравоИзменение) | ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПравБезусловные @@ -1020,9 +1455,13 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)"; - ТекстЗапросаСГруппировкойПоОтчетамДополнение = +КонецФункции + +Функция ТекстЗапросаСГруппировкойПоОтчетамДополнение() + + Возврат "ВЫБРАТЬ - | ПраваРолейНаОтчеты.Отчет КАК Отчет, + | ПраваРолейНаОтчеты.Отчет КАК ОтчетСсылка, | ПраваРолейНаОтчеты.Роль КАК Роль |ПОМЕСТИТЬ ПраваРолейНаОтчеты |ИЗ @@ -1032,7 +1471,7 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ПрофилиГруппДоступаРоли.Ссылка КАК Профиль, - | ПраваРолейНаОтчеты.Отчет КАК Отчет + | ПраваРолейНаОтчеты.ОтчетСсылка КАК ОтчетСсылка |ПОМЕСТИТЬ ПраваПрофилейНаОтчеты |ИЗ | ПраваРолейНаОтчеты КАК ПраваРолейНаОтчеты @@ -1041,12 +1480,12 @@ | И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления) | |ИНДЕКСИРОВАТЬ ПО - | Отчет + | ОтчетСсылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ТаблицыОтчетов.Отчет КАК Отчет, + | ТаблицыОтчетов.Отчет КАК ОтчетСсылка, | ТаблицыОтчетов.ОбъектМетаданных КАК Таблица |ПОМЕСТИТЬ ТаблицыОтчетов |ИЗ @@ -1060,10 +1499,13 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ТаблицыОтчетовСПравами.Отчет КАК Отчет, + | ТаблицыОтчетовСПравами.ОтчетСсылка КАК ОтчетСсылка, | ТаблицыОтчетовСПравами.Таблица КАК Таблица, | ТаблицыОтчетовСПравами.Профиль КАК Профиль, | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоОтчета) КАК ПравоОтчета, + | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоЧтение) КАК ПравоЧтение, + | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоИзменение) КАК ПравоИзменение, + | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоДобавление) КАК ПравоДобавление, | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоЧтениеБезОграничения) КАК ПравоЧтениеБезОграничения, | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоИзменениеБезОграничения) КАК ПравоИзменениеБезОграничения, | МАКСИМУМ(ТаблицыОтчетовСПравами.ПравоДобавлениеБезОграничения) КАК ПравоДобавлениеБезОграничения, @@ -1073,10 +1515,13 @@ |ПОМЕСТИТЬ ПраваПрофилей |ИЗ | (ВЫБРАТЬ - | ТаблицыОтчетов.Отчет КАК Отчет, + | ТаблицыОтчетов.ОтчетСсылка КАК ОтчетСсылка, | ТаблицыОтчетов.Таблица КАК Таблица, | ПраваПрофилейНаОтчеты.Профиль КАК Профиль, | ИСТИНА КАК ПравоОтчета, + | ЛОЖЬ КАК ПравоЧтение, + | ЛОЖЬ КАК ПравоИзменение, + | ЛОЖЬ КАК ПравоДобавление, | ЛОЖЬ КАК ПравоЧтениеБезОграничения, | ЛОЖЬ КАК ПравоИзменениеБезОграничения, | ЛОЖЬ КАК ПравоДобавлениеБезОграничения, @@ -1086,15 +1531,18 @@ | ИЗ | ТаблицыОтчетов КАК ТаблицыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПраваПрофилейНаОтчеты КАК ПраваПрофилейНаОтчеты - | ПО (ПраваПрофилейНаОтчеты.Отчет = ТаблицыОтчетов.Отчет) + | ПО (ПраваПрофилейНаОтчеты.ОтчетСсылка = ТаблицыОтчетов.ОтчетСсылка) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ - | ТаблицыОтчетов.Отчет, + | ТаблицыОтчетов.ОтчетСсылка, | ТаблицыОтчетов.Таблица, | ПраваПрофилейНаТаблицы.Профиль, | ЛОЖЬ, + | ПраваПрофилейНаТаблицы.ПравоЧтение, + | ПраваПрофилейНаТаблицы.ПравоИзменение, + | ПраваПрофилейНаТаблицы.ПравоДобавление, | ПраваПрофилейНаТаблицы.ПравоЧтениеБезОграничения, | ПраваПрофилейНаТаблицы.ПравоИзменениеБезОграничения, | ПраваПрофилейНаТаблицы.ПравоДобавлениеБезОграничения, @@ -1109,7 +1557,7 @@ | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ - | ТаблицыОтчетов.Отчет, + | ТаблицыОтчетов.ОтчетСсылка, | ТаблицыОтчетов.Таблица, | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.ПустаяСсылка), | ЛОЖЬ, @@ -1118,6 +1566,9 @@ | ЛОЖЬ, | ЛОЖЬ, | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, | ЛОЖЬ | ИЗ | ТаблицыОтчетов КАК ТаблицыОтчетов @@ -1128,7 +1579,7 @@ | ИЗ | ПраваПрофилейНаОтчеты КАК ПраваПрофилейНаОтчеты | ГДЕ - | ПраваПрофилейНаОтчеты.Отчет = ТаблицыОтчетов.Отчет) + | ПраваПрофилейНаОтчеты.ОтчетСсылка = ТаблицыОтчетов.ОтчетСсылка) | И НЕ ИСТИНА В | (ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА @@ -1138,13 +1589,17 @@ | ПраваПрофилейНаТаблицы.Таблица = ТаблицыОтчетов.Таблица)) КАК ТаблицыОтчетовСПравами | |СГРУППИРОВАТЬ ПО - | ТаблицыОтчетовСПравами.Отчет, + | ТаблицыОтчетовСПравами.ОтчетСсылка, | ТаблицыОтчетовСПравами.Таблица, | ТаблицыОтчетовСПравами.Профиль"; - ТекстЗапросаСГруппировкойПоОтчетам = +КонецФункции + +Функция ТекстЗапросаСГруппировкойПоОтчетам() + + Возврат "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПраваПрофилей.Отчет КАК Отчет, + | ПраваПрофилей.ОтчетСсылка КАК ОтчетСсылка, | ВЫБОР | КОГДА ПраваПрофилей.ПравоОтчета | ТОГДА 1 @@ -1156,28 +1611,28 @@ | ТОГДА ГруппыДоступа.Профиль | ИНАЧЕ ГруппыДоступа.Ссылка | КОНЕЦ КАК ГруппаДоступа, + | ПраваПрофилей.ПравоЧтение КАК ПравоЧтение, + | ПраваПрофилей.ПравоИзменение КАК ПравоИзменение, + | ПраваПрофилей.ПравоДобавление КАК ПравоДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоДобавление + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменение + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, | ПраваПрофилей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, | ПраваПрофилей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, | ПраваПрофилей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, | ВЫБОР - | КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление - | ТОГДА ВЫБОР - | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения - | ТОГДА 3 - | ИНАЧЕ 0 - | КОНЕЦ - | КОГДА ПраваПрофилей.ПравоРедактирование - | ТОГДА ВЫБОР - | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения - | ТОГДА 2 - | ИНАЧЕ 0 - | КОНЕЦ - | КОГДА ПраваПрофилей.ПравоПросмотр - | ТОГДА ВЫБОР - | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК ПравоБезОграничения, | ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр, @@ -1191,7 +1646,7 @@ | КОГДА ПраваПрофилей.ПравоПросмотр | ТОГДА 1 | ИНАЧЕ 0 - | КОНЕЦ КАК Право, + | КОНЕЦ КАК ПравоИнтерактивное, | СоставыГруппПользователей.Пользователь КАК Пользователь, | ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен |ПОМЕСТИТЬ ПраваПользователей @@ -1209,7 +1664,11 @@ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)"; - ТекстЗапросаСГруппировкойПоОтчетамКонечный = +КонецФункции + +Функция ТекстЗапросаСГруппировкойПоОтчетамКонечный() + + Возврат "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПраваПользователей.Пользователь КАК Пользователь, | ПраваПользователей.ВходВПрограммуРазрешен КАК ВходВПрограммуРазрешен @@ -1220,10 +1679,14 @@ | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | ПраваПользователей.Отчет КАК Отчет, + | ПраваПользователей.ОтчетСсылка КАК ОтчетСсылка, | ПраваПользователей.ПравоОтчета КАК ПравоОтчета, | ПраваПользователей.ОбъектМетаданных КАК ОбъектМетаданных, | ПраваПользователей.ГруппаДоступа КАК ГруппаДоступа, + | ПраваПользователей.ПравоЧтение КАК ПравоЧтение, + | ПраваПользователей.ПравоИзменение КАК ПравоИзменение, + | ПраваПользователей.ПравоДобавление КАК ПравоДобавление, + | ПраваПользователей.Право КАК Право, | ПраваПользователей.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения, | ПраваПользователей.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения, | ПраваПользователей.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения, @@ -1231,7 +1694,7 @@ | ПраваПользователей.ПравоПросмотр КАК ПравоПросмотр, | ПраваПользователей.ПравоРедактирование КАК ПравоРедактирование, | ПраваПользователей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление, - | ПраваПользователей.Право КАК Право, + | ПраваПользователей.ПравоИнтерактивное КАК ПравоИнтерактивное, | ПраваПользователей.Пользователь КАК Пользователь, | ПраваПользователей.ВходВПрограммуРазрешен КАК ВходВПрограммуРазрешен |ИЗ @@ -1240,7 +1703,7 @@ |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ - | ТаблицыОтчетов.Отчет, + | ТаблицыОтчетов.ОтчетСсылка, | 0, | ТаблицыОтчетов.Таблица, | ВЫБОР @@ -1255,6 +1718,10 @@ | ЛОЖЬ, | ЛОЖЬ, | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, | 0, | ПользователиСПравами.Пользователь, | ПользователиСПравами.ВходВПрограммуРазрешен @@ -1267,24 +1734,396 @@ | ИЗ | ПраваПользователей КАК ПраваПользователей | ГДЕ - | ПраваПользователей.Отчет = ТаблицыОтчетов.Отчет + | ПраваПользователей.ОтчетСсылка = ТаблицыОтчетов.ОтчетСсылка | И ПраваПользователей.ОбъектМетаданных = ТаблицыОтчетов.Таблица | И ПраваПользователей.Пользователь = ПользователиСПравами.Пользователь))"; - Запрос = Новый Запрос; +КонецФункции + +Функция ТекстЗапросаДляЗначенияДоступаНачало() + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПраваПрофилей.Профиль КАК Профиль + |ПОМЕСТИТЬ ВсеПрофили + |ИЗ + | ПраваПрофилейНаТаблицы КАК ПраваПрофилей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГруппыДоступа.Профиль КАК Профиль, + | ГруппыДоступа.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ГруппыДоступаВыбранногоЗначенияДоступа + |ИЗ + | ВсеПрофили КАК ВсеПрофили + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Профиль = ВсеПрофили.Профиль) + |ГДЕ + | НЕ ГруппыДоступа.ПометкаУдаления + | И ВЫБОР + | КОГДА &ЭтоГруппаЗначенийДоступа + | И ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК Значения + | ГДЕ + | Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + | И Значения.ЗначениеДоступа = &ЗначениеДоступа) + | ТОГДА ИСТИНА + | КОГДА НЕ &ЭтоГруппаЗначенийДоступа + | И ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК Значения + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений + | ПО + | Значения.ГруппаДоступа = ГруппыДоступа.Ссылка + | И Значения.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа + | И ГруппыЗначений.ЗначениеДоступа = &ЗначениеДоступа) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ = ВЫБОР + | КОГДА ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию + | ГДЕ + | ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка + | И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ(&ВидДоступа) + | И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ"; + +КонецФункции + +Функция ТекстЗапросаДляЗначенияДоступаКонец() + + Возврат + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПраваПрофилей.Таблица КАК ОбъектМетаданных, + | ВЫБОР + | КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа + | ТОГДА ГруппыДоступа.Профиль + | ИНАЧЕ ГруппыДоступа.Ссылка + | КОНЕЦ КАК ГруппаДоступа, + | ПраваПрофилей.ПравоЧтение КАК ПравоЧтение, + | ПраваПрофилей.ПравоИзменение КАК ПравоИзменение, + | ПраваПрофилей.ПравоДобавление КАК ПравоДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоДобавление + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменение + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, + | ВЫБОР + | КОГДА НЕ ПраваПрофилей.ПравоЧтение + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение + | КОНЕЦ КАК ПравоЧтениеБезОграничения, + | ВЫБОР + | КОГДА НЕ ПраваПрофилей.ПравоИзменение + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ КАК ПравоИзменениеБезОграничения, + | ВЫБОР + | КОГДА НЕ ПраваПрофилей.ПравоДобавление + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ КАК ПравоДобавлениеБезОграничения, + | ВЫБОР + | КОГДА ВЫБОР + | КОГДА НЕ ПраваПрофилей.ПравоДобавление + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ + | ТОГДА 3 + | КОГДА ВЫБОР + | КОГДА НЕ ПраваПрофилей.ПравоИзменение + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ + | ТОГДА 2 + | КОГДА ВЫБОР + | КОГДА НЕ ПраваПрофилей.ПравоЧтение + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение + | КОНЕЦ + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоБезОграничения, + | ПраваПрофилей.ПравоПросмотр КАК ПравоПросмотр, + | ПраваПрофилей.ПравоРедактирование КАК ПравоРедактирование, + | ПраваПрофилей.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоРедактирование + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоПросмотр + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоИнтерактивное, + | &ВидДоступа КАК ВидДоступа, + | &ВидДоступаПредставление КАК ВидДоступаПредставление, + | &ПредставлениеЗначенияДоступа КАК ЗначениеДоступа, + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен + |ИЗ + | ПраваПрофилейНаТаблицы КАК ПраваПрофилей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаВыбранногоЗначенияДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Профиль = ПраваПрофилей.Профиль) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав + | ПО (ВидыОграниченийПрав.Таблица = ПраваПрофилей.Таблица) + | И (НЕ ВидыОграниченийПрав.ДляВнешнихПользователей + | И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыПользователей)) + | ИЛИ ВидыОграниченийПрав.ДляВнешнихПользователей + | И (ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(УчастникиГруппДоступа.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей))) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь) + | И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА) + | И (&УсловиеОтбораПоПользователям) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)"; + +КонецФункции + +Функция ТекстЗапросаДляЗначенияДоступаТипПользовательКонец() + + Возврат + "ВЫБРАТЬ + | ГруппыДоступа.Профиль КАК Профиль, + | ГруппыДоступа.Ссылка КАК Ссылка, + | ГруппыДоступа.Пользователь КАК Пользователь, + | ГруппыДоступа.ЭтоАвторизованныйПользователь КАК ЭтоАвторизованныйПользователь + |ПОМЕСТИТЬ ГруппыДоступаВыбранногоЗначенияДоступаСУчастниками + |ИЗ + | (ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Профиль КАК Профиль, + | ГруппыДоступа.Ссылка КАК Ссылка, + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | ИСТИНА КАК ЭтоАвторизованныйПользователь + | ИЗ + | ВсеПрофили КАК ВсеПрофили + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Профиль = ВсеПрофили.Профиль) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = УчастникиГруппДоступа.Пользователь) + | И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА) + | И (&УсловиеОтбораПоПользователям) + | ГДЕ + | НЕ ГруппыДоступа.ПометкаУдаления + | И ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ГДЕ + | ГруппыЗначенийДоступа.ЗначениеДоступа = &ЗначениеДоступа + | И ГруппыЗначенийДоступа.ГруппаЗначенийДоступа = СоставыГруппПользователей.Пользователь) + | + | ОБЪЕДИНИТЬ ВСЕ + | + | ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Профиль, + | ГруппыДоступа.Ссылка, + | УчастникиГруппДоступа.Пользователь, + | ЛОЖЬ + | ИЗ + | ГруппыДоступаВыбранногоЗначенияДоступа КАК ГруппыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО (УчастникиГруппДоступа.Ссылка = ГруппыДоступа.Ссылка)) КАК ГруппыДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПраваПрофилей.Таблица КАК ОбъектМетаданных, + | ВЫБОР + | КОГДА &УпрощенныйИнтерфейсНастройкиПравДоступа + | ТОГДА ГруппыДоступаСУчастниками.Профиль + | ИНАЧЕ ГруппыДоступаСУчастниками.Ссылка + | КОНЕЦ КАК ГруппаДоступа, + | ПраваПрофилей.ПравоЧтение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения) КАК ПравоЧтение, + | ПраваПрофилей.ПравоИзменение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) КАК ПравоИзменение, + | ПраваПрофилей.ПравоДобавление + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения) КАК ПравоДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоДобавление + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения) + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоИзменение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоЧтение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения) + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК Право, + | ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоЧтение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения)) + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение + | КОНЕЦ КАК ПравоЧтениеБезОграничения, + | ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоИзменение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения)) + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ КАК ПравоИзменениеБезОграничения, + | ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоДобавление + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения)) + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ КАК ПравоДобавлениеБезОграничения, + | ВЫБОР + | КОГДА ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоДобавление + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения)) + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоДобавлениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ + | ТОГДА 3 + | КОГДА ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоИзменение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения)) + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоИзменениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоИзменение + | КОНЕЦ + | ТОГДА 2 + | КОГДА ВЫБОР + | КОГДА НЕ(ПраваПрофилей.ПравоЧтение + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения)) + | ТОГДА ЛОЖЬ + | КОГДА ПраваПрофилей.ПравоЧтениеБезОграничения + | ТОГДА ИСТИНА + | ИНАЧЕ НЕ ВидыОграниченийПрав.ПравоЧтение + | КОНЕЦ + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоБезОграничения, + | ПраваПрофилей.ПравоПросмотр + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения) КАК ПравоПросмотр, + | ПраваПрофилей.ПравоРедактирование + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) КАК ПравоРедактирование, + | ПраваПрофилей.ПравоИнтерактивноеДобавление + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения) КАК ПравоИнтерактивноеДобавление, + | ВЫБОР + | КОГДА ПраваПрофилей.ПравоИнтерактивноеДобавление + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоДобавлениеБезОграничения) + | ТОГДА 3 + | КОГДА ПраваПрофилей.ПравоРедактирование + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) + | ТОГДА 2 + | КОГДА ПраваПрофилей.ПравоПросмотр + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения) + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ПравоИнтерактивное, + | &ВидДоступа КАК ВидДоступа, + | &ВидДоступаПредставление КАК ВидДоступаПредставление, + | &ПредставлениеЗначенияДоступа КАК ЗначениеДоступа, + | СоставыГруппПользователей.Пользователь КАК Пользователь, + | ЕСТЬNULL(СведенияОПользователях.ВходВПрограммуРазрешен, ЛОЖЬ) КАК ВходВПрограммуРазрешен + |ИЗ + | ПраваПрофилейНаТаблицы КАК ПраваПрофилей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаВыбранногоЗначенияДоступаСУчастниками КАК ГруппыДоступаСУчастниками + | ПО (ГруппыДоступаСУчастниками.Профиль = ПраваПрофилей.Профиль) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав + | ПО (ВидыОграниченийПрав.Таблица = ПраваПрофилей.Таблица) + | И (ВидыОграниченийПрав.ЭтоАвторизованныйПользователь <= ГруппыДоступаСУчастниками.ЭтоАвторизованныйПользователь + | ИЛИ ПраваПрофилей.ПравоЧтениеБезОграничения + | ИЛИ ПраваПрофилей.ПравоИзменениеБезОграничения) + | И (НЕ ВидыОграниченийПрав.ДляВнешнихПользователей + | И (ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.ГруппыПользователей)) + | ИЛИ ВидыОграниченийПрав.ДляВнешнихПользователей + | И (ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ГруппыДоступаСУчастниками.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей))) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаСУчастниками.Пользователь) + | И (ЕСТЬNULL(СоставыГруппПользователей.Пользователь.Служебный, ЛОЖЬ) <> ИСТИНА) + | И (&УсловиеОтбораПоПользователям) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях + | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь)"; + +КонецФункции + +Функция ПраваПользователей() УсловиеОтбораПоПользователям = ""; УсловиеОтбораПоВходВПрограммуРазрешен = ""; Если ОтборПоВходВПрограммуРазрешен() Тогда ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало = - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало + " + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало() + " | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователях КАК СведенияОПользователях | ПО (СведенияОПользователях.Пользователь = СоставыГруппПользователей.Пользователь) | И (СведенияОПользователях.ВходВПрограммуРазрешен)"; УсловиеОтбораПоВходВПрограммуРазрешен = " | И (СведенияОПользователях.ВходВПрограммуРазрешен)"; + Иначе + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало = + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало(); КонецЕсли; + Запрос = Новый Запрос; + ОтборПоВидуПользователей = ОтборПоВидуПользователей(); ОтборПоПользователям = ОтборПоПользователям(); Если ЗначениеЗаполнено(ОтборПоПользователям.Значение) И ОтборПоПользователям.БезГрупп Тогда @@ -1311,63 +2150,134 @@ ВключенаГруппировкаПоОтчетам = ВключенаГруппировкаПоОтчетам(); ВариантСОграничениямиДоступа = ВариантСОграничениямиДоступа(); + ВариантПравНаОбъект = ВариантПравНаОбъект(); + ВариантДляЗначенияДоступа = ВариантДляЗначенияДоступа(); + УниверсальноеОграничение = + УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина, Истина); + + Если ВариантСОграничениямиДоступа Или ВариантДляЗначенияДоступа Тогда + Если УниверсальноеОграничение Тогда + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений + = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоНовому(); + Иначе + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений + = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоСтарому(); + КонецЕсли; + ПустыеСсылкиЗначенийДоступа = УправлениеДоступомСлужебный.ПустыеСсылкиЗначенийДоступа(); + КонецЕсли; Если ВключенаГруппировкаПоОтчетам Тогда - ТекстЗапросаОсновной = ТекстЗапросаСГруппировкойПоОтчетам; - Запрос.Текст = ТекстЗапросаОбщий + ОбщегоНазначения.РазделительПакетаЗапросов() - + ТекстЗапросаСГруппировкойПоОтчетамДополнение; + ТекстЗапросаОсновной = ТекстЗапросаСГруппировкойПоОтчетам(); + Запрос.Текст = ТекстЗапросаОбщий() + ОбщегоНазначения.РазделительПакетаЗапросов() + + ТекстЗапросаСГруппировкойПоОтчетамДополнение(); Запрос.УстановитьПараметр("ПраваРолейНаОтчеты", ПраваРолейНаОтчеты()); Запрос.УстановитьПараметр("ТаблицыОтчетов", ТаблицыОтчетов()); ИначеЕсли ВариантСОграничениямиДоступа Тогда - УниверсальноеОграничение = - УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина, Истина); - Если УниверсальноеОграничение Тогда - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений - = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоНовому; - Запрос.УстановитьПараметр("ВидыОграниченийПрав", - Отчеты.АнализПравДоступа.ВидыОграниченийПрав(, Истина)); - Иначе - ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений - = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграниченийПоСтарому; - Запрос.УстановитьПараметр("ВидыОграниченийПрав", - Отчеты.АнализПравДоступа.ВидыОграниченийПрав()); - КонецЕсли; ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаНачало + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений + ОбщегоНазначения.РазделительПакетаЗапросов() - + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаКонец; - Запрос.Текст = ТекстЗапросаОбщий; + + ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаКонец(); + Запрос.Текст = ТекстЗапросаОбщий(); Запрос.УстановитьПараметр("ТекстРазрешенные", " (" + НСтр("ru = 'Разрешенные'")+ ")"); Запрос.УстановитьПараметр("ТекстЗапрещенные", " (" + НСтр("ru = 'Запрещенные'") + ")"); Запрос.УстановитьПараметр("ТекстРазрешенныеПользователи", " (" + НСтр("ru = 'Разрешенные'") + ") - " + НСтр("ru = 'авторизованный пользователь и его группы всегда разрешены'")); Запрос.УстановитьПараметр("ТекстЗапрещенныеПользователи", " (" + НСтр("ru = 'Запрещенные'") + ") - " + НСтр("ru = 'авторизованный пользователь и его группы всегда разрешены'")); - Запрос.УстановитьПараметр("ТекстОграничениеБезВидовДоступа", "<" + НСтр("ru = 'Ограничение без видов доступа'")+ ">"); + Запрос.УстановитьПараметр("ОграничениеОтключено", "<" + НСтр("ru = 'Ограничение отключено'")+ ">"); + Запрос.УстановитьПараметр("НестандартноеОграничение", + ?(УниверсальноеОграничение, "<" + НСтр("ru = 'Нестандартное ограничение'") + ">", + Отчеты.АнализПравДоступа.ПредставлениеОграниченияБезВидовДоступа())); Запрос.УстановитьПараметр("ТекстБезОграничения", "<" + НСтр("ru = 'Без ограничения'") + ">"); Запрос.УстановитьПараметр("ТекстВсеРазрешены", "<" + НСтр("ru = 'Все разрешены'") + ">"); Запрос.УстановитьПараметр("ТекстВсеЗапрещены", "<" + НСтр("ru = 'Все запрещены'") + ">"); - Запрос.УстановитьПараметр("ПустыеСсылкиЗначенийДоступа", - УправлениеДоступомСлужебный.ПустыеСсылкиЗначенийДоступа()); + Запрос.УстановитьПараметр("ПустыеСсылкиЗначенийДоступа", ПустыеСсылкиЗначенийДоступа); + ВсеТаблицыСОграничением = Новый Массив; + Запрос.УстановитьПараметр("ВидыОграниченийПрав", + Отчеты.АнализПравДоступа.ВидыОграниченийПрав(,, ВсеТаблицыСОграничением)); + Запрос.УстановитьПараметр("ВсеТаблицыСОграничением", ВсеТаблицыСОграничением); + // Отображение специальных ограничений: + // 1. Права по ограничению не показываются (информация в правах без ограничения на группе доступа): + // <Без ограничения> - ограничения нет в одной из ролей профиля групп доступа. + // 2. Права по ограничению показываются с ограничением (как для случая <Все разрешены>): + // <Ограничение без видов доступа> - есть ограничение без видов доступа (специальные функции). + // <Доступ запрещен> - безусловное ограничение на уровне логики ограничения "ГДЕ ЛОЖЬ". + // <Ограничение отключено в профиле> - значит + // нет настройки по видам доступа в профиле и + // нет ограничения без видов доступа. + // <Ограничение отключено>, <Ограничение чтения отключено> - значит + // ограничение отключено во всех группах доступа или + // отключено по видам доступа на уровне функциональных опций или + // отключено на уровне логики ограничения "ГДЕ ИСТИНА". + + ИначеЕсли ВариантПравНаОбъект Тогда + ЭлементДанных = ОтборПоЭлементамДанных(); + ПраваНаЭлементДанных = УправлениеДоступом.ПраваДоступаКДанным(ЭлементДанных, Неопределено); + Если Не ЗначениеЗаполнено(ЭлементДанных) Тогда + ПраваНаЭлементДанных.Очистить(); + КонецЕсли; + Запрос.УстановитьПараметр("ПраваНаЭлементДанных", ПраваНаЭлементДанных); + ТекстЗапросаОсновной = ТекстЗапросаПравОбъекта(); + Запрос.Текст = ТекстЗапросаОбщий(); + + ИначеЕсли ВариантДляЗначенияДоступа Тогда + ЗначениеДоступа = ОтборПоЗначениюДоступа(); + СвойстваВидовДоступа = УправлениеДоступомСлужебный.СвойстваВидовДоступа(); + ПоТипамГруппИЗначений = СвойстваВидовДоступа.ПоТипамГруппИЗначений; + СвойстваВидаДоступа = ПоТипамГруппИЗначений.Получить(ТипЗнч(ЗначениеДоступа)); + ВидДоступа = ?(СвойстваВидаДоступа = Неопределено, Null, СвойстваВидаДоступа.Ссылка); + Отбор = Новый Структура("ВидДоступа", ВидДоступа); + ВидыОграниченийПрав = Отчеты.АнализПравДоступа.ВидыОграниченийПрав(, Истина); + Запрос.УстановитьПараметр("ВидыОграниченийПрав", + ВидыОграниченийПрав.Скопировать(ВидыОграниченийПрав.НайтиСтроки(Отбор))); + ВариантГруппировки = ЗначениеПараметраИзНастройки(КомпоновщикНастроек.ПользовательскиеНастройки, + "ВариантГруппировки", 0); + ТипПользователь = Новый ОписаниеТипов( + "СправочникСсылка.Пользователи, СправочникСсылка.ГруппыПользователей, + |СправочникСсылка.ВнешниеПользователи,СправочникСсылка.ГруппыВнешнихПользователей"); + ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетамСОграничениямиДоступаВидыОграничений + + ОбщегоНазначения.РазделительПакетаЗапросов() + + ТекстЗапросаДляЗначенияДоступаНачало() + + ОбщегоНазначения.РазделительПакетаЗапросов() + + ?(ТипПользователь.СодержитТип(ТипЗнч(ВидДоступа)), + ТекстЗапросаДляЗначенияДоступаТипПользовательКонец(), + ТекстЗапросаДляЗначенияДоступаКонец()); + Запрос.Текст = ТекстЗапросаОбщий(); + Запрос.УстановитьПараметр("ВидДоступа", ВидДоступа); + Запрос.УстановитьПараметр("ВидДоступаПредставление", ?(СвойстваВидаДоступа = Неопределено, "", + УправлениеДоступомСлужебный.ПредставлениеВидаДоступа(СвойстваВидаДоступа))); + Запрос.УстановитьПараметр("ЗначениеДоступа", ЗначениеДоступа); + НайденнаяСтрока = ПустыеСсылкиЗначенийДоступа.Найти(ЗначениеДоступа, "ПустаяСсылка"); + Запрос.УстановитьПараметр("ПредставлениеЗначенияДоступа", ?(НайденнаяСтрока = Неопределено, + ЗначениеДоступа, НайденнаяСтрока.Представление)); + Запрос.УстановитьПараметр("ЭтоГруппаЗначенийДоступа", СвойстваВидаДоступа <> Неопределено + И СвойстваВидовДоступа.ПоТипамЗначений.Получить(ТипЗнч(ЗначениеДоступа)) = Неопределено); Иначе - ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетам; - Запрос.Текст = ТекстЗапросаОбщий; + ТекстЗапросаОсновной = ТекстЗапросаБезГруппировкиПоОтчетам(); + Запрос.Текст = ТекстЗапросаОбщий(); КонецЕсли; УпрощенныйИнтерфейс = УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа(); - Если Не УпрощенныйИнтерфейс Тогда - ТекстЗапросаОсновной = СтрЗаменить(ТекстЗапросаОсновной, - "ВЫБРАТЬ РАЗЛИЧНЫЕ", "ВЫБРАТЬ"); // @query-part-1 @query-part-2 - КонецЕсли; Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() + ТекстЗапросаОсновной; Запрос.УстановитьПараметр("УпрощенныйИнтерфейсНастройкиПравДоступа", УпрощенныйИнтерфейс); Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений()); - ОтборПоТаблицам = ОтборПоТаблицам(); + Если ВариантПравНаОбъект Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); + ОтборПоТаблицам = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + ИначеЕсли ВариантДляЗначенияДоступа Тогда + ТаблицыСОграничением = Запрос.Параметры.ВидыОграниченийПрав.Скопировать(, "Таблица"); + ТаблицыСОграничением.Свернуть("Таблица"); + ОтборПоТаблицам = ?(ЗначениеЗаполнено(ТаблицыСОграничением), + ОтборПоТаблицам(ТаблицыСОграничением.ВыгрузитьКолонку("Таблица")), + ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Неопределено)); + Иначе + ОтборПоТаблицам = ОтборПоТаблицам(); + КонецЕсли; Если ЗначениеЗаполнено(ОтборПоТаблицам) Тогда Запрос.УстановитьПараметр("ВыбранныеТаблицы", ОтборПоТаблицам); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПравПоТаблицам", @@ -1393,23 +2303,44 @@ Запрос.Текст = Запрос.Текст + " | |ИНДЕКСИРОВАТЬ ПО - | Отчет, + | ОтчетСсылка, | ОбъектМетаданных, | Пользователь"; Запрос.Текст = Запрос.Текст + ОбщегоНазначения.РазделительПакетаЗапросов() - + ТекстЗапросаСГруппировкойПоОтчетамКонечный; + + ТекстЗапросаСГруппировкойПоОтчетамКонечный(); КонецЕсли; Результат = Запрос.Выполнить().Выгрузить(); + Если ВариантПравНаОбъект Тогда + Результат.Колонки.Добавить("ЭлементДанных"); + Результат.Колонки.Добавить("ЭлементДанныхПредставление"); + Результат.ЗаполнитьЗначения(ОбщегоНазначения.ЗначениеВСтрокуXML(ЭлементДанных), "ЭлементДанных"); + Результат.ЗаполнитьЗначения(ПредставлениеЭлементаДанных(ЭлементДанных), "ЭлементДанныхПредставление"); + КонецЕсли; + Возврат Результат; КонецФункции +Функция ТипСтрока(ДлинаСтроки) + + Возврат Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(ДлинаСтроки)) + +КонецФункции + +Функция ТипЧисло(ЧислоРазрядов) + + Возврат Новый ОписаниеТипов("Число",,, + Новый КвалификаторыЧисла(ЧислоРазрядов, 0, ДопустимыйЗнак.Неотрицательный)); + +КонецФункции + Функция ВключенаГруппировкаПоОтчетам() СписокПолей = Новый Массив; - ЗаполнитьСписокПолейГруппировок(КомпоновщикНастроек.ПолучитьНастройки().Структура, СписокПолей); + ЗаполнитьСписокПолейГруппировок(КомпоновщикНастроек.Настройки.Структура, + КомпоновщикНастроек.ПользовательскиеНастройки, СписокПолей); Возврат СписокПолей.Найти(Новый ПолеКомпоновкиДанных("Отчет")) <> Неопределено; @@ -1423,6 +2354,22 @@ КонецФункции +Функция ВариантПравНаОбъект() + + Вариант = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта; + + Возврат Вариант = "ПраваПользователейНаОбъект"; + +КонецФункции + +Функция ВариантДляЗначенияДоступа() + + Вариант = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта; + + Возврат Вариант = "ПраваПользователейВРазрезеРазрешенногоЗначения"; + +КонецФункции + // Возвращаемое значение: // Структура: // * ЕстьИерархия - Булево @@ -1430,15 +2377,17 @@ // * ТипСсылки - Тип // * ПустаяСсылка - ЛюбаяСсылка // -Функция НастройкиПравПоТаблицеВОтборе() +Функция НастройкиПравПоТаблицеВОтборе(НастройкиКД = Неопределено, ПользовательскиеНастройкиКД = Неопределено) - Таблица = ОтборПоТаблицам(); - Если Не ЗначениеЗаполнено(Таблица) - Или Не ОписаниеТиповИдентификатора().СодержитТип(ТипЗнч(Таблица)) Тогда + Таблицы = ОтборПоТаблицам(, НастройкиКД, ПользовательскиеНастройкиКД); + Если Не ЗначениеЗаполнено(Таблицы) + Или Таблицы.Количество() <> 1 + Или Не ЗначениеЗаполнено(Таблицы[0]) + Или Не ОписаниеТиповИдентификатора().СодержитТип(ТипЗнч(Таблицы[0])) Тогда Возврат Неопределено; КонецЕсли; - МетаданныеТаблицы = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Таблица, Ложь); + МетаданныеТаблицы = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Таблицы[0], Ложь); Если МетаданныеТаблицы = Неопределено Или Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеТаблицы) Тогда Возврат Неопределено; @@ -1471,12 +2420,26 @@ // КоллекцияЭлементов - КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных // СписокПолей - Массив // -Процедура ЗаполнитьСписокПолейГруппировок(КоллекцияЭлементов, СписокПолей) +Процедура ЗаполнитьСписокПолейГруппировок(КоллекцияЭлементов, ПользовательскиеНастройки, СписокПолей) Для Каждого Элемент Из КоллекцияЭлементов Цикл - Если (ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") - Или ТипЗнч(Элемент) = Тип("ГруппировкаТаблицыКомпоновкиДанных")) - И Элемент.Использование Тогда + Если ТипЗнч(Элемент) <> Тип("ГруппировкаКомпоновкиДанных") + И ТипЗнч(Элемент) <> Тип("ГруппировкаТаблицыКомпоновкиДанных") + И ТипЗнч(Элемент) <> Тип("ТаблицаКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + ПользовательскийЭлемент = ПользовательскиеНастройки.Элементы.Найти( + Элемент.ИдентификаторПользовательскойНастройки); + Если ПользовательскийЭлемент <> Неопределено + И Не ПользовательскийЭлемент.Использование + Или ПользовательскийЭлемент = Неопределено + И Не Элемент.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда + ЗаполнитьСписокПолейГруппировок(Элемент.Строки, ПользовательскиеНастройки, СписокПолей); + ЗаполнитьСписокПолейГруппировок(Элемент.Колонки, ПользовательскиеНастройки, СписокПолей); + Иначе Для Каждого Поле Из Элемент.ПоляГруппировки.Элементы Цикл Если ТипЗнч(Поле) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда Если Поле.Использование Тогда @@ -1484,10 +2447,7 @@ КонецЕсли; КонецЕсли; КонецЦикла; - ЗаполнитьСписокПолейГруппировок(Элемент.Структура, СписокПолей); - ИначеЕсли ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") И Элемент.Использование Тогда - ЗаполнитьСписокПолейГруппировок(Элемент.Строки, СписокПолей); - ЗаполнитьСписокПолейГруппировок(Элемент.Колонки, СписокПолей); + ЗаполнитьСписокПолейГруппировок(Элемент.Структура, ПользовательскиеНастройки, СписокПолей); КонецЕсли; КонецЦикла; @@ -1573,21 +2533,57 @@ КонецФункции -Функция ОтборПоТаблицам() +Функция ОтборПоТаблицам(Список = Неопределено, НастройкиКД = Неопределено, ПользовательскиеНастройкиКД = Неопределено) - Отбор = КомпоновщикНастроек.ПолучитьНастройки().Отбор; - Для Каждого Элемент Из Отбор.Элементы Цикл - Если Элемент.Использование И Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектМетаданных") Тогда - Если Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно - Или Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда - Возврат Элемент.ПравоеЗначение; - Иначе - Возврат Неопределено; - КонецЕсли; + Если НастройкиКД = Неопределено Тогда + НастройкиКД = КомпоновщикНастроек.Настройки; + КонецЕсли; + Если ПользовательскиеНастройкиКД = Неопределено Тогда + ПользовательскиеНастройкиКД = КомпоновщикНастроек.ПользовательскиеНастройки; + КонецЕсли; + + НайденныйЭлемент = Неопределено; + Для Каждого Элемент Из НастройкиКД.Отбор.Элементы Цикл + Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектМетаданных") Тогда + НайденныйЭлемент = Элемент; + Прервать; КонецЕсли; КонецЦикла; - Возврат Неопределено; + Если НайденныйЭлемент = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Настройка = ПользовательскиеНастройкиКД.Элементы.Найти( + НайденныйЭлемент.ИдентификаторПользовательскойНастройки); + Если Настройка = Неопределено Тогда + Настройка = НайденныйЭлемент; + КонецЕсли; + + Если Не Настройка.Использование Тогда + Значения = Неопределено; + ИначеЕсли Настройка.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда + Значения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Настройка.ПравоеЗначение); + ИначеЕсли Настройка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда + Значения = Настройка.ПравоеЗначение.ВыгрузитьЗначения(); + КонецЕсли; + + Если Значения = Неопределено Тогда + Возврат Список; + КонецЕсли; + + Если Список = Неопределено Тогда + Возврат Значения; + КонецЕсли; + + Результат = Новый Массив; + Для Каждого Значение Из Значения Цикл + Если Список.Найти(Значение) <> Неопределено Тогда + Результат.Добавить(Значение); + КонецЕсли; + КонецЦикла; + + Возврат Результат; КонецФункции @@ -1913,14 +2909,10 @@ Функция ЗаголовкиПрав(НастройкиПрав, ИмяДляПодпапок) Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("ИмяПрава", Новый ОписаниеТипов("Строка", - ,,, Новый КвалификаторыСтроки(60, ДопустимаяДлина.Переменная))); - Результат.Колонки.Добавить("ИндексПрава", Новый ОписаниеТипов("Число", - ,, Новый КвалификаторыЧисла(2, 0, ДопустимыйЗнак.Неотрицательный))); - Результат.Колонки.Добавить("ЗаголовокПрава", Новый ОписаниеТипов("Строка", - ,,, Новый КвалификаторыСтроки(60, ДопустимаяДлина.Переменная))); - Результат.Колонки.Добавить("ПодсказкаПрава", Новый ОписаниеТипов("Строка", - ,,, Новый КвалификаторыСтроки(150, ДопустимаяДлина.Переменная))); + Результат.Колонки.Добавить("ИмяПрава", ТипСтрока(60)); + Результат.Колонки.Добавить("ИндексПрава", ТипЧисло(2)); + Результат.Колонки.Добавить("ЗаголовокПрава", ТипСтрока(60)); + Результат.Колонки.Добавить("ПодсказкаПрава", ТипСтрока(150)); Для Каждого ОписаниеПрава Из НастройкиПрав.ОписаниеПрав Цикл ПредставленияПрава = РегистрыСведений.НастройкиПравОбъектов.ПредставлениеВозможногоПрава(ОписаниеПрава); @@ -1974,14 +2966,85 @@ КонецФункции -Процедура ОтключитьГруппировки(НастройкиКомпоновщика, ИменаГруппировок) +Функция ОтборПоЭлементамДанных() - Имена = СтрРазделить(ИменаГруппировок, ",", Ложь); - Для Каждого Группировка Из НастройкиКомпоновщика.Структура Цикл - Если Имена.Найти(Группировка.Имя) = Неопределено Тогда - Продолжить; + ПолеОтбора = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("ЭлементДанных"); + ЗначениеОтбора = ПолеОтбора.Значение; + Если Не ПолеОтбора.Использование Или Не ЗначениеЗаполнено(ЗначениеОтбора) Тогда + Возврат Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + + Возврат ЗначениеОтбора; + +КонецФункции + +Функция ПредставлениеЭлементаДанных(ЭлементДанных) + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных)); + + Если Не ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда + Возврат Строка(ЭлементДанных); + КонецЕсли; + + ПредставлениеДанных = ОбъектМетаданных.Представление(); + ОписаниеПолей = СтандартныеПодсистемыСервер.ОписаниеКлючаЗаписи( + ОбъектМетаданных.ПолноеИмя()).ОписаниеПолей; + + СписокПолей = Новый Массив; + Для Каждого ОписаниеПоля Из ОписаниеПолей Цикл + СписокПолей.Добавить(СтрШаблон(" %1 = ""%2""", + ОписаниеПоля.Представление, Строка(ЭлементДанных[ОписаниеПоля.Имя]))); + КонецЦикла; + + ШаблонПредставления = ?(ОписаниеПолей.Количество() = 1, + НСтр("ru = 'Запись регистра ""%1"" с ключевым полем: + |%2'"), + НСтр("ru = 'Запись регистра ""%1"" с ключевыми полями: + |%2'")); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПредставления, + ПредставлениеДанных, СтрСоединить(СписокПолей, "," + Символы.ПС)); + +КонецФункции + +Функция ОтборПоЗначениюДоступа() + + ПолеОтбора = КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы.Найти("ЗначениеДоступа"); + + Возврат ПолеОтбора.Значение; + +КонецФункции + + +Функция ЗначениеПараметраИзНастройки(ПользовательскиеНастройкиКД, ИмяПараметра, ЗначениеПоУмолчанию = Неопределено) + + Параметр = Новый ПараметрКомпоновкиДанных(ИмяПараметра); + Значение = ЗначениеПоУмолчанию; + Если ПользовательскиеНастройкиКД = Неопределено Тогда + Возврат Значение; + КонецЕсли; + + Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройкиКД.Элементы Цикл + + Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И ЭлементПользовательскойНастройки.Параметр = Параметр Тогда + + Если ЭлементПользовательскойНастройки.Использование Тогда + Значение = ЭлементПользовательскойНастройки.Значение; + КонецЕсли; + Прервать; КонецЕсли; - Группировка.Использование = Ложь; + КонецЦикла; + + Возврат Значение; + +КонецФункции + +Процедура УстановитьИспользованиеГруппировок(Группировки, НастройкиКД, ПользовательскиеНастройкиКД) + + Для Каждого Группировка Из Группировки Цикл + Отчеты.АнализПравДоступа.УстановитьИспользованиеГруппировки( + Группировка.Ключ, Группировка.Значение, НастройкиКД, ПользовательскиеНастройкиКД); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs b/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs index 7a7de766c..ad8bf48d8 100644 --- a/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs +++ b/SSL/src/Reports/АнализПравДоступа/Templates/Макет/Template.dcs @@ -20,6 +20,62 @@ d5p1:CatalogRef.ИдентификаторыОбъектовМетаданных + + ЭлементДанных + ЭлементДанных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Элемент данных</v8:content> + </v8:item> + + + true + + + true + true + true + true + + ЭлементДанныхПредставление + + xs:string + + 0 + Variable + + + + + ЭлементДанныхПредставление + ЭлементДанныхПредставление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Элемент данных представление</v8:content> + </v8:item> + + + true + true + true + true + + + true + true + true + true + + + xs:string + + 0 + Variable + + + Пользователь Пользователь @@ -64,16 +120,19 @@ Создание + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - ПравоПросмотр @@ -84,16 +143,19 @@ Просмотр + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - ПравоРедактирование @@ -104,26 +166,39 @@ Редактирование + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - - Право - Право + ПравоИнтерактивное + ПравоИнтерактивное <v8:item> <v8:lang>ru</v8:lang> <v8:content>Уровень доступа</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:decimal @@ -132,13 +207,15 @@ Nonnegative - - - false - Формат - - - + + + + + ru + Без доступа + + + 1 @@ -169,7 +246,7 @@ Отчет - Отчет + ОтчетСсылка <v8:item> <v8:lang>ru</v8:lang> @@ -203,6 +280,16 @@ <v8:content>Уровень доступа к отчету</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:decimal @@ -211,6 +298,24 @@ Nonnegative + + + + + ru + Без доступа + + + + + 1 + + + ru + Просмотр + + + ВходВПрограммуРазрешен @@ -234,6 +339,12 @@ Вид доступа + + true + true + true + true + ВидДоступаПредставление 9a33b5dc-a8f1-496e-9961-95890984cd86 @@ -248,6 +359,16 @@ Все разрешены + + true + true + + + true + true + true + true + xs:boolean @@ -272,6 +393,16 @@ Значение доступа + + true + true + + + true + true + true + true + 9a33b5dc-a8f1-496e-9961-95890984cd86 @@ -285,6 +416,18 @@ Вид доступа представление + + true + true + true + true + + + true + true + true + true + xs:string @@ -294,74 +437,93 @@ - ПравоЧтениеБезОграничения - ПравоЧтениеБезОграничения + ПравоЧтение + ПравоЧтение <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Право чтение без ограничения</v8:content> + <v8:content>Чтение</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - - ПравоИзменениеБезОграничения - ПравоИзменениеБезОграничения + ПравоИзменение + ПравоИзменение <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Право изменение без ограничения</v8:content> + <v8:content>Изменение</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - - ПравоДобавлениеБезОграничения - ПравоДобавлениеБезОграничения + ПравоДобавление + ПравоДобавление <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Право добавление без ограничения</v8:content> + <v8:content>Добавление</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - - ПравоБезОграничения - ПравоБезОграничения + Право + Право <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Право без ограничения</v8:content> + <v8:content>Уровень доступа программный</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:decimal @@ -370,19 +532,21 @@ Nonnegative - - - false - Формат - - - + + + + + ru + Без доступа + + + 1 ru - Просмотр без ограничения + Чтение @@ -391,7 +555,7 @@ ru - Редактирование без ограничения + Изменение @@ -400,7 +564,273 @@ ru - Создание без ограничения + Добавление + + + + + + ПравоЧтениеБезОграничения + ПравоЧтениеБезОграничения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чтение без ограничения</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:boolean + + + + ПравоИзменениеБезОграничения + ПравоИзменениеБезОграничения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение без ограничения</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:boolean + + + + ПравоДобавлениеБезОграничения + ПравоДобавлениеБезОграничения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавление без ограничения</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:boolean + + + + ПравоБезОграничения + ПравоБезОграничения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень доступа без ограничения</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + + ru + Нет доступа без ограничения + + + + + 1 + + + ru + Чтение без ограничения + + + + + 2 + + + ru + Изменение без ограничения + + + + + 3 + + + ru + Добавление без ограничения + + + + + + ВидДоступаПравоЧтение + ВидДоступаПравоЧтение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чтение (по виду доступа)</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:boolean + + + + ВидДоступаПравоИзменение + ВидДоступаПравоИзменение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение (по виду доступа)</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:boolean + + + + ВидДоступаПравоДобавление + ВидДоступаПравоДобавление + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавление (по виду доступа)</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:boolean + + + + ВидДоступаПраво + ВидДоступаПраво + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень доступа (по виду доступа)</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + + ru + Без доступа + + + + + 1 + + + ru + Чтение + + + + + 2 + + + ru + Изменение + + + + + 3 + + + ru + Добавление @@ -411,19 +841,22 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Вид доступа право чтение без ограничения</v8:content> + <v8:content>Чтение без ограничения (по виду доступа)</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - ВидДоступаПравоИзменениеБезОграничения @@ -431,19 +864,22 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Вид доступа право изменение без ограничения</v8:content> + <v8:content>Изменение без ограничения (по виду доступа)</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - ВидДоступаПравоДобавлениеБезОграничения @@ -451,19 +887,86 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Вид доступа право добавление без ограничения</v8:content> + <v8:content>Добавление без ограничения (по виду доступа)</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - + + + ВидДоступаПравоБезОграничения + ВидДоступаПравоБезОграничения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень доступа без ограничения (по виду доступа)</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + + ru + Нет доступа без ограничения + + + + + 1 + + + ru + Чтение без ограничения + + + + + 2 + + + ru + Изменение без ограничения + + + + + 3 + + + ru + Добавление без ограничения + + + ВидДоступаПравоПросмотр @@ -471,19 +974,22 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Вид доступа право просмотр</v8:content> + <v8:content>Просмотр (по виду доступа)</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - ВидДоступаПравоРедактирование @@ -491,19 +997,22 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Вид доступа право редактирование</v8:content> + <v8:content>Редактирование (по виду доступа)</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - ВидДоступаПравоИнтерактивноеДобавление @@ -511,19 +1020,86 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Вид доступа право интерактивное добавление</v8:content> + <v8:content>Создание (по виду доступа)</v8:content> </v8:item> + + true + true + + + true + true + true + true + xs:boolean - - - false - Формат - - - + + + ВидДоступаПравоИнтерактивное + ВидДоступаПравоИнтерактивное + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уровень доступа (по виду доступа)</v8:content> + </v8:item> + + + true + true + + + true + true + true + true + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + + ru + Без доступа + + + + + 1 + + + ru + Просмотр + + + + + 2 + + + ru + Редактирование + + + + + 3 + + + ru + Создание + + + ИсточникДанных1 ПраваПользователей @@ -589,6 +1165,18 @@ Это владелец настроек + + true + true + true + true + + + true + true + true + true + xs:boolean @@ -602,6 +1190,17 @@ Наследование настроек владельцем + + true + true + true + + + true + true + true + true + xs:boolean @@ -615,6 +1214,16 @@ Настроенное право + + true + true + + + true + true + true + true + xs:string @@ -632,6 +1241,17 @@ Значение права + + true + true + true + + + true + true + true + true + xs:decimal @@ -677,6 +1297,17 @@ Индекс права + + true + true + true + + + true + true + true + true + xs:decimal @@ -700,6 +1331,17 @@ Заголовок права + + true + true + true + + + true + true + true + true + xs:string @@ -717,6 +1359,17 @@ Подсказка права + + true + true + true + + + true + true + true + true + xs:string @@ -765,10 +1418,8 @@ - true true true - true true @@ -791,10 +1442,8 @@ - true true true - true true @@ -815,6 +1464,16 @@ Это владелец настроек + + true + true + + + true + true + true + true + xs:boolean @@ -876,11 +1535,6 @@ ЭтоВладелецНастроек ЭтоВладелецНастроек - - Право - Максимум(Право) - ОбъектМетаданных - ПравоПросмотр Максимум(ПравоПросмотр) @@ -894,7 +1548,12 @@ Максимум(ПравоИнтерактивноеДобавление) - Право + ПравоИнтерактивное + Максимум(ПравоИнтерактивное) + ОбъектМетаданных + + + ПравоИнтерактивное Максимум(ПравоОтчета) Отчет @@ -903,10 +1562,27 @@ Минимум(ВходВПрограммуРазрешен) - ПравоБезОграничения - Максимум(ПравоБезОграничения) + ПравоЧтение + Максимум(ПравоЧтение) + + + ПравоИзменение + Максимум(ПравоИзменение) + + + ПравоДобавление + Максимум(ПравоДобавление) + + + Право + Максимум(Право) ОбъектМетаданных + + Право + Максимум(ПравоОтчета) + Отчет + ПравоЧтениеБезОграничения Максимум(ПравоЧтениеБезОграничения) @@ -919,6 +1595,27 @@ ПравоДобавлениеБезОграничения Максимум(ПравоДобавлениеБезОграничения) + + ПравоБезОграничения + Максимум(ПравоБезОграничения) + ОбъектМетаданных + + + ВидДоступаПравоЧтение + Максимум(ВидДоступаПравоЧтение) + + + ВидДоступаПравоИзменение + Максимум(ВидДоступаПравоИзменение) + + + ВидДоступаПравоДобавление + Максимум(ВидДоступаПравоДобавление) + + + ВидДоступаПраво + Максимум(ВидДоступаПраво) + ВидДоступаПравоЧтениеБезОграничения Максимум(ВидДоступаПравоЧтениеБезОграничения) @@ -931,6 +1628,10 @@ ВидДоступаПравоДобавлениеБезОграничения Максимум(ВидДоступаПравоДобавлениеБезОграничения) + + ВидДоступаПравоБезОграничения + Максимум(ВидДоступаПравоБезОграничения) + ВидДоступаПравоПросмотр Максимум(ВидДоступаПравоПросмотр) @@ -943,10 +1644,35 @@ ВидДоступаПравоИнтерактивноеДобавление Максимум(ВидДоступаПравоИнтерактивноеДобавление) + + ВидДоступаПравоИнтерактивное + Максимум(ВидДоступаПравоИнтерактивное) + ЗначениеПрава ЗначениеПрава + + ВыводитьГруппировку + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + 0 + true + false + Always + Пользователь @@ -1013,6 +1739,43 @@ <useRestriction>true</useRestriction> <availableAsField>false</availableAsField> </parameter> + <parameter> + <name>ЭлементДанных</name> + <title xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Объект</v8:content> + </v8:item> + + + d4p1:ExchangePlanRef + d4p1:BusinessProcessRef + d4p1:DocumentRef + d4p1:ChartOfCalculationTypesRef + d4p1:TaskRef + d4p1:ChartOfCharacteristicTypesRef + d4p1:ChartOfAccountsRef + d4p1:CatalogRef + + + true + false + + + ЗначениеДоступа + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Значение</v8:content> + </v8:item> + + + 9a33b5dc-a8f1-496e-9961-95890984cd86 + + + true + false + - Право - Право + ПравоИнтерактивное + ПравоИнтерактивное Расшифровка @@ -2542,6 +3469,10 @@ Отступ 4 + + ВертикальноеПоложение + Center + Размещение Wrap @@ -2564,11 +3495,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 ОбъединятьПоГоризонтали @@ -2580,11 +3511,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 ОбъединятьПоГоризонтали @@ -2596,11 +3527,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 ОбъединятьПоГоризонтали @@ -2636,10 +3567,6 @@ - - ВертикальноеПоложение - Bottom - МинимальнаяШирина 32.75 @@ -2670,11 +3597,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 @@ -2698,11 +3625,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 @@ -2726,11 +3653,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 @@ -2746,6 +3673,10 @@ ГруппаДоступа + + ВертикальноеПоложение + Center + Размещение Wrap @@ -2777,11 +3708,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 Расшифровка @@ -2814,11 +3745,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 Расшифровка @@ -2851,11 +3782,11 @@ МинимальнаяШирина - 2.5 + 2.75 МаксимальнаяШирина - 2.5 + 2.75 Расшифровка @@ -3074,11 +4005,11 @@ МинимальнаяШирина - 2.5 + 4.625 МаксимальнаяШирина - 2.5 + 4.625 Расшифровка @@ -3237,8 +4168,1110 @@ OpenValue + + + + - Право + ПравоИнтерактивное @@ -3322,6 +5355,21 @@ Header + + ЭлементДанныхЗаголовок + Header + + + + ЛегендаПраваНаЭлементДанных + Header + + + + ОткрытДоступКЗначениюЗаголовок + Header + + ПраваПоГруппамДоступа Header @@ -3342,6 +5390,11 @@ Header + + ПраваПользователяНаЭлементДанных + Header + + АнализПравДоступа @@ -3359,7 +5412,7 @@ Пользователь - Право + ПравоИнтерактивное @@ -3375,7 +5428,7 @@ false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -3396,6 +5449,12 @@ + + false + ВыводитьГруппировку + 0 + 1f8559fb-7530-49a5-b6ca-17e56b66c70f + false Пользователь @@ -3413,7 +5472,7 @@ - Право + ПравоИнтерактивное @@ -3422,6 +5481,35 @@ Equal 1 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + @@ -3437,7 +5525,7 @@ - Право + ПравоИнтерактивное @@ -3446,6 +5534,64 @@ Equal 2 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + @@ -3461,7 +5607,7 @@ - Право + ПравоИнтерактивное @@ -3470,6 +5616,93 @@ Equal 3 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + @@ -3485,31 +5718,75 @@ - Пользователь + ПравоИнтерактивное + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоИнтерактивное - false - Размещение - Wrap + РазмерКартинки + AutoSize + + + + + + ОбъектМетаданных + + + Отчет + + + + - false - ОриентацияТекста - 90 - - - false - МаксимальнаяШирина - 2 - - - false - РастягиватьПоГоризонтали - true + ВертикальноеПоложение + Center + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + + МаксимальнаяВысота 70 @@ -3542,42 +5819,8 @@ - - - - Право - - - - - Право - Filled - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -3586,11 +5829,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - ВыводитьПараметрыДанных DontOutput @@ -3620,11 +5858,12 @@ Пользователь - Право + ПравоИнтерактивное + ГруппировкаПоТаблицам ОбъектМетаданных @@ -3642,30 +5881,10 @@ ОбъектМетаданных - - - false - МакетОформления - Main - - - ru - Таблица - - - - - false - РасположениеРесурсов - Vertically - - - Normal - c3f2a0ca-524d-44fd-a05f-7cfa9f91711b false - ГруппировкаПоОтчетам + ГруппировкаПоТаблицамОтчетов Отчет @@ -3710,8 +5929,6 @@ - Normal - e549951a-8e6c-4ab1-b173-c76d63d7f9b2 @@ -3734,11 +5951,6 @@ КоличествоЗаписей 1 - - false - ТипМакета - Vertical - Normal ebf1c91e-e3cf-426d-b2ee-13552003fa74 @@ -3768,7 +5980,7 @@ Пользователь - Право + ПравоИнтерактивное @@ -3785,7 +5997,7 @@ false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -3824,7 +6036,7 @@ - Право + ПравоИнтерактивное @@ -3833,6 +6045,35 @@ Equal 1 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + @@ -3848,7 +6089,7 @@ - Право + ПравоИнтерактивное @@ -3857,6 +6098,64 @@ Equal 2 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + @@ -3872,7 +6171,7 @@ - Право + ПравоИнтерактивное @@ -3881,6 +6180,93 @@ Equal 3 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + @@ -3896,47 +6282,7 @@ - Пользователь - - - - - - false - Размещение - Wrap - - - false - ОриентацияТекста - 90 - - - false - МаксимальнаяШирина - 2 - - - false - РастягиватьПоГоризонтали - true - - - МаксимальнаяВысота - 70 - - - DontUse - DontUse - DontUse - DontUse - DontUse - DontUse - - - - - Право + ПравоИнтерактивное @@ -3957,6 +6303,63 @@ + + + + ПравоИнтерактивное + + + + + + РазмерКартинки + AutoSize + + + + + + + ОбъектМетаданных + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + @@ -3979,21 +6382,6 @@ - - false - МакетОформления - Основной - - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -4002,11 +6390,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - @@ -4028,7 +6411,7 @@ Пользователь - Право + ПравоИнтерактивное @@ -4050,24 +6433,6 @@ ОбъектМетаданных - - - false - МакетОформления - Main - - - ru - Таблица - - - - - false - РасположениеРесурсов - Vertically - - @@ -4119,13 +6484,13 @@ ГруппаДоступа - Право + ПравоИнтерактивное false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -4144,7 +6509,7 @@ - Право + ПравоИнтерактивное @@ -4153,6 +6518,35 @@ Equal 1 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + @@ -4168,7 +6562,7 @@ - Право + ПравоИнтерактивное @@ -4177,6 +6571,64 @@ Equal 2 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + @@ -4192,7 +6644,7 @@ - Право + ПравоИнтерактивное @@ -4201,6 +6653,93 @@ Equal 3 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + @@ -4213,6 +6752,67 @@ + + + + ПравоИнтерактивное + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоИнтерактивное + + + + + + РазмерКартинки + AutoSize + + + + + + + ОбъектМетаданных + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + @@ -4233,30 +6833,6 @@ DontUse DontUse - - - - Право - - - - - Право - Filled - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - @@ -4287,16 +6863,6 @@ - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -4305,11 +6871,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - ВыводитьПараметрыДанных DontOutput @@ -4356,7 +6917,7 @@ ГруппаДоступа - Право + ПравоИнтерактивное @@ -4378,24 +6939,6 @@ ОбъектМетаданных - - - false - МакетОформления - Main - - - ru - Таблица - - - - - false - РасположениеРесурсов - Vertically - - @@ -4463,7 +7006,7 @@ false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -4499,6 +7042,31 @@ + + + + ПравоПросмотр + + + + + ПравоЧтение + Equal + true + + + ПравоПросмотр + Equal + false + + + + + Картинка + + + + @@ -4523,6 +7091,31 @@ + + + + ПравоРедактирование + + + + + ПравоИзменение + Equal + true + + + ПравоРедактирование + Equal + false + + + + + Картинка + + + + @@ -4547,6 +7140,31 @@ + + + + ПравоИнтерактивноеДобавление + + + + + ПравоДобавление + Equal + true + + + ПравоИнтерактивноеДобавление + Equal + false + + + + + Картинка + + + + @@ -4571,6 +7189,79 @@ + + + + ПравоПросмотр + + + ПравоРедактирование + + + ПравоИнтерактивноеДобавление + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоПросмотр + + + ПравоРедактирование + + + ПравоИнтерактивноеДобавление + + + + + + РазмерКартинки + AutoSize + + + + + + + Пользователь + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + @@ -4591,93 +7282,8 @@ - - - - ПравоПросмотр - - - - - ПравоПросмотр - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - - - ПравоРедактирование - - - - - ПравоРедактирование - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - - - ПравоИнтерактивноеДобавление - - - - - ПравоИнтерактивноеДобавление - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -4686,11 +7292,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - ВыводитьПараметрыДанных DontOutput @@ -4814,6 +7415,31 @@ + + + + ПравоПросмотр + + + + + ПравоЧтение + Equal + true + + + ПравоПросмотр + Equal + false + + + + + Картинка + + + + @@ -4838,6 +7464,31 @@ + + + + ПравоРедактирование + + + + + ПравоИзменение + Equal + true + + + ПравоРедактирование + Equal + false + + + + + Картинка + + + + @@ -4862,6 +7513,31 @@ + + + + ПравоИнтерактивноеДобавление + + + + + ПравоДобавление + Equal + true + + + ПравоИнтерактивноеДобавление + Equal + false + + + + + Картинка + + + + @@ -4891,62 +7567,17 @@ ПравоПросмотр - - - - ПравоПросмотр - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - ПравоРедактирование - - - - ПравоРедактирование - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - ПравоИнтерактивноеДобавление - ПравоИнтерактивноеДобавление - Equal - true + Право + Filled ВходВПрограммуРазрешен @@ -4961,6 +7592,51 @@ + + + + ПравоПросмотр + + + ПравоРедактирование + + + ПравоИнтерактивноеДобавление + + + + + + РазмерКартинки + AutoSize + + + + + + + ВидДоступаПравоПросмотр + + + + + ВидДоступаПравоЧтение + Equal + true + + + ВидДоступаПравоПросмотр + Equal + false + + + + + Картинка + + + + @@ -4985,6 +7661,31 @@ + + + + ВидДоступаПравоРедактирование + + + + + ВидДоступаПравоИзменение + Equal + true + + + ВидДоступаПравоРедактирование + Equal + false + + + + + Картинка + + + + @@ -5009,6 +7710,31 @@ + + + + ВидДоступаПравоИнтерактивноеДобавление + + + + + ВидДоступаПравоДобавление + Equal + true + + + ВидДоступаПравоИнтерактивноеДобавление + Equal + false + + + + + Картинка + + + + @@ -5038,62 +7764,17 @@ ВидДоступаПравоПросмотр - - - - ВидДоступаПравоПросмотр - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - ВидДоступаПравоРедактирование - - - - ВидДоступаПравоРедактирование - Equal - true - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - ВидДоступаПравоИнтерактивноеДобавление - ВидДоступаПравоИнтерактивноеДобавление - Equal - true + ВидДоступаПраво + Filled ВходВПрограммуРазрешен @@ -5108,6 +7789,26 @@ + + + + ВидДоступаПравоПросмотр + + + ВидДоступаПравоРедактирование + + + ВидДоступаПравоИнтерактивноеДобавление + + + + + + РазмерКартинки + AutoSize + + + @@ -5169,18 +7870,6 @@ - - - false - ВыводитьЗаголовок - DontOutput - - - false - ВариантИспользованияГруппировки - AdditionalInformation - - ОбъектМетаданныхЗаголовок @@ -5195,17 +7884,11 @@ - - - false - ВариантИспользованияГруппировки - AdditionalInformation - - + false НастройкиПрав НастроенноеПраво @@ -5279,6 +7962,10 @@ + + РазмерКартинки + AutoSize + Картинка @@ -5308,6 +7995,10 @@ + + РазмерКартинки + AutoSize + Картинка @@ -5337,6 +8028,10 @@ + + РазмерКартинки + AutoSize + Картинка @@ -5353,6 +8048,7 @@ + false ЛегендаНастроекПрав @@ -5379,6 +8075,10 @@ + + РазмерКартинки + AutoSize + Картинка @@ -5394,6 +8094,7 @@ + false ДополнительныйЗаголовокТаблицы @@ -5417,22 +8118,7 @@ ОбъектМетаданных - - - false - ВариантИспользованияГруппировки - AdditionalInformation - - - - - - false - МакетОформления - Основной - - - + @@ -5463,13 +8149,6 @@ ПравоИнтерактивноеДобавление - - - false - Заголовок - - - ВидДоступа @@ -5570,7 +8249,7 @@ Пользователь - Право + ПравоИнтерактивное @@ -5582,7 +8261,7 @@ false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -5619,30 +8298,9 @@ - false - Пользователь - - - - - - ОриентацияТекста - 90 - - - DontUse - DontUse - DontUse - DontUse - DontUse - DontUse - - - - - Право + ПравоИнтерактивное @@ -5651,6 +8309,35 @@ Equal 1 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + @@ -5666,7 +8353,7 @@ - Право + ПравоИнтерактивное @@ -5675,6 +8362,64 @@ Equal 2 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + @@ -5690,7 +8435,7 @@ - Право + ПравоИнтерактивное @@ -5699,6 +8444,93 @@ Equal 3 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + @@ -5711,6 +8543,70 @@ + + + + ПравоИнтерактивное + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоИнтерактивное + + + + + + РазмерКартинки + AutoSize + + + + + + + ОбъектМетаданных + + + Отчет + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + @@ -5745,53 +8641,14 @@ - - false - ЦветФона - style:ПравоНедействительногоПользователяФон - ЦветТекста style:ТекстЗапрещеннойЯчейкиЦвет - - - - Право - - - - - ВходВПрограммуРазрешен - Equal - false - - - Право - Filled - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -5800,11 +8657,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - ВыводитьПараметрыДанных DontOutput @@ -5853,7 +8705,7 @@ Пользователь - Право + ПравоИнтерактивное @@ -5891,24 +8743,6 @@ ОбъектМетаданных - - - false - МакетОформления - Main - - - ru - Таблица - - - - - false - РасположениеРесурсов - Vertically - - @@ -5961,7 +8795,7 @@ ГруппаДоступа - Право + ПравоИнтерактивное @@ -5972,7 +8806,7 @@ false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -5989,30 +8823,9 @@ - false - Пользователь - - - - - - ОриентацияТекста - 90 - - - DontUse - DontUse - DontUse - DontUse - DontUse - DontUse - - - - - Право + ПравоИнтерактивное @@ -6021,6 +8834,35 @@ Equal 1 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + @@ -6036,7 +8878,7 @@ - Право + ПравоИнтерактивное @@ -6045,6 +8887,64 @@ Equal 2 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + @@ -6060,7 +8960,7 @@ - Право + ПравоИнтерактивное @@ -6069,6 +8969,93 @@ Equal 3 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + @@ -6081,6 +9068,70 @@ + + + + ПравоИнтерактивное + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоИнтерактивное + + + + + + РазмерКартинки + AutoSize + + + + + + + ОбъектМетаданных + + + Отчет + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + @@ -6101,30 +9152,6 @@ DontUse DontUse - - - - Право - - - - - Право - Filled - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - @@ -6155,16 +9182,6 @@ - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -6173,11 +9190,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - ВыводитьПараметрыДанных DontOutput @@ -6244,7 +9256,7 @@ ГруппаДоступа - Право + ПравоИнтерактивное @@ -6282,24 +9294,6 @@ ОбъектМетаданных - - - false - МакетОформления - Main - - - ru - Таблица - - - - - false - РасположениеРесурсов - Vertically - - @@ -6352,13 +9346,13 @@ ГруппаДоступа - Право + ПравоИнтерактивное false - Право + ПравоИнтерактивное GreaterOrEqual 1 Normal @@ -6377,7 +9371,7 @@ - Право + ПравоИнтерактивное @@ -6386,6 +9380,35 @@ Equal 1 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + @@ -6401,7 +9424,7 @@ - Право + ПравоИнтерактивное @@ -6410,6 +9433,64 @@ Equal 2 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + @@ -6425,7 +9506,7 @@ - Право + ПравоИнтерактивное @@ -6434,6 +9515,93 @@ Equal 3 + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + @@ -6446,6 +9614,70 @@ + + + + ПравоИнтерактивное + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоИнтерактивное + + + + + + РазмерКартинки + AutoSize + + + + + + + ОбъектМетаданных + + + Отчет + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + @@ -6466,30 +9698,6 @@ DontUse DontUse - - - - Право - - - - - Право - Filled - - - ВходВПрограммуРазрешен - Equal - false - - - - - ЦветФона - style:ПравоНедействительногоПользователяФон - - - @@ -6520,16 +9728,6 @@ - - false - РасположениеИтогов - None - - - false - РасположениеРесурсов - Vertically - ГоризонтальноеРасположениеОбщихИтогов None @@ -6538,11 +9736,6 @@ ВертикальноеРасположениеОбщихИтогов None - - false - ТипЗаголовкаПолей - Short - ВыводитьПараметрыДанных DontOutput @@ -6589,7 +9782,7 @@ ГруппаДоступа - Право + ПравоИнтерактивное @@ -6639,24 +9832,6 @@ ОбъектМетаданных - - - false - МакетОформления - Main - - - ru - Таблица - - - - - false - РасположениеРесурсов - Vertically - - @@ -6693,4 +9868,1072 @@ + + ПраваПользователейНаОбъект + + + ru + Права пользователей на объект + + + + + + Пользователь + + + ПравоПросмотр + + + ПравоРедактирование + + + + + false + ПравоИнтерактивное + GreaterOrEqual + 1 + Normal + 333e101d-6632-4c33-b582-28b2863c71dc + + + false + ВходВПрограммуРазрешен + Equal + true + + + ru + Скрыть пользователей с отключенным входом в приложение + + + Normal + 0c68038c-5afb-41d4-8210-50ddfee8fb65 + + + + + false + Пользователь + + 69d002a9-72ff-4a80-aa42-a72e9efaa842 + + + ВидПользователей + 0 + Normal + 56cc2aed-3185-47d6-9681-1de850bcb26c + + + false + ЭлементДанных + + 969ec76a-f8c4-47d3-b1b1-b79022808f93 + + + + + + + ПравоПросмотр + + + + + ПравоЧтение + Equal + true + + + ПравоПросмотр + Equal + false + + + + + Картинка + + + + + + + + ПравоПросмотр + + + + + ПравоПросмотр + Equal + true + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоРедактирование + + + + + ПравоИзменение + Equal + true + + + ПравоРедактирование + Equal + false + + + + + Картинка + + + + + + + + ПравоРедактирование + + + + + ПравоРедактирование + Equal + true + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоПросмотр + + + ПравоРедактирование + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоПросмотр + + + ПравоРедактирование + + + + + + РазмерКартинки + AutoSize + + + + + + + Пользователь + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + + + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + 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 + Права пользователей в разрезе разрешенного значения + + + + + + ОбъектМетаданных + + + Пользователь + + + ПравоИнтерактивное + + + + + false + ГруппаДоступа + Equal + Normal + 7cc2b376-c779-4baf-a326-1f841247466f + + + false + ОбъектМетаданных + InList + + + -1 + + Normal + 91c5e0cc-63a9-4398-b8d3-561eeecd248d + + + false + ПравоИнтерактивное + GreaterOrEqual + 1 + Normal + 39a199ad-a34a-4363-bcad-f674ea3b14c8 + + + ВходВПрограммуРазрешен + Equal + true + + + ru + Скрыть пользователей с отключенным входом в приложение + + + Normal + 685f8653-1edd-40d3-9129-5dbc8bab6e90 + + + + + false + ВыводитьГруппировку + 0 + 1f8559fb-7530-49a5-b6ca-17e56b66c70f + + + false + Пользователь + + Normal + f699765c-29a8-4cf9-8733-316b24f75277 + + + false + ВидПользователей + 0 + Normal + 1c9ede17-956a-4268-8492-d46be7468fb8 + + + false + ЗначениеДоступа + + 44da3a5a-d7d2-42c0-ac9b-f030f138e696 + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 1 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 2 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + NotFilled + + + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 1 + + + + + ЦветФона + style:ПравоПросмотраФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 2 + + + + + ЦветФона + style:ПравоРедактированияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Equal + 3 + + + ПравоИнтерактивное + Equal + 3 + + + + + ЦветФона + style:ПравоСозданияФон + + + Картинка + + + + + + + + ПравоИнтерактивное + + + + + Право + Filled + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветФона + style:ПравоНедействительногоПользователяФон + + + + + + + ПравоИнтерактивное + + + + + + РазмерКартинки + AutoSize + + + + + + + ОбъектМетаданных + + + + + + ВертикальноеПоложение + Center + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + ГруппаДоступа + + + + + + МаксимальнаяВысота + 70 + + + DontUse + DontUse + DontUse + DontUse + DontUse + DontUse + + + + + Пользователь + + + + + ВходВПрограммуРазрешен + Equal + false + + + + + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + + + + + + + ГоризонтальноеРасположениеОбщихИтогов + None + + + ВертикальноеРасположениеОбщихИтогов + None + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + 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 + Пользователи + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + + + false + ПользователиСГруппамиДоступа + + + Пользователь + 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 + ГруппыДоступаСПользователями + + + ГруппаДоступа + 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 + ГруппыДоступа + + + ГруппаДоступа + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + ГруппаДоступа + + + + + false + ТаблицыСПравамиГруппДоступа + + КолонкаГруппаДоступа + + + ГруппаДоступа + 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 + e4be2439-ab50-42a3-9b87-3e3d99c93c59 + + + ru + Легенда + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo b/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo index b64d9aa11..cc1886218 100644 --- a/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo +++ b/SSL/src/Reports/АнализПравДоступа/АнализПравДоступа.mdo @@ -20,6 +20,15 @@ ru + + ВыборСтрокиРегистра + + ru + Выбор строки регистра + + PersonalComputer + MobileDevice + Макет diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html index 9a0f09627..7b0555ff0 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html @@ -1,12 +1,12 @@

                Предназначен для анализа ответов респондентов на анкеты.

                Открывается по команде Аналитический отчет по анкетированию в разделе Анкетирование.

                -

                Отчет позволяет просматривать результаты анкетирования в различных представлениях: ответы на простые вопросы и вопросы с агрегируемыми показателями, ответы на табличные вопросы; а также сравнивать ответы на одни и те же вопросы, заданные в разных опросах.

                +

                Отчет позволяет просматривать результаты анкетирования в различных представлениях: ответы на простые вопросы и вопросы с агрегируемыми показателями, ответы на табличные вопросы; а также сравнивать ответы на одни и те же вопросы, заданные в разных опросах.

                Для простого анализа результатов анкетирования в отчете предусмотрен набор предопределенных вариантов отчета. В случае если существующие варианты не устраивают, то можно создать и сохранить свои.

                -

                Воспользуйтесь командой Еще - Выбрать вариант отчета, для того чтобы вывести список доступных для выбора вариантов:

                +

                Воспользуйтесь командой Еще - Выбрать вариант отчета, для того чтобы вывести список доступных для выбора вариантов:

                • Просмотр ответов на простые вопросы - в отчете выводятся ответы респондентов на простые вопросы (все, кроме табличных). Данные могут быть сгруппированы по опросу, респондентам и вопросам. Можно также установить отбор по опросам, респондентам и вопросам.
                • -
                • Просмотр ответов на табличные вопросы (плоский вид) - в отчете выводятся табличные вопросы. Данные группируются по респондентам и вопросам, также можно установить отбор по опросу, респонденту и вопросам. С помощью двойного щелчка мышью по респонденту можно перейти в соответствующий список приложения и посмотреть данные по этому респонденту, с помощью двойного щелчка мышью по соответствующей строке можно посмотреть более подробно вопрос, на который был получен данный ответ. +
                • Просмотр ответов на табличные вопросы (плоский вид) - в отчете выводятся табличные вопросы. Данные группируются по респондентам и вопросам, также можно установить отбор по опросу, респонденту и вопросам. С помощью двойного щелчка мышью по респонденту можно перейти в соответствующий список приложения и посмотреть данные по этому респонденту, с помощью двойного щелчка мышью по соответствующей строке можно посмотреть более подробно вопрос, на который был получен данный ответ.
                • Просмотр ответов на табличные вопросы (табличный вид) отличается от предыдущего варианта внешним видом: данные выводятся не в одной таблице с группировкой, а в отдельных таблицах по каждому респонденту.
                • @@ -18,7 +18,7 @@
                • Если в табличных вопросах используются числовые агрегируемые ответы, то с помощью варианта Табличные вопросы с агрегируемыми показателями по каждому вопросу можно получить количество ответивших, среднее, минимальное, максимальное значение или сумму ответа. Можно установить отбор по опросу и вопросу.
                • -
                • Если табличные вопросы с агрегируемыми ответами используются в разных опросах, то с помощью варианта Сравнение по опросам табличных вопросов с агрегируемыми показателями можно сравнить табличные вопросы. +
                • Если табличные вопросы с агрегируемыми ответами используются в разных опросах, то с помощью варианта Сравнение по опросам табличных вопросов с агрегируемыми показателями можно сравнить табличные вопросы.
                • Количество ответов на табличные вопросы - отчет показывает количество ответов на все табличные вопросы. Можно отобрать ответы по различным признакам, например, по вопросу.

                См. также:

                • diff --git a/SSL/src/Reports/БизнесПроцессы/Help/ru.html b/SSL/src/Reports/БизнесПроцессы/Help/ru.html index 7fa44b5f7..2730584e3 100644 --- a/SSL/src/Reports/БизнесПроцессы/Help/ru.html +++ b/SSL/src/Reports/БизнесПроцессы/Help/ru.html @@ -4,7 +4,7 @@

                  Открывается по команде Список бизнес-процессов в списке Отчеты по задачам раздела Бизнес-процессы и задачи.

                  Варианты отчета

                  • -
                    Список бизнес-процессов - позволяет провести сравнительный анализ частоты возникновения различных видов бизнес-процессов в приложении. Бизнес-процессы сгруппированы по видам, при этом в строках отчета выводятся наименование, автор, признак начала и завершения, дата начала и завершения бизнес-процесса. Отчет формируется за Период.
                    +
                    Список бизнес-процессов - позволяет провести сравнительный анализ частоты возникновения различных видов бизнес-процессов в приложении. Бизнес-процессы сгруппированы по видам, при этом в строках отчета выводятся наименование, автор, признак начала и завершения, дата начала и завершения бизнес-процесса. Отчет формируется за Период.
                    • Можно установить фильтр по Виду бизнес-процесса.
                  • Статистика по видам бизнес-процессов - позволяет посмотреть отчет в виде графика. Отчет формируется за Период. diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html index e50de3097..00b65ade2 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html +++ b/SSL/src/Reports/ДатыЗапретаИзменения/Help/ru.html @@ -1,5 +1,5 @@ -

                    Отчет можно открыть соответствующей кнопкой из окна Даты запрета изменения данных.

                    +

                    Отчет можно открыть соответствующей кнопкой из окна Даты запрета изменения данных.

                    Позволяет увидеть результирующие даты запрета, установленные для пользователей/групп пользователей.

                    См. также:

                    • Работа с отчетом; diff --git a/SSL/src/Reports/ДвиженияДокумента/Help/ru.html b/SSL/src/Reports/ДвиженияДокумента/Help/ru.html index 1bb009fce..447578c2c 100644 --- a/SSL/src/Reports/ДвиженияДокумента/Help/ru.html +++ b/SSL/src/Reports/ДвиженияДокумента/Help/ru.html @@ -1,13 +1,13 @@ -

                      Предоставляет информацию по движениям документа. Может быть полезен для анализа нештатных учетных ситуаций. Не предназначен для штатного анализа движений документов или для корректировки движений.

                      -

                      Контекстный отчет, открывается из документов или списков документов по команде меню Еще - Отчеты - Движения документа стандартного подменю. Команда предусмотрена для всех документов, поддерживающих операцию проведения. Следует иметь в виду, что если документ имеет движения, но не поддерживает операцию проведения, то он не будет учтен в отчете.

                      +

                      Предоставляет информацию по движениям документа. Может быть полезен для анализа нештатных учетных ситуаций. Не предназначен для штатного анализа движений документов или для корректировки движений.

                      +

                      Контекстный отчет, открывается из документов или списков документов по команде меню Еще - Отчеты - Движения документа стандартного подменю. Команда предусмотрена для всех документов, поддерживающих операцию проведения. Следует иметь в виду, что если документ имеет движения, но не поддерживает операцию проведения, то он не будет учтен в отчете.

                      Работа со списком регистров

                      При проведении документов сведения о его движениях записываются в различные регистры, например, регистры накопления или регистры бухгалтерии. По умолчанию в отчет выводятся сведения из всех регистров.

                      • Наименования регистров в отчете представляют собой гиперссылки. Нажав на гиперссылку, можно перейти в регистр и подробно посмотреть движения документа.
                      • -
                      • С помощью поля Выводить только в шапке отчета можно ограничить список регистров документа. Нажмите кнопку . Выберите нужные регистры в открывшемся списке с помощью флажков, нажмите ОК. После выбора значений рядом с полем включается флажок.

                      Настройка отчета

                      -
                      Нажмите на кнопку Настройки. 
                      +
                    • С помощью поля Выводить только в шапке отчета можно ограничить список регистров документа. Нажмите кнопку . Выберите нужные регистры в открывшемся списке с помощью флажков, нажмите ОК. После выбора значений рядом с полем включается флажок.

                    Настройка отчета

                    +
                    Нажмите на кнопку Настройки.
                    С помощью флажков можно:

                    @@ -15,13 +15,13 @@
                    • выделить отрицательное красным;
                    • выделить цветом виды движения накопления.
                  • -
                  • изменить выбор регистров.
              +
            22. изменить выбор регистров.
            23. Варианты отчета

              -
              С помощью кнопки  можно выбрать один из двух вариантов отчета:
              +
              С помощью кнопки можно выбрать один из двух вариантов отчета:
              -
              • Горизонтально - если колонок немного, то для просмотра движений удобен этот вариант. Все характеристики движений можно увидеть в одной строке. +
                • Горизонтально - если колонок немного, то для просмотра движений удобен этот вариант. Все характеристики движений можно увидеть в одной строке.
                • -
                • Вертикально - предоставляет возможность расположить данные более компактно, что облегчает просмотр регистров с большим количеством колонок. Для наглядности строки пронумерованы, а в подсказке выводятся названия колонок в выбранной строке.
                Внимание! Другие команды в данном случае отсутствуют, т.к. сохранение своих вариантов для контекстных отчетов не предусмотрено. Это следует иметь в виду при изменении настроек вариантов данного отчета. При закрытии отчета приложение не предлагает сохранить новый вариант отчета.
                -
                См. также:
              +
            24. Вертикально - предоставляет возможность расположить данные более компактно, что облегчает просмотр регистров с большим количеством колонок. Для наглядности строки пронумерованы, а в подсказке выводятся названия колонок в выбранной строке.
            25. Внимание! Другие команды в данном случае отсутствуют, т.к. сохранение своих вариантов для контекстных отчетов не предусмотрено. Это следует иметь в виду при изменении настроек вариантов данного отчета. При закрытии отчета приложение не предлагает сохранить новый вариант отчета.
              +
              См. также:
              \ No newline at end of file diff --git a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl index aa78d498f..52490c17c 100644 --- a/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl +++ b/SSL/src/Reports/ДвиженияДокумента/ObjectModule.bsl @@ -2081,7 +2081,7 @@ Если ЗначениеЗаполнено(ТекстЗапроса) Тогда ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 ОБЪЕДИНИТЬ ВСЕ %2", ТекстЗапроса, СтрЗаменить(ТекстЗапросаШаблон, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ")); // @query-part-2 @query-part-3 для этого случая + "%1 ОБЪЕДИНИТЬ ВСЕ %2", ТекстЗапроса, СтрЗаменить(ТекстЗапросаШаблон, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ")); // @query-part-2, @query-part-3 Иначе ТекстЗапроса = ТекстЗапросаШаблон; diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html index d864fcf49..f1ce2d740 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html @@ -1,14 +1,14 @@ -

              Предназначен для мониторинга задач и бизнес-процессов. В отчете выводятся "зависшие" задачи, которые не могут быть выполнены из-за того, что не заполнен список ролей и исполнителей.

              -

              Если установлен отбор по Координатору, то в отчет будут выводиться только те задачи, которые назначены исполнителям в объектах адресации, за которые отвечает указанный координатор выполнения задач. Можно установить фильтр по Автору задачи. Также предусмотрен отбор по Периоду.

              +

              Предназначен для мониторинга задач и бизнес-процессов. В отчете выводятся "зависшие" задачи, которые не могут быть выполнены из-за того, что не заполнен список ролей и исполнителей.

              +

              Если установлен отбор по Координатору, то в отчет будут выводиться только те задачи, которые назначены исполнителям в объектах адресации, за которые отвечает указанный координатор выполнения задач. Можно установить фильтр по Автору задачи. Также предусмотрен отбор по Периоду.

              Варианты отчета

              • Для того чтобы установить группировку списка зависших задач по объектам адресации, выберите вариант отчета Сводка по зависшим задачам. В отчете выводятся основной и дополнительный объекты адресации, ответственный, задача. Для сокращения выведенной в отчете информации снимите флажок Подробно, в этом случае не выводятся наименование задачи.
                • Можно отобрать задачи по Ответственному и по Автору.
              • Вариант отчета Зависшие задачи по объектам адресации позволяет посмотреть количество зависших задач в разрезе ролей исполнителей и объектов адресации. Выводится основной и дополнительный объект адресации, задача. -
                • Можно установить отбор зависших задач по конкретному исполнителю роли, например, по Координатору.
              • -
              • Вариант отчета Зависшие задачи по ответственным позволяет включить группировку по ролям исполнителей, например, по Координатору. +
                • Можно установить отбор зависших задач по конкретному исполнителю роли, например, по Координатору.
              • +
              • Вариант отчета Зависшие задачи по ответственным позволяет включить группировку по ролям исполнителей, например, по Координатору.
              • -
              • Для просмотра одновременно как зависших, так и просроченных задач предназначен вариант отчета Просроченные задачи (Просроченные задачи подчиненных). +
              • Для просмотра одновременно как зависших, так и просроченных задач предназначен вариант отчета Просроченные задачи (Просроченные задачи подчиненных).
                • Зависшие задачи в отчете выделяются красным цветом (для этого включите флажок Выделять задачи без назначенных исполнителей в настройках отчета).
                • Можно установить отбор по конкретному исполнителю роли, например, по Координатору.

              См. также:

              diff --git a/SSL/src/Reports/Задания/Help/ru.html b/SSL/src/Reports/Задания/Help/ru.html index b50312485..7633bfbc6 100644 --- a/SSL/src/Reports/Задания/Help/ru.html +++ b/SSL/src/Reports/Задания/Help/ru.html @@ -3,7 +3,7 @@

              Открывается по команде Список заданий за период из списка Отчеты по задачам раздела Бизнес-Процессы и задачи.

              Варианты отчета

              • Список заданий за период - предназначен для контроля хода выполнения бизнес-процессов Задание. В строках отчета выводятся наименование бизнес-процесса, статус его завершения (Да/Нет), автор и дата старта, а также указывается, сколько дней длился бизнес-процесс, и сколько в процессе произошло циклов. Можно вывести все, завершенные или только незавершенные задания. Отчет формируется за Период. -
                •  Возможен отбор по Периоду и по Автору.
              • Статистика циклов выполнения-проверки заданий - в отчете в наглядной форме (в виде диаграммы) представлено сравнение количества циклов выполнения-проверки заданий по Авторам. В отчете необходимо задать Период. +
                • Возможен отбор по Периоду и по Автору.
              • Статистика циклов выполнения-проверки заданий - в отчете в наглядной форме (в виде диаграммы) представлено сравнение количества циклов выполнения-проверки заданий по Авторам. В отчете необходимо задать Период.
                • Можно произвести отбор только по завершенным заданиям и по Автору.
              • Средняя длительность выполнения заданий - предназначен для контроля сроков выполнения заданий. В этом отчете в наглядной форме (в виде диаграммы) для анализа представлены самые продолжительные бизнес-процессы за определенный Период. Отчет выдается по завершенным заданиям.
                • Можно отобрать задания за Период и по Автору.
              • Статистика результатов выполнения заданий - в наглядной форме (в виде диаграммы) показывает, сколько заданий выполняется и сколько выполнено. Отчет формируется за определенный Период.
                • Можно произвести отбор только по завершенным заданиям и по Автору.

              См. также:

              diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index 8bd02147a..d3ddb4756 100644 --- a/SSL/src/Reports/Задачи/Help/ru.html +++ b/SSL/src/Reports/Задачи/Help/ru.html @@ -5,10 +5,10 @@
              • Текущие задачи - в отчете задачи сгруппированы по исполнителям, в строках отчета выводится номер и наименование задачи, указывается крайний плановый срок исполнения. Отчет позволяет установить фильтр по выполненным задачам, автору, дате фактического и планового исполнения. Просроченные и выполненные задачи могут быть выделены в списке отчета. Отчет формируется за Период.
                • При необходимости установите нужные параметры:
                  • Состояние бизнес-процесса - отбор активных или остановленных бизнес-процессов; -
                  • Автор - отбор задач указанного куратора; +
                  • Автор - отбор задач указанного куратора;
                  • Выводить выполненные задачи - отбор выполненных или не выполненных задач;
                  • Крайний срок - отбор задач, срок которых меньше или равен указанной дате; -
                  • Дата исполнения - отбор задач, дата исполнения которых соответствует указанной; +
                  • Дата исполнения - отбор задач, дата исполнения которых соответствует указанной;
                  • Включите флажок, для того чтобы Выделять просроченные задачи;
                  • Включите флажок, для того чтобы Выделять выполненные задачи.
              • Справка по исполнительской дисциплине - в строки отчета выводится исполнитель и количество его задач за указанный период. По задачам в строке дается уточнение, сколько задач выполнено и не выполнено. По выполненным задачам указывается количество выполненных в срок и не в срок задач. По невыполненным задачам указывается количество просроченных. По умолчанию в отчет попадут все задачи за текущий месяц.
                • Отчет формируется за Период. Можно установить фильтр по Автору и плановому сроку завершения (Крайний срок).

              См. также:

              diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html index 83025ad07..dbd2c8318 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html @@ -1,9 +1,9 @@

              Предназначен для мониторинга задач.

              Открывается по команде Задачи, истекающие на дату в списке Отчеты по задачам раздела Бизнес-процессы.

              -

              Для контроля своих задач исполнитель может воспользоваться этим отчетом. По каждому исполнителю выводится сводка по количеству задач со сроками исполнения, истекающими на указанную в поле Крайний срок дату. Отчет позволяет выполнить расшифровку по Автору, Важности, Задаче и Сроку.

              +

              Для контроля своих задач исполнитель может воспользоваться этим отчетом. По каждому исполнителю выводится сводка по количеству задач со сроками исполнения, истекающими на указанную в поле Крайний срок дату. Отчет позволяет выполнить расшифровку по Автору, Важности, Задаче и Сроку.

              Можно установить отбор по Важности и Автору задачи.

              -

              По умолчанию в отчет попадут задачи, крайний срок исполнения которых истекает завтра утром.

              +

              По умолчанию в отчет попадут задачи, крайний срок исполнения которых истекает завтра утром.

              См. также:

              • diff --git a/SSL/src/Reports/ИзменениеРазрешенныхЗначенийГруппДоступа/ObjectModule.bsl b/SSL/src/Reports/ИзменениеРазрешенныхЗначенийГруппДоступа/ObjectModule.bsl index 37dd1058c..d5b3afd02 100644 --- a/SSL/src/Reports/ИзменениеРазрешенныхЗначенийГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Reports/ИзменениеРазрешенныхЗначенийГруппДоступа/ObjectModule.bsl @@ -24,7 +24,6 @@ Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина; - Настройки.События.ПослеЗагрузкиНастроекВКомпоновщик = Истина; КонецПроцедуры @@ -72,8 +71,9 @@ Возврат; КонецЕсли; + // Установка состава типов значения доступа. МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - ПоТипамГруппИЗначений = МодульУправлениеДоступомСлужебный.СвойстваВсехВидовДоступа().ПоТипамГруппИЗначений; + СвойстваВидовДоступа = МодульУправлениеДоступомСлужебный.СвойстваВсехВидовДоступа(); Типы = Новый Массив; Типы.Добавить(Тип("СправочникСсылка.Пользователи")); @@ -81,7 +81,7 @@ Типы.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); Типы.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); - Для Каждого КлючИЗначение Из ПоТипамГруппИЗначений Цикл + Для Каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамГруппИЗначений Цикл СвойстваВидаДоступа = КлючИЗначение.Значение; // см. УправлениеДоступомСлужебный.СвойстваВидаДоступа Если СвойстваВидаДоступа.Имя = "Пользователи" Или СвойстваВидаДоступа.Имя = "ВнешниеПользователи" Тогда @@ -92,6 +92,18 @@ СхемаКомпоновкиДанных.Параметры.ЗначениеДоступа.ТипЗначения = Новый ОписаниеТипов(Типы); + // Установка состава видов доступа. + МодульУправлениеДоступомСлужебныйПовтИсп = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйПовтИсп"); + ПредставлениеВидовДоступа = МодульУправлениеДоступомСлужебныйПовтИсп.ПредставлениеВидовДоступа(); + + ВидыДоступа = Новый СписокЗначений; + Для Каждого КлючИЗначение Из ПредставлениеВидовДоступа Цикл + СвойстваВидаДоступа = СвойстваВидовДоступа.ПоТипамЗначений.Получить(КлючИЗначение.Ключ); // см. УправлениеДоступомСлужебный.СвойстваВидаДоступа + ВидыДоступа.Добавить(СвойстваВидаДоступа.Имя, КлючИЗначение.Значение); + КонецЦикла; + + СхемаКомпоновкиДанных.Параметры.ВидДоступа.УстановитьДоступныеЗначения(ВидыДоступа); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер"); МодульОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); @@ -99,33 +111,6 @@ КонецПроцедуры -// Параметры: -// ДополнительныеПараметры - Структура -// -Процедура ПослеЗагрузкиНастроекВКомпоновщик(ДополнительныеПараметры) Экспорт - - Параметр = Новый ПараметрКомпоновкиДанных("ВидДоступа"); - ДоступныйПараметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(Параметр); - Если ДоступныйПараметр = Неопределено Тогда - Возврат; - КонецЕсли; - - МодульУправлениеДоступомСлужебныйПовтИсп = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйПовтИсп"); - ПредставлениеВидовДоступа = МодульУправлениеДоступомСлужебныйПовтИсп.ПредставлениеВидовДоступа(); - - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - ПоТипамЗначений = МодульУправлениеДоступомСлужебный.СвойстваВсехВидовДоступа().ПоТипамЗначений; - - ВидыДоступа = Новый СписокЗначений; - Для Каждого КлючИЗначение Из ПредставлениеВидовДоступа Цикл - СвойстваВидаДоступа = ПоТипамЗначений.Получить(КлючИЗначение.Ключ); // см. УправлениеДоступомСлужебный.СвойстваВидаДоступа - ВидыДоступа.Добавить(СвойстваВидаДоступа.Имя, КлючИЗначение.Значение); - КонецЦикла; - - ДоступныйПараметр.ДоступныеЗначения = ВидыДоступа; - -КонецПроцедуры - #КонецОбласти #КонецОбласти diff --git a/SSL/src/Reports/ИзменениеУчастниковГруппПользователей/Help/ru.html b/SSL/src/Reports/ИзменениеУчастниковГруппПользователей/Help/ru.html index 28dbaf431..d04363978 100644 --- a/SSL/src/Reports/ИзменениеУчастниковГруппПользователей/Help/ru.html +++ b/SSL/src/Reports/ИзменениеУчастниковГруппПользователей/Help/ru.html @@ -2,8 +2,8 @@ -

                Отчет предназначен для просмотра информации об изменениях свойств всех групп пользователей или групп внешних пользователей приложения. 

                -

                Отчет открывается из панели Администрирование - Отчеты администратора в группе Контроль работы пользователей. Для того чтобы отчет выводил изменения состава групп пользователей включите флажок Регистрировать изменения участников групп пользователей в разделе Администрирование - Настройка пользователей и прав - Пользователи.

                +

                Отчет предназначен для просмотра информации об изменениях свойств всех групп пользователей или групп внешних пользователей приложения.

                +

                Отчет открывается из панели Администрирование - Отчеты администратора в группе Контроль работы пользователей. Для того чтобы отчет выводил изменения состава групп пользователей включите флажок Регистрировать изменения участников групп пользователей в разделе Администрирование - Настройка пользователей и прав - Пользователи.

                В отчете по умолчанию выдаются сведения:

                • Дата
                • Автор
                • @@ -11,11 +11,11 @@
                • Компьютер
                • Сеанс

                Отборы пользователей

                • С помощью кнопки Настройки можно открыть настройки отчета. Для отбора пользователей по одному или нескольким параметрам включите соответствующие флажки.

                Варианты отчета

                -
                • С помощью кнопки Варианты отчета можно открыть список других доступных вариантов отчета. Существует два варианта отчета: +
                  • С помощью кнопки Варианты отчета можно открыть список других доступных вариантов отчета. Существует два варианта отчета:
                    • Изменения участников групп пользователей - открывается из списка Пользователи;
                    • -
                      Изменения участников групп внешних пользователей - открывается из списка Внешние пользователи;

                  См. также:

                  +
                  Изменения участников групп внешних пользователей - открывается из списка Внешние пользователи;

              См. также:

              \ No newline at end of file diff --git a/SSL/src/Reports/ИзменениеУчетныхЗаписей/Help/ru.html b/SSL/src/Reports/ИзменениеУчетныхЗаписей/Help/ru.html index 1dfeef79c..41f1ff450 100644 --- a/SSL/src/Reports/ИзменениеУчетныхЗаписей/Help/ru.html +++ b/SSL/src/Reports/ИзменениеУчетныхЗаписей/Help/ru.html @@ -1,31 +1,31 @@ -
              Отчет выводит информацию об изменениях свойств пользователей информационной базы.
              +
              Отчет выводит информацию об изменениях свойств пользователей информационной базы.

              Необходимость в отчете возникает, если требуется выполнить групповой анализ изменений в настройках входа (имени для входа, видов аутентификации и других).

              -

              Отчет открывается из панели Администрирование - Отчеты администратора в группе Контроль работы пользователей.

              +

              Отчет открывается из панели Администрирование - Отчеты администратора в группе Контроль работы пользователей.

              В отчете по умолчанию выдаются сведения:

              • Имя (для входа)
              • Полное имя пользователя
              • Недействителен
              • Пометка удаления
              • Адрес электронной почты
              • -
              • Вход в приложение разрешен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Аутентификация стандартная - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Аутентификация OpenID - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Аутентификация OpenID-Connect - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Аутентификация токеном доступа - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Аутентификация ОС - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Вход в приложение разрешен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Аутентификация стандартная - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Аутентификация OpenID - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Аутентификация OpenID-Connect - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Аутентификация токеном доступа - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Аутентификация ОС - поле может принимать значение "Да" или "Нет", в обратном случае.
              • Пользователь ОС - имя, с которым пользователь входит в ОС.
              • Имя политики паролей
              • -
              • Запрещено изменять пароль - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Запрещено восстанавливать - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Пароль изменен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Пароль установлен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Запрещено изменять пароль - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Запрещено восстанавливать - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Пароль изменен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Пароль установлен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • Дата установки пароля
              • -
              • Потребовать смену пароля при входе - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Защита от опасных действий - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Срок действия не ограничен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • -
              • Срок действия - если поле Срок действия не ограничен принимает значение "Да", то указывается срок действия данного пароля.
              • -
              • Запретить вход, если не работает более..дн. - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Потребовать смену пароля при входе - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Защита от опасных действий - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Срок действия не ограничен - поле может принимать значение "Да" или "Нет", в обратном случае.
              • +
              • Срок действия - если поле Срок действия не ограничен принимает значение "Да", то указывается срок действия данного пароля.
              • +
              • Запретить вход, если не работает более..дн. - поле может принимать значение "Да" или "Нет", в обратном случае.
              • Режим запуска
              • Язык

              Отборы пользователей

              • С помощью кнопки Настройки можно открыть настройки отчета. Для отбора пользователей по одному или нескольким параметрам включите соответствующие флажки. diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Help/ru.html b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Help/ru.html index d3e36db11..140942da1 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Help/ru.html +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/Help/ru.html @@ -1,4 +1,4 @@ -С помощью отчета можно узнать, какие Интернет-ресурсы, протоколы и порты подключения необходимы для работоспособности тех или иных функций приложения. +С помощью отчета можно узнать, какие Интернет-ресурсы, протоколы и порты подключения необходимы для работоспособности тех или иных функций приложения.
                В отчете также отражаются и другие используемые ресурсы:
                • Каталоги файловой системы;
                • @@ -6,9 +6,9 @@
                • Приложения операционной системы;
                • Подключенные расширения.
                -
                Эта информация позволяет администратору корректно выполнить настройку компьютера и провести аудит безопасности. 
                -
                Список внешних ресурсов, используемых приложением и дополнительными модулями, зависит от текущих настроек приложения: включенных функциональных опций, режимов работы и т.п.
                -
                Отчет можно найти в панели отчетов для администрирования (раздел Администрирование - Обслуживание - Отчеты и обработки, команда Отчеты администратора). 
                +
                Эта информация позволяет администратору корректно выполнить настройку компьютера и провести аудит безопасности.
                +
                Список внешних ресурсов, используемых приложением и дополнительными модулями, зависит от текущих настроек приложения: включенных функциональных опций, режимов работы и т.п.
                +
                Отчет можно найти в панели отчетов для администрирования (раздел Администрирование - Обслуживание - Отчеты и обработки, команда Отчеты администратора).

                См. также:

                \ No newline at end of file diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html b/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html index 8a26f636c..a262c1ec8 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html +++ b/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html @@ -1,17 +1,17 @@ -

                Отчет предназначен для просмотра сведений об использовании элементов списков в документах приложения.

                -

                При работе в приложении пользователи могут по ошибке допускать дублирование элементов, от которого необходимо избавляться, т.к. это мешает правильному учету в приложении. При использовании этих дублирующихся элементов могут быть ссылки то на один, то на другой, в результате происходят ошибки, например, в бухгалтерском учете списание денежных средств проходит некорректно и т.п.

                -

                Для того чтобы была возможность удалить дубли из приложения, сначала необходимо удалить ссылки на них в документах.Отчет показывает, в каких документах приложения используются данные объекты.

                -

                Отчет открывается из списков приложения по команде Еще - Места использования.

                +

                Отчет предназначен для просмотра сведений об использовании элементов списков в документах приложения.

                +

                При работе в приложении пользователи могут по ошибке допускать дублирование элементов, от которого необходимо избавляться, т.к. это мешает правильному учету в приложении. При использовании этих дублирующихся элементов могут быть ссылки то на один, то на другой, в результате происходят ошибки, например, в бухгалтерском учете списание денежных средств проходит некорректно и т.п.

                +

                Для того чтобы была возможность удалить дубли из приложения, сначала необходимо удалить ссылки на них в документах.Отчет показывает, в каких документах приложения используются данные объекты.

                +

                Отчет открывается из списков приложения по команде Еще - Места использования.

                В отчете выводится:

                • Наименование, Код выбранных элементов списка;
                • Места использования - документ, его номер и дата;
                • Количество Вхождений.

                Формирование отчета

                -
                • Выделите один или несколько элементов списка, выполните команду Еще - Места использования, отчет формируется автоматически. +
                  • Выделите один или несколько элементов списка, выполните команду Еще - Места использования, отчет формируется автоматически.
                  • -
                  • Отчет сгруппирован по выбранным элементам списка. По каждому элементу выводятся документы приложения, в которых имеются ссылки на этот элемент и количество вхождений, при этом подсчитывается суммарное количество вхождений по каждому элементу и общая сумма по отчету. +
                  • Отчет сгруппирован по выбранным элементам списка. По каждому элементу выводятся документы приложения, в которых имеются ссылки на этот элемент и количество вхождений, при этом подсчитывается суммарное количество вхождений по каждому элементу и общая сумма по отчету.
                  • -
                  • С помощью двойного щелчка мыши по соответствующей ячейке отчета можно перейти к элементам списка или к документу, в котором имеется ссылка на эти элементы.

                  См. также:

                  +
                • С помощью двойного щелчка мыши по соответствующей ячейке отчета можно перейти к элементам списка или к документу, в котором имеется ссылка на эти элементы.

                См. также:

                \ No newline at end of file diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html b/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html index f56ca4662..6ba2505c3 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html @@ -1,7 +1,7 @@

                Предназначен для получения информации об объеме данных в томах, который занимают "ненужные" файлы (устаревшие, добавленные по ошибке).

                -

                Количество файлов выдается по каждому владельцу (объекту приложения, к которому присоединены файлы).

                -

                Открывается из окна Настройки очистки файлов, в котором можно задать критерии оценки файлов и сроки их хранения для каждого объекта. 

                +

                Количество файлов выдается по каждому владельцу (объекту приложения, к которому присоединены файлы).

                +

                Открывается из окна Настройки очистки файлов, в котором можно задать критерии оценки файлов и сроки их хранения для каждого объекта.

                С помощью кнопки Настройки можно перейти к использованию возможностей более тонкого отбора записей отчета.

                Отбор по владельцу

                diff --git a/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html b/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html index 571370eeb..e620a9ff4 100644 --- a/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html +++ b/SSL/src/Reports/ОценкаПроизводительности/Help/ru.html @@ -1,19 +1,19 @@ -

                Предназначен для анализа производительности приложения.

                +

                Предназначен для анализа производительности приложения.

                Открывается с помощью ссылки Оценка производительности по ключевым операциям в разделе Администрирование - Обслуживание - Отчеты и обработки - Отчеты администратора.

                Анализ производительности

                • Задайте Период, за который будет проводиться оценка производительности. Для этого задайте Дату начала и Дату окончания периода (обязательно указание времени).
                • -
                • Установкой поля Периодичность замеров регулируется количество результатов, которые будут отображаться в периоде. Поле является обязательным. Если в некотором периоде операция не выполнялась, то в соответствующей ячейке таблицы будет ноль. +
                • Установкой поля Периодичность замеров регулируется количество результатов, которые будут отображаться в периоде. Поле является обязательным. Если в некотором периоде операция не выполнялась, то в соответствующей ячейке таблицы будет ноль.
                • В поле Профиль выберите из списка один из профилей ключевых операций. Поле является обязательным.
                • В поле Имя ключевой операции можно выбрать одну из ключевых операций.
                • -
                • В поле Пользователь можно выбрать одного из пользователей приложения. +
                • В поле Пользователь можно выбрать одного из пользователей приложения.
                • -
                • При необходимости включите флажок Выполнен с ошибкой, выберите значение для отбора, например, Нет (по умолчанию) для того чтобы выбрать замеры времени только по корректным операциям. Анализ корректных выполнений ключевых операций особенно актуален для операций, связанных с проведением документов. Это позволяет отделить корректные замеры проведения документов от ошибочных замеров, например, связанных с ошибками заполнения. Нажмите кнопку Сформировать. Отчет состоит из двух частей: графика и таблицы.

                Оценка производительности

                -
                • Оценка производительности выводится в диапазоне от нуля до единицы. В зависимости от значения оценки поле с оценкой выделяется определенным цветом. Полученные оценки можно интерпретировать следующим образом: 

                +
              • При необходимости включите флажок Выполнен с ошибкой, выберите значение для отбора, например, Нет (по умолчанию) для того чтобы выбрать замеры времени только по корректным операциям. Анализ корректных выполнений ключевых операций особенно актуален для операций, связанных с проведением документов. Это позволяет отделить корректные замеры проведения документов от ошибочных замеров, например, связанных с ошибками заполнения. Нажмите кнопку Сформировать. Отчет состоит из двух частей: графика и таблицы.

              Оценка производительности

              +
              • Оценка производительности выводится в диапазоне от нуля до единицы. В зависимости от значения оценки поле с оценкой выделяется определенным цветом. Полученные оценки можно интерпретировать следующим образом:

              Шкала APDEX

              diff --git a/SSL/src/Reports/ПраваДоступа/Help/ru.html b/SSL/src/Reports/ПраваДоступа/Help/ru.html index 50d109d32..e648d59ea 100644 --- a/SSL/src/Reports/ПраваДоступа/Help/ru.html +++ b/SSL/src/Reports/ПраваДоступа/Help/ru.html @@ -1,13 +1,13 @@

              Просмотр полного списка прав пользователя.

              -

              Отчет открывается из карточки пользователя или внешнего пользователя (группы пользователей или группы внешних пользователей) со страницы Права доступа по команде Отчет по правам доступа.

              +

              Отчет открывается из карточки пользователя или внешнего пользователя (группы пользователей или группы внешних пользователей) со страницы Права доступа по команде Отчет по правам доступа.

              Отчет с помощью стандартных команд можно распечатать или сохранить на компьютере в нужном формате.

              В отчете выводятся сведения:

              • Свойства пользователя информационной базы:
                • доступ к информационной базе, имя для входа, имя пользователя операционной системы и другие сведения;
              • -
                Ограничения доступа пользователя:
                +
                Ограничения доступа пользователя:
                • Наименование группы, ответственный, профиль;
              • Роли пользователя по профилям;
                @@ -18,5 +18,5 @@
                Редактирование объектов:
                • Включает таблицу из 3 колонок: Объект/Права/Ограничения, Группа доступа/Профиль/Роли, Ограничения на уровне записей/Виды и значения доступа;
              • -
                Настройки прав на Папки.

              Получение подробного отчета

              +
              Настройки прав на Папки.

              Получение подробного отчета

              • Включите флажок Подробные сведения о правах доступа, нажмите Сформировать.
              \ No newline at end of file diff --git a/SSL/src/Reports/ПраваДоступа/ObjectModule.bsl b/SSL/src/Reports/ПраваДоступа/ObjectModule.bsl index 45d1c5edd..a51c635df 100644 --- a/SSL/src/Reports/ПраваДоступа/ObjectModule.bsl +++ b/SSL/src/Reports/ПраваДоступа/ObjectModule.bsl @@ -550,7 +550,34 @@ | ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав | ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных) | И (ВидыОграниченийПрав.Право = ""Чтение"") - | И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа)) КАК ПраваРолейПрофилей + | И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа) + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | ПраваРолей.ОбъектМетаданных, + | ПрофилиПользователя.Профиль, + | 1000, + | """", + | ЛОЖЬ, + | ЛОЖЬ, + | ГруппыДоступаПользователя.ГруппаДоступа, + | ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО), + | ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"), + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО + | ИЗ + | ПраваРолей КАК ПраваРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя + | ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль + | ПО ПраваРолей.Роль = РолиПрофилей.Роль + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаПользователя КАК ГруппыДоступаПользователя + | ПО (ГруппыДоступаПользователя.Профиль = ПрофилиПользователя.Профиль) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав + | ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных) + | И (ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа)) + | И (ВидыОграниченийПрав.Право = ""Чтение"")) КАК ПраваРолейПрофилей |ИТОГИ | МАКСИМУМ(ПорядокВидаОбъектов), | МАКСИМУМ(Таблица), @@ -685,7 +712,7 @@ | ПО (ПрофилиПользователя.Профиль = ВидыИЗначенияДоступа.Профиль) | ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав | ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных) - | И (ВидыОграниченийПрав.Право = ""Добавление"") + | И (ВидыОграниченийПрав.Право = ""Изменение"") | И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа) | | ОБЪЕДИНИТЬ @@ -718,9 +745,42 @@ | ЛЕВОЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав | ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных) | И (ВидыОграниченийПрав.Право = ""Изменение"") - | И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа)) КАК ПраваРолейПрофилей + | И (ВидыОграниченийПрав.ВидДоступа = ВидыИЗначенияДоступа.ВидДоступа) + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | ПраваРолей.ОбъектМетаданных, + | ПрофилиПользователя.Профиль, + | 1000, + | """", + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ЛОЖЬ, + | ГруппыДоступаПользователя.ГруппаДоступа, + | ЕСТЬNULL(ВидыОграниченийПрав.ВидДоступа, НЕОПРЕДЕЛЕНО), + | ЕСТЬNULL(ВидыОграниченийПрав.ПредставлениеВидаДоступа, """"), + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО + | ИЗ + | ПраваРолей КАК ПраваРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПрофилиПользователя КАК ПрофилиПользователя + | ПО РолиПрофилей.Ссылка = ПрофилиПользователя.Профиль + | ПО ПраваРолей.Роль = РолиПрофилей.Роль + | И (ПраваРолей.ПравоИзменение + | ИЛИ ПраваРолей.ПравоДобавление) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГруппыДоступаПользователя КАК ГруппыДоступаПользователя + | ПО (ГруппыДоступаПользователя.Профиль = ПрофилиПользователя.Профиль) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВидыОграниченийПрав КАК ВидыОграниченийПрав + | ПО (ВидыОграниченийПрав.Таблица = ПраваРолей.ОбъектМетаданных) + | И (ТИПЗНАЧЕНИЯ(ВидыОграниченийПрав.ВидДоступа) = ТИП(Перечисление.ДополнительныеЗначенияДоступа)) + | И (ВидыОграниченийПрав.Право = ""Изменение"")) КАК ПраваРолейПрофилей |ИТОГИ - | МАКСИМУМ(ВидОбъектов), + | МАКСИМУМ(ПорядокВидаОбъектов), | МАКСИМУМ(Таблица), | МАКСИМУМ(ИдентификаторОбъектаМетаданных), | МАКСИМУМ(ПредставлениеПрофиля), @@ -1015,7 +1075,7 @@ Область.Параметры.Заполнить(ОписаниеВидаОбъектов); Документ.Вывести(Область, 3); - ДобавлениеИспользуется = СтандартныеПодсистемыСервер.ЭтоТаблицаРегистра(ОписаниеВидаОбъектов.Таблица); + ДобавлениеИспользуется = Не СтандартныеПодсистемыСервер.ЭтоТаблицаРегистра(ОписаниеВидаОбъектов.Таблица); Для Каждого ОписаниеОбъекта Из ОписаниеВидаОбъектов.Строки Цикл НачальнаяСтрокаОбластиОбъекта = Неопределено; @@ -1666,7 +1726,10 @@ Функция ШаблонПредставленияВидаДоступа(ОписаниеВидаДоступа, ВладельцыНастроекПрав) - Если ОписаниеВидаДоступа.Строки.Количество() = 0 Тогда + Если ОписаниеВидаДоступа.ВсеРазрешены = Неопределено Тогда + ШаблонПредставленияВидаДоступа = "%1"; + + ИначеЕсли ОписаниеВидаДоступа.Строки.Количество() = 0 Тогда Если ВладельцыНастроекПрав.Получить(ТипЗнч(ОписаниеВидаДоступа.ВидДоступа)) <> Неопределено Тогда ШаблонПредставленияВидаДоступа = "%1"; diff --git a/SSL/src/Reports/ПраваРолей/Help/ru.html b/SSL/src/Reports/ПраваРолей/Help/ru.html index 5266542f0..eec80eb36 100644 --- a/SSL/src/Reports/ПраваРолей/Help/ru.html +++ b/SSL/src/Reports/ПраваРолей/Help/ru.html @@ -4,8 +4,8 @@
              • в панели Отчеты администратора, ее можно найти в разделе Администрирование - Обслуживание;
              • из списка Профили групп доступа;
              • в Профиле групп доступа;
              • -
              • в списках по команде Еще - Отчеты (рядом с командой Права пользователей).
              В настройках отчета можно добавить или убрать различные разделы или объекты приложения, для того чтобы просмотреть права ролей и профилей на эти объекты. -
              С помощью кнопки Подбор открывается окно с перечнем объектов приложения. Они обозначены в виде картинок или значков. При расследовании недостатка прав необходимо учитывать, что в сообщениях об ошибке приложения выводится полное имя таблицы (например, Справочник.УдалитьНалоговыеОрганы), а в отчете в списке выбора выводится представление (например, (не используется)Налоговые органы).
              +
            26. в списках по команде Еще - Отчеты (рядом с командой Права пользователей).
            27. В настройках отчета можно добавить или убрать различные разделы или объекты приложения, для того чтобы просмотреть права ролей и профилей на эти объекты. +
              С помощью кнопки Подбор открывается окно с перечнем объектов приложения. Они обозначены в виде картинок или значков. При расследовании недостатка прав необходимо учитывать, что в сообщениях об ошибке приложения выводится полное имя таблицы (например, Справочник.УдалитьНалоговыеОрганы), а в отчете в списке выбора выводится представление (например, (не используется)Налоговые органы).
              • Дважды кликнув по объекту, можно просмотреть расшифровку объекта метаданных - права ролей.
              • Дважды кликнув по роли, можно просмотреть расшифровку прав роли на нужный объект.
              Из списка профилей в отчете можно просмотреть:
              diff --git a/SSL/src/Reports/ПраваРолей/ManagerModule.bsl b/SSL/src/Reports/ПраваРолей/ManagerModule.bsl index 83df5243c..efc90c3c3 100644 --- a/SSL/src/Reports/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/Reports/ПраваРолей/ManagerModule.bsl @@ -33,7 +33,7 @@ КомандаПрофили = КомандыОтчетов.Добавить(); КомандаПрофили.МножественныйВыбор = Истина; КомандаПрофили.Менеджер = "Отчет.ПраваРолей"; - КомандаПрофили.КлючВарианта = "ПраваРолиНаОбъектыМетаданных"; + КомандаПрофили.КлючВарианта = "ПраваРолиИПрофилейНаОбъектыМетаданных"; Если Параметры.ИмяФормы = "Справочник.ПрофилиГруппДоступа.Форма.ФормаЭлемента" Тогда КомандаРоли.Представление = НСтр("ru = 'Права ролей профиля'"); @@ -46,7 +46,7 @@ КомандаРоли.Представление = НСтр("ru = 'Права ролей и профилей'"); КомандаРоли.ТолькоВоВсехДействиях = Истина; КомандаРоли.Важность = "СмТакже"; - КомандаРоли.КлючВарианта = "ПраваРолейНаОбъектМетаданных"; + КомандаРоли.КлючВарианта = "ПраваРолейИПрофилейНаОбъектМетаданных"; КонецЕсли; КонецПроцедуры @@ -70,16 +70,16 @@ НастройкиВарианта.Описание = НСтр("ru = 'Показывает права ролей на объекты метаданных.'"); НастройкиВарианта.ВидимостьПоУмолчанию = Ложь; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваРолиНаОбъектыМетаданных"); - НастройкиВарианта.Описание = НСтр("ru = 'Показывает права одной роли на разные объекты метаданных.'"); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваРолиИПрофилейНаОбъектыМетаданных"); + НастройкиВарианта.Описание = НСтр("ru = 'Показывает права одной роли и профилей на разные объекты метаданных.'"); НастройкиВарианта.Включен = Ложь; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваРолейНаОбъектМетаданных"); - НастройкиВарианта.Описание = НСтр("ru = 'Показывает права разных ролей на один объект метаданных.'"); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПраваРолейИПрофилейНаОбъектМетаданных"); + НастройкиВарианта.Описание = НСтр("ru = 'Показывает права разных ролей и профилей на один объект метаданных.'"); НастройкиВарианта.Включен = Ложь; - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПодробныеПраваРолиНаОбъектМетаданных"); - НастройкиВарианта.Описание = НСтр("ru = 'Показывает подробные права одной роли на один объект метаданных.'"); + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПодробныеПраваРолейНаОбъектМетаданных"); + НастройкиВарианта.Описание = НСтр("ru = 'Показывает подробные права разных ролей на один объект метаданных.'"); НастройкиВарианта.Включен = Ложь; КонецПроцедуры diff --git a/SSL/src/Reports/ПраваРолей/ObjectModule.bsl b/SSL/src/Reports/ПраваРолей/ObjectModule.bsl index 9a2eeb010..51e21378d 100644 --- a/SSL/src/Reports/ПраваРолей/ObjectModule.bsl +++ b/SSL/src/Reports/ПраваРолей/ObjectModule.bsl @@ -45,12 +45,12 @@ Вариант = Форма.КлючТекущегоВарианта; ФормаПараметрыОтбор = Форма.ФормаПараметры.Отбор; - Если Вариант = "ПраваРолейНаОбъектМетаданных" Тогда + Если Вариант = "ПраваРолейИПрофилейНаОбъектМетаданных" Тогда ФормаПараметрыОтбор.Вставить("ОбъектМетаданных", РеквизитыФормы.КонтекстВарианта); ИначеЕсли Форма.Параметры.Свойство("ПараметрКоманды") Тогда ИмяПараметра = ""; - Если Вариант = "ПраваРолиНаОбъектыМетаданных" Тогда + Если Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда ИмяПараметра = "Профиль"; ЗначениеПараметра = СписокПрофилейБезГрупп(Форма.Параметры.ПараметрКоманды); @@ -91,11 +91,23 @@ Возврат; КонецЕсли; - Форма = Контекст; + СхемаКомпоновкиДанных.Параметры.Роль.УстановитьДоступныеЗначения( + ПользователиСлужебный.ВсеРоли().Список.Получить()); + + СхемаКомпоновкиДанных.Параметры.ОбъектМетаданных.УстановитьДоступныеЗначения( + УправлениеДоступомСлужебныйПовтИсп.СписокОбъектовМетаданныхСПравами().Получить()); + ДополнительныеСвойства = КомпоновщикНастроек.Настройки.ДополнительныеСвойства; - Вариант = ДополнительныеСвойства.КлючПредопределенногоВарианта; + Вариант = ДополнительныеСвойства.КлючПредопределенногоВарианта; + Форма = Контекст; ФормаПараметрыОтбор = ДополнительныеСвойства.ФормаПараметрыОтбор; + Если НовыеНастройкиКД <> Неопределено Тогда + СкрытьЛишниеПоляДанных(Вариант, ФормаПараметрыОтбор, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + НедоступныеПараметры = Новый Структура; + Если Вариант = "ПраваРолей" И Не ФормаПараметрыОтбор.Свойство("НачальныйОтбор") Тогда @@ -104,45 +116,49 @@ Форма.НастройкиОтчета.ФормироватьСразу = Ложь; КонецЕсли; - Возврат; - КонецЕсли; - - Если Не ФормаПараметрыОтбор.Свойство("НачальныйОтбор") Тогда - ФормаПараметрыОтбор.Вставить("НачальныйОтбор", Новый Структура); - КонецЕсли; - Если ТипЗнч(ФормаПараметрыОтбор.НачальныйОтбор) <> Тип("Структура") Тогда - ФормаПараметрыОтбор.НачальныйОтбор = Новый Структура; - КонецЕсли; - Если Не ФормаПараметрыОтбор.НачальныйОтбор.Свойство("НачальныйОтборУстановлен") Тогда - ФормаПараметрыОтбор.НачальныйОтбор.Вставить("НачальныйОтборУстановлен", - Не ЗначениеЗаполнено(ФормаПараметрыОтбор.НачальныйОтбор) - И ФормаПараметрыОтбор.Количество() = 1); - КонецЕсли; - - НедоступныеПараметры = Новый Структура; - Если Вариант = "ПодробныеПраваРолиНаОбъектМетаданных" Тогда - НедоступныеПараметры = Новый Структура("УровеньДоступа, - |ПраваНаРеквизиты, ПоказыватьПраваНеинтерфейсныхПодсистем, - |НеПредупреждатьОБольшомРазмереОтчета"); - Если УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Тогда - НедоступныеПараметры.Вставить("Роль"); - НедоступныеПараметры.Вставить("ПоказыватьОбъектыИРолиБезПрав"); - Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда - НовыеНастройкиКД.ДополнительныеСвойства.Вставить("УстановленОтборПоПрофилю"); - КонецЕсли; - Иначе - НедоступныеПараметры.Вставить("Профиль"); + НедоступныеПараметры = Новый Структура("Право,Профиль"); + Иначе + Если Не ФормаПараметрыОтбор.Свойство("НачальныйОтбор") Тогда + ФормаПараметрыОтбор.Вставить("НачальныйОтбор", Новый Структура); + КонецЕсли; + Если ТипЗнч(ФормаПараметрыОтбор.НачальныйОтбор) <> Тип("Структура") Тогда + ФормаПараметрыОтбор.НачальныйОтбор = Новый Структура; + КонецЕсли; + Если Не ФормаПараметрыОтбор.НачальныйОтбор.Свойство("НачальныйОтборУстановлен") Тогда + ФормаПараметрыОтбор.НачальныйОтбор.Вставить("НачальныйОтборУстановлен", + Не ЗначениеЗаполнено(ФормаПараметрыОтбор.НачальныйОтбор) + И ФормаПараметрыОтбор.Количество() = 1); КонецЕсли; - ИначеЕсли Вариант = "ПраваРолейНаОбъектМетаданных" Тогда - НедоступныеПараметры = Новый Структура("ПраваНаРеквизиты,Право, - |НеПредупреждатьОБольшомРазмереОтчета"); - - ИначеЕсли Вариант = "ПраваРолиНаОбъектыМетаданных" Тогда - НедоступныеПараметры = Новый Структура("Право"); + Если Вариант = "ПодробныеПраваРолейНаОбъектМетаданных" Тогда + НедоступныеПараметры = Новый Структура("УровеньДоступа, + |ПраваНаРеквизиты, ПоказыватьПраваНеинтерфейсныхПодсистем, + |НеПредупреждатьОБольшомРазмереОтчета"); + Если УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Тогда + НедоступныеПараметры.Вставить("Роль"); + НедоступныеПараметры.Вставить("ПоказыватьОбъектыИРолиБезПрав"); + Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда + НовыеНастройкиКД.ДополнительныеСвойства.Вставить("УстановленОтборПоПрофилю"); + КонецЕсли; + Иначе + НедоступныеПараметры.Вставить("Профиль"); + КонецЕсли; + + ИначеЕсли Вариант = "ПраваРолейИПрофилейНаОбъектМетаданных" Тогда + НедоступныеПараметры = Новый Структура("ПраваНаРеквизиты,Право, + |НеПредупреждатьОБольшомРазмереОтчета"); + + ИначеЕсли Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда + Если УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Тогда + НедоступныеПараметры.Вставить("Роль"); + КонецЕсли; + НедоступныеПараметры.Вставить("Право"); + КонецЕсли; КонецЕсли; - Если Не ФормаПараметрыОтбор.НачальныйОтбор.НачальныйОтборУстановлен Тогда + Если ФормаПараметрыОтбор.Свойство("НачальныйОтбор") + И Не ФормаПараметрыОтбор.НачальныйОтбор.НачальныйОтборУстановлен Тогда + ВсеПараметры = Новый Структура("ОбъектМетаданных, Роль, ПраваНаРеквизиты, Профиль, |УровеньДоступа, Право, ПоказыватьОбъектыИРолиБезПрав, ФорматИмени, |ПоказыватьПраваНеинтерфейсныхПодсистем, НеПредупреждатьОБольшомРазмереОтчета"); @@ -152,21 +168,23 @@ Для Каждого ОписаниеПараметра Из ВсеПараметры Цикл Если Не ФормаПараметрыОтбор.Свойство(ОписаниеПараметра.Ключ) Тогда - Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда - ВыключитьПараметр(НовыеНастройкиКД.ПараметрыДанных, ОписаниеПараметра.Ключ, - НедоступныеПараметры.Свойство(ОписаниеПараметра.Ключ)); - КонецЕсли; - ВыключитьПараметр(НовыеПользовательскиеНастройкиКД, ОписаниеПараметра.Ключ, - НедоступныеПараметры.Свойство(ОписаниеПараметра.Ключ)); + ВыключитьПараметр(ОписаниеПараметра.Ключ, НедоступныеПараметры, + НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД); КонецЕсли; КонецЦикла; - Если ФормаПараметрыОтбор.НачальныйОтбор.НачальныйОтборУстановлен Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульОтчетыСервер = ОбщегоНазначения.ОбщийМодуль("ОтчетыСервер"); + МодульОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКомпоновкиДанных, КлючСхемы); + КонецЕсли; + + Если Не ФормаПараметрыОтбор.Свойство("НачальныйОтбор") + Или ФормаПараметрыОтбор.НачальныйОтбор.НачальныйОтборУстановлен Тогда Возврат; КонецЕсли; ФормаПараметрыОтбор.НачальныйОтбор.НачальныйОтборУстановлен = Истина; - Если Вариант = "ПраваРолиНаОбъектыМетаданных" + Если Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" И ФормаПараметрыОтбор.НачальныйОтбор.Свойство("Профиль") Тогда УстановитьРежимОтображения("Профиль", РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ, @@ -204,22 +222,22 @@ Если Вариант = "ПраваРолей" Тогда ВариантНаименование = НСтр("ru = 'Права ролей'"); - ИначеЕсли Вариант = "ПраваРолиНаОбъектыМетаданных" Тогда + ИначеЕсли Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда Если УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Или Не ПараметрИспользуется(КомпоновщикНастроек.ПользовательскиеНастройки, "Роль") Тогда ВариантНаименование = НСтр("ru = 'Права профилей на объекты метаданных'"); Иначе - ВариантНаименование = НСтр("ru = 'Права роли на объекты метаданных'"); + ВариантНаименование = НСтр("ru = 'Права роли и профилей на объекты метаданных'"); КонецЕсли; - ИначеЕсли Вариант = "ПраваРолейНаОбъектМетаданных" Тогда - ВариантНаименование = НСтр("ru = 'Права ролей на объект метаданных'"); + ИначеЕсли Вариант = "ПраваРолейИПрофилейНаОбъектМетаданных" Тогда + ВариантНаименование = НСтр("ru = 'Права ролей и профилей на объект метаданных'"); - ИначеЕсли Вариант = "ПодробныеПраваРолиНаОбъектМетаданных" Тогда + ИначеЕсли Вариант = "ПодробныеПраваРолейНаОбъектМетаданных" Тогда Если УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Тогда ВариантНаименование = НСтр("ru = 'Подробные права профилей на объект метаданных'"); Иначе - ВариантНаименование = НСтр("ru = 'Подробные права роли на объект метаданных'"); + ВариантНаименование = НСтр("ru = 'Подробные права ролей на объект метаданных'"); КонецЕсли; КонецЕсли; @@ -252,7 +270,7 @@ Вариант = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.КлючПредопределенногоВарианта; Если Вариант <> "ПраваРолей" - И Вариант <> "ПраваРолиНаОбъектыМетаданных" Тогда + И Вариант <> "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда Возврат; КонецЕсли; @@ -262,7 +280,7 @@ Возврат; КонецЕсли; - Результат = ПраваРолей(Истина, Вариант = "ПраваРолиНаОбъектыМетаданных", Истина); + Результат = ПраваРолей(Истина, Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных", Истина); КоличествоСтрок = Результат.Иерархия.Количество(); КоличествоКолонок = Результат.Роли.Количество(); @@ -381,22 +399,22 @@ ВнешниеНаборыДанных = Новый Структура; Вариант = НастройкиКомпоновщика.ДополнительныеСвойства.КлючПредопределенногоВарианта; - ПраваРолей = ПраваРолей(Вариант = "ПраваРолей" Или Вариант = "ПраваРолиНаОбъектыМетаданных", - Вариант = "ПраваРолиНаОбъектыМетаданных"); + ПраваРолей = ПраваРолей(Вариант = "ПраваРолей" Или Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных", + Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных"); ВнешниеНаборыДанных.Вставить("Иерархия", ПраваРолей.Иерархия); ВнешниеНаборыДанных.Вставить("Права", ПраваРолей.Права); ВнешниеНаборыДанных.Вставить("Роли", ПраваРолей.Роли); ПрофилиВместоРолей = НастройкиКомпоновщика.ДополнительныеСвойства.Свойство("УстановленОтборПоПрофилю"); ВнешниеНаборыДанных.Вставить("ПодробныеПраваОбъекта", ПодробныеПраваОбъекта( - Вариант = "ПодробныеПраваРолиНаОбъектМетаданных", + Вариант = "ПодробныеПраваРолейНаОбъектМетаданных", ПрофилиВместоРолей)); ВнешниеНаборыДанных.Вставить("ПраваРолейНаОбъект", ПраваРолейНаОбъект( - Вариант = "ПраваРолейНаОбъектМетаданных")); + Вариант = "ПраваРолейИПрофилейНаОбъектМетаданных")); ВнешниеНаборыДанных.Вставить("ОтборРоли", ОтборРоли( - Вариант = "ПраваРолиНаОбъектыМетаданных")); + Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных")); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных , ДанныеРасшифровки); @@ -410,19 +428,24 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Для процедуры ПриКомпоновкеРезультата. Процедура ЗавершитьВывод(ДокументРезультат, ДанныеРасшифровки, Вариант, ПрофилиВместоРолей, ВысотаШапки) Картинки = Картинки(); НетЛинии = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); // АПК:163-выкл - №598.1 Использование допустимо, так как влияет на смысл. - ТекстЕстьОграничение = НСтр("ru = 'Доступно не всё'"); + ТекстЕстьОграничение = НСтр("ru = 'Есть ограничение'"); // АПК:163-вкл. Если Вариант = "ПраваРолей" - Или Вариант = "ПраваРолиНаОбъектыМетаданных" Тогда + Или Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда ПервыйЗаголовокТаблицы = НСтр("ru = 'Вид объектов метаданных'"); - ИначеЕсли Вариант = "ПодробныеПраваРолиНаОбъектМетаданных" Тогда + ИначеЕсли Вариант = "ПодробныеПраваРолейНаОбъектМетаданных" Тогда ПервыйЗаголовокТаблицы = ?(ПрофилиВместоРолей, НСтр("ru = 'Профиль'"), НСтр("ru = 'Роль'")); Иначе ПервыйЗаголовокТаблицы = НСтр("ru = 'Роль'"); @@ -432,7 +455,7 @@ ШиринаТаблицы = ДокументРезультат.ШиринаТаблицы; ТипИдентификаторРасшифровкиКомпоновкиДанных = Тип("ИдентификаторРасшифровкиКомпоновкиДанных"); НачальноеЗначениеЕстьПравоСОграничением = - Вариант = "ПодробныеПраваРолиНаОбъектМетаданных"; + Вариант = "ПодробныеПраваРолейНаОбъектМетаданных"; ТекстПравоРазрешено = НСтр("ru = '✔'"); Для НомерСтроки = 1 По ВысотаТаблицы Цикл @@ -452,7 +475,7 @@ Область.Текст = ПервыйЗаголовокТаблицы; Если ЗначениеЗаполнено(ВысотаШапки) Тогда Если Вариант = "ПраваРолей" - Или Вариант = "ПраваРолиНаОбъектыМетаданных" Тогда + Или Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда ОбластьНиже = ДокументРезультат.Область(НомерСтроки + 1, НомерКолонки); Если ЗначениеЗаполнено(Область.ВысотаСтроки) И ЗначениеЗаполнено(ОбластьНиже.ВысотаСтроки) Тогда @@ -508,9 +531,75 @@ КонецПроцедуры -#КонецОбласти +// Для процедур ПередЗагрузкойНастроекВКомпоновщик. +Процедура СкрытьЛишниеПоляДанных(Вариант, ФормаПараметрыОтбор, НастройкиКД, ПользовательскиеНастройкиКД) + + Иерархия = Новый Массив; + Права = Новый Массив; + Роли = Новый Массив; + ОтборРоли = Новый Массив; + + ПодробныеПраваОбъекта = Новый Массив; + ПраваРолейНаОбъект = Новый Массив; + + Если Вариант = "ПодробныеПраваРолейНаОбъектМетаданных" Тогда + ПодробныеПраваОбъекта = "*"; + ПолеИмяРоли = СхемаКомпоновкиДанных.НаборыДанных.ПодробныеПраваОбъекта.Поля.Найти("ИмяРоли2"); + ПолеПредставлениеРоли = СхемаКомпоновкиДанных.НаборыДанных.ПодробныеПраваОбъекта.Поля.Найти("ПредставлениеРоли2"); + ПолеПрофиль = СхемаКомпоновкиДанных.НаборыДанных.ПодробныеПраваОбъекта.Поля.Найти("Профиль2"); + Если УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Тогда + ПолеИмяРоли.Заголовок = НСтр("ru = 'Имя профиля'"); + ПолеПредставлениеРоли.Заголовок = НСтр("ru = 'Представление профиля'"); + ПолеПрофиль.Заголовок = НСтр("ru = 'Профиль'"); + Иначе + ПолеИмяРоли.Заголовок = НСтр("ru = 'Имя роли'"); + ПолеПредставлениеРоли.Заголовок = НСтр("ru = 'Представление роли'"); + ПолеПрофиль.Заголовок = НСтр("ru = 'Профиль (не используется)'"); + КонецЕсли; + + ИначеЕсли Вариант = "ПраваРолейИПрофилейНаОбъектМетаданных" Тогда + ПраваРолейНаОбъект = "*"; + Иначе + Иерархия = "*"; + Права = "*"; + Роли = Новый Соответствие; + ПолеЕстьПраваРоли = СхемаКомпоновкиДанных.НаборыДанных.Роли.Поля.Найти("ЕстьПраваРоли"); + ПолеКодРоли = СхемаКомпоновкиДанных.НаборыДанных.Права.Поля.Найти("КодРоли"); + Если Вариант = "ПраваРолиИПрофилейНаОбъектыМетаданных" Тогда + Роли.Вставить("ИмяРоли", Ложь); + Роли.Вставить("ПредставлениеРоли", Ложь); + ПолеКодРоли.Заголовок = НСтр("ru = 'Код профиля'"); + ПолеЕстьПраваРоли.Заголовок = НСтр("ru = 'Есть права профиля'"); + Если Не УстановленОтборПоПрофилю(ФормаПараметрыОтбор, КомпоновщикНастроек.Настройки) Тогда + ОтборРоли = "*"; + КонецЕсли; + Иначе + Роли.Вставить("Профиль4", Ложь); + ПолеКодРоли.Заголовок = НСтр("ru = 'Код роли'"); + ПолеЕстьПраваРоли.Заголовок = НСтр("ru = 'Есть права роли'"); + КонецЕсли; + КонецЕсли; + + ИсходнаяСхема = ПолучитьМакет("Макет"); + ТекущаяСхема = СхемаКомпоновкиДанных; + + СкрытьПоляДанныхКромеУказанных("Иерархия", Иерархия, ИсходнаяСхема, ТекущаяСхема); + СкрытьПоляДанныхКромеУказанных("Права", Права, ИсходнаяСхема, ТекущаяСхема); + СкрытьПоляДанныхКромеУказанных("Роли", Роли, ИсходнаяСхема, ТекущаяСхема); + СкрытьПоляДанныхКромеУказанных("ОтборРоли", ОтборРоли, ИсходнаяСхема, ТекущаяСхема); + + СкрытьПоляДанныхКромеУказанных("ПодробныеПраваОбъекта", ПодробныеПраваОбъекта, ИсходнаяСхема, ТекущаяСхема); + СкрытьПоляДанныхКромеУказанных("ПраваРолейНаОбъект", ПраваРолейНаОбъект, ИсходнаяСхема, ТекущаяСхема); + +КонецПроцедуры -#Область СлужебныеПроцедурыИФункции +// Для процедуры СкрытьЛишниеПоляДанных. +Процедура СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных, ПутиКДанным, ИсходнаяСхема, ТекущаяСхема) + + Отчеты.АнализПравДоступа.СкрытьПоляДанныхКромеУказанных(ИмяНабораДанных, + ПутиКДанным, ИсходнаяСхема, ТекущаяСхема); + +КонецПроцедуры // Для процедуры ПослеЗагрузкиНастроекВКомпоновщик. Процедура НастроитьПараметрУровеньДоступа(Настройки) @@ -525,17 +614,20 @@ Список.Добавить(01, НСтр("ru = 'Есть право'")); Список.Добавить(02, НСтр("ru = 'Использование'")); Список.Добавить(03, НСтр("ru = 'Чтение'")); - Список.Добавить(04, НСтр("ru = 'Просмотр'")); - Список.Добавить(05, НСтр("ru = 'Изменение'")); - Список.Добавить(06, НСтр("ru = 'Редактирование'")); - Список.Добавить(07, НСтр("ru = 'Добавление'")); - Список.Добавить(08, НСтр("ru = 'Интерактивное добавление'")); - Список.Добавить(09, НСтр("ru = 'Получение'")); - Список.Добавить(10, НСтр("ru = 'Установка'")); - Список.Добавить(11, НСтр("ru = 'Получение и Установка'")); - Список.Добавить(12, НСтр("ru = 'Внешний источник данных: Использование'")); - Список.Добавить(13, НСтр("ru = 'Внешний источник данных: Администрирование'")); - Список.Добавить(14, НСтр("ru = 'Внешний источник данных: Использование и Администрирование'")); + Список.Добавить(04, НСтр("ru = 'Изменение'")); + Список.Добавить(05, НСтр("ru = 'Добавление'")); + Список.Добавить(06, НСтр("ru = 'Просмотр'")); + Список.Добавить(07, НСтр("ru = 'Просмотр и Изменение'")); + Список.Добавить(08, НСтр("ru = 'Просмотр и Добавление'")); + Список.Добавить(09, НСтр("ru = 'Редактирование'")); + Список.Добавить(10, НСтр("ru = 'Редактирование и Добавление'")); + Список.Добавить(11, НСтр("ru = 'Создание'")); + Список.Добавить(12, НСтр("ru = 'Получение'")); + Список.Добавить(13, НСтр("ru = 'Установка'")); + Список.Добавить(14, НСтр("ru = 'Получение и Установка'")); + Список.Добавить(15, НСтр("ru = 'Внешний источник данных: Использование'")); + Список.Добавить(16, НСтр("ru = 'Внешний источник данных: Администрирование'")); + Список.Добавить(17, НСтр("ru = 'Внешний источник данных: Использование и Администрирование'")); ДоступныйПараметр.ДоступныеЗначения = Список; @@ -544,7 +636,7 @@ // Для процедуры ПослеЗагрузкиНастроекВКомпоновщик. Процедура НастроитьПараметрПраво(Вариант, Настройки) - Если Вариант <> "ПодробныеПраваРолиНаОбъектМетаданных" Тогда + Если Вариант <> "ПодробныеПраваРолейНаОбъектМетаданных" Тогда Возврат; КонецЕсли; @@ -571,19 +663,32 @@ ФормироватьСразу = Ложь; Иначе ЭлементНастройки.Значение = Значение; - ЭлементНастройки.Использование = Истина; + ЭлементНастройки.Использование = ИмяПараметра <> "Профиль" Или ЗначениеЗаполнено(Значение); КонецЕсли; КонецПроцедуры // Для процедуры ПередЗагрузкойНастроекВКомпоновщик. -Процедура ВыключитьПараметр(ПользовательскиеНастройки, ИмяПараметра, Недоступный = Ложь) +Процедура ВыключитьПараметр(ИмяПараметра, НедоступныеПараметры, НастройкиКД, ПользовательскиеНастройкиКД) - ЭлементНастройки = НастройкаПараметра(ПользовательскиеНастройки, ИмяПараметра); - Если ЭлементНастройки = Неопределено Тогда + Если НастройкиКД = Неопределено Тогда Возврат; КонецЕсли; + Если НедоступныеПараметры.Свойство(ИмяПараметра) Тогда + Параметр = СхемаКомпоновкиДанных.Параметры.Найти(ИмяПараметра); + Параметр.ОграничениеИспользования = Истина; + Параметр.ВключатьВДоступныеПоля = Ложь; + КонецЕсли; + + ЭлементНастройки = НастройкаПараметра(ПользовательскиеНастройкиКД, ИмяПараметра); + Если ЭлементНастройки = Неопределено Тогда + ЭлементНастройки = НастройкаПараметра(НастройкиКД.ПараметрыДанных, ИмяПараметра); + Если ЭлементНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + Если ЭлементНастройки.Использование Тогда ЭлементНастройки.Использование = Ложь; КонецЕсли; @@ -592,13 +697,13 @@ ЭлементНастройки.Значение = Ложь; КонецЕсли; - Если Недоступный Тогда - ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - КонецЕсли; - КонецПроцедуры -Процедура УстановитьРежимОтображения(ИмяПараметра, Режим, НастройкиКД, ПользовательскиеНастройки) +Процедура УстановитьРежимОтображения(ИмяПараметра, Режим, НастройкиКД, ПользовательскиеНастройкиКД) + + Если НастройкиКД = Неопределено Тогда + Возврат; + КонецЕсли; ЭлементНастройки = НастройкаПараметра(НастройкиКД.ПараметрыДанных, ИмяПараметра); @@ -606,7 +711,7 @@ ЭлементНастройки.РежимОтображения = Режим; КонецЕсли; - ЭлементНастройки = НастройкаПараметра(ПользовательскиеНастройки, ИмяПараметра); + ЭлементНастройки = НастройкаПараметра(ПользовательскиеНастройкиКД, ИмяПараметра); Если ЭлементНастройки <> Неопределено Тогда ЭлементНастройки.РежимОтображения = Режим; @@ -615,11 +720,11 @@ КонецПроцедуры // Для процедуры ВыключитьПараметр. -Функция НастройкаПараметра(ПользовательскиеНастройки, ИмяПараметра) +Функция НастройкаПараметра(ПользовательскиеНастройкиКД, ИмяПараметра) Параметр = Новый ПараметрКомпоновкиДанных(ИмяПараметра); - Для Каждого ЭлементНастройки Из ПользовательскиеНастройки.Элементы Цикл + Для Каждого ЭлементНастройки Из ПользовательскиеНастройкиКД.Элементы Цикл Свойства = Новый Структура("Параметр"); ЗаполнитьЗначенияСвойств(Свойства, ЭлементНастройки); Если Свойства.Параметр = Параметр Тогда @@ -2512,7 +2617,7 @@ НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Просмотр"; - НоваяСтрока.Уровень = 4; + НоваяСтрока.Уровень = 6; Возврат ОписаниеПрав; @@ -2548,18 +2653,17 @@ НСтр("ru = 'Установка'")); НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); - // @Access-right-1, @Access-right-2 - НоваяСтрока.Право = "Получение" + "," + "Установка"; - НоваяСтрока.Уровень = 11; + НоваяСтрока.Право = "Получение" + "," + "Установка"; // @Access-right-1, @Access-right-3 + НоваяСтрока.Уровень = 14; НоваяСтрока.ЭтоНаборПрав = Истина; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Установка"; // @Access-right-1 - НоваяСтрока.Уровень = 10; + НоваяСтрока.Уровень = 13; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Получение"; // @Access-right-1 - НоваяСтрока.Уровень = 9; + НоваяСтрока.Уровень = 12; Возврат ОписаниеПрав; @@ -2579,12 +2683,12 @@ НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Редактирование"; - НоваяСтрока.Уровень = 6; + НоваяСтрока.Уровень = 9; КонецЕсли; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Просмотр"; - НоваяСтрока.Уровень = 4; + НоваяСтрока.Уровень = 6; Возврат ОписаниеПрав; @@ -2653,7 +2757,7 @@ НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Изменение"; - НоваяСтрока.Уровень = 5; + НоваяСтрока.Уровень = 4; НоваяСтрока.ПравоСОграничением = "Изменение"; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); @@ -2730,7 +2834,7 @@ НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Просмотр"; - НоваяСтрока.Уровень = 4; + НоваяСтрока.Уровень = 6; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "Использование"; @@ -2826,6 +2930,7 @@ ДобавитьПраваПрограммнойРаботыСОбъектами(СписокПрав); + // @Access-right-1 СписокПрав.Добавить("Выполнение", НСтр("ru = 'Выполнение'")); @@ -2853,9 +2958,11 @@ ОписаниеПрав = ОписаниеПрав(); СписокПрав = ОписаниеПрав.СписокПрав; + // @Access-right-1 СписокПрав.Добавить("Использование", НСтр("ru = 'Использование'")); + // @Access-right-1 СписокПрав.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); @@ -2869,17 +2976,17 @@ НСтр("ru = 'Изменение аутентификации операционной системы сеанса'")); НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); - НоваяСтрока.Право = "Использование,Администрирование"; - НоваяСтрока.Уровень = 14; + НоваяСтрока.Право = "Использование" + "," + "Администрирование"; // @Access-right-1, @Access-right-3 + НоваяСтрока.Уровень = 17; НоваяСтрока.ЭтоНаборПрав = Истина; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); - НоваяСтрока.Право = "Администрирование"; - НоваяСтрока.Уровень = 13; + НоваяСтрока.Право = "Администрирование"; // @Access-right-1 + НоваяСтрока.Уровень = 16; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); - НоваяСтрока.Право = "Использование"; - НоваяСтрока.Уровень = 12; + НоваяСтрока.Право = "Использование"; // @Access-right-1 + НоваяСтрока.Уровень = 15; НоваяСтрока = ОписаниеПрав.УровниДоступа.Добавить(); НоваяСтрока.Право = "ИзменениеСтандартнойАутентификации"; @@ -2930,6 +3037,7 @@ Процедура ДобавитьПраваПрограммнойРаботыСОбъектами(СписокПрав, БезИзменения = Ложь, Ссылочные = Истина, СОграничением = Истина) + // @Access-right-1 СписокПрав.Добавить("Чтение", НСтр("ru = 'Чтение'"), СОграничением); @@ -2937,6 +3045,7 @@ Возврат; КонецЕсли; + // @Access-right-1 СписокПрав.Добавить("Изменение", НСтр("ru = 'Изменение'"), СОграничением); @@ -2948,6 +3057,7 @@ СписокПрав.Добавить("Добавление", НСтр("ru = 'Добавление'"), СОграничением); + // @Access-right-1 СписокПрав.Добавить("Удаление", НСтр("ru = 'Удаление'"), СОграничением); @@ -2955,6 +3065,7 @@ Процедура ДобавитьПраваИнтерактивнойРаботыСОбъектами(СписокПрав, БезИзменения = Ложь, Ссылочные = Истина, СПометкойУдаления = Истина) + // @Access-right-1 СписокПрав.Добавить("Просмотр", НСтр("ru = 'Просмотр'")); @@ -2962,6 +3073,7 @@ Возврат; КонецЕсли; + // @Access-right-1 СписокПрав.Добавить("Редактирование", НСтр("ru = 'Редактирование'")); @@ -3047,15 +3159,16 @@ Если Ссылочный И Не БезИзменения Тогда НоваяСтрока = УровниДоступа.Добавить(); - НоваяСтрока.Право = "ИнтерактивноеДобавление"; - НоваяСтрока.Уровень = 8; + НоваяСтрока.Право = "ИнтерактивноеДобавление"; // @Access-right-1 + НоваяСтрока.Уровень = 11; Если СОграничением Тогда НоваяСтрока.ПравоСОграничением = "Добавление"; // @Access-right-1 КонецЕсли; НоваяСтрока = УровниДоступа.Добавить(); - НоваяСтрока.Право = "Добавление"; // @Access-right-1 - НоваяСтрока.Уровень = 7; + НоваяСтрока.Право = "Редактирование" + "," + "Добавление"; // @Access-right-1, @Access-right-3 + НоваяСтрока.Уровень = 10; + НоваяСтрока.ЭтоНаборПрав = Истина; Если СОграничением Тогда НоваяСтрока.ПравоСОграничением = "Добавление"; // @Access-right-1 КонецЕсли; @@ -3063,32 +3176,61 @@ Если Не БезИзменения Тогда НоваяСтрока = УровниДоступа.Добавить(); - НоваяСтрока.Право = "Редактирование"; - НоваяСтрока.Уровень = 6; + НоваяСтрока.Право = "Редактирование"; // @Access-right-1 + НоваяСтрока.Уровень = 9; Если СОграничением Тогда - НоваяСтрока.ПравоСОграничением = "Изменение"; + НоваяСтрока.ПравоСОграничением = "Изменение"; // @Access-right-1 + КонецЕсли; + + Если Ссылочный Тогда + НоваяСтрока = УровниДоступа.Добавить(); + НоваяСтрока.Право = "Просмотр" + "," + "Добавление"; // @Access-right-1, @Access-right-3 + НоваяСтрока.Уровень = 8; + НоваяСтрока.ЭтоНаборПрав = Истина; + Если СОграничением Тогда + НоваяСтрока.ПравоСОграничением = "Добавление"; // @Access-right-1 + КонецЕсли; КонецЕсли; НоваяСтрока = УровниДоступа.Добавить(); - НоваяСтрока.Право = "Изменение"; - НоваяСтрока.Уровень = 5; + НоваяСтрока.Право = "Просмотр" + "," + "Изменение"; // @Access-right-1, @Access-right-3 + НоваяСтрока.Уровень = 7; + НоваяСтрока.ЭтоНаборПрав = Истина; Если СОграничением Тогда - НоваяСтрока.ПравоСОграничением = "Изменение"; + НоваяСтрока.ПравоСОграничением = "Изменение"; // @Access-right-1 КонецЕсли; КонецЕсли; НоваяСтрока = УровниДоступа.Добавить(); - НоваяСтрока.Право = "Просмотр"; - НоваяСтрока.Уровень = 4; + НоваяСтрока.Право = "Просмотр"; // @Access-right-1 + НоваяСтрока.Уровень = 6; Если СОграничением Тогда - НоваяСтрока.ПравоСОграничением = "Чтение"; + НоваяСтрока.ПравоСОграничением = "Чтение"; // @Access-right-1 + КонецЕсли; + + Если Ссылочный И Не БезИзменения Тогда + НоваяСтрока = УровниДоступа.Добавить(); + НоваяСтрока.Право = "Добавление"; // @Access-right-1 + НоваяСтрока.Уровень = 5; + Если СОграничением Тогда + НоваяСтрока.ПравоСОграничением = "Добавление"; // @Access-right-1 + КонецЕсли; + КонецЕсли; + + Если Не БезИзменения Тогда + НоваяСтрока = УровниДоступа.Добавить(); + НоваяСтрока.Право = "Изменение"; // @Access-right-1 + НоваяСтрока.Уровень = 4; + Если СОграничением Тогда + НоваяСтрока.ПравоСОграничением = "Изменение"; // @Access-right-1 + КонецЕсли; КонецЕсли; НоваяСтрока = УровниДоступа.Добавить(); - НоваяСтрока.Право = "Чтение"; + НоваяСтрока.Право = "Чтение"; // @Access-right-1 НоваяСтрока.Уровень = 3; Если СОграничением Тогда - НоваяСтрока.ПравоСОграничением = "Чтение"; + НоваяСтрока.ПравоСОграничением = "Чтение"; // @Access-right-1 КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Reports/ПраваРолей/Templates/Макет/Template.dcs b/SSL/src/Reports/ПраваРолей/Templates/Макет/Template.dcs index 2f901d59a..748a58d7e 100644 --- a/SSL/src/Reports/ПраваРолей/Templates/Макет/Template.dcs +++ b/SSL/src/Reports/ПраваРолей/Templates/Макет/Template.dcs @@ -15,6 +15,18 @@ Код родителя + + true + true + true + true + + + true + true + true + true + xs:string @@ -157,6 +169,18 @@ Код элемента + + true + true + true + true + + + true + true + true + true + xs:string @@ -198,6 +222,16 @@ Уровень доступа + + true + true + true + + + true + true + true + xs:decimal @@ -234,6 +268,18 @@ Код роли + + true + true + true + true + + + true + true + true + true + xs:decimal @@ -296,7 +342,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Профиль (Права роли на объекты метаданных)</v8:content> + <v8:content>Профиль</v8:content> </v8:item> @@ -314,7 +360,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Имя объекта (Подробные права)</v8:content> + <v8:content>Имя объекта</v8:content> </v8:item> ВЫБОР @@ -338,7 +384,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Представление объекта (Подробные права)</v8:content> + <v8:content>Представление объекта</v8:content> </v8:item> @@ -355,7 +401,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Имя роли (Подробные права)</v8:content> + <v8:content>Имя роли</v8:content> </v8:item> ВЫБОР @@ -379,7 +425,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Представление роли (Подробные права)</v8:content> + <v8:content>Представление роли</v8:content> </v8:item> @@ -396,7 +442,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Имя права (Подробные права)</v8:content> + <v8:content>Имя права</v8:content> </v8:item> ВЫБОР @@ -420,7 +466,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Представление права (Подробные права)</v8:content> + <v8:content>Представление права</v8:content> </v8:item> @@ -437,7 +483,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Порядок права (Подробные права)</v8:content> + <v8:content>Порядок права</v8:content> </v8:item> @@ -455,7 +501,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Значение права (Подробные права)</v8:content> + <v8:content>Значение права</v8:content> </v8:item> @@ -468,7 +514,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Есть ограничение права (Подробные права)</v8:content> + <v8:content>Есть ограничение права</v8:content> </v8:item> @@ -481,7 +527,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Профиль (Подробные права)</v8:content> + <v8:content>Профиль</v8:content> </v8:item> @@ -499,7 +545,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Имя объекта (Права ролей на объект)</v8:content> + <v8:content>Имя объекта</v8:content> </v8:item> ВЫБОР @@ -523,7 +569,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Представление объекта (Права ролей на объект)</v8:content> + <v8:content>Представление объекта</v8:content> </v8:item> @@ -540,7 +586,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Имя роли (Права ролей на объект)</v8:content> + <v8:content>Имя роли</v8:content> </v8:item> ВЫБОР @@ -564,7 +610,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Представление роли (Права ролей на объект)</v8:content> + <v8:content>Представление роли</v8:content> </v8:item> @@ -581,7 +627,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Профиль (Права ролей на объект)</v8:content> + <v8:content>Профиль</v8:content> </v8:item> @@ -594,9 +640,19 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Уровень доступа (Права ролей на объект)</v8:content> + <v8:content>Уровень доступа</v8:content> </v8:item> + + true + true + true + + + true + true + true + xs:decimal @@ -612,7 +668,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Есть ограничение (Права ролей на объект)</v8:content> + <v8:content>Есть ограничение</v8:content> </v8:item> @@ -625,7 +681,7 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Без профиля (Права ролей на объект)</v8:content> + <v8:content>Без профиля</v8:content> </v8:item> @@ -643,9 +699,19 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Имя роли (Права роли на объекты метаданных)</v8:content> + <v8:content>Имя роли (заголовок)</v8:content> </v8:item> + + true + true + + + true + true + true + true + ВЫБОР КОГДА &ФорматИмениВыбранный = 1 ТОГДА ИмяРоли4 КОГДА &ФорматИмениВыбранный = 2 ТОГДА ПредставлениеРоли4 + " (" + ИмяРоли4 + ")" @@ -659,9 +725,21 @@ <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Представление роли (Права роли на объекты метаданных)</v8:content> + <v8:content>Представление роли (заголовок)</v8:content> </v8:item> + + true + true + true + true + + + true + true + true + true + ИсточникДанных1 ОтборРоли @@ -1135,7 +1213,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -1254,40 +1332,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 3 @@ -1296,51 +1340,13 @@ МаксимальнаяШирина 3 - - ВертикальноеПоложениеКартинки - Center - ЦветФона - #F0FFF0 - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center + d8p1:ПравоПросмотраФон МинимальнаяШирина @@ -1356,7 +1362,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -1378,36 +1384,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -1420,51 +1396,13 @@ МаксимальнаяШирина 12.5 - - ВертикальноеПоложениеКартинки - Center - ЦветФона - #FFFFE0 - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center + d8p1:ПравоРедактированияФон МинимальнаяШирина @@ -1480,7 +1418,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -1502,36 +1440,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -1544,10 +1452,6 @@ МаксимальнаяШирина 5 - - ВертикальноеПоложениеКартинки - Center - @@ -1564,18 +1468,6 @@ ОбъединятьПоГоризонтали true - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - @@ -1598,41 +1490,7 @@ ЦветФона - #FFE4E1 - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center + d8p1:ПравоСозданияФон МинимальнаяШирина @@ -1648,7 +1506,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -1670,36 +1528,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -1712,50 +1540,12 @@ МаксимальнаяШирина 33.625 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 3 @@ -1768,48 +1558,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -1822,56 +1574,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 12.5 @@ -1884,48 +1590,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -1938,56 +1606,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 5 @@ -2000,48 +1622,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2054,56 +1638,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 17.875 @@ -2116,48 +1654,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2170,56 +1670,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 33.625 @@ -2232,50 +1686,12 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 3 @@ -2284,10 +1700,6 @@ МаксимальнаяШирина 3 - - ВертикальноеПоложениеКартинки - Center - @@ -2302,41 +1714,7 @@ ЦветФона - #F0FFF0 - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center + d8p1:ПравоПросмотраФон МинимальнаяШирина @@ -2352,7 +1730,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -2374,36 +1752,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -2416,48 +1764,10 @@ МаксимальнаяШирина 12.5 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2466,56 +1776,10 @@ МаксимальнаяШирина 2.75 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 5 @@ -2524,48 +1788,10 @@ МаксимальнаяШирина 5 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2580,7 +1806,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -2602,36 +1828,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -2644,48 +1840,10 @@ МаксимальнаяШирина 17.875 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2700,7 +1858,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -2722,36 +1880,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -2764,50 +1892,12 @@ МаксимальнаяШирина 33.625 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 3 @@ -2820,48 +1910,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2874,56 +1926,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 12.5 @@ -2936,48 +1942,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -2990,56 +1958,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 5 @@ -3052,48 +1974,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -3106,56 +1990,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 17.875 @@ -3168,48 +2006,10 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -3222,56 +2022,10 @@ МинимальнаяВысота 4.25 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 33.625 @@ -3284,50 +2038,12 @@ МинимальнаяВысота 4.25 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 3 @@ -3336,44 +2052,10 @@ МаксимальнаяШирина 3 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - МинимальнаяШирина 2.75 @@ -3382,52 +2064,10 @@ МаксимальнаяШирина 2.75 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - МинимальнаяШирина 12.5 @@ -3440,36 +2080,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - МинимальнаяШирина 2.75 @@ -3478,56 +2088,10 @@ МаксимальнаяШирина 2.75 - - РазмерКартинки - RealSize - - - ВертикальноеПоложениеКартинки - Center - - - ГоризонтальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 5 @@ -3536,48 +2100,10 @@ МаксимальнаяШирина 5 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -3592,7 +2118,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -3614,36 +2140,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -3656,48 +2152,10 @@ МаксимальнаяШирина 17.875 - - ВертикальноеПоложениеКартинки - Center - - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - - - ВертикальноеПоложение - Center - МинимальнаяШирина 2.75 @@ -3712,7 +2170,7 @@ РазмерКартинки - RealSize + AutoSize ВертикальноеПоложениеКартинки @@ -3734,36 +2192,6 @@ - - СтильГраницы - - None - - - СтильГраницы.Слева - - None - - - - СтильГраницы.Сверху - - None - - - - СтильГраницы.Справа - - None - - - - СтильГраницы.Снизу - - None - - - ВертикальноеПоложение Center @@ -3776,10 +2204,294 @@ МаксимальнаяШирина 33.625 + + + + + + + + МинимальнаяШирина + 3 + + + МаксимальнаяШирина + 3 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 12.5 + + + МаксимальнаяШирина + 12.5 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 5 + + + МаксимальнаяШирина + 5 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 17.875 + + + МаксимальнаяШирина + 17.875 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + МинимальнаяВысота + 4.25 + + + + + + + МинимальнаяШирина + 33.625 + + + МаксимальнаяШирина + 33.625 + + + МинимальнаяВысота + 4.25 + + + + + + + + + МинимальнаяШирина + 3 + + + МаксимальнаяШирина + 3 + + + + + + + ЦветФона + d8p1:ПравоПросмотраФон + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + Картинка + + + + РазмерКартинки + AutoSize + ВертикальноеПоложениеКартинки Center + + ГоризонтальноеПоложениеКартинки + Center + + + + + + + + ru + - просмотр и программное чтение, изменение (R - чтение, U - изменение, I - добавление) + + + + + + ВертикальноеПоложение + Center + + + МинимальнаяШирина + 12.5 + + + МаксимальнаяШирина + 12.5 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + + + + + МинимальнаяШирина + 5 + + + МаксимальнаяШирина + 5 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + + + + + МинимальнаяШирина + 17.875 + + + МаксимальнаяШирина + 17.875 + + + + + + + МинимальнаяШирина + 2.75 + + + МаксимальнаяШирина + 2.75 + + + + + + + МинимальнаяШирина + 33.625 + + + МаксимальнаяШирина + 33.625 + @@ -3795,12 +2507,8 @@ - МинимальнаяШирина - 18.375 - - - МаксимальнаяШирина - 18.375 + Расшифровка + ПолноеИмяОбъекта @@ -3810,6 +2518,13 @@ ИмяОбъекта2 Представление(ИмяОбъекта2) + + ПолноеИмяОбъекта + + ПолноеИмяОбъекта + ИмяОбъекта2 + +